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_ >= #{query.createTimeBegin}
+ </if>
+ <if test="query.createTimeEnd != null">
+ AND taskin.START_TIME_ <= #{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