yangys
2025-08-24 23c64b1fc39e1cbaca216d718480f82658362cff
已办任务查询问题修复
已添加4个文件
已修改2个文件
211 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/MyFlowController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/DoneMapper.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/DoneQueryService.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/DoneQueryVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
    /**
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);
}
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>
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;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
@@ -549,4 +549,5 @@
        return page;
    }
}
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;
}