From 23c64b1fc39e1cbaca216d718480f82658362cff Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期日, 24 八月 2025 23:55:28 +0800
Subject: [PATCH] 已办任务查询问题修复

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.java           |   18 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/DoneQueryService.java    |  101 +++++++++++++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java |   14 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/DoneQueryVO.java              |   16 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.xml            |   61 +++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java |    1 
 6 files changed, 210 insertions(+), 1 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java
index 5c85937..660719e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java
@@ -14,6 +14,7 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.mdm.basesetting.producedivision.entity.MdmUser;
 import org.springblade.mdm.basesetting.producedivision.service.MdmUserService;
+import org.springblade.mdm.flow.service.DoneQueryService;
 import org.springblade.mdm.flow.service.FlowBusinessService;
 import org.springblade.mdm.flow.service.FlowCommonService;
 import org.springblade.mdm.flow.service.FlowTransferService;
@@ -46,6 +47,9 @@
 	private FlowTransferService flowTransferService;
 	@Autowired
 	private FlowCommonService flowCommonService;
+
+	@Autowired
+	private DoneQueryService doneQueryService;
 	/**
 	 * 寰呭姙浠诲姟鍒楄〃椤�
 	 */
@@ -59,7 +63,7 @@
 
 		return R.data(pages);
 	}
-	@GetMapping("done-list")
+	@GetMapping("done-list-old")
 	@ApiOperationSupport(order = 3)
 	@Operation(summary = "褰撳墠鐢ㄦ埛宸插姙浠诲姟鍒嗛〉", description = "浼犲叆娴佺▼淇℃伅")
 	public R<IPage<FlowVO>> doneList(@Parameter(description = "鍏抽敭瀛�") String keyword, @Parameter(description = "鍒涘缓鏃堕棿寮�濮�") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createTimeBegin, @Parameter(description = "鍒涘缓鏃堕棿鎴")  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createTimeEnd, Query query) {
@@ -67,6 +71,14 @@
 
 		return R.data(pages);
 	}
+	@GetMapping("done-list")
+	@ApiOperationSupport(order = 3)
+	@Operation(summary = "褰撳墠鐢ㄦ埛宸插姙浠诲姟鍒嗛〉2", description = "浼犲叆娴佺▼淇℃伅2")
+	public R<IPage<FlowVO>> doneList2(@Parameter(description = "鍏抽敭瀛�") String keyword, @Parameter(description = "鍒涘缓鏃堕棿寮�濮�") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createTimeBegin, @Parameter(description = "鍒涘缓鏃堕棿鎴")  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createTimeEnd, Query query) {
+		IPage<FlowVO> pages = doneQueryService.selectDonePage(Condition.getPage(query),"" ,createTimeBegin,createTimeEnd,keyword);
+
+		return R.data(pages);
+	}
 
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.java
new file mode 100644
index 0000000..20a9516
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.java
@@ -0,0 +1,18 @@
+package org.springblade.mdm.flow.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.vo.ApproveRecordVO;
+import org.springblade.mdm.flow.vo.DoneQueryVO;
+import org.springblade.mdm.flow.vo.FlowVO;
+
+import java.util.List;
+
+public interface DoneMapper extends BladeMapper<ApproveRecord> {
+
+	IPage<FlowVO> pageQuery(@Param("page")IPage<FlowVO> page, @Param("query") DoneQueryVO queryVO);
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.xml
new file mode 100644
index 0000000..a2ea36f
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.mdm.flow.mapper.DoneMapper">
+
+
+
+
+    <select id="pageQuery" resultType="org.springblade.mdm.flow.vo.FlowVO">
+        SELECT
+        HTI.ID_ AS taskId,
+        HTI.NAME_ AS taskName,
+        HPI.START_USER_ID_,
+        su.name start_user_name,
+        HTI.ASSIGNEE_ AS assignee,
+        HTI.START_TIME_ AS createTime,
+        HTI.END_TIME_ AS endTime,
+        HPI.PROC_INST_ID_ AS processInstanceId,
+        HPI.BUSINESS_KEY_ AS businessKey,
+        HPD.NAME_ AS processDefinitionName,
+        HPD.KEY_ as processDefinitionKey,
+        HPI.START_TIME_ as processCreateTime
+        FROM
+        ACT_HI_TASKINST HTI
+
+        INNER JOIN ACT_HI_PROCINST HPI ON HTI.PROC_INST_ID_ = HPI.PROC_INST_ID_
+        inner JOIN blade_user su on HPI.START_USER_ID_=su.id
+        INNER JOIN ACT_RE_PROCDEF HPD ON HPI.PROC_DEF_ID_ = HPD.ID_
+        WHERE
+        HTI.ASSIGNEE_ = #{query.userId}<!--'1932080214599315458'-->
+        AND HTI.END_TIME_ IS NOT NULL
+        and HPI.PROC_INST_ID_ in (
+        select VAR.PROC_INST_ID_ from ACT_HI_VARINST VAR join ACT_HI_TASKINST taskin on VAR.PROC_INST_ID_=taskin.PROC_INST_ID_
+        <where>
+            VAR.VAR_TYPE_ ='string'
+            and taskin.ASSIGNEE_ = #{query.userId}
+
+            <!-- 浠诲姟鍒涘缓鏃堕棿杩囨护 -->
+            <if test="query.createTimeBegin != null">
+                AND taskin.START_TIME_ &gt;= #{query.createTimeBegin}
+            </if>
+            <if test="query.createTimeEnd != null">
+                AND taskin.START_TIME_ &lt;= #{query.createTimeEnd}
+            </if>
+            <if test="query.keyword != null and query.keyword != ''">
+                <bind name="patternVal" value="'%'+query.keyword+'%'"/>
+                and (
+                    (VAR.name_='title' and TEXT_ like #{patternVal})
+                    or (VAR.name_='drawingNo' and TEXT_ like #{patternVal})
+                    or (VAR.name_='processNo' and TEXT_ like #{patternVal})
+                    or (VAR.name_='machineCode' and TEXT_ like  #{patternVal})
+                    or (VAR.name_='processName' and TEXT_ like #{patternVal})
+                    or (VAR.name_='processEdition' and TEXT_ like #{patternVal})
+                    or (VAR.name_='craftEdition' and TEXT_ like #{patternVal})
+                    or (VAR.name_='productModel' and TEXT_ like  #{patternVal})
+                )
+            </if>
+         </where>
+        )
+    </select>
+
+</mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/DoneQueryService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/DoneQueryService.java
new file mode 100644
index 0000000..012db69
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/DoneQueryService.java
@@ -0,0 +1,101 @@
+
+package org.springblade.mdm.flow.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.flowable.engine.HistoryService;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.TaskService;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.history.HistoricProcessInstanceQuery;
+import org.flowable.engine.task.Comment;
+import org.flowable.task.api.Task;
+import org.flowable.task.api.TaskInfoQuery;
+import org.flowable.task.api.TaskQuery;
+import org.flowable.task.api.history.HistoricTaskInstance;
+import org.flowable.task.api.history.HistoricTaskInstanceQuery;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.entity.MdmFlowProcess;
+import org.springblade.mdm.flow.mapper.DoneMapper;
+import org.springblade.mdm.flow.util.MdmFlowCache;
+import org.springblade.mdm.flow.vo.DoneQueryVO;
+import org.springblade.mdm.flow.vo.FlowVO;
+import org.springblade.system.feign.IUserClient;
+import org.springblade.system.pojo.entity.User;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 娴佺▼涓氬姟瀹炵幇绫�
+ *
+ * @author Chill
+ */
+@Service
+@AllArgsConstructor
+public class DoneQueryService {
+	private final FlowProgramFileService flowProgramFileService;
+	private final HistoryService historyService;
+	private final IUserClient userClient;
+
+	private final DoneMapper doneMapper;
+	//
+	public IPage<FlowVO> selectDonePage(IPage<FlowVO> page, String s, LocalDateTime createTimeBegin, LocalDateTime createTimeEnd, String keyword) {
+		//宸插姙鏂版煡璇�
+		String userId = "" + AuthUtil.getUserId();
+		DoneQueryVO queryVO = new DoneQueryVO();
+
+		queryVO.setSize(Long.valueOf(page.getSize()).intValue());
+		queryVO.setCurrent(Long.valueOf(page.getCurrent()).intValue());
+		queryVO.setUserId(userId);
+		queryVO.setCreateTimeBegin(createTimeBegin);
+		if(createTimeEnd != null){
+			createTimeEnd = createTimeEnd.plusDays(1);
+		}
+		queryVO.setCreateTimeEnd(createTimeEnd);
+		queryVO.setKeyword(keyword);
+
+		IPage<FlowVO> pageDta = doneMapper.pageQuery(page,queryVO);
+		List<String> instIdList = pageDta.getRecords().stream().map(FlowVO::getProcessInstanceId).toList();
+		if(!instIdList.isEmpty()) {
+			List<HistoricProcessInstance> processList = getHistoricProcessInstances(instIdList);
+			Map<String,Map<String,Object>> varmap = new HashMap<>();
+			for(HistoricProcessInstance inst : processList) {
+
+				varmap.put(inst.getId(),inst.getProcessVariables());
+			}
+
+			pageDta.getRecords().forEach(flowVO->{
+				flowVO.setVariables(varmap.get(flowVO.getProcessInstanceId()));
+				flowVO.setFile(this.getFileString(flowVO.getProcessInstanceId()));
+			});
+		}
+		return pageDta;
+	}
+
+	List<HistoricProcessInstance> getHistoricProcessInstances(List<String> processInstanceIds) {
+		return historyService.createHistoricProcessInstanceQuery().includeProcessVariables().
+			processInstanceIds(new HashSet<>(processInstanceIds))
+			.list();
+	}
+
+	/*
+	鑾峰彇鍒楄〃涓殑鏂囦欢鍚�
+	 */
+	String getFileString(String processInstanceId){
+		String result = "";
+		List<FlowProgramFile> fileList = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
+
+		result = String.join(",",fileList.stream().map(FlowProgramFile::getName).toList());
+
+		return result;
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
index 478b0da..860ab08 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
@@ -549,4 +549,5 @@
 
 		return page;
 	}
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/DoneQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/DoneQueryVO.java
new file mode 100644
index 0000000..d6362e5
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/DoneQueryVO.java
@@ -0,0 +1,16 @@
+package org.springblade.mdm.flow.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.support.Query;
+
+import java.time.LocalDateTime;
+
+@Setter
+@Getter
+public class DoneQueryVO extends Query {
+	private String userId;
+	private LocalDateTime createTimeBegin;
+	private LocalDateTime createTimeEnd;
+	private String keyword;
+}

--
Gitblit v1.9.3