feat: 自动发起企标复审流程
This commit is contained in:
+6
@@ -73,6 +73,12 @@ public class ProcessEsRecheck implements Serializable {
|
|||||||
@ApiModelProperty(value = "流程实例Id")
|
@ApiModelProperty(value = "流程实例Id")
|
||||||
private String processInstanceId;
|
private String processInstanceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 企标Id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "企标Id")
|
||||||
|
private String standardId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企标编号
|
* 企标编号
|
||||||
*/
|
*/
|
||||||
|
|||||||
+2
@@ -13,6 +13,8 @@ public interface ProcessEsRecheckService extends IService<ProcessEsRecheck> {
|
|||||||
|
|
||||||
void startProcess(ESRecheckDataVO recheckData);
|
void startProcess(ESRecheckDataVO recheckData);
|
||||||
|
|
||||||
|
void autoStartProcess(ESRecheckDataVO recheckData);
|
||||||
|
|
||||||
void saveToDraft(ESRecheckDataVO recheckData);
|
void saveToDraft(ESRecheckDataVO recheckData);
|
||||||
|
|
||||||
ESRecheckDataVO getHandleData(String taskId);
|
ESRecheckDataVO getHandleData(String taskId);
|
||||||
|
|||||||
+39
@@ -87,6 +87,45 @@ public class ProcessEsRecheckServiceImpl extends ServiceImpl<ProcessEsRecheckMap
|
|||||||
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
|
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) {
|
public Map<String, Object> setVariables(Map<String, Object> flowUser) {
|
||||||
Map<String, Object> actVariables = new HashMap<>();
|
Map<String, Object> actVariables = new HashMap<>();
|
||||||
for (Map.Entry<String, Object> entry : flowUser.entrySet()) {
|
for (Map.Entry<String, Object> entry : flowUser.entrySet()) {
|
||||||
|
|||||||
+50
-1
@@ -1,12 +1,19 @@
|
|||||||
package com.jero.modules.laws.enterprise.job;
|
package com.jero.modules.laws.enterprise.job;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.jero.common.constant.enums.YesOrNoEnum;
|
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.entity.EnterpriseStandardRecheckPlan;
|
||||||
import com.jero.modules.laws.enterprise.service.EnterpriseStandardRecheckPlanService;
|
import com.jero.modules.laws.enterprise.service.EnterpriseStandardRecheckPlanService;
|
||||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||||
|
import com.jero.modules.laws.system.service.ILawsContactManageService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.quartz.Job;
|
import org.quartz.Job;
|
||||||
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionContext;
|
||||||
import org.quartz.JobExecutionException;
|
import org.quartz.JobExecutionException;
|
||||||
@@ -16,6 +23,7 @@ import java.time.LocalDate;
|
|||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -34,6 +42,12 @@ public class ESRecheckPlanJob implements Job {
|
|||||||
@Resource
|
@Resource
|
||||||
private ILawsEnterpriseStandardService esService;
|
private ILawsEnterpriseStandardService esService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ILawsContactManageService contactManageService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProcessEsRecheckService recheckService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||||
List<LawsEnterpriseStandard> allEs = esService.list(new LambdaQueryWrapper<LawsEnterpriseStandard>().eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getValue()));
|
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)) {
|
if (plusMonths.isBefore(now)) {
|
||||||
// 判断是否已经存在复审计划
|
// 判断是否已经存在复审计划
|
||||||
List<EnterpriseStandardRecheckPlan> recheckPlans = recheckPlanMap.get(es.getId());
|
List<EnterpriseStandardRecheckPlan> recheckPlans = recheckPlanMap.get(es.getId());
|
||||||
if (recheckPlans == null || recheckPlans.size() == 0) {
|
if (recheckPlans == null || recheckPlans.isEmpty()) {
|
||||||
// 企标已经达到35个月,需要重新复审
|
// 企标已经达到35个月,需要重新复审
|
||||||
EnterpriseStandardRecheckPlan recheckPlan = new EnterpriseStandardRecheckPlan();
|
EnterpriseStandardRecheckPlan recheckPlan = new EnterpriseStandardRecheckPlan();
|
||||||
recheckPlan.setStandardId(es.getId());
|
recheckPlan.setStandardId(es.getId());
|
||||||
@@ -66,9 +80,44 @@ public class ESRecheckPlanJob implements Job {
|
|||||||
Date recheckDate = Date.from(zdtRecheck.toInstant());
|
Date recheckDate = Date.from(zdtRecheck.toInstant());
|
||||||
recheckPlan.setRecheckDate(recheckDate);
|
recheckPlan.setRecheckDate(recheckDate);
|
||||||
esRecheckPlanService.save(recheckPlan);
|
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("企标复审计划定时任务执行完成");
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
@@ -73,4 +73,18 @@ public interface ILawsContactManageService extends IService<LawsContactManage> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
LawsContactManage queryById(String id);
|
LawsContactManage queryById(String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据部门Id返回其联络人
|
||||||
|
* @param deptId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String findContactUserByDept(String deptId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据部门Id返回其标准化工程师
|
||||||
|
* @param deptId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String findStandardEngineerByDept(String deptId);
|
||||||
}
|
}
|
||||||
|
|||||||
+25
@@ -1,5 +1,6 @@
|
|||||||
package com.jero.modules.laws.system.service.impl;
|
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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.jero.modules.laws.system.entity.LawsContactManage;
|
import com.jero.modules.laws.system.entity.LawsContactManage;
|
||||||
import com.jero.modules.laws.system.mapper.LawsContactManageMapper;
|
import com.jero.modules.laws.system.mapper.LawsContactManageMapper;
|
||||||
@@ -115,4 +116,28 @@ public class LawsContactManageServiceImpl extends ServiceImpl<LawsContactManageM
|
|||||||
public LawsContactManage queryById(String id) {
|
public LawsContactManage queryById(String id) {
|
||||||
return getById(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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user