add 未符合项跟踪流程 发起流程,查询详情,提交,审批,保存

This commit is contained in:
lijiarao
2023-12-24 19:13:46 +08:00
parent e1deed5bfe
commit ac0f3bd33c
9 changed files with 439 additions and 14 deletions
@@ -15,6 +15,7 @@ public enum ProcessTypeEnum {
FB_ENTRY_CHANGE("标准法规入库/变更流程",1, "com.jero.modules.activiti.process.fb.service.impl.ProcessHandleServiceImpl"),
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"),
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"),
@@ -18,5 +18,7 @@ public class ProcessDefinitionKey {
public static final String FB_STANDARD_COMPLIANCE_ASSESSMENT = "fb-standard-compliance-assessment"; // 法规合规评估流程
//项目合规评估流程
public static final String PROJECT_ASSESS = "project-assessment";
//项目合规评估流程
public static final String PROJECT_NOT_MET = "project-not-met";
}
@@ -5,5 +5,24 @@ package com.jero.modules.activiti.process.projectnotmet.common;
* @date 2023-12-23 20:11
*/
public class ProcessProjectNotMetCommon {
public static final String STANDARDS_ENGINEER = "standardsEngineer";
public static final String MANAGER_LEADER = "managerLeader";
public static final String DESIGN_ENGINEER_LIST = "designEngineerList";
/**
*法规工程师发起整改
*/
public static final String FGGCSFQZG = "fggcsfqzg";
/**
*设计工程师上传整改材料
*/
public static final String SJGCSSCZGCL = "sjgcssczgcl";
/**
*主管级领导审批
*/
public static final String ZGJLDSP = "zgjldsp";
/**
*法规工程师审批
*/
public static final String FGGCSSP = "fggcssp";
}
@@ -120,13 +120,6 @@ public class ProcessProjectNotMetLink {
@ApiModelProperty(value = "预计整改完成日期")
private Date expectedTime;
/**
* 实际整改完成日期
*/
@TableField(value = "reality_time")
@ApiModelProperty(value = "实际整改完成日期")
private Date realityTime;
/**
* 整改状态(1-待整改、2-整改中、3-审批中、4-已完成)
*/
@@ -175,4 +168,39 @@ public class ProcessProjectNotMetLink {
@TableField(value = "del_flag")
@ApiModelProperty(value = "删除标识")
private Boolean delFlag;
/**
* 设计工程师ID
*/
@TableField(exist = false)
@ApiModelProperty(value = "设计工程师ID")
private String nowEngineerId;
/**
* 设计工程师名字
*/
@TableField(exist = false)
@ApiModelProperty(value = "设计工程师名字")
private String nowEngineerName;
/**
* 依据描述
*/
@TableField(exist = false)
@ApiModelProperty(value = "依据描述")
private String description;
/**
* 佐证材料
*/
@TableField(exist = false)
@ApiModelProperty(value = "佐证材料")
private String fileId;
/**
* 实际整改完成日期
*/
@TableField(exist = false)
@ApiModelProperty(value = "实际整改完成日期")
private Date realityTime;
}
@@ -2,10 +2,16 @@ package com.jero.modules.activiti.process.projectnotmet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.projectnotmet.entity.ProcessProjectNotMetLink;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-12-23 19:58
*/
public interface ProcessProjectNotMetLinkMapper extends BaseMapper<ProcessProjectNotMetLink> {
List<ProcessProjectNotMetLink> getByDesignEngineer(@Param("originUserId") String originUserId, @Param("processId") String processId);
List<ProcessProjectNotMetLink> getByLeader(@Param("processId") String processId);
}
@@ -19,7 +19,6 @@
<result column="engineer_id" jdbcType="VARCHAR" property="engineerId"/>
<result column="engineer_name" jdbcType="VARCHAR" property="engineerName"/>
<result column="expected_time" jdbcType="TIMESTAMP" property="expectedTime"/>
<result column="reality_time" jdbcType="TIMESTAMP" property="realityTime"/>
<result column="state" jdbcType="VARCHAR" property="state"/>
<result column="create_by" jdbcType="VARCHAR" property="createBy"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
@@ -27,12 +26,49 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="org_code" jdbcType="VARCHAR" property="orgCode"/>
<result column="del_flag" jdbcType="BOOLEAN" property="delFlag"/>
<result column="now_engineer_id" jdbcType="VARCHAR" property="nowEngineerId"/>
<result column="description" jdbcType="VARCHAR" property="description"/>
<result column="file_id" jdbcType="VARCHAR" property="fileId"/>
<result column="reality_time" jdbcType="TIMESTAMP" property="realityTime"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, process_id, standard_id, `source`, standard_number, standard_name, project_id,
project_name, term_id, term_num, term_name, engineer_id, engineer_name, expected_time,
reality_time, `state`, create_by, create_time, update_by, update_time, org_code,
del_flag
${alias}.id, ${alias}.process_id, ${alias}.standard_id, ${alias}.`source`, ${alias}.standard_number, ${alias}.standard_name, ${alias}.project_id,
${alias}.project_name, ${alias}.term_id, ${alias}.term_num, ${alias}.term_name, ${alias}.engineer_id, ${alias}.engineer_name, ${alias}.expected_time,
${alias}.`state`, ${alias}.create_by, ${alias}.create_time, ${alias}.update_by, ${alias}.update_time, ${alias}.org_code,
${alias}.del_flag
</sql>
<select id="getByDesignEngineer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List">
<property name="alias" value="ppnml"/>
</include>
,
ppnmu.engineer_id as now_engineer_id,
ppnmu.description,
ppnmu.file_id,
ppnmu.reality_time
from process_project_not_met_link ppnml
left join process_project_not_met_user ppnmu on ppnml.id = ppnmu.link_id
where ppnmu.engineer_id = #{originUserId}
and ppnml.process_id = #{processId}
</select>
<select id="getByLeader" resultMap="BaseResultMap">
select
<include refid="Base_Column_List">
<property name="alias" value="ppnml"/>
</include>
,
ppnmu.engineer_id as now_engineer_id,
ppnmu.description,
ppnmu.file_id,
ppnmu.reality_time
from process_project_not_met_link ppnml
left join process_project_not_met_user ppnmu on ppnml.id = ppnmu.link_id
where ppnml.process_id = #{processId}
</select>
</mapper>
@@ -5,11 +5,23 @@ import com.jero.modules.activiti.process.projectnotmet.entity.ProcessProjectNotM
import com.jero.modules.activiti.process.projectnotmet.mapper.ProcessProjectNotMetLinkMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-12-23 19:58
*/
@Service
public class ProcessProjectNotMetLinkService extends ServiceImpl<ProcessProjectNotMetLinkMapper, ProcessProjectNotMetLink> {
@Resource
private ProcessProjectNotMetLinkMapper processProjectNotMetLinkMapper;
public List<ProcessProjectNotMetLink> getByDesignEngineer(String originUserId, String processId) {
return processProjectNotMetLinkMapper.getByDesignEngineer(originUserId,processId);
}
public List<ProcessProjectNotMetLink> getByLeader(String processId) {
return processProjectNotMetLinkMapper.getByLeader(processId);
}
}
@@ -1,25 +1,48 @@
package com.jero.modules.activiti.process.projectnotmet.service;
import cn.hutool.core.collection.CollStreamUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.system.api.ISysBaseAPI;
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.fb.common.ProcessDefinitionKey;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
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.ProcessProjectAssess;
import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAssessTerm;
import com.jero.modules.activiti.process.projectassess.entity.ProcessProjectAssessTermUser;
import com.jero.modules.activiti.process.projectassess.vo.ProcessProjectAssessVO;
import com.jero.modules.activiti.process.projectnotmet.common.ProcessProjectNotMetCommon;
import com.jero.modules.activiti.process.projectnotmet.entity.ProcessProjectNotMet;
import com.jero.modules.activiti.process.projectnotmet.entity.ProcessProjectNotMetLink;
import com.jero.modules.activiti.process.projectnotmet.entity.ProcessProjectNotMetUser;
import com.jero.modules.activiti.process.projectnotmet.mapper.ProcessProjectNotMetMapper;
import com.jero.modules.activiti.process.projectnotmet.vo.ProcessProjectNotMetVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
/**
* @author liJiaRao
* @date 2023-12-23 19:58
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ProcessProjectNotMetService extends ServiceImpl<ProcessProjectNotMetMapper, ProcessProjectNotMet> {
@Resource
private ISysBaseAPI sysBaseAPI;
@@ -31,25 +54,180 @@ public class ProcessProjectNotMetService extends ServiceImpl<ProcessProjectNotMe
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private TaskService taskService;
@Resource
private ProcessProjectNotMetLinkService processProjectNotMetLinkService;
@Resource
private ProcessProjectNotMetUserService processProjectNotMetUserService;
public ProcessInfoVO<ProcessProjectNotMetVO> queryProcessInfoVO(String draftId, String processInstanceId, String taskId) {
if (StringUtils.isNotBlank(draftId) && StringUtils.isBlank(taskId)) {
ProcessInfoVO draft = processHandleService.getDraft(draftId);
return draft;
}
ProcessInfoVO processInfoVO = processHandleService.queryProcessInfoVO(draftId, processInstanceId, taskId);
String businessId = processInfoVO.getBusinessId();
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
Task task = processDTO.getTask();
return null;
String taskDefinitionKey = task.getTaskDefinitionKey();
List<ProcessProjectNotMetLink> processProjectNotMetLinks = new ArrayList<>();
switch (taskDefinitionKey) {
case ProcessProjectNotMetCommon.SJGCSSCZGCL:
processProjectNotMetLinks = processProjectNotMetLinkService.getByDesignEngineer(originUserId,businessId);
break;
case ProcessProjectNotMetCommon.ZGJLDSP:
case ProcessProjectNotMetCommon.FGGCSSP:
processProjectNotMetLinks = processProjectNotMetLinkService.getByLeader(businessId);
break;
}
//获取所有用户信息
List<LoginUser> userList = sysBaseAPI.getAllUser();
Map<String, String> userNameMap = new HashMap<>();
for (LoginUser loginUser : userList) {
userNameMap.put(loginUser.getId(), loginUser.calcNameWorkNo());
}
for (ProcessProjectNotMetLink processProjectNotMetLink : processProjectNotMetLinks) {
String engineerId = processProjectNotMetLink.getEngineerId();
processProjectNotMetLink.setEngineerName(userNameMap.get(engineerId));
String nowEngineerId = processProjectNotMetLink.getNowEngineerId();
processProjectNotMetLink.setNowEngineerName(userNameMap.get(nowEngineerId));
}
ProcessProjectNotMet processProjectNotMet = this.getById(businessId);
ProcessProjectNotMetVO processProjectNotMetVO = new ProcessProjectNotMetVO();
processProjectNotMetVO.setProcessProjectNotMet(processProjectNotMet);
processProjectNotMetVO.setProcessProjectNotMetLinks(processProjectNotMetLinks);
processInfoVO.setBusinessInfoDTO(processProjectNotMetVO);
return processInfoVO;
}
public void startProcess(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO) {
ProcessProjectNotMetVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
ProcessProjectNotMet processProjectNotMet = businessInfoDTO.getProcessProjectNotMet();
this.save(processProjectNotMet);
String processProjectNotMetId = processProjectNotMet.getId();
processInfoVO.setBusinessId(processProjectNotMetId);
//保存关联标准表
List<ProcessProjectNotMetLink> processProjectNotMetLinks = businessInfoDTO.getProcessProjectNotMetLinks();
processProjectNotMetLinks.forEach(item -> item.setProcessId(processProjectNotMetId));
processProjectNotMetLinkService.saveBatch(processProjectNotMetLinks);
//保存标准分发的设计工程师
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
String designEngineers = (String) userInfoMap.get(ProcessProjectNotMetCommon.DESIGN_ENGINEER_LIST);
String[] designEngineersSplit = designEngineers.split(",");
List<ProcessProjectNotMetUser> processProjectNotMetUsers = new ArrayList<>();
for (ProcessProjectNotMetLink processProjectNotMetLink : processProjectNotMetLinks) {
String notMetLinkId = processProjectNotMetLink.getId();
for (String designEngineerId : designEngineersSplit) {
ProcessProjectNotMetUser processProjectNotMetUser = new ProcessProjectNotMetUser();
processProjectNotMetUser.setProcessId(processProjectNotMetId);
processProjectNotMetUser.setLinkId(notMetLinkId);
processProjectNotMetUser.setEngineerId(designEngineerId);
processProjectNotMetUsers.add(processProjectNotMetUser);
}
}
processProjectNotMetUserService.saveBatch(processProjectNotMetUsers);
//启动流程
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.PROJECT_NOT_MET)); // 流程定义id
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.PROJECT_NOT_MET.getValue()); // 流程类型
userInfoMap.put(ProcessProjectNotMetCommon.STANDARDS_ENGINEER, CurrentUserUtil.getId());
//userInfoMap.put(ProcessProjectNotMetCommon.MANAGER_LEADER, distinctAllResponsibleUnitLeaderListJoin);
//processInfoVO.setUserInfoMap(userInfoMap);
processHandleService.startProcess(processInfoVO);
}
public void approveTask(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO, boolean b) {
public void approveTask(ProcessInfoVO<ProcessProjectNotMetVO> 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();
processHandleService.updateApprovalRecord(processInfoVO);
switch (taskDefinitionKey) {
//主管级领导审批
case ProcessProjectNotMetCommon.ZGJLDSP:
zgjldspApprove(processInfoVO, processDTO, pass);
break;
//法规工程师审批
case ProcessProjectNotMetCommon.FGGCSSP:
fggcsspApprove(processInfoVO, processDTO, pass);
break;
default:
}
// 完成任务
Map<String, Object> variables = new HashMap<>();
variables.put(ProcessProjectAssessCommon.PASS, pass);
taskService.complete(taskId, variables);
}
private void zgjldspApprove(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
}
private void fggcsspApprove(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO, ProcessDTO processDTO, boolean pass) {
}
public void submit(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO) {
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
String taskId = basicTaskInfoDTO.getTaskId();
ProcessDTO processDTO = processHandleService.getProcessDTO(taskId);
String processInstanceId = processDTO.getProcessInstanceId();
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
String projectId = processAll.getProjectId();
processInfoVO.setBusinessId(projectId);
Task task = processDTO.getTask();
processHandleService.updateApprovalRecord(processInfoVO);
ProcessApprovalRecord processApprovalRecord = processDTO.getProcessApprovalRecord();
String originUserId = processApprovalRecord.getOriginUserId();
//先查询分配的条款,更新
ProcessProjectNotMetVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
List<ProcessProjectNotMetLink> processProjectNotMetLinks = businessInfoDTO.getProcessProjectNotMetLinks();
Map<String, ProcessProjectNotMetLink> stringProcessProjectNotMetLinkMap = CollStreamUtil.toIdentityMap(processProjectNotMetLinks, ProcessProjectNotMetLink::getId);
LambdaQueryWrapper<ProcessProjectNotMetUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessProjectNotMetUser::getProcessId,projectId);
wrapper.eq(ProcessProjectNotMetUser::getEngineerId,originUserId);
List<ProcessProjectNotMetUser> notMetUserList = processProjectNotMetUserService.list(wrapper);
String userId = CurrentUserUtil.getId();
Date now = new Date();
for (ProcessProjectNotMetUser processProjectNotMetUser : notMetUserList) {
String linkId = processProjectNotMetUser.getLinkId();
ProcessProjectNotMetLink processProjectNotMetLink = stringProcessProjectNotMetLinkMap.get(linkId);
processProjectNotMetUser.setFileId(processProjectNotMetLink.getFileId());
processProjectNotMetUser.setDescription(processProjectNotMetLink.getDescription());
processProjectNotMetUser.setEngineerId(userId);
processProjectNotMetUser.setRealityTime(now);
}
processProjectNotMetUserService.updateBatchById(notMetUserList);
taskService.complete(taskId);
}
public void saveToDraft(ProcessInfoVO<ProcessProjectNotMetVO> processInfoVO) {
ProcessProjectNotMetVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();
if (businessInfoDTO != null) {
ProcessProjectNotMet processProjectNotMet = businessInfoDTO.getProcessProjectNotMet();
if (processProjectNotMet != null) {
processInfoVO.setBusinessId(processProjectNotMet.getId());
}
}
// 流程信息
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
basicProcessInfoDTO.setProcessType(ProcessTypeEnum.PROJECT_NOT_MET.getValue()); // 流程类型
processHandleService.saveToDraft(processInfoVO);
}
}