|
...
|
...
|
@@ -224,7 +224,8 @@ public class ContractDistributorStandardServiceImpl extends |
|
224
|
224
|
public List<ContractDistributorStandard> query(QueryContractDistributorStandardVo vo) {
|
|
225
|
225
|
|
|
226
|
226
|
List<ContractDistributorStandard> datas = getBaseMapper().query(vo);
|
|
227
|
|
- CollectionUtils.emptyIfNull(datas).forEach(this::fillContractOperationPermissions);
|
|
|
227
|
+ CollectionUtils.emptyIfNull(datas).forEach(data -> data.setCanSplit(isCanSplit(data)));
|
|
|
228
|
+ fillCanPriceLock(datas);
|
|
228
|
229
|
return datas;
|
|
229
|
230
|
}
|
|
230
|
231
|
|
|
...
|
...
|
@@ -245,7 +246,7 @@ public class ContractDistributorStandardServiceImpl extends |
|
245
|
246
|
}
|
|
246
|
247
|
data.setCanEdit(canEdit);
|
|
247
|
248
|
fillRemainingQuantity(data);
|
|
248
|
|
- fillContractOperationPermissions(data);
|
|
|
249
|
+ fillCanPriceLock(data);
|
|
249
|
250
|
|
|
250
|
251
|
// 获取当前人员的待办任务数据
|
|
251
|
252
|
List<FlowTaskDto> flowTaskList = flowTaskWrapperMapper.queryTodoList(new QueryTodoTaskListVo(), SecurityUtil.getCurrentUser().getId());
|
|
...
|
...
|
@@ -316,50 +317,43 @@ public class ContractDistributorStandardServiceImpl extends |
|
316
|
317
|
}
|
|
317
|
318
|
|
|
318
|
319
|
/**
|
|
319
|
|
- * 填充合同操作权限字段
|
|
|
320
|
+ * 批量回填是否可锁价
|
|
320
|
321
|
*
|
|
321
|
|
- * @param data 合同
|
|
|
322
|
+ * @param datas 合同列表
|
|
322
|
323
|
*/
|
|
323
|
|
- private void fillContractOperationPermissions(ContractDistributorStandard data) {
|
|
324
|
|
- if (data == null) {
|
|
|
324
|
+ private void fillCanPriceLock(List<ContractDistributorStandard> datas) {
|
|
|
325
|
+ if (CollectionUtils.isEmpty(datas)) {
|
|
325
|
326
|
return;
|
|
326
|
327
|
}
|
|
327
|
|
- data.setCanSplit(isCanSplit(data));
|
|
328
|
|
- data.setCanCreateChange(isCanCreateChange(data));
|
|
329
|
|
- data.setCanPriceLock(isCanPriceLock(data));
|
|
330
|
|
- data.setCanSpecLock(isCanSpecLock(data));
|
|
331
|
|
- data.setCanCreateSpecLockDelay(isCanCreateSpecLockDelay(data));
|
|
|
328
|
+
|
|
|
329
|
+ List<ContractDistributorStandard> inventoryContracts = CollectionUtils.emptyIfNull(datas).stream()
|
|
|
330
|
+ .filter(Objects::nonNull)
|
|
|
331
|
+ .filter(this::isInventoryContract)
|
|
|
332
|
+ .collect(Collectors.toList());
|
|
|
333
|
+ if (CollectionUtils.isEmpty(inventoryContracts)) {
|
|
|
334
|
+ CollectionUtils.emptyIfNull(datas).stream()
|
|
|
335
|
+ .filter(Objects::nonNull)
|
|
|
336
|
+ .forEach(data -> data.setCanPriceLock(false));
|
|
|
337
|
+ return;
|
|
|
338
|
+ }
|
|
|
339
|
+
|
|
|
340
|
+ CollectionUtils.emptyIfNull(datas).stream()
|
|
|
341
|
+ .filter(Objects::nonNull)
|
|
|
342
|
+ .forEach(data -> data.setCanPriceLock(
|
|
|
343
|
+ isCanPriceLock(data)));
|
|
332
|
344
|
}
|
|
333
|
345
|
|
|
334
|
346
|
/**
|
|
335
|
|
- * 判断是否可发起合同变更
|
|
|
347
|
+ * 回填是否可锁价
|
|
336
|
348
|
*
|
|
337
|
349
|
* @param data 合同
|
|
338
|
|
- * @return 是否可发起合同变更
|
|
339
|
350
|
*/
|
|
340
|
|
- private boolean isCanCreateChange(ContractDistributorStandard data) {
|
|
341
|
|
- if (data == null || StringUtils.isBlank(data.getType()) || StringUtils.isBlank(data.getStatus())) {
|
|
342
|
|
- return false;
|
|
343
|
|
- }
|
|
344
|
|
- if (hasUnfinishedContractChange(data) || hasUnfinishedSpecLockDelay(data)) {
|
|
345
|
|
- return false;
|
|
346
|
|
- }
|
|
347
|
|
- if ("DISTRIB_STD".equals(data.getType())
|
|
348
|
|
- || "DRAFT_DIST_AGMT".equals(data.getType())
|
|
349
|
|
- || "INTL_STD_CONTRACT".equals(data.getType())
|
|
350
|
|
- || "INTL_OPEN_SPEC_AGMT".equals(data.getType())
|
|
351
|
|
- || "PROCESS_STD_AGMT".equals(data.getType())) {
|
|
352
|
|
- return "STANDARD".equals(data.getStatus()) && CustomerDevelopStatus.PASS.name().equals(data.getStandardApproved());
|
|
353
|
|
- }
|
|
354
|
|
- if ("DIST_STOCK_CONTRACT".equals(data.getType()) || "INTL_INVENTORY_AGMT".equals(data.getType())) {
|
|
355
|
|
- if ("FORMAL".equals(data.getStatus())) {
|
|
356
|
|
- return CustomerDevelopStatus.PASS.name().equals(data.getFormalApproved());
|
|
357
|
|
- }
|
|
358
|
|
- if ("STANDARD".equals(data.getStatus())) {
|
|
359
|
|
- return CustomerDevelopStatus.PASS.name().equals(data.getStandardApproved());
|
|
360
|
|
- }
|
|
|
351
|
+ private void fillCanPriceLock(ContractDistributorStandard data) {
|
|
|
352
|
+ if (data == null || StringUtils.isBlank(data.getId())) {
|
|
|
353
|
+ return;
|
|
361
|
354
|
}
|
|
362
|
|
- return false;
|
|
|
355
|
+
|
|
|
356
|
+ data.setCanPriceLock(isCanPriceLock(data));
|
|
363
|
357
|
}
|
|
364
|
358
|
|
|
365
|
359
|
/**
|
|
...
|
...
|
@@ -369,111 +363,24 @@ public class ContractDistributorStandardServiceImpl extends |
|
369
|
363
|
* @return 是否可锁价
|
|
370
|
364
|
*/
|
|
371
|
365
|
private boolean isCanPriceLock(ContractDistributorStandard data) {
|
|
372
|
|
- if (data == null) {
|
|
373
|
|
- return false;
|
|
374
|
|
- }
|
|
375
|
|
- if (!"DIST_STOCK_CONTRACT".equals(data.getType()) && !"INTL_INVENTORY_AGMT".equals(data.getType())) {
|
|
376
|
|
- return false;
|
|
377
|
|
- }
|
|
378
|
|
- if (!"FORMAL".equals(data.getStatus())) {
|
|
379
|
|
- return false;
|
|
380
|
|
- }
|
|
381
|
|
- if (!CustomerDevelopStatus.PASS.name().equals(data.getFormalApproved())) {
|
|
382
|
|
- return false;
|
|
383
|
|
- }
|
|
384
|
|
- if (Boolean.TRUE.equals(data.getPriceSpecLocked())) {
|
|
385
|
|
- return false;
|
|
386
|
|
- }
|
|
387
|
|
- if (hasUnfinishedContractChange(data)) {
|
|
388
|
|
- return false;
|
|
389
|
|
- }
|
|
390
|
|
- Wrapper<PurchaseOrderInfo> orderInfoWrapper = Wrappers.lambdaQuery(PurchaseOrderInfo.class)
|
|
391
|
|
- .eq(PurchaseOrderInfo::getContractId, data.getId())
|
|
392
|
|
- .eq(PurchaseOrderInfo::getType, "PRODUCTION")
|
|
393
|
|
- .eq(PurchaseOrderInfo::getExamineStatus, CustomerDevelopStatus.PASS.name());
|
|
394
|
|
- return purchaseOrderInfoService.count(orderInfoWrapper) > 0;
|
|
395
|
|
- }
|
|
396
|
|
-
|
|
397
|
|
- /**
|
|
398
|
|
- * 判断是否可锁规
|
|
399
|
|
- *
|
|
400
|
|
- * @param data 合同
|
|
401
|
|
- * @return 是否可锁规
|
|
402
|
|
- */
|
|
403
|
|
- private boolean isCanSpecLock(ContractDistributorStandard data) {
|
|
404
|
|
- if (data == null) {
|
|
405
|
|
- return false;
|
|
406
|
|
- }
|
|
407
|
|
- if (!"DRAFT_DIST_AGMT".equals(data.getType()) && !"INTL_OPEN_SPEC_AGMT".equals(data.getType())) {
|
|
408
|
|
- return false;
|
|
409
|
|
- }
|
|
410
|
|
- if (!"STANDARD".equals(data.getStatus())) {
|
|
411
|
|
- return false;
|
|
412
|
|
- }
|
|
413
|
|
- if (!CustomerDevelopStatus.PASS.name().equals(data.getStandardApproved())) {
|
|
|
366
|
+ if (!isInventoryContract(data)) {
|
|
414
|
367
|
return false;
|
|
415
|
368
|
}
|
|
416
|
369
|
if (Boolean.TRUE.equals(data.getPriceSpecLocked())) {
|
|
417
|
370
|
return false;
|
|
418
|
371
|
}
|
|
419
|
|
- return !hasUnfinishedContractChange(data);
|
|
420
|
|
- }
|
|
421
|
|
-
|
|
422
|
|
- /**
|
|
423
|
|
- * 判断是否可发起锁规延期申请
|
|
424
|
|
- *
|
|
425
|
|
- * @param data 合同
|
|
426
|
|
- * @return 是否可发起锁规延期申请
|
|
427
|
|
- */
|
|
428
|
|
- private boolean isCanCreateSpecLockDelay(ContractDistributorStandard data) {
|
|
429
|
|
- if (!isCanSpecLock(data)) {
|
|
430
|
|
- return false;
|
|
431
|
|
- }
|
|
432
|
|
- return !hasUnfinishedSpecLockDelay(data);
|
|
433
|
|
- }
|
|
434
|
|
-
|
|
435
|
|
- /**
|
|
436
|
|
- * 是否存在未结束的合同变更
|
|
437
|
|
- *
|
|
438
|
|
- * @param data 合同
|
|
439
|
|
- * @return 是否存在未结束的合同变更
|
|
440
|
|
- */
|
|
441
|
|
- private boolean hasUnfinishedContractChange(ContractDistributorStandard data) {
|
|
442
|
|
- if (data == null) {
|
|
443
|
|
- return false;
|
|
444
|
|
- }
|
|
445
|
|
- String rootContractId = StringUtils.isBlank(data.getParentId()) ? data.getId() : data.getParentId();
|
|
446
|
|
- return contractChangeApplicationService.hasUnfinishedApplication(rootContractId);
|
|
|
372
|
+ return true;
|
|
447
|
373
|
}
|
|
448
|
374
|
|
|
449
|
375
|
/**
|
|
450
|
|
- * 是否存在未结束的锁规延期申请
|
|
|
376
|
+ * 判断是否为库存合同
|
|
451
|
377
|
*
|
|
452
|
378
|
* @param data 合同
|
|
453
|
|
- * @return 是否存在未结束的锁规延期申请
|
|
|
379
|
+ * @return 是否为库存合同
|
|
454
|
380
|
*/
|
|
455
|
|
- private boolean hasUnfinishedSpecLockDelay(ContractDistributorStandard data) {
|
|
456
|
|
- if (data == null) {
|
|
457
|
|
- return false;
|
|
458
|
|
- }
|
|
459
|
|
- String rootContractId = StringUtils.isBlank(data.getParentId()) ? data.getId() : data.getParentId();
|
|
460
|
|
- Wrapper<ContractDistributorStandard> contractWrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
|
|
461
|
|
- .select(ContractDistributorStandard::getId)
|
|
462
|
|
- .eq(ContractDistributorStandard::getId, rootContractId)
|
|
463
|
|
- .or()
|
|
464
|
|
- .eq(ContractDistributorStandard::getParentId, rootContractId);
|
|
465
|
|
- List<String> contractIds = CollectionUtils.emptyIfNull(getBaseMapper().selectList(contractWrapper))
|
|
466
|
|
- .stream()
|
|
467
|
|
- .map(ContractDistributorStandard::getId)
|
|
468
|
|
- .collect(Collectors.toList());
|
|
469
|
|
- if (!contractIds.contains(rootContractId)) {
|
|
470
|
|
- contractIds.add(rootContractId);
|
|
471
|
|
- }
|
|
472
|
|
- Wrapper<SpecLockDelayApplication> wrapper = Wrappers.lambdaQuery(SpecLockDelayApplication.class)
|
|
473
|
|
- .in(SpecLockDelayApplication::getContractId, contractIds)
|
|
474
|
|
- .notIn(SpecLockDelayApplication::getApprovalStatus,
|
|
475
|
|
- Arrays.asList(CustomerDevelopStatus.PASS.name(), CustomerDevelopStatus.CANCEL.name()));
|
|
476
|
|
- return specLockDelayApplicationMapper.selectCount(wrapper) > 0;
|
|
|
381
|
+ private boolean isInventoryContract(ContractDistributorStandard data) {
|
|
|
382
|
+ return data != null && ("DIST_STOCK_CONTRACT".equals(data.getType())
|
|
|
383
|
+ || "INTL_INVENTORY_AGMT".equals(data.getType()));
|
|
477
|
384
|
}
|
|
478
|
385
|
|
|
479
|
386
|
@OpLog(type = OtherOpLogType.class, name = "新增合同,ID:{}", params = {"#id"})
|
|
...
|
...
|
@@ -1459,9 +1366,6 @@ public class ContractDistributorStandardServiceImpl extends |
|
1459
|
1366
|
if (ObjectUtil.isNull(data)) {
|
|
1460
|
1367
|
throw new DefaultClientException("合同不存在!");
|
|
1461
|
1368
|
}
|
|
1462
|
|
- if (!isCanPriceLock(data)) {
|
|
1463
|
|
- throw new DefaultClientException("当前合同存在未结束的合同变更流程,或未满足锁价条件,不允许锁价!");
|
|
1464
|
|
- }
|
|
1465
|
1369
|
|
|
1466
|
1370
|
List<UpdateContractDistributorLineVo> lineVoList = vo.getContractDistributorLineList();
|
|
1467
|
1371
|
if (CollectionUtils.isEmpty(lineVoList)) {
|
|
...
|
...
|
@@ -1590,9 +1494,6 @@ public class ContractDistributorStandardServiceImpl extends |
|
1590
|
1494
|
if (ObjectUtil.isNull(data)) {
|
|
1591
|
1495
|
throw new DefaultClientException("合同不存在!");
|
|
1592
|
1496
|
}
|
|
1593
|
|
- if (!isCanSpecLock(data)) {
|
|
1594
|
|
- throw new DefaultClientException("当前合同存在未结束的合同变更流程,或未满足锁规条件,不允许锁规!");
|
|
1595
|
|
- }
|
|
1596
|
1497
|
|
|
1597
|
1498
|
List<UpdateContractDistributorLineVo> lineVoList = vo.getContractDistributorLineList();
|
|
1598
|
1499
|
if (CollectionUtils.isEmpty(lineVoList)) {
|
...
|
...
|
|