fix: 同意驳回报错

This commit is contained in:
2023-10-27 17:13:42 +08:00
parent ada7ef7eb7
commit fca3188cc7
10 changed files with 505 additions and 96 deletions
@@ -65,4 +65,10 @@ public class CommonVO {
*/
@ApiModelProperty("流程描述")
private String prcMes;
/**
* 制修订计划说明
*/
@ApiModelProperty("制修订计划说明")
private String processDescription;
}
@@ -2,7 +2,12 @@ package com.jero.modules.activiti.process.common.service;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
@@ -37,6 +42,9 @@ public class ActFlowCommonService {
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
/**
* 启动流程实例
*/
@@ -46,9 +54,6 @@ public class ActFlowCommonService {
.orderByProcessDefinitionVersion().desc()
.list()
.get(0); // 获取最新版本的流程定义
// 第一个节点默认通过
variables.put("pass", true);
// 启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(latestProcessDefinition.getId(), variables);
// 流程定义ID
@@ -58,10 +63,21 @@ public class ActFlowCommonService {
return processInstance;
}
public void updateApprovalInfo(CommonVO commonVO, String taskId, boolean pass) {
//更新审批表为完成,填充数据
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
approvalRecord.setCommitText(commonVO.getCommitText());
approvalRecord.setCommitFile(commonVO.getCommitFile());
approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue());
approvalRecord.setEndTime(new Date());
processApprovalRecordService.updateById(approvalRecord);
}
/**
* 完成提交任务
*/
public void completeTask(String taskId, String userId, Map<String, Object> map) {
public void completeTask(String taskId, String userId) {
//任务Id 查询任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (!taskExists(taskId)) {
@@ -78,7 +94,8 @@ public class ActFlowCommonService {
log.info("负责人id=" + userId);
log.info("流程实例id=" + processInstanceId);
//完成办理
taskService.complete(taskId, map);
taskService.complete(taskId);
log.info("-----------完成任务操作 结束----------");
}
@@ -148,7 +165,7 @@ public class ActFlowCommonService {
return processDefinition.getKey();
}
public void autoCompleteFirstTask(String userId, String processInstanceId, String processDefinitionId, Map<String, Object> variables) {
public void autoCompleteFirstTask(String userId, String processInstanceId, String processDefinitionId) {
// 自动完成第一个任务
List<Map<String, Object>> taskList = this.myTaskList(userId);
if (!CollectionUtils.isEmpty(taskList)) {
@@ -160,7 +177,7 @@ public class ActFlowCommonService {
log.info("当前用户ID:{},相关联的流程定义ID:{}", userId, map.get("processDefinitionId").toString());
log.info("匹配到的任务ID{}", map.get("taskId").toString());
this.completeTask(map.get("taskId").toString(), userId, variables);
this.completeTask(map.get("taskId").toString(), userId);
break;
}
}
@@ -4,7 +4,9 @@ import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport;
import com.jero.modules.activiti.process.common.entity.TransferVO;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO;
import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -22,7 +24,6 @@ import java.io.OutputStream;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
@@ -38,6 +39,9 @@ public class ESAnnualReportController {
@Resource
private ProcessEsAnnualReportService annualReportService;
@Resource
private ActFlowCommonService actFlowCommonService;
/**
* 导入模板下载
*/
@@ -83,42 +87,74 @@ public class ESAnnualReportController {
/**
* 新增主动上报申请
*
* @param esAnnualReportList
* @param
*/
@AutoLog(value = "企标年度制修订主动上报流程-发起流程")
@ApiOperation(value="企标年度制修订主动上报流程-发起流程", notes="企标年度制修订主动上报流程-发起流程")
@PostMapping("/start")
public Result<?> startInitChange() {
// TODO 暂时不处理参数
annualReportService.startProcess();
public Result<?> startInitChange(@RequestBody AnnualReportDataVO annualReportDataVO) {
annualReportService.startProcess(annualReportDataVO);
return Result.OK();
}
/**
* 保存到待办
* @param annualReportDataVO
*/
@AutoLog(value = "企标立项变更流程-保存")
@ApiOperation(value="企标立项变更流程-保存", notes="企标立项变更流程-保存")
@PostMapping("/save")
public Result<?> save(@RequestBody AnnualReportDataVO annualReportDataVO) {
annualReportService.saveToDraft(annualReportDataVO);
return Result.OK();
}
/**
* 保存到待办
* @param taskId
*/
@AutoLog(value = "企标立项变更流程-办理")
@ApiOperation(value="企标立项变更流程-办理", notes="企标立项变更流程-办理")
@PostMapping("/handle")
public Result<?> handle(@RequestParam(value = "taskId") String taskId) {
return Result.OK(annualReportService.getHandleData(taskId));
}
/**
* 同意
*
* @param taskId
* @param esAnnualReportList
* @param annualReportDataVO
*/
@AutoLog(value = "企标年度制修订主动上报流程-同意")
@ApiOperation(value="企标年度制修订主动上报流程-同意", notes="企标年度制修订主动上报流程-同意")
@PostMapping("/agree")
public Result<?> agree(@RequestParam("taskId") String taskId, @RequestBody List<ProcessEsAnnualReport> esAnnualReportList) {
annualReportService.approvalProcess(taskId, esAnnualReportList, true);
public Result<?> agree(@RequestBody AnnualReportDataVO annualReportDataVO) {
annualReportService.approvalProcess(annualReportDataVO, true);
return Result.OK();
}
/**
* 驳回
*
* @param taskId
* @param esAnnualReportList
* @param annualReportDataVO
*/
@AutoLog(value = "企标年度制修订主动上报流程-驳回")
@ApiOperation(value="企标年度制修订主动上报流程-驳回", notes="企标年度制修订主动上报流程-驳回")
@PostMapping("/reject")
public Result<?> reject(@RequestParam("taskId") String taskId, @RequestBody List<ProcessEsAnnualReport> esAnnualReportList) {
annualReportService.approvalProcess(taskId, esAnnualReportList, false);
public Result<?> reject(@RequestBody AnnualReportDataVO annualReportDataVO) {
annualReportService.approvalProcess(annualReportDataVO, false);
return Result.OK();
}
/**
* 转办
*
*/
@AutoLog(value = "企标年度制修订主动上报流程-转办")
@ApiOperation(value="企标年度制修订主动上报流程-转办", notes="企标年度制修订主动上报流程-转办")
@PostMapping(value = "/transfer")
public Result<?> transfer(@RequestBody TransferVO transferVO) {
actFlowCommonService.transfer(transferVO.getTaskId(), transferVO.getUserId());
return Result.OK();
}
}
@@ -333,6 +333,49 @@ public class ProcessEsAnnualReport implements Serializable {
@ApiModelProperty(value = "隶属工作组")
private String workGroup;
/**
* 是否下发联络人标识 0不下发 1下发
*/
@Dict(dicCode = "YN")
@ApiModelProperty(value = "是否下发联络人标识 0不下发 1下发")
private String distributeFlag;
/**
* 部门联络人
*/
@Dict(dicCode = "id", dictTable = "sys_user", dicText = "username")
@ApiModelProperty(value = "部门联络人")
private String contactUser;
/**
* 工作组所联络人
*/
@Dict(dicCode = "id", dictTable = "sys_user", dicText = "username")
@ApiModelProperty(value = "工作组所联络人")
private String workGroupUser;
/**
* 工作组所联络人集合
*/
@Dict(dicCode = "id", dictTable = "sys_user", dicText = "username")
@ApiModelProperty(value = "工作组所联络人集合")
private String workGroupUserList;
/**
* 联络人主管级上一级领导
*/
@Dict(dicCode = "id", dictTable = "sys_user", dicText = "username")
@ApiModelProperty(value = "联络人主管级上一级领导")
private String contactUserLeaderLeader;
/**
* 收集联络人主管级领导
*/
@Dict(dicCode = "id", dictTable = "sys_user", dicText = "username")
@ApiModelProperty(value = "收集联络人主管级领导")
private String collectUserLeader;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
@@ -0,0 +1,16 @@
package com.jero.modules.activiti.process.esAnnualReport.entity.constant;
/**
* @author: Mzaxd
* @Date: 2023/10/27 7:32
*/
public class AnnualReportTaskNameConstant {
public static final String STANDARD_ENGINEER_INIT = "标准化工程师发起";
public static final String CONTACT_USER_DISTRIBUTE = "各部所联络人 填写/下发任务";
public static final String WORK_GROUP_COLLECT = "工作组联络人 线下收集,填写计划内容(可跳过)";
public static final String COLLECT_LEADER_APPROVAL = "收集联络人主管级领导审批";
public static final String CONTACT_USER_COLLECT = "各部所联络人汇总";
public static final String CONTACT_USER_LEADER_APPROVAL = "联络人主管级上级领导审批";
public static final String CONTACT_USER_EDIT = "各部所联络人修改调整";
public static final String STANDARD_ENGINEER_COLLECT = "标准化工程师归档";
}
@@ -0,0 +1,26 @@
package com.jero.modules.activiti.process.esAnnualReport.entity.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport;
import lombok.Data;
import java.util.List;
/**
* @author: Mzaxd
* @Date: 2023/10/26 17:28
*/
@Data
public class AnnualReportDataVO {
@JsonProperty("common")
private CommonVO commonVO;
@JsonProperty("dataList")
private List<ProcessEsAnnualReport> dataList;
@JsonProperty("flowUser")
private AnnualReportFlowUserVO flowUserVO;
}
@@ -0,0 +1,40 @@
package com.jero.modules.activiti.process.esAnnualReport.entity.vo;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author: Mzaxd
* @Date: 2023/10/26 17:29
*/
@Data
public class AnnualReportFlowUserVO {
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@ApiModelProperty("标准化工程师")
private String standardEngineer;
// 部所联络人
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@ApiModelProperty("个部所联络人")
private String contactUserList;
// 标准专家
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@ApiModelProperty("工作组联络人")
private String workGroupUserList;
// 主起草人主管级领导
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@ApiModelProperty("收集联络人主管级领导")
private String collectUserLeader;
// 主起草人主管级领导上级领导
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@ApiModelProperty("联络人主管级上级领导")
private String contactUserLeaderLeader;
@ApiModelProperty("是否下发")
private boolean distribute;
}
@@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.esAnnualReport.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport;
import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -16,7 +17,11 @@ public interface ProcessEsAnnualReportService extends IService<ProcessEsAnnualRe
Map<String, Object> importData(MultipartFile file);
void startProcess();
void startProcess(AnnualReportDataVO annualReportDataVO);
void approvalProcess(String taskId, List<ProcessEsAnnualReport> esAnnualReportList, boolean b);
void approvalProcess(AnnualReportDataVO annualReportDataVO, boolean b);
void saveToDraft(AnnualReportDataVO annualReportDataVO);
AnnualReportDataVO getHandleData(String taskId);
}
@@ -7,21 +7,35 @@ import com.jero.common.api.CommonAPI;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.SysDictItemCore;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum;
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.common.service.ProcessDraftService;
import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport;
import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDataVO;
import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportFlowUserVO;
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.ProcessEsInitChange;
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.entity.vo.InitChangeFlowUserVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.util.ExcelUtils;
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;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.jeecgframework.poi.excel.ExcelImportUtil;
@@ -35,16 +49,18 @@ import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
import static com.jero.modules.activiti.process.esAnnualReport.entity.constant.AnnualReportTaskNameConstant.*;
/**
* @author ThinkBook
* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service实现
* @createDate 2023-10-18 09:52:41
*/
* @author ThinkBook
* @description 针对表【process_es_annual_report(企标-年度制修订计划-各部门主动上报)】的数据库操作Service实现
* @createDate 2023-10-18 09:52:41
*/
@Slf4j
@Service
@Transactional(rollbackFor = JeroBootException.class)
public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnualReportMapper, ProcessEsAnnualReport>
implements ProcessEsAnnualReportService {
implements ProcessEsAnnualReportService {
@Resource
private CommonAPI commonAPI;
@@ -59,50 +75,235 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
private ActFlowCommonService actFlowCommonService;
@Resource
private RepositoryService repositoryService;
private ProcessDraftService processDraftService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private ProcessAllService processAllService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Override
public void startProcess() {
String userId = UserUtils.getUserId();
// TODO 校验数据
public void startProcess(AnnualReportDataVO annualReportData) {
// 流程Key
String processDefinitionKey = ProcessType.ES_ANNUAL_REPORT.getProcessKey();
ProcessDefinition latestProcessDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey)
.orderByProcessDefinitionVersion().desc()
.list()
.get(0); // 获取最新版本的流程定义
String userId = UserUtils.getUserId();
List<ProcessEsAnnualReport> annualReportList = annualReportData.getDataList();
Map<String, Object> variables = new HashMap<>();
variables.put("","");
// 设置流程变量
Map<String, Object> variables = setVariables(annualReportData);
// 启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(latestProcessDefinition.getId(), variables);
// 流程定义ID
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
// 流程实例Id
String processInstanceId = processInstance.getProcessInstanceId();
String processInstanceId = processInstance.getId();
// 自动完成第一个任务
actFlowCommonService.autoCompleteFirstTask(userId, processDefinitionId, processInstanceId, variables);
// TODO 保存数据
log.info("【启动流程】- 成功,processDefinitionId{}", processDefinitionId);
actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId);
// 设置流程实例Id
for (ProcessEsAnnualReport annualReport : annualReportList) {
annualReport.setProcessInstanceId(processInstance.getId());
}
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 根据流程实例id更新流程总表
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
process.setCreateUserId(userId);
process.setPrcName(annualReportData.getCommonVO().getPrcName());
process.setPrcMes(annualReportData.getCommonVO().getPrcMes());
process.setDueTime(annualReportData.getCommonVO().getDueTime());
processAllService.updateById(process);
// 执行流程发起前的操作
this.startRunTask(annualReportData);
}
private Map<String, Object> getUserMap(Map<String, Object> variables) {
variables.remove("distribute");
variables.remove("processDescription");
return variables;
}
public Map<String, Object> setVariables(AnnualReportDataVO annualReportData) {
AnnualReportFlowUserVO annualReportFlowUserVO = annualReportData.getFlowUserVO();
CommonVO commonVO = annualReportData.getCommonVO();
Map<String, Object> map = new HashMap<>();
// 设置流程中各个节点的人
map.put("standardEngineer", annualReportFlowUserVO.getStandardEngineer());
if (!annualReportFlowUserVO.getContactUserList().isEmpty()) {
map.put("contactUserList", Optional.of(annualReportFlowUserVO.getContactUserList()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()));
}
if (!annualReportFlowUserVO.getWorkGroupUserList().isEmpty()) {
map.put("workGroupUserList", Optional.of(annualReportFlowUserVO.getWorkGroupUserList()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()));
}
map.put("collectUserLeader", annualReportFlowUserVO.getContactUserLeaderLeader());
map.put("contactUserLeaderLeader", annualReportFlowUserVO.getContactUserLeaderLeader());
// 设置流程分支判断变量
map.put("distribute", annualReportFlowUserVO.isDistribute());
map.put("processDescription", commonVO.getProcessDescription());
return map;
}
public void startRunTask(AnnualReportDataVO annualReportDataVO) {
//TODO info部长
}
@Override
public void approvalProcess(String taskId, List<ProcessEsAnnualReport> esAnnualReportList, boolean pass) {
public void approvalProcess(AnnualReportDataVO annualReportDataVO, boolean pass) {
String userId = UserUtils.getUserId();
CommonVO commonVO = annualReportDataVO.getCommonVO();
AnnualReportFlowUserVO flowUserVO = annualReportDataVO.getFlowUserVO();
List<ProcessEsAnnualReport> dataList = annualReportDataVO.getDataList();
String taskId = commonVO.getTaskId();
// 获取task
if (StrUtil.isBlank(taskId) && !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String taskDefinitionKey = task.getTaskDefinitionKey();
// TODO 校验数据
// TODO 根据当前节点类型保存数据
String taskName = task.getName();
Map<String, Object> variables = new HashMap<>();
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
switch (taskName) {
case CONTACT_USER_DISTRIBUTE:
// 获取是否分发
if (!flowUserVO.isDistribute()) {
// 保存联络人主管级上级领导
dataList.forEach(data -> data.setContactUserLeaderLeader(flowUserVO.getContactUserLeaderLeader()));
// 不分发,入库存表
saveBatch(dataList);
}
// 设置流程变量
break;
case WORK_GROUP_COLLECT:
String executionId = task.getExecutionId();
String contactUser = (String) runtimeService.getVariable(executionId, "contactUser");
dataList.forEach(data -> data.setContactUser(contactUser));
// 保存收集联络人主管级领导
dataList.forEach(data -> data.setCollectUserLeader(flowUserVO.getCollectUserLeader()));
dataList.forEach(data -> data.setWorkGroupUser(UserUtils.getUserId()));
saveBatch(dataList);
// 设置流程变量
break;
case CONTACT_USER_COLLECT:
case CONTACT_USER_EDIT:
// 先删后增
LambdaQueryWrapper<ProcessEsAnnualReport> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessEsAnnualReport::getContactUser, UserUtils.getUserId());
remove(wrapper);
saveBatch(dataList);
break;
}
if (pass) {
// 更新业务流程数据
variables = setVariables(annualReportDataVO);
variables.put("pass", true);
// 保存选人信息
Map<String, Object> userMap = this.getUserMap(variables);
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
} else {
// 设置流程变量
variables.put("pass", false);
}
// 设置流程变量
// 完成任务
actFlowCommonService.completeTask(taskId, userId, null);
variables.put("pass", pass);
//更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass);
//审批节点
actFlowCommonService.completeTask(taskId, userId);
}
@Override
public void saveToDraft(AnnualReportDataVO annualReportDataVO) {
}
@Override
public AnnualReportDataVO getHandleData(String taskId) {
String userId = UserUtils.getUserId();
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
AnnualReportDataVO annualReportDataVO = new AnnualReportDataVO();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
CommonVO commonVO = new CommonVO();
commonVO.setPrcName(process.getPrcName());
commonVO.setTaskId(process.getTaskId());
commonVO.setPrcMes(process.getPrcMes());
commonVO.setDueTime(process.getDueTime());
String processDescription = (String) runtimeService.getVariable(processInstanceId, "processDescription");
boolean distribute = (boolean) runtimeService.getVariable(processInstanceId, "distribute");
commonVO.setProcessDescription(processDescription);
annualReportDataVO.setCommonVO(commonVO);
// 获取流程实例数据
LambdaQueryWrapper<ProcessEsAnnualReport> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessEsAnnualReport::getProcessInstanceId, processInstanceId);
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String taskName = task.getName();
switch (taskName) {
case STANDARD_ENGINEER_INIT:
// do nothing now
break;
case CONTACT_USER_DISTRIBUTE:
// do nothing now
break;
case WORK_GROUP_COLLECT:
// do nothing now
break;
case COLLECT_LEADER_APPROVAL:
wrapper.eq(ProcessEsAnnualReport::getCollectUserLeader, userId);
annualReportDataVO.setDataList(list(wrapper));
break;
case CONTACT_USER_COLLECT:
wrapper.eq(ProcessEsAnnualReport::getContactUser, userId);
annualReportDataVO.setDataList(list(wrapper));
break;
case CONTACT_USER_LEADER_APPROVAL:
wrapper.eq(ProcessEsAnnualReport::getContactUserLeaderLeader, userId);
annualReportDataVO.setDataList(list(wrapper));
break;
case CONTACT_USER_EDIT:
wrapper.eq(ProcessEsAnnualReport::getContactUser, userId);
annualReportDataVO.setDataList(list(wrapper));
break;
case STANDARD_ENGINEER_COLLECT:
wrapper.eq(ProcessEsAnnualReport::getProcessInstanceId, processInstanceId);
annualReportDataVO.setDataList(list(wrapper));
break;
}
// 选人组件内容填充
annualReportDataVO.setFlowUserVO(this.getProcessUserInfo(processDefinitionId, processInstanceId));
return annualReportDataVO;
}
private AnnualReportFlowUserVO getProcessUserInfo(String processDefinitionId, String processInstanceId) {
List<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId);
AnnualReportFlowUserVO annualReportFlowUserVO = new AnnualReportFlowUserVO();
Map<String, ProcessNode> userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node));
annualReportFlowUserVO.setStandardEngineer(userMap.get("standardEngineer").getLinkUserIds());
annualReportFlowUserVO.setContactUserList(userMap.get("contactUserList").getLinkUserIds());
annualReportFlowUserVO.setWorkGroupUserList(userMap.get("workGroupUserList").getLinkUserIds());
annualReportFlowUserVO.setCollectUserLeader(userMap.get("collectUserLeader").getLinkUserIds());
annualReportFlowUserVO.setContactUserLeaderLeader(userMap.get("contactUserLeaderLeader").getLinkUserIds());
return annualReportFlowUserVO;
}
@Override
@@ -183,7 +384,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
// 转换成key为企标编号的map
Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item));
list.forEach(item-> {
list.forEach(item -> {
// 如果是制定则去除掉所有的原企标名称 原企标编号
if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) {
item.setOriginEnStandardName(null);
@@ -199,6 +400,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
}
});
}
private void transToDictValue(List<ProcessEsAnnualReport> list, List<SysDictItemCore> listDict) {
list.forEach(item -> {
item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict));
@@ -212,6 +414,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl<ProcessEsAnnua
item.setWorkGroup(excelUtils.translateDictValue("name", "id", "laws_working_group", item.getWorkGroup(), listDict));
});
}
private List<String> validationList(List<ProcessEsAnnualReport> list, List<SysDictItemCore> listDict) {
List<LawsEnterpriseStandard> esList = enterpriseStandardService.list();
List<String> errorMsgs = new ArrayList<>();
@@ -107,15 +107,16 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
List<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId);
InitChangeFlowUserVO initChangeFlowUserVO = new InitChangeFlowUserVO();
Map<String, ProcessNode> userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node));
initChangeFlowUserVO.setCreateUser(userMap.get("createUser").getLinkUserIds());
initChangeFlowUserVO.setContactUser(userMap.get("contactUser").getLinkUserIds());
initChangeFlowUserVO.setMainDraftUserLeader(userMap.get("mainDraftUserLeader").getLinkUserIds());
initChangeFlowUserVO.setMainDraftUserLeaderLeader(userMap.get("mainDraftUserLeaderLeader").getLinkUserIds());
initChangeFlowUserVO.setStandardizationApprovalUser(userMap.get("standardizationApprovalUser").getLinkUserIds());
initChangeFlowUserVO.setNewMainDraftUserLeaderLeader(userMap.get("newMainDraftUserLeaderLeader").getLinkUserIds());
initChangeFlowUserVO.setNewMainDraftUserLeader(userMap.get("newMainDraftUserLeader").getLinkUserIds());
initChangeFlowUserVO.setCopyUser(userMap.get("copyUser").getLinkUserIds());
initChangeFlowUserVO.setStandardExpert(userMap.get("standardExpert").getLinkUserIds());
Optional.ofNullable(userMap.get("createUser")).ifPresent(node -> initChangeFlowUserVO.setCreateUser(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("contactUser")).ifPresent(node -> initChangeFlowUserVO.setContactUser(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("standardExpertList")).ifPresent(node -> initChangeFlowUserVO.setStandardExpert(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("mainDraftUserLeader")).ifPresent(node -> initChangeFlowUserVO.setMainDraftUserLeader(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("mainDraftUserLeaderLeader")).ifPresent(node -> initChangeFlowUserVO.setMainDraftUserLeaderLeader(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("standardizationApprovalUser")).ifPresent(node -> initChangeFlowUserVO.setStandardizationApprovalUser(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("newMainDraftUserLeaderLeader")).ifPresent(node -> initChangeFlowUserVO.setNewMainDraftUserLeaderLeader(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("newMainDraftUserLeader")).ifPresent(node -> initChangeFlowUserVO.setNewMainDraftUserLeader(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("relatedUserList")).ifPresent(node -> initChangeFlowUserVO.setRelatedUser(node.getLinkUserIds()));
Optional.ofNullable(userMap.get("copyUser")).ifPresent(node -> initChangeFlowUserVO.setCopyUser(node.getLinkUserIds()));
return initChangeFlowUserVO;
}
@@ -138,7 +139,14 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
// 自动完成第一个任务
actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId, variables);
runtimeService.setVariable(processInstanceId, "createUser", variables.get("createUser"));
runtimeService.setVariable(processInstanceId, "contactUser", variables.get("contactUser"));
runtimeService.setVariable(processInstanceId, "projectType", variables.get("projectType"));
runtimeService.setVariable(processInstanceId, "mainDraftUserLeader", variables.get("mainDraftUserLeader"));
runtimeService.setVariable(processInstanceId, "contactUser", variables.get("contactUser"));
runtimeService.setVariable(processInstanceId, "standardExpertList", variables.get("standardExpertList"));
runtimeService.setVariable(processInstanceId, "standardizationApprovalUser", variables.get("standardizationApprovalUser"));
actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId);
// 设置流程实例Id
for (ProcessEsInitChange esInitChange : esInitChangeList) {
esInitChange.setProcessInstanceId(processInstance.getId());
@@ -171,28 +179,23 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
if (StrUtil.isBlank(taskId) && !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
List<ProcessEsInitChange> esInitChangeList = initChangeDataVO.getDataList();
Map<String, Object> variables = new HashMap<>();
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
if (pass) {
// 校验企标编号是否冲突
if (!esUtil.verifyEnStandardNumber(esInitChangeList.get(0).getOriginEnStandardNo())) {
throw new JeroBootException("企标编号冲突");
InitChangeFlowUserVO flowUserInfoVO = initChangeDataVO.getFlowUserInfoVO();
if (flowUserInfoVO != null) {
Map<String, Object> userMap = new HashMap<>();
this.setUserMap(userMap, flowUserInfoVO);
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
}
// 更新业务流程数据
saveOrUpdateBatch(esInitChangeList);
variables = setVariables(initChangeDataVO);
variables.put("pass", true);
// 保存选人信息
Map<String, Object> userMap = this.getUserMap(variables);
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
runtimeService.setVariable(processInstanceId, "pass", true);
} else {
// 设置流程变量
InitChangeFlowUserVO processUserInfo = this.getProcessUserInfo(processDefinitionId, processInstanceId);
initChangeDataVO.setFlowUserInfoVO(processUserInfo);
this.setUserMap(variables, processUserInfo);
variables.put("pass", false);
// InitChangeFlowUserVO processUserInfo = this.getProcessUserInfo(processDefinitionId, processInstanceId);
// initChangeDataVO.setFlowUserInfoVO(processUserInfo);
runtimeService.setVariable(processInstanceId, "pass", false);
// variables.put("pass", false);
}
//更新审批表为完成,填充数据
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
@@ -203,13 +206,20 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
approvalRecord.setEndTime(new Date());
processApprovalRecordService.updateById(approvalRecord);
//审批节点
actFlowCommonService.completeTask(taskId, userId, variables);
actFlowCommonService.completeTask(taskId, userId);
}
private Map<String, Object> getUserMap(Map<String, Object> variables) {
variables.remove("pass");
variables.remove("applicationCategory");
variables.remove("projectType");
// 转成逗号拼接
variables.put("standardExpertList", Optional.ofNullable((List<String>) variables.get("standardExpertList"))
.map(list -> String.join(",", list))
.orElse(""));
variables.put("relatedUserList", Optional.ofNullable((List<String>) variables.get("relatedUserList"))
.map(list -> String.join(",", list))
.orElse(""));
return variables;
}
@@ -270,23 +280,30 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
InitChangeFlowUserVO initChangeFlowUserVO = initChangeData.getFlowUserInfoVO();
ProcessEsInitChange initChange = initChangeData.getDataList().get(0);
Map<String, Object> map = new HashMap<>();
// 设置流程中各个节点的人
map.put("createUser", initChangeFlowUserVO.getCreateUser());
map.put("contactUser", initChangeFlowUserVO.getContactUser());
map.put("standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()));
map.put("mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader());
map.put("mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader());
map.put("standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser());
map.put("newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader());
map.put("newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader());
map.put("relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()));
map.put("copyUser", initChangeFlowUserVO.getCopyUser());
// 设置流程分支判断变量
map.put("applicationCategory", initChange.getApplicationCategory());
map.put("projectType", initChange.getProjectType());
// 使用一个通用方法来只在不为空时添加键值对
putIfNotNull(map, "createUser", initChangeFlowUserVO.getCreateUser());
putIfNotNull(map, "contactUser", initChangeFlowUserVO.getContactUser());
putIfNotNull(map, "standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null));
putIfNotNull(map, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader());
putIfNotNull(map, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader());
putIfNotNull(map, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser());
putIfNotNull(map, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader());
putIfNotNull(map, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader());
putIfNotNull(map, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null));
putIfNotNull(map, "copyUser", initChangeFlowUserVO.getCopyUser());
putIfNotNull(map, "applicationCategory", initChange.getApplicationCategory());
putIfNotNull(map, "projectType", initChange.getProjectType());
return map;
}
private void putIfNotNull(Map<String, Object> map, String key, Object value) {
if (value != null) {
map.put(key, value);
}
}
public void startRunTask(InitChangeDataVO initChangeData) {
List<ProcessEsInitChange> esInitChangeList = initChangeData.getDataList();
// 校验企标编号是否冲突