add 法规合规评估流程基础代码

This commit is contained in:
lijiarao
2024-01-16 18:06:49 +08:00
parent fd4919725f
commit 237965d2d1
12 changed files with 1714 additions and 164 deletions
@@ -16,6 +16,7 @@ public enum ProcessTypeEnum {
FB_STANDARD_CONSULTATION("标准征求意见流程",2, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardConsultationServiceImpl"),
PROJECT_ASSESS("项目合规评估流程",3, "com.jero.modules.activiti.process.projectassess.service.ProcessProjectAssessService"),
PROJECT_NOT_MET("未符合项跟踪流程",4, "com.jero.modules.activiti.process.projectnotmet.service.ProcessProjectNotMetService"),
PROJECT_STANDARD("法规合规评估流程",5, "com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardService"),
FB_STANDARD_PURCHASE("法规采购流程",6, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardPurchaseServiceImpl"),
ES_INIT_CHANGE("企标立项/变更计划",7, "com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl"),
ES_ANNUAL_REPORT("年度制修订计划审批流程(各部门主动上报)",8, "com.jero.modules.activiti.process.esAbolish.service.impl.ProcessEsAbolishServiceImpl"),
@@ -6,6 +6,7 @@ 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.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
@@ -106,6 +107,12 @@ public class MyGlobalEventListener implements ActivitiEventListener {
delegateTask.removeVariable("pass");
//流程审批信息
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class);
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
String id = delegateTask.getId();
String name = delegateTask.getName();
@@ -113,6 +120,16 @@ public class MyGlobalEventListener implements ActivitiEventListener {
Date createTime = delegateTask.getCreateTime();
String assignee = delegateTask.getAssignee();
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
String processDefinitionId = delegateTask.getProcessDefinitionId();
//判断是否需要创建待办
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
wrapper.eq(ProcessNode::getNodeName,name);
wrapper.eq(ProcessNode::getIsView, YesOrNoEnum.YES.getValue());
int count = processNodeService.count(wrapper);
if (count == 0){
return;
}
//新增待审批记录
ProcessApprovalRecord approvalRecord = new ProcessApprovalRecord();
approvalRecord.setTaskId(id);
@@ -127,11 +144,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
approvalRecord.setCreateTime(date);
approvalRecord.setNodeId(taskDefinitionKey);
recordService.save(approvalRecord);
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
}
private void taskAssigned(ActivitiEvent event) {
@@ -150,6 +163,14 @@ public class MyGlobalEventListener implements ActivitiEventListener {
ActivitiEntityEventImpl activitiEntityEvent = (ActivitiEntityEventImpl) event;
TaskEntity delegateTask = (TaskEntity) activitiEntityEvent.getEntity();
ExecutionEntity execution = delegateTask.getExecution();
log.info("流程实例总数:" + execution.getVariable("nrOfInstances"));
log.info("当前活动的流程实例总数:" + execution.getVariable("nrOfActiveInstances"));
log.info("已经完成实例的数目:" + execution.getVariable("nrOfCompletedInstances"));
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
//流程审批信息转办
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
String taskId = delegateTask.getId();
@@ -158,8 +179,10 @@ public class MyGlobalEventListener implements ActivitiEventListener {
//更新审批信息为完成
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
wrapper.eq(ProcessApprovalRecord::getUserId,assignee);
ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper);
if (approvalRecord == null){
return;
}
Date createTime = approvalRecord.getCreateTime();
DateTime date = DateUtil.date();
// 如果date小于createTime+一秒,说明是在同一秒内完成的,需要加一秒,解决流程审批信息发起节点和下一节点创建时间一致,排序错乱问题
@@ -190,14 +213,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
}
recordService.updateById(approvalRecord);
log.info("流程实例总数:" + execution.getVariable("nrOfInstances"));
log.info("当前活动的流程实例总数:" + execution.getVariable("nrOfActiveInstances"));
log.info("已经完成实例的数目:" + execution.getVariable("nrOfCompletedInstances"));
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + variables);
}
private void activityComplete(ActivitiEvent event) {
@@ -20,5 +20,7 @@ public class ProcessDefinitionKey {
public static final String PROJECT_ASSESS = "project-assessment";
//项目合规评估流程
public static final String PROJECT_NOT_MET = "project-not-met";
//项目合规评估流程
public static final String PROJECT_STANDARD = "standard-assessment";
}
@@ -6,4 +6,33 @@ package com.jero.modules.activiti.process.projectstandard.common;
*/
public class ProcessProjectStandardCommon {
public static final String STANDARDS_ENGINEER = "standardsEngineer";
public static final String MANAGER_LEADER_LIST = "managerLeaderList";
public static final String MODULE_OWNER_LIST = "moduleOwnerList";
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 FGGCSFQ = "fggcsfq";
//部所主管级领导下发
public static final String BSZGJLDXF = "bszgjldxf";
//模块负责人分发
public static final String MKFZRFF_1 = "mkfzrff_1";
public static final String MKFZRFF_2 = "mkfzrff_2";
public static final String MKFZRFF_3 = "mkfzrff_3";
public static final String MKFZRFF_4 = "mkfzrff_4";
public static final String MKFZRFF_5 = "mkfzrff_5";
//设计工程师评估
public static final String SJGCSPG_ = "sjgcspg_";
//模块负责人审批
public static final String MKFZRSP_ = "mkfzrsp_";
//部所主管级领导审批
public static final String BSZGJLDSP_ = "bszgjldsp_";
//法规工程师审批
public static final String FGGCSSP = "fggcssp";
//设计工程师补充工作令编号
public static final String SJGCSBCGZLBH = "sjgcsbcgzlbh";
}
@@ -81,6 +81,13 @@ public class ProcessProjectStandard {
@ApiModelProperty(value = "来源(1-国内、2-海外)")
private String source;
/**
* 标准id
*/
@TableField(value = "standard_id")
@ApiModelProperty(value = "标准id")
private String standardId;
/**
* 标准编号
*/
@@ -4,10 +4,12 @@ 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.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
/**
*
@@ -105,6 +107,14 @@ public class ProcessProjectStandardTerm {
@ApiModelProperty(value="条款内容")
private String termText;
/**
* 实施日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "实施日期")
private Date implementationDate;
/**
* 拆分单id
*/
@@ -132,4 +142,50 @@ public class ProcessProjectStandardTerm {
@TableField(value = "carbon_copy_personnels")
@ApiModelProperty(value="抄送人员")
private String carbonCopyPersonnels;
/**
* 车型系列
*/
@TableField(exist = false)
@ApiModelProperty(value="车型系列")
private String modelSeries;
/**
* 车型系列
*/
@TableField(exist = false)
@ApiModelProperty(value="车型系列")
private String modelSeries_dict;
/**
* 依据描述
*/
@TableField(exist = false)
@ApiModelProperty(value="依据描述")
private String description;
/**
* 佐证材料
*/
@TableField(exist = false)
@ApiModelProperty(value="佐证材料")
private String fileId;
@TableField(exist = false)
@ApiModelProperty(value="模块负责人")
private String moduleOwner;
@TableField(exist = false)
@ApiModelProperty(value="责任单位联络人")
private String responsibleUnitLeader;
@TableField(exist = false)
@ApiModelProperty(value="")
private String termUserId;
@TableField(exist = false)
@ApiModelProperty(value="评估结果")
private String assessResults;
}
@@ -4,10 +4,12 @@ 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;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
*
@@ -105,6 +107,12 @@ public class ProcessProjectStandardTermUser {
@ApiModelProperty(value="模块负责人id")
private String moduleOwner;
/**评估结果(1-符合、2-不符合)*/
@TableField(value = "assess_results")
@Dict(dicCode = "standards_assess_results")
@ApiModelProperty(value = "评估结果(1-符合、2-不符合)")
private String assessResults;
/**
* 不涉及原因
*/
@@ -2,6 +2,9 @@ package com.jero.modules.activiti.process.projectstandard.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTerm;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
*
@@ -9,4 +12,11 @@ import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectSt
*@date 2024-01-15 16:27
*/
public interface ProcessProjectStandardTermMapper extends BaseMapper<ProcessProjectStandardTerm> {
List<ProcessProjectStandardTerm> getByResponsibleUnitLeader(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("hasModuleOwner") Boolean hasModuleOwner);
List<ProcessProjectStandardTerm> getByModuleOwner(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("executionParentId") String executionParentId, @Param("hasDesignEngineer") Boolean hasDesignEngineer);
List<ProcessProjectStandardTerm> getByDesignEngineer(@Param("processId") String processId, @Param("originUserId") String originUserId, @Param("executionParentId") String executionParentId);
List<ProcessProjectStandardTerm> getByStandardsEngineer(@Param("processId") String processId);
}
@@ -16,15 +16,106 @@
<result column="term_number" jdbcType="VARCHAR" property="termNumber" />
<result column="term_name" jdbcType="VARCHAR" property="termName" />
<result column="term_text" jdbcType="LONGVARCHAR" property="termText" />
<result column="implementation_date" jdbcType="VARCHAR" property="implementationDate" />
<result column="split_info_id" jdbcType="VARCHAR" property="splitInfoId" />
<result column="project_approval_flag" jdbcType="TINYINT" property="projectApprovalFlag" />
<result column="design_engineer" jdbcType="VARCHAR" property="designEngineer" />
<result column="carbon_copy_personnels" jdbcType="VARCHAR" property="carbonCopyPersonnels" />
<result column="description" property="description"/>
<result column="file_id" property="fileId"/>
<result column="module_owner" property="moduleOwner"/>
<result column="not_involved" property="notInvolved"/>
<result column="responsible_unit_leader" property="responsibleUnitLeader"/>
<result column="term_user_id" property="termUserId"/>
<result column="assess_results" property="assessResults"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, create_by, create_time, update_by, update_time, org_code, del_flag, process_id,
standard_id, term_number, term_name, term_text, split_info_id, project_approval_flag,
design_engineer, carbon_copy_personnels
${alias}.id, ${alias}.create_by, ${alias}.create_time, ${alias}.update_by, ${alias}.update_time, ${alias}.org_code, ${alias}.del_flag, ${alias}.process_id, ${alias}.
standard_id, ${alias}.term_number, ${alias}.term_name, ${alias}.term_text, ${alias}.implementation_date, ${alias}.split_info_id, ${alias}.project_approval_flag, ${alias}.
design_engineer, ${alias}.carbon_copy_personnels
</sql>
<select id="getByResponsibleUnitLeader" 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
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.responsible_unit_leader = #{originUserId}
<if test="hasModuleOwner">
and ppstu.module_owner is not null
</if>
and ppstu.id is not null
</select>
<select id="getByModuleOwner" 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
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}
<if test="hasDesignEngineer">
and ppstu.design_engineer is not null
</if>
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.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}
and ppstu.design_engineer = #{originUserId}
and ppstu.parent_execution_id = #{executionParentId}
and ppstu.id is not null
</select>
<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
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>
</mapper>
@@ -1,30 +1,62 @@
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.common.DraftCommon;
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.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.ProcessProjectAssessLink;
import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAssessTerm;
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.ProcessProjectStandardTermUser;
import com.jero.modules.activiti.process.projectstandard.mapper.ProcessProjectStandardTermMapper;
import com.jero.modules.activiti.process.projectstandard.mapper.ProcessProjectStandardTermUserMapper;
import com.jero.modules.activiti.process.projectstandard.vo.ProcessProjectStandardVO;
import com.jero.modules.activiti.process.projectstandard.vo.StandardSelectionVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.laws.common.mapper.LawsCommonMapper;
import com.jero.modules.laws.common.service.ILawsCommonService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.common.vo.ManyStandardSelectionBoxVO;
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
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.vo.DecompositionOrderSourceVO;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
import com.jero.modules.split.service.ISarFileSplitInfoService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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 javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
*
@@ -33,26 +65,246 @@ import java.util.Map;
*/
@Service
public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectStandardMapper, ProcessProjectStandard> {
@Resource
private ILawsCommonService lawsCommonService;
@Resource
private LawsCommonMapper lawsCommonMapper;
@Resource
private ISarFileSplitInfoService sarFileSplitInfoService;
@Resource
private ProcessAllService processAllService;
@Resource
private ISysBaseAPI sysBaseAPI;
@Resource
private TaskService taskService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private SendMessageAPI sendMessageAPI;
//国内标准
@Autowired
private ILawsDomesticStandardService lawsDomesticStandardService;
//海外标准
@Autowired
private ILawsOverseasStandardService lawsOverseasStandardService;
@Resource
private ProcessProjectStandardTermMapper termMapper;
@Resource
private ProcessProjectStandardTermService termService;
@Resource
private ProcessProjectStandardTermUserMapper termUserMapper;
@Resource
private ProcessProjectStandardTermUserService termUserService;
public ProcessInfoVO<ProcessProjectStandardVO> queryProcessInfoVO(String draftId, String processInstanceId, String taskId) {
return null;
if (StringUtils.isNotBlank(draftId) && StringUtils.isBlank(taskId)) {
ProcessInfoVO draft = processHandleService.getDraftByDraftId(draftId);
return draft;
}
ProcessInfoVO draft = processHandleService.getDraftByTaskId(taskId);
if (draft != null){
return draft;
}
ProcessInfoVO processInfoVO = processHandleService.queryProcessInfoVO(draftId, processInstanceId, taskId);
String processId = processInfoVO.getBusinessId();
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
Task task = processDTO.getTask();
String executionParentId = task.getFormKey();
String taskDefinitionKey = task.getTaskDefinitionKey();
if (taskDefinitionKey.contains("_") && !taskDefinitionKey.contains("mkfzrff_")){
taskDefinitionKey = taskDefinitionKey.substring(0,taskDefinitionKey.length()-1);
}
List<ProcessProjectStandardTermUser> processProjectStandardTermUserList = new ArrayList<>();
List<ProcessProjectStandardTerm> processProjectStandardTermList = new ArrayList<>();
//获取所有用户信息
List<LoginUser> userList = sysBaseAPI.getAllUser();
Map<String, String> userNameMap = new HashMap<>();
for (LoginUser loginUser : userList) {
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<>();
switch (taskDefinitionKey) {
//部所主管级领导下发
case ProcessProjectStandardCommon.BSZGJLDXF:
processProjectStandardTermList = termMapper.getByResponsibleUnitLeader(processId, originUserId, false);
break;
//部所主管级领导审批
case ProcessProjectStandardCommon.BSZGJLDSP_:
processProjectStandardTermList = termMapper.getByResponsibleUnitLeader(processId, originUserId, true);
wrapper.eq(ProcessProjectStandardTermUser::getResponsibleUnitLeader, originUserId);
break;
//模块负责人分发
case ProcessProjectStandardCommon.MKFZRFF_1:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, false);
break;
//驳回后模块负责人分发
case ProcessProjectStandardCommon.MKFZRFF_4:
case ProcessProjectStandardCommon.MKFZRFF_5:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, true);
break;
//模块负责人审批
case ProcessProjectStandardCommon.MKFZRSP_:
processProjectStandardTermList = termMapper.getByModuleOwner(processId, originUserId, executionParentId, false);
wrapper.eq(ProcessProjectStandardTermUser::getModuleOwner, originUserId);
wrapper.eq(ProcessProjectStandardTermUser::getParentExecutionId, executionParentId);
list = termUserService.list(wrapper);
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.FGGCSSP:
processProjectStandardTermList = termMapper.getByStandardsEngineer(processId);
break;
//设计工程师补充工作令编号
case ProcessProjectStandardCommon.SJGCSBCGZLBH:
processProjectStandardTermList = termMapper.getByStandardsEngineer(processId);
break;
default:
}
List<DictModel> dictModels = sysBaseAPI.queryDictItemsByCode("assess_results");
Map<String, String> dictevaluationFeedbackMap = CollStreamUtil.toMap(dictModels, DictModel::getValue, DictModel::getText);
//给条款中保存关联的信息
Map<String, List<ProcessProjectStandardTermUser>> termIdListMap = CollStreamUtil.groupByKey(list, ProcessProjectStandardTermUser::getTermId);
for (ProcessProjectStandardTerm term : processProjectStandardTermList) {
String termId = term.getId();
List<ProcessProjectStandardTermUser> termUsers = termIdListMap.get(termId);
if (CollectionUtil.isNotEmpty(termUsers)){
ProcessProjectStandardTermUser termUser = termUsers.get(0);
term.setDescription(termUser.getDescription());
term.setFileId(termUser.getFileId());
}
}
//拼接分类法规标题
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);
}
ProcessProjectStandard processProjectStandard = this.getById(processId);
ProcessProjectStandardVO processProjectStandardVO = new ProcessProjectStandardVO();
processProjectStandardVO.setProcessProjectStandard(processProjectStandard);
processProjectStandardVO.setProcessProjectStandardTermList(processProjectStandardTermList);
//processProjectStandardVO.setProcessProjectStandardTermUserList();
processInfoVO.setBusinessInfoDTO(processProjectStandardVO);
return processInfoVO;
}
public void saveToDraft(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
// 流程信息
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.PROJECT_STANDARD.getValue()); // 流程类型
//保存businessId
String processInstanceId = basicProcessInfoDTO.getProcessInstanceId();
if (StringUtils.isNotBlank(processInstanceId)){
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
String projectId = processAll.getProjectId();
processInfoVO.setBusinessId(projectId);
}
processHandleService.saveToDraft(processInfoVO);
}
public void startProcess(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO) {
//start 先保存一份初始草稿
processInfoVO.setSaveSource(DraftCommon.INITIAL_SOURCE);
saveToDraft(processInfoVO);
//end 保存初始草稿结束
ProcessProjectStandardVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
ProcessProjectStandard processProjectStandard = businessInfoDTO.getProcessProjectStandard();
this.save(processProjectStandard);
String processId = processProjectStandard.getId();
processInfoVO.setBusinessId(processId);
String standardId = processProjectStandard.getStandardId();
String source = processProjectStandard.getSource();
Date implementationDate;
if (CommonConstant.STANDARD_SOURCE_1.equals(source)) {
LawsDomesticStandard lawsDomesticStandard = lawsDomesticStandardService.getById(standardId);
implementationDate = lawsDomesticStandard.getImplementationDate();
}else {
LawsOverseasStandard overseasStandard = lawsOverseasStandardService.getById(standardId);
implementationDate = overseasStandard.getImplementationDate();
}
//保存条款
List<ProcessProjectStandardTerm> processProjectStandardTermList = businessInfoDTO.getProcessProjectStandardTermList();
for (ProcessProjectStandardTerm term : processProjectStandardTermList) {
term.setProcessId(processId);
term.setImplementationDate(implementationDate);
}
termService.saveBatch(processProjectStandardTermList);
// 保存关联关系
List<String> allResponsibleUnitLeaderList = new ArrayList<>();
List<ProcessProjectStandardTermUser> termUserList = new ArrayList<>();
for (ProcessProjectStandardTerm term : processProjectStandardTermList) {
String termId = term.getId();
String responsibleUnitLeaders = term.getResponsibleUnitLeader();
if (StringUtils.isBlank(responsibleUnitLeaders)) {
throw new JeroBootException(ResultCommon.PARAMETER_NOT_RECOGNIZED);
}
List<String> responsibleUnitLeaderList = Arrays.asList(responsibleUnitLeaders.split(","));
List<String> distinctResponsibleUnitLeader = responsibleUnitLeaderList.stream()
.filter(Objects::nonNull)
.distinct().collect(Collectors.toList());
for (String responsibleUnitLeaderId : distinctResponsibleUnitLeader) {
ProcessProjectStandardTermUser termUser = new ProcessProjectStandardTermUser();
termUser.setProcessId(processId);
termUser.setTermId(termId);
termUser.setResponsibleUnitLeader(responsibleUnitLeaderId);
termUserList.add(termUser);
}
allResponsibleUnitLeaderList.addAll(distinctResponsibleUnitLeader);
}
termUserService.saveBatch(termUserList);
List<String> distinctAllResponsibleUnitLeaderList = allResponsibleUnitLeaderList.stream()
.filter(Objects::nonNull)
.distinct().collect(Collectors.toList());
String distinctAllResponsibleUnitLeaderListJoin = CollectionUtil.join(distinctAllResponsibleUnitLeaderList, ",");
//启动
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.PROJECT_STANDARD)); // 流程定义id
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.PROJECT_STANDARD.getValue()); // 流程类型
Map<String, Object> userInfoMap = new HashMap<>();
userInfoMap.put(ProcessProjectStandardCommon.STANDARDS_ENGINEER, CurrentUserUtil.getId());
userInfoMap.put(ProcessProjectStandardCommon.MANAGER_LEADER_LIST, distinctAllResponsibleUnitLeaderListJoin);
processInfoVO.setUserInfoMap(userInfoMap);
processHandleService.startProcess(processInfoVO);
}
public void approveTask(ProcessInfoVO<ProcessProjectStandardVO> processInfoVO, boolean b) {
@@ -103,4 +355,15 @@ public class ProcessProjectStandardService extends ServiceImpl<ProcessProjectSta
public void autoComplete(DelegateTask delegateTask) {
}
/**
* 获取分类用的标准编号,标准名称列表
*/
public Map<String, ProcessProjectStandardTerm> getSplitInfoIdMap(String processId) {
LambdaQueryWrapper<ProcessProjectStandardTerm> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessProjectStandardTerm::getProcessId,processId);
List<ProcessProjectStandardTerm> list = termService.list(wrapper);
Map<String, ProcessProjectStandardTerm> stringProcessProjectStandardTermMap = CollStreamUtil.toIdentityMap(list, ProcessProjectStandardTerm::getSplitInfoId);
return stringProcessProjectStandardTermMap;
}
}