Sfoglia il codice sorgente

fix: 单一任务批量审核sql查询超时问题修复

lixuesong 2 anni fa
parent
commit
e4cc4033be

+ 1 - 12
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmReport.java

@@ -29,6 +29,7 @@ import lombok.EqualsAndHashCode;
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 报告审核表
@@ -154,16 +155,4 @@ public class WmReport extends Model<WmReport> {
 	 */
 	@TableField(exist = false)
 	private WmReportOpt reportOpt;
-
-	/**
-	 * 任务类型id
-	 */
-	@TableField(exist = false)
-	private List<String> taskTypeIdList;
-
-	/**
-	 * 报告审批状态:0待审核 1通过,2不通过
-	 */
-	@TableField(exist = false)
-	private List<String> entTaskStatus;
 }

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskMapper.java

@@ -210,5 +210,5 @@ public interface WmTaskMapper extends DataScopeMapper<WmTask> {
 	 * @param wmReport
 	 * @return
 	 */
-	IPage<WmTaskVO> entTaskPageByTaskType(Page<WmTaskVO> page, @Param("query") WmReport wmReport);
+	IPage<WmTaskVO> entTaskPageByTaskType(Page<WmTaskVO> page, @Param("query") Map<String, Object> wmReport);
 }

+ 41 - 6
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java

@@ -70,11 +70,13 @@ import org.springframework.transaction.annotation.Transactional;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 报告审核表
@@ -540,13 +542,44 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 			return R.failed("任务类型不存在");
 		}
 
-		WmReport queryReport = new WmReport();
-		queryReport.setDrugEntId(SecurityUtils.getUser().getDeptId());
-		queryReport.setTaskTypeIdList(baseTaskTypeList.stream().map(WmTaskType::getId).collect(Collectors.toList()));
+		// 根据drugEntId查询WmReport
+//		List<WmReport> wmReportList = wmReportMapper.selectList(Wrappers.<WmReport>lambdaQuery()
+//				.eq(WmReport::getDrugEntId, SecurityUtils.getUser().getDeptId()));
+
+//		WmReport queryReport = new WmReport();
+//		queryReport.setDrugEntId(SecurityUtils.getUser().getDeptId());
+//		queryReport.setTaskTypeIdList(baseTaskTypeList.stream().map(WmTaskType::getId).collect(Collectors.toList()));
+
+		Map<String, Object> entTaskStatusMap = new HashMap<>();
+		entTaskStatusMap.put("drugEntId", SecurityUtils.getUser().getDeptId());
+		entTaskStatusMap.put("taskTypeIdList", baseTaskTypeList.stream().map(WmTaskType::getId).collect(Collectors.toList()));
+//		entTaskStatusMap.put("reportIdList", wmReportList.stream().map(WmReport::getId).collect(Collectors.toList()));
+
+		// 拆分是否通过状态、待审核状态,用于sql优化~
 		if (ArrayUtil.isNotEmpty(entTaskStatus)) {
-			queryReport.setEntTaskStatus(Arrays.asList(entTaskStatus));
+			// 通过状态
+			String approvedStatus = "";
+			// 待审核状态
+			String waitStatus = "";
+			if (ArrayUtil.containsAll(entTaskStatus, "1", "2")) {
+				// 通过+不通过
+				approvedStatus = "1,2";
+			} else if (ArrayUtil.contains(entTaskStatus, "1")) {
+				// 通过
+				approvedStatus = "1";
+			} else if (ArrayUtil.contains(entTaskStatus, "2")) {
+				// 不通过
+				approvedStatus = "2";
+			}
+			if (ArrayUtil.contains(entTaskStatus, "0")) {
+				// 待审核
+				waitStatus = "0";
+			}
+			entTaskStatusMap.put("approvedStatus", approvedStatus);
+			entTaskStatusMap.put("waitStatus", waitStatus);
+//			queryReport.setEntTaskStatus(entTaskStatusMap);
 		}
-		IPage<WmTaskVO> pages = wmTaskMapper.entTaskPageByTaskType(page, queryReport);
+		IPage<WmTaskVO> pages = wmTaskMapper.entTaskPageByTaskType(page, entTaskStatusMap);
 
 		Page<Map<String, Object>> mapPage = new Page<>(pages.getCurrent(), pages.getSize(), pages.getTotal());
 		List<WmTaskVO> taskList = pages.getRecords();
@@ -565,7 +598,9 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 				// 姓名
 				if (StringUtils.isNumeric(wmtask.getTaskUserId())) {
 					SysUser user = sysUserService.getById(Integer.parseInt(wmtask.getTaskUserId()));
-					map.put("taskUsername", user.getRealname());
+					if (user != null) {
+						map.put("taskUsername", user.getRealname());
+					}
 				}
 				// 积分包名称设置到scorePackageId上 适配页面
 				map.put("scorePackageId", wmtask.getScorePackageName());

+ 27 - 22
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

@@ -1335,31 +1335,36 @@ FROM
 
 	<!-- 企业审核查询任务列表 -->
     <select id="entTaskPageByTaskType" resultType="com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO">
-		select t.*, r.report_no, r.score_id, p.typeid, p.score_package_name
+		select t.*, p.typeid, p.score_package_name
 		from wm_task t
-				 left join wm_report r on t.report_one_id = r.id or t.report_second_id = r.id or t.report_drug_id = r.id
-				 left join wm_score_package p on p.id = r.score_id
-		where r.drug_ent_id = #{query.drugEntId}
-		  and t.task_type_id in
+				 left join wm_score_package p on p.id = t.score_package_id
+		where t.task_type_id in
 		<foreach collection="query.taskTypeIdList" item="item" index="index" separator="," open="(" close=")">
 			#{item}
 		</foreach>
-		<foreach collection="query.entTaskStatus" item="item" index="index" separator="or" open="and (" close=")">
-			<if test="item == 1">
-			  (p.typeid = 0 and t.report_drug_approval_opinion = #{item}
-			  or p.typeid = 1 and t.report_drug_approval_opinion = #{item}
-			  or p.typeid = 2 and t.report_one_approval_opinion = #{item})
-			</if>
-			<if test="item == 2">
-				(p.typeid = 0 and t.report_drug_approval_opinion = #{item}
-				or p.typeid = 1 and t.report_drug_approval_opinion = #{item}
-				or p.typeid = 2 and t.report_one_approval_opinion = #{item})
-			</if>
-			<if test="item == 0">
-			  (p.typeid = 0 and t.report_drug_approval_opinion is null
-				or p.typeid = 1 and t.report_drug_approval_opinion is null
-				or p.typeid = 2 and t.report_one_approval_opinion is null)
-			</if>
-		</foreach>
+		and (
+			t.report_one_id in (select id from wm_report where drug_ent_id=#{query.drugEntId})
+		    or
+			t.report_second_id in (select id from wm_report where drug_ent_id=#{query.drugEntId})
+			or
+			t.report_drug_id in (select id from wm_report where drug_ent_id=#{query.drugEntId})
+		)
+		<if test="query.approvedStatus != null and query.waitStatus != '0'">
+			and (t.report_drug_approval_opinion in ( #{query.approvedStatus})
+				or t.report_one_approval_opinion in ( #{query.approvedStatus}))
+		</if>
+		<if test="query.approvedStatus == null and query.waitStatus == '0'">
+			and (t.report_drug_approval_opinion is null
+			or t.report_one_approval_opinion is null)
+		</if>
+		<if test="query.approvedStatus == '1' and query.waitStatus == '0'">
+			and (t.report_drug_approval_opinion != '2'
+			or t.report_one_approval_opinion != '2')
+		</if>
+		<if test="query.approvedStatus == '2' and query.waitStatus == '0'">
+			and (t.report_drug_approval_opinion != '1'
+			or t.report_one_approval_opinion != '1')
+		</if>
+
 	</select>
 </mapper>