Ver código fonte

流程流转信息接口

大数据与最优化研究所 1 ano atrás
pai
commit
f371ce6574

+ 0 - 1
src/main/java/com/xjrsoft/module/personnel/controller/BasePersonnelLabourCapitalController.java

@@ -249,7 +249,6 @@ public class BasePersonnelLabourCapitalController {
 
     @GetMapping("/export")
     @ApiOperation(value = "导出")
-
     public ResponseEntity<byte[]> exportData(@Valid WeeklyDutySchedulePageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
         List<BasePersonnelLabourCapital> list = basePersonnelLabourCapitalService.list();
         ByteArrayOutputStream bot = new ByteArrayOutputStream();

+ 1 - 1
src/main/java/com/xjrsoft/module/personnel/dto/LaborManagementPageDto.java

@@ -22,7 +22,7 @@ public class LaborManagementPageDto extends PageInput {
     public String name;
 
     @ApiModelProperty("性别代号")
-    public int gender;
+    public String gender;
 
     @ApiModelProperty("入职时间")
     public String startWorkTime;

+ 1 - 1
src/main/java/com/xjrsoft/module/workflow/controller/WorkflowApproveRecordController.java

@@ -37,7 +37,7 @@ public class WorkflowApproveRecordController {
     private IWorkflowApproveRecordService approveRecordService;
 
     @GetMapping("/approve-record-list")
-    @ApiOperation(value = "重构后发起流程")
+    @ApiOperation(value = "打印用流转记录")
     public RT<List<WorkflowApproveRecordListVo>> approveRecordList(@Valid ApproveRecordListDto dto) {
         MPJLambdaWrapper<WorkflowApproveRecord> workflowApproveRecordMPJLambdaWrapper = MPJWrappers.<WorkflowApproveRecord>lambdaJoin()
                 .disableSubLogicDel()

+ 11 - 4
src/main/java/com/xjrsoft/module/workflow/controller/WorkflowExecuteController.java

@@ -327,10 +327,17 @@ public class WorkflowExecuteController {
         return RT.ok(pageOutput);
     }
 
-    @GetMapping("/approve-record-list")
-    @ApiOperation(value = "自定义流程记录列表")
-    public RT<List<UserDefinedProcessRecordListVo>> approveRecordList(@Valid ApproveRecordListDto dto) {
-        List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = workflowExecuteService.listApproveRecord(dto);
+    @GetMapping("/print-approve-record-list")
+    @ApiOperation(value = "打印用自定义流程记录列表")
+    public RT<List<UserDefinedProcessRecordListVo>> printApproveRecordList(@Valid ApproveRecordListDto dto) {
+        List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = workflowExecuteService.listPrintApproveRecord(dto);
+        return RT.ok(userDefinedProcessRecordListVos);
+    }
+
+    @GetMapping("/audit-approve-record-list")
+    @ApiOperation(value = "审核用自定义流程记录列表")
+    public RT<List<UserDefinedProcessRecordListVo>> auditApproveRecordList(@Valid ApproveRecordListDto dto) {
+        List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = workflowExecuteService.listAuditApproveRecord(dto);
         return RT.ok(userDefinedProcessRecordListVos);
     }
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/workflow/entity/XjrWorkflowOperateRecord.java

@@ -88,5 +88,11 @@ public class XjrWorkflowOperateRecord implements Serializable {
     @TableField(fill = FieldFill.INSERT)
     private Long createUserId;
 
+    /**
+     * 该记录的应用场景
+     */
+    @ApiModelProperty("该记录的应用场景")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer usageScenario;
 
 }

+ 44 - 0
src/main/java/com/xjrsoft/module/workflow/listener/ExecutionDelegate.java

@@ -72,6 +72,8 @@ public class ExecutionDelegate implements ExecutionListener {
 
     private final IXjrLiteflowChainService liteflowChainService;
 
+    private final IXjrWorkflowOperateRecordService xjrWorkflowOperateRecordService;
+
     private final FlowExecutor flowExecutor;
 
 //    private final IWorkflowSchemaService workflowSchemaService;
@@ -559,6 +561,20 @@ public class ExecutionDelegate implements ExecutionListener {
 
                 workflowRecordService.save(record);
 
+                //新增流程结束流程记录
+                XjrWorkflowOperateRecord operateRecord = new XjrWorkflowOperateRecord();
+                operateRecord.setNodeId(eventSource.getId());
+                operateRecord.setNodeName(WorkflowConstant.END_NODE_TYPE_NAME);
+                operateRecord.setNodeType(WorkflowConstant.END_NODE_TYPE_NAME);
+                operateRecord.setProcessId(execution.getProcessInstanceId());
+                operateRecord.setSchemaId(schemaId);
+                operateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
+                operateRecord.setRecordTime(LocalDateTime.now().minusSeconds(-1));
+                operateRecord.setUsageScenario(2);
+                operateRecord.setOperateInfo("流程结束");
+
+                xjrWorkflowOperateRecordService.save(operateRecord);
+
                 //找到父级
                 ExecutionEntity superExecution = ((ExecutionEntity) execution).getSuperExecution();
 
@@ -1411,6 +1427,20 @@ public class ExecutionDelegate implements ExecutionListener {
         startRecord.setMessage(message);
 
         workflowRecordService.save(startRecord);
+
+        //新增流程发起流程记录
+        XjrWorkflowOperateRecord startOperateRecord = new XjrWorkflowOperateRecord();
+        startOperateRecord.setNodeId(callActivityConfig.getId());
+        startOperateRecord.setNodeName(callActivityConfig.getName());
+        startOperateRecord.setNodeType(WorkflowConstant.CALL_ACTIVITY_TYPE_NAME);
+        startOperateRecord.setProcessId(processInstanceId);
+        startOperateRecord.setSchemaId(workflowSchema.getId());
+        startOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
+        startOperateRecord.setRecordTime(LocalDateTime.now());
+        startOperateRecord.setUsageScenario(2);
+        startOperateRecord.setOperateInfo(message);
+
+        xjrWorkflowOperateRecordService.save(startOperateRecord);
     }
 
     /**
@@ -1435,6 +1465,20 @@ public class ExecutionDelegate implements ExecutionListener {
         startRecord.setMessage(message);
 
         workflowRecordService.save(startRecord);
+
+        //新增流程发起流程记录
+        XjrWorkflowOperateRecord startOperateRecord = new XjrWorkflowOperateRecord();
+        startOperateRecord.setNodeId(startNodeConfig.getId());
+        startOperateRecord.setNodeName(startNodeConfig.getName());
+        startOperateRecord.setNodeType(WorkflowConstant.START_EVENT_TYPE_NAME);
+        startOperateRecord.setProcessId(processInstanceId);
+        startOperateRecord.setSchemaId(workflowSchema.getId());
+        startOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
+        startOperateRecord.setRecordTime(LocalDateTime.now());
+        startOperateRecord.setUsageScenario(2);
+        startOperateRecord.setOperateInfo(message);
+
+        xjrWorkflowOperateRecordService.save(startOperateRecord);
     }
 
 }

+ 3 - 1
src/main/java/com/xjrsoft/module/workflow/service/IWorkflowExecuteService.java

@@ -383,6 +383,8 @@ public interface IWorkflowExecuteService {
 
     Boolean dealTimeoutTask(Integer handleType,String taskId);
 
-    List<UserDefinedProcessRecordListVo> listApproveRecord(ApproveRecordListDto dto);
+    List<UserDefinedProcessRecordListVo> listPrintApproveRecord(ApproveRecordListDto dto);
+
+    List<UserDefinedProcessRecordListVo> listAuditApproveRecord(ApproveRecordListDto dto);
 
 }

+ 70 - 6
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -1156,7 +1156,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         //获取到流程定义
         ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(workflowSchema.getDeploymentId()).singleResult();
 
-        //流程参数  发布时  存到变量中
+        //流程参数  发布时  存到变量中-
         List<ProcessParamConfig> processParamConfigs = workflowSchemaConfig.getProcessConfig().getProcessParamConfigs();
 
         long count = historyService.createHistoricProcessInstanceQuery().count();
@@ -2027,6 +2027,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                     xjrWorkflowOperateRecord.setSchemaId(schemaId);
                     xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
                     xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now().minusSeconds(+1));//时间设置提前1秒钟,好排序
+                    xjrWorkflowOperateRecord.setUsageScenario(1);
 
 //                    record.setMessage("【审批人:" + user.getName() + "】 将 【任务:" + task.getName() + "】 驳回到 【任务:" + rejectUserTaskConfig.getName() + "】");
                     String message = "审批人:" + user.getName() + ", 审批结果:驳回, 审批内容:驳回";
@@ -2070,6 +2071,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                 xjrWorkflowOperateRecord.setSchemaId(schemaId);
                 xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
                 xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
+                xjrWorkflowOperateRecord.setUsageScenario(1);
 
                 String message = "审批人:" + user.getName() + ", 审批结果:结束, 审批内容:结束流程";
                 xjrWorkflowOperateRecord.setOperateInfo(message);
@@ -2573,6 +2575,26 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                 records.setMessage("【" + approveName + "】" + "准备审批");
                 workflowRecordMapper.updateById(records);
             }
+
+            //查询到对应task的流转信息,将message重新设值,将设置的审批人加入到里面,如果没有直接新增一条,所以需要先查询再修改
+            QueryWrapper<XjrWorkflowOperateRecord> xjrWorkflowOperateRecordQueryWrapper = new QueryWrapper<XjrWorkflowOperateRecord>()
+                    .eq("node_id", approveUserDto.getTaskId())
+                    .like("message", "准备审批");
+            XjrWorkflowOperateRecord xjrWorkflowOperateRecord = xjrWorkflowOperateRecordMapper.selectOne(xjrWorkflowOperateRecordQueryWrapper);
+            if (ObjectUtil.isEmpty(xjrWorkflowOperateRecord)) {
+                Object schemaId = taskService.getVariable(approveUserDto.getTaskId(), WorkflowConstant.PROCESS_SCHEMA_ID_KEY);
+                //获取任务信息
+                Task task = taskService.createTaskQuery().taskId(approveUserDto.getTaskId()).singleResult();
+                //新增流程发起流程记录
+                XjrWorkflowOperateRecord operateRecord = new XjrWorkflowOperateRecord();
+                operateRecord.setRecordTime(LocalDateTime.now());
+                operateRecord.setUsageScenario(2);
+                addCustomProcessRecord(task, Convert.toLong(schemaId), "【" + approveName + "】" + "准备审批", operateRecord);
+            } else {
+                //修改原本的流转记录
+                xjrWorkflowOperateRecord.setOperateInfo("【" + approveName + "】" + "准备审批");
+                xjrWorkflowOperateRecordMapper.updateById(xjrWorkflowOperateRecord);
+            }
         }
 
         //查询下一个节点审批人 委托 数据  将被委托人加入到 审批人数据中
@@ -4332,7 +4354,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
      * @param processInstanceId
      * @return
      */
-    private List<ProcessRecordListVo> getCustomProcessRecordListVos(String processInstanceId, int onlySelf) {
+    private List<ProcessRecordListVo> getCustomProcessRecordListVos(String processInstanceId, int onlySelf, Integer usageScenario) {
 
         User user = StpUtil.getTokenSession().get(GlobalConstant.LOGIN_USER_INFO_KEY, new User());
         List<Long> roleIds = StpUtil.getTokenSession().get(GlobalConstant.LOGIN_USER_ROLE_ID_KEY, new ArrayList<>());
@@ -4363,7 +4385,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                         .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId);
             }
         } else {
-            workflowOperateRecordLambdaQueryWrapper.eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
+            workflowOperateRecordLambdaQueryWrapper
+                    .eq(XjrWorkflowOperateRecord::getProcessId, processInstanceId)
+                    .eq(XjrWorkflowOperateRecord::getUsageScenario, usageScenario)
                     .orderByAsc(XjrWorkflowOperateRecord::getRecordTime);
         }
 
@@ -4514,6 +4538,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
 
             xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
 
+
             taskService.complete(task.getId());
             List<Task> list = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();
             String allOpinions = StringPool.EMPTY;
@@ -4865,8 +4890,8 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         record.setProcessId(task.getProcessInstanceId());
         record.setSchemaId(schemaId);
         record.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
-
         record.setOperateInfo(message);
+        record.setUsageScenario(1);
 
         xjrWorkflowOperateRecordService.save(record);
     }
@@ -4893,6 +4918,19 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         startRecord.setMessage("【" + user.getName() + "】 创建流程");
 
         workflowRecordMapper.insert(startRecord);
+
+        XjrWorkflowOperateRecord xjrWorkflowOperateRecord = new XjrWorkflowOperateRecord();
+        xjrWorkflowOperateRecord.setNodeId(startNodeConfig.getId());
+        xjrWorkflowOperateRecord.setNodeName(startNodeConfig.getName());
+        xjrWorkflowOperateRecord.setNodeType(WorkflowConstant.START_EVENT_TYPE_NAME);
+        xjrWorkflowOperateRecord.setProcessId(processInstance.getId());
+        xjrWorkflowOperateRecord.setSchemaId(workflowSchema.getId());
+        xjrWorkflowOperateRecord.setNodeMultiType(WorkflowMultiInstanceType.NONE.getCode());
+        xjrWorkflowOperateRecord.setRecordTime(LocalDateTime.now());
+        xjrWorkflowOperateRecord.setUsageScenario(2);
+        xjrWorkflowOperateRecord.setOperateInfo("【" + user.getName() + "】 创建流程");
+
+        xjrWorkflowOperateRecordMapper.insert(xjrWorkflowOperateRecord);
     }
 
     /**
@@ -5395,8 +5433,34 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
     }
 
     @Override
-    public List<UserDefinedProcessRecordListVo> listApproveRecord(ApproveRecordListDto dto) {
-        List<ProcessRecordListVo> processRecordListVos = this.getCustomProcessRecordListVos(dto.getProcessId(), 0);
+    public List<UserDefinedProcessRecordListVo> listPrintApproveRecord(ApproveRecordListDto dto) {
+        List<ProcessRecordListVo> processRecordListVos = this.getCustomProcessRecordListVos(dto.getProcessId(), 0, 2);
+
+        List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = new ArrayList<>();
+        for(ProcessRecordListVo p : processRecordListVos){
+            String comment = p.getComment();
+            String[] commentArr = comment.split(",");
+            String[] approveUserNameArr = commentArr[0].split(":");
+            String[] approveResultArr = commentArr[1].split(":");
+            String[] approveCommentArr = commentArr[2].split(":");
+            userDefinedProcessRecordListVos.add(new UserDefinedProcessRecordListVo(){{
+                setNodeType(p.getNodeType());
+                setNodeName(p.getNodeName());
+                setComment(p.getComment());
+                setStartTime(p.getStartTime());
+                setCirculateMessage(p.getCirculateMessage());
+                setApproveUserName(approveUserNameArr[1]);
+                setApproveResult(approveResultArr[1]);
+                setApproveComment(approveCommentArr[1]);
+            }});
+        }
+        return userDefinedProcessRecordListVos;
+    }
+
+    @Override
+    public List<UserDefinedProcessRecordListVo> listAuditApproveRecord(ApproveRecordListDto dto) {
+        List<ProcessRecordListVo> processRecordListVos = this.getCustomProcessRecordListVos(dto.getProcessId(), 0, 1);
+
         List<UserDefinedProcessRecordListVo> userDefinedProcessRecordListVos = new ArrayList<>();
         for(ProcessRecordListVo p : processRecordListVos){
             String comment = p.getComment();

+ 7 - 32
src/main/resources/mapper/personnel/LaborManagementMapper.xml

@@ -16,12 +16,7 @@
         FROM xjr_user t
         inner JOIN base_teacher t2 ON t2.user_id = t.id
         LEFT JOIN xjr_dictionary_detail t1
-        ON t1.item_id = (SELECT id FROM xjr_dictionary_item WHERE code = 'gender') AND
-        t1.code = (CASE t.gender
-        WHEN 1 THEN 'SB10001'
-        WHEN 2 THEN 'SB10002'
-        WHEN 3 THEN 'SB10003'
-        ELSE t.gender END)
+        ON t1.code = t.gender
         LEFT JOIN xjr_dictionary_detail t3
         ON t3.item_id = (SELECT id FROM xjr_dictionary_item WHERE code = 'job_state') AND
         t3.value = t2.job_state
@@ -31,28 +26,14 @@
         LEFT JOIN xjr_user_post_relation t8 ON t8.user_id = t.id
         LEFT JOIN xjr_post t9 ON t9.id = t8.post_id
         WHERE t.delete_mark = 0
-        <if test="dto.userName != null">
+        <if test="dto.userName != null and dto.userName != ''">
             AND t.user_name = #{dto.userName}
         </if>
-        <if test="dto.name != null">
-            AND t.name = #{dto.name}
+        <if test="dto.name != null and dto.name != ''">
+            AND t.name like concat('%', #{dto.name}, '%')
         </if>
-        <if test="dto.gender != null">
-            AND t1.code =
-            <choose>
-                <when test="dto.gender == 1">
-                    'SB10001'
-                </when>
-                <when test="dto.gender == 2">
-                    'SB10002'
-                </when>
-                <when test="dto.gender == 3">
-                    'SB10003'
-                </when>
-                <otherwise>
-                    #{dto.gender}
-                </otherwise>
-            </choose>
+        <if test="dto.gender != null and dto.gender != ''">
+            AND t1.code = #{dto.gender}
         </if>
         <if test="dto.startWorkTime != null and dto.endWorkTime != null">
             AND t2.start_work_time BETWEEN #{dto.startWorkTime} AND #{dto.endWorkTime}
@@ -67,7 +48,6 @@
             and t4.job = #{dto.job}
         </if>
         ORDER BY t.id;
-
     </select>
 
     <select id="listLaborManagementPageVo" resultType="com.xjrsoft.module.personnel.vo.LaborManagementPageVo">
@@ -83,12 +63,7 @@
         FROM xjr_user t
                  inner JOIN base_teacher t2 ON t2.user_id = t.id
                  LEFT JOIN xjr_dictionary_detail t1
-                           ON t1.item_id = (SELECT id FROM xjr_dictionary_item WHERE code = 'gender') AND
-                              t1.code = (CASE t.gender
-                                             WHEN 1 THEN 'SB10001'
-                                             WHEN 2 THEN 'SB10002'
-                                             WHEN 3 THEN 'SB10003'
-                                             ELSE t.gender END)
+                           ON t1.code = t.gender
                  LEFT JOIN xjr_dictionary_detail t3
                            ON t3.item_id = (SELECT id FROM xjr_dictionary_item WHERE code = 'job_state') AND
                               t3.value = t2.job_state