Browse Source

feat: 企业批量任务审核

lixuesong 2 years ago
parent
commit
174f14603f

+ 17 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java

@@ -17,6 +17,7 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -235,6 +236,22 @@ public class WmReportController {
 		return wmReportService.approvalReport(wmReport1,taskIds,approvalOpinion,approvalInfo);
 	}
 
+	/**
+	 * 结算报告--审批
+	 * reportStatus 1:待提交,2:已提交待审批 3:已部分审批  4:已退回 5:已审批待结单 6:已结单
+	 * @param taskIds 所选任务id
+	 * @return R
+	 */
+	@SysLog("批量任务类型结算报告--审批" )
+	@GetMapping("/approvalReportByTaskType" )
+	public R approvalReport(@RequestParam(value = "taskIds") List<String> taskIds,
+							String approvalOpinion,String approvalInfo) {
+		if(CollUtil.isEmpty(taskIds)){
+			return R.failed("taskIds必填");
+		}
+		return wmReportService.approvalReportByTaskType(taskIds,  approvalOpinion, approvalInfo);
+	}
+
 
 
 	/**
@@ -263,9 +280,6 @@ public class WmReportController {
 	 */
 	@GetMapping("/task-page-by-type")
 	public R<?> taskPageByTaskType(Page<WmTaskVO> page, String taskTypeName) {
-		if (StrUtil.isBlank(taskTypeName)) {
-			return R.failed("taskTypeName必填");
-		}
 
 		return wmReportService.taskPageByTaskType(page, taskTypeName);
 	}

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

@@ -28,6 +28,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 报告审核表
@@ -158,5 +159,5 @@ public class WmReport extends Model<WmReport> {
 	 * 任务类型id
 	 */
 	@TableField(exist = false)
-	private String taskTypeId;
+	private List<String> taskTypeIdList;
 }

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmReportService.java

@@ -41,6 +41,16 @@ public interface WmReportService extends IService<WmReport> {
 
 	R approvalReport(WmReport wmReport, List<String> taskIds, String approvalOpinion, String approvalInfo);
 
+	/**
+	 * 企业根据任务类型审核任务
+	 *
+	 * @param taskIds
+	 * @param approvalOpinion
+	 * @param approvalInfo
+	 * @return
+	 */
+	R<?> approvalReportByTaskType(List<String> taskIds, String approvalOpinion, String approvalInfo);
+
 	R getTaskListPage(Page page, WmReport wmReport, Integer isApprovalPage);
 
 	IPage<WmReport> getReportListPage(Page page, WmReport wmReport, String scoreId, String name);

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

@@ -37,6 +37,8 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigJsonDTO;
 import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
@@ -48,6 +50,7 @@ import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeConfigService;
 import com.qunzhixinxi.hnqz.admin.service.WmReportService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
@@ -68,6 +71,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 /**
@@ -91,6 +95,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 	private final WmDaDistributionService wmDaDistributionService;
 	private final WmDaPharmacyService wmDaPharmacyService;
 	private final WmDaHospitalService wmDaHospitalService;
+	private final WmDeptTaskTypeConfigService wmDeptTaskTypeConfigService;
 	private final RedisTemplate<String,String> redisTemplate;
 
 	@Override
@@ -395,6 +400,43 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 		return R.ok("审批成功");
 	}
 
+	/**
+	 * 企业根据任务类型审核任务
+	 *
+	 * @param taskIds
+	 * @param approvalOpinion
+	 * @param approvalInfo
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R<?> approvalReportByTaskType(List<String> taskIds, String approvalOpinion, String approvalInfo) {
+		LambdaQueryWrapper<WmTask> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.in(WmTask::getId, taskIds);
+		List<WmTask> wmTaskList = wmTaskService.list(queryWrapper);
+
+		// 根据task任务表 反查report报告表
+		// 以reportId(reportDrugId或reportOneId字段)为key进行分类
+		Map<Integer, List<WmTask>> reportIdMap = wmTaskList.stream()
+				.filter(wmTask -> wmTask.getReportDrugId() != null || wmTask.getReportOneId() != null)
+				.collect(Collectors.groupingBy(wmTask -> wmTask.getReportDrugId() != null ?
+						wmTask.getReportDrugId() : wmTask.getReportOneId()));
+
+		// 调用原有审核方法
+		AtomicBoolean successFlag = new AtomicBoolean(true);
+		reportIdMap.forEach((reportId, wmTasks) -> {
+			WmReport queryReport = this.getById(reportId);
+			List<String> taskIdList = wmTasks.stream().map(WmTask::getId).collect(Collectors.toList());
+			log.info("企业批量审核任务reportId={}, taskIds={}", reportId, taskIdList);
+			R approvalReportResult = this.approvalReport(queryReport, taskIdList, approvalOpinion, approvalInfo);
+			if (approvalReportResult.getCode() != 0) {
+				successFlag.set(false);
+			}
+		});
+
+		return successFlag.get() ? R.ok("批量审批成功") : R.failed("批量审批失败");
+	}
+
 	/**
 	 * 报告管理--查看
 	 * @param page
@@ -473,18 +515,29 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 	@Override
 	public R<?> taskPageByTaskType(Page<WmTaskVO> page, String taskTypeName) {
 
-		WmTaskType baseTaskType = wmTaskTypeService.getOne(Wrappers.<WmTaskType>lambdaQuery()
+		LambdaQueryWrapper<WmTaskType> queryWrapper = Wrappers.<WmTaskType>lambdaQuery()
 				.eq(WmTaskType::getTaskTypeLevel, "1")
-				.eq(WmTaskType::getTaskTypeName, taskTypeName)
-				.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val()));
-		if (baseTaskType == null) {
-			log.warn("任务类型不存在tastTypeName={}", taskTypeName);
+				.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val());
+				if (StrUtil.isNotBlank(taskTypeName)) {
+					queryWrapper.eq(WmTaskType::getTaskTypeName, taskTypeName);
+				} else {
+					// 查询该企业配置的任务类型
+					WmDeptTaskTypeConfigDTO deptTaskTypeConfig =
+							wmDeptTaskTypeConfigService.getDeptTaskTypeConfig(SecurityUtils.getUser().getDeptId());
+					List<String> taskTypeNames = deptTaskTypeConfig.getConfigList().stream()
+							.map(WmDeptTaskTypeConfigJsonDTO::getTaskTypeName)
+							.collect(Collectors.toList());
+					queryWrapper.in(WmTaskType::getTaskTypeName, taskTypeNames);
+				}
+		List<WmTaskType> baseTaskTypeList = wmTaskTypeService.list(queryWrapper);
+		if (CollUtil.isEmpty(baseTaskTypeList)) {
+			log.warn("任务类型不存在tastTypeName={}", baseTaskTypeList);
 			return R.failed("任务类型不存在");
 		}
 
 		WmReport queryReport = new WmReport();
 		queryReport.setDrugEntId(SecurityUtils.getUser().getDeptId());
-		queryReport.setTaskTypeId(baseTaskType.getId());
+		queryReport.setTaskTypeIdList(baseTaskTypeList.stream().map(WmTaskType::getId).collect(Collectors.toList()));
 		IPage<WmTaskVO> pages = wmTaskMapper.entTaskPageByTaskType(page, queryReport);
 
 		Page<Map<String, Object>> mapPage = new Page<>(pages.getCurrent(), pages.getSize(), pages.getTotal());

+ 4 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

@@ -1340,7 +1340,10 @@ FROM
 				 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 = #{query.taskTypeId}
+		  and t.task_type_id in
+		<foreach collection="query.taskTypeIdList" item="item" index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
 		  and (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)