|
...
|
...
|
@@ -216,6 +216,7 @@ public class ContractDistributorStandardServiceImpl extends |
|
216
|
216
|
|
|
217
|
217
|
List<ContractDistributorStandard> datas = getBaseMapper().query(vo);
|
|
218
|
218
|
CollectionUtils.emptyIfNull(datas).forEach(data -> data.setCanSplit(isCanSplit(data)));
|
|
|
219
|
+ fillCanPriceLock(datas);
|
|
219
|
220
|
return datas;
|
|
220
|
221
|
}
|
|
221
|
222
|
|
|
...
|
...
|
@@ -236,6 +237,7 @@ public class ContractDistributorStandardServiceImpl extends |
|
236
|
237
|
}
|
|
237
|
238
|
data.setCanEdit(canEdit);
|
|
238
|
239
|
fillRemainingQuantity(data);
|
|
|
240
|
+ fillCanPriceLock(data);
|
|
239
|
241
|
|
|
240
|
242
|
// 获取当前人员的待办任务数据
|
|
241
|
243
|
List<FlowTaskDto> flowTaskList = flowTaskWrapperMapper.queryTodoList(new QueryTodoTaskListVo(), SecurityUtil.getCurrentUser().getId());
|
|
...
|
...
|
@@ -305,6 +307,102 @@ public class ContractDistributorStandardServiceImpl extends |
|
305
|
307
|
return true;
|
|
306
|
308
|
}
|
|
307
|
309
|
|
|
|
310
|
+ /**
|
|
|
311
|
+ * 批量回填是否可锁价
|
|
|
312
|
+ *
|
|
|
313
|
+ * @param datas 合同列表
|
|
|
314
|
+ */
|
|
|
315
|
+ private void fillCanPriceLock(List<ContractDistributorStandard> datas) {
|
|
|
316
|
+ if (CollectionUtils.isEmpty(datas)) {
|
|
|
317
|
+ return;
|
|
|
318
|
+ }
|
|
|
319
|
+
|
|
|
320
|
+ List<ContractDistributorStandard> inventoryContracts = CollectionUtils.emptyIfNull(datas).stream()
|
|
|
321
|
+ .filter(Objects::nonNull)
|
|
|
322
|
+ .filter(this::isInventoryContract)
|
|
|
323
|
+ .collect(Collectors.toList());
|
|
|
324
|
+ if (CollectionUtils.isEmpty(inventoryContracts)) {
|
|
|
325
|
+ CollectionUtils.emptyIfNull(datas).stream()
|
|
|
326
|
+ .filter(Objects::nonNull)
|
|
|
327
|
+ .forEach(data -> data.setCanPriceLock(false));
|
|
|
328
|
+ return;
|
|
|
329
|
+ }
|
|
|
330
|
+
|
|
|
331
|
+ Set<String> contractIds = inventoryContracts.stream()
|
|
|
332
|
+ .map(ContractDistributorStandard::getId)
|
|
|
333
|
+ .filter(StringUtils::isNotBlank)
|
|
|
334
|
+ .collect(Collectors.toSet());
|
|
|
335
|
+ Set<String> approvedProductionOrderContractIds = Collections.emptySet();
|
|
|
336
|
+ if (CollectionUtils.isNotEmpty(contractIds)) {
|
|
|
337
|
+ Wrapper<PurchaseOrderInfo> orderInfoWrapper = Wrappers.lambdaQuery(PurchaseOrderInfo.class)
|
|
|
338
|
+ .in(PurchaseOrderInfo::getContractId, contractIds)
|
|
|
339
|
+ .eq(PurchaseOrderInfo::getType, "PRODUCTION")
|
|
|
340
|
+ .eq(PurchaseOrderInfo::getExamineStatus, "PASS");
|
|
|
341
|
+ approvedProductionOrderContractIds = CollectionUtils.emptyIfNull(purchaseOrderInfoService.list(orderInfoWrapper)).stream()
|
|
|
342
|
+ .map(PurchaseOrderInfo::getContractId)
|
|
|
343
|
+ .filter(StringUtils::isNotBlank)
|
|
|
344
|
+ .collect(Collectors.toSet());
|
|
|
345
|
+ }
|
|
|
346
|
+
|
|
|
347
|
+ Set<String> finalApprovedProductionOrderContractIds = approvedProductionOrderContractIds;
|
|
|
348
|
+ CollectionUtils.emptyIfNull(datas).stream()
|
|
|
349
|
+ .filter(Objects::nonNull)
|
|
|
350
|
+ .forEach(data -> data.setCanPriceLock(
|
|
|
351
|
+ isCanPriceLock(data, finalApprovedProductionOrderContractIds.contains(data.getId()))));
|
|
|
352
|
+ }
|
|
|
353
|
+
|
|
|
354
|
+ /**
|
|
|
355
|
+ * 回填是否可锁价
|
|
|
356
|
+ *
|
|
|
357
|
+ * @param data 合同
|
|
|
358
|
+ */
|
|
|
359
|
+ private void fillCanPriceLock(ContractDistributorStandard data) {
|
|
|
360
|
+ if (data == null || StringUtils.isBlank(data.getId())) {
|
|
|
361
|
+ return;
|
|
|
362
|
+ }
|
|
|
363
|
+
|
|
|
364
|
+ boolean hasApprovedProductionOrder = false;
|
|
|
365
|
+ if (isInventoryContract(data)) {
|
|
|
366
|
+ Wrapper<PurchaseOrderInfo> orderInfoWrapper = Wrappers.lambdaQuery(PurchaseOrderInfo.class)
|
|
|
367
|
+ .eq(PurchaseOrderInfo::getContractId, data.getId())
|
|
|
368
|
+ .eq(PurchaseOrderInfo::getType, "PRODUCTION")
|
|
|
369
|
+ .eq(PurchaseOrderInfo::getExamineStatus, "PASS");
|
|
|
370
|
+ hasApprovedProductionOrder = CollectionUtils.isNotEmpty(purchaseOrderInfoService.list(orderInfoWrapper));
|
|
|
371
|
+ }
|
|
|
372
|
+ data.setCanPriceLock(isCanPriceLock(data, hasApprovedProductionOrder));
|
|
|
373
|
+ }
|
|
|
374
|
+
|
|
|
375
|
+ /**
|
|
|
376
|
+ * 判断是否可锁价
|
|
|
377
|
+ *
|
|
|
378
|
+ * @param data 合同
|
|
|
379
|
+ * @param hasApprovedProductionOrder 是否存在已审核通过的生产订货单
|
|
|
380
|
+ * @return 是否可锁价
|
|
|
381
|
+ */
|
|
|
382
|
+ private boolean isCanPriceLock(ContractDistributorStandard data, boolean hasApprovedProductionOrder) {
|
|
|
383
|
+ if (data == null || !isInventoryContract(data)) {
|
|
|
384
|
+ return false;
|
|
|
385
|
+ }
|
|
|
386
|
+ if (Boolean.TRUE.equals(data.getPriceSpecLocked())) {
|
|
|
387
|
+ return false;
|
|
|
388
|
+ }
|
|
|
389
|
+ if (!CustomerDevelopStatus.PASS.name().equals(data.getFormalApproved())) {
|
|
|
390
|
+ return false;
|
|
|
391
|
+ }
|
|
|
392
|
+ return hasApprovedProductionOrder;
|
|
|
393
|
+ }
|
|
|
394
|
+
|
|
|
395
|
+ /**
|
|
|
396
|
+ * 判断是否为库存合同
|
|
|
397
|
+ *
|
|
|
398
|
+ * @param data 合同
|
|
|
399
|
+ * @return 是否为库存合同
|
|
|
400
|
+ */
|
|
|
401
|
+ private boolean isInventoryContract(ContractDistributorStandard data) {
|
|
|
402
|
+ return data != null && ("DIST_STOCK_CONTRACT".equals(data.getType())
|
|
|
403
|
+ || "INTL_INVENTORY_AGMT".equals(data.getType()));
|
|
|
404
|
+ }
|
|
|
405
|
+
|
|
308
|
406
|
@OpLog(type = OtherOpLogType.class, name = "新增合同,ID:{}", params = {"#id"})
|
|
309
|
407
|
@Transactional(rollbackFor = Exception.class)
|
|
310
|
408
|
@Override
|
...
|
...
|
|