feat: 自动发起企标复审流程

This commit is contained in:
2023-11-27 10:42:27 +08:00
parent 56aaa477d7
commit e2ebee91cf
6 changed files with 136 additions and 1 deletions
@@ -73,6 +73,12 @@ public class ProcessEsRecheck implements Serializable {
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
/**
* 企标Id
*/
@ApiModelProperty(value = "企标Id")
private String standardId;
/**
* 企标编号
*/
@@ -13,6 +13,8 @@ public interface ProcessEsRecheckService extends IService<ProcessEsRecheck> {
void startProcess(ESRecheckDataVO recheckData);
void autoStartProcess(ESRecheckDataVO recheckData);
void saveToDraft(ESRecheckDataVO recheckData);
ESRecheckDataVO getHandleData(String taskId);
@@ -87,6 +87,45 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
}
@Override
public void autoStartProcess(ESRecheckDataVO recheckData) {
// 执行流程发起前的操作
this.startRunTask(recheckData);
// 流程Key
String processDefinitionKey = ProcessType.ES_RECHECK.getProcessKey();
// 业务数据
ProcessEsRecheck esRecheck = recheckData.getData();
// 通用数据
CommonVO common = recheckData.getCommon();
// 人员数据
Map<String, Object> variables = recheckData.getFlowUser();
// 当前数据的标准化工程师
String standardEngineerId = variables.get("standardEngineer").toString();
String standardizationUserId = variables.get("standardizationUser").toString();
String userId = StrUtil.isNotBlank(standardizationUserId) ? standardizationUserId : standardEngineerId;
// 设置流程变量
Map<String, Object> actVariables = this.setVariables(variables);
// 启动流程
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
// 手动设置所有流程变量
actFlowCommonService.setProcessVariables(processInstanceId, actVariables);
// 设置流程实例Id
esRecheck.setProcessInstanceId(processInstanceId);
// 保存到业务流程表
saveOrUpdate(esRecheck);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 根据流程实例id更新流程总表
String prcName = common.getPrcName();
String prcMes = common.getPrcMes();
Date dueTime = common.getDueTime();
Integer prcType = ProcessTypeEnum.ES_RECHECK.getValue();
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
}
public Map<String, Object> setVariables(Map<String, Object> flowUser) {
Map<String, Object> actVariables = new HashMap<>();
for (Map.Entry<String, Object> entry : flowUser.entrySet()) {
@@ -1,12 +1,19 @@
package com.jero.modules.laws.enterprise.job;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
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;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardRecheckPlan;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardRecheckPlanService;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.laws.system.service.ILawsContactManageService;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -16,6 +23,7 @@ import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -34,6 +42,12 @@ public class ESRecheckPlanJob implements Job {
@Resource
private ILawsEnterpriseStandardService esService;
@Resource
private ILawsContactManageService contactManageService;
@Resource
private ProcessEsRecheckService recheckService;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
List<LawsEnterpriseStandard> allEs = esService.list(new LambdaQueryWrapper<LawsEnterpriseStandard>().eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getValue()));
@@ -55,7 +69,7 @@ public class ESRecheckPlanJob implements Job {
if (plusMonths.isBefore(now)) {
// 判断是否已经存在复审计划
List<EnterpriseStandardRecheckPlan> recheckPlans = recheckPlanMap.get(es.getId());
if (recheckPlans == null || recheckPlans.size() == 0) {
if (recheckPlans == null || recheckPlans.isEmpty()) {
// 企标已经达到35个月,需要重新复审
EnterpriseStandardRecheckPlan recheckPlan = new EnterpriseStandardRecheckPlan();
recheckPlan.setStandardId(es.getId());
@@ -66,9 +80,44 @@ public class ESRecheckPlanJob implements Job {
Date recheckDate = Date.from(zdtRecheck.toInstant());
recheckPlan.setRecheckDate(recheckDate);
esRecheckPlanService.save(recheckPlan);
// 自动发起流程
// 找到各自企标的联络人,如果找不到联络人则发给标准化工程师
String deptId = es.getMainDraftingUnit();
if (StrUtil.isBlank(deptId)) {
log.error("企标复审流程发起失败,企标Id为{}的企标部门ID为空,无法找到其联络人", deptId);
continue;
}
String standardizationUser = contactManageService.findContactUserByDept(deptId);
String standardEngineer = null;
if (StrUtil.isBlank(standardizationUser)) {
standardEngineer = contactManageService.findStandardEngineerByDept(deptId);
}
if (StrUtil.isBlank(standardizationUser) && StrUtil.isBlank(standardEngineer)) {
log.error("企标复审流程发起失败,无法找到企标Id为{}的联络人和标准化工程师", deptId);
continue;
}
// 构建发起流程数据
ESRecheckDataVO esRecheckDataVO = this.getEsRecheckDataVO(es, standardizationUser, standardEngineer);
// 发起流程
recheckService.autoStartProcess(esRecheckDataVO);
}
}
}
log.info("企标复审计划定时任务执行完成");
}
private ESRecheckDataVO getEsRecheckDataVO(LawsEnterpriseStandard es, String standardizationUser, String standardEngineer) {
ESRecheckDataVO esRecheckDataVO = new ESRecheckDataVO();
ProcessEsRecheck recheck = new ProcessEsRecheck();
recheck.setStandardId(es.getId());
CommonVO commonVO = new CommonVO();
commonVO.setPrcName(es.getStandardNumber() + "-" + es.getStandardName() + "-复审");
Map<String, Object> map = new HashMap<>();
map.put("standardizationUser", standardizationUser);
map.put("standardEngineer", standardEngineer);
esRecheckDataVO.setCommon(commonVO);
esRecheckDataVO.setData(recheck);
esRecheckDataVO.setFlowUser(map);
return esRecheckDataVO;
}
}
@@ -73,4 +73,18 @@ public interface ILawsContactManageService extends IService<LawsContactManage> {
* @return
*/
LawsContactManage queryById(String id);
/**
* 根据部门Id返回其联络人
* @param deptId
* @return
*/
String findContactUserByDept(String deptId);
/**
* 根据部门Id返回其标准化工程师
* @param deptId
* @return
*/
String findStandardEngineerByDept(String deptId);
}
@@ -1,5 +1,6 @@
package com.jero.modules.laws.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.modules.laws.system.entity.LawsContactManage;
import com.jero.modules.laws.system.mapper.LawsContactManageMapper;
@@ -115,4 +116,28 @@ public class LawsContactManageServiceImpl extends ServiceImpl<LawsContactManageM
public LawsContactManage queryById(String id) {
return getById(id);
}
@Override
public String findContactUserByDept(String deptId) {
LambdaQueryWrapper<LawsContactManage> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsContactManage::getDepartId, deptId);
List<LawsContactManage> list = list(wrapper);
if (list == null || list.isEmpty()) {
return null;
} else {
return list.get(0).getContactId();
}
}
@Override
public String findStandardEngineerByDept(String deptId) {
LambdaQueryWrapper<LawsContactManage> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LawsContactManage::getDepartId, deptId);
List<LawsContactManage> list = list(wrapper);
if (list == null || list.isEmpty()) {
return null;
} else {
return list.get(0).getEngineerId();
}
}
}