浏览代码

自定义流程接口-流程待审批短信修改

wangliang 3 年之前
父节点
当前提交
3ac6675189

+ 16 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/listener/ProcessEventListener.java

@@ -22,6 +22,7 @@ import org.activiti.engine.HistoryService;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.delegate.event.ActivitiEvent;
 import org.activiti.engine.delegate.event.ActivitiEventListener;
+import org.activiti.engine.delegate.event.ActivitiProcessStartedEvent;
 import org.activiti.engine.history.HistoricVariableInstance;
 import org.activiti.engine.task.Task;
 import org.slf4j.Logger;
@@ -30,10 +31,7 @@ import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @Description: 全局监听
@@ -52,6 +50,18 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
             case PROCESS_STARTED:
                 // 流程启动
                 log.info("流程启动_PROCESS_STARTED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
+                BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
+                ActivitiProcessStartedEvent activitiProcessStartedEvent = (ActivitiProcessStartedEvent) event;
+                Map<String, Object> map = activitiProcessStartedEvent.getVariables();
+                Long objectId = (Long) map.get(SystemConstant.OBJECT_ID);
+                TFCustomTypeEnum flowType = (TFCustomTypeEnum) map.get(SystemConstant.FLOW_TYPE);
+                Object o = map.get(SystemConstant.FLOW_SUBMIT);
+                //发送命题待审批短信
+                if (Objects.nonNull(objectId) && Objects.nonNull(flowType) && Objects.nonNull(o)) {
+                    if (flowType == TFCustomTypeEnum.ELECTRON_FLOW && o instanceof ExamTask) {
+                        basicMessageService.sendNoticeTaskCreate((ExamTask) o);
+                    }
+                }
                 break;
             case PROCESS_COMPLETED:
                 // 流程结束
@@ -179,12 +189,12 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                 taskService = SpringContextHolder.getBean(TaskService.class);
                 sysUserService = SpringContextHolder.getBean(SysUserService.class);
                 examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
-                BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
+                basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
 
                 Task task = taskService.createTaskQuery().executionId(event.getExecutionId()).singleResult();
                 if (Objects.nonNull(task)) {
                     TFFlowLog tfFlowLog = (TFFlowLog) taskService.getVariable(task.getId(), SystemConstant.APPROVE_TF_FLOW_LOG);
-                    Object o = null;
+                    o = null;
                     if (Objects.nonNull(tfFlowLog.getObjectTable()) && Objects.equals(tfFlowLog.getObjectTable(), TFCustomTypeEnum.ELECTRON_FLOW.getTable())) {
                         o = examTaskService.getById(tfFlowLog.getObjectId());
                     }

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowJoin.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.ExamTaskFlowTypeEnum;
+import com.qmth.distributed.print.business.enums.FlowJoinTypeEnum;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -47,7 +47,7 @@ public class TFFlowJoin implements Serializable {
     private Integer level;
 
     @ApiModelProperty(value = "类型")
-    private ExamTaskFlowTypeEnum type;
+    private FlowJoinTypeEnum type;
 
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField("create_id")
@@ -62,7 +62,7 @@ public class TFFlowJoin implements Serializable {
 
     }
 
-    public TFFlowJoin(Long flowEntityId, Long objectId, Long flowId, Integer level, ExamTaskFlowTypeEnum type, Long userId, String objectTable) {
+    public TFFlowJoin(Long flowEntityId, Long objectId, Long flowId, Integer level, FlowJoinTypeEnum type, Long userId, String objectTable) {
         setId(SystemConstant.getDbUuid());
         this.flowEntityId = flowEntityId;
         this.objectId = objectId;
@@ -74,11 +74,11 @@ public class TFFlowJoin implements Serializable {
         this.createTime = System.currentTimeMillis();
     }
 
-    public ExamTaskFlowTypeEnum getType() {
+    public FlowJoinTypeEnum getType() {
         return type;
     }
 
-    public void setType(ExamTaskFlowTypeEnum type) {
+    public void setType(FlowJoinTypeEnum type) {
         this.type = type;
     }
 

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamTaskFlowTypeEnum.java → distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/FlowJoinTypeEnum.java

@@ -9,7 +9,7 @@ import java.util.Objects;
  * @Author: wangliang
  * @Date: 2021/12/21
  */
-public enum ExamTaskFlowTypeEnum {
+public enum FlowJoinTypeEnum {
 
     NEW("新建"),
 
@@ -17,7 +17,7 @@ public enum ExamTaskFlowTypeEnum {
 
     private String title;
 
-    private ExamTaskFlowTypeEnum(String title) {
+    private FlowJoinTypeEnum(String title) {
         this.title = title;
     }
 
@@ -32,7 +32,7 @@ public enum ExamTaskFlowTypeEnum {
      * @return
      */
     public static String convertToName(String title) {
-        for (ExamTaskFlowTypeEnum e : ExamTaskFlowTypeEnum.values()) {
+        for (FlowJoinTypeEnum e : FlowJoinTypeEnum.values()) {
             if (Objects.equals(title, e.getTitle())) {
                 return e.name();
             }

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -104,6 +104,9 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Override
     public ProcessInstance flowStart(Map<String, Object> map) {
         String id = (String) map.get(SystemConstant.ID);
+        Long objectId = (Long) map.get(SystemConstant.OBJECT_ID);
+        TFCustomTypeEnum flowType = (TFCustomTypeEnum) map.get(SystemConstant.FLOW_TYPE);
+        Object o = map.get(SystemConstant.FLOW_SUBMIT);
         Map flowProcessVarMap = (Map) map.get(SystemConstant.FLOW_PROCESS_VAR_MAP);
         Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
         Map<String, Object> varMap = new HashMap<>();
@@ -116,6 +119,10 @@ public class ActivitiServiceImpl implements ActivitiService {
                 varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().get(0));
             }
         }
+        varMap.computeIfAbsent(SystemConstant.OBJECT_ID, v -> objectId);
+        varMap.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> flowType);
+        varMap.computeIfAbsent(SystemConstant.FLOW_SUBMIT, v -> o);
+
         //启动流程
         ProcessInstance processInstance = varMap.size() > 0 ? runtimeService.startProcessInstanceByKey(id, varMap) : runtimeService.startProcessInstanceByKey(id);
         map.computeIfAbsent(SystemConstant.PROCESS_DEFINITION_ID, v -> processInstance.getProcessDefinitionId());

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -10,6 +10,7 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.FlowJoinTypeEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
@@ -331,6 +332,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     }
 
     @Override
+    @Transactional
     public boolean paperUpdate(ExamTaskDetail examTaskDetail) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
 
@@ -381,6 +383,8 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
             UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
             updateWrapper.lambda().set(ExamTask::getFlowId, flowId).eq(ExamTask::getId, examTaskDetail.getExamTaskId());
             examTaskService.update(updateWrapper);
+
+            map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.RESTART);
             tfFlowJoinService.saveOrUpdate(map);
             if (Objects.nonNull(flowId)) {
                 // 审核一级
@@ -394,6 +398,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
                 }
             }
         }
+        int i = 1 / 0;
         return true;
     }
 

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -270,8 +270,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> examTask.getId());
                 map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> TFCustomTypeEnum.ELECTRON_FLOW);
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
+                map.computeIfAbsent(SystemConstant.FLOW_SUBMIT, v -> examTask);
                 map = activitiService.customFlowStart(map);
                 flowId = SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID));
+                map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                 tfFlowJoinService.saveOrUpdate(map);
             }
         }
@@ -292,6 +294,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> TFCustomTypeEnum.ELECTRON_FLOW);
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
                     map = activitiService.customFlowStart(map);
+                    map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                     tfFlowJoinService.saveOrUpdate(map);
                 } else {
                     flowId = task.getFlowId();
@@ -423,8 +426,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> examTask.getId());
                 map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> TFCustomTypeEnum.ELECTRON_FLOW);
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
+                map.computeIfAbsent(SystemConstant.FLOW_SUBMIT, v -> examTask);
                 map = activitiService.customFlowStart(map);
                 examTask.setFlowId(SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID)));
+                map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                 tfFlowJoinService.saveOrUpdate(map);
             } else if (!examTask.getReview()) {
                 examTask.setStatus(ExamStatusEnum.STAGE);
@@ -725,9 +730,11 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> examTask.getId());
                 map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> TFCustomTypeEnum.ELECTRON_FLOW);
                 map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
+                map.computeIfAbsent(SystemConstant.FLOW_SUBMIT, v -> examTask);
 
                 map = activitiService.customFlowStart(map);
                 examTask.setFlowId(SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID)));
+                map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                 tfFlowJoinService.saveOrUpdate(map);
                 examTask.updateInfo(sysUser.getId());
                 this.updateById(examTask);
@@ -1517,6 +1524,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
                     map = activitiService.customFlowStart(map);
                     examTask.setFlowId(SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID)));
+                    map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                     tfFlowJoinService.saveOrUpdate(map);
                 }
             }
@@ -1658,6 +1666,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> examTask.getUserId());
                     map = activitiService.customFlowStart(map);
                     examTask.setFlowId(SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID)));
+                    map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.NEW);
                     tfFlowJoinService.saveOrUpdate(map);
                 }
             }

+ 12 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TFFlowJoinServiceImpl.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.entity.TFFlowJoin;
-import com.qmth.distributed.print.business.enums.ExamTaskFlowTypeEnum;
+import com.qmth.distributed.print.business.enums.FlowJoinTypeEnum;
 import com.qmth.distributed.print.business.enums.TFCustomTypeEnum;
 import com.qmth.distributed.print.business.mapper.TFFlowJoinMapper;
 import com.qmth.distributed.print.business.service.TFFlowJoinService;
@@ -52,6 +52,7 @@ public class TFFlowJoinServiceImpl extends ServiceImpl<TFFlowJoinMapper, TFFlowJ
         Long flowEntityId = SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ENTITY_ID));
         TFCustomTypeEnum flowType = (TFCustomTypeEnum) map.get(SystemConstant.FLOW_TYPE);
         Optional.ofNullable(flowType).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程类型不能为空"));
+        FlowJoinTypeEnum flowJoinTypeEnum = (FlowJoinTypeEnum) map.get(SystemConstant.FLOW_JOIN_TYPE);
 
         boolean lock = redisUtil.lock(SystemConstant.REDIS_LOCK_EXAM_TASK_FLOW_PREFIX + flowId, SystemConstant.REDIS_LOCK_EXAM_TASK_FLOW_TIME_OUT);
         if (!lock) {
@@ -62,13 +63,18 @@ public class TFFlowJoinServiceImpl extends ServiceImpl<TFFlowJoinMapper, TFFlowJ
             tfFlowJoinQueryWrapper.lambda().eq(TFFlowJoin::getObjectId, objectId);
             List<TFFlowJoin> tfFlowJoinList = this.list(tfFlowJoinQueryWrapper);
             if (Objects.isNull(tfFlowJoinList) || tfFlowJoinList.size() == 0) {
-                TFFlowJoin tfFlowJoin = new TFFlowJoin(flowEntityId, objectId, flowId, 1, ExamTaskFlowTypeEnum.NEW, sysUser.getId(), flowType.getTable());
+                TFFlowJoin tfFlowJoin = new TFFlowJoin(flowEntityId, objectId, flowId, 1, flowJoinTypeEnum, sysUser.getId(), flowType.getTable());
                 this.save(tfFlowJoin);
             } else if (Objects.nonNull(tfFlowJoinList) && tfFlowJoinList.size() == 1) {
-                TFFlowJoin tfFlowJoin = tfFlowJoinList.get(0);
-                Integer level = tfFlowJoin.getLevel();
-                TFFlowJoin tfFlowJoinSub = new TFFlowJoin(flowEntityId, objectId, flowId, ++level, ExamTaskFlowTypeEnum.NEW, sysUser.getId(), flowType.getTable());
-                this.save(tfFlowJoinSub);
+                if (flowJoinTypeEnum == FlowJoinTypeEnum.NEW) {//子流程
+                    TFFlowJoin tfFlowJoin = tfFlowJoinList.get(0);
+                    Integer level = tfFlowJoin.getLevel();
+                    TFFlowJoin tfFlowJoinSub = new TFFlowJoin(flowEntityId, objectId, flowId, ++level, flowJoinTypeEnum, sysUser.getId(), flowType.getTable());
+                    this.save(tfFlowJoinSub);
+                } else {//否则是重启流程
+                    TFFlowJoin tfFlowJoin = new TFFlowJoin(flowEntityId, objectId, flowId, 1, flowJoinTypeEnum, sysUser.getId(), flowType.getTable());
+                    this.save(tfFlowJoin);
+                }
             }
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);

+ 2 - 11
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -183,11 +183,7 @@ public class ExamTaskController {
     @ApiOperation(value = "命题任务管理-新建命题任务")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     public Result save(@RequestBody ExamTask examTask) {
-        ExamTask task = examTaskService.saveExamTaskNew(examTask);
-        //发送短信
-        if (task.getId() != null) {
-            basicMessageService.sendNoticeTaskCreate(task);
-        }
+        examTaskService.saveExamTaskNew(examTask);
         return ResultUtil.ok(true);
     }
 
@@ -225,12 +221,7 @@ public class ExamTaskController {
     @ApiOperation(value = "命题任务管理-批量保存命题任务")
     @RequestMapping(value = "/save_batch", method = RequestMethod.POST)
     public Result saveBatch(@RequestBody ExamTask task) {
-        List<ExamTask> examTasks = examTaskService.saveBatch(task);
-        if (examTasks != null && examTasks.size() > 0) {
-            // 发送短信
-            ExamTask[] tasks = examTasks.toArray(new ExamTask[examTasks.size()]);
-            basicMessageService.sendNoticeTaskCreate(tasks);
-        }
+        examTaskService.saveBatch(task);
         return ResultUtil.ok(true);
     }
 

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -207,6 +207,9 @@ public class SystemConstant {
     public static final String GDYKDX_FLOW_KEY = "GdykdxPaperApprove";//广药流程key
     public static final String JXZYY_FLOW_KEY = "JxzyyPaperApprove";//江西流程key
     public static final String APPROVE_ID = "approveId";//审批id
+    public static final String FLOW_SUBMIT = "flowSubmit";//命题提交申请
+    public static final String EXAM_TASK = "examTask";//命题提交申请
+    public static final String FLOW_JOIN_TYPE = "flowJoinType";//流程关联类型
     public static final String FLOW_TYPE = "flowType";//流程类型
     public static final String FLOW_ID = "flowId";//流程id
     public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id