Forráskód Böngészése

流程规则引擎调整

dzx 1 éve
szülő
commit
3f4c7dbd70

+ 61 - 7
src/main/java/com/xjrsoft/module/liteflow/node/StudentChangeClassNode.java

@@ -1,16 +1,28 @@
 package com.xjrsoft.module.liteflow.node;
 
 import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xjrsoft.common.enums.WorkflowApproveType;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.student.entity.StudentChangeClass;
 import com.xjrsoft.module.student.mapper.StudentChangeClassMapper;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.xjrsoft.module.workflow.entity.WorkflowRecord;
+import com.xjrsoft.module.workflow.mapper.WorkflowRecordMapper;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import com.yomahub.liteflow.core.NodeComponent;
+import org.apache.commons.lang.StringUtils;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 学生转班流程结束后,修改学生班级信息
@@ -23,19 +35,61 @@ public class StudentChangeClassNode extends NodeComponent {
     private IBaseStudentSchoolRollService studentSchoolRollService;
     @Autowired
     private IBaseClassService baseClassService;
+
+    @Autowired
+    private IWorkflowExecuteService workflowExecuteService;
+
+    @Autowired
+    private WorkflowRecordMapper workflowRecordMapper;
+
     @Override
     public void process() throws Exception {
         // 获取表单中数据编号
         Map<String, Object> params = this.getFirstContextBean();
-        Object value = util.getFormDatKey(params,"id");
+        Object value = util.getFormDatKey(params, "id");
         Long formId = Convert.toLong(value);
-        if (formId != null) {
-            //查询出数据
-            StudentChangeClass changeClass = studentChangeClassMapper.selectById(formId);
+        Object processInstanceId = params.get("processInstanceId");
+        if (processInstanceId == null) {
+            return;
+        }
+        String processInstanceIdStr = Convert.toStr(processInstanceId);
+        if (formId != null && StringUtils.isNotEmpty(processInstanceIdStr)) {
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                @Override
+                public void afterCommit() {
+                    CompletableFuture.runAsync(() -> {
+                        Optional<HistoricProcessInstance> historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString());
+
+                        if (historicProcessInstanceOptional.isEmpty()) {
+                            return;
+                        }
+                        HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get();
+                        if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) {
+                            // 获取流程记录中的非正常结束
+                            LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                            workflowRecordLambdaQueryWrapper
+                                    .and(wq -> wq.eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.DISAGREE.getCode())
+                                            .or()
+                                            .eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.WITHDRAW.getCode())
+                                    )
+                                    .eq(WorkflowRecord::getProcessId, processInstanceId)
+                            ;
+                            List<WorkflowRecord> workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper);
+
+                            if (!workflowRecordList.isEmpty()) {
+                                return;
+                            }
+                        }
+
+                        //查询出数据
+                        StudentChangeClass changeClass = studentChangeClassMapper.selectById(formId);
 
-            BaseClass baseClass =baseClassService.getById(changeClass.getAfterClassId());
-            //修改学生班级
-            studentSchoolRollService.updateStudentClass(changeClass.getAfterClassId(),baseClass.getMajorSetId(), changeClass.getStudentUserId());
+                        BaseClass baseClass =baseClassService.getById(changeClass.getAfterClassId());
+                        //修改学生班级
+                        studentSchoolRollService.updateStudentClass(changeClass.getAfterClassId(),baseClass.getMajorSetId(), changeClass.getStudentUserId());
+                    });
+                }
+            });
         }
     }
 }

+ 66 - 13
src/main/java/com/xjrsoft/module/liteflow/node/StudentDropOutNode.java

@@ -1,18 +1,30 @@
 package com.xjrsoft.module.liteflow.node;
 
 import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.WorkflowApproveType;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.StudentDropOut;
 import com.xjrsoft.module.student.mapper.StudentDropOutMapper;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.xjrsoft.module.workflow.entity.WorkflowRecord;
+import com.xjrsoft.module.workflow.mapper.WorkflowRecordMapper;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import com.yomahub.liteflow.core.NodeComponent;
+import org.apache.commons.lang.StringUtils;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 学生退学
@@ -24,24 +36,65 @@ public class StudentDropOutNode extends NodeComponent {
     @Autowired
     private IBaseStudentSchoolRollService studentSchoolRollService;
 
+    @Autowired
+    private IWorkflowExecuteService workflowExecuteService;
+
+    @Autowired
+    private WorkflowRecordMapper workflowRecordMapper;
+
     @Override
     public void process() throws Exception {
         // 获取表单中数据编号
         Map<String, Object> params = this.getFirstContextBean();
-        Object value = util.getFormDatKey(params,"id");
+        Object value = util.getFormDatKey(params, "id");
         Long formId = Convert.toLong(value);
-        if (formId != null) {
-            //查询出数据
-            StudentDropOut studentDropOut = studentDropOutMapper.selectById(formId);
-            //跟新学籍信息
-            BaseStudentSchoolRoll schoolRoll = studentSchoolRollService.getOne(
-                new QueryWrapper<BaseStudentSchoolRoll>().lambda()
-                .eq(BaseStudentSchoolRoll::getClassId, studentDropOut.getClassId())
-                .eq(BaseStudentSchoolRoll::getUserId, studentDropOut.getStudentUserId())
-                .eq(BaseStudentSchoolRoll::getDeleteMark, DeleteMark.NODELETE.getCode())
-            );
-            schoolRoll.setArchivesStatus(ArchivesStatusEnum.FB2904.getCode());
-            studentSchoolRollService.updateById(schoolRoll);
+        Object processInstanceId = params.get("processInstanceId");
+        if (processInstanceId == null) {
+            return;
+        }
+        String processInstanceIdStr = Convert.toStr(processInstanceId);
+        if (formId != null && StringUtils.isNotEmpty(processInstanceIdStr)) {
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                @Override
+                public void afterCommit() {
+                    CompletableFuture.runAsync(() -> {
+                        Optional<HistoricProcessInstance> historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString());
+
+                        if (historicProcessInstanceOptional.isEmpty()) {
+                            return;
+                        }
+                        HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get();
+                        if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) {
+                            // 获取流程记录中的非正常结束
+                            LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                            workflowRecordLambdaQueryWrapper
+                                    .and(wq -> wq.eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.DISAGREE.getCode())
+                                            .or()
+                                            .eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.WITHDRAW.getCode())
+                                    )
+                                    .eq(WorkflowRecord::getProcessId, processInstanceId)
+                            ;
+                            List<WorkflowRecord> workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper);
+
+                            if (!workflowRecordList.isEmpty()) {
+                                return;
+                            }
+                        }
+
+                        //查询出数据
+                        StudentDropOut studentDropOut = studentDropOutMapper.selectById(formId);
+                        //跟新学籍信息
+                        BaseStudentSchoolRoll schoolRoll = studentSchoolRollService.getOne(
+                                new QueryWrapper<BaseStudentSchoolRoll>().lambda()
+                                        .eq(BaseStudentSchoolRoll::getClassId, studentDropOut.getClassId())
+                                        .eq(BaseStudentSchoolRoll::getUserId, studentDropOut.getStudentUserId())
+                                        .eq(BaseStudentSchoolRoll::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        );
+                        schoolRoll.setArchivesStatus(ArchivesStatusEnum.FB2904.getCode());
+                        studentSchoolRollService.updateById(schoolRoll);
+                    });
+                }
+            });
         }
     }
 }

+ 58 - 5
src/main/java/com/xjrsoft/module/liteflow/node/WfCourseAdjustNode.java

@@ -1,14 +1,26 @@
 package com.xjrsoft.module.liteflow.node;
 
 import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xjrsoft.common.enums.WorkflowApproveType;
 import com.xjrsoft.module.courseTable.service.ICourseTableService;
 import com.xjrsoft.module.schedule.entity.WfCourseAdjust;
 import com.xjrsoft.module.schedule.service.IWfCourseAdjustService;
+import com.xjrsoft.module.workflow.entity.WorkflowRecord;
+import com.xjrsoft.module.workflow.mapper.WorkflowRecordMapper;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import com.yomahub.liteflow.core.NodeComponent;
+import org.apache.commons.lang.StringUtils;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 调课规则
@@ -21,15 +33,56 @@ public class WfCourseAdjustNode extends NodeComponent {
     @Autowired
     private IWfCourseAdjustService wfCourseAdjustService;
 
+    @Autowired
+    private IWorkflowExecuteService workflowExecuteService;
+
+    @Autowired
+    private WorkflowRecordMapper workflowRecordMapper;
+
     @Override
     public void process() throws Exception {
+        // 获取表单中数据编号
         Map<String, Object> params = this.getFirstContextBean();
-        Object value = util.getFormDatKey(params,"id");
+        Object value = util.getFormDatKey(params, "id");
         Long formId = Convert.toLong(value);
-        if (formId != null) {
-            // 数据处理
-            WfCourseAdjust courseAdjust = wfCourseAdjustService.getById(formId);
-            courseTableService.adjustCourse(courseAdjust);
+        Object processInstanceId = params.get("processInstanceId");
+        if (processInstanceId == null) {
+            return;
+        }
+        String processInstanceIdStr = Convert.toStr(processInstanceId);
+        if (formId != null && StringUtils.isNotEmpty(processInstanceIdStr)) {
+            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+                @Override
+                public void afterCommit() {
+                    CompletableFuture.runAsync(() -> {
+                        Optional<HistoricProcessInstance> historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString());
+
+                        if (historicProcessInstanceOptional.isEmpty()) {
+                            return;
+                        }
+                        HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get();
+                        if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) {
+                            // 获取流程记录中的非正常结束
+                            LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                            workflowRecordLambdaQueryWrapper
+                                    .and(wq -> wq.eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.DISAGREE.getCode())
+                                            .or()
+                                            .eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.WITHDRAW.getCode())
+                                    )
+                                    .eq(WorkflowRecord::getProcessId, processInstanceId)
+                            ;
+                            List<WorkflowRecord> workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper);
+
+                            if (!workflowRecordList.isEmpty()) {
+                                return;
+                            }
+                        }
+
+                        WfCourseAdjust courseAdjust = wfCourseAdjustService.getById(formId);
+                        courseTableService.adjustCourse(courseAdjust);
+                    });
+                }
+            });
         }
     }
 }