TemporaryChangeClassNode.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.xjrsoft.module.liteflow.node;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.db.Entity;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.xjrsoft.common.enums.WorkflowApproveType;
  6. import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
  7. import com.xjrsoft.module.base.entity.BaseClass;
  8. import com.xjrsoft.module.base.service.IBaseClassService;
  9. import com.xjrsoft.module.student.entity.StudentChangeClass;
  10. import com.xjrsoft.module.student.mapper.StudentChangeClassMapper;
  11. import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
  12. import com.xjrsoft.module.student.service.IStudentChangeRecordService;
  13. import com.xjrsoft.module.workflow.entity.WorkflowRecord;
  14. import com.xjrsoft.module.workflow.mapper.WorkflowRecordMapper;
  15. import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
  16. import com.yomahub.liteflow.core.NodeComponent;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.camunda.bpm.engine.history.HistoricProcessInstance;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Component;
  21. import org.springframework.transaction.support.TransactionSynchronization;
  22. import org.springframework.transaction.support.TransactionSynchronizationManager;
  23. import java.util.List;
  24. import java.util.Map;
  25. import java.util.Optional;
  26. import java.util.concurrent.CompletableFuture;
  27. /**
  28. * 学生转班流程结束后,修改学生班级信息
  29. */
  30. @Component("temporary_change_class_node")
  31. public class TemporaryChangeClassNode extends NodeComponent {
  32. @Autowired
  33. private IBaseStudentSchoolRollService studentSchoolRollService;
  34. @Autowired
  35. private IBaseClassService baseClassService;
  36. @Autowired
  37. private IWorkflowExecuteService workflowExecuteService;
  38. @Autowired
  39. private WorkflowRecordMapper workflowRecordMapper;
  40. @Autowired
  41. private IStudentChangeRecordService changeRecordService;
  42. @Override
  43. public void process() throws Exception {
  44. // 获取表单中数据编号
  45. Map<String, Object> params = this.getFirstContextBean();
  46. Object value = util.getFormDatKey(params, "id");
  47. Long formId = Convert.toLong(value);
  48. Object processInstanceId = params.get("processInstanceId");
  49. if (processInstanceId == null) {
  50. return;
  51. }
  52. String processInstanceIdStr = Convert.toStr(processInstanceId);
  53. if (formId != null && StringUtils.isNotEmpty(processInstanceIdStr)) {
  54. TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
  55. @Override
  56. public void afterCommit() {
  57. CompletableFuture.runAsync(() -> {
  58. Optional<HistoricProcessInstance> historicProcessInstanceOptional = workflowExecuteService.getHistoricProcessInstance(processInstanceId.toString());
  59. if (historicProcessInstanceOptional.isEmpty()) {
  60. return;
  61. }
  62. HistoricProcessInstance historicProcessInstance = historicProcessInstanceOptional.get();
  63. if (!historicProcessInstance.getState().equals(HistoricProcessInstance.STATE_ACTIVE)) {
  64. // 获取流程记录中的非正常结束
  65. LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
  66. workflowRecordLambdaQueryWrapper
  67. .and(wq -> wq.eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.DISAGREE.getCode())
  68. .or()
  69. .eq(WorkflowRecord::getWorkflowApproveType, WorkflowApproveType.WITHDRAW.getCode())
  70. )
  71. .eq(WorkflowRecord::getProcessId, processInstanceId)
  72. ;
  73. List<WorkflowRecord> workflowRecordList = workflowRecordMapper.selectList(workflowRecordLambdaQueryWrapper);
  74. if (!workflowRecordList.isEmpty()) {
  75. return;
  76. }
  77. }
  78. //查询出数据
  79. String tableName = "temporary_change_class";
  80. Entity where = Entity.create(tableName);
  81. where.set("id", formId);
  82. Map<String, Object> changeClass = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
  83. long afterClassId = Long.parseLong(changeClass.get("after_class_id").toString());
  84. long studentUserId = Long.parseLong(changeClass.get("student_user_id").toString());
  85. BaseClass baseClass = baseClassService.getById(afterClassId);
  86. //修改学生班级
  87. studentSchoolRollService.updateStudentClass(afterClassId, baseClass.getMajorSetId(), studentUserId);
  88. changeRecordService.insertDataByTemporaryChangeClass(formId);
  89. });
  90. }
  91. });
  92. }
  93. }
  94. }