Merge remote-tracking branch 'origin/thirdStage' into thirdApiStage

This commit is contained in:
梁琦涛
2024-01-22 09:54:53 +08:00
82 changed files with 2197 additions and 904 deletions
@@ -83,11 +83,11 @@ public class ProcessApprovalRecord {
private String mesg;
/**
* 完成注记(0未完成,1完成)
* 完成注记(1进行中,2已完成,3未处理,4已撤回)
*/
@Dict(dicCode = "prc_node_status")
@TableField(value = "finish_flag")
@ApiModelProperty(value = "完成注记(1进行中,2已完成)")
@ApiModelProperty(value = "完成注记(1进行中,2已完成,3未处理,4已撤回)")
private Integer finishFlag;
/**
@@ -98,7 +98,7 @@ public class ProcessApprovalRecord {
private String projectId;
/**
* 审批意见(0同意,1不同意)
* 审批意见(1通过,2驳回,3未处理)
*/
@Dict(dicCode = "commit_flag")
@TableField(value = "commit_flag")
@@ -186,4 +186,11 @@ public class ProcessApprovalRecord {
*/
@ApiModelProperty(value = "节点id")
private String nodeId;
/**
* 完成注记 搜索用
*/
@TableField(exist = false)
@ApiModelProperty(value = "完成注记 搜索用")
private String finishFlagSearch;
}
@@ -16,6 +16,7 @@ public enum FinishFlagEnum {
INCOMPLETE("未完成", 1),
COMPLETE("完成", 2),
SUSPEND("暂停", 3),
WITHDRAWN("已撤回", 4)
;
private String name;
@@ -29,7 +29,7 @@ public enum ProcessTypeEnum {
ES_ENABLE("已封存企标启用流程",15, "com.jero.modules.activiti.process.esEnable.service.impl.ProcessEsEnableServiceImpl"),
ES_INSPECT_PLAN("企标稽查计划", 16, "com.jero.modules.activiti.process.esinspectplan.service.impl.EsInspectPlanFlow"),
ES_INSPECT("企标稽查流程", 17, "com.jero.modules.activiti.process.esinspect.service.impl.EsInspectFlow"),
ES_INSPECT_DELAY_APPLY("稽查延期申请流程", 18, "com.jero.modules.activiti.process.esinspectdelayapply.service.impl.EsInspectDelayApplyFlowServiceImpl"),
ES_INSPECT_DELAY_APPLY("稽查延期申请流程", 18, "com.jero.modules.activiti.process.esinspectdelayapply.service.impl.EsInspectDelayApplyFlow"),
ES_INSPECT_REPORT("企标稽查整改", 19, "com.jero.modules.activiti.process.esinspectrectify.service.impl.EsInspectRectifyFlow"),
PERMISSION_APPLY_PROCESS("权限申请流程", 20, "com.jero.modules.activiti.process.espermissionapply.service.impl.EsPermissionApplyFlow"),
STANDARD_DECLARE("标准宣贯流程", 21, "com.jero.modules.activiti.process.esdeclare.service.impl.EsDeclareFlow"),
@@ -138,10 +138,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
approvalRecord.setUserId(assignee);
approvalRecord.setOriginUserId(assignee);
approvalRecord.setFinishFlag(FinishFlagEnum.INCOMPLETE.getValue());
// 加一秒,解决流程审批信息发起节点和下一节点创建时间一致,排序错乱问题
Date date = new Date();
date.setTime(createTime.getTime() + 1000);
approvalRecord.setCreateTime(date);
approvalRecord.setCreateTime(createTime);
approvalRecord.setNodeId(taskDefinitionKey);
recordService.save(approvalRecord);
@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.entity.ProcessAll;
@@ -15,6 +16,7 @@ import com.jero.modules.activiti.process.common.common.DraftCommon;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.entity.StandTypeVO;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.activiti.process.esArchive.entity.vo.ESArchiveDataVO;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
@@ -25,6 +27,8 @@ import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
@@ -76,6 +80,9 @@ public class ActFlowCommonService {
@Resource
private IProcessHandleService processHandleService;
@Resource
private ILawsEnterpriseStandardService esService;
/**
* 启动流程实例
*/
@@ -474,4 +481,15 @@ public class ActFlowCommonService {
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
return processInfoVO;
}
public void checkStandardState(String standardId) {
LawsEnterpriseStandard es = esService.getById(standardId);
if (es != null) {
String standardState = es.getStandardState();
if (StandardStateEnum.ABOLISH.getStateValue().equals(standardState) ||
StandardStateEnum.ARCHIVE.getStateValue().equals(standardState)) {
throw new JeroBootException(ResultCommon.CAN_NOT_EDIT_ABOLISH_OR_ARCHIVE_ES);
}
}
}
}
@@ -15,11 +15,9 @@ import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit;
import com.jero.modules.activiti.process.esAnnualInit.entity.vo.AnnualInitDataVO;
import com.jero.modules.activiti.process.esAnnualInit.entity.vo.AnnualInitFlowUserVO;
import com.jero.modules.activiti.process.esAnnualInit.service.ProcessEsAnnualInitService;
import com.jero.modules.activiti.process.esAnnualInit.mapper.ProcessEsAnnualInitMapper;
import com.jero.modules.activiti.process.esArchive.entity.ProcessEsArchive;
import com.jero.modules.activiti.process.esArchive.entity.vo.ESArchiveDataVO;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPChangeType;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
@@ -516,33 +514,42 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
}
private void cleanData(List<ProcessEsAnnualInit> list) {
List<String> originStandardNoList = list.stream().map(ProcessEsAnnualInit::getOriginEnStandardNo).collect(Collectors.toList());
// List<String> originStandardNoList = list.stream().map(ProcessEsAnnualInit::getOriginEnStandardNo).collect(Collectors.toList());
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList);
List<LawsEnterpriseStandard> esList = enterpriseStandardService.list(esWrapper);
// 转换成key为企标编号的map
Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item));
// LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
// esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList);
// List<LawsEnterpriseStandard> esList = enterpriseStandardService.list(esWrapper);
// // 转换成key为企标编号的map
// Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item));
list.forEach(item -> {
// 如果是制定则去除掉所有的原企标名称 原企标编号
if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) {
item.setOriginEnStandardName(null);
item.setOriginEnStandardNo(null);
String decadeCode = item.getDecadeCode();
if (StrUtil.isBlank(decadeCode)) {
// 获取当前年份
Calendar date = Calendar.getInstance();
String curYearNumber = String.valueOf(date.get(Calendar.YEAR));
item.setDecadeCode(curYearNumber);
}
// 设置变更状态 制定是新增 修订是变更
item.setChangeStatus("1");
item.setChangeStatus(ESPChangeType.ADD.getValue());
} else {
item.setChangeStatus("2");
item.setOriginEnStandardNo(esMap.get(item.getOriginEnStandardNo()).getStandardName());
item.setEnStandardCode(esMap.get(item.getOriginEnStandardNo()).getStandardCode());
item.setEnNameCode(esMap.get(item.getOriginEnStandardNo()).getNameCode());
item.setStandardCategoryCode(esMap.get(item.getOriginEnStandardNo()).getCategoryCode());
item.setChangeStatus(ESPChangeType.CHANGE.getValue());
}
// 如果标准等级分类是0级或3级,则需要将授权部门置空
if (item.getEnStandardClassification().equals("1") || item.getEnStandardClassification().equals("4")) {
item.setAuthDept(null);
}
});
}
private void transToDictValue(List<ProcessEsAnnualInit> list, List<SysDictItemCore> listDict) {
list.forEach(item -> {
item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict));
item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict));
item.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict));
item.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict));
item.setMainDraftingUser(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUser(), listDict));
@@ -552,10 +559,8 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
item.setEnStandardSystem(excelUtils.translateDictValue("node_name", "id", "laws_tree_node", item.getEnStandardSystem(), listDict));
item.setContactUser(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getContactUser(), listDict));
item.setStandardType(excelUtils.translateDictValue("esp_standard_type", item.getStandardType(), listDict));
item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict));
item.setEnStandardClassification(excelUtils.translateDictValue("standard_grade_classify", item.getEnStandardClassification(), listDict));
item.setComponentName(excelUtils.translateDictValue("part_name", item.getComponentName(), listDict));
item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict));
item.setDraftPlannedCompleteDate(importUtil.convertDate(item.getDraftPlannedCompleteDateString()));
item.setSolicitationDraftPlanCompleteDate(importUtil.convertDate(item.getSolicitationDraftPlanCompleteDateString()));
item.setPlanApprovalDate(importUtil.convertDate(item.getPlanApprovalDateString()));
@@ -563,6 +568,9 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
}
private List<String> validationList(List<ProcessEsAnnualInit> list, List<SysDictItemCore> listDict) {
// 找到各标准等级的授权部门
Map<String, List<String>> authDeptMap = excelUtils.getAllLevelAuthDeptMap();
List<LawsEnterpriseStandard> esList = enterpriseStandardService.list();
List<String> errorMsgs = new ArrayList<>();
@@ -587,7 +595,7 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
String contactUser = plan.getContactUser();
String standardSystem = plan.getEnStandardSystem();
String standardType = plan.getStandardType();
String enStandardClassification = plan.getEnStandardClassification();
String standardClassification = plan.getEnStandardClassification();
String enStandardCode = plan.getEnStandardCode();
String partName = plan.getComponentName();
String draftPlannedCompleteDateString = plan.getDraftPlannedCompleteDateString();
@@ -600,8 +608,9 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
// 检查制修订类型 编号 名称
errMsg.append(validProjectType(plan, listDict, esList));
// 检查标准等级分类和授权部门
errMsg.append(excelUtils.validAuthDept(authDept, listDict, standardClassification, authDeptMap));
// 检查所有数据字典校验的字段
errMsg.append(excelUtils.validAuthDept(authDept, listDict));
errMsg.append(excelUtils.validCooperateUnit(cooperationUnit, listDict));
errMsg.append(excelUtils.validMainDraftingUser(mainDraftingUser, listDict));
errMsg.append(excelUtils.validMainDraftingUnit(mainDraftingUnit, listDict));
@@ -611,11 +620,10 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl<ProcessEsAnnualI
errMsg.append(excelUtils.validContactUser(contactUser, listDict));
errMsg.append(excelUtils.validStandardType(standardType, listDict));
errMsg.append(excelUtils.validStandardCode(enStandardCode, listDict));
errMsg.append(excelUtils.validStandardClassification(enStandardClassification, listDict));
errMsg.append(excelUtils.validPartName(partName, listDict));
errMsg.append(excelUtils.validSingleDate(draftPlannedCompleteDateString, "草稿计划完成日期"));
errMsg.append(excelUtils.validSingleDate(solicitationDraftPlanCompleteDateString, "征求意见稿计划完成日期"));
errMsg.append(excelUtils.validSingleDate(planApprovalDateString, "计划报批日期"));
errMsg.append(excelUtils.validSingleDateNotBeforeToday(draftPlannedCompleteDateString, "草稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateNotBeforeToday(solicitationDraftPlanCompleteDateString, "征求意见稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateNotBeforeToday(planApprovalDateString, "计划报批日期"));
// 如果数据有问题,则将提示信息添加到 errorMsgs 中
if (errMsg.length() > 0) {
errorMsgs.add(errMsgHeader.append(errMsg).toString());
@@ -16,6 +16,7 @@ import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualRe
import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO;
import com.jero.modules.activiti.process.esAnnualReport.mapper.ProcessEsAnnualReportMapper;
import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPChangeType;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
@@ -393,27 +394,34 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
}
private void cleanData(List<ProcessEsAnnualReport> list) {
List<String> originStandardNoList = list.stream().map(ProcessEsAnnualReport::getOriginEnStandardNo).collect(Collectors.toList());
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList);
List<LawsEnterpriseStandard> esList = enterpriseStandardService.list(esWrapper);
// 转换成key为企标编号的map
Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item));
// List<String> originStandardNoList = list.stream().map(ProcessEsAnnualReport::getOriginEnStandardNo).collect(Collectors.toList());
//
// LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
// esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList);
// List<LawsEnterpriseStandard> esList = enterpriseStandardService.list(esWrapper);
// // 转换成key为企标编号的map
// Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item));
list.forEach(item -> {
// 如果是制定则去除掉所有的原企标名称 原企标编号
if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) {
item.setOriginEnStandardName(null);
item.setOriginEnStandardNo(null);
String decadeCode = item.getDecadeCode();
if (StrUtil.isBlank(decadeCode)) {
// 获取当前年份
Calendar date = Calendar.getInstance();
String curYearNumber = String.valueOf(date.get(Calendar.YEAR));
item.setDecadeCode(curYearNumber);
}
// 设置变更状态 制定是新增 修订是变更
item.setChangeStatus("1");
item.setChangeStatus(ESPChangeType.ADD.getValue());
} else {
item.setChangeStatus("2");
item.setOriginEnStandardName(esMap.get(item.getOriginEnStandardNo()).getStandardName());
item.setEnStandardCode(esMap.get(item.getOriginEnStandardNo()).getStandardCode());
item.setEnNameCode(esMap.get(item.getOriginEnStandardNo()).getNameCode());
item.setStandardCategoryCode(esMap.get(item.getOriginEnStandardNo()).getCategoryCode());
item.setChangeStatus(ESPChangeType.CHANGE.getValue());
}
// 如果标准等级分类是0级或3级,则需要将授权部门置空
if (item.getEnStandardClassification().equals("1") || item.getEnStandardClassification().equals("4")) {
item.setAuthDept(null);
}
});
}
@@ -428,8 +436,10 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
item.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict));
item.setMainDraftingUnitResponsiblePerson(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUnitResponsiblePerson(), listDict));
item.setStandardPromoter(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getStandardPromoter(), listDict));
item.setWorkGroup(excelUtils.translateDictValue("name", "id", "laws_working_group", item.getWorkGroup(), listDict));
item.setEnStandardSystem(excelUtils.translateDictValue("node_name", "id", "laws_tree_node", item.getEnStandardSystem(), listDict));
item.setWorkGroup(excelUtils.translateDictValue("name", "id", "laws_working_group", item.getWorkGroup(), listDict));
item.setStandardType(excelUtils.translateDictValue("esp_standard_type", item.getStandardType(), listDict));
item.setEnStandardClassification(excelUtils.translateDictValue("standard_grade_classify", item.getEnStandardClassification(), listDict));
item.setDraftPlannedCompleteDate(importUtil.convertDate(item.getDraftPlannedCompleteDateString()));
item.setSolicitationDraftPlanCompleteDate(importUtil.convertDate(item.getSolicitationDraftPlanCompleteDateString()));
item.setPlanApprovalDate(importUtil.convertDate(item.getPlanApprovalDateString()));
@@ -437,6 +447,9 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
}
private List<String> validationList(List<ProcessEsAnnualReport> list, List<SysDictItemCore> listDict) {
// 找到各标准等级的授权部门
Map<String, List<String>> authDeptMap = excelUtils.getAllLevelAuthDeptMap();
List<LawsEnterpriseStandard> esList = enterpriseStandardService.list();
List<String> errorMsgs = new ArrayList<>();
@@ -472,8 +485,9 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
// 检查制修订类型 编号 名称
errMsg.append(validProjectType(plan, listDict, esList));
// 检查标准等级分类和授权部门
errMsg.append(excelUtils.validAuthDept(authDept, listDict, standardClassification, authDeptMap));
// 检查所有数据字典校验的字段
errMsg.append(excelUtils.validAuthDept(authDept, listDict));
errMsg.append(excelUtils.validCooperateUnit(cooperationUnit, listDict));
errMsg.append(excelUtils.validMainDraftingUser(mainDraftingUser, listDict));
errMsg.append(excelUtils.validMainDraftingUnit(mainDraftingUnit, listDict));
@@ -482,10 +496,9 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
errMsg.append(excelUtils.validWorkGroup(workGroup, listDict));
errMsg.append(excelUtils.validStandardSystem(standardSystem, listDict));
errMsg.append(excelUtils.validStandardType(standardType, listDict));
errMsg.append(excelUtils.validStandardClassification(standardClassification, listDict));
errMsg.append(excelUtils.validSingleDateMustInput(draftPlannedCompleteDateString, "稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateMustInput(solicitationDraftPlanCompleteDateString, "征求意见稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateMustInput(planApprovalDateString, "计划报批日期"));
errMsg.append(excelUtils.validSingleDateMustInputNotBeforeToday(draftPlannedCompleteDateString, "草稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateMustInputNotBeforeToday(solicitationDraftPlanCompleteDateString, "征求意见稿计划完成日期"));
errMsg.append(excelUtils.validSingleDateMustInputNotBeforeToday(planApprovalDateString, "计划报批日期"));
// 如果数据有问题,则将提示信息添加到 errorMsgs 中
if (errMsg.length() > 0) {
errorMsgs.add(errMsgHeader.append(errMsg).toString());
@@ -11,6 +11,7 @@ import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.CounterSignNodeNameConstants;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esArchive.entity.ProcessEsArchive;
import com.jero.modules.activiti.process.esArchive.entity.vo.ESArchiveDataVO;
@@ -24,6 +25,8 @@ import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.utils.UserUtils;
import com.jero.modules.system.service.ISysUserDepartService;
import lombok.extern.slf4j.Slf4j;
@@ -163,7 +166,11 @@ public class ProcessEsChangeServiceImpl extends ServiceImpl<ProcessEsChangeMappe
}
public void startRunTask(ESChangeDataVO changeData) {
// do nothing now
// 如果标准当前状态是废止或封存,不能发起变更流程
ProcessEsChange data = changeData.getData();
if (data != null) {
actFlowCommonService.checkStandardState(data.getStandardId());
}
}
@Override
@@ -502,6 +502,14 @@ public class ProcessEsInitChange implements Serializable {
@ApiModelProperty(value = "配合单位")
private String cooperationUnit;
/**
* 隶属工作组
*/
@Dict(dictTable = "laws_working_group", dicCode = "id", dicText = "name")
@ApiModelProperty(value = "隶属工作组")
private String workGroup;
@TableField(exist = false)
private static final long serialVersionUID = 1781238971297838971L;
}
@@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
@@ -13,9 +12,9 @@ import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.CounterSignNodeNameConstants;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esInitChange.entity.EsInitChangeConstant;
import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPApplicationCategoryEnum;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectStatus;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType;
import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeDataVO;
import com.jero.modules.activiti.process.esInitChange.service.ProcessEsInitChangeService;
@@ -29,7 +28,9 @@ import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.common.service.ILawsCommonService;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
@@ -42,7 +43,6 @@ import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import javax.annotation.Resource;
import java.util.*;
@@ -90,6 +90,9 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource
private ILawsCommonService commonService;
@Resource
private EnterpriseStandardPlanService espService;
@Override
public void startProcess(InitChangeDataVO initChangeData) {
// 发起的时候校验标准编号是是否重复
@@ -331,8 +334,22 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
List<ProcessEsInitChange> esInitChangeList = initChangeData.getDataList();
// 校验企标编号是否冲突
ProcessEsInitChange initChange = esInitChangeList.get(0);
// 如果是变更流程,则需要撤回制修订流程
if (ESPApplicationCategoryEnum.CHANGE.getValue().equals(initChange.getApplicationCategory())) {
// 如果是变更流程,则需要判断计划是否有效
Set<String> espIdSet = esInitChangeList.stream().map(ProcessEsInitChange::getEspId).collect(Collectors.toSet());
List<EnterpriseStandardPlan> esplist = espService.list(new LambdaQueryWrapper<EnterpriseStandardPlan>().in(EnterpriseStandardPlan::getId, espIdSet));
if (esplist == null || esplist.size() != espIdSet.size()) {
throw new JeroBootException(ResultCommon.INVALID_ESP);
}
// 如果是责任部门变更,需要判断计划是否已经逾期
if (ESPProjectType.RESPONSIBLE_DEPT_CHANGE.getValue().equals(initChange.getProjectType())) {
for (EnterpriseStandardPlan esp : esplist) {
if (esp.getProjectStatus().equals(ESPProjectStatus.OVERDUE.getValue())) {
throw new JeroBootException(ResultCommon.INVALID_ESP);
}
}
}
// 如果是变更流程,则需要撤回制修订流程
List<String> espIdList = initChangeData.getDataList().stream().map(ProcessEsInitChange::getEspId).collect(Collectors.toList());
LambdaQueryWrapper<ProcessEsRevision> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(ProcessEsRevision::getEspId, espIdList);
@@ -10,6 +10,7 @@ import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esChange.entity.ProcessEsChange;
import com.jero.modules.activiti.process.esRecheck.entity.ProcessEsRecheck;
import com.jero.modules.activiti.process.esRecheck.entity.vo.ESRecheckDataVO;
import com.jero.modules.activiti.process.esRecheck.service.ProcessEsRecheckService;
@@ -34,15 +35,15 @@ import java.util.*;
import static com.jero.modules.activiti.process.esRecheck.entity.RecheckTaskNameConstant.*;
/**
* @author ThinkBook
* @description 针对表【process_es_recheck(企业标准)】的数据库操作Service实现
* @createDate 2023-10-29 21:00:54
*/
* @author ThinkBook
* @description 针对表【process_es_recheck(企业标准)】的数据库操作Service实现
* @createDate 2023-10-29 21:00:54
*/
@Slf4j
@Transactional(rollbackFor = JeroBootException.class)
@Service
public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMapper, ProcessEsRecheck>
implements ProcessEsRecheckService{
implements ProcessEsRecheckService {
@Resource
private ActFlowCommonService actFlowCommonService;
@@ -179,7 +180,11 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
}
public void startRunTask(ESRecheckDataVO recheckData) {
// do nothing now
// 如果标准当前状态是废止或封存,不能发起变更流程
ProcessEsRecheck data = recheckData.getData();
if (data != null) {
actFlowCommonService.checkStandardState(data.getStandardId());
}
}
@Override
@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
@@ -159,7 +160,12 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
}
public void startRunTask(ESRevisionDataVO revisionData) {
// do nothing now
// 检查企标计划是否已被删除
String espId = revisionData.getData().getEspId();
EnterpriseStandardPlan esp = espService.getById(espId);
if (esp == null) {
throw new JeroBootException(ResultCommon.INVALID_ESP);
}
}
@Override
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.esdeclare.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -11,6 +14,7 @@ import com.jero.common.util.SnowflakeUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -111,6 +115,9 @@ public class EsDeclareFlowServiceImpl implements IEsDeclareFlowService {
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.STANDARD_DECLARE.getValue()));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -193,7 +200,8 @@ public class EsDeclareFlowServiceImpl implements IEsDeclareFlowService {
EsDeclareFlowVO esDeclareFlowVO = new EsDeclareFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.esinspect.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -9,6 +12,7 @@ import com.jero.common.util.SnowflakeUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -124,6 +128,9 @@ public class EsInspectFlowServiceImpl implements IEsInspectFlowService {
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.ES_INSPECT.getValue()));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -281,7 +288,8 @@ public class EsInspectFlowServiceImpl implements IEsInspectFlowService {
EsInspectFlowVO esInspectFlowVO = new EsInspectFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -8,6 +8,7 @@ import com.jero.common.util.SnowflakeUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -105,6 +106,8 @@ public class EsInspectDelayApplyFlowServiceImpl implements IEsInspectDelayApplyF
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.ES_INSPECT_DELAY_APPLY.getValue()));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -193,7 +196,8 @@ public class EsInspectDelayApplyFlowServiceImpl implements IEsInspectDelayApplyF
EsInspectDelayApplyFlowVO esInspectDelayApplyFlowVO = new EsInspectDelayApplyFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.esinspectplan.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -12,6 +15,7 @@ import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeLink;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -122,6 +126,9 @@ public class EsInspectPlanFlowServiceImpl implements IEsInspectPlanFlowService {
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.ES_INSPECT_PLAN.getValue()));
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -237,7 +244,8 @@ public class EsInspectPlanFlowServiceImpl implements IEsInspectPlanFlowService {
EsInspectPlanFlowVO esInspectPlanFlowVO = new EsInspectPlanFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -386,7 +386,7 @@ public class ProcessEsInspectPlanServiceImpl extends ServiceImpl<ProcessEsInspec
errorList.add("标准化组对接人不能为空!");
}
// 填充创建人
processEsInspectPlan.setCreateBy(loginUser.getId());
processEsInspectPlan.setCreateBy(loginUser.getUsername());
processEsInspectPlan.setCreateByDictText(loginUser.calcNameWorkNo());
return errorList;
}
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.esinspectrectify.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -11,6 +14,7 @@ import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNodeLink;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -98,6 +102,9 @@ public class EsInspectRectifyFlowServiceImpl implements IEsInspectRectifyFlowSer
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.ES_INSPECT_REPORT.getValue()));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -153,7 +160,8 @@ public class EsInspectRectifyFlowServiceImpl implements IEsInspectRectifyFlowSer
EsInspectRectifyFlowVO esInspectReportFlowVO = new EsInspectRectifyFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.espermissionapply.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -9,6 +12,7 @@ import com.jero.common.util.SnowflakeUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
@@ -92,6 +96,9 @@ public class EsPermissionApplyFlowServiceImpl implements EsPermissionApplyFlowSe
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.PERMISSION_APPLY_PROCESS.getValue()));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -162,7 +169,8 @@ public class EsPermissionApplyFlowServiceImpl implements EsPermissionApplyFlowSe
EsPermissionApplyFlowVO esPermissionApplyFlowVO = new EsPermissionApplyFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -39,11 +39,14 @@ import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.laws.standardization.entity.LawsStandardization;
import com.jero.modules.laws.standardization.service.ILawsStandardizationService;
import com.jero.modules.system.entity.SysDepart;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysDictService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.tag.entity.LawsTag;
import com.jero.modules.tag.enums.TableNameEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -85,6 +88,9 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
@Resource
private ISysUserService sysUserService;
@Resource
private ISysDepartService sysDepartService;
@Resource
private ISysDictService dictService;
@@ -168,6 +174,11 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.FB_ENTRY_CHANGE.getValue()); // 流程类型
// 重复性校验
duplicateCheck(processInfoVO.getBusinessId());
// 删除自己的草稿
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId);
}
processHandleService.startProcess(processInfoVO);
// 保存草稿用于强制撤销
@@ -463,7 +474,18 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
Object read = JSONPath.read(businessJson, "$.dynamic_type");
String text = dictService.queryDictText("POWER_TYPE_DOMESTIC", read.toString());
jsonObject.put("dynamic_type_dictText", text);
}
// 国内标准类别
if (businessJson.contains("standard_class")){
Object read = JSONPath.read(businessJson, "$.standard_class");
String text = dictService.queryDictText("standard_type", read.toString());
jsonObject.put("standard_class_dictText", text);
}
// 国内适用车型
if (businessJson.contains("applicable_vehicle")){
Object read = JSONPath.read(businessJson, "$.applicable_vehicle");
String text = dictService.queryDictText("APPLICATIONS_DOMESTIC", read.toString());
jsonObject.put("applicable_vehicle_dictText", text);
}
}else {
processFbEntryChange.setSource_dictText("海外");
@@ -473,6 +495,18 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
String text = dictService.queryDictText("POWER_TYPE_DOMESTIC_OVERSEAS", read.toString());
jsonObject.put("dynamic_type_dictText", text);
}
// 海外标准类别
if (businessJson.contains("standard_class")){
Object read = JSONPath.read(businessJson, "$.standard_class");
String text = dictService.queryDictText("standard_type_overseas", read.toString());
jsonObject.put("standard_class_dictText", text);
}
// 海外适用车型
if (businessJson.contains("applicable_vehicle")){
Object read = JSONPath.read(businessJson, "$.applicable_vehicle");
String text = dictService.queryDictText("APPLICATIONS_OVERSEAS", read.toString());
jsonObject.put("applicable_vehicle_dictText", text);
}
}
if ("1".equals(processFbEntryChange.getOperateType())){
processFbEntryChange.setOperateType_dictText("标准法规入库");
@@ -491,6 +525,43 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
LawsStandardization lawsStandardization = lawsStandardizationService.getById(String.valueOf(read));
jsonObject.put("bidding_committee_dictText", !Objects.isNull(lawsStandardization) ? lawsStandardization.getName() : "");
}
// 标准状态
if (businessJson.contains("standard_status")){
Object read = JSONPath.read(businessJson, "$.standard_status");
String text = dictService.queryDictText("standard_status", read.toString());
jsonObject.put("standard_status_dictText", text);
}
// 标准性质
if (businessJson.contains("standard_property")){
Object read = JSONPath.read(businessJson, "$.standard_property");
String text = dictService.queryDictText("standard_property", read.toString());
jsonObject.put("standard_property_dictText", text);
}
// 标准体系
if (businessJson.contains("standard_system")){
Object read = JSONPath.read(businessJson, "$.standard_system");
String text = dictService.queryDictText("standard_system", read.toString());
jsonObject.put("standard_system_dictText", text);
}
// 责任部门
if (businessJson.contains("responsible_department")){
Object read = JSONPath.read(businessJson, "$.responsible_department");
List<SysDepart> sysDepartList = sysDepartService.listByIds(Arrays.asList(String.valueOf(read.toString()).split(",")));
jsonObject.put("responsible_department_dictText", CollectionUtils.isNotEmpty(sysDepartList) ?
sysDepartList.stream().map(SysDepart::getDepartName).collect(Collectors.joining(",")) : "");
}
// 企业参与情况
if (businessJson.contains("enterprise_participation")){
Object read = JSONPath.read(businessJson, "$.enterprise_participation");
String text = dictService.queryDictText("yn", read.toString());
jsonObject.put("enterprise_participation_dictText", text);
}
// 适用认证
if (businessJson.contains("applicable_certification")){
Object read = JSONPath.read(businessJson, "$.applicable_certification");
String text = dictService.queryDictText("applicable_certification", read.toString());
jsonObject.put("applicable_certification_dictText", text);
}
processFbEntryChange.setBusinessJson(jsonObject.toJSONString());
}
@Override
@@ -501,4 +572,10 @@ public class ProcessFbEntryChangeServiceImpl extends ServiceImpl<ProcessFbEntryC
new LambdaQueryWrapper<ProcessFbEntryChange>()
.eq(ProcessFbEntryChange::getId, processAll.getProjectId()));
}
public static void main(String[] args) {
for (int i = 0; i < 103; i++) {
System.out.println(i);
}
}
}
@@ -15,6 +15,7 @@ import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeLink;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
import com.jero.modules.activiti.process.fb.common.ConsultationNodeSort;
import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey;
import com.jero.modules.activiti.process.fb.common.FbCommon;
@@ -86,6 +87,9 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private SendMessageAPI sendMessageAPI;
@Resource
private ProcessDraftService processDraftService;
public static final String EXCEPTION = "目前还未开发,请联系管理员";
@@ -113,6 +117,12 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.FB_STANDARD_CONSULTATION)); // 流程定义id
// basicProcessInfoDTO.setProcessName(businessInfoDTO.getStandardNumber() + "-" + businessInfoDTO.getStandardName() + "-" + "征求意见"); // 流程名称
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.FB_STANDARD_CONSULTATION.getValue()); // 流程类型
// 删除自己的草稿
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId);
}
processHandleService.startProcess(processInfoVO);
// 把各部所主管级领导数据存入关联人员表
@@ -125,6 +135,11 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl<Proces
linkList.add(link);
});
processFbConsultationUserLinkService.saveBatch(linkList, linkList.size());
// 保存草稿用于强制撤销
processInfoVO.setSaveSource("3");
processInfoVO.getBasicTaskInfoDTO().setTaskId(null);
saveToDraft(processInfoVO);
}
/**
@@ -8,6 +8,7 @@ import com.jero.common.system.base.controller.JeroController;
import com.jero.common.util.UUIDUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardPurchase;
@@ -48,6 +49,9 @@ public class ProcessFbStandardPurchaseServiceImpl extends ServiceImpl<ProcessFbS
@Resource
private IProcessHandleService processHandleService;
@Resource
private ProcessDraftService processDraftService;
/**
* @Author: liao
* @Date: 2023/11/14 14:08
@@ -81,7 +85,17 @@ public class ProcessFbStandardPurchaseServiceImpl extends ServiceImpl<ProcessFbS
basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.FB_STANDARD_PURCHASE)); // 流程定义id
basicProcessInfoDTO.setProcessName(processName); // 流程名称
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.FB_STANDARD_PURCHASE.getValue()); // 流程类型
// 删除自己的草稿
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId);
}
processHandleService.startProcess(processInfoVO);
// 保存草稿用于强制撤销
processInfoVO.setSaveSource("3");
processInfoVO.getBasicTaskInfoDTO().setTaskId(null);
saveToDraft(processInfoVO);
}
/**
@@ -463,7 +463,9 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
if (StringUtils.isNotBlank(taskId)) {
deleteWrapper.eq(ProcessDraft::getTaskId, taskId);
}
deleteWrapper.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE);
deleteWrapper.and(qw ->
qw.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE)
.or().isNull(ProcessDraft::getSaveSource));
List<ProcessDraft> processDraftList = processDraftService.list(deleteWrapper);
for (ProcessDraft processDraft : processDraftList) {
processDraftService.removeById(processDraft.getId());
@@ -488,7 +490,8 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
if (StringUtils.isNotBlank(taskId)) {
deleteWrapper.eq(ProcessDraft::getTaskId, taskId);
}
deleteWrapper.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE);
deleteWrapper.and(qw -> qw.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE)
.or().isNull(ProcessDraft::getSaveSource));
List<ProcessDraft> processDraftList = processDraftService.list(deleteWrapper);
for (ProcessDraft processDraft : processDraftList) {
processDraftService.removeById(processDraft.getId());
@@ -548,7 +551,8 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
} else {
// 流程信息
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId));
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
if (!Objects.isNull(processAll)) {
basicProcessInfoDTO.setProcessInstanceId(processAll.getProcessInstanceId());
basicProcessInfoDTO.setProcessType(processAll.getPrcType());
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.process.meetingmanage.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -108,6 +111,8 @@ public class MeetingManageFlowServiceImpl implements IMeetingManageFlowService {
// 更新流程总表信息
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
processAll.setPrcType(Integer.valueOf(ProcessType.MEETING_MANAGE.getValue()));
DateTime date = DateUtil.date();
processAll.setPrcNum(DateUtil.format(date, DatePattern.PURE_DATETIME_MS_PATTERN));
processAll.setCreateUserId(loginUser.getId());
processAllService.update(processAll,
new LambdaUpdateWrapper<ProcessAll>()
@@ -182,7 +187,8 @@ public class MeetingManageFlowServiceImpl implements IMeetingManageFlowService {
MeetingManageFlowVO meetingManageFlowVO = new MeetingManageFlowVO();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId), false);
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
// 是否存在草稿
@@ -5,6 +5,7 @@ package com.jero.modules.activiti.process.projectstandard.common;
* @date 2024-01-15 17:25
*/
public class ProcessProjectStandardCommon {
public static final String PASS = "pass";
public static final String STANDARDS_ENGINEER = "standardsEngineer";
public static final String MANAGER_LEADER_LIST = "managerLeaderList";
@@ -12,6 +13,8 @@ public class ProcessProjectStandardCommon {
public static final String MODULE_OWNER_LIST_SIZE = "moduleOwnerListSize";
public static final String DESIGN_ENGINEER_LIST = "designEngineerList";
public static final String DESIGN_ENGINEER_LIST_SIZE = "designEngineerListSize";
public static final String NOT_INVOLVED_MODULE_OWNER_LIST_SIZE = "notInvolvedModuleOwnerListSize";
public static final String NOT_INVOLVED_MODULE_OWNER_LIST = "notInvolvedModuleOwnerList";
//法规工程师发起
@@ -9,10 +9,14 @@ import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAssessTerm;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandard;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTerm;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTermApproval;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTermUser;
import com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardService;
import javax.servlet.http.HttpServletRequest;
import com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardTermApprovalService;
import com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardTermUserService;
import com.jero.modules.activiti.process.projectstandard.vo.ProcessProjectStandardVO;
import com.jero.modules.activiti.process.projectstandard.vo.StandardSelectionVO;
import com.jero.modules.laws.common.vo.ManyStandardSelectionBox;
@@ -45,7 +49,7 @@ import java.util.List;
@Slf4j
@Api(tags = "法规合规评估流程表")
@RestController
@RequestMapping("processProjectStandard")
@RequestMapping("process/projectStandard")
public class ProcessProjectStandardController extends JeroController<ProcessProjectStandard, ProcessProjectStandardService> {
/**
* 服务对象
@@ -54,63 +58,65 @@ public class ProcessProjectStandardController extends JeroController<ProcessProj
private ProcessProjectStandardService processProjectStandardService;
@Resource
private IDocumentSplitService documentSplitService;
@Resource
private ProcessProjectStandardTermUserService termUserService;
@DictPoint
@GetMapping("/queryProcessInfoVO")
@AutoLog(value = "未符合项跟踪流程-查询流程信息")
@AutoLog(value = "法规合规评估流程-查询流程信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "draftId", value = "草稿id"),
@ApiImplicitParam(name = "taskId", value = "任务id"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例id")
})
@ApiOperation("未符合项跟踪流程-查询流程信息")
@ApiOperation("法规合规评估流程-查询流程信息")
public Result<ProcessInfoVO<ProcessProjectStandardVO>> queryProcessInfoVO(String draftId, String processInstanceId, String taskId) {
ProcessInfoVO<ProcessProjectStandardVO> processInfoVO = processProjectStandardService.queryProcessInfoVO(draftId, processInstanceId, taskId);
return Result.OK(processInfoVO);
}
@AutoLog(value = "未符合项跟踪流程-发起流程")
@ApiOperation(value = "未符合项跟踪流程-发起流程")
@AutoLog(value = "法规合规评估流程-发起流程")
@ApiOperation(value = "法规合规评估流程-发起流程")
@PostMapping(value = "/startProcess")
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
processProjectStandardService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "未符合项跟踪流程-同意")
@ApiOperation(value = "未符合项跟踪流程-同意")
@AutoLog(value = "法规合规评估流程-同意")
@ApiOperation(value = "法规合规评估流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
processProjectStandardService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "未符合项跟踪流程-驳回")
@ApiOperation(value = "未符合项跟踪流程-驳回")
@AutoLog(value = "法规合规评估流程-驳回")
@ApiOperation(value = "法规合规评估流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
processProjectStandardService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "未符合项跟踪流程-提交")
@ApiOperation(value = "未符合项跟踪流程-提交")
@AutoLog(value = "法规合规评估流程-提交")
@ApiOperation(value = "法规合规评估流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
processProjectStandardService.submit(processInfoVO);
return Result.OK();
}
@AutoLog(value = "未符合项跟踪流程-保存为草稿")
@ApiOperation(value = "未符合项跟踪流程-保存为草稿")
@AutoLog(value = "法规合规评估流程-保存为草稿")
@ApiOperation(value = "法规合规评估流程-保存为草稿")
@PostMapping(value = "/saveToDraft")
public Result<T> saveToDraft(@Validated @RequestBody ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
processProjectStandardService.saveToDraft(processInfoVO);
return Result.OK();
}
@AutoLog(value = "未符合项跟踪流程-查询标准列表")
@AutoLog(value = "法规合规评估流程-查询标准列表")
@ApiOperation(value="查询标准列表")
@GetMapping(value = "/quaryStandard")
public Result<IPage<StandardSelectionVO>> quaryStandard(ManyStandardSelectionBoxVO selectionBoxVO,
@@ -120,10 +126,10 @@ public class ProcessProjectStandardController extends JeroController<ProcessProj
}
/**
* 项目合规评估流程-查询条款列表
* 法规合规评估流程-查询条款列表
* @return
*/
@AutoLog(value = "项目合规评估流程-查询条款列表")
@AutoLog(value = "法规合规评估流程-查询条款列表")
@ApiOperation(value = "查询条款列表")
@PostMapping("/processProjectStandardGetList")
public Result<List<ProcessProjectStandardTerm>> processProjectStandardGetList(@RequestBody ProcessProjectStandard processProjectStandard) {
@@ -139,5 +145,18 @@ public class ProcessProjectStandardController extends JeroController<ProcessProj
return Result.OK(allList);
}
/**
* 法规合规评估流程-查询立项结果列表
* @return
*/
@DictPoint
@AutoLog(value = "法规合规评估流程-查询立项结果列表")
@ApiOperation(value = "查询立项结果列表")
@GetMapping("/getTermApprovalList")
public Result<List<ProcessProjectStandardTermApproval>> getTermApprovalList(@RequestParam(name="id") String id) {
List<ProcessProjectStandardTermApproval> page = processProjectStandardService.getTermApprovalList(id);
return Result.OK(page);
}
}
@@ -95,6 +95,13 @@ public class ProcessProjectStandard {
@ApiModelProperty(value = "标准编号")
private String standardNumber;
/**
* 标准名称
*/
@TableField(value = "standard_name")
@ApiModelProperty(value = "标准名称")
private String standardName;
/**
* 分解单来源
*/
@@ -8,6 +8,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.List;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -136,6 +138,12 @@ public class ProcessProjectStandardTerm {
@ApiModelProperty(value="设计工程师")
private String designEngineer;
/**
* 设计工程师
*/
@ApiModelProperty(value="设计工程师")
private String designEngineer_dictText;
/**
* 抄送人员
*/
@@ -150,6 +158,13 @@ public class ProcessProjectStandardTerm {
@ApiModelProperty(value = "不涉及原因")
private String notInvolved;
/**
* 是否与车型强关联
*/
@TableField(exist = false)
@ApiModelProperty(value="是否与车型强关联")
private String isRelate;
/**
* 车型系列
*/
@@ -161,7 +176,7 @@ public class ProcessProjectStandardTerm {
*/
@TableField(exist = false)
@ApiModelProperty(value="车型系列")
private String modelSeries_dict;
private String modelSeries_dictText;
/**
* 依据描述
@@ -194,4 +209,8 @@ public class ProcessProjectStandardTerm {
@ApiModelProperty(value="评估结果")
private String assessResults;
@TableField(exist = false)
@ApiModelProperty(value="评估结果")
private String assessResults_dictText;
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
@@ -80,6 +81,7 @@ public class ProcessProjectStandardTermApproval {
/**
* 责任单位负责人id
*/
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')")
@TableField(value = "responsible_unit_leader")
@ApiModelProperty(value="责任单位负责人id")
private String responsibleUnitLeader;
@@ -94,6 +96,7 @@ public class ProcessProjectStandardTermApproval {
/**
* 评估结果(1-符合、2-不符合、3-不涉及)
*/
@Dict(dicCode = "assess_results")
@TableField(value = "assess_results")
@ApiModelProperty(value="评估结果(1-符合、2-不符合、3-不涉及)")
private String assessResults;
@@ -101,6 +104,7 @@ public class ProcessProjectStandardTermApproval {
/**
* 是否立项
*/
@Dict(dicCode = "yn")
@TableField(value = "project_approval_flag")
@ApiModelProperty(value="是否立项")
private String projectApprovalFlag;
@@ -109,8 +109,8 @@ public class ProcessProjectStandardTermUser {
/**评估结果(1-符合、2-不符合)*/
@TableField(value = "assess_results")
@Dict(dicCode = "standards_assess_results")
@ApiModelProperty(value = "评估结果(1-符合、2-不符合)")
@Dict(dicCode = "assess_results")
@ApiModelProperty(value = "评估结果(1-符合、2-不符合、3-不涉及)")
private String assessResults;
/**
@@ -134,10 +134,17 @@ public class ProcessProjectStandardTermUser {
@ApiModelProperty(value="父执行实例流id")
private String parentExecutionId;
/**
* 是否与车型强关联
*/
@TableField(value = "is_relate")
@ApiModelProperty(value="是否与车型强关联")
private String isRelate;
/**
* 车型系列
*/
@TableField(value = "model_series")
@Dict(dicCode = "model_series")
@ApiModelProperty(value="车型系列")
private String modelSeries;
/**
@@ -145,7 +152,7 @@ public class ProcessProjectStandardTermUser {
*/
@TableField(exist = false)
@ApiModelProperty(value="车型系列")
private String modelSeries_dict;
private String modelSeries_dictText;
/**
* 依据描述
@@ -167,4 +174,11 @@ public class ProcessProjectStandardTermUser {
@TableField(value = "project_approval_flag")
@ApiModelProperty(value="是否立项")
private Integer projectApprovalFlag;
/**
* 任务id
*/
@TableField(exist = false)
@ApiModelProperty(value="任务id")
private String taskId;
}
@@ -16,7 +16,11 @@ public interface ProcessProjectStandardTermMapper extends BaseMapper<ProcessProj
List<ProcessProjectStandardTerm> getByModuleOwner(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("executionParentId") String executionParentId, @Param("hasDesignEngineer") Boolean hasDesignEngineer);
List<ProcessProjectStandardTerm> getByModuleOwnerAutoComplete(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("executionParentId") String executionParentId);
List<ProcessProjectStandardTerm> getByDesignEngineer(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("executionParentId") String executionParentId);
List<ProcessProjectStandardTerm> getByStandardsEngineer(@Param("processId") String processId);
List<ProcessProjectStandardTerm> getByTermDesignEngineer(@Param("processId") String processId, @Param("originUserId") String originUserId);
}
@@ -13,11 +13,12 @@
<result column="del_flag" jdbcType="INTEGER" property="delFlag" />
<result column="source" jdbcType="VARCHAR" property="source" />
<result column="standard_number" jdbcType="VARCHAR" property="standardNumber" />
<result column="standard_name" jdbcType="VARCHAR" property="standardName" />
<result column="decomposition_order_Source" jdbcType="VARCHAR" property="decompositionOrderSource" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_by, create_time, update_by, update_time, org_code, del_flag, `source`,
standard_number, decomposition_order_Source
standard_number, standard_name, decomposition_order_Source
</sql>
</mapper>
@@ -28,6 +28,8 @@
<result column="responsible_unit_leader" property="responsibleUnitLeader"/>
<result column="term_user_id" property="termUserId"/>
<result column="assess_results" property="assessResults"/>
<result column="model_series" property="modelSeries"/>
<result column="is_relate" property="isRelate"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
@@ -38,16 +40,15 @@
<select id="getByResponsibleUnitLeader" resultMap="BaseResultMap">
select
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer,
<include refid="Base_Column_List">
<property name="alias" value="ppat"/>
<property name="alias" value="ppst"/>
</include>
,
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer
from process_project_standard_term ppst
left join process_project_standard_term_user ppstu on ppst.id = ppstu.term_id
where ppst.process_id = #{processId}
@@ -60,16 +61,16 @@
<select id="getByModuleOwner" resultMap="BaseResultMap">
select
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.model_series,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer,
<include refid="Base_Column_List">
<property name="alias" value="ppat"/>
<property name="alias" value="ppst"/>
</include>
,
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer
from process_project_standard_term ppst
left join process_project_standard_term_user ppstu on ppst.id = ppstu.term_id
where ppst.process_id = #{processId}
@@ -81,19 +82,40 @@
and ppstu.id is not null
</select>
<select id="getByModuleOwnerAutoComplete" resultMap="BaseResultMap">
select ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.model_series,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer,
<include refid="Base_Column_List">
<property name="alias" value="ppst"/>
</include>
from process_project_standard_term ppst
left join process_project_standard_term_user ppstu on ppst.id = ppstu.term_id
where ppst.process_id = #{processId}
and ppstu.module_owner = #{originUserId}
and ppstu.parent_execution_id = #{executionParentId}
and ppstu.design_engineer is not null
and ppstu.id is not null
</select>
<select id="getByDesignEngineer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List">
<property name="alias" value="ppat"/>
</include>
,
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.module_owner,
ppstu.assess_results,
ppstu.model_series,
ppstu.is_relate,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer
ppstu.design_engineer,
<include refid="Base_Column_List">
<property name="alias" value="ppst"/>
</include>
from process_project_standard_term ppst
left join process_project_standard_term_user ppstu on ppst.id = ppstu.term_id
where ppst.process_id = #{processId}
@@ -104,19 +126,23 @@
<select id="getByStandardsEngineer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List">
<property name="alias" value="ppat"/>
</include>
,
ppstu.id term_user_id,
ppstu.not_involved,
ppstu.assess_results,
ppstu.description,
ppstu.file_id,
ppstu.design_engineer
<include refid="Base_Column_List">
<property name="alias" value="ppst"/>
</include>
from process_project_standard_term ppst
left join process_project_standard_term_user ppstu on ppst.id = ppstu.term_id
where ppst.process_id = #{processId}
and ppstu.id is not null
</select>
<select id="getByTermDesignEngineer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List">
<property name="alias" value="ppst"/>
</include>
from process_project_standard_term ppst
where ppst.process_id = #{processId}
and ppst.design_engineer = #{originUserId}
</select>
</mapper>
@@ -3,12 +3,15 @@ package com.jero.modules.activiti.process.projectstandard.service;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.dto.message.SendMessageDTO;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.api.vo.SendMessageAPI;
import com.jero.common.constant.CommonConstant;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.DictModel;
@@ -24,7 +27,6 @@ import com.jero.modules.activiti.process.fb.dto.ProcessDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.projectassess.common.ProcessProjectAssessCommon;
import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAssessTermUser;
import com.jero.modules.activiti.process.projectstandard.common.ProcessProjectStandardCommon;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTerm;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTermApproval;
@@ -35,6 +37,7 @@ import com.jero.modules.activiti.process.projectstandard.vo.ProcessProjectStanda
import com.jero.modules.activiti.process.projectstandard.vo.StandardSelectionVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.util.ThreadLocalUtil;
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
import com.jero.modules.laws.common.mapper.LawsCommonMapper;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.common.vo.ManyStandardSelectionBoxVO;
@@ -43,6 +46,8 @@ import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.projectLibrary.common.AssessCommon;
import com.jero.modules.projectLibrary.entity.LawsSpecialProjectLibrary;
import com.jero.modules.projectLibrary.service.ILawsSpecialProjectLibraryService;
import com.jero.modules.projectLibrary.vo.DecompositionOrderSourceVO;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
import com.jero.modules.split.service.ISarFileSplitInfoService;
@@ -56,8 +61,10 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandard;
import com.jero.modules.activiti.process.projectstandard.mapper.ProcessProjectStandardMapper;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
@@ -67,6 +74,7 @@ import java.util.stream.Collectors;
*@date 2024-01-15 16:17
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectStandardMapper, ProcessProjectStandard> {
@Resource
@@ -99,6 +107,8 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
private ProcessProjectStandardTermUserService termUserService;
@Resource
private ProcessProjectStandardTermApprovalService termApprovalService;
@Resource
private ILawsSpecialProjectLibraryService lawsSpecialProjectLibraryService;
@@ -132,12 +142,10 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
userNameMap.put(loginUser.getId(), loginUser.calcNameWorkNo());
}
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
String createUserId = processAll.getCreateUserId();
//发起人
String createUserName = userNameMap.get(createUserId);
LambdaQueryWrapper<ProcessProjectStandardTermUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessProjectStandardTermUser::getProcessId, processId);
List<ProcessProjectStandardTermUser> list = new ArrayList<>();
List<ProcessProjectStandardTermUser> termUserList = new ArrayList<>();
switch (taskDefinitionKey) {
//部所主管级领导下发
case ProcessProjectStandardCommon.BSZGJLDXF:
@@ -150,82 +158,124 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
//驳回后模块责任人分发
case ProcessProjectStandardCommon.MKZRRFF_4:
case ProcessProjectStandardCommon.MKZRRFF_5:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, true);
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, false);
break;
//设计工程师评估
case ProcessProjectStandardCommon.SJGCSPG_:
processProjectStandardTermList = termMapper.getByDesignEngineer(processId, originUserId, executionParentId);
wrapper.eq(ProcessProjectStandardTermUser::getDesignEngineer, originUserId);
wrapper.eq(ProcessProjectStandardTermUser::getParentExecutionId, executionParentId);
list = termUserService.list(wrapper);
break;
//模块责任人审批
case ProcessProjectStandardCommon.MKZRRFF_:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, false);
case ProcessProjectStandardCommon.MKZRRSP_:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, true);
wrapper.eq(ProcessProjectStandardTermUser::getModuleOwner, originUserId);
wrapper.eq(ProcessProjectStandardTermUser::getParentExecutionId, executionParentId);
list = termUserService.list(wrapper);
termUserList = termUserService.list(wrapper);
break;
//部所主管级领导审批
case ProcessProjectStandardCommon.BSZGJLDSP_:
processProjectStandardTermList = termMapper.getByResponsibleUnitLeader(processId, originUserId, true);
wrapper.eq(ProcessProjectStandardTermUser::getResponsibleUnitLeader, originUserId);
termUserList = termUserService.list(wrapper);
break;
//法规工程师审批
case ProcessProjectStandardCommon.FGGCSSP:
processProjectStandardTermList = termMapper.getByStandardsEngineer(processId);
termUserList = termUserService.list(wrapper);
break;
//设计工程师补充工作令编号
case ProcessProjectStandardCommon.SJGCSBCGZLBH:
processProjectStandardTermList = termMapper.getByStandardsEngineer(processId);
processProjectStandardTermList = termMapper.getByTermDesignEngineer(processId, originUserId);
break;
default:
}
List<DictModel> modelSeriesDict = sysBaseAPI.queryDictItemsByCode("model_series");
Map<String, String> modelSeriesDictMap = CollStreamUtil.toMap(modelSeriesDict, DictModel::getValue, DictModel::getText);
List<DictModel> dictModels = sysBaseAPI.queryDictItemsByCode("assess_results");
Map<String, String> dictevaluationFeedbackMap = CollStreamUtil.toMap(dictModels, DictModel::getValue, DictModel::getText);
Map<String, String> assessResultsMap = CollStreamUtil.toMap(dictModels, DictModel::getValue, DictModel::getText);
//给条款中保存关联的信息
Map<String, List<ProcessProjectStandardTermUser>> termIdListMap = CollStreamUtil.groupByKey(list, ProcessProjectStandardTermUser::getTermId);
Map<String, List<ProcessProjectStandardTermUser>> termIdListMap = CollStreamUtil.groupByKey(termUserList, ProcessProjectStandardTermUser::getTermId);
for (ProcessProjectStandardTerm term : processProjectStandardTermList) {
String termId = term.getId();
List<ProcessProjectStandardTermUser> termUsers = termIdListMap.get(termId);
if (CollectionUtil.isNotEmpty(termUsers)){
if (termIdListMap.containsKey(termId)) {
List<ProcessProjectStandardTermUser> termUsers = termIdListMap.get(termId);
String assessResults = AssessCommon.NOT_INVOLVED;
String projectApprovalFlag = YesOrNoEnum.NO.getValue();
List<String> moduleOwnerList = new ArrayList<>();
List<String> responsibleUnitLeaderList = new ArrayList<>();
for (ProcessProjectStandardTermUser termUser : termUsers) {
moduleOwnerList.add(termUser.getModuleOwner());
responsibleUnitLeaderList.add(termUser.getResponsibleUnitLeader());
String assessResults1 = termUser.getAssessResults();
if (AssessCommon.NOT_COMPLIANT.equals(assessResults1)) {
assessResults = AssessCommon.NOT_COMPLIANT;
projectApprovalFlag = YesOrNoEnum.YES.getValue();
break;
}
if (AssessCommon.ACCORD_WITH.equals(assessResults1)) {
assessResults = AssessCommon.ACCORD_WITH;
projectApprovalFlag = YesOrNoEnum.NO.getValue();
}
}
if (ProcessProjectStandardCommon.BSZGJLDSP_.equals(taskDefinitionKey)){
List<String> userNameList = new ArrayList<>();
moduleOwnerList.stream()
.filter(Objects::nonNull)
.distinct().forEach(i ->{
userNameList.add(userNameMap.get(i)) ;
});
term.setModuleOwner(String.join(",", userNameList));
}
if (ProcessProjectStandardCommon.FGGCSSP.equals(taskDefinitionKey)){
List<String> userNameList = new ArrayList<>();
responsibleUnitLeaderList.stream()
.filter(Objects::nonNull)
.distinct().forEach(i ->{
userNameList.add(userNameMap.get(i)) ;
});
term.setResponsibleUnitLeader(String.join(",", userNameList));
}
ProcessProjectStandardTermUser termUser = termUsers.get(0);
term.setDescription(termUser.getDescription());
term.setFileId(termUser.getFileId());
term.setProjectApprovalFlag(projectApprovalFlag);
term.setAssessResults(assessResults);
term.setAssessResults_dictText(assessResultsMap.get(assessResults));
}
String modelSeries = term.getModelSeries();
term.setModelSeries_dictText(sysBaseAPI.translateByDictMap(modelSeriesDictMap,modelSeries));
String designEngineer = term.getDesignEngineer();
term.setDesignEngineer_dictText(userNameMap.get(designEngineer));
}
//拼接分类法规标题
List<DictModel> decompositionOrderSourceDictModels = sysBaseAPI.queryDictItemsByCode("decomposition_order_source");
Map<String, String> decompositionOrderSourceMap = CollStreamUtil.toMap(decompositionOrderSourceDictModels, DictModel::getValue, DictModel::getText);
Map<String, ProcessProjectStandardTerm> splitInfoIdMap = this.getSplitInfoIdMap(processId);
List<ProcessProjectStandardTerm> allProjectAssesTermList = new ArrayList<>();
List<String> usedSplitInfoId = new ArrayList<>();
for (ProcessProjectStandardTerm term : processProjectStandardTermList) {
String splitInfoId = term.getSplitInfoId();
if (!usedSplitInfoId.contains(splitInfoId) && splitInfoIdMap.containsKey(splitInfoId)) {
usedSplitInfoId.add(splitInfoId);
ProcessProjectStandardTerm titleTerm = splitInfoIdMap.get(splitInfoId);
ProcessProjectStandardTerm term1 = new ProcessProjectStandardTerm();
term1.setTermName(titleTerm.getTermName());
term1.setTermNumber(titleTerm.getTermNumber());
term1.setTermText(decompositionOrderSourceMap.get(titleTerm.getTermText()));
allProjectAssesTermList.add(term1);
}
allProjectAssesTermList.add(term);
String moduleOwner1 = null;
if (processProjectStandardTermList.size()>0){
ProcessProjectStandardTerm term = processProjectStandardTermList.get(0);
String moduleOwner = term.getModuleOwner();
moduleOwner1 = userNameMap.get(moduleOwner);
}
ProcessProjectStandard processProjectStandard = this.getById(processId);
ProcessProjectStandardVO processProjectStandardVO = new ProcessProjectStandardVO();
processProjectStandardVO.setModuleOwner(moduleOwner1);
processProjectStandardVO.setProcessProjectStandard(processProjectStandard);
processProjectStandardVO.setProcessProjectStandardTermList(processProjectStandardTermList);
//processProjectStandardVO.setProcessProjectStandardTermUserList();
if (ProcessProjectStandardCommon.FGGCSSP.equals(taskDefinitionKey)){
String termId = processProjectStandardTermList.get(0).getId();
LambdaQueryWrapper<ProcessProjectStandardTermApproval> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessProjectStandardTermApproval::getTermId,termId);
List<ProcessProjectStandardTermApproval> approvalList = termApprovalService.list(wrapper1);
for (ProcessProjectStandardTermApproval termApproval : approvalList) {
String responsibleUnitLeader = termApproval.getResponsibleUnitLeader();
termApproval.setResponsibleUnitLeader(userNameMap.get(responsibleUnitLeader));
String assessResults = termApproval.getAssessResults();
termApproval.setAssessResults(assessResultsMap.get(assessResults));
String projectApprovalFlag = termApproval.getProjectApprovalFlag();
termApproval.setProjectApprovalFlag(YesOrNoEnum.YES.getValue().equals(projectApprovalFlag)?YesOrNoEnum.YES.getName():YesOrNoEnum.NO.getName());
}
processProjectStandardVO.setProcessProjectStandardTermApprovalList(approvalList);
}
processInfoVO.setBusinessInfoDTO(processProjectStandardVO);
return processInfoVO;
}
@@ -253,6 +303,7 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
ProcessProjectStandard processProjectStandard = businessInfoDTO.getProcessProjectStandard();
processProjectStandard.setId(null);
this.save(processProjectStandard);
String processId = processProjectStandard.getId();
processInfoVO.setBusinessId(processId);
@@ -312,78 +363,6 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
processHandleService.startProcess(processInfoVO);
}
public void approveTask(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, boolean pass) {
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
String taskId = basicTaskInfoDTO.getTaskId();
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
String processInstanceId = processDTO.getProcessInstanceId();
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
processInfoVO.setBusinessId(processAll.getProjectId());
Task task = processDTO.getTask();
String taskDefinitionKey = task.getTaskDefinitionKey();
if (taskDefinitionKey.contains("_") && !taskDefinitionKey.contains(ProcessProjectStandardCommon.MKZRRFF_)){
taskDefinitionKey = taskDefinitionKey.substring(0,taskDefinitionKey.length()-1);
}
processHandleService.updateApprovalRecord(processInfoVO);
switch (taskDefinitionKey) {
//模块责任人审批
case ProcessProjectStandardCommon.MKZRRFF_:
mkzrrffApprove(processInfoVO, processDTO, pass);
break;
//部所主管级领导审批
case ProcessProjectStandardCommon.BSZGJLDSP_:
bszgjldspApprove(processInfoVO, processDTO, pass);
break;
//法规工程师审批
case ProcessProjectStandardCommon.FGGCSSP:
fggcsspApprove(processInfoVO, processDTO, pass);
break;
default:
}
}
//模块责任人审批
private void mkzrrffApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
// 完成任务
String taskId = processDTO.getTaskId();
Map<String, Object> variables = new HashMap<>();
variables.put(ProcessProjectAssessCommon.PASS, pass);
taskService.complete(taskId, variables);
}
//部所主管级领导审批
private void bszgjldspApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
String businessId = processInfoVO.getBusinessId();
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
Task task = processDTO.getTask();
String executionId = task.getExecutionId();
//查询表单
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
List<ProcessProjectStandardTerm> termList = businessInfoDTO.getProcessProjectStandardTermList();
List<ProcessProjectStandardTermApproval> termApprovalList = new ArrayList<>();
//删除之前的立项结果
List<String> termIdList = termList.stream().map(ProcessProjectStandardTerm::getId).collect(Collectors.toList());
LambdaQueryWrapper<ProcessProjectStandardTermApproval> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(ProcessProjectStandardTermApproval::getProcessId,businessId);
deleteWrapper.eq(ProcessProjectStandardTermApproval::getResponsibleUnitLeader,originUserId);
deleteWrapper.in(ProcessProjectStandardTermApproval::getTermId,termIdList);
termApprovalService.remove(deleteWrapper);
//保存立项结果
for (ProcessProjectStandardTerm term : termList) {
ProcessProjectStandardTermApproval termApproval = new ProcessProjectStandardTermApproval();
termApproval.setProcessId(businessId);
termApproval.setResponsibleUnitLeader(CurrentUserUtil.getId());
termApproval.setTermId(term.getId());
termApproval.setAssessResults(term.getAssessResults());
termApproval.setProjectApprovalFlag(term.getProjectApprovalFlag());
termApprovalList.add(termApproval);
}
termApprovalService.saveBatch(termApprovalList);
}
//法规工程师审批
private void fggcsspApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
}
public void submit(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
String taskId = basicTaskInfoDTO.getTaskId();
@@ -422,6 +401,221 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
default:
}
}
public void approveTask(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, boolean pass) {
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
String taskId = basicTaskInfoDTO.getTaskId();
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
String processInstanceId = processDTO.getProcessInstanceId();
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
processInfoVO.setBusinessId(processAll.getProjectId());
Task task = processDTO.getTask();
String taskDefinitionKey = task.getTaskDefinitionKey();
if (taskDefinitionKey.contains("_") && !taskDefinitionKey.contains(ProcessProjectStandardCommon.MKZRRFF_)){
taskDefinitionKey = taskDefinitionKey.substring(0,taskDefinitionKey.length()-1);
}
processHandleService.updateApprovalRecord(processInfoVO);
switch (taskDefinitionKey) {
//模块责任人审批
case ProcessProjectStandardCommon.MKZRRSP_:
mkzrrffApprove(processInfoVO, processDTO, pass);
break;
//部所主管级领导审批
case ProcessProjectStandardCommon.BSZGJLDSP_:
bszgjldspApprove(processInfoVO, processDTO, pass);
break;
//法规工程师审批
case ProcessProjectStandardCommon.FGGCSSP:
fggcsspApprove(processInfoVO, processDTO, pass);
break;
default:
}
}
//模块责任人审批
private void mkzrrffApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
Task task = processDTO.getTask();
String parentExecutionId = task.getFormKey();
//查询表单
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
List<ProcessProjectStandardTerm> termList = businessInfoDTO.getProcessProjectStandardTermList();
List<String> designEngineerList = termList.stream().map(ProcessProjectStandardTerm::getDesignEngineer).distinct().collect(Collectors.toList());
// 完成任务
ThreadLocalUtil.put(ProcessProjectAssessCommon.EXECUTION_ID,parentExecutionId);
String taskId = processDTO.getTaskId();
Map<String, Object> variables = new HashMap<>();
variables.put(ProcessProjectStandardCommon.PASS, pass);
variables.put(ProcessProjectStandardCommon.DESIGN_ENGINEER_LIST, designEngineerList);
taskService.complete(taskId, variables);
}
//部所主管级领导审批
private void bszgjldspApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
String businessId = processInfoVO.getBusinessId();
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
Task task = processDTO.getTask();
String executionId = task.getExecutionId();
//查询表单
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
List<ProcessProjectStandardTerm> termList = businessInfoDTO.getProcessProjectStandardTermList();
List<ProcessProjectStandardTermApproval> termApprovalList = new ArrayList<>();
//删除之前的立项结果
List<String> termIdList = termList.stream().map(ProcessProjectStandardTerm::getId).collect(Collectors.toList());
LambdaQueryWrapper<ProcessProjectStandardTermApproval> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(ProcessProjectStandardTermApproval::getProcessId,businessId);
deleteWrapper.eq(ProcessProjectStandardTermApproval::getResponsibleUnitLeader,originUserId);
deleteWrapper.in(ProcessProjectStandardTermApproval::getTermId,termIdList);
termApprovalService.remove(deleteWrapper);
//保存立项结果
for (ProcessProjectStandardTerm term : termList) {
ProcessProjectStandardTermApproval termApproval = new ProcessProjectStandardTermApproval();
termApproval.setProcessId(businessId);
termApproval.setResponsibleUnitLeader(CurrentUserUtil.getId());
termApproval.setTermId(term.getId());
termApproval.setAssessResults(term.getAssessResults());
termApproval.setProjectApprovalFlag(term.getProjectApprovalFlag());
termApprovalList.add(termApproval);
}
termApprovalService.saveBatch(termApprovalList);
ThreadLocalUtil.put(ProcessProjectAssessCommon.EXECUTION_ID,executionId);
// 完成任务
Map<String, Object> variables = new HashMap<>();
//如果驳回查询下一步的模块责任人
if (!pass){
LambdaQueryWrapper<ProcessProjectStandardTermUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessProjectStandardTermUser::getProcessId,businessId);
wrapper.eq(ProcessProjectStandardTermUser::getResponsibleUnitLeader,originUserId);
List<ProcessProjectStandardTermUser> termUserList = termUserMapper.selectList(wrapper);
for (ProcessProjectStandardTermUser termUser : termUserList) {
termUser.setParentExecutionId(executionId);
}
termUserService.updateBatchById(termUserList);
//选择不涉及的模块责任人
List<String> notInvolvedModuleOwnerList = termUserList.stream()
.filter(i -> StringUtils.isBlank(i.getDesignEngineer()))
.map(ProcessProjectStandardTermUser::getModuleOwner)
.distinct()
.collect(Collectors.toList());
//选择设计工程师的模块责任人
List<String> moduleOwnerList = termUserList.stream()
.filter(i -> StringUtils.isNotBlank(i.getDesignEngineer()))
.map(ProcessProjectStandardTermUser::getModuleOwner)
.distinct()
.collect(Collectors.toList());
variables.put(ProcessProjectStandardCommon.NOT_INVOLVED_MODULE_OWNER_LIST, notInvolvedModuleOwnerList);
variables.put(ProcessProjectStandardCommon.NOT_INVOLVED_MODULE_OWNER_LIST_SIZE, notInvolvedModuleOwnerList.size());
variables.put(ProcessProjectStandardCommon.MODULE_OWNER_LIST, moduleOwnerList);
variables.put(ProcessProjectStandardCommon.MODULE_OWNER_LIST_SIZE, moduleOwnerList.size());
}
String taskId = processDTO.getTaskId();
variables.put(ProcessProjectStandardCommon.PASS, pass);
taskService.complete(taskId, variables);
}
//法规工程师审批
private void fggcsspApprove(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
String businessId = processInfoVO.getBusinessId();
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
Task task = processDTO.getTask();
String executionId = task.getExecutionId();
//查询流程信息
ProcessAll process = processAllService.getByProcessInstanceId(processDTO.getProcessInstanceId());
ProcessProjectStandard processProjectStandard = this.getById(businessId);
//查询不符合的评估
LambdaQueryWrapper<ProcessProjectStandardTermUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessProjectStandardTermUser::getProcessId, businessId);
wrapper.eq(ProcessProjectStandardTermUser::getAssessResults, AssessCommon.NOT_COMPLIANT);
List<ProcessProjectStandardTermUser> notCompliantList = termUserService.list(wrapper);
Map<String, List<ProcessProjectStandardTermUser>> termIdMap = CollStreamUtil.groupByKey(notCompliantList, ProcessProjectStandardTermUser::getTermId);
//查询表单
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
List<ProcessProjectStandardTerm> termList = businessInfoDTO.getProcessProjectStandardTermList();
List<String> carbonCopyPersonnelList = new ArrayList<>();
List<ProcessProjectStandardTerm> updateTermList = new ArrayList<>();
Date date = new Date();
for (ProcessProjectStandardTerm term : termList) {
ProcessProjectStandardTerm term1 = new ProcessProjectStandardTerm();
String termId = term.getId();
String assessResults = term.getAssessResults();
String designEngineer = term.getDesignEngineer();
term1.setId(termId);
term1.setAssessResults(assessResults);
term1.setDescription(designEngineer);
if (!pass){
continue;
}
updateTermList.add(term1);
carbonCopyPersonnelList.addAll(Arrays.asList(term.getCarbonCopyPersonnels().split(",")));
LawsSpecialProjectLibrary projectLibrary = new LawsSpecialProjectLibrary();
projectLibrary.setSource(processProjectStandard.getSource());
String standardNumber = processProjectStandard.getStandardNumber();
projectLibrary.setStandardNumber(standardNumber);
String standardName = processProjectStandard.getStandardName();
projectLibrary.setStandardName(standardName);
projectLibrary.setStandardId(processProjectStandard.getStandardId());
String termName = term.getTermName();
String termNumber = term.getTermNumber();
if (!Objects.equals(termName,standardName) && !Objects.equals(termNumber,standardNumber)){
projectLibrary.setTermNumber(termNumber);
projectLibrary.setTermName(termName);
}
projectLibrary.setStandardState(processProjectStandard.getDecompositionOrderSource());
projectLibrary.setModelSeries(term.getModelSeries());
projectLibrary.setResult(term.getAssessResults());
projectLibrary.setMaterial(term.getFileId());
projectLibrary.setValuationTime(date);
projectLibrary.setProjectApproval(term.getProjectApprovalFlag());
projectLibrary.setProcessNum(process.getPrcNum());
//存入不符合描述
if (termIdMap.containsKey(termId)) {
List<ProcessProjectStandardTermUser> termUserList = termIdMap.get(termId);
String description = termUserList.stream().map(ProcessProjectStandardTermUser::getDescription).collect(Collectors.joining(","));
projectLibrary.setDescription(description);
}
//推送数据到法规项目库
lawsSpecialProjectLibraryService.save(projectLibrary);
}
//更新数据
if (pass){
termService.updateBatchById(updateTermList);
}
// 完成任务
String taskId = processDTO.getTaskId();
Map<String, Object> variables = new HashMap<>();
variables.put(ProcessProjectStandardCommon.PASS, pass);
if (!pass){
LambdaQueryWrapper<ProcessProjectStandardTermUser> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessProjectStandardTermUser::getProcessId, businessId);
wrapper1.isNotNull(ProcessProjectStandardTermUser::getResponsibleUnitLeader);
List<ProcessProjectStandardTermUser> termUserList = termUserService.list(wrapper1);
List<String> designEngineerList = termUserList.stream()
.map(ProcessProjectStandardTermUser::getResponsibleUnitLeader)
.distinct()
.collect(Collectors.toList());
variables.put(ProcessProjectStandardCommon.DESIGN_ENGINEER_LIST, designEngineerList);
variables.put(ProcessProjectStandardCommon.DESIGN_ENGINEER_LIST_SIZE, designEngineerList.size());
}
taskService.complete(taskId, variables);
if (pass){
//发送消息
String carbonCopyPersonnels = carbonCopyPersonnelList.stream().distinct().collect(Collectors.joining(","));
SendMessageDTO sendMessageDTO = new SendMessageDTO();
sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.PROJECT_STANDARD_COMPLETE);
sendMessageDTO.setToUserId(carbonCopyPersonnels);
Map<String, String> sendMap = new HashMap<>();
sendMap.put("prcName", process.getPrcName());
sendMap.put("termNumber", process.getPrcName());
sendMap.put("termName", process.getPrcName());
sendMessageDTO.setMap(sendMap);
sendMessageAPI.sendMessage(sendMessageDTO);
}
}
//部所主管级领导下发
private void bszgjldxfSubmit(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, ProcessDTO processDTO) {
String businessId = processInfoVO.getBusinessId();
@@ -449,11 +643,12 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
updateWrapper.set(ProcessProjectStandardTermUser::getNotInvolved,notInvolved);
updateWrapper.set(ProcessProjectStandardTermUser::getAssessResults, AssessCommon.NOT_INVOLVED);
}else {
String moduleOwner = termUser.getModuleOwner();
String moduleOwner = term.getModuleOwner();
if (StringUtils.isBlank(moduleOwner)){
throw new JeroBootException(ResultCommon.PARAMETER_NOT_RECOGNIZED);
}
updateWrapper.set(ProcessProjectStandardTermUser::getModuleOwner, moduleOwner);
updateWrapper.set(ProcessProjectStandardTermUser::getParentExecutionId, executionId);
moduleOwnerIds.add(moduleOwner);
}
termUserService.update(updateWrapper);
@@ -514,13 +709,14 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
termUserService.update(updateWrapper);
}else {
//如果设计工程师有一个就更新,有多个就新增剩下的
String designEngineers = termUser.getDesignEngineer();
String designEngineers = term.getDesignEngineer();
if (StringUtils.isBlank(designEngineers)){
throw new JeroBootException(ResultCommon.PARAMETER_NOT_RECOGNIZED);
}
List<String> designEngineerList = Arrays.asList(designEngineers.split(","));
designEngineerIds.addAll(designEngineerList);
updateWrapper.set(ProcessProjectStandardTermUser::getModuleOwner, designEngineerList.get(0));
updateWrapper.set(ProcessProjectStandardTermUser::getDesignEngineer, designEngineerList.get(0));
updateWrapper.set(ProcessProjectStandardTermUser::getParentExecutionId, executionId);
termUserService.update(updateWrapper);
if (designEngineerList.size() >= 2){
@@ -529,6 +725,7 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
BeanUtils.copyProperties(termUser,termUser1);
termUser1.setId(null);
termUser1.setDesignEngineer(designEngineerList.get(i));
termUser1.setParentExecutionId(executionId);
allInsertTermUserList.add(termUser1);
}
}
@@ -565,6 +762,7 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
ProcessProjectStandardTermUser termUser = new ProcessProjectStandardTermUser();
termUser.setId(term.getTermUserId());
termUser.setAssessResults(term.getAssessResults());
termUser.setIsRelate(term.getIsRelate());
termUser.setModelSeries(term.getModelSeries());
termUser.setDescription(term.getDescription());
termUser.setFileId(term.getFileId());
@@ -623,7 +821,20 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
}
public void autoComplete(DelegateTask delegateTask) {
String assignee = delegateTask.getAssignee();
String executionParentId = delegateTask.getFormKey();
String processInstanceId = delegateTask.getProcessInstanceId();
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
String projectId = processAll.getProjectId();
List<ProcessProjectStandardTerm> termList = termMapper.getByModuleOwnerAutoComplete(projectId, assignee, executionParentId);
List<String> designEngineerIds = termList.stream()
.map(ProcessProjectStandardTerm::getDesignEngineer)
.distinct()
.collect(Collectors.toList());
ThreadLocalUtil.put(ProcessProjectAssessCommon.EXECUTION_ID,executionParentId);
Map<String, Object> variables = new HashMap<>();
variables.put(ProcessProjectStandardCommon.DESIGN_ENGINEER_LIST, designEngineerIds);
taskService.complete(delegateTask.getId(),variables);
}
/**
@@ -636,4 +847,35 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
Map<String, ProcessProjectStandardTerm> stringProcessProjectStandardTermMap = CollStreamUtil.toIdentityMap(list, ProcessProjectStandardTerm::getSplitInfoId);
return stringProcessProjectStandardTermMap;
}
public IPage<ProcessProjectStandardTermUser> getTermUserList(ProcessProjectStandardTermUser processProjectStandardTermUser, Integer pageNo, Integer pageSize, HttpServletRequest req) {
ProcessDTO processDTO = processHandleService.getProcessDTO(processProjectStandardTermUser.getTaskId());
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
QueryWrapper<ProcessProjectStandardTermUser> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(ProcessProjectStandardTermUser::getTermId,processProjectStandardTermUser.getId())
.eq(ProcessProjectStandardTermUser::getResponsibleUnitLeader,originUserId);
Page<ProcessProjectStandardTermUser> page = new Page<>(pageNo, pageSize);
Page<ProcessProjectStandardTermUser> pageList = termUserService.page(page, queryWrapper);
//获取所有用户信息
List<LoginUser> userList = sysBaseAPI.getAllUser();
Map<String, String> userNameMap = new HashMap<>();
for (LoginUser loginUser : userList) {
userNameMap.put(loginUser.getId(), loginUser.calcNameWorkNo());
}
for (ProcessProjectStandardTermUser record : pageList.getRecords()) {
String moduleOwner = record.getModuleOwner();
record.setModuleOwner(userNameMap.get(moduleOwner));
String designEngineer = record.getDesignEngineer();
record.setDesignEngineer(userNameMap.get(designEngineer));
}
return pageList;
}
public List<ProcessProjectStandardTermApproval> getTermApprovalList(String id) {
LambdaQueryWrapper<ProcessProjectStandardTermApproval> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessProjectStandardTermApproval::getTermId,id);
return termApprovalService.list(wrapper1);
}
}
@@ -1,8 +1,18 @@
package com.jero.modules.activiti.process.projectstandard.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTermUser;
import com.jero.modules.activiti.process.projectstandard.mapper.ProcessProjectStandardTermUserMapper;
@@ -13,5 +23,26 @@ import com.jero.modules.activiti.process.projectstandard.mapper.ProcessProjectSt
*/
@Service
public class ProcessProjectStandardTermUserService extends ServiceImpl<ProcessProjectStandardTermUserMapper, ProcessProjectStandardTermUser> {
@Resource
private ISysBaseAPI sysBaseAPI;
public IPage<ProcessProjectStandardTermUser> queryPage(ProcessProjectStandardTermUser processProjectStandardTermUser, Integer pageNo, Integer pageSize,
HttpServletRequest req){
QueryWrapper<ProcessProjectStandardTermUser> queryWrapper = QueryGenerator.initQueryWrapper(processProjectStandardTermUser, req.getParameterMap());
Page<ProcessProjectStandardTermUser> page = new Page<>(pageNo, pageSize);
Page<ProcessProjectStandardTermUser> pageList = page(page, queryWrapper);
//获取所有用户信息
List<LoginUser> userList = sysBaseAPI.getAllUser();
Map<String, String> userNameMap = new HashMap<>();
for (LoginUser loginUser : userList) {
userNameMap.put(loginUser.getId(), loginUser.calcNameWorkNo());
}
for (ProcessProjectStandardTermUser record : pageList.getRecords()) {
String moduleOwner = record.getModuleOwner();
record.setModuleOwner(userNameMap.get(moduleOwner));
String designEngineer = record.getDesignEngineer();
record.setDesignEngineer(userNameMap.get(designEngineer));
}
return pageList;
}
}
@@ -18,6 +18,9 @@ public class ProcessProjectStandardVO {
/**业务基本信息*/
@ApiModelProperty(value = "业务基本信息")
private ProcessProjectStandard processProjectStandard;
/**上一节点处理人*/
@ApiModelProperty(value = "上一节点处理人")
private String moduleOwner;
/**关联条款列表*/
@ApiModelProperty(value = "关联条款列表")
private List<ProcessProjectStandardTerm> processProjectStandardTermList;
@@ -1,6 +1,7 @@
package com.jero.modules.activiti.service;
import cn.hutool.core.collection.CollStreamUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -8,19 +9,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.dto.message.SendMessageDTO;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.api.vo.SendMessageAPI;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.controller.WorkCenterController;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.mapper.ProcessAllMapper;
import com.jero.modules.activiti.process.common.common.DraftCommon;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.service.ProcessDraftService;
import com.jero.modules.activiti.util.SpringContextUtil;
import com.jero.modules.activiti.vo.DelegateTaskParam;
import com.jero.modules.activiti.vo.ResolveTaskParam;
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
@@ -30,6 +35,7 @@ import org.activiti.engine.HistoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Service;
@@ -135,12 +141,37 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
processDraftService.update(processDraftUpdateWrapper);
//activiti撤销
runtimeService.deleteProcessInstance(processInstanceId,"强制撤回");
//删除流程总表
this.removeById(processAll.getId());
//删除审批表
LambdaQueryWrapper<ProcessApprovalRecord> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId,processInstanceId);
approvalRecordService.remove(wrapper1);
//更新流程总表状态
update(new LambdaUpdateWrapper<ProcessAll>()
.eq(ProcessAll::getId, processAll.getId())
.set(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue()));
// 更新最后一条待办人员为流程发起人
WorkCenterController workCenterController = SpringContextUtil.getBean(WorkCenterController.class);
ProcessApprovalRecord processApprovalRecord1 = new ProcessApprovalRecord();
processApprovalRecord1.setProcessInstanceId(processInstanceId);
Result<?> approvalRecordList = workCenterController.getApprovalRecordList(processApprovalRecord1, null);
if (!Objects.isNull(approvalRecordList.getResult())){
Page<ProcessApprovalRecord> pageList = (Page<ProcessApprovalRecord>) approvalRecordList.getResult();
if (CollectionUtils.isNotEmpty(pageList.getRecords())){
List<ProcessApprovalRecord> processApprovalRecords = JSON.parseArray(JSON.toJSONString(pageList.getRecords()), ProcessApprovalRecord.class);
if (CollectionUtils.isNotEmpty(processApprovalRecords)){
approvalRecordService.update(
new LambdaUpdateWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getId, processApprovalRecords.get(0).getId())
.set(ProcessApprovalRecord::getUserId, processApprovalRecords.get(processApprovalRecords.size() - 1).getOriginUserId()));
}
}
}
//新增撤销审批记录
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord();
processApprovalRecord.setUserId(loginUser.getId());
processApprovalRecord.setProcessInstanceId(processInstanceId);
processApprovalRecord.setFinishFlag(FinishFlagEnum.WITHDRAWN.getValue());
processApprovalRecord.setCreateTime(null);
approvalRecordService.save(processApprovalRecord);
//todo 同步删除操作到统一待办
}
@@ -3,18 +3,19 @@ package com.jero.modules.activiti.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.mapper.ProcessApprovalRecordMapper;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.ProcessApprovalRecordMapper;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
/**
*
*@author liJiaRao
@@ -32,7 +33,12 @@ public class ProcessApprovalRecordService extends ServiceImpl<ProcessApprovalRec
}
public Page<ProcessApprovalRecord> pageList(Page<ProcessApprovalRecord> page, ProcessApprovalRecord processApprovalRecord, HttpServletRequest req) {
QueryWrapper<ProcessApprovalRecord> wrapper = QueryGenerator.initQueryWrapper(processApprovalRecord, req.getParameterMap());
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(processApprovalRecord.getFinishFlagSearch())){
wrapper.in("finish_flag", Arrays.asList(processApprovalRecord.getFinishFlagSearch().split(",")));
}
wrapper.eq("process_instance_id", processApprovalRecord.getProcessInstanceId());
wrapper.last("ORDER BY IF(ISNULL(create_time), 1, 0) DESC ,create_time DESC, end_time DESC");
Page<ProcessApprovalRecord> pageList = this.page(page, wrapper);
List<ProcessApprovalRecord> records = pageList.getRecords();
for (ProcessApprovalRecord record : records) {
@@ -150,6 +150,8 @@ public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNo
if (CollectionUtils.isNotEmpty(processEsInitChanges)) {
ProcessEsInitChange processEsInitChange = processEsInitChanges.get(0);
if (Objects.equals(processEsInitChange.getApplicationCategory(), ESPApplicationCategoryEnum.INITIATION.getValue())) {
// 删除主起草人抄送节点
processNodeList.removeIf(processNode -> Objects.equals(processNode.getNodeName(), EsInitChangeConstant.AUTO_COPY));
// 将两个节点改名
processNodeList.forEach(processNode -> {
if (Objects.equals(processNode.getNodeName(), EsInitChangeConstant.MAIN_DRAFT_USER_LEADER)) {
@@ -162,6 +164,7 @@ public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNo
}
// 将两个节点改名
if (Objects.equals(processEsInitChange.getApplicationCategory(), ESPApplicationCategoryEnum.CHANGE.getValue())) {
// 删除专家审批节点
processNodeList.removeIf(processNode -> Objects.equals(processNode.getNodeName(), EsInitChangeConstant.EXPERT_CHECK));
processNodeList.forEach(processNode -> {
if (Objects.equals(processNode.getNodeName(), EsInitChangeConstant.MAIN_DRAFT_USER_LEADER)) {
@@ -1,6 +1,7 @@
package com.jero.modules.activiti.util;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.CommonAPI;
import com.jero.common.system.vo.SysDictItemCore;
import com.jero.common.util.oConvertUtils;
@@ -9,6 +10,10 @@ import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectTyp
import com.jero.modules.laws.common.util.ImportUtil;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel;
import com.jero.modules.sys.entity.LawsGrade;
import com.jero.modules.sys.service.ILawsEnterpriseStandardLevelService;
import com.jero.modules.sys.service.ILawsGradeService;
import com.jero.modules.system.entity.SysDictItem;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
@@ -46,6 +51,12 @@ public class ExcelUtils {
@Resource
private ImportUtil importUtil;
@Resource
private ILawsGradeService gradeService;
@Resource
private ILawsEnterpriseStandardLevelService enterpriseStandardLevelService;
@Resource
private ILawsEnterpriseStandardService enterpriseStandardService;
@@ -234,19 +245,6 @@ public class ExcelUtils {
return textValue.toString();
}
public String validStandardClassification(String value, List<SysDictItemCore> listDict) {
// 非空检查
if (StrUtil.isBlank(value)) {
return "'标准等级分类'不能为空。";
}
// 检查授权部门
if (!excelUtils.validDict("standard_grade_classify", value, null, null, true, listDict)) {
return "'标准等级分类'无效。";
}
return "";
}
public String validStandardType(String value, List<SysDictItemCore> listDict) {
// 非空检查
if (StrUtil.isBlank(value)) {
@@ -259,18 +257,48 @@ public class ExcelUtils {
return "";
}
public String validAuthDept(String value, List<SysDictItemCore> listDict) {
// 非空检查
if (StrUtil.isBlank(value)) {
return "'授权部门'不能为空。";
public String validAuthDept(String authDept, List<SysDictItemCore> listDict,
String standardClassification, Map<String, List<String>> authDeptMap) {
if (StrUtil.isBlank(standardClassification)) {
return "'标准等级分类'不能为空。";
}
// 检查授权部门
if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) {
return "'授权部门'无效。";
if (!excelUtils.validDict("standard_grade_classify", standardClassification, null,
null, true, listDict)) {
return "'标准等级分类'无效。";
}
String level = translateDictValue("standard_grade_classify", standardClassification, listDict);
if (level.equals("2") || level.equals("3")) {
if (StrUtil.isBlank(authDept)) {
return "'授权部门'不能为空。";
}
// 检查授权部门
if (!excelUtils.validDict("depart_name", authDept, "sys_depart", "id", false, listDict)) {
return "'授权部门'无效。";
}
// 将授权部门转换为idList
String deptIds = excelUtils.translateDictValue("depart_name", "id", "sys_depart", authDept, listDict);
boolean isMatching = isMatchingAuthDept(
Arrays.asList(deptIds.split(",")),
level.equals("2") ? authDeptMap.get("1") : authDeptMap.get("2")
);
if (!isMatching) {
return "'授权部门'和'标准等级分类'不匹配。";
}
}
return "";
}
private boolean isMatchingAuthDept(List<String> authDeptList, List<String> levelDeptList) {
return new HashSet<>(levelDeptList).containsAll(authDeptList);
}
public String validCooperateUnit(String value, List<SysDictItemCore> listDict) {
// 非空检查
if (StrUtil.isBlank(value)) {
@@ -368,19 +396,24 @@ public class ExcelUtils {
return matcher.find();
}
public String validSingleDateMustInput(String date, String name) {
public String validSingleDateMustInputNotBeforeToday(String date, String name) {
if (StrUtil.isBlank(date)) {
return "'" + name + "'不能为空。";
}
return this.validSingleDate(date, name);
return this.validSingleDateNotBeforeToday(date, name);
}
public String validSingleDate(String date, String name) {
if (importUtil.singleDateValid(date)) {
public String validSingleDateNotBeforeToday(String date, String name) {
if (StrUtil.isBlank(date)) {
return "";
} else {
}
if (!importUtil.singleDateValid(date)) {
return "'" + name + "'格式错误。";
}
if (!importUtil.singleDateValidNotBeforeToday(date)) {
return "'" + name + "'不能早于今天。";
}
return "";
}
public String validPartName(String value, List<SysDictItemCore> listDict) {
@@ -414,4 +447,23 @@ public class ExcelUtils {
}
return "";
}
public Map<String, List<String>> getAllLevelAuthDeptMap() {
Map<String, List<String>> authDeptMap = new HashMap<>();
LambdaQueryWrapper<LawsGrade> gradeWrapper = new LambdaQueryWrapper<>();
gradeWrapper.eq(LawsGrade::getLevel, 1);
LawsGrade levelOne = gradeService.getOne(gradeWrapper);
gradeWrapper.clear();
gradeWrapper.eq(LawsGrade::getLevel, 2);
LawsGrade levelTwo = gradeService.getOne(gradeWrapper);
LambdaQueryWrapper<LawsEnterpriseStandardLevel> levelWrapper = new LambdaQueryWrapper<>();
levelWrapper.eq(LawsEnterpriseStandardLevel::getGradeId, levelOne.getId());
List<LawsEnterpriseStandardLevel> levelOneList = enterpriseStandardLevelService.list(levelWrapper);
levelWrapper.clear();
authDeptMap.put("1", levelOneList.stream().map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList()));
levelWrapper.eq(LawsEnterpriseStandardLevel::getGradeId, levelTwo.getId());
List<LawsEnterpriseStandardLevel> levelTwoList = enterpriseStandardLevelService.list(levelWrapper);
authDeptMap.put("2", levelTwoList.stream().map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList()));
return authDeptMap;
}
}
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.LanguageEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.MessageUtils;
import com.jero.common.util.MinioUtil;
import com.jero.modules.compare.entity.*;
import com.jero.modules.compare.enums.AssessConsistencyEnum;
@@ -279,7 +280,7 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
response.setContentType("application/force-download");
//创建工作表对象
String sheetName = "对比结果";
if (LanguageEnum.CN.getValue().equals(cut)) {
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) {
sheetName = "对比结果";
} else {
sheetName = "Comparing results";
@@ -288,7 +289,7 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();
// 创建头部
String header = "";
if (LanguageEnum.CN.getValue().equals(cut)) {
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) {
header = "所选标准,条款号,条款名称,条款内容,所选标准,条款号,条款名称,条款内容,评论";
} else {
header = "Selected Standard,Number,Title,Content,Selected Standard,Number,Title,Content,Comment";
@@ -418,7 +419,7 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
}
if (includeComments || MyStringUtils.isEmpty(selectIds)) {
Row row = sheet.createRow(i);
if (LanguageEnum.CN.getValue().equals(cut)) {
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) {
row.createCell(0).setCellValue("全文评论");
} else {
row.createCell(0).setCellValue("The full text comments");
@@ -474,7 +475,7 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
os.flush();
} catch (IOException e) {
e.printStackTrace();
if (LanguageEnum.CN.getValue().equals(cut)) {
if (LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) {
throw new JeroBootException("下载文件失败");
} else {
throw new JeroBootException("Failed to download file");
@@ -21,5 +21,6 @@ public class MessageTemplateCodeCommon {
public static final String STANDARD_CHANGE_REFERENCE = "standard_change_reference"; // 法规变更引用标准变更
public static final String STANDARD_CONSULTATION = "standard_consultation"; // 征求意见结果提醒
public static final String PROJECT_ASSESS_COMPLETE = "project_assess_complete"; // 项目合规评估完成提醒
public static final String PROJECT_STANDARD_COMPLETE = "project_standard_complete"; // 法规合规评估完成提醒
public static final String URGING = "urging"; // 催办
}
@@ -552,6 +552,39 @@ public class ImportUtil {
return checkList;
}
public boolean singleDateValidNotBeforeToday(String cellValue) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 设置lenient为false使得日期解析更为严格
sdf.setLenient(false);
try {
Date date = sdf.parse(cellValue.trim()); // 解析日期
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
Calendar inputDate = Calendar.getInstance();
inputDate.setTime(date);
inputDate.set(Calendar.HOUR_OF_DAY, 0);
inputDate.set(Calendar.MINUTE, 0);
inputDate.set(Calendar.SECOND, 0);
inputDate.set(Calendar.MILLISECOND, 0);
if (inputDate.before(today)) {
log.error("日期必须大于等于今天");
return false;
}
return true;
} catch (ParseException e) {
// 这里捕获的应该是ParseException
log.error("日期转换错误: {}", e.getMessage());
return false;
}
}
// 单选日期校验
public boolean singleDateValid(String cellValue) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -60,6 +60,7 @@ public class ConsultationController {
@ApiOperation(value="征求意见-详情", notes="征求意见-详情")
@GetMapping(value = "/queryDetailByBusinessId")
@Translation
@RequiresPermissions("askForAdvice:search")
public Result<ProcessFbConsultationListVO> queryDetailByBusinessId(String businessId,
@ApiParam("当前页") @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ApiParam("每页条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
@@ -22,12 +22,11 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@@ -48,6 +47,8 @@ public class LawsDataCenterFolderServiceImpl extends ServiceImpl<LawsDataCenterF
private ILawsDataCenterFileService lawsDataCenterFileService;
@Autowired
private ISysUserService sysUserService;
@Value("${adminRoleCode}")
private String adminRoleCode;
/**
* @Author: liao
@@ -64,7 +65,9 @@ public class LawsDataCenterFolderServiceImpl extends ServiceImpl<LawsDataCenterF
List<LawsDataCenterFolder> allList = BeanCopyUtils.copyBeanList(lawsDataCenterFolderList, LawsDataCenterFolder.class);
// 非管理员只能看到自己创建的 or 拥有管理权限 or 拥有查看权限的文件夹 or 默认根目录
if (!roleIds.contains("admin")){
List<String> adminRoleCodeList = Arrays.asList(adminRoleCode.split(","));
Collection<String> intersection = CollectionUtils.intersection(Arrays.asList(roleIds.split(",")), adminRoleCodeList);
if (!roleIds.contains("admin") && CollectionUtils.isEmpty(intersection)){
lawsDataCenterFolderList = lawsDataCenterFolderList.stream()
.filter(v -> (StringUtils.isNotBlank(v.getAuthManageIds()) && v.getAuthManageIds().contains(loginUser.getId()))
|| (StringUtils.isNotBlank(v.getAuthViewIds()) && v.getAuthViewIds().contains(loginUser.getId()))
@@ -1033,13 +1033,6 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
public List<ProcessProjectStandardTerm> processProjectStandardGetList(String sarFileSplitInfoId) {
List<ProcessProjectStandardTerm> processProjectAssessTermList = new ArrayList<>();
ProcessProjectStandardTerm term = new ProcessProjectStandardTerm();
// 文档拆分信息
DocumentSplitInfo documentSplitInfo1 = documentSplitMapper.queryDocumentSplitInfoById(sarFileSplitInfoId);
term.setTermNumber(documentSplitInfo1.getSerialNumber());
term.setTermName(documentSplitInfo1.getTitle());
term.setSplitInfoId(sarFileSplitInfoId);
term.setTermText(documentSplitInfo1.getFileType());
processProjectAssessTermList.add(term);
// 文档拆分详情
Map<String, Object> parameter = new HashMap<>();
parameter.put(INFO_ID, sarFileSplitInfoId);
@@ -29,10 +29,10 @@ public class EnterpriseStandardInspectVo {
private String id;
/**
* 稽查依据标准号
* 稽查依据标准
*/
@Excel(name = "稽查依据标准号", width = 15, needMerge = true)
@ApiModelProperty(value = "稽查依据标准号")
@Excel(name = "稽查依据标准", width = 18, needMerge = true)
@ApiModelProperty(value = "稽查依据标准")
private String inspectNo;
/**
@@ -27,8 +27,8 @@ public class ExportDataWithDelayVo {
/**
* 稽查依据标准号
*/
@Excel(name = "稽查依据标准号", width = 15)
@ApiModelProperty(value = "稽查依据标准号")
@Excel(name = "稽查依据标准", width = 18)
@ApiModelProperty(value = "稽查依据标准")
private String inspectNo;
/**
@@ -27,6 +27,7 @@ public class ESPlanProjectStatusJob implements Job {
// 每天执行定时任务 判断所有进行中的计划是否逾期 逾期则修改项目状态为逾期
LambdaQueryWrapper<EnterpriseStandardPlan> espWrapper = new LambdaQueryWrapper<>();
espWrapper.eq(EnterpriseStandardPlan::getProjectStatus, ESPProjectStatus.IN_PROGRESS.getValue());
espWrapper.eq(EnterpriseStandardPlan::getProjectStatus, ESPProjectStatus.OVERDUE.getValue());
espWrapper.eq(EnterpriseStandardPlan::getDelFlag, YesOrNoEnum.NO.getValue());
List<EnterpriseStandardPlan> list = espService.list(espWrapper);
Date curDate = new Date();
@@ -35,6 +36,8 @@ public class ESPlanProjectStatusJob implements Job {
curDate.after(p.getSolicitationDraftPlanCompleteDate()) ||
curDate.after(p.getPlanApprovalDate())) {
p.setProjectStatus(ESPProjectStatus.OVERDUE.getValue());
} else {
p.setProjectStatus(ESPProjectStatus.IN_PROGRESS.getValue());
}
});
espService.updateBatchById(list);
@@ -197,11 +197,13 @@
actual_inspect_user,
inspect_status,
group_concat(lesio.plan_inspect_object separator ',') plan_inspect_object,
(IF(lesid.id IS NOT NULL, TRUE, FALSE)) delay_flag
(IF(lesid.id IS NOT NULL, TRUE, FALSE)) delay_flag,
realname
from laws_enterprise_standard_inspect lesi
left join laws_enterprise_standard les on lesi.inspect_no = les.standard_number and les.del_flag = '0'
left join laws_enterprise_standard_inspect_object lesio on lesi.id = lesio.inspect_id
left join laws_enterprise_standard_inspect_delay lesid on lesi.id = lesid.inspect_id
left join sys_user u on lesi.inspect_user = u.id
group by lesi.id) t
${ew.customSqlSegment}
</sql>
@@ -12,9 +12,6 @@
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="orgCode" column="org_code" jdbcType="VARCHAR"/>
<result property="delFlag" column="del_flag" jdbcType="TINYINT"/>
<result property="processName" column="process_name" jdbcType="VARCHAR"/>
<result property="deadlineDate" column="deadline_date" jdbcType="TIMESTAMP"/>
<result property="processDescription" column="process_description" jdbcType="VARCHAR"/>
<result property="applicationCategory" column="application_category" jdbcType="VARCHAR"/>
<result property="projectType" column="project_type" jdbcType="VARCHAR"/>
<result property="originEnStandardNo" column="origin_en_standard_no" jdbcType="VARCHAR"/>
@@ -53,32 +50,11 @@
<result property="similarEnStandardsAnalysis" column="similar_en_standards_analysis" jdbcType="VARCHAR"/>
<result property="standardLeadingNecessity" column="standard_leading_necessity" jdbcType="VARCHAR"/>
<result property="projectExpectedEffects" column="project_expected_effects" jdbcType="VARCHAR"/>
<result property="remarks" column="remarks" jdbcType="VARCHAR"/>
<result property="uploadAttachment" column="upload_attachment" jdbcType="VARCHAR"/>
<result property="qualityFlag" column="quality_flag" jdbcType="VARCHAR"/>
<result property="cooperationUnit" column="cooperation_unit" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,create_by,create_time,
update_by,update_time,org_code,
del_flag,process_name,deadline_date,
process_description,application_category,project_type,
origin_en_standard_num,new_en_standard_num,origin_en_standard_name,
new_en_standard_name,en_standard_english_name,en_standard_system,
en_standard_code,en_name_code,standard_category_code,
decade_code,en_standard_classification,draft_planned_complete_date,
solicitation_draft_plan_complete_date,plan_approval_date,project_status,
compilation_description,component_name,auth_dept,
cooperating_units,main_drafting_user,main_drafting_unit,
main_drafting_unit_responsible_person,standard_promoter,draft_completion_date,
draft_submission_date,solicitation_opinion_enabled,solicitation_draft_completion_date,
review_date,approval_date,release_date,
change_status,project_background,similar_na_standards_analysis,
similar_en_standards_analysis,standard_leading_necessity,project_expected_effects,
remarks,attachment,qualityFlag,cooperationUnit
</sql>
<select id="page" resultType="com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo">
SELECT
p.id,
@@ -197,9 +173,6 @@
<select id="getDetailById" resultType="com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan">
SELECT
p.id,
p.process_name,
p.deadline_date,
p.process_description,
p.application_category,
p.project_type,
p.origin_en_standard_no,
@@ -237,7 +210,6 @@
p.similar_en_standards_analysis,
p.standard_leading_necessity,
p.project_expected_effects,
p.remarks,
p.upload_attachment,
p.quality_flag
FROM
@@ -398,7 +398,7 @@ public class EnterpriseStandardInspectServiceImpl extends ServiceImpl<Enterprise
queryWrapper.eq(StringUtils.isNotBlank(enterpriseStandardInspectVo.getBelongDept()), "belong_dept", enterpriseStandardInspectVo.getBelongDept());
queryWrapper.like(StringUtils.isNotBlank(enterpriseStandardInspectVo.getInspectNo()), "inspect_no", enterpriseStandardInspectVo.getInspectNo());
queryWrapper.like(StringUtils.isNotBlank(enterpriseStandardInspectVo.getInspectName()), "inspect_name", enterpriseStandardInspectVo.getInspectName());
queryWrapper.eq(StringUtils.isNotBlank(enterpriseStandardInspectVo.getInspectUser()), "inspect_user", enterpriseStandardInspectVo.getInspectUser());
queryWrapper.like(StringUtils.isNotBlank(enterpriseStandardInspectVo.getInspectUser()), "realname", enterpriseStandardInspectVo.getInspectUser());
queryWrapper.orderByDesc("create_time");
return queryWrapper;
}
@@ -44,9 +44,6 @@ import java.util.stream.Collectors;
public class EnterpriseStandardPlanServiceImpl extends ServiceImpl<EnterpriseStandardPlanMapper, EnterpriseStandardPlan>
implements EnterpriseStandardPlanService, ESSequenceNumberProvider {
@Resource
private ISysBaseAPI sysBaseAPI;
@Resource
private EnterpriseStandardPlanMapper esPlanMapper;
@@ -54,8 +51,12 @@ public class EnterpriseStandardPlanServiceImpl extends ServiceImpl<EnterpriseSta
public IPage<EnterpriseStandardPlanVo> queryPageList(ESPlanQueryDTO esPlanQueryDTO, Integer pageNo, Integer pageSize) {
IPage<EnterpriseStandardPlanVo> page = new Page<>(pageNo, pageSize);
esPlanMapper.page(page, esPlanQueryDTO);
// TODO 判断其能否删除 主起草人在待办中未进行操作该计划允许删除(目前都设为允许删除)
page.getRecords().forEach(p -> p.setAllowDel(true));
// 未开始的才可以删除发起流程的时候需要判断计划有没有被删除如果计划被删除了则需要重新制定计划
page.getRecords().forEach(enterpriseStandardPlanVo -> {
enterpriseStandardPlanVo.setAllowDel(
ESPProjectStatus.NOT_STARTED.getValue()
.equals(enterpriseStandardPlanVo.getProjectStatus()));
});
return page;
}
@@ -81,13 +82,18 @@ public class EnterpriseStandardPlanServiceImpl extends ServiceImpl<EnterpriseSta
// 合并 未开始 修订+修订 制定+制定
projectStatusList.add(ESPProjectStatus.NOT_STARTED.getValue());
esPlanQueryDTO.setProjectStatusList(projectStatusList);
} else {
// 完成时间变更 未开始/进行中
// 工作中止 未开始/进行中
} else if (ESPProjectType.RESPONSIBLE_DEPT_CHANGE.getValue().equals(projectType)) {
// 责任部门变更 未开始/进行中
projectStatusList.add(ESPProjectStatus.NOT_STARTED.getValue());
projectStatusList.add(ESPProjectStatus.IN_PROGRESS.getValue());
esPlanQueryDTO.setProjectStatusList(projectStatusList);
} else {
// 完成时间变更 未开始/进行中/逾期
// 工作中止 未开始/进行中/逾期
projectStatusList.add(ESPProjectStatus.NOT_STARTED.getValue());
projectStatusList.add(ESPProjectStatus.IN_PROGRESS.getValue());
projectStatusList.add(ESPProjectStatus.OVERDUE.getValue());
esPlanQueryDTO.setProjectStatusList(projectStatusList);
}
IPage<EnterpriseStandardPlanVo> page = new Page<>(pageNo, pageSize);
esPlanMapper.page(page, esPlanQueryDTO);
@@ -23,10 +23,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@@ -170,15 +167,30 @@ public class LawsHomeQuickAccessServiceImpl extends ServiceImpl<LawsHomeQuickAcc
// 删除旧数据
remove(new LambdaQueryWrapper<LawsHomeQuickAccess>()
.eq(LawsHomeQuickAccess::getUserId, sysUser.getId()));
// 全部菜单
List<SysPermission> menuAllList = sysPermissionService.list();
// 获取拥有权限的菜单列表
List<SysPermission> sysPermissionList = queryPermissionMenuList("");
// 保存新数据
List<LawsHomeQuickAccess> lawsHomeQuickAccessList = new ArrayList<>();
if (StringUtils.isNotBlank(permissionIdList)){
for (String permissionId : permissionIdList.split(",")) {
String[] menuId = permissionIdList.split(",");
List<String> errorList = new ArrayList<>();
for (String permissionId : menuId) {
long count = sysPermissionList.stream().filter(v -> v.getId().equals(permissionId)).count();
if (count == 0){
Optional<SysPermission> optional = menuAllList.stream().filter(v -> v.getId().equals(permissionId)).findFirst();
optional.ifPresent(v -> errorList.add(v.getName()));
}
LawsHomeQuickAccess lawsHomeQuickAccess = new LawsHomeQuickAccess();
lawsHomeQuickAccess.setUserId(sysUser.getId());
lawsHomeQuickAccess.setPermissionId(permissionId);
lawsHomeQuickAccessList.add(lawsHomeQuickAccess);
}
if (!errorList.isEmpty()){
String join = String.join("", errorList);
throw new JeroBootException(join + ",不能保存没有权限的菜单!");
}
saveBatch(lawsHomeQuickAccessList);
}
}
@@ -0,0 +1,48 @@
package com.jero.modules.laws.standard.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel;
import com.jero.modules.laws.standard.entity.LawsTreeNode;
import com.jero.modules.laws.standard.entity.PartName;
import com.jero.modules.laws.standard.entity.TreePage;
import com.jero.modules.laws.standard.service.PartNameService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @author: Mzaxd
* @Date: 2024/1/19 10:42
*/
@Api(tags = "零部件")
@RestController
@RequestMapping("/laws/standard/partName")
@Slf4j
public class LawsPartNameController {
@Resource
private PartNameService partNameService;
@AutoLog(value = "企业标准-零部件树")
@ApiOperation(value = "企业标准-零部件树", notes = "企业标准-零部件树")
@GetMapping("/")
public Result<TreePage<PartName>> queryENTreeList(
@RequestParam(required = false, defaultValue = "") @ApiParam("一级节点名称") String nodeName,
@RequestParam(name = "pageNo", defaultValue = "1") @ApiParam("页码") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") @ApiParam("页面大小") Integer pageSize) {
TreePage<PartName> list = partNameService.queryTreeList(nodeName, pageNo, pageSize);
return Result.OK(list);
}
}
@@ -0,0 +1,60 @@
package com.jero.modules.laws.standard.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.laws.standard.entity.LawsUpdateRecord;
import com.jero.modules.laws.standard.service.ILawsUpdateRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
/**
* @Description: 文档动态
* @Author: jero-boot
* @Date: 2024-01-19
* @Version: V1.0
*/
@Api(tags = "文档动态")
@RestController
@RequestMapping("/laws/standard/updateRecord")
@Slf4j
public class LawsUpdateRecordController {
@Resource
private ILawsUpdateRecordService lawsUpdateRecordService;
@AutoLog(value = "文档动态-查询")
@ApiOperation(value = "文档动态-查询", notes = "文档动态-查询")
@GetMapping(value = "/list")
@ApiOperationSupport(order = 1)
@RequiresPermissions("standardRegulationLibrary:documentDynamics:search")
public Result<IPage<LawsUpdateRecord>> getUpdateRecordList(
@RequestParam("content") @ApiParam("消息内容") String content,
@RequestParam(name = "pageNo", defaultValue = "1") @ApiParam("页码") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") @ApiParam("页面显示数量") Integer pageSize) {
IPage<LawsUpdateRecord> pageList = lawsUpdateRecordService.queryPageList(content, pageNo, pageSize);
return Result.OK(pageList);
}
@AutoLog(value = "文档动态-批量删除")
@ApiOperation(value = "文档动态-批量删除", notes = "文档动态-批量删除")
@PostMapping(value = "/deleteBatch")
@ApiOperationSupport(order = 2)
@RequiresPermissions("standardRegulationLibrary:documentDynamics:batchDelete")
public Result<?> batchDelete(@RequestBody Map<String, String> map) {
lawsUpdateRecordService.removeByIds(Arrays.asList(map.get("ids").split(",")));
return Result.OK();
}
}
@@ -0,0 +1,104 @@
package com.jero.modules.laws.standard.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @TableName laws_part_name
*/
@Data
@TableName(value = "laws_part_name")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "laws_part_name对象", description = "零部件")
public class PartName implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键ID")
private String id;
/**
* 创建人
*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新人
*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
private String orgCode;
/**
* 0表示未删除,1表示删除
*/
@ApiModelProperty(value = "0表示未删除,1表示删除")
private Integer delFlag;
/**
* 零部件码
*/
@ApiModelProperty(value = "零部件码")
private String code;
/**
* 零部件名称
*/
@ApiModelProperty(value = "零部件名称")
private String name;
/**
* 父级零件id
*/
@ApiModelProperty(value = "父级零件id")
private String parentId;
/**
* 一级节点
*/
@ApiModelProperty(value = "一级节点")
private String firstNode;
/**
* 子零部件
*/
@TableField(exist = false)
@ApiModelProperty(value = "子零部件")
private List<PartName> childPartNameList;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@@ -0,0 +1,20 @@
package com.jero.modules.laws.standard.entity;
import lombok.Data;
import java.util.List;
/**
* @author: Mzaxd
* @Date: 2024/1/19 15:24
*/
@Data
public class TreePage<T> {
private List<T> records;
private long total;
private long size;
private long current;
}
@@ -0,0 +1,18 @@
package com.jero.modules.laws.standard.mapper;
import com.jero.modules.laws.standard.entity.PartName;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author ThinkBook
* @description 针对表laws_part_name的数据库操作Mapper
* @createDate 2024-01-19 10:37:39
* @Entity com.jero.modules.laws.standard.entity.PartName
*/
public interface PartNameMapper extends BaseMapper<PartName> {
}
@@ -1,5 +1,6 @@
package com.jero.modules.laws.standard.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.laws.standard.entity.LawsUpdateRecord;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -18,4 +19,12 @@ public interface ILawsUpdateRecordService extends IService<LawsUpdateRecord> {
**/
void addRecord(String standardNumber, String content);
/**
* 文档动态列表
* @param content 消息内容
* @param pageNo 页码
* @param pageSize 页面显示数量
* @return IPage<LawsUpdateRecord>
*/
IPage<LawsUpdateRecord> queryPageList(String content, Integer pageNo, Integer pageSize);
}
@@ -0,0 +1,27 @@
package com.jero.modules.laws.standard.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel;
import com.jero.modules.laws.standard.entity.PartName;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.laws.standard.entity.TreePage;
import java.util.List;
/**
* @author ThinkBook
* @description 针对表laws_part_name的数据库操作Service
* @createDate 2024-01-19 10:37:39
*/
public interface PartNameService extends IService<PartName> {
/**
* 查询零部件树
*
* @param nodeName
* @param pageNo
* @param pageSize
* @return
*/
TreePage<PartName> queryTreeList(String nodeName, Integer pageNo, Integer pageSize);
}
@@ -103,7 +103,7 @@ public class LawsTreeNodeServiceImpl extends ServiceImpl<LawsTreeNodeMapper, Law
}
}
private Set<LawsTreeNode> findPathToRoot(List<LawsTreeNode> allNodes, LawsTreeNode node) {
public static Set<LawsTreeNode> findPathToRoot(List<LawsTreeNode> allNodes, LawsTreeNode node) {
Set<LawsTreeNode> pathNodes = new HashSet<>();
LawsTreeNode[] currentHolder = new LawsTreeNode[1];
currentHolder[0] = node;
@@ -116,7 +116,7 @@ public class LawsTreeNodeServiceImpl extends ServiceImpl<LawsTreeNodeMapper, Law
return pathNodes;
}
private Set<LawsTreeNode> findAllChildren(List<LawsTreeNode> allNodes, LawsTreeNode node) {
public Set<LawsTreeNode> findAllChildren(List<LawsTreeNode> allNodes, LawsTreeNode node) {
Set<LawsTreeNode> childrenSet = new HashSet<>();
List<LawsTreeNode> directChildren = allNodes.stream()
.filter(n -> n.getParentId().equals(node.getId()))
@@ -1,5 +1,12 @@
package com.jero.modules.laws.standard.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
import com.jero.modules.laws.standard.entity.LawsUpdateRecord;
import com.jero.modules.laws.standard.mapper.LawsUpdateRecordMapper;
import com.jero.modules.laws.standard.service.ILawsUpdateRecordService;
@@ -31,4 +38,15 @@ public class LawsUpdateRecordServiceImpl extends ServiceImpl<LawsUpdateRecordMap
lawsUpdateRecord.setContent(content);
save(lawsUpdateRecord);
}
@Override
public IPage<LawsUpdateRecord> queryPageList(String content, Integer pageNo, Integer pageSize) {
IPage<LawsUpdateRecord> page = new Page<>(pageNo, pageSize);
LambdaQueryWrapper<LawsUpdateRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(content), LawsUpdateRecord::getContent, content);
queryWrapper.eq(LawsUpdateRecord::getDelFlag, YesOrNoEnum.NO.getValue());
queryWrapper.orderByDesc(LawsUpdateRecord::getCreateTime);
page = page(page, queryWrapper);
return page;
}
}
@@ -0,0 +1,84 @@
package com.jero.modules.laws.standard.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.laws.standard.entity.PartName;
import com.jero.modules.laws.standard.entity.TreePage;
import com.jero.modules.laws.standard.service.PartNameService;
import com.jero.modules.laws.standard.mapper.PartNameMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author ThinkBook
* @description 针对表laws_part_name的数据库操作Service实现
* @createDate 2024-01-19 10:37:39
*/
@Service
@Transactional(rollbackFor = JeroBootException.class)
public class PartNameServiceImpl extends ServiceImpl<PartNameMapper, PartName>
implements PartNameService {
@Resource
private PartNameMapper partNameMapper;
@Override
public TreePage<PartName> queryTreeList(String nodeName, Integer pageNo, Integer pageSize) {
LambdaQueryWrapper<PartName> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PartName::getDelFlag, YesOrNoEnum.NO.getValue())
.like(StrUtil.isNotBlank(nodeName), PartName::getName, nodeName);
List<PartName> allNodes = partNameMapper.selectList(queryWrapper);
// 将所有节点转换为映射以便快速查找
Map<String, PartName> nodeMap = allNodes.stream()
.collect(Collectors.toMap(PartName::getId, Function.identity()));
// 构建树形结构
List<PartName> topLevelNodes = new ArrayList<>();
allNodes.forEach(node -> {
if (node.getParentId() == null) {
topLevelNodes.add(node);
} else {
PartName parentNode = nodeMap.get(node.getParentId());
if (parentNode != null) {
if (parentNode.getChildPartNameList() == null) {
parentNode.setChildPartNameList(new ArrayList<>());
}
parentNode.getChildPartNameList().add(node);
}
}
});
// 实现分页逻辑
int start = (pageNo - 1) * pageSize;
int end = Math.min(start + pageSize, topLevelNodes.size());
List<PartName> pageData = topLevelNodes.subList(start, end);
// 封装分页信息
TreePage<PartName> result = new TreePage<>();
result.setRecords(pageData);
result.setTotal(topLevelNodes.size());
result.setSize(pageSize);
result.setCurrent(pageNo);
return result;
}
}
@@ -17,6 +17,7 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -48,6 +49,7 @@ public class LawsStandardizationController extends JeroController<LawsStandardiz
@AutoLog(value = "标准化活动-树结构查询")
@ApiOperation(value="标准化活动-树结构查询", notes="标准化活动-树结构查询")
@GetMapping(value = "/queryTreeList")
@RequiresPermissions("standardActivity:search")
public Result<LawsStandardization> queryTreeList() {
return Result.OK(lawsStandardizationService.queryTreeList());
}
@@ -59,6 +61,7 @@ public class LawsStandardizationController extends JeroController<LawsStandardiz
@AutoLog(value = "标准化活动-统计列表")
@ApiOperation(value="标准化活动-统计列表", notes="标准化活动-统计列表")
@GetMapping(value = "/queryStatistics")
@RequiresPermissions("standardActivity:statistical")
public Result<List<LawsStandardization>> queryStatistics() {
return Result.OK(lawsStandardizationService.queryStatistics());
}
@@ -72,6 +75,7 @@ public class LawsStandardizationController extends JeroController<LawsStandardiz
@AutoLog(value = "标准化活动-添加")
@ApiOperation(value="标准化活动-添加", notes="标准化活动-添加")
@PostMapping(value = "/add")
@RequiresPermissions("standardActivity:add")
public Result<T> add(@Validated @RequestBody StandardizationVO standardizationVO) {
lawsStandardizationService.addOrUpdateStandardization(standardizationVO);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
@@ -86,6 +90,7 @@ public class LawsStandardizationController extends JeroController<LawsStandardiz
@AutoLog(value = "标准化活动-编辑")
@ApiOperation(value="标准化活动-编辑", notes="标准化活动-编辑")
@PostMapping(value = "/edit")
@RequiresPermissions("standardActivity:edit")
public Result<T> edit(@Validated @RequestBody StandardizationVO standardizationVO) {
log.info("");
lawsStandardizationService.addOrUpdateStandardization(standardizationVO);
@@ -181,6 +186,7 @@ public class LawsStandardizationController extends JeroController<LawsStandardiz
@ApiOperation(value="标准化活动-详情通过id查询", notes="标准化活动-详情通过id查询")
@GetMapping(value = "/queryDetailById")
@Translation
@RequiresPermissions("standardActivity:view")
public Result<StandardizationVO> queryDetailById(@ApiParam("id") String id) {
return Result.OK(lawsStandardizationService.queryDetailById(id));
}
@@ -13,6 +13,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -43,6 +44,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-基础库信息分页查询")
@ApiOperation(value="任务转交-基础库信息分页查询", notes="任务转交-基础库信息分页查询")
@GetMapping(value = "/queryBaseDB")
@RequiresPermissions("taskCareOf:basicInfo:search")
public Result<IPage<LawsBaseDB>> queryBaseDB(LawsBaseDB lawsBaseDB,
@ApiParam("当前页") @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ApiParam("每页条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
@@ -56,6 +58,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-基础库信息转交")
@ApiOperation(value="任务转交-基础库信息转交", notes="任务转交-基础库信息转交")
@PostMapping(value = "/baseDBTransfer")
@RequiresPermissions("taskCareOf:basicInfo:transfer")
public Result<T> baseDBTransfer(@RequestBody LawsBaseDB lawsBaseDB) {
lawsTaskTransferService.baseDBTransfer(lawsBaseDB);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
@@ -68,6 +71,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-基础库信息转交(批量)")
@ApiOperation(value="任务转交-基础库信息转交(批量)", notes="任务转交-基础库信息转交(批量)")
@PostMapping(value = "/baseDBTransferBatch")
@RequiresPermissions("taskCareOf:basicInfo:batchTransfer")
public Result<T> baseDBTransferBatch(@RequestBody List<LawsBaseDB> lawsBaseDBList) {
lawsTaskTransferService.baseDBTransferBatch(lawsBaseDBList);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
@@ -80,6 +84,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-流程信息分页查询")
@ApiOperation(value="任务转交-流程信息分页查询", notes="任务转交-流程信息分页查询")
@GetMapping(value = "/queryProcessDB")
@RequiresPermissions("taskCareOf:processInfo:search")
public Result<IPage<LawsProcessDB>> queryProcessDB(LawsProcessDB lawsProcessDb,
@ApiParam("当前页") @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ApiParam("每页条数") @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
@@ -93,6 +98,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-流程信息转交")
@ApiOperation(value="任务转交-流程信息转交", notes="任务转交-流程信息转交")
@PostMapping(value = "/processDBTransfer")
@RequiresPermissions("taskCareOf:processInfo:transfer")
public Result<IPage<LawsProcessDB>> processDBTransfer(@RequestBody LawsProcessDB lawsProcessDB) {
lawsTaskTransferService.processDBTransfer(lawsProcessDB);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
@@ -105,6 +111,7 @@ public class LawsTaskTransferController {
@AutoLog(value = "任务转交-流程信息转交(批量)")
@ApiOperation(value="任务转交-流程信息转交(批量)", notes="任务转交-流程信息转交(批量)")
@PostMapping(value = "/processDBTransferBatch")
@RequiresPermissions("taskCareOf:processInfo:batchTransfer")
public Result<IPage<LawsProcessDB>> processDBTransferBatch(@RequestBody List<LawsProcessDB> lawsProcessDBList) {
lawsTaskTransferService.processDBTransferBatch(lawsProcessDBList);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
@@ -1,5 +1,6 @@
package com.jero.modules.laws.tasktransfer.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -37,4 +38,8 @@ public class LawsBaseDB {
/**转交人*/
@ApiModelProperty(value = "转交人")
private String transferUser;
/**ids 查询用*/
@ApiModelProperty(value = "ids 查询用")
@TableField(exist = false)
private String ids;
}
@@ -1,5 +1,6 @@
package com.jero.modules.laws.tasktransfer.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -45,4 +46,8 @@ public class LawsProcessDB {
/**状态*/
@ApiModelProperty(value="状态: true:可转交,false:不可转交")
private boolean state;
/**ids 查询用*/
@ApiModelProperty(value = "ids 查询用")
@TableField(exist = false)
private String ids;
}
@@ -7,6 +7,8 @@ import com.jero.modules.laws.tasktransfer.entity.LawsBaseDB;
import com.jero.modules.laws.tasktransfer.entity.LawsProcessDB;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @ClassName: LawsTaskTransferMapper
* @Description:
@@ -18,16 +20,31 @@ public interface LawsTaskTransferMapper {
/**
* 任务转交-基础库信息分页查询
* @param queryWrapper
* @param objectPage
* @param page
* @return
*/
IPage<LawsBaseDB> queryBaseDB(@Param(Constants.WRAPPER) QueryWrapper<LawsBaseDB> queryWrapper, IPage<LawsBaseDB> objectPage);
IPage<LawsBaseDB> queryBaseDB(@Param(Constants.WRAPPER) QueryWrapper<LawsBaseDB> queryWrapper, IPage<LawsBaseDB> page);
/**
* 任务转交-基础库信息列表查询
* @param queryWrapper
* @return
*/
List<LawsBaseDB> queryBaseDB(@Param(Constants.WRAPPER) QueryWrapper<LawsBaseDB> queryWrapper);
/**
* 任务转交-流程信息分页查询
* @param queryWrapper
* @param objectPage
* @param page
* @return
*/
IPage<LawsProcessDB> queryProcessDB(@Param(Constants.WRAPPER) QueryWrapper<LawsProcessDB> queryWrapper, IPage<LawsProcessDB> objectPage);
IPage<LawsProcessDB> queryProcessDB(@Param(Constants.WRAPPER) QueryWrapper<LawsProcessDB> queryWrapper, IPage<LawsProcessDB> page);
/**
* 任务转交-流程信息列表查询
* @param queryWrapper
* @return
*/
List<LawsProcessDB> queryProcessDB(@Param(Constants.WRAPPER) QueryWrapper<LawsProcessDB> queryWrapper);
}
@@ -23,6 +23,13 @@ public interface ILawsTaskTransferService {
*/
IPage<LawsBaseDB> queryBaseDB(LawsBaseDB lawsBaseDB, Integer pageNo, Integer pageSize);
/**
* 任务转交-基础库信息列表查询
* @param lawsBaseDB
* @return
*/
List<LawsBaseDB> queryBaseDB(LawsBaseDB lawsBaseDB);
/**
* 任务转交-基础库信息转交
* @param lawsBaseDB
@@ -44,6 +51,13 @@ public interface ILawsTaskTransferService {
*/
IPage<LawsProcessDB> queryProcessDB(LawsProcessDB lawsProcessDb, Integer pageNo, Integer pageSize);
/**
* 任务转交-流程信息列表查询
* @param lawsProcessDb
* @return
*/
List<LawsProcessDB> queryProcessDB(LawsProcessDB lawsProcessDb);
/**
* 任务转交-流程信息转交
* @param lawsProcessDB
@@ -55,4 +69,16 @@ public interface ILawsTaskTransferService {
* @param lawsProcessDBList
*/
void processDBTransferBatch(List<LawsProcessDB> lawsProcessDBList);
/**
* 任务转交-是否水平越权(基础库信息)
* @param ids
*/
void isHorizontalOverstepByBaseDB(String ids);
/**
* 任务转交-是否水平越权(流程信息)
* @param ids
*/
void isHorizontalOverstepByProcessDB(String ids);
}
@@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.constant.enums.LanguageEnum;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
@@ -28,10 +31,12 @@ import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -76,6 +81,12 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
@Override
public IPage<LawsBaseDB> queryBaseDB(LawsBaseDB lawsBaseDB, Integer pageNo, Integer pageSize) {
QueryWrapper<LawsBaseDB> queryWrapper = getLawsBaseDBQueryWrapper(lawsBaseDB);
return lawsTaskTransferMapper.queryBaseDB(queryWrapper, new Page<>(pageNo, pageSize));
}
@NotNull
private static QueryWrapper<LawsBaseDB> getLawsBaseDBQueryWrapper(LawsBaseDB lawsBaseDB) {
QueryWrapper<LawsBaseDB> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(lawsBaseDB.getUser()), "u.realname", lawsBaseDB.getUser());
queryWrapper.eq(StringUtils.isNotBlank(lawsBaseDB.getType()), "t.type", lawsBaseDB.getType());
@@ -83,14 +94,29 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
queryWrapper.orderByDesc("t.create_time");
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String roleIds = loginUser.getRoleIds();
if (!roleIds.contains("admin")){
if (!roleIds.contains("admin") && !roleIds.contains("BZGLY")){
queryWrapper.eq("t.user", loginUser.getId());
}
return lawsTaskTransferMapper.queryBaseDB(queryWrapper, new Page<>(pageNo, pageSize));
if (StringUtils.isNotBlank(lawsBaseDB.getIds())){
queryWrapper.in("t.id", Arrays.asList(lawsBaseDB.getIds().split(",")));
}
return queryWrapper;
}
@Override
public List<LawsBaseDB> queryBaseDB(LawsBaseDB lawsBaseDB) {
QueryWrapper<LawsBaseDB> queryWrapper = getLawsBaseDBQueryWrapper(lawsBaseDB);
return lawsTaskTransferMapper.queryBaseDB(queryWrapper);
}
@Override
public IPage<LawsProcessDB> queryProcessDB(LawsProcessDB lawsProcessDb, Integer pageNo, Integer pageSize) {
QueryWrapper<LawsProcessDB> queryWrapper = getLawsProcessDBQueryWrapper(lawsProcessDb);
return lawsTaskTransferMapper.queryProcessDB(queryWrapper, new Page<>(pageNo, pageSize));
}
@NotNull
private static QueryWrapper<LawsProcessDB> getLawsProcessDBQueryWrapper(LawsProcessDB lawsProcessDb) {
QueryWrapper<LawsProcessDB> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(lawsProcessDb.getUser()), "u.realname", lawsProcessDb.getUser());
queryWrapper.like(StringUtils.isNotBlank(lawsProcessDb.getPrcNum()), "prc_num", lawsProcessDb.getPrcNum());
@@ -103,10 +129,19 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
queryWrapper.orderByDesc("par.create_time");
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String roleIds = loginUser.getRoleIds();
if (!roleIds.contains("admin")){
if (!roleIds.contains("admin") && !roleIds.contains("BZGLY")){
queryWrapper.eq("par.user_id", loginUser.getId());
}
return lawsTaskTransferMapper.queryProcessDB(queryWrapper, new Page<>(pageNo, pageSize));
if (StringUtils.isNotBlank(lawsProcessDb.getIds())){
queryWrapper.in("pa.id", Arrays.asList(lawsProcessDb.getIds().split(",")));
}
return queryWrapper;
}
@Override
public List<LawsProcessDB> queryProcessDB(LawsProcessDB lawsProcessDb) {
QueryWrapper<LawsProcessDB> queryWrapper = getLawsProcessDBQueryWrapper(lawsProcessDb);
return lawsTaskTransferMapper.queryProcessDB(queryWrapper);
}
@Override
@@ -118,6 +153,10 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
@Override
public void processDBTransferBatch(List<LawsProcessDB> lawsProcessDBList) {
// 水平越权
List<String> idlist = lawsProcessDBList.stream().map(LawsProcessDB::getId).collect(Collectors.toList());
isHorizontalOverstepByProcessDB(String.join(",", idlist));
for (LawsProcessDB lawsProcessDb : lawsProcessDBList) {
String taskId = lawsProcessDb.getTaskId();
String toUserId = lawsProcessDb.getTransferUser();
@@ -130,6 +169,34 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
}
}
@Override
public void isHorizontalOverstepByBaseDB(String ids) {
LawsBaseDB lawsBaseDB = new LawsBaseDB();
lawsBaseDB.setIds(ids);
List<LawsBaseDB> lawsBaseDBList = queryBaseDB(lawsBaseDB);
if (Objects.isNull(lawsBaseDBList) || lawsBaseDBList.size() != ids.split(",").length) {
if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) {
throw new JeroBootException("无权限!");
}else{
throw new JeroBootException("No access!");
}
}
}
@Override
public void isHorizontalOverstepByProcessDB(String ids) {
LawsProcessDB lawsProcessDB = new LawsProcessDB();
lawsProcessDB.setIds(ids);
List<LawsProcessDB> lawsProcessDBList = queryProcessDB(lawsProcessDB);
if (Objects.isNull(lawsProcessDBList) || lawsProcessDBList.size() != ids.split(",").length) {
if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) {
throw new JeroBootException("无权限!");
}else{
throw new JeroBootException("No access!");
}
}
}
@Override
public void baseDBTransfer(LawsBaseDB lawsBaseDB) {
List<LawsBaseDB> lawsBaseDBList = new ArrayList<>();
@@ -139,6 +206,9 @@ public class LawsTaskTransferServiceImpl implements ILawsTaskTransferService {
@Override
public void baseDBTransferBatch(List<LawsBaseDB> lawsBaseDBList) {
// 水平越权
List<String> idlist = lawsBaseDBList.stream().map(LawsBaseDB::getId).collect(Collectors.toList());
isHorizontalOverstepByBaseDB(String.join(",", idlist));
// 企标计划
standardPlan(lawsBaseDBList);
// 标准拆分
@@ -1,32 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0zmm786" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.13.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
<bpmn:process id="project-not-met" name="项目合规评估流程" isExecutable="true">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<bpmn:process id="project-not-met" name="未符合项跟踪流程" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_12b9yhd</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_12b9yhd" sourceRef="StartEvent_1" targetRef="fggcsfqzg" />
<bpmn:userTask id="fggcsfqzg" name="法规工程师发起整改" camunda:assignee="${standardsEngineer}">
<bpmn:userTask id="fggcsfqzg" name="法规工程师发起整改" activiti:assignee="${standardsEngineer}">
<bpmn:incoming>Flow_12b9yhd</bpmn:incoming>
<bpmn:outgoing>Flow_0ndqyc9</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="fggcssp" name="法规工程师审批" camunda:assignee="${standardsEngineer}">
<bpmn:userTask id="fggcssp" name="法规工程师审批" activiti:assignee="${standardsEngineer}">
<bpmn:incoming>Flow_0eu6g3b</bpmn:incoming>
<bpmn:outgoing>Flow_1uaygks</bpmn:outgoing>
</bpmn:userTask>
<bpmn:endEvent id="Event_0nxyypv">
<bpmn:incoming>Flow_0ame206</bpmn:incoming>
</bpmn:endEvent>
<bpmn:userTask id="sjgcssczgcl" name="设计工程师上传整改材料" camunda:assignee="${designEngineer}">
<bpmn:extensionElements>
<camunda:taskListener class="com.jero.modules.activiti.process.projectassess.listener.ProcessProjectAssessCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:userTask id="sjgcssczgcl" name="设计工程师上传整改材料" activiti:assignee="${designEngineer}">
<bpmn:extensionElements />
<bpmn:incoming>Flow_0ndqyc9</bpmn:incoming>
<bpmn:incoming>Flow_1torqxs</bpmn:incoming>
<bpmn:incoming>Flow_1e2ecjo</bpmn:incoming>
<bpmn:outgoing>Flow_1ko64jc</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0ndqyc9" sourceRef="fggcsfqzg" targetRef="sjgcssczgcl" />
<bpmn:userTask id="zgjldsp" name="主管级领导审批" camunda:assignee="${managerLeader}">
<bpmn:userTask id="zgjldsp" name="主管级领导审批" activiti:assignee="${managerLeader}">
<bpmn:incoming>Flow_1ko64jc</bpmn:incoming>
<bpmn:outgoing>Flow_0rn2xkx</bpmn:outgoing>
</bpmn:userTask>
@@ -57,7 +55,7 @@
</bpmn:sequenceFlow>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="project-assessment">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="project-not-met">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="159" y="172" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -1,32 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<bpmn:process id="project-not-met" name="项目合规评估流程" isExecutable="true">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0zmm786" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.13.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
<bpmn:process id="project-not-met" name="未符合项跟踪流程" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_12b9yhd</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_12b9yhd" sourceRef="StartEvent_1" targetRef="fggcsfqzg" />
<bpmn:userTask id="fggcsfqzg" name="法规工程师发起整改" activiti:assignee="${standardsEngineer}">
<bpmn:userTask id="fggcsfqzg" name="法规工程师发起整改" camunda:assignee="${standardsEngineer}">
<bpmn:incoming>Flow_12b9yhd</bpmn:incoming>
<bpmn:outgoing>Flow_0ndqyc9</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="fggcssp" name="法规工程师审批" activiti:assignee="${standardsEngineer}">
<bpmn:userTask id="fggcssp" name="法规工程师审批" camunda:assignee="${standardsEngineer}">
<bpmn:incoming>Flow_0eu6g3b</bpmn:incoming>
<bpmn:outgoing>Flow_1uaygks</bpmn:outgoing>
</bpmn:userTask>
<bpmn:endEvent id="Event_0nxyypv">
<bpmn:incoming>Flow_0ame206</bpmn:incoming>
</bpmn:endEvent>
<bpmn:userTask id="sjgcssczgcl" name="设计工程师上传整改材料" activiti:assignee="${designEngineer}">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.projectassess.listener.ProcessProjectAssessCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:userTask id="sjgcssczgcl" name="设计工程师上传整改材料" camunda:assignee="${designEngineer}">
<bpmn:extensionElements />
<bpmn:incoming>Flow_0ndqyc9</bpmn:incoming>
<bpmn:incoming>Flow_1torqxs</bpmn:incoming>
<bpmn:incoming>Flow_1e2ecjo</bpmn:incoming>
<bpmn:outgoing>Flow_1ko64jc</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0ndqyc9" sourceRef="fggcsfqzg" targetRef="sjgcssczgcl" />
<bpmn:userTask id="zgjldsp" name="主管级领导审批" activiti:assignee="${managerLeader}">
<bpmn:userTask id="zgjldsp" name="主管级领导审批" camunda:assignee="${managerLeader}">
<bpmn:incoming>Flow_1ko64jc</bpmn:incoming>
<bpmn:outgoing>Flow_0rn2xkx</bpmn:outgoing>
</bpmn:userTask>
@@ -288,7 +288,7 @@
<bpmn:incoming>Flow_03v0fem</bpmn:incoming>
<bpmn:outgoing>Flow_1gw9i5e</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="sjgcsbcgzlbh" name="设计工程师补充工作令编号" activiti:assignee="${designEngineer}">
<bpmn:userTask id="sjgcsbcgzlbh" name="设计工程师补充立项项目号" activiti:assignee="${designEngineer}">
<bpmn:incoming>Flow_0c3ic1y</bpmn:incoming>
<bpmn:outgoing>Flow_19ehxvl</bpmn:outgoing>
<bpmn:multiInstanceLoopCharacteristics activiti:collection="designEngineerList" activiti:elementVariable="designEngineer">
@@ -473,18 +473,6 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="standard-assessment">
<bpmndi:BPMNShape id="Gateway_0mobyxv_di" bpmnElement="Gateway_0mobyxv" isMarkerVisible="true">
<dc:Bounds x="2085" y="195" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1k7uv2r_di" bpmnElement="Event_1k7uv2r">
<dc:Bounds x="2482" y="202" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1fh8fjh_di" bpmnElement="fggcssp">
<dc:Bounds x="1870" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0y90822_di" bpmnElement="sjgcsbcgzlbh">
<dc:Bounds x="2280" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="159" y="392" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -502,28 +490,6 @@
<dc:Bounds x="530" y="140" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0k2p59e" bpmnElement="Gateway_16tlx8e" isMarkerVisible="true">
<dc:Bounds x="555" y="245" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1w7o9oy" bpmnElement="Event_1trh68p">
<dc:Bounds x="562" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_155ubeu" bpmnElement="bszgjldsp_1">
<dc:Bounds x="660" y="480" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1qktq5f_di" bpmnElement="Gateway_1qktq5f" isMarkerVisible="true">
<dc:Bounds x="685" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_17bnh8x_di" bpmnElement="Event_17bnh8x">
<dc:Bounds x="692" y="722" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_01qa5y5_di" bpmnElement="Gateway_0vyx6xb">
<dc:Bounds x="765" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0s7cvcd_di" bpmnElement="Gateway_15ql8ot">
<dc:Bounds x="1685" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0njknr1_di" bpmnElement="Activity_08c4m85" isExpanded="true">
<dc:Bounds x="670" y="130" width="780" height="280" />
<bpmndi:BPMNLabel />
@@ -531,12 +497,6 @@
<bpmndi:BPMNShape id="Event_1ian0ub_di" bpmnElement="Event_1ian0ub">
<dc:Bounds x="700" y="172" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_02udv1z_di" bpmnElement="mkzrrff_1">
<dc:Bounds x="790" y="150" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0coxith" bpmnElement="Gateway_0r2qm3p" isMarkerVisible="true">
<dc:Bounds x="815" y="248" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1vb9u4y_di" bpmnElement="sjgcspg_1">
<dc:Bounds x="940" y="233" width="100" height="80" />
</bpmndi:BPMNShape>
@@ -550,6 +510,12 @@
<bpmndi:BPMNShape id="Event_151o5cu_di" bpmnElement="Event_151o5cu">
<dc:Bounds x="1382" y="255" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_02udv1z_di" bpmnElement="mkzrrff_1">
<dc:Bounds x="790" y="150" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0coxith" bpmnElement="Gateway_0r2qm3p" isMarkerVisible="true">
<dc:Bounds x="815" y="248" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1wnjq5x" bpmnElement="Event_1e8jif7">
<dc:Bounds x="822" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -557,10 +523,34 @@
<di:waypoint x="736" y="190" />
<di:waypoint x="790" y="190" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w5wrt4_di" bpmnElement="Flow_1w5wrt4">
<di:waypoint x="1230" y="273" />
<di:waypoint x="1265" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m6dxws_di" bpmnElement="Flow_1m6dxws">
<di:waypoint x="1315" y="273" />
<di:waypoint x="1382" y="273" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1338" y="255" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07hxwn8_di" bpmnElement="Flow_07hxwn8">
<di:waypoint x="1290" y="248" />
<di:waypoint x="1290" y="193" />
<di:waypoint x="990" y="193" />
<di:waypoint x="990" y="233" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1130" y="175" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0a6biwg_di" bpmnElement="Flow_0a6biwg">
<di:waypoint x="840" y="230" />
<di:waypoint x="840" y="248" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_197effc_di" bpmnElement="Flow_197effc">
<di:waypoint x="1040" y="273" />
<di:waypoint x="1130" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0td9vsx" bpmnElement="Flow_15xpnyd">
<di:waypoint x="840" y="298" />
<di:waypoint x="840" y="342" />
@@ -575,28 +565,91 @@
<dc:Bounds x="881" y="255" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07hxwn8_di" bpmnElement="Flow_07hxwn8">
<di:waypoint x="1290" y="248" />
<di:waypoint x="1290" y="193" />
<di:waypoint x="990" y="193" />
<di:waypoint x="990" y="233" />
<bpmndi:BPMNShape id="BPMNShape_0k2p59e" bpmnElement="Gateway_16tlx8e" isMarkerVisible="true">
<dc:Bounds x="555" y="245" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1w7o9oy" bpmnElement="Event_1trh68p">
<dc:Bounds x="562" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0s7cvcd_di" bpmnElement="Gateway_15ql8ot">
<dc:Bounds x="1685" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_01qa5y5_di" bpmnElement="Gateway_0vyx6xb">
<dc:Bounds x="765" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0qyu80e" bpmnElement="Activity_0ak2ho3" isExpanded="true">
<dc:Bounds x="855" y="773" width="780" height="280" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1rn9z6v" bpmnElement="Event_0haaibd">
<dc:Bounds x="885" y="815" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1a8xmid" bpmnElement="mkzrrff_4">
<dc:Bounds x="975" y="793" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0kubyme" bpmnElement="Gateway_151dwa8" isMarkerVisible="true">
<dc:Bounds x="1000" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0sgsn68" bpmnElement="sjgcspg_4">
<dc:Bounds x="1125" y="883" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0u4y8iq" bpmnElement="mkzrrsp_4">
<dc:Bounds x="1315" y="883" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1iunr85" bpmnElement="Gateway_1bduqeh" isMarkerVisible="true">
<dc:Bounds x="1450" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1un7h24" bpmnElement="Event_1jaa14d">
<dc:Bounds x="1567" y="905" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1xjq7zc" bpmnElement="Event_125tmf0">
<dc:Bounds x="1007" y="985" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1aai3l6" bpmnElement="Flow_0n3x332">
<di:waypoint x="921" y="833" />
<di:waypoint x="975" y="833" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0xkmcsn" bpmnElement="Flow_1mwm3jy">
<di:waypoint x="1025" y="873" />
<di:waypoint x="1025" y="898" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_17gi23v" bpmnElement="Flow_1u1h3jz">
<di:waypoint x="1025" y="948" />
<di:waypoint x="1025" y="985" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1130" y="175" width="21" height="14" />
<dc:Bounds x="1013" y="963" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_197effc_di" bpmnElement="Flow_197effc">
<di:waypoint x="1040" y="273" />
<di:waypoint x="1130" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w5wrt4_di" bpmnElement="Flow_1w5wrt4">
<di:waypoint x="1230" y="273" />
<di:waypoint x="1265" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m6dxws_di" bpmnElement="Flow_1m6dxws">
<di:waypoint x="1315" y="273" />
<di:waypoint x="1382" y="273" />
<bpmndi:BPMNEdge id="BPMNEdge_00fxze9" bpmnElement="Flow_0aon77n">
<di:waypoint x="1050" y="923" />
<di:waypoint x="1125" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1338" y="255" width="22" height="14" />
<dc:Bounds x="1066" y="905" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_006s2xy" bpmnElement="Flow_1bzp3jv">
<di:waypoint x="1475" y="898" />
<di:waypoint x="1475" y="843" />
<di:waypoint x="1175" y="843" />
<di:waypoint x="1175" y="883" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1315" y="825" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1d2w3p7" bpmnElement="Flow_0xi7z4i">
<di:waypoint x="1225" y="923" />
<di:waypoint x="1315" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0zq6rm2" bpmnElement="Flow_044zvbm">
<di:waypoint x="1415" y="923" />
<di:waypoint x="1450" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0uqbz6j" bpmnElement="Flow_1gymwkm">
<di:waypoint x="1500" y="923" />
<di:waypoint x="1567" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1523" y="905" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1sv6oe4" bpmnElement="Activity_072gbnv" isExpanded="true">
@@ -636,10 +689,6 @@
<dc:Bounds x="1305" y="492" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m13a5m_di" bpmnElement="Flow_1m13a5m">
<di:waypoint x="1080" y="590" />
<di:waypoint x="1130" y="590" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1yxmdgj" bpmnElement="Flow_11c0pso">
<di:waypoint x="1230" y="590" />
<di:waypoint x="1290" y="590" />
@@ -655,81 +704,20 @@
<dc:Bounds x="1498" y="572" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_0qyu80e" bpmnElement="Activity_0ak2ho3" isExpanded="true">
<dc:Bounds x="855" y="773" width="780" height="280" />
<bpmndi:BPMNEdge id="Flow_1m13a5m_di" bpmnElement="Flow_1m13a5m">
<di:waypoint x="1080" y="590" />
<di:waypoint x="1130" y="590" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_17bnh8x_di" bpmnElement="Event_17bnh8x">
<dc:Bounds x="692" y="722" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1qktq5f_di" bpmnElement="Gateway_1qktq5f" isMarkerVisible="true">
<dc:Bounds x="685" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_155ubeu" bpmnElement="bszgjldsp_1">
<dc:Bounds x="660" y="480" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1rn9z6v" bpmnElement="Event_0haaibd">
<dc:Bounds x="885" y="815" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1a8xmid" bpmnElement="mkzrrff_4">
<dc:Bounds x="975" y="793" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1xjq7zc" bpmnElement="Event_125tmf0">
<dc:Bounds x="1007" y="985" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0kubyme" bpmnElement="Gateway_151dwa8" isMarkerVisible="true">
<dc:Bounds x="1000" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0sgsn68" bpmnElement="sjgcspg_4">
<dc:Bounds x="1125" y="883" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0u4y8iq" bpmnElement="mkzrrsp_4">
<dc:Bounds x="1315" y="883" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1iunr85" bpmnElement="Gateway_1bduqeh" isMarkerVisible="true">
<dc:Bounds x="1450" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1un7h24" bpmnElement="Event_1jaa14d">
<dc:Bounds x="1567" y="905" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1aai3l6" bpmnElement="Flow_0n3x332">
<di:waypoint x="921" y="833" />
<di:waypoint x="975" y="833" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0xkmcsn" bpmnElement="Flow_1mwm3jy">
<di:waypoint x="1025" y="873" />
<di:waypoint x="1025" y="898" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_00fxze9" bpmnElement="Flow_0aon77n">
<di:waypoint x="1050" y="923" />
<di:waypoint x="1125" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1066" y="905" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_17gi23v" bpmnElement="Flow_1u1h3jz">
<di:waypoint x="1025" y="948" />
<di:waypoint x="1025" y="985" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1013" y="963" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_006s2xy" bpmnElement="Flow_1bzp3jv">
<di:waypoint x="1475" y="898" />
<di:waypoint x="1475" y="843" />
<di:waypoint x="1175" y="843" />
<di:waypoint x="1175" y="883" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1315" y="825" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1d2w3p7" bpmnElement="Flow_0xi7z4i">
<di:waypoint x="1225" y="923" />
<di:waypoint x="1315" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0zq6rm2" bpmnElement="Flow_044zvbm">
<di:waypoint x="1415" y="923" />
<di:waypoint x="1450" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0uqbz6j" bpmnElement="Flow_1gymwkm">
<di:waypoint x="1500" y="923" />
<di:waypoint x="1567" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1523" y="905" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1g6zc95_di" bpmnElement="Flow_1g6zc95">
<di:waypoint x="486" y="180" />
<di:waypoint x="530" y="180" />
@@ -752,49 +740,6 @@
<dc:Bounds x="631" y="254" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0obo4r2_di" bpmnElement="Flow_0obo4r2">
<di:waypoint x="710" y="410" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rrn9dm_di" bpmnElement="Flow_1rrn9dm">
<di:waypoint x="1710" y="715" />
<di:waypoint x="1710" y="440" />
<di:waypoint x="710" y="440" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_10o9sl2_di" bpmnElement="Flow_10o9sl2">
<di:waypoint x="710" y="560" />
<di:waypoint x="710" y="615" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11i64js_di" bpmnElement="Flow_11i64js">
<di:waypoint x="735" y="640" />
<di:waypoint x="765" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="738" y="623" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_132fp4x_di" bpmnElement="Flow_132fp4x">
<di:waypoint x="710" y="665" />
<di:waypoint x="710" y="722" />
<bpmndi:BPMNLabel>
<dc:Bounds x="714" y="679" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jjyqj0_di" bpmnElement="Flow_1jjyqj0">
<di:waypoint x="815" y="640" />
<di:waypoint x="870" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="816" y="622" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1wdzyax_di" bpmnElement="Flow_1wdzyax">
<di:waypoint x="790" y="665" />
<di:waypoint x="790" y="913" />
<di:waypoint x="855" y="913" />
<bpmndi:BPMNLabel>
<dc:Bounds x="797" y="753" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0q2chl1_di" bpmnElement="Flow_0q2chl1">
<di:waypoint x="1635" y="913" />
<di:waypoint x="1660" y="913" />
@@ -807,6 +752,62 @@
<di:waypoint x="1653" y="740" />
<di:waypoint x="1685" y="740" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rrn9dm_di" bpmnElement="Flow_1rrn9dm">
<di:waypoint x="1710" y="715" />
<di:waypoint x="1710" y="440" />
<di:waypoint x="710" y="440" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0obo4r2_di" bpmnElement="Flow_0obo4r2">
<di:waypoint x="710" y="410" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1wdzyax_di" bpmnElement="Flow_1wdzyax">
<di:waypoint x="790" y="665" />
<di:waypoint x="790" y="913" />
<di:waypoint x="855" y="913" />
<bpmndi:BPMNLabel>
<dc:Bounds x="797" y="753" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jjyqj0_di" bpmnElement="Flow_1jjyqj0">
<di:waypoint x="815" y="640" />
<di:waypoint x="870" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="816" y="622" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_132fp4x_di" bpmnElement="Flow_132fp4x">
<di:waypoint x="710" y="665" />
<di:waypoint x="710" y="722" />
<bpmndi:BPMNLabel>
<dc:Bounds x="714" y="679" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11i64js_di" bpmnElement="Flow_11i64js">
<di:waypoint x="735" y="640" />
<di:waypoint x="765" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="738" y="623" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_10o9sl2_di" bpmnElement="Flow_10o9sl2">
<di:waypoint x="710" y="560" />
<di:waypoint x="710" y="615" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_0mobyxv_di" bpmnElement="Gateway_0mobyxv" isMarkerVisible="true">
<dc:Bounds x="2085" y="195" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1k7uv2r_di" bpmnElement="Event_1k7uv2r">
<dc:Bounds x="2482" y="202" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1fh8fjh_di" bpmnElement="fggcssp">
<dc:Bounds x="1870" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0y90822_di" bpmnElement="sjgcsbcgzlbh">
<dc:Bounds x="2280" y="180" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0ehfvul" bpmnElement="Activity_11wslv7" isExpanded="true">
<dc:Bounds x="1830" y="360" width="1220" height="710" />
<bpmndi:BPMNLabel />
@@ -818,18 +819,68 @@
<dc:Bounds x="1960" y="450" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1m87r68" bpmnElement="Activity_1xsrtpj" isExpanded="true">
<dc:Bounds x="2155" y="440" width="750" height="245" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0c83r33" bpmnElement="mkzrrsp_3">
<dc:Bounds x="2575" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0rgqbsq" bpmnElement="Gateway_0fkslca" isMarkerVisible="true">
<dc:Bounds x="2710" y="535" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tisvmf" bpmnElement="Event_0uendgp">
<dc:Bounds x="2827" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tygdud" bpmnElement="Event_0en8fvn">
<dc:Bounds x="2177" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1fv02ul" bpmnElement="sjgcspg_3">
<dc:Bounds x="2415" y="520" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0y70zxq" bpmnElement="mkzrrff_3">
<dc:Bounds x="2265" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_0qxym6m" bpmnElement="Flow_19fpo83">
<di:waypoint x="2675" y="560" />
<di:waypoint x="2710" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1xga16m" bpmnElement="Flow_0j9t3br">
<di:waypoint x="2735" y="535" />
<di:waypoint x="2735" y="480" />
<di:waypoint x="2465" y="480" />
<di:waypoint x="2465" y="520" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2590" y="462" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_04bjto5" bpmnElement="Flow_0920pid">
<di:waypoint x="2760" y="560" />
<di:waypoint x="2827" y="560" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2783" y="542" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0bnzbta" bpmnElement="Flow_1lw0nd8">
<di:waypoint x="2213" y="560" />
<di:waypoint x="2265" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1wy27v4" bpmnElement="Flow_1wjzl0u">
<di:waypoint x="2515" y="560" />
<di:waypoint x="2575" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1y4773i_di" bpmnElement="Flow_1y4773i">
<di:waypoint x="2365" y="560" />
<di:waypoint x="2415" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1ks3bye" bpmnElement="Gateway_1uodwb8" isMarkerVisible="true">
<dc:Bounds x="1985" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_179nzso" bpmnElement="Event_1kdwhwn">
<dc:Bounds x="1992" y="679" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0skeub1" bpmnElement="Gateway_1e8w7bw">
<dc:Bounds x="2065" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0a1pfq1" bpmnElement="Gateway_1succ9k">
<dc:Bounds x="2975" y="665" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0f4lvxw" bpmnElement="Activity_1n4w1w7" isExpanded="true">
<dc:Bounds x="2155" y="730" width="780" height="280" />
<bpmndi:BPMNLabel />
@@ -905,77 +956,16 @@
<dc:Bounds x="2823" y="862" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1m87r68" bpmnElement="Activity_1xsrtpj" isExpanded="true">
<dc:Bounds x="2155" y="440" width="750" height="245" />
<bpmndi:BPMNLabel />
<bpmndi:BPMNShape id="BPMNShape_0skeub1" bpmnElement="Gateway_1e8w7bw">
<dc:Bounds x="2065" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0c83r33" bpmnElement="mkzrrsp_3">
<dc:Bounds x="2575" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
<bpmndi:BPMNShape id="BPMNShape_0a1pfq1" bpmnElement="Gateway_1succ9k">
<dc:Bounds x="2975" y="665" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0rgqbsq" bpmnElement="Gateway_0fkslca" isMarkerVisible="true">
<dc:Bounds x="2710" y="535" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tisvmf" bpmnElement="Event_0uendgp">
<dc:Bounds x="2827" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tygdud" bpmnElement="Event_0en8fvn">
<dc:Bounds x="2177" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1fv02ul" bpmnElement="sjgcspg_3">
<dc:Bounds x="2415" y="520" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0y70zxq" bpmnElement="mkzrrff_3">
<dc:Bounds x="2265" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1wy27v4" bpmnElement="Flow_1wjzl0u">
<di:waypoint x="2515" y="560" />
<di:waypoint x="2575" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0qxym6m" bpmnElement="Flow_19fpo83">
<di:waypoint x="2675" y="560" />
<di:waypoint x="2710" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1xga16m" bpmnElement="Flow_0j9t3br">
<di:waypoint x="2735" y="535" />
<di:waypoint x="2735" y="480" />
<di:waypoint x="2465" y="480" />
<di:waypoint x="2465" y="520" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2590" y="462" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_04bjto5" bpmnElement="Flow_0920pid">
<di:waypoint x="2760" y="560" />
<di:waypoint x="2827" y="560" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2783" y="542" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0bnzbta" bpmnElement="Flow_1lw0nd8">
<di:waypoint x="2213" y="560" />
<di:waypoint x="2265" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1y4773i_di" bpmnElement="Flow_1y4773i">
<di:waypoint x="2365" y="560" />
<di:waypoint x="2415" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0x6qt62_di" bpmnElement="Flow_0x6qt62">
<di:waypoint x="1898" y="490" />
<di:waypoint x="1960" y="490" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1fa5lzu" bpmnElement="Flow_0ljfd7s">
<di:waypoint x="2115" y="597" />
<di:waypoint x="2155" y="597" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2111" y="579" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_117rgu5_di" bpmnElement="Flow_117rgu5">
<di:waypoint x="2010" y="530" />
<di:waypoint x="2010" y="572" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_169fpoj" bpmnElement="Flow_0rkq2tw">
<di:waypoint x="2035" y="597" />
<di:waypoint x="2065" y="597" />
@@ -990,6 +980,13 @@
<dc:Bounds x="2014" y="636" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1fa5lzu" bpmnElement="Flow_0ljfd7s">
<di:waypoint x="2115" y="597" />
<di:waypoint x="2155" y="597" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2111" y="579" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_188epnk" bpmnElement="Flow_0gac88y">
<di:waypoint x="2090" y="622" />
<di:waypoint x="2090" y="870" />
@@ -998,6 +995,10 @@
<dc:Bounds x="2097" y="710" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_117rgu5_di" bpmnElement="Flow_117rgu5">
<di:waypoint x="2010" y="530" />
<di:waypoint x="2010" y="572" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0zsh74h_di" bpmnElement="Flow_0zsh74h">
<di:waypoint x="2905" y="563" />
<di:waypoint x="2940" y="563" />
@@ -1016,6 +1017,18 @@
<di:waypoint x="2010" y="410" />
<di:waypoint x="2010" y="450" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_12b9yhd_di" bpmnElement="Flow_12b9yhd">
<di:waypoint x="195" y="410" />
<di:waypoint x="250" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0tgn37q_di" bpmnElement="Flow_0tgn37q">
<di:waypoint x="350" y="410" />
<di:waypoint x="430" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0w3nr57_di" bpmnElement="Flow_0w3nr57">
<di:waypoint x="1790" y="220" />
<di:waypoint x="1870" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1gw9i5e_di" bpmnElement="Flow_1gw9i5e">
<di:waypoint x="1970" y="220" />
<di:waypoint x="2085" y="220" />
@@ -1027,6 +1040,10 @@
<dc:Bounds x="2198" y="202" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19ehxvl_di" bpmnElement="Flow_19ehxvl">
<di:waypoint x="2380" y="220" />
<di:waypoint x="2482" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0mngw8y_di" bpmnElement="Flow_0mngw8y">
<di:waypoint x="2110" y="245" />
<di:waypoint x="2110" y="360" />
@@ -1034,26 +1051,10 @@
<dc:Bounds x="2115" y="299" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19ehxvl_di" bpmnElement="Flow_19ehxvl">
<di:waypoint x="2380" y="220" />
<di:waypoint x="2482" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0w3nr57_di" bpmnElement="Flow_0w3nr57">
<di:waypoint x="1790" y="220" />
<di:waypoint x="1870" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_03v0fem_di" bpmnElement="Flow_03v0fem">
<di:waypoint x="1920" y="360" />
<di:waypoint x="1920" y="260" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_12b9yhd_di" bpmnElement="Flow_12b9yhd">
<di:waypoint x="195" y="410" />
<di:waypoint x="250" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0tgn37q_di" bpmnElement="Flow_0tgn37q">
<di:waypoint x="350" y="410" />
<di:waypoint x="430" y="410" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
@@ -288,7 +288,7 @@
<bpmn:incoming>Flow_03v0fem</bpmn:incoming>
<bpmn:outgoing>Flow_1gw9i5e</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="sjgcsbcgzlbh" name="设计工程师补充工作令编号" camunda:assignee="${designEngineer}">
<bpmn:userTask id="sjgcsbcgzlbh" name="设计工程师补充立项项目号" camunda:assignee="${designEngineer}">
<bpmn:incoming>Flow_0c3ic1y</bpmn:incoming>
<bpmn:outgoing>Flow_19ehxvl</bpmn:outgoing>
<bpmn:multiInstanceLoopCharacteristics camunda:collection="designEngineerList" camunda:elementVariable="designEngineer">
@@ -473,18 +473,6 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="standard-assessment">
<bpmndi:BPMNShape id="Gateway_0mobyxv_di" bpmnElement="Gateway_0mobyxv" isMarkerVisible="true">
<dc:Bounds x="2085" y="195" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1k7uv2r_di" bpmnElement="Event_1k7uv2r">
<dc:Bounds x="2482" y="202" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1fh8fjh_di" bpmnElement="fggcssp">
<dc:Bounds x="1870" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0y90822_di" bpmnElement="sjgcsbcgzlbh">
<dc:Bounds x="2280" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="159" y="392" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -502,28 +490,6 @@
<dc:Bounds x="530" y="140" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0k2p59e" bpmnElement="Gateway_16tlx8e" isMarkerVisible="true">
<dc:Bounds x="555" y="245" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1w7o9oy" bpmnElement="Event_1trh68p">
<dc:Bounds x="562" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_155ubeu" bpmnElement="bszgjldsp_1">
<dc:Bounds x="660" y="480" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1qktq5f_di" bpmnElement="Gateway_1qktq5f" isMarkerVisible="true">
<dc:Bounds x="685" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_17bnh8x_di" bpmnElement="Event_17bnh8x">
<dc:Bounds x="692" y="722" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_01qa5y5_di" bpmnElement="Gateway_0vyx6xb">
<dc:Bounds x="765" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0s7cvcd_di" bpmnElement="Gateway_15ql8ot">
<dc:Bounds x="1685" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0njknr1_di" bpmnElement="Activity_08c4m85" isExpanded="true">
<dc:Bounds x="670" y="130" width="780" height="280" />
<bpmndi:BPMNLabel />
@@ -531,12 +497,6 @@
<bpmndi:BPMNShape id="Event_1ian0ub_di" bpmnElement="Event_1ian0ub">
<dc:Bounds x="700" y="172" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_02udv1z_di" bpmnElement="mkzrrff_1">
<dc:Bounds x="790" y="150" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0coxith" bpmnElement="Gateway_0r2qm3p" isMarkerVisible="true">
<dc:Bounds x="815" y="248" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1vb9u4y_di" bpmnElement="sjgcspg_1">
<dc:Bounds x="940" y="233" width="100" height="80" />
</bpmndi:BPMNShape>
@@ -550,6 +510,12 @@
<bpmndi:BPMNShape id="Event_151o5cu_di" bpmnElement="Event_151o5cu">
<dc:Bounds x="1382" y="255" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_02udv1z_di" bpmnElement="mkzrrff_1">
<dc:Bounds x="790" y="150" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0coxith" bpmnElement="Gateway_0r2qm3p" isMarkerVisible="true">
<dc:Bounds x="815" y="248" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1wnjq5x" bpmnElement="Event_1e8jif7">
<dc:Bounds x="822" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -557,10 +523,34 @@
<di:waypoint x="736" y="190" />
<di:waypoint x="790" y="190" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w5wrt4_di" bpmnElement="Flow_1w5wrt4">
<di:waypoint x="1230" y="273" />
<di:waypoint x="1265" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m6dxws_di" bpmnElement="Flow_1m6dxws">
<di:waypoint x="1315" y="273" />
<di:waypoint x="1382" y="273" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1338" y="255" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07hxwn8_di" bpmnElement="Flow_07hxwn8">
<di:waypoint x="1290" y="248" />
<di:waypoint x="1290" y="193" />
<di:waypoint x="990" y="193" />
<di:waypoint x="990" y="233" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1130" y="175" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0a6biwg_di" bpmnElement="Flow_0a6biwg">
<di:waypoint x="840" y="230" />
<di:waypoint x="840" y="248" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_197effc_di" bpmnElement="Flow_197effc">
<di:waypoint x="1040" y="273" />
<di:waypoint x="1130" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0td9vsx" bpmnElement="Flow_15xpnyd">
<di:waypoint x="840" y="298" />
<di:waypoint x="840" y="342" />
@@ -575,28 +565,91 @@
<dc:Bounds x="881" y="255" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07hxwn8_di" bpmnElement="Flow_07hxwn8">
<di:waypoint x="1290" y="248" />
<di:waypoint x="1290" y="193" />
<di:waypoint x="990" y="193" />
<di:waypoint x="990" y="233" />
<bpmndi:BPMNShape id="BPMNShape_0k2p59e" bpmnElement="Gateway_16tlx8e" isMarkerVisible="true">
<dc:Bounds x="555" y="245" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1w7o9oy" bpmnElement="Event_1trh68p">
<dc:Bounds x="562" y="342" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0s7cvcd_di" bpmnElement="Gateway_15ql8ot">
<dc:Bounds x="1685" y="715" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_01qa5y5_di" bpmnElement="Gateway_0vyx6xb">
<dc:Bounds x="765" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0qyu80e" bpmnElement="Activity_0ak2ho3" isExpanded="true">
<dc:Bounds x="855" y="773" width="780" height="280" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1rn9z6v" bpmnElement="Event_0haaibd">
<dc:Bounds x="885" y="815" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1a8xmid" bpmnElement="mkzrrff_4">
<dc:Bounds x="975" y="793" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0kubyme" bpmnElement="Gateway_151dwa8" isMarkerVisible="true">
<dc:Bounds x="1000" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0sgsn68" bpmnElement="sjgcspg_4">
<dc:Bounds x="1125" y="883" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0u4y8iq" bpmnElement="mkzrrsp_4">
<dc:Bounds x="1315" y="883" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1iunr85" bpmnElement="Gateway_1bduqeh" isMarkerVisible="true">
<dc:Bounds x="1450" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1un7h24" bpmnElement="Event_1jaa14d">
<dc:Bounds x="1567" y="905" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1xjq7zc" bpmnElement="Event_125tmf0">
<dc:Bounds x="1007" y="985" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1aai3l6" bpmnElement="Flow_0n3x332">
<di:waypoint x="921" y="833" />
<di:waypoint x="975" y="833" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0xkmcsn" bpmnElement="Flow_1mwm3jy">
<di:waypoint x="1025" y="873" />
<di:waypoint x="1025" y="898" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_17gi23v" bpmnElement="Flow_1u1h3jz">
<di:waypoint x="1025" y="948" />
<di:waypoint x="1025" y="985" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1130" y="175" width="21" height="14" />
<dc:Bounds x="1013" y="963" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_197effc_di" bpmnElement="Flow_197effc">
<di:waypoint x="1040" y="273" />
<di:waypoint x="1130" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w5wrt4_di" bpmnElement="Flow_1w5wrt4">
<di:waypoint x="1230" y="273" />
<di:waypoint x="1265" y="273" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m6dxws_di" bpmnElement="Flow_1m6dxws">
<di:waypoint x="1315" y="273" />
<di:waypoint x="1382" y="273" />
<bpmndi:BPMNEdge id="BPMNEdge_00fxze9" bpmnElement="Flow_0aon77n">
<di:waypoint x="1050" y="923" />
<di:waypoint x="1125" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1338" y="255" width="22" height="14" />
<dc:Bounds x="1066" y="905" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_006s2xy" bpmnElement="Flow_1bzp3jv">
<di:waypoint x="1475" y="898" />
<di:waypoint x="1475" y="843" />
<di:waypoint x="1175" y="843" />
<di:waypoint x="1175" y="883" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1315" y="825" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1d2w3p7" bpmnElement="Flow_0xi7z4i">
<di:waypoint x="1225" y="923" />
<di:waypoint x="1315" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0zq6rm2" bpmnElement="Flow_044zvbm">
<di:waypoint x="1415" y="923" />
<di:waypoint x="1450" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0uqbz6j" bpmnElement="Flow_1gymwkm">
<di:waypoint x="1500" y="923" />
<di:waypoint x="1567" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1523" y="905" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1sv6oe4" bpmnElement="Activity_072gbnv" isExpanded="true">
@@ -636,10 +689,6 @@
<dc:Bounds x="1305" y="492" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m13a5m_di" bpmnElement="Flow_1m13a5m">
<di:waypoint x="1080" y="590" />
<di:waypoint x="1130" y="590" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1yxmdgj" bpmnElement="Flow_11c0pso">
<di:waypoint x="1230" y="590" />
<di:waypoint x="1290" y="590" />
@@ -655,81 +704,20 @@
<dc:Bounds x="1498" y="572" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_0qyu80e" bpmnElement="Activity_0ak2ho3" isExpanded="true">
<dc:Bounds x="855" y="773" width="780" height="280" />
<bpmndi:BPMNEdge id="Flow_1m13a5m_di" bpmnElement="Flow_1m13a5m">
<di:waypoint x="1080" y="590" />
<di:waypoint x="1130" y="590" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_17bnh8x_di" bpmnElement="Event_17bnh8x">
<dc:Bounds x="692" y="722" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1qktq5f_di" bpmnElement="Gateway_1qktq5f" isMarkerVisible="true">
<dc:Bounds x="685" y="615" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_155ubeu" bpmnElement="bszgjldsp_1">
<dc:Bounds x="660" y="480" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1rn9z6v" bpmnElement="Event_0haaibd">
<dc:Bounds x="885" y="815" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1a8xmid" bpmnElement="mkzrrff_4">
<dc:Bounds x="975" y="793" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1xjq7zc" bpmnElement="Event_125tmf0">
<dc:Bounds x="1007" y="985" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0kubyme" bpmnElement="Gateway_151dwa8" isMarkerVisible="true">
<dc:Bounds x="1000" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0sgsn68" bpmnElement="sjgcspg_4">
<dc:Bounds x="1125" y="883" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0u4y8iq" bpmnElement="mkzrrsp_4">
<dc:Bounds x="1315" y="883" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1iunr85" bpmnElement="Gateway_1bduqeh" isMarkerVisible="true">
<dc:Bounds x="1450" y="898" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1un7h24" bpmnElement="Event_1jaa14d">
<dc:Bounds x="1567" y="905" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1aai3l6" bpmnElement="Flow_0n3x332">
<di:waypoint x="921" y="833" />
<di:waypoint x="975" y="833" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0xkmcsn" bpmnElement="Flow_1mwm3jy">
<di:waypoint x="1025" y="873" />
<di:waypoint x="1025" y="898" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_00fxze9" bpmnElement="Flow_0aon77n">
<di:waypoint x="1050" y="923" />
<di:waypoint x="1125" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1066" y="905" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_17gi23v" bpmnElement="Flow_1u1h3jz">
<di:waypoint x="1025" y="948" />
<di:waypoint x="1025" y="985" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1013" y="963" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_006s2xy" bpmnElement="Flow_1bzp3jv">
<di:waypoint x="1475" y="898" />
<di:waypoint x="1475" y="843" />
<di:waypoint x="1175" y="843" />
<di:waypoint x="1175" y="883" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1315" y="825" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1d2w3p7" bpmnElement="Flow_0xi7z4i">
<di:waypoint x="1225" y="923" />
<di:waypoint x="1315" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0zq6rm2" bpmnElement="Flow_044zvbm">
<di:waypoint x="1415" y="923" />
<di:waypoint x="1450" y="923" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0uqbz6j" bpmnElement="Flow_1gymwkm">
<di:waypoint x="1500" y="923" />
<di:waypoint x="1567" y="923" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1523" y="905" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1g6zc95_di" bpmnElement="Flow_1g6zc95">
<di:waypoint x="486" y="180" />
<di:waypoint x="530" y="180" />
@@ -752,49 +740,6 @@
<dc:Bounds x="631" y="254" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0obo4r2_di" bpmnElement="Flow_0obo4r2">
<di:waypoint x="710" y="410" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rrn9dm_di" bpmnElement="Flow_1rrn9dm">
<di:waypoint x="1710" y="715" />
<di:waypoint x="1710" y="440" />
<di:waypoint x="710" y="440" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_10o9sl2_di" bpmnElement="Flow_10o9sl2">
<di:waypoint x="710" y="560" />
<di:waypoint x="710" y="615" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11i64js_di" bpmnElement="Flow_11i64js">
<di:waypoint x="735" y="640" />
<di:waypoint x="765" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="738" y="623" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_132fp4x_di" bpmnElement="Flow_132fp4x">
<di:waypoint x="710" y="665" />
<di:waypoint x="710" y="722" />
<bpmndi:BPMNLabel>
<dc:Bounds x="714" y="679" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jjyqj0_di" bpmnElement="Flow_1jjyqj0">
<di:waypoint x="815" y="640" />
<di:waypoint x="870" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="816" y="622" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1wdzyax_di" bpmnElement="Flow_1wdzyax">
<di:waypoint x="790" y="665" />
<di:waypoint x="790" y="913" />
<di:waypoint x="855" y="913" />
<bpmndi:BPMNLabel>
<dc:Bounds x="797" y="753" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0q2chl1_di" bpmnElement="Flow_0q2chl1">
<di:waypoint x="1635" y="913" />
<di:waypoint x="1660" y="913" />
@@ -807,6 +752,62 @@
<di:waypoint x="1653" y="740" />
<di:waypoint x="1685" y="740" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rrn9dm_di" bpmnElement="Flow_1rrn9dm">
<di:waypoint x="1710" y="715" />
<di:waypoint x="1710" y="440" />
<di:waypoint x="710" y="440" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0obo4r2_di" bpmnElement="Flow_0obo4r2">
<di:waypoint x="710" y="410" />
<di:waypoint x="710" y="480" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1wdzyax_di" bpmnElement="Flow_1wdzyax">
<di:waypoint x="790" y="665" />
<di:waypoint x="790" y="913" />
<di:waypoint x="855" y="913" />
<bpmndi:BPMNLabel>
<dc:Bounds x="797" y="753" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jjyqj0_di" bpmnElement="Flow_1jjyqj0">
<di:waypoint x="815" y="640" />
<di:waypoint x="870" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="816" y="622" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_132fp4x_di" bpmnElement="Flow_132fp4x">
<di:waypoint x="710" y="665" />
<di:waypoint x="710" y="722" />
<bpmndi:BPMNLabel>
<dc:Bounds x="714" y="679" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11i64js_di" bpmnElement="Flow_11i64js">
<di:waypoint x="735" y="640" />
<di:waypoint x="765" y="640" />
<bpmndi:BPMNLabel>
<dc:Bounds x="738" y="623" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_10o9sl2_di" bpmnElement="Flow_10o9sl2">
<di:waypoint x="710" y="560" />
<di:waypoint x="710" y="615" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_0mobyxv_di" bpmnElement="Gateway_0mobyxv" isMarkerVisible="true">
<dc:Bounds x="2085" y="195" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1k7uv2r_di" bpmnElement="Event_1k7uv2r">
<dc:Bounds x="2482" y="202" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1fh8fjh_di" bpmnElement="fggcssp">
<dc:Bounds x="1870" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0y90822_di" bpmnElement="sjgcsbcgzlbh">
<dc:Bounds x="2280" y="180" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0ehfvul" bpmnElement="Activity_11wslv7" isExpanded="true">
<dc:Bounds x="1830" y="360" width="1220" height="710" />
<bpmndi:BPMNLabel />
@@ -818,18 +819,68 @@
<dc:Bounds x="1960" y="450" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1m87r68" bpmnElement="Activity_1xsrtpj" isExpanded="true">
<dc:Bounds x="2155" y="440" width="750" height="245" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0c83r33" bpmnElement="mkzrrsp_3">
<dc:Bounds x="2575" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0rgqbsq" bpmnElement="Gateway_0fkslca" isMarkerVisible="true">
<dc:Bounds x="2710" y="535" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tisvmf" bpmnElement="Event_0uendgp">
<dc:Bounds x="2827" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tygdud" bpmnElement="Event_0en8fvn">
<dc:Bounds x="2177" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1fv02ul" bpmnElement="sjgcspg_3">
<dc:Bounds x="2415" y="520" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0y70zxq" bpmnElement="mkzrrff_3">
<dc:Bounds x="2265" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_0qxym6m" bpmnElement="Flow_19fpo83">
<di:waypoint x="2675" y="560" />
<di:waypoint x="2710" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1xga16m" bpmnElement="Flow_0j9t3br">
<di:waypoint x="2735" y="535" />
<di:waypoint x="2735" y="480" />
<di:waypoint x="2465" y="480" />
<di:waypoint x="2465" y="520" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2590" y="462" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_04bjto5" bpmnElement="Flow_0920pid">
<di:waypoint x="2760" y="560" />
<di:waypoint x="2827" y="560" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2783" y="542" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0bnzbta" bpmnElement="Flow_1lw0nd8">
<di:waypoint x="2213" y="560" />
<di:waypoint x="2265" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1wy27v4" bpmnElement="Flow_1wjzl0u">
<di:waypoint x="2515" y="560" />
<di:waypoint x="2575" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1y4773i_di" bpmnElement="Flow_1y4773i">
<di:waypoint x="2365" y="560" />
<di:waypoint x="2415" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1ks3bye" bpmnElement="Gateway_1uodwb8" isMarkerVisible="true">
<dc:Bounds x="1985" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_179nzso" bpmnElement="Event_1kdwhwn">
<dc:Bounds x="1992" y="679" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0skeub1" bpmnElement="Gateway_1e8w7bw">
<dc:Bounds x="2065" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0a1pfq1" bpmnElement="Gateway_1succ9k">
<dc:Bounds x="2975" y="665" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0f4lvxw" bpmnElement="Activity_1n4w1w7" isExpanded="true">
<dc:Bounds x="2155" y="730" width="780" height="280" />
<bpmndi:BPMNLabel />
@@ -905,77 +956,16 @@
<dc:Bounds x="2823" y="862" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_1m87r68" bpmnElement="Activity_1xsrtpj" isExpanded="true">
<dc:Bounds x="2155" y="440" width="750" height="245" />
<bpmndi:BPMNLabel />
<bpmndi:BPMNShape id="BPMNShape_0skeub1" bpmnElement="Gateway_1e8w7bw">
<dc:Bounds x="2065" y="572" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0c83r33" bpmnElement="mkzrrsp_3">
<dc:Bounds x="2575" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
<bpmndi:BPMNShape id="BPMNShape_0a1pfq1" bpmnElement="Gateway_1succ9k">
<dc:Bounds x="2975" y="665" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0rgqbsq" bpmnElement="Gateway_0fkslca" isMarkerVisible="true">
<dc:Bounds x="2710" y="535" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tisvmf" bpmnElement="Event_0uendgp">
<dc:Bounds x="2827" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1tygdud" bpmnElement="Event_0en8fvn">
<dc:Bounds x="2177" y="542" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_1fv02ul" bpmnElement="sjgcspg_3">
<dc:Bounds x="2415" y="520" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_0y70zxq" bpmnElement="mkzrrff_3">
<dc:Bounds x="2265" y="520" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_1wy27v4" bpmnElement="Flow_1wjzl0u">
<di:waypoint x="2515" y="560" />
<di:waypoint x="2575" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0qxym6m" bpmnElement="Flow_19fpo83">
<di:waypoint x="2675" y="560" />
<di:waypoint x="2710" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1xga16m" bpmnElement="Flow_0j9t3br">
<di:waypoint x="2735" y="535" />
<di:waypoint x="2735" y="480" />
<di:waypoint x="2465" y="480" />
<di:waypoint x="2465" y="520" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2590" y="462" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_04bjto5" bpmnElement="Flow_0920pid">
<di:waypoint x="2760" y="560" />
<di:waypoint x="2827" y="560" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2783" y="542" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_0bnzbta" bpmnElement="Flow_1lw0nd8">
<di:waypoint x="2213" y="560" />
<di:waypoint x="2265" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1y4773i_di" bpmnElement="Flow_1y4773i">
<di:waypoint x="2365" y="560" />
<di:waypoint x="2415" y="560" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0x6qt62_di" bpmnElement="Flow_0x6qt62">
<di:waypoint x="1898" y="490" />
<di:waypoint x="1960" y="490" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1fa5lzu" bpmnElement="Flow_0ljfd7s">
<di:waypoint x="2115" y="597" />
<di:waypoint x="2155" y="597" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2111" y="579" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_117rgu5_di" bpmnElement="Flow_117rgu5">
<di:waypoint x="2010" y="530" />
<di:waypoint x="2010" y="572" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_169fpoj" bpmnElement="Flow_0rkq2tw">
<di:waypoint x="2035" y="597" />
<di:waypoint x="2065" y="597" />
@@ -990,6 +980,13 @@
<dc:Bounds x="2014" y="636" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_1fa5lzu" bpmnElement="Flow_0ljfd7s">
<di:waypoint x="2115" y="597" />
<di:waypoint x="2155" y="597" />
<bpmndi:BPMNLabel>
<dc:Bounds x="2111" y="579" width="55" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_188epnk" bpmnElement="Flow_0gac88y">
<di:waypoint x="2090" y="622" />
<di:waypoint x="2090" y="870" />
@@ -998,6 +995,10 @@
<dc:Bounds x="2097" y="710" width="66" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_117rgu5_di" bpmnElement="Flow_117rgu5">
<di:waypoint x="2010" y="530" />
<di:waypoint x="2010" y="572" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0zsh74h_di" bpmnElement="Flow_0zsh74h">
<di:waypoint x="2905" y="563" />
<di:waypoint x="2940" y="563" />
@@ -1016,6 +1017,18 @@
<di:waypoint x="2010" y="410" />
<di:waypoint x="2010" y="450" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_12b9yhd_di" bpmnElement="Flow_12b9yhd">
<di:waypoint x="195" y="410" />
<di:waypoint x="250" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0tgn37q_di" bpmnElement="Flow_0tgn37q">
<di:waypoint x="350" y="410" />
<di:waypoint x="430" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0w3nr57_di" bpmnElement="Flow_0w3nr57">
<di:waypoint x="1790" y="220" />
<di:waypoint x="1870" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1gw9i5e_di" bpmnElement="Flow_1gw9i5e">
<di:waypoint x="1970" y="220" />
<di:waypoint x="2085" y="220" />
@@ -1027,6 +1040,10 @@
<dc:Bounds x="2198" y="202" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19ehxvl_di" bpmnElement="Flow_19ehxvl">
<di:waypoint x="2380" y="220" />
<di:waypoint x="2482" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0mngw8y_di" bpmnElement="Flow_0mngw8y">
<di:waypoint x="2110" y="245" />
<di:waypoint x="2110" y="360" />
@@ -1034,26 +1051,10 @@
<dc:Bounds x="2115" y="299" width="21" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_19ehxvl_di" bpmnElement="Flow_19ehxvl">
<di:waypoint x="2380" y="220" />
<di:waypoint x="2482" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0w3nr57_di" bpmnElement="Flow_0w3nr57">
<di:waypoint x="1790" y="220" />
<di:waypoint x="1870" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_03v0fem_di" bpmnElement="Flow_03v0fem">
<di:waypoint x="1920" y="360" />
<di:waypoint x="1920" y="260" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_12b9yhd_di" bpmnElement="Flow_12b9yhd">
<di:waypoint x="195" y="410" />
<di:waypoint x="250" y="410" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0tgn37q_di" bpmnElement="Flow_0tgn37q">
<di:waypoint x="350" y="410" />
<di:waypoint x="430" y="410" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>