xiaof 3 năm trước cách đây
mục cha
commit
b720aa8309

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/DirectorApproveListener.java

@@ -2,16 +2,25 @@ package com.qmth.distributed.print.business.activiti;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.TFFlowApprove;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.distributed.print.business.service.BasicMessageService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
+import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.TaskListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -33,6 +42,8 @@ public class DirectorApproveListener implements TaskListener {
     public void notify(DelegateTask delegateTask) {
         ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
+        BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
+        TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
 
         String flowId = delegateTask.getProcessInstanceId();
         QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
@@ -43,5 +54,12 @@ public class DirectorApproveListener implements TaskListener {
         List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
         //添加或签的人员,一人通过即可进入下一环节
         delegateTask.addCandidateUsers(ids);
+
+        // 发送审核短信
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
+        if(tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
+                && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup())) {
+            basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
+        }
     }
 }

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/PresidentApproveListener.java

@@ -1,16 +1,27 @@
 package com.qmth.distributed.print.business.activiti;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.TFFlowApprove;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.distributed.print.business.service.BasicMessageService;
+import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.distributed.print.business.service.TFFlowApproveService;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
+import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.engine.delegate.DelegateTask;
 import org.activiti.engine.delegate.TaskListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
@@ -33,14 +44,30 @@ public class PresidentApproveListener implements TaskListener {
      */
     @Override
     public void notify(DelegateTask delegateTask) {
+        ExamTaskService examTaskService = SpringContextHolder.getBean(ExamTaskService.class);
         SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
+        BasicMessageService basicMessageService = SpringContextHolder.getBean(BasicMessageService.class);
+        TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         if (Objects.isNull(sysUser.getOrgId())) {
             throw ExceptionResultEnum.ERROR.exception("审批人机构为空");
         }
+
+        String flowId = delegateTask.getProcessInstanceId();
+        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
+        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(flowId));
+        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+
         List<ApproveUserResult> sysUserList = sysUserService.findByPresidentApprove(Arrays.asList(sysUser.getOrgId()), null);
         List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
         //添加或签的人员,一人通过即可进入下一环节
         delegateTask.addCandidateUsers(ids);
+
+        // 发送审核短信
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(Long.valueOf(flowId));
+        if(tfFlowApprove.getStatus().equals(FlowStatusEnum.AUDITING)
+                && tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup())) {
+            basicMessageService.sendNoticeTaskAuditFlow(examTask, sysUserList, MessageEnum.NOTICE_OF_AUDIT_CREATED);
+        }
     }
 }

+ 1 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MessageEnum.java

@@ -35,8 +35,7 @@ public enum MessageEnum {
     NOTICE_OF_AUDIT_REVIEW("审核待办修改申请通知","${userName}您好,${courseNameAndPaperNumber}试卷重新提交修改申请,请您尽快审核!"),
     // 定时任务查询触发,业务id为考务老师id,短信发送给考务老师
     NOTICE_OF_AUDIT_WILL_EXPIRE("审核待办到期预警通知","${userName}您好,您还有${count}条审核待办即将逾期,请您尽快处理!"),
-    NOTICE_OF_AUDIT_OVERDUE("审核待办逾期通知","${userName}您好,您有${count}条审核待办已逾期!"),
-    ;
+    NOTICE_OF_AUDIT_OVERDUE("审核待办逾期通知","${userName}您好,您有${count}条审核待办已逾期!");
 
     MessageEnum(String name, String template) {
         this.name = name;

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicMessageService.java

@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.entity.BasicMessage;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.entity.SysUser;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @Description: 短信消息发送
@@ -62,4 +64,12 @@ public interface BasicMessageService extends IService<BasicMessage> {
      * 重发失败短信
      */
     void resendSmsTask();
+
+    /**
+     * 新流程,发送审核提醒短信
+     *
+     * @param examTask
+     * @param messageType
+     */
+    void sendNoticeTaskAuditFlow(ExamTask examTask, List<ApproveUserResult> users, MessageEnum messageType);
 }

+ 22 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicMessageServiceImpl.java

@@ -17,6 +17,7 @@ import com.qmth.distributed.print.business.enums.MessageEnum;
 import com.qmth.distributed.print.business.mapper.BasicMessageMapper;
 import com.qmth.distributed.print.business.service.BasicMessageService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -51,6 +52,7 @@ public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, Bas
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void saveMessageSendLog(Long userId, String mobileNumber, Long businessId, String variableParams, Long createId, MessageEnum messageType, String remark) {
+        String schoolId = ServletUtil.getRequestHeaderSchoolId().toString();
         BasicMessage basicMessage = new BasicMessage();
         // code和content
         Map<String, String> enumInfo = this.getCodeAndContentByEnum(messageType);
@@ -89,6 +91,7 @@ public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, Bas
                 errorMessage = e.getMessage();
             } finally {
                 // 传入的必填字段
+                basicMessage.setSchoolId(Long.valueOf(schoolId));
                 basicMessage.setUserId(userId);
                 basicMessage.setMobileNumber(mobileNumber);
                 basicMessage.setBusinessId(businessId);
@@ -264,6 +267,25 @@ public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, Bas
         }
     }
 
+    @Override
+    public void sendNoticeTaskAuditFlow(ExamTask examTask, List<ApproveUserResult> users, MessageEnum messageType) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        // 考务老师(命题任务创建人)
+        for (ApproveUserResult user : users) {
+            String userName = user.getRealName();
+            String mobileNumber = user.getMobileNumber();
+            if(StringUtils.isNotBlank(mobileNumber)) {
+                Map<String, Object> jsonMap = new HashMap<>();
+                jsonMap.put("userName", userName);
+                StringJoiner sj = new StringJoiner("、").add(examTask.getCourseName()).add(examTask.getPaperNumber());
+                jsonMap.put("courseNameAndPaperNumber", sj.toString());
+                String variableParams = JSON.toJSONString(jsonMap);
+                String remark = String.format("命题任务ID:%s", examTask.getId().toString());
+                this.saveMessageSendLog(user.getId(), mobileNumber, examTask.getId(), variableParams, sysUser.getId(), messageType, remark);
+            }
+        }
+    }
+
     /**
      * 自动重发
      * @param basicMessage

+ 25 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -983,21 +983,32 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             throw ExceptionResultEnum.ERROR.exception("参数有误");
         }
         ExamTask task = this.getById(examTask.getId());
+        if(!task.getReview()){
+            throw ExceptionResultEnum.ERROR.exception("命题任务不需要审核,不能撤回");
+        }
+        if(Objects.isNull(task.getFlowId())){
+            throw ExceptionResultEnum.ERROR.exception("审核流程有误,不能撤回");
+        }
+
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(task.getFlowId());
+        if(Objects.isNull(tfFlowApprove)){
+            throw ExceptionResultEnum.ERROR.exception("审核流程进度丢失,不能撤回");
+        }
+
+        if(!tfFlowApprove.getSetup().equals(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup())){
+            throw ExceptionResultEnum.ERROR.exception("当前审核节点不能撤回");
+        }
+
+        //TODO 这里以后要判断学校code来取流程key
+        Map<String, Object> map = new HashMap<>();
+        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(task.getUserId()));
+        ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
-//        // 撤回
-//        if (examTask.getStatus().name().equals(ExamStatusEnum.CANCEL.name())) {
-//            /*if (!task.getStatus().name().equals(ExamStatusEnum.FINISH.name())) {
-//                throw ExceptionResultEnum.ERROR.exception("命题任务状态为已完成,才能撤回");
-//            }*/
-//            updateWrapper.lambda().set(ExamTask::getStatus, ExamStatusEnum.STAGE).eq(ExamTask::getId, examTask.getId());
-//            return this.update(updateWrapper);
-//        }
-//        // 重新申请
-//        else if (examTask.getStatus().name().equals(ExamStatusEnum.STAGE.name())) {
-//            updateWrapper.lambda().set(ExamTask::getStatus, ExamStatusEnum.STAGE).set(ExamTask::getReviewStatus, null).eq(ExamTask::getId, examTask.getId());
-//            return this.update(updateWrapper);
-//        }
-        return false;
+        updateWrapper.lambda().set(ExamTask::getStatus, ExamStatusEnum.STAGE)
+                .set(ExamTask::getFlowId, Long.parseLong(processInstance.getId()))
+                .eq(ExamTask::getId, examTask.getId());
+        return this.update(updateWrapper);
     }
 
     @Override

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

@@ -329,21 +329,17 @@ public class ExamTaskController {
             // 校验是否可以提交打印状态
             printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
-        //待审核状态,发送短信
-        if (ExamStatusEnum.SUBMIT.equals(examTask.getStatus())) {
-            basicMessageService.sendNoticeTaskAuditCreateOrReview(examTask, MessageEnum.NOTICE_OF_AUDIT_CREATED);
-        }
 
         return ResultUtil.ok(isSuccess);
     }
 
     /**
-     * 入库申请-撤
+     * 入库申请-撤销申请
      *
      * @param examTask
      * @return
      */
-    @ApiOperation(value = "入库申请-撤")
+    @ApiOperation(value = "入库申请-撤销申请")
     @RequestMapping(value = "/apply_status", method = RequestMethod.POST)
     public Result taskApplyStatus(@RequestBody ExamTask examTask) {
         return ResultUtil.ok(examTaskService.status(examTask));