package com.xjrsoft.module.liteflow.node; import cn.hutool.core.convert.Convert; import cn.hutool.db.Entity; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xjrsoft.common.enums.WorkflowApproveType; import com.xjrsoft.common.mybatis.SqlRunnerAdapter; 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.student.service.IStudentChangeRecordService; 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; /** * 学生转班流程结束后,修改学生班级信息 */ @Component("temporary_change_class_node") public class TemporaryChangeClassNode extends NodeComponent { @Autowired private IBaseStudentSchoolRollService studentSchoolRollService; @Autowired private IBaseClassService baseClassService; @Autowired private IWorkflowExecuteService workflowExecuteService; @Autowired private WorkflowRecordMapper workflowRecordMapper; @Autowired private IStudentChangeRecordService changeRecordService; @Override public void process() throws Exception { // 获取表单中数据编号 Map params = this.getFirstContextBean(); Object value = util.getFormDatKey(params, "id"); Long formId = Convert.toLong(value); 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 historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString()); if (historicProcessInstanceOptional.isEmpty()) { return; } HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get(); if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) { // 获取流程记录中的非正常结束 LambdaQueryWrapper 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 workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper); if (!workflowRecordList.isEmpty()) { return; } } //查询出数据 String tableName = "temporary_change_class"; Entity where = Entity.create(tableName); where.set("id", formId); Map changeClass = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where); long afterClassId = Long.parseLong(changeClass.get("after_class_id").toString()); long studentUserId = Long.parseLong(changeClass.get("student_user_id").toString()); BaseClass baseClass = baseClassService.getById(afterClassId); //修改学生班级 studentSchoolRollService.updateStudentClass(afterClassId, baseClass.getMajorSetId(), studentUserId); changeRecordService.insertDataByTemporaryChangeClass(formId); }); } }); } } }