diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordBillService.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordBillService.java index 6cbb647f..7c97018a 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordBillService.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordBillService.java @@ -48,4 +48,12 @@ public interface ChangeRecordBillService { */ List findMainBill(VisaBillTypeEnum billType, List billIds); + /** + * 获取任务单的主单据 + * + * @param taskNos 任务单单号 + * @return 主单据信息 + */ + List findTaskMainBill(List taskNos); + } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordBillServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordBillServiceImpl.java index 25a79e72..0d82d487 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordBillServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordBillServiceImpl.java @@ -1,6 +1,5 @@ package cn.axzo.nanopart.visa.server.service.impl; -import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum; import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill; import cn.axzo.nanopart.visa.server.dto.VisaBillDto; @@ -11,10 +10,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -79,12 +80,20 @@ public class ChangeRecordBillServiceImpl extends ServiceImpl findMainBill(VisaBillTypeEnum billType, List billIds) { - AssertUtil.notNull(billType, "单据类型不能为空"); - AssertUtil.notEmpty(billIds, "单据Id不能为空"); + if (Objects.isNull(billIds) || CollectionUtils.isEmpty(billIds)) { + return Collections.emptyList(); + } return lambdaQuery().in(ChangeRecordBill::getBillId, billIds) .eq(ChangeRecordBill::getBillType, billType) .eq(ChangeRecordBill::getIsDelete, 0) - .orderByDesc(ChangeRecordBill::getUpdateAt) + .list(); + } + + @Override + public List findTaskMainBill(List taskNos) { + return lambdaQuery().in(ChangeRecordBill::getBillNo, taskNos) + .eq(ChangeRecordBill::getBillType, VisaBillTypeEnum.TASK) + .eq(ChangeRecordBill::getIsDelete, 0) .list(); } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java index fc1e8437..509ad110 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java @@ -1185,26 +1185,20 @@ public class ChangeRecordServiceImpl extends ServiceImpl { + // 关联单据数量限制 + AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(), + String.format("最多可关联%d个%s单,请重新选择", refreshableConfiguration.getVerifyVisaLimit(), VisaBillTypeEnum.valueOf(key).getDesc())); if (Objects.equals(VisaRelationFieldEnum.TASK_ORDER.name(), key)) { /*任务单*/ - // 关联单据数量限制 - AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(), - String.format("最多可关联%d个变更单,请重新选择", refreshableConfiguration.getVerifyVisaLimit())); - List billIds = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toList()); - validBillIfRelated(VisaBillTypeEnum.TASK, billIds, req.getType()); + List taskNos = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getNo).collect(Collectors.toList()); + validTaskBillIfRelated(taskNos, req.getType()); } else if (Objects.equals(VisaRelationFieldEnum.RECTIFICATION_ORDER.name(), key)) { /*整改单*/ - // 关联单据数量限制 - AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(), - String.format("最多可关联%d个变更单,请重新选择", refreshableConfiguration.getVerifyVisaLimit())); List billIds = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toList()); validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, req.getType()); } else if (Objects.equals(VisaRelationFieldEnum.VISA_ORDER.name(), key)) { /*变更单*/ AssertUtil.isTrue(VisaTypeEnum.TECHNOLOGY_APPROVED.equals(req.getType()) || VisaTypeEnum.PROJECT_VISA.equals(req.getType()), "变更单关联单据仅支持技术核定/工程签证"); - // 关联单据数量限制 - AssertUtil.isTrue(value.size() <= refreshableConfiguration.getVerifyVisaLimit(), - String.format("最多可关联%d个变更单,请重新选择", refreshableConfiguration.getVerifyVisaLimit())); // 关联单据合法性,是否存在,状态是否合法 List billIds = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toList()); List relationVisa = listByIds(billIds); @@ -1245,6 +1239,21 @@ public class ChangeRecordServiceImpl extends ServiceImpl taskNos, VisaTypeEnum visaType) { + AssertUtil.notEmpty(taskNos, "关联单据Id不能为空"); + AssertUtil.notNull(visaType, "单据类型不能为空"); + List mainBill = changeRecordBillService.findTaskMainBill(taskNos); + mainBill.stream() + .collect(Collectors.groupingBy(ChangeRecordBill::getBillNo)) + .forEach((k, v) -> v.stream() + .filter(m -> Objects.equals(m.getVisaType(), visaType)) + .findAny() + .ifPresent(m -> { + log.info("{} bill {} is related by {} visa {}", m.getBillType(), m.getBillId(), m.getVisaType(), m.getVisaId()); + throw new ServiceException(String.format("单据%s已被其他单据关联,请重新选择", m.getBillNo())); + })); + } + /** * 通过变更签证Id获取Entity *