|
@@ -119,6 +119,7 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.UUID;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -2624,6 +2625,140 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
return Boolean.TRUE;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 快速批量任务审核
|
|
|
+ *
|
|
|
+ * @param idList 任务id列表
|
|
|
+ * @param taskStatus 审核状态(3-通过,4-不通过)
|
|
|
+ * @param taskStatusInfo 审批说明
|
|
|
+ * @return 审核结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean batchApprovalTask(List<String> idList, String taskStatus, String taskStatusInfo) {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Integer operatorId = SecurityUtils.getUser().getId();
|
|
|
+
|
|
|
+ // 批量查询任务
|
|
|
+ List<WmTask> wmTasks = this.listByIds(idList);
|
|
|
+ Map<String, WmTask> taskMap = wmTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
+ // 批量查询积分包
|
|
|
+ List<WmScorePackage> scorePackages = wmScorePackageService.listByIds(wmTasks.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet()));
|
|
|
+ Map<String, WmScorePackage> scorePackageMap = scorePackages.stream().collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
|
|
|
+
|
|
|
+ idList.forEach(id -> {
|
|
|
+ // 查询这条任务
|
|
|
+ WmTask queryTask = taskMap.get(id);
|
|
|
+ if (queryTask == null) {
|
|
|
+ throw new RuntimeException("任务不存在");
|
|
|
+ }
|
|
|
+ if (CollUtil.toList(TaskStatusEnum.APPROVED.val(), TaskStatusEnum.FAIL_APPROVED.val()).contains(queryTask.getTaskStatus())) {
|
|
|
+ throw new RuntimeException("存在已审核的任务");
|
|
|
+ }
|
|
|
+ if (queryTask.getReviewTaskCount() > 0) {
|
|
|
+ throw new RuntimeException("存在已复审的任务");
|
|
|
+ }
|
|
|
+ if (queryTask.getReportDrugId() != null || queryTask.getReportOneId() != null || queryTask.getReportSecondId() != null) {
|
|
|
+ throw new RuntimeException("已生成报告");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询积分包
|
|
|
+ String scorePackageId = queryTask.getScorePackageId();
|
|
|
+ WmScorePackage wmScorePackage = scorePackageMap.get(scorePackageId);
|
|
|
+ if (!StrUtil.equals(ScorePackageStatusEnum.IN_PROGRESS.val(), wmScorePackage.getScorePackageStatus())) {
|
|
|
+ throw new RuntimeException("积分包状态不支持审核");
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP1:更新task状态
|
|
|
+ LambdaUpdateWrapper<WmTask> taskUpdateWrapper = Wrappers.<WmTask>lambdaUpdate()
|
|
|
+ .eq(WmTask::getId, id)
|
|
|
+ .eq(queryTask.getUpdateTime() != null, WmTask::getUpdateTime, queryTask.getUpdateTime())
|
|
|
+ .eq(queryTask.getUpdateUser() != null, WmTask::getUpdateUser, queryTask.getUpdateUser())
|
|
|
+ .set(WmTask::getTaskStatus, taskStatus)
|
|
|
+ .set(WmTask::getRealFlag, "0")
|
|
|
+ .set(WmTask::getTaskStatusInfo, taskStatusInfo)
|
|
|
+ .set(WmTask::getUpdateTime, now)
|
|
|
+ .set(WmTask::getUpdateUser, operatorId);
|
|
|
+ log.info("task更新参数:条件id={},updateTime={},updateUser={},更新项taskStatus={},realFlag={},taskStatusInfo={},updateTime={},updateUser={}",
|
|
|
+ id, queryTask.getUpdateTime(), queryTask.getUpdateUser(), taskStatus, "0", taskStatusInfo, now, operatorId);
|
|
|
+ boolean taskUpdate = this.update(taskUpdateWrapper);
|
|
|
+ if (!taskUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询积分包下审核通过和审核中的任务
|
|
|
+ List<WmTask> wmTaskList = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getScorePackageId, scorePackageId)
|
|
|
+ .ne(WmTask::getTaskStatus, TaskStatusEnum.FAIL_APPROVED.val())
|
|
|
+ .eq(WmTask::getRealFlag, "0"));
|
|
|
+ int totalCount = wmTaskList.stream().map(WmTask::getScore).reduce(0, Integer::sum);
|
|
|
+ // 标记任务总积分 是否超过积分包的值
|
|
|
+ boolean taskAddFlag = totalCount >= wmScorePackage.getScore();
|
|
|
+ String taskAddFlagStr = taskAddFlag ? "0" : "1";
|
|
|
+ // 查询领包记录
|
|
|
+ List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
|
+ .eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val())
|
|
|
+ .eq(WmScorePackageStatus::getPackageId, wmScorePackage.getId()));
|
|
|
+ if (CollUtil.isNotEmpty(packageStatusList)) {
|
|
|
+ // STEP2:修改领包记录状态
|
|
|
+ packageStatusList.forEach(packageStatus -> {
|
|
|
+ LambdaUpdateWrapper<WmScorePackageStatus> updateWrapper = Wrappers.<WmScorePackageStatus>lambdaUpdate()
|
|
|
+ .eq(WmScorePackageStatus::getId, packageStatus.getId())
|
|
|
+ .eq(packageStatus.getUpdateTime() != null, WmScorePackageStatus::getUpdateTime, packageStatus.getUpdateTime())
|
|
|
+ .eq(packageStatus.getUpdateUser() != null, WmScorePackageStatus::getUpdateUser, packageStatus.getUpdateUser())
|
|
|
+ .set(WmScorePackageStatus::getTaskAddFlag, taskAddFlagStr)
|
|
|
+ .set(WmScorePackageStatus::getUpdateTime, now)
|
|
|
+ .set(WmScorePackageStatus::getUpdateUser, operatorId);
|
|
|
+ log.info("pacakgeStatus更新参数:条件id={},updateTime={},updateUser={},更新项taskAddFlag={},updateTime={},updateUser={}",
|
|
|
+ packageStatus.getId(), packageStatus.getUpdateTime(), packageStatus.getUpdateUser(), taskAddFlagStr, now, operatorId);
|
|
|
+ boolean pacakgeStatusUpdate = wmScorePackageStatusService.update(updateWrapper);
|
|
|
+ if (!pacakgeStatusUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP3:修改积分包状态
|
|
|
+ String packageFinishStatus = totalCount >= wmScorePackage.getScore() ?
|
|
|
+ PackageFinishStatusEnum.NOT_COMPLETE.val() : PackageFinishStatusEnum.COMPLETED.val();
|
|
|
+ LambdaUpdateWrapper<WmScorePackage> scorePackageUpdateWrapper = Wrappers.<WmScorePackage>lambdaUpdate()
|
|
|
+ .eq(WmScorePackage::getId, scorePackageId)
|
|
|
+ .eq(wmScorePackage.getUpdateTime() != null, WmScorePackage::getUpdateTime, wmScorePackage.getUpdateTime())
|
|
|
+ .eq(wmScorePackage.getUpdateUser() != null, WmScorePackage::getUpdateUser, wmScorePackage.getUpdateUser())
|
|
|
+ .set(WmScorePackage::getPackageFinishStatus, packageFinishStatus)
|
|
|
+ .set(WmScorePackage::getTaskAddFlag, taskAddFlagStr)
|
|
|
+ .set(WmScorePackage::getUpdateUser, wmScorePackage.getUpdateUser())
|
|
|
+ .set(WmScorePackage::getUpdateTime, now);
|
|
|
+ if (taskAddFlag) {
|
|
|
+ // 任务总积分超过积分包的值
|
|
|
+ // 积分包完成时间
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getPackageFinishTime, now);
|
|
|
+ // 积分包状态:有关联积分包,则设置为‘已完成待审批’;没有关联积分包,则直接设置为‘已完成待结算’
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getScorePackageStatus, StringUtils.isNotBlank(wmScorePackage.getRelationScoreId()) ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_APPROVAL.val() : ScorePackageStatusEnum.TO_BE_SETTLED.val());
|
|
|
+ } else {
|
|
|
+ // 任务总积分小于积分包的值
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.IN_PROGRESS.val());
|
|
|
+ }
|
|
|
+ log.info("scorePackage更新参数:条件id={},updateTime={},updateUser={},更新项packageFinishStatus={},taskAddFlag={},updateTime={},updateUser={}",
|
|
|
+ scorePackageId, wmScorePackage.getUpdateTime(), wmScorePackage.getUpdateUser(), packageFinishStatus, taskAddFlagStr, now, operatorId);
|
|
|
+ boolean packageUpdate = wmScorePackageService.update(scorePackageUpdateWrapper);
|
|
|
+ if (!packageUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP4: 如果是源头积分包,则判断是否审核入库调查信息
|
|
|
+ if (StringUtils.isBlank(wmScorePackage.getRelationScoreId())) {
|
|
|
+ this.task15_30_16_18(queryTask, taskStatus, taskStatusInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 移除图片缓存
|
|
|
+ this.removePicCache(queryTask);
|
|
|
+ });
|
|
|
+
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新调查信息数据
|
|
|
*
|