feat(REQ-3300): 提交审批校验
This commit is contained in:
parent
84b18ee6f6
commit
7db033260d
@ -15,7 +15,7 @@ public enum VisaBillTypeEnum {
|
||||
|
||||
TASK("task", "任务单"),
|
||||
RECTIFY("rectify", "整改单"),
|
||||
VISA("visa", "变更单"),
|
||||
DESIGN_VISA("design_visa", "设计变更单"),
|
||||
;
|
||||
|
||||
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
package cn.axzo.nanopart.visa.api.request;
|
||||
|
||||
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -72,6 +73,29 @@ public class VisaChangeTempCreateReq {
|
||||
|
||||
/**
|
||||
* 区域集合
|
||||
* 示例:
|
||||
* <pre>
|
||||
* [
|
||||
* {
|
||||
* "areaId": 249556,
|
||||
* "childrenAreaList": [
|
||||
* {
|
||||
* "areaId": 249739,
|
||||
* "childrenAreaList": []
|
||||
* }
|
||||
* ]
|
||||
* },
|
||||
* {
|
||||
* "areaId": 249556,
|
||||
* "childrenAreaList": [
|
||||
* {
|
||||
* "areaId": 249739,
|
||||
* "childrenAreaList": []
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
* ]
|
||||
* </pre>
|
||||
*/
|
||||
private JSONObject relationArea;
|
||||
|
||||
@ -83,9 +107,25 @@ public class VisaChangeTempCreateReq {
|
||||
|
||||
/**
|
||||
* 专业集合
|
||||
* 示例:
|
||||
* <pre>
|
||||
* [
|
||||
* {
|
||||
* "id": 9658,
|
||||
* "code": "JIANZHU_CUOSHIBIAO",
|
||||
* "children": [
|
||||
* {
|
||||
* "id": 9659,
|
||||
* "code": "JIANZHU_CUOSHIBIAOSHINEIWAIZHUANGXIUGOUZAOZUOFABIAO",
|
||||
* "children": []
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
* ]
|
||||
* </pre>
|
||||
*/
|
||||
@NotNull(message = "请选择专业")
|
||||
private JSONObject relationProfessional;
|
||||
private JSONArray relationProfessional;
|
||||
|
||||
/**
|
||||
* 发生原因
|
||||
|
||||
@ -58,6 +58,7 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
||||
|
||||
/**
|
||||
* 区域集合
|
||||
* 示例:
|
||||
* <pre>
|
||||
* [
|
||||
* {
|
||||
@ -86,7 +87,8 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
||||
|
||||
/**
|
||||
* 专业集合
|
||||
* 示例
|
||||
* 示例:
|
||||
* <pre>
|
||||
* [
|
||||
* {
|
||||
* "id": 9658,
|
||||
@ -100,6 +102,7 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
||||
* ]
|
||||
* }
|
||||
* ]
|
||||
* </pre>
|
||||
*/
|
||||
@TableField(value = "relation_professional", typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONArray relationProfessional;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.nanopart.visa.server.dto;
|
||||
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -25,6 +26,11 @@ public class VisaBillDto {
|
||||
*/
|
||||
private Long visaId;
|
||||
|
||||
/**
|
||||
* 变更签证单据类型
|
||||
*/
|
||||
private VisaTypeEnum visaType;
|
||||
|
||||
/**
|
||||
* 单据id
|
||||
*/
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.nanopart.visa.server.service;
|
||||
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaBillDto;
|
||||
|
||||
@ -46,6 +46,6 @@ public interface ChangeRecordBillService {
|
||||
* @param billIds 单据id
|
||||
* @return 主单据信息
|
||||
*/
|
||||
List<ChangeRecordBill> findMainBill(VisaRelationFieldEnum billType, List<Long> billIds);
|
||||
List<ChangeRecordBill> findMainBill(VisaBillTypeEnum billType, List<Long> billIds);
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.nanopart.visa.server.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaBillTypeEnum;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordBill;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaBillDto;
|
||||
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordBillDao;
|
||||
@ -78,7 +78,7 @@ public class ChangeRecordBillServiceImpl extends ServiceImpl<ChangeRecordBillDao
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ChangeRecordBill> findMainBill(VisaRelationFieldEnum billType, List<Long> billIds) {
|
||||
public List<ChangeRecordBill> findMainBill(VisaBillTypeEnum billType, List<Long> billIds) {
|
||||
AssertUtil.notNull(billType, "单据类型不能为空");
|
||||
AssertUtil.notEmpty(billIds, "单据Id不能为空");
|
||||
return lambdaQuery().in(ChangeRecordBill::getBillId, billIds)
|
||||
|
||||
@ -56,7 +56,6 @@ import cn.axzo.nanopart.visa.server.rpc.ApolloConstructionAreaGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.DrawingMajorGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.MsgCenterGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.OrganizationalUnitGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.VisaCooperateShipGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.VisaProjectApiGateway;
|
||||
@ -333,7 +332,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
List<ChangeRecordBill> changeRecordBills = changeRecordBillService.listById(visaId);
|
||||
Map<VisaBillTypeEnum, List<String>> billMap = changeRecordBills.stream()
|
||||
.collect(Collectors.groupingBy(ChangeRecordBill::getBillType
|
||||
, Collectors.mapping(item -> Objects.equals(0L, item.getBillId()) ? item.getBillNo() : item.getBillId().toString(), Collectors.toList())));
|
||||
, Collectors.mapping(item -> Objects.equals(0L, item.getBillId()) ? item.getBillNo() : item.getBillId().toString(), Collectors.toList())));
|
||||
|
||||
ProjectDetailRes projectDetailRes = visaProjectApiGateway.getProjectById(visa.getRelationProject());
|
||||
GetDetailRes workspace = workspaceGateway.getById(visa.getRelationWorkspaceId());
|
||||
@ -366,7 +365,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
.relationOuAndPersonList(changeRecordConfirmService.listRelationByVisaId(pair.getKey())) // 相关单位与确认人
|
||||
.relationTaskList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.TASK)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.TASK)) // 关联任务单
|
||||
.relationRectifyList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.RECTIFY)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.RECTIFY)) //关联整改单
|
||||
.relationVisaList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.VISA)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.VISA)) // 关联变更单
|
||||
.relationVisaList(CollectionUtils.isEmpty(billMap.get(VisaBillTypeEnum.DESIGN_VISA)) ? Lists.newArrayList() : billMap.get(VisaBillTypeEnum.DESIGN_VISA)) // 关联变更单
|
||||
.amountChange(Objects.nonNull(visa.getAmountChange()) ? visa.getAmountChange().toPlainString() : "")
|
||||
.changeContextAndDescriptionList(this.buildDesc(visaId))
|
||||
.status(visa.getStatus())
|
||||
@ -530,6 +529,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
.flatMap(os -> os.getValue().stream()
|
||||
.map(o -> VisaBillDto.builder()
|
||||
.visaId(changeRecord.getId())
|
||||
.visaType(changeRecord.getType())
|
||||
.billId(o)
|
||||
.billType(VisaRelationFieldEnum.valueOf(os.getKey()))
|
||||
.createBy(req.getOperatorPersonId())
|
||||
@ -870,10 +870,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
Map<Long, Long> billMainMap;
|
||||
if (req.getNeedRelatedBill()) {
|
||||
List<Long> billIds = records.stream().map(ChangeRecord::getId).distinct().collect(Collectors.toList());
|
||||
List<ChangeRecordBill> mainBill = changeRecordBillService.findMainBill(VisaRelationFieldEnum.VISA_ORDER, billIds);
|
||||
List<ChangeRecordBill> mainBill = changeRecordBillService.findMainBill(VisaBillTypeEnum.DESIGN_VISA, billIds);
|
||||
if (CollectionUtils.isEmpty(mainBill)) {
|
||||
billMainMap = null;
|
||||
log.info("所有单据均为主单据");
|
||||
log.info("all bill is main bill");
|
||||
} else {
|
||||
// Map<billId,visaId>
|
||||
billMainMap = mainBill.stream().collect(Collectors.toMap(ChangeRecordBill::getBillId, ChangeRecordBill::getVisaId, (v1, v2) -> v2));
|
||||
@ -1003,14 +1003,28 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
if (CollUtil.isNotEmpty(req.getRelationOrderMap())) {
|
||||
req.getRelationOrderMap().forEach((key, value) -> {
|
||||
if (Objects.equals(VisaRelationFieldEnum.TASK_ORDER.name(), key)) {
|
||||
// 任务单 TODO
|
||||
} else if (Objects.equals(VisaRelationFieldEnum.RECTIFICATION_ORDER.name(), key)) {
|
||||
// 整改单 TODO
|
||||
} 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() <= verifyVisaLimit, String.format("最多可关联%d个变更单,请重新选择", verifyVisaLimit));
|
||||
List<ChangeRecordBill> mainBill = changeRecordBillService.findMainBill(VisaRelationFieldEnum.VISA_ORDER, value);
|
||||
validBillIfRelated(VisaBillTypeEnum.TASK, value, req.getType());
|
||||
} else if (Objects.equals(VisaRelationFieldEnum.RECTIFICATION_ORDER.name(), key)) {
|
||||
/*整改单*/
|
||||
// 关联单据数量限制
|
||||
AssertUtil.isTrue(value.size() <= verifyVisaLimit, String.format("最多可关联%d个变更单,请重新选择", verifyVisaLimit));
|
||||
validBillIfRelated(VisaBillTypeEnum.RECTIFY, value, 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() <= verifyVisaLimit, String.format("最多可关联%d个变更单,请重新选择", verifyVisaLimit));
|
||||
// 关联单据合法性,是否存在,状态是否合法
|
||||
List<ChangeRecord> relationVisa = listByIds(value);
|
||||
AssertUtil.notEmpty(relationVisa, "关联的单据不存在");
|
||||
relationVisa.forEach(r -> {
|
||||
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), req.getRelationWorkspaceId()), "关联的单据所属项目不匹配");
|
||||
AssertUtil.isFalse(Objects.equals(r.getStatus(), VisaStatusEnum.TO_REPORT) || Objects.equals(r.getStatus(), VisaStatusEnum.FORBIDED), String.format("单据%s状态为%s,不允许被关联", r.getNo(), r.getStatus().getDesc()));
|
||||
});
|
||||
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, value, req.getType());
|
||||
} else {
|
||||
throw new ServiceException("不支持的关联单据类型");
|
||||
}
|
||||
@ -1018,6 +1032,22 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
}
|
||||
}
|
||||
|
||||
private void validBillIfRelated(VisaBillTypeEnum billType, List<Long> value, VisaTypeEnum visaType) {
|
||||
AssertUtil.notNull(billType, "关联单据类型不能为空");
|
||||
AssertUtil.notEmpty(value, "关联单据Id不能为空");
|
||||
AssertUtil.notNull(visaType, "单据类型不能为空");
|
||||
List<ChangeRecordBill> mainBill = changeRecordBillService.findMainBill(billType, value);
|
||||
mainBill.stream()
|
||||
.collect(Collectors.groupingBy(ChangeRecordBill::getBillId))
|
||||
.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()));
|
||||
}));
|
||||
}
|
||||
|
||||
private List<VisaDetailByIdResponse.RelationAreaDetail> buildArea(JSONArray relationArea) {
|
||||
if (CollectionUtils.isEmpty(relationArea)) {
|
||||
return Lists.newArrayList();
|
||||
@ -1152,8 +1182,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
|
||||
|
||||
changeRecordRelationService.clearImOperationParticipate(ImGroupOperationReq.builder()
|
||||
.visaId(req.getVisaId())
|
||||
.imGroupId(req.getImGroupId())
|
||||
.visaId(req.getVisaId())
|
||||
.imGroupId(req.getImGroupId())
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user