添加新法规清单导入流程

This commit is contained in:
梁琦涛
2024-07-09 10:46:02 +08:00
parent 4c54a673dd
commit a27a17d4fd
11 changed files with 572 additions and 0 deletions
@@ -13,6 +13,7 @@ public enum ProcessTypeEnum {
DEMO("测试流程", 0, "com.jero.modules.activiti.process.demo.service.ProcessDemoService", "/workCenter/StandardEntryOrChangeProcess", "/workCenter/StandardEntryOrChangeProcess"),
STANDARD_INTERPRET("标准解读流程", 2, "com.jero.modules.activiti.process.standardinterpret.service.impl.StandardInterpretFlow", "", ""),
STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 3, "com.jero.modules.activiti.process.standardComplianceCheck.service.ProcessStandardComplianceCheckService", "/workCenter/StandardComplianceCheckProcess", "/workCenter/StandardComplianceCheckProcess"),
NEW_STANDARD_IMPORT("新法规导入流程", 4, "com.jero.modules.activiti.process.ni.service.ProcessNewStandardImportService", "/workCenter/ProcessNewStandardImportProcess", "/workCenter/StandardComplianceCheckProcess"),
;
private final String name;
@@ -13,6 +13,7 @@ public enum ProcessType {
STANDARD_INTERPRET("标准解读流程", "2", "standard_interpret", "StandardInterpretFlowServiceImpl"),
STANDARD_COMPLIANCE_CHECK("法规符合性评估流程", "3", "laws-evaluation-main", "ProcessStandardComplianceCheckServiceImpl"),
NEW_STANDARD_IMPORT("新法规搭导入流程", "4", "new_standard_import", "ProcessNewStandardImportServiceImpl"),
;
private final String name;
@@ -0,0 +1,68 @@
package com.jero.modules.activiti.process.ni.common;
/**
* @author liJiaRao
* @date 2024-06-17 15:28
*/
public class ProcessNewStandardImportConstants {
/** 法规工程师 */
public static final String STANDARD_ENGINEER = "standardEngineer";
/** 各部门接口人 */
public static final String DEPT_USER = "deptUser";
/** 主排查人 */
public static final String MAIN_CHECK_USER = "mainCheckUser";
/** 会签人员列表 */
public static final String COUNTERSIGN_USER_LIST = "countersignUserList";
/** 设计工程师科室经理审核 */
public static final String MANAGER = "manager";
/** 高级经理/技术官 */
public static final String SENIOR_MANAGER = "seniorManager";
/** 未分配数量 */
public static final String UNALLOCATED_QUANTITY = "unallocatedQuantity";
/**
* 法规工程师发起
*/
public static final String STANDARD_ENGINEER_START = "sid-F144BD89-366F-482C-89DE-3AE2BD22D371";
/**
* 各部门接口人分发
*/
public static final String DEPT_USER_DISTRIBUTE = "sid-F07416DD-65BF-499E-AC96-F7A407AA3CEB";
/**
* 主排查人分发
*/
public static final String MAIN_CHECK_USER_DISTRIBUTE = "sid-96A59284-7EE2-4F10-A327-F76BC26B95F8";
/**
* 主排查人分发
*/
public static final String MAIN_CHECK_USER_REDISTRIBUTE = "sid-3D1BFC0F-9074-4868-891F-2F76D00A21C7";
/**
* 主排查人汇总
*/
public static final String MAIN_CHECK_USER_COLLECT = "sid-A478E1B2-84B6-4884-875B-E6C53392BC4F";
/**
* 会签
*/
public static final String COUNTERSIGN = "sid-D3B3377E-9392-44D6-81D5-9DDDA91FB083";
/**
* 设计工程师科室经理审核
*/
public static final String MANAGER_APPROVAL = "sid-B253F229-2E92-4882-A054-EAA068069F0F";
/**
* 高级经理/技术官审核
*/
public static final String SENIOR_MANAGER_APPROVAL = "sid-31D9FF6F-D1BE-4B02-910C-5DB7A5D0A626";
/**
* 设计工程师工程师评估
*/
public static final String DESIGNER_ENGINEER_EVALUATION = "sid-45FC4ED6-DB83-49E0-A080-55192B7860EB";
/**
* 主排查人审核
*/
public static final String MAIN_CHECK_USER_APPROVAL = "sid-C9A2FE2E-8A8A-4846-8010-5AE4ECF14DFE";
/** 自动任务 */
public static final String AUTO_TASK_1 = "sid-95E41F78-FE01-4FEC-BF8B-EC11DFBA8824";
public static final String AUTO_TASK_2 = "autoTask_2";
public static final String AUTO_TASK_3 = "autoTask_3";
}
@@ -0,0 +1,126 @@
package com.jero.modules.activiti.process.ni.controller;
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.system.base.controller.JeroController;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.entity.TransferVO;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
import com.jero.modules.activiti.process.ni.service.IProcessNewStandardImportService;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ModelExcelVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.ArrayList;
/**
* 流程-新法规导入流程
*
* @author xxxxx
*/
@Slf4j
@Api(tags = "新法规导入流程")
@RestController
@RequestMapping("process/newStandardImport")
public class ProcessNewStandardImportController extends JeroController<ProcessNewStandardImport
, IProcessNewStandardImportService> {
@Resource
private IProcessNewStandardImportService sccService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private ActFlowCommonService actFlowCommonService;
@AutoLog(value = "新法规导入流程-发起流程")
@ApiOperation(value = "新法规导入流程-发起流程", notes = "新法规导入流程-发起流程")
@PostMapping(value = "/start")
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
sccService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "新法规导入流程-同意")
@ApiOperation(value = "新法规导入流程-同意", notes = "新法规导入流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
sccService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "新法规导入流程-驳回")
@ApiOperation(value = "新法规导入流程-驳回", notes = "新法规导入流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
sccService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "新法规导入流程-提交")
@ApiOperation(value = "新法规导入流程-提交", notes = "新法规导入流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
sccService.submit(processInfoVO);
return Result.OK();
}
/**
* 转办
*
*/
@AutoLog(value = "新法规导入流程-转办")
@ApiOperation(value="新法规导入流程-转办", notes="新法规导入流程-转办")
@PostMapping(value = "/transfer")
public Result<?> transfer(@RequestBody TransferVO transferVO) {
processHandleService.transfer(transferVO.getTaskId(), transferVO.getUserId());
return Result.OK();
}
/**
* 保存到待办
* @param taskId
*/
@AutoLog(value = "新法规导入流程-办理")
@ApiOperation(value="新法规导入流程-办理", notes="新法规导入流程-办理")
@GetMapping("/handle/{taskId}")
@Translation
public Result<?> handle(@PathVariable("taskId") String taskId) {
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.STANDARD_COMPLIANCE_CHECK);
if (draft != null) {
return Result.OK(draft);
}
return Result.OK(sccService.getHandleData(taskId));
}
/**
* 生成
* @param scc
*/
@AutoLog(value = "新法规导入流程-生成")
@ApiOperation(value="新法规导入流程-生成", notes="新法规导入流程-生成")
@PostMapping("/generate")
@Translation
public Result<?> generate(@RequestPart("scc") ProcessNewStandardImport scc,
@RequestPart("modelFile") MultipartFile modelFile,
@RequestPart(name = "splitFile", required = false) MultipartFile splitFile) throws Exception {
return Result.OK(sccService.generate(scc, modelFile, splitFile));
}
}
@@ -0,0 +1,85 @@
package com.jero.modules.activiti.process.ni.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
*
* @TableName process_standard_compliance_check
*/
@TableName(value ="process_standard_import")
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="process_standard_import对象", description="新法规导入流程-主表")
public class ProcessNewStandardImport implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**
* 标准ID
*/
@ApiModelProperty(value = "标准ID")
private String standardId;
/**
* 流程实例id
*/
@ApiModelProperty(value = "流程实例id")
private String processInstanceId;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**
* 0表示未删除,1表示删除
*/
@ApiModelProperty(value = "0表示未删除,1表示删除")
@TableLogic
private Integer delFlag;
/**所处阶段*/
@ApiModelProperty(value = "所处阶段")
private String eventPhase;
/**适用市场*/
@ApiModelProperty(value = "适用市场")
private String applicableMarket;
/**法规要求简要描述*/
@ApiModelProperty(value = "法规要求简要描述")
private String requireBriefDesc;
/**抄送人员*/
@ApiModelProperty(value = "抄送人员")
private String copyUser;
}
@@ -0,0 +1,11 @@
package com.jero.modules.activiti.process.ni.entity.vo;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
import lombok.Data;
@Data
public class ProcessNewStandardImportVO {
ProcessNewStandardImport standardInfo;
}
@@ -0,0 +1,28 @@
package com.jero.modules.activiti.process.ni.listener;
import com.jero.common.util.SpringContextUtils;
import com.jero.modules.activiti.process.ni.service.IProcessNewStandardImportService;
import com.jero.modules.activiti.process.standardinterpret.service.StandardInterpretFlowService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author liJiaRao
* @date 2023-06-18 15:43
*/
@Slf4j
@Component
public class ProcessNewStandardImportFlowListener implements TaskListener {
@Resource
private IProcessNewStandardImportService processNewStandardImportService;
@Override
public void notify(DelegateTask delegateTask) {
processNewStandardImportService.flowListener(delegateTask);
}
}
@@ -0,0 +1,19 @@
package com.jero.modules.activiti.process.ni.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
/**
* @author
* @description 针对表【process_standard_import】的数据库操作Mapper
* @createDate 2024-07-04 10:21:21
* @Entity
*/
public interface ProcessNewStandardImportMapper extends BaseMapper<ProcessNewStandardImport> {
}
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.process.ni.mapper.ProcessNewStandardImportMapper">
</mapper>
@@ -0,0 +1,27 @@
package com.jero.modules.activiti.process.ni.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
import org.activiti.engine.delegate.DelegateTask;
import org.springframework.web.multipart.MultipartFile;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service
* @createDate 2024-07-04 10:21:21
*/
public interface IProcessNewStandardImportService extends IService<ProcessNewStandardImport> {
void startProcess(ProcessInfoVO<ProcessNewStandardImport> processInfoVO);
void approveTask(ProcessInfoVO<ProcessNewStandardImport> processInfoVO, boolean b);
ProcessInfoVO<ProcessNewStandardImport> getHandleData(String taskId);
void submit(ProcessInfoVO<ProcessNewStandardImport> processInfoVO);
String generate(ProcessNewStandardImport scc, MultipartFile modelFile, MultipartFile splitFile) throws Exception;
void flowListener(DelegateTask delegateTask);
}
@@ -0,0 +1,199 @@
package com.jero.modules.activiti.process.ni.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
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.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
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.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
import com.jero.modules.activiti.process.ni.mapper.ProcessNewStandardImportMapper;
import com.jero.modules.activiti.process.ni.service.IProcessNewStandardImportService;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.sys.utils.UserUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service实现
* @createDate 2024-07-04 10:21:21
*/
@Service
public class ProcessNewStandardImportServiceImpl extends ServiceImpl<ProcessNewStandardImportMapper, ProcessNewStandardImport>
implements IProcessNewStandardImportService {
@Resource
private ActFlowCommonService actFlowCommonService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private TaskService taskService;
@Resource
private ProcessAllService processAllService;
@Resource
private RuntimeService runtimeService;
@Override
public void startProcess(ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 业务数据
ProcessNewStandardImport businessInfoDTO = processInfoVO.getBusinessInfoDTO();
// 当前用户Id
String userId = UserUtils.getUserId();
// 设置流程变量
Map<String, Object> actVariables = this.setVariables(businessInfoDTO);
// 删除草稿
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
// 启动流程
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
businessInfoDTO.setProcessInstanceId(processInstanceId);
processInfo.setProcessInstanceId(processInstanceId);
processInfo.setProcessDefinitionId(processDefinitionId);
processInfo.setProcessType(ProcessTypeEnum.NEW_STANDARD_IMPORT.getValue());
// 第一个节点业务数据处理 返回流程名称
this.startNodeBusProcess(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(userInfoMap));
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
// 保存第一个节点的草稿
actFlowCommonService.saveFirstNodeDraft(processInfoVO, userId);
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 自动完成第一个任务
actFlowCommonService.completeTask(taskId, userId);
// 根据流程实例id更新流程总表
actFlowCommonService.updateProcessAll(processInfo);
}
/**
* 第一个节点业务数据处理
* @param processInfoVO
*/
private void startNodeBusProcess(ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
ProcessNewStandardImport businessInfoDTO = processInfoVO.getBusinessInfoDTO();
save(businessInfoDTO);
}
private Map<String, Object> setVariables(ProcessNewStandardImport businessInfoDTO) {
// TODO 转List
return new HashMap<>();
}
private Map<String, Object> getUserMap(Map<String, Object> map) {
// TODO 转逗号拼接
return map;
}
@Override
public void approveTask(ProcessInfoVO<ProcessNewStandardImport> processInfoVO, boolean pass) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.getTaskId();
// 获取task
if (StrUtil.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取执行id
String executionId = task.getExecutionId();
// 获取当前节点的id
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
String xmlNodeId = record.getNodeId();
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// 获取当前流程
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
String processDefinitionId = processInstance.getProcessDefinitionId();
Map<String, Object> userMap = new HashMap<>();
Map<String, Object> flowUser;
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
String curUserId;
switch (xmlNodeId) {
}
// 转办修改流程变量逻辑
switch (xmlNodeId) {
}
runtimeService.setVariable(processInstanceId, PASS, pass);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
}
@Override
public void submit(ProcessInfoVO<ProcessNewStandardImport> processInfoVO) {
startProcess(processInfoVO);
}
@Override
public String generate(ProcessNewStandardImport scc, MultipartFile modelFile, MultipartFile splitFile) throws Exception {
// 新增流程主表数据
this.save(scc);
// 返回主键
return scc.getId();
}
@Override
public void flowListener(DelegateTask delegateTask) {
}
@Override
public ProcessInfoVO<ProcessNewStandardImport> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessNewStandardImport> result = new ProcessInfoVO<>();
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
String executionId = taskService.createTaskQuery().taskId(taskId).singleResult().getExecutionId();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
String xmlNodeId = record.getNodeId();
// 设置流程信息
switch (xmlNodeId) {
//TODO
}
return result;
}
}