feat(REQ-3300): 任务单使用单号作为唯一键
This commit is contained in:
parent
ec5eb6628e
commit
6b27021b5b
@ -48,4 +48,12 @@ public interface ChangeRecordBillService {
|
||||
*/
|
||||
List<ChangeRecordBill> findMainBill(VisaBillTypeEnum billType, List<Long> billIds);
|
||||
|
||||
/**
|
||||
* 获取任务单的主单据
|
||||
*
|
||||
* @param taskNos 任务单单号
|
||||
* @return 主单据信息
|
||||
*/
|
||||
List<ChangeRecordBill> findTaskMainBill(List<String> taskNos);
|
||||
|
||||
}
|
||||
|
||||
@ -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<ChangeRecordBillDao
|
||||
|
||||
@Override
|
||||
public List<ChangeRecordBill> findMainBill(VisaBillTypeEnum billType, List<Long> 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<ChangeRecordBill> findTaskMainBill(List<String> taskNos) {
|
||||
return lambdaQuery().in(ChangeRecordBill::getBillNo, taskNos)
|
||||
.eq(ChangeRecordBill::getBillType, VisaBillTypeEnum.TASK)
|
||||
.eq(ChangeRecordBill::getIsDelete, 0)
|
||||
.list();
|
||||
}
|
||||
|
||||
|
||||
@ -1185,26 +1185,20 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
// 关联单据合法性
|
||||
if (CollUtil.isNotEmpty(req.getRelationOrderMap())) {
|
||||
req.getRelationOrderMap().forEach((key, value) -> {
|
||||
// 关联单据数量限制
|
||||
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<Long> billIds = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toList());
|
||||
validBillIfRelated(VisaBillTypeEnum.TASK, billIds, req.getType());
|
||||
List<String> 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<Long> 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<Long> billIds = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toList());
|
||||
List<ChangeRecord> relationVisa = listByIds(billIds);
|
||||
@ -1245,6 +1239,21 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
}));
|
||||
}
|
||||
|
||||
private void validTaskBillIfRelated(List<String> taskNos, VisaTypeEnum visaType) {
|
||||
AssertUtil.notEmpty(taskNos, "关联单据Id不能为空");
|
||||
AssertUtil.notNull(visaType, "单据类型不能为空");
|
||||
List<ChangeRecordBill> 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
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user