feat(REQ-3982) - 调整价款审批的单据校验

This commit is contained in:
wangli 2025-04-28 18:30:50 +08:00
parent f7bacb2833
commit b19032e3d4

View File

@ -1523,10 +1523,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
AssertUtil.isTrue(req.getAmountChange().compareTo(maxAmount) <= 0 && req.getAmountChange().compareTo(minAmount) >= 0, "金额变化超出范围");
}
// 关联单据合法性
validRelationOrder(req.getRelationOrderMap(), req.getRelationWorkspaceId(), req.getType());
validRelationOrder(req.getRelationOrderMap(), req.getRelationWorkspaceId(), req.getType(), visaRecord.getId());
}
private void validRelationOrder(Map<String, List<VisaChangeTempCreateReq.OrderSimpleModel>> relationOrderMap, Long workspaceId, VisaTypeEnum type) {
private void validRelationOrder(Map<String, List<VisaChangeTempCreateReq.OrderSimpleModel>> relationOrderMap, Long workspaceId, VisaTypeEnum type, Long visaId) {
if (CollUtil.isNotEmpty(relationOrderMap)) {
relationOrderMap.forEach((key, value) -> {
if (CollectionUtils.isNotEmpty(value)) {
@ -1548,7 +1548,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
queryOrderToBasicReq.setPageSize(taskNos.size());
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
AssertUtil.isTrue(CollectionUtils.isNotEmpty(taskOrders) && taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
validTaskBillIfRelated(taskNos, type);
validTaskBillIfRelated(taskNos, type, visaId);
}
} else if (Objects.equals(VisaBillTypeEnum.RECTIFY.name(), key)) {
/*整改单*/
@ -1563,7 +1563,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
.build();
List<RectifyOrderResp> rectifyOrders = rectifyApiGateway.listRectifyOrders(rectifyOrderReq);
AssertUtil.isTrue(CollectionUtils.isNotEmpty(rectifyOrders) && rectifyOrders.size() == billIds.size(), "关联整改单单据不存在,请检查后重试");
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, type);
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, type, visaId);
}
} else if (Objects.equals(VisaBillTypeEnum.DESIGN_VISA.name(), key)) {
/*变更单*/
@ -1580,7 +1580,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), workspaceId), "关联的单据所属项目不匹配");
AssertUtil.isTrue(VisaStatusEnum.COMPLETED.equals(r.getStatus()), String.format("%s单据%s状态为%s不允许被关联", VisaBillTypeEnum.DESIGN_VISA.getDesc(), r.getNo(), r.getStatus().getDesc()));
});
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, type);
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, type, visaId);
}
} else {
throw new ServiceException("不支持的关联单据类型");
@ -1598,12 +1598,13 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
.one();
}
private void validBillIfRelated(VisaBillTypeEnum billType, List<String> value, VisaTypeEnum visaType) {
private void validBillIfRelated(VisaBillTypeEnum billType, List<String> value, VisaTypeEnum visaType, Long visaId) {
AssertUtil.notNull(billType, "关联单据类型不能为空");
AssertUtil.notEmpty(value, "关联单据Id不能为空");
AssertUtil.notNull(visaType, "单据类型不能为空");
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(billType, value);
mainBill.stream()
.filter(i -> !Objects.equals(visaId, i.getVisaId()))
.collect(Collectors.groupingBy(ChangeRecordBill::getBillId))
.forEach((k, v) -> v.stream()
.filter(m -> Objects.equals(m.getVisaType(), visaType))
@ -1614,7 +1615,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
}));
}
private void validTaskBillIfRelated(List<String> taskNos, VisaTypeEnum visaType) {
private void validTaskBillIfRelated(List<String> taskNos, VisaTypeEnum visaType, Long visaId) {
AssertUtil.notEmpty(taskNos, "关联单据Id不能为空");
AssertUtil.notNull(visaType, "单据类型不能为空");
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(VisaBillTypeEnum.TASK, taskNos);
@ -1622,6 +1623,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
return;
}
mainBill.stream()
.filter(i -> !Objects.equals(visaId, i.getVisaId()))
.collect(Collectors.groupingBy(ChangeRecordBill::getBillNo))
.forEach((k, v) -> v.stream()
.filter(m -> Objects.equals(m.getVisaType(), visaType))
@ -2182,7 +2184,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
private void check(VisaPayApproveCreateReq req, ChangeRecord visa) {
// 验证单据
validRelationOrder(req.getRelationOrderMap(), visa.getRelationWorkspaceId(), visa.getType());
validRelationOrder(req.getRelationOrderMap(), visa.getRelationWorkspaceId(), visa.getType(), visa.getId());
// 校验是否已经发起过价款申请审批中和已通过
List<BpmnProcessInstanceResultEnum> checkResults = Lists.newArrayList(PROCESSING, APPROVED);
boolean checkResult = StringUtils.hasText(visa.getApprovalIdPay()) && checkResults.contains(BpmnProcessInstanceResultEnum.valueOfStatus(visa.getApprovalStatusPay()));