From f8ce7aa161ef2ef316357ead8208bc60de938ead Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 24 三月 2025 09:36:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 flowable/src/main/java/com/ycl/mapper/ProcessLogMapper.java                |    5 +
 business/src/main/java/com/ycl/domain/vo/TaskOrderVO.java                  |   23 +++++
 business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java |   78 +++++++++++++++++++
 flowable/src/main/java/com/ycl/domain/vo/ProcessLogVO.java                 |    3 
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java       |    7 -
 flowable/src/main/resources/mapper/ProcessLogMapper.xml                    |   40 +++++++++
 business/src/main/java/com/ycl/controller/IndexController.java             |   18 ++--
 business/src/main/java/com/ycl/service/ProjectProcessService.java          |    5 +
 business/src/main/java/com/ycl/service/ProcessLogService.java              |    2 
 business/src/main/java/com/ycl/controller/FlowLogController.java           |    2 
 flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java           |   10 ++
 business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java     |   11 ++
 12 files changed, 182 insertions(+), 22 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/FlowLogController.java b/business/src/main/java/com/ycl/controller/FlowLogController.java
index 7ea22a7..81dee74 100644
--- a/business/src/main/java/com/ycl/controller/FlowLogController.java
+++ b/business/src/main/java/com/ycl/controller/FlowLogController.java
@@ -40,6 +40,6 @@
 //    @PreAuthorize("@ss.hasPermi('flowLog:page')")
     public Result projectProcessLogPage(ProcessLogQuery query) {
         query.setDeleted(null);
-        return processLogService.projectProcessLogPage(query);
+        return processLogService.projectProcessLogList(query);
     }
 }
diff --git a/business/src/main/java/com/ycl/controller/IndexController.java b/business/src/main/java/com/ycl/controller/IndexController.java
index 6cb53e6..63739ac 100644
--- a/business/src/main/java/com/ycl/controller/IndexController.java
+++ b/business/src/main/java/com/ycl/controller/IndexController.java
@@ -1,5 +1,6 @@
 package com.ycl.controller;
 
+import com.ycl.common.base.Result;
 import com.ycl.common.core.controller.BaseController;
 import com.ycl.common.core.domain.R;
 import com.ycl.common.core.page.TableDataInfo;
@@ -7,6 +8,8 @@
 import com.ycl.domain.vo.*;
 import com.ycl.service.AuditHistoryService;
 import com.ycl.service.ProjectInfoService;
+import com.ycl.service.ProjectProcessService;
+import com.ycl.system.domain.base.AbsQuery;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -23,12 +26,9 @@
 public class IndexController extends BaseController {
 
 
-    @Autowired
-    private ProjectInfoService projectInfoService;
-
-
-    @Autowired
-    private AuditHistoryService auditHistoryService;
+    private final ProjectInfoService projectInfoService;
+    private final AuditHistoryService auditHistoryService;
+    private final ProjectProcessService projectProcessService;
 
     /**
      * 椤圭洰鏁伴噺缁熻
@@ -74,10 +74,8 @@
      * 娑堟伅鏉℃暟
      */
     @GetMapping("/message-count")
-    public R<IndexMsgCountVO> messageCount() {
-        IndexMsgCountVO vo = new IndexMsgCountVO();
-        vo.setAuditCount(0L);
-        return R.ok(vo);
+    public Result messageCount(AbsQuery query) {
+        return projectProcessService.getProcessMsg(query);
     }
 
     /**
diff --git a/business/src/main/java/com/ycl/domain/vo/TaskOrderVO.java b/business/src/main/java/com/ycl/domain/vo/TaskOrderVO.java
new file mode 100644
index 0000000..dfd0863
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/vo/TaskOrderVO.java
@@ -0,0 +1,23 @@
+package com.ycl.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/3/23 10:48
+ */
+@Data
+public class TaskOrderVO {
+
+    private String taskId;
+
+    /**
+     * 鎺掑簭鍊�
+     */
+    private Long num;
+
+    /**
+     * 鍓╀綑鏃堕棿
+     */
+    private String remaingTime;
+}
diff --git a/business/src/main/java/com/ycl/service/ProcessLogService.java b/business/src/main/java/com/ycl/service/ProcessLogService.java
index 9c7141e..60e7f10 100644
--- a/business/src/main/java/com/ycl/service/ProcessLogService.java
+++ b/business/src/main/java/com/ycl/service/ProcessLogService.java
@@ -111,5 +111,7 @@
      * @param query
      * @return
      */
+    Result projectProcessLogList(ProcessLogQuery query);
+
     Result projectProcessLogPage(ProcessLogQuery query);
 }
diff --git a/business/src/main/java/com/ycl/service/ProjectProcessService.java b/business/src/main/java/com/ycl/service/ProjectProcessService.java
index 1c29cf5..f56d3db 100644
--- a/business/src/main/java/com/ycl/service/ProjectProcessService.java
+++ b/business/src/main/java/com/ycl/service/ProjectProcessService.java
@@ -1,5 +1,6 @@
 package com.ycl.service;
 
+import com.ycl.common.core.domain.R;
 import com.ycl.domain.entity.ProjectProcess;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.common.base.Result;
@@ -7,6 +8,8 @@
 import com.ycl.domain.query.ProjectProcessQuery;
 import com.ycl.domain.query.TaskQuery;
 import com.ycl.domain.vo.CustomerTaskVO;
+import com.ycl.domain.vo.IndexMsgCountVO;
+import com.ycl.system.domain.base.AbsQuery;
 
 import java.util.List;
 
@@ -142,4 +145,6 @@
      * @return
      */
     Result taskTeamwork(TaskTeamWorkForm form);
+
+    Result getProcessMsg(AbsQuery query);
 }
diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index 47599e1..af1da78 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -73,7 +73,6 @@
 import org.flowable.task.api.history.HistoricTaskInstanceQuery;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -1478,7 +1477,7 @@
             ProcessLogQuery query = new ProcessLogQuery();
             query.setTaskId(node.getTaskId());
             query.setProcessInsId(finalProcessInsId);
-            Result result = processLogService.projectProcessLogPage(query);
+            Result result = processLogService.projectProcessLogList(query);
             List<ProcessLogVO> logList = (List<ProcessLogVO>) result.get("data");
             DoFormDetailVO vo = new DoFormDetailVO();
             BeanUtils.copyProperties(node, vo);
@@ -1557,7 +1556,7 @@
                 ProcessLogQuery query = new ProcessLogQuery();
                 query.setTaskId(node.getTaskId());
                 query.setProcessInsId(hisTask.getProcessInstanceId());
-                Result result = processLogService.projectProcessLogPage(query);
+                Result result = processLogService.projectProcessLogList(query);
                 List<ProcessLogVO> logList = (List<ProcessLogVO>) result.get("data");
                 DoFormDetailVO vo = new DoFormDetailVO();
                 BeanUtils.copyProperties(node, vo);
@@ -1628,7 +1627,7 @@
                 ProcessLogQuery query = new ProcessLogQuery();
                 query.setTaskId(node.getTaskId());
                 query.setProcessInsId(processInsId);
-                Result result = processLogService.projectProcessLogPage(query);
+                Result result = processLogService.projectProcessLogList(query);
                 List<ProcessLogVO> logList = (List<ProcessLogVO>) result.get("data");
                 DoFormDetailVO vo = new DoFormDetailVO();
                 BeanUtils.copyProperties(node, vo);
diff --git a/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java
index 306abc1..5b075c8 100644
--- a/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProcessLogServiceImpl.java
@@ -180,8 +180,8 @@
     }
 
     @Override
-    public Result projectProcessLogPage(ProcessLogQuery query) {
-        List<ProcessLogVO> list = baseMapper.projectProcessLogPage(query);
+    public Result projectProcessLogList(ProcessLogQuery query) {
+        List<ProcessLogVO> list = baseMapper.projectProcessLogList(query);
         // json鍙嶅簭鍒楀寲
         list.stream().forEach(log -> {
             if (StringUtils.isNotBlank(log.getEventDataJson())) {
@@ -217,6 +217,13 @@
         return Result.ok().data(list);
     }
 
+    @Override
+    public Result projectProcessLogPage(ProcessLogQuery query) {
+        IPage<ProcessLogVO> page = PageUtil.getPage(query, ProcessLogVO.class);
+        baseMapper.projectProcessLogPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
     /**
      * 瑙f瀽娴佺▼鏃ュ織涓殑鏁版嵁-鍚嶇О
      *
diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
index 0c283e6..8c62e67 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -18,6 +18,7 @@
 import com.ycl.domain.entity.*;
 import com.ycl.domain.form.*;
 import com.ycl.domain.json.*;
+import com.ycl.domain.query.ProcessLogQuery;
 import com.ycl.domain.vo.*;
 import com.ycl.event.event.TaskLogEvent;
 import com.ycl.mapper.ProjectEngineeringMapper;
@@ -28,6 +29,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.domain.query.ProjectProcessQuery;
 import com.ycl.service.common.TaskCommonService;
+import com.ycl.system.domain.base.AbsQuery;
 import com.ycl.system.service.ISysDeptService;
 import com.ycl.system.service.ISysDictTypeService;
 import com.ycl.system.service.ISysRoleService;
@@ -378,7 +380,50 @@
                     .endOr();
         }
         result.total(taskQuery.count());
-        List<Task> taskList = taskQuery.listPage(pageSize * (pageNum - 1), pageSize);
+        List<Task> allTodoList = taskQuery.list();
+        List<TaskOrderVO> orderList = new ArrayList<>();
+        allTodoList.stream().forEach(task -> {
+            TaskOrderVO order = new TaskOrderVO();
+            order.setTaskId(task.getId());
+            // 璁$畻鍔炵悊鏃堕棿锛岃秴鏃剁殑鎺掑墠闈紝娌¤秴鏃剁殑鐢变綆鍒伴珮鎺掑簭锛屾病瓒呮椂鏃堕棿鐨勬帓鏈�鍚�
+            ProcessCoding processCoding = processCodingService.getByTaskId(task.getId(), task.getProcessInstanceId());
+            if (Objects.nonNull(processCoding)) {
+                if (StringUtils.isNotBlank(processCoding.getRedTime())) {
+                    Long overtime = getTime(processCoding.getRedTime());
+                    long durationTime = 0l;
+                    if (Objects.nonNull(processCoding.getStartTaskTime())) {
+                        durationTime = ((new Date()).getTime() - processCoding.getStartTaskTime().getTime()) / 1000;
+                    }
+                    if (overtime > durationTime) {
+                        order.setNum((overtime - durationTime) / 3600);
+                    } else {
+                        order.setNum(-2000000L);
+                    }
+                } else {
+                    order.setNum(2000000L);
+                }
+            } else {
+                order.setNum(2000000L);
+            }
+            orderList.add(order);
+        });
+        // 鍗囧簭鎺掑垪
+        Collections.sort(orderList, Comparator.comparingLong(TaskOrderVO::getNum));
+        int startNum = pageSize * (pageNum - 1);
+        int endNum = startNum + pageSize;
+        if (startNum >= orderList.size()) {
+            result.data(new ArrayList<>()).total(0L);
+            return;
+        }
+        int end = Math.min(endNum, orderList.size());
+        List<String> targetTaskIds = orderList.subList(startNum, end).stream().map(TaskOrderVO::getTaskId).collect(Collectors.toList());
+        List<Task> taskList = targetTaskIds.stream().map(taskId -> {
+            List<Task> list = allTodoList.stream().filter(task -> task.getId().equals(taskId)).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(list)) {
+                return null;
+            }
+            return list.get(0);
+        }).filter(Objects::nonNull).collect(Collectors.toList());
         List<IndexCustomerTaskVO> vos = new ArrayList<>();
         for (Task task : taskList) {
             IndexCustomerTaskVO taskVO = new IndexCustomerTaskVO();
@@ -923,6 +968,37 @@
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
+    @Override
+    public Result getProcessMsg(AbsQuery q) {
+        // 鏌ヨ嚜宸辩殑鏃ュ織
+        ProcessLogQuery query = new ProcessLogQuery();
+        if (! SecurityUtils.isAdmin(SecurityUtils.getUserId())) {
+            query.setUserId(SecurityUtils.getUserId());
+        }
+        query.setEventTypeList(Arrays.asList(ProcessLogEventTypeEnum.DELEGATE.getValue(),
+                ProcessLogEventTypeEnum.REJECT.getValue(),
+                ProcessLogEventTypeEnum.JUMP.getValue(),
+                ProcessLogEventTypeEnum.FINISHED.getValue(),
+                ProcessLogEventTypeEnum.WAIT.getValue()));
+        query.setCurrentPage(q.getCurrentPage());
+        query.setPageSize(q.getPageSize());
+        Result result = processLogService.projectProcessLogPage(query);
+        List<ProcessLogVO> logs = (List<ProcessLogVO>) result.get("data");
+
+        logs.stream().forEach(log -> {
+            if (ProcessLogEventTypeEnum.FINISHED.equals(log.getEventType())) {
+                log.setContent("鎮ㄥ畬鎴愪簡浠诲姟锛�" + log.getTaskName());
+            } else if (ProcessLogEventTypeEnum.REJECT.equals(log.getEventType())) {
+                log.setContent("鎮ㄩ┏鍥炰簡浠诲姟锛�" + log.getTaskName());
+            } else if (ProcessLogEventTypeEnum.WAIT.equals(log.getEventType())) {
+                log.setContent("鎮ㄥ缂轰簡浠诲姟锛�" + log.getTaskName());
+            } else if (ProcessLogEventTypeEnum.JUMP.equals(log.getEventType())) {
+                log.setContent("鎮ㄨ烦杩囦簡浠诲姟锛�" + log.getTaskName());
+            }
+        });
+        return Result.ok().data(logs).total((Long) result.get("total"));
+    }
+
     /**
      * 鏌ヨ寰呭姙浠诲姟
      *
diff --git a/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java b/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java
index cc071bb..7a295a4 100644
--- a/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java
+++ b/flowable/src/main/java/com/ycl/domain/query/ProcessLogQuery.java
@@ -43,5 +43,15 @@
      * 閫昏緫鍒犻櫎
      */
     private Integer deleted = 0;
+
+    /**
+     * 鏌ヨ皝鐨�
+     */
+    private Long userId;
+
+    /**
+     * 鏌ュ摢绉嶇被鍨嬬殑鏃ュ織
+     */
+    private List<String> eventTypeList;
 }
 
diff --git a/flowable/src/main/java/com/ycl/domain/vo/ProcessLogVO.java b/flowable/src/main/java/com/ycl/domain/vo/ProcessLogVO.java
index 8448514..a0b4b54 100644
--- a/flowable/src/main/java/com/ycl/domain/vo/ProcessLogVO.java
+++ b/flowable/src/main/java/com/ycl/domain/vo/ProcessLogVO.java
@@ -52,6 +52,9 @@
     @ApiModelProperty("json杞崲鍚庣殑瀵硅薄")
     private Object eventDataObj;
 
+    @ApiModelProperty("鍐呭")
+    private String content;
+
     public static ProcessLogVO getVoByEntity(@NonNull ProcessLog entity, ProcessLogVO vo) {
         if(vo == null) {
             vo = new ProcessLogVO();
diff --git a/flowable/src/main/java/com/ycl/mapper/ProcessLogMapper.java b/flowable/src/main/java/com/ycl/mapper/ProcessLogMapper.java
index 822cef5..74c1a29 100644
--- a/flowable/src/main/java/com/ycl/mapper/ProcessLogMapper.java
+++ b/flowable/src/main/java/com/ycl/mapper/ProcessLogMapper.java
@@ -37,7 +37,10 @@
      * @param query
      * @return
      */
-    List<ProcessLogVO> projectProcessLogPage(@Param("query") ProcessLogQuery query);
+    List<ProcessLogVO> projectProcessLogList(@Param("query") ProcessLogQuery query);
+
+
+    IPage projectProcessLogPage(IPage page, @Param("query") ProcessLogQuery query);
 
     List<String> getAllHangup();
 
diff --git a/flowable/src/main/resources/mapper/ProcessLogMapper.xml b/flowable/src/main/resources/mapper/ProcessLogMapper.xml
index c638af4..881e51d 100644
--- a/flowable/src/main/resources/mapper/ProcessLogMapper.xml
+++ b/flowable/src/main/resources/mapper/ProcessLogMapper.xml
@@ -55,8 +55,38 @@
             TFL.deleted = 0
     </select>
 
-
     <select id="projectProcessLogPage" resultMap="BaseResultMap">
+        SELECT
+            TFL.task_id,
+            TFL.task_name,
+            TFL.event_type,
+            TFL.project_id,
+            TFL.process_ins_id,
+            TFL.user_id,
+            CONCAT(SU.nick_name, '(',COALESCE(SD.dept_name, '鏃犻儴闂�'), ')') as nick_name,
+            TFL.event_data_json,
+            TFL.gmt_create,
+            TFL.id
+        FROM
+            t_process_log TFL
+        LEFT JOIN sys_user SU ON SU.user_id = TFL.user_id
+        LEFT JOIN sys_dept SD ON SU.dept_id = SD.dept_id
+        <where>
+            <if test="query.deleted != null">AND TFL.deleted = #{query.deleted}</if>
+            <if test="query.userId != null">AND TFL.user_id = #{query.userId}</if>
+            <if test="query.processInsId != null and query.processInsId != ''">AND TFL.process_ins_id = #{query.processInsId}</if>
+            <if test="query.taskId != null and query.taskId != ''">AND TFL.task_id = #{query.taskId}</if>
+            <if test="query.projectId != null and query.projectId != ''">AND TFL.project_id = #{query.projectId}</if>
+            <if test="query.taskDefKey != null and query.taskDefKey != ''">AND TFL.task_def_key = #{query.taskDefKey}</if>
+            <if test="query.eventTypeList != null and query.eventTypeList.size > 0">
+                AND TFL.event_type IN <foreach collection="query.eventTypeList" open="(" separator="," close=")" item="eventType">#{eventType}</foreach>
+            </if>
+        </where>
+        ORDER BY
+        TFL.gmt_create DESC
+    </select>
+
+    <select id="projectProcessLogList" resultMap="BaseResultMap">
         SELECT
             TFL.task_id,
             TFL.task_name,
@@ -73,11 +103,15 @@
                 LEFT JOIN sys_user SU ON SU.user_id = TFL.user_id
                 LEFT JOIN sys_dept SD ON SU.dept_id = SD.dept_id
         <where>
-            <if test="query.deleted != null">TFL.deleted = #{query.deleted}</if>
-            AND TFL.process_ins_id = #{query.processInsId}
+            <if test="query.deleted != null">AND TFL.deleted = #{query.deleted}</if>
+            <if test="query.userId != null">AND TFL.user_id = #{query.userId}</if>
+            <if test="query.processInsId != null and query.processInsId != ''">AND TFL.process_ins_id = #{query.processInsId}</if>
             <if test="query.taskId != null and query.taskId != ''">AND TFL.task_id = #{query.taskId}</if>
             <if test="query.projectId != null and query.projectId != ''">AND TFL.project_id = #{query.projectId}</if>
             <if test="query.taskDefKey != null and query.taskDefKey != ''">AND TFL.task_def_key = #{query.taskDefKey}</if>
+            <if test="query.eventTypeList != null and query.eventTypeList.size > 0">
+                AND TFL.event_type IN <foreach collection="query.eventTypeList" open="(" separator="," close=")" item="eventType">#{eventType}</foreach>
+            </if>
         </where>
         ORDER BY
             TFL.gmt_create DESC

--
Gitblit v1.8.0