| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package com.xjrsoft.module.job;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.db.Db;
- import cn.hutool.db.Entity;
- import com.xjrsoft.common.constant.GlobalConstant;
- import com.xjrsoft.common.utils.DatasourceUtil;
- import com.xjrsoft.common.utils.DateUtils;
- import com.xjrsoft.module.oa.service.INewsService;
- import com.xjrsoft.module.oa.utils.SendMessageUtil;
- import com.xjrsoft.module.workflow.constant.WorkflowConstant;
- import com.xjrsoft.module.workflow.entity.WorkflowExtra;
- import com.xjrsoft.module.workflow.vo.MyProcessPageVo;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import javax.sql.DataSource;
- import java.time.Duration;
- import java.time.LocalDateTime;
- import java.util.*;
- import java.util.concurrent.CompletableFuture;
- import java.util.stream.Collectors;
- import static org.junit.jupiter.api.Assertions.*;
- @SpringBootTest
- class ProcessNotProcessingAlertTaskTest {
- @Test
- void alertProcessNotProcessing() {
- DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
- try {
- Db use = Db.use(datasource);
- //获取未结束流程的流程id
- String listUncloseProcessIdSql = "SELECT DISTINCT process_id " +
- "FROM xjr_workflow_record w1 " +
- "WHERE NOT EXISTS ( " +
- " SELECT 1 " +
- " FROM xjr_workflow_record w2 " +
- " WHERE w2.node_id = 'Event_140v10k' " +
- " AND w1.process_id = w2.process_id " +
- " );";
- List<Entity> listUncloseProcessId = use.query(listUncloseProcessIdSql);
- if(!listUncloseProcessId.isEmpty()){
- //获取所有未完成流程的所有节点
- String uncloseProcessIdStr = listUncloseProcessId.stream()
- .map(entity -> "'" + entity.getStr("process_id") + "'")
- .collect(Collectors.joining(","));
- String listWorkflowExtraSql = "select * " +
- "from xjr_workflow_extra "
- + "where process_id in (" + uncloseProcessIdStr + ");";;
- List<WorkflowExtra> workflowExtraList = use.query(listWorkflowExtraSql, WorkflowExtra.class);
- List<String> uncloseProcessIdList = listUncloseProcessId.stream()
- .map(entity -> entity.getStr("process_id"))
- .collect(Collectors.toList());
- //筛选出每个流程的最后一个节点的记录,需要的是有任务节点id的记录
- List<WorkflowExtra> workflowExtraLastNodeList = new ArrayList<>();
- LocalDateTime now = LocalDateTime.now();
- for(String processId : uncloseProcessIdList){
- workflowExtraList.stream()
- .filter(e -> e.getProcessId().equals(processId))
- .max(Comparator.comparing(WorkflowExtra::getStartTime))
- .ifPresent(e -> {
- if((e.getEndTime() == null || e.getEndTime().toString().equals("")) && e.getApproveUserIds() != null && !e.getApproveUserIds().equals("")){
- // 计算两个时间之间的差值
- Duration duration = Duration.between(e.getStartTime(), now);
- if (duration.toHours() > 24) {
- System.out.println("时间差大于24小时");
- workflowExtraLastNodeList.add(e);
- }
- }
- });
- }
- //对未结束的流程节点进行处理,通知下一个节点需要处理的人
- Map<String, StringBuilder> message = new HashMap<>();
- for (WorkflowExtra w : workflowExtraLastNodeList){
- String approveUserIds = w.getApproveUserIds();
- String[] aapproveUserIdArray = approveUserIds.trim().split(",");
- for (String str : aapproveUserIdArray){
- System.err.println(str);
- if(message.containsKey(str)){
- message.get(str).append(",").append(w.getProcessName());
- }else {
- message.put(str, new StringBuilder(w.getProcessName()));
- }
- }
- }
- // SendMessageUtil.sendWorkflowUnapprovedWx(message);
- CompletableFuture.runAsync(() -> {
- SendMessageUtil.sendWorkflowUnapprovedWx(message);
- });
- // System.err.println(workflowExtraLastNodeList.size());
- // System.err.println(workflowExtraLastNodeList.get(0));
- }
- } catch (Exception e) {
- System.err.println(e.getMessage()+"定时提醒流程未处理");
- }
- }
- }
|