|
|
@@ -1,23 +1,34 @@
|
|
|
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.RoomApplicantTypeEnum;
|
|
|
import com.xjrsoft.common.enums.StudyStatusEnum;
|
|
|
+import com.xjrsoft.common.enums.WorkflowApproveType;
|
|
|
import com.xjrsoft.module.hikvision.entity.HikvisionData;
|
|
|
import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
|
|
|
import com.xjrsoft.module.hikvision.util.DataUtil;
|
|
|
import com.xjrsoft.module.room.entity.WfRoomApplicant;
|
|
|
-import com.xjrsoft.module.room.mapper.WfRoomApplicantMapper;
|
|
|
+import com.xjrsoft.module.room.service.IWfRoomApplicantService;
|
|
|
import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
|
|
|
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.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
|
|
|
/**
|
|
|
* 学生住宿申请后,修改学籍信息中的就读方式
|
|
|
@@ -25,12 +36,15 @@ import java.util.Map;
|
|
|
@Component("wf_room_applicant_node")
|
|
|
public class WfRoomApplicantNode extends NodeComponent {
|
|
|
@Autowired
|
|
|
- private WfRoomApplicantMapper wfRoomApplicantMapper;
|
|
|
+ private IWfRoomApplicantService wfRoomApplicantService;
|
|
|
@Autowired
|
|
|
private IBaseStudentSchoolRollService studentSchoolRollService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private HikvisionDataMapper hikvisionDataMapper;
|
|
|
+ @Autowired
|
|
|
+ private IWorkflowExecuteService workflowExecuteService;
|
|
|
+ @Autowired
|
|
|
+ private WorkflowRecordMapper workflowRecordMapper;
|
|
|
|
|
|
@Override
|
|
|
public void process() throws Exception {
|
|
|
@@ -38,27 +52,66 @@ public class WfRoomApplicantNode extends NodeComponent {
|
|
|
Map<String, Object> params = this.getFirstContextBean();
|
|
|
Object value = util.getFormDatKey(params,"id");
|
|
|
Long formId = Convert.toLong(value);
|
|
|
- if (formId != null) {
|
|
|
- //查询出数据
|
|
|
- WfRoomApplicant wfRoomApplicant = wfRoomApplicantMapper.selectById(formId);
|
|
|
- BaseStudentSchoolRoll schoolRoll = studentSchoolRollService.getOne(
|
|
|
- new QueryWrapper<BaseStudentSchoolRoll>().lambda()
|
|
|
- .eq(BaseStudentSchoolRoll::getUserId, wfRoomApplicant.getApplicantUserId())
|
|
|
- );
|
|
|
- if(RoomApplicantTypeEnum.ToBeBoarder.getCode().equals(wfRoomApplicant.getRecedeType())){
|
|
|
- schoolRoll.setStduyStatus(StudyStatusEnum.InResidence.getCode());
|
|
|
- }else if(RoomApplicantTypeEnum.ToBeDayPupil.getCode().equals(wfRoomApplicant.getRecedeType())){
|
|
|
- schoolRoll.setStduyStatus(StudyStatusEnum.AttendDaySchool.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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询出数据
|
|
|
+ WfRoomApplicant wfRoomApplicant = wfRoomApplicantService.getById(formId);
|
|
|
+ BaseStudentSchoolRoll schoolRoll = studentSchoolRollService.getOne(
|
|
|
+ new QueryWrapper<BaseStudentSchoolRoll>().lambda()
|
|
|
+ .eq(BaseStudentSchoolRoll::getUserId, wfRoomApplicant.getApplicantUserId())
|
|
|
+ );
|
|
|
+ if(RoomApplicantTypeEnum.ToBeBoarder.getCode().equals(wfRoomApplicant.getRecedeType())){
|
|
|
+ schoolRoll.setStduyStatus(StudyStatusEnum.InResidence.getCode());
|
|
|
+ }else if(RoomApplicantTypeEnum.ToBeDayPupil.getCode().equals(wfRoomApplicant.getRecedeType())){
|
|
|
+ schoolRoll.setStduyStatus(StudyStatusEnum.AttendDaySchool.getCode());
|
|
|
+ }
|
|
|
+ //修改学生班级
|
|
|
+ studentSchoolRollService.updateById(schoolRoll);
|
|
|
|
|
|
- String tableName = "base_student";
|
|
|
- List<HikvisionData> studentList = hikvisionDataMapper.selectList(
|
|
|
- new QueryWrapper<HikvisionData>().lambda().eq(HikvisionData::getTableName, tableName)
|
|
|
- );
|
|
|
- DataUtil dataUtil = new DataUtil();
|
|
|
- dataUtil.insertStudentOne(tableName, new HashMap<>(), studentList, wfRoomApplicant.getApplicantUserId());
|
|
|
+ String tableName = "base_student";
|
|
|
+ List<HikvisionData> studentList = hikvisionDataMapper.selectList(
|
|
|
+ new QueryWrapper<HikvisionData>().lambda().eq(HikvisionData::getTableName, tableName)
|
|
|
+ );
|
|
|
+ DataUtil dataUtil = new DataUtil();
|
|
|
+ try {
|
|
|
+ dataUtil.insertStudentOne(tableName, new HashMap<>(), studentList, wfRoomApplicant.getApplicantUserId());
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ wfRoomApplicantService.noticeParents(formId);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
}
|