Jelajahi Sumber

评估-已办数据查询调整

徐滕 3 hari lalu
induk
melakukan
712621950b

+ 17 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/mapper/FlowMapper.java

@@ -53,4 +53,21 @@ public interface FlowMapper extends BaseMapper <Flow> {
      * @return
      */
     String getActNameByDefId(@Param("procDefId") String procDefId);
+
+    /**
+     * 根据业务表名和ID查询编号(用于历史数据关联项兜底)
+     * @param businessTable 业务表名
+     * @param businessId 业务ID
+     * @return 编号
+     */
+    @InterceptorIgnore(tenantLine = "true")
+    String getBusinessNo(@Param("businessTable") String businessTable, @Param("businessId") String businessId);
+
+    /**
+     * 根据关联编号关键字查询匹配的流程实例ID(用于搜索兜底)
+     * @param keyword 搜索关键字
+     * @return 匹配的流程实例ID列表
+     */
+    @InterceptorIgnore(tenantLine = "true")
+    List<String> getProcInsIdsByRelatedNo(@Param("keyword") String keyword);
 }

+ 53 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/mapper/xml/FlowMapper.xml

@@ -84,4 +84,57 @@
 		  AND del_flag = '0'
 	</select>
 
+	<select id="getBusinessNo" resultType="java.lang.String">
+		<choose>
+			<when test="businessTable == 'work_contract_file' or businessTable == 'work_contract_cancel'">
+				SELECT i.no FROM ${businessTable} f
+				JOIN work_contract_info i ON f.contract_info_id = i.id
+				WHERE f.id = #{businessId} AND f.del_flag = '0' LIMIT 1
+			</when>
+			<when test="businessTable == 'program_archive' or businessTable == 'program_audit'">
+				SELECT p.no FROM ${businessTable} a
+				JOIN program_project_list_info p ON a.program_id = p.id
+				WHERE a.id = #{businessId} AND a.del_flag = '0' LIMIT 1
+			</when>
+			<when test="businessTable == 'program_cancellation'">
+				SELECT p.no FROM program_cancellation c
+				JOIN program_project_list_info p ON c.project_id = p.id
+				WHERE c.id = #{businessId} AND c.del_flag = '0' LIMIT 1
+			</when>
+			<when test="businessTable == 'proofread_issued'">
+				SELECT p.no FROM proofread_issued a
+				JOIN program_project_list_info p ON a.project_id = p.id
+				WHERE a.id = #{businessId} AND a.del_flag = '0' LIMIT 1
+			</when>
+			<when test="businessTable == 'signature_daily_office_work' or businessTable == 'signature_project_report_relation'">
+				SELECT number FROM ${businessTable} WHERE id = #{businessId} AND del_flag = '0' LIMIT 1
+			</when>
+			<otherwise>
+				SELECT no FROM ${businessTable} WHERE id = #{businessId} AND del_flag = '0' LIMIT 1
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="getProcInsIdsByRelatedNo" resultType="java.lang.String">
+		SELECT proc_ins_id FROM program_project_list_info WHERE no LIKE CONCAT('%', #{keyword}, '%') AND del_flag = '0' AND proc_ins_id IS NOT NULL
+		UNION
+		SELECT f.proc_ins_id FROM work_contract_file f JOIN work_contract_info i ON f.contract_info_id = i.id WHERE i.no LIKE CONCAT('%', #{keyword}, '%') AND f.del_flag = '0' AND f.proc_ins_id IS NOT NULL
+		UNION
+		SELECT c.proc_ins_id FROM work_contract_cancel c JOIN work_contract_info i ON c.contract_info_id = i.id WHERE i.no LIKE CONCAT('%', #{keyword}, '%') AND c.del_flag = '0' AND c.proc_ins_id IS NOT NULL
+		UNION
+		SELECT proc_ins_id FROM finance_invoice WHERE no LIKE CONCAT('%', #{keyword}, '%') AND del_flag = '0' AND proc_ins_id IS NOT NULL
+		UNION
+		SELECT a.proc_ins_id FROM program_archive a JOIN program_project_list_info p ON a.program_id = p.id WHERE p.no LIKE CONCAT('%', #{keyword}, '%') AND a.del_flag = '0' AND a.proc_ins_id IS NOT NULL
+		UNION
+		SELECT a.proc_ins_id FROM program_audit a JOIN program_project_list_info p ON a.program_id = p.id WHERE p.no LIKE CONCAT('%', #{keyword}, '%') AND a.del_flag = '0' AND a.proc_ins_id IS NOT NULL
+		UNION
+		SELECT c.proc_ins_id FROM program_cancellation c JOIN program_project_list_info p ON c.project_id = p.id WHERE p.no LIKE CONCAT('%', #{keyword}, '%') AND c.del_flag = '0' AND c.proc_ins_id IS NOT NULL
+		UNION
+		SELECT a.proc_ins_id FROM proofread_issued a JOIN program_project_list_info p ON a.project_id = p.id WHERE p.no LIKE CONCAT('%', #{keyword}, '%') AND a.del_flag = '0' AND a.proc_ins_id IS NOT NULL
+		UNION
+		SELECT proc_ins_id FROM signature_daily_office_work WHERE number LIKE CONCAT('%', #{keyword}, '%') AND del_flag = '0' AND proc_ins_id IS NOT NULL
+		UNION
+		SELECT proc_ins_id FROM signature_project_report_relation WHERE number LIKE CONCAT('%', #{keyword}, '%') AND del_flag = '0' AND proc_ins_id IS NOT NULL
+	</select>
+
 </mapper>

+ 36 - 3
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -546,7 +546,12 @@ public class FlowTaskService {
      * @return
      */
     public Page <HisTaskVo> historicList(Page <HisTaskVo> page, Flow act,String type) {
-        String userId = userApi.getByToken ( TokenProvider.getCurrentToken ( ) ).getId ( );
+        UserDTO currentUser = userApi.getByToken ( TokenProvider.getCurrentToken ( ) );
+        String userId = currentUser.getId ( );
+        // 判断是否评估公司用户
+        boolean isPgCompany = currentUser.getCompanyDTO() != null
+                && currentUser.getCompanyDTO().getName() != null
+                && currentUser.getCompanyDTO().getName().contains("评估");
 
         HistoricTaskInstanceQuery histTaskQuery = historyService.createHistoricTaskInstanceQuery ( ).taskAssignee ( userId ).finished ( )
                 .includeProcessVariables ( ).orderByHistoricTaskInstanceEndTime ( ).desc ( );
@@ -567,8 +572,15 @@ public class FlowTaskService {
         if (StringUtils.isNotEmpty(act.getAssigneeId())) {
             histTaskQuery.processVariableValueLike (FlowableConstant.USERNAME,"%"+ act.getAssigneeId()+"%");
         }
-        if (StringUtils.isNotEmpty(act.getRelatedNo())) {
-            histTaskQuery.processVariableValueLike (FlowableConstant.TITLE, "%" + act.getRelatedNo() + "%");
+        if (StringUtils.isNotEmpty(act.getRelatedNo()) && isPgCompany) {
+            // 仅评估公司:从业务表查匹配的procInsId(兼容新老数据)
+            List<String> matchedProcInsIds = flowMapper.getProcInsIdsByRelatedNo(act.getRelatedNo());
+            if (matchedProcInsIds != null && !matchedProcInsIds.isEmpty()) {
+                histTaskQuery.processInstanceIdIn(matchedProcInsIds);
+            } else {
+                // 业务表没匹配到,回退到标题模糊匹配
+                histTaskQuery.processVariableValueLike(FlowableConstant.TITLE, "%" + act.getRelatedNo() + "%");
+            }
         }
         // 查询总数
         page.setTotal ( histTaskQuery.count ( ) );
@@ -596,6 +608,27 @@ public class FlowTaskService {
                 if (titleObj != null) {
                     hisTaskVo.setRelatedNo(HisTaskVo.extractRelatedNo(titleObj.toString()));
                 }
+                // 历史数据兜底:仅评估流程,标题中无编号时通过businessKey查业务表补全
+                if (StringUtils.isBlank(hisTaskVo.getRelatedNo()) && processName != null && processName.contains("评估")) {
+                    try {
+                        HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()
+                                .processInstanceId(histTask.getProcessInstanceId()).singleResult();
+                        if (hpi != null && StringUtils.isNotBlank(hpi.getBusinessKey())) {
+                            String bk = hpi.getBusinessKey();
+                            int colonIdx = bk.indexOf(':');
+                            if (colonIdx > 0) {
+                                String bizTable = bk.substring(0, colonIdx);
+                                String bizId = bk.substring(colonIdx + 1);
+                                String bizNo = flowMapper.getBusinessNo(bizTable, bizId);
+                                if (StringUtils.isNotBlank(bizNo)) {
+                                    hisTaskVo.setRelatedNo(bizNo);
+                                }
+                            }
+                        }
+                    } catch (Exception e) {
+                        // 查询失败不影响主流程
+                    }
+                }
                 List <Task> currentTaskList = taskService.createTaskQuery ( ).processInstanceId ( histTask.getProcessInstanceId ( ) ).list ( );
                 if ( ((List) currentTaskList).size ( ) > 0 ) {
                     TaskVo currentTaskVo = new TaskVo ( currentTaskList.get ( 0 ) );