|
@@ -56,6 +56,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigJsonDTO;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.PackageStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
|
|
@@ -523,6 +524,226 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
|
|
|
return Boolean.TRUE;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 结算报告审批-快速批量任务审核
|
|
|
+ *
|
|
|
+ * @param reportId 报告id
|
|
|
+ * @param taskIdList 任务id列表
|
|
|
+ * @param approvalOpinion 审核状态(1-通过,2-不通过)
|
|
|
+ * @param approvalInfo 审批说明
|
|
|
+ * @return 审核结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean batchApprovalTask(String reportId, List<String> taskIdList, String approvalOpinion, String approvalInfo) {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Integer operatorId = SecurityUtils.getUser().getId();
|
|
|
+
|
|
|
+ WmReport queryReport = this.getById(reportId);
|
|
|
+ if(queryReport == null){
|
|
|
+ throw new RuntimeException("未查询到报告信息");
|
|
|
+ }
|
|
|
+ if (!CollUtil.toList(ReportEnum.REPORT_STATUS_PART_APPROVAL.getType(), ReportEnum.REPORT_STATUS_APPROVAL.getType()).contains(queryReport.getReportStatus())) {
|
|
|
+ throw new RuntimeException("报告状态不支持审核");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量查询任务
|
|
|
+ List<WmTask> wmTasks = wmTaskService.listByIds(taskIdList);
|
|
|
+ Map<String, WmTask> taskMap = wmTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
|
|
|
+
|
|
|
+ Set<String> scorePackageIds = wmTasks.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
|
|
|
+ if (scorePackageIds.size() > 1) {
|
|
|
+ throw new RuntimeException("只能处理同一个积分包下的任务");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量查询积分包
|
|
|
+ List<WmScorePackage> taskScorePackages = wmScorePackageService.listByIds(scorePackageIds);
|
|
|
+ Map<String, WmScorePackage> scorePackageMap = taskScorePackages.stream().collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
|
|
|
+
|
|
|
+ // 查询企业对应的积分包
|
|
|
+ Integer reportScorePackageId = queryReport.getScoreId();
|
|
|
+ WmScorePackage reportScorePackage = wmScorePackageService.getById(reportScorePackageId);
|
|
|
+
|
|
|
+ taskIdList.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.getReportDrugId() != null || queryTask.getReportOneId() != null || queryTask.getReportSecondId() != null) {
|
|
|
+ throw new RuntimeException("已生成报告");
|
|
|
+ }
|
|
|
+
|
|
|
+ WmScorePackage taskScorePackage = scorePackageMap.get(queryTask.getScorePackageId());
|
|
|
+ if (!StrUtil.equals(ScorePackageStatusEnum.IN_PROGRESS.val(), taskScorePackage.getScorePackageStatus())
|
|
|
+ || !StrUtil.equals(ScorePackageStatusEnum.TO_BE_APPROVAL.val(), taskScorePackage.getScorePackageStatus())) {
|
|
|
+ throw new RuntimeException("积分包状态不支持审核");
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP1: 更新任务企业审核状态
|
|
|
+ LambdaUpdateWrapper<WmTask> updateTaskWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateTaskWrapper.eq(WmTask::getId, id);
|
|
|
+ updateTaskWrapper.eq(queryTask.getUpdateTime() != null, WmTask::getUpdateTime, queryTask.getUpdateTime());
|
|
|
+ updateTaskWrapper.eq(queryTask.getUpdateUser() != null, WmTask::getUpdateUser, queryTask.getUpdateUser());
|
|
|
+ List<Integer> roles = SecurityUtils.getRoles();
|
|
|
+ if (roles.contains(3)) {
|
|
|
+ // 药企
|
|
|
+ updateTaskWrapper.set(WmTask::getReportDrugApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
|
|
|
+ updateTaskWrapper.set(WmTask::getReportDrugApprovalOpinion, approvalOpinion);
|
|
|
+ updateTaskWrapper.set(WmTask::getReportDrugApprovalInfo, approvalInfo);
|
|
|
+ if ("1".equals(reportScorePackage.getTypeid())) {
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalOpinion, approvalOpinion);
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
|
|
|
+ }
|
|
|
+ } else if (roles.contains(4)) {
|
|
|
+ //一级代理商类型
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalOpinion, approvalOpinion);
|
|
|
+ updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
|
|
|
+ if ("2".equals(reportScorePackage.getTypeid())) {
|
|
|
+ updateTaskWrapper.set(WmTask::getReportSecondApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
|
|
|
+ updateTaskWrapper.set(WmTask::getReportSecondApprovalOpinion, approvalOpinion);
|
|
|
+ updateTaskWrapper.set(WmTask::getReportSecondApprovalInfo, approvalInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 审核不通过状态同步
|
|
|
+ if ("2".equals(approvalOpinion)) {
|
|
|
+ updateTaskWrapper.set(WmTask::getTaskStatus, TaskStatusEnum.FAIL_APPROVED.val());
|
|
|
+ }
|
|
|
+ updateTaskWrapper.set(WmTask::getRealFlag, "0");
|
|
|
+ updateTaskWrapper.set(WmTask::getUpdateTime, now);
|
|
|
+ updateTaskWrapper.set(WmTask::getUpdateUser, operatorId);
|
|
|
+ log.info("task更新参数:条件id={},updateTime={},updateUser={},更新项approvalOpinion={},approvalInfo={},realFlag={},updateTime={},updateUser={}",
|
|
|
+ id, queryTask.getUpdateTime(), queryTask.getUpdateUser(), approvalOpinion, approvalInfo, 0, now, operatorId);
|
|
|
+ boolean updateTask = wmTaskService.update(updateTaskWrapper);
|
|
|
+ if (!updateTask) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ WmTask taskSelect = new WmTask();
|
|
|
+ if ("0".equals(reportScorePackage.getTypeid())) {//药企
|
|
|
+ taskSelect.setReportDrugId(Integer.valueOf(reportId));
|
|
|
+ taskSelect.setReportDrugApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
|
|
|
+ } else if ("1".equals(reportScorePackage.getTypeid())) {//一级代理商类型
|
|
|
+ taskSelect.setReportOneId(Integer.valueOf(reportId));
|
|
|
+ taskSelect.setReportOneApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
|
|
|
+ } else if ("2".equals(reportScorePackage.getTypeid())) {//二级代理商类型
|
|
|
+ taskSelect.setReportSecondId(Integer.valueOf(reportId));
|
|
|
+ taskSelect.setReportSecondApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
|
|
|
+ }
|
|
|
+ // 查询提交给企业的待审核的任务
|
|
|
+ int toApproveTaskCount = wmTaskMapper.selectCount(Wrappers.lambdaQuery(taskSelect));
|
|
|
+
|
|
|
+ // STEP2: 更新报告状态
|
|
|
+ LambdaUpdateWrapper<WmReport> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(WmReport::getId, Integer.valueOf(reportId));
|
|
|
+ updateWrapper.eq(queryReport.getUpdateTime() != null, WmReport::getUpdateTime, queryReport.getUpdateTime());
|
|
|
+ updateWrapper.eq(queryReport.getUpdatePeople() != null, WmReport::getUpdatePeople, queryReport.getUpdatePeople());
|
|
|
+ // 待审核任务数为空 则说明提交给企业的任务都已审核,否则是部分审核
|
|
|
+ String reportStatus = toApproveTaskCount <= 0 ?
|
|
|
+ ReportEnum.REPORT_STATUS_SETTLE.getType() : ReportEnum.REPORT_STATUS_PART_APPROVAL.getType();
|
|
|
+ updateWrapper.set(WmReport::getReportStatus, reportStatus);
|
|
|
+ updateWrapper.set(WmReport::getUpdatePeople, operatorId);
|
|
|
+ updateWrapper.set(WmReport::getUpdateTime, now);
|
|
|
+ log.info("report更新参数:条件id={},updateTime={},updatePeople={},更新项reportStatus={},updatePeople={},updateTime={}",
|
|
|
+ reportId, queryReport.getUpdateTime(), queryReport.getUpdatePeople(), reportStatus, operatorId, now);
|
|
|
+ boolean updateReport = this.update(updateWrapper);
|
|
|
+ if (!updateReport) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ taskScorePackages.forEach(taskScorePackage -> {
|
|
|
+ String taskScorePackageId= taskScorePackage.getId();
|
|
|
+ // 查询已提交的任务(除去审核不通过的任务)
|
|
|
+ List<WmTask> submitedTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getScorePackageId, taskScorePackageId)
|
|
|
+ .ne(WmTask::getTaskStatus, TaskStatusEnum.FAIL_APPROVED.val())
|
|
|
+ .eq(WmTask::getRealFlag, "0"));
|
|
|
+ // 统计判断任务累计积分是否达到积分包的预设值
|
|
|
+ int totalTaskScore = submitedTaskList.stream().mapToInt(WmTask::getScore).sum();
|
|
|
+
|
|
|
+ // STEP3: 更新领包记录
|
|
|
+ List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
|
+ .eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val())
|
|
|
+ .eq(WmScorePackageStatus::getPackageId, taskScorePackageId));
|
|
|
+ if (CollUtil.isNotEmpty(packageStatusList)) {
|
|
|
+ String taskAddFlagStr = totalTaskScore >= taskScorePackage.getScore() ? "0" : "1";
|
|
|
+ // 修改领包记录状态
|
|
|
+ packageStatusList.forEach(packageStatus -> {
|
|
|
+ LambdaUpdateWrapper<WmScorePackageStatus> updateStatusWrapper = 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(updateStatusWrapper);
|
|
|
+ if (!pacakgeStatusUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP4: 更新积分包状态
|
|
|
+ if ("2".equals(approvalOpinion)) {
|
|
|
+ // 审核不通过,则释放积分值,从而直接可以重新做任务
|
|
|
+ String scorePackageStatus = totalTaskScore >= taskScorePackage.getScore() ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_SETTLED.val() : ScorePackageStatusEnum.IN_PROGRESS.val();
|
|
|
+ String taskAddFlagStr = totalTaskScore >= taskScorePackage.getScore() ? "0" : "1";
|
|
|
+ // 更新积分包
|
|
|
+ log.info("scorePackage更新参数:条件id={},updateTime={},updateUser={},更新项scorePackageStatus={},taskAddFlag={},updateTime={},updateUser={}",
|
|
|
+ taskScorePackageId, taskScorePackage.getUpdateTime(), taskScorePackage.getUpdateUser(), scorePackageStatus, taskAddFlagStr, now, operatorId);
|
|
|
+ boolean updateScorePackage = wmScorePackageService.update(Wrappers.<WmScorePackage>lambdaUpdate()
|
|
|
+ .eq(WmScorePackage::getId, taskScorePackageId)
|
|
|
+ .eq(taskScorePackage.getUpdateTime() != null, WmScorePackage::getUpdateTime, taskScorePackage.getUpdateTime())
|
|
|
+ .eq(taskScorePackage.getUpdateUser() != null, WmScorePackage::getUpdateUser, taskScorePackage.getUpdateUser())
|
|
|
+ .set(WmScorePackage::getScorePackageStatus, scorePackageStatus)
|
|
|
+ .set(WmScorePackage::getTaskAddFlag, taskAddFlagStr)
|
|
|
+ .set(WmScorePackage::getUpdateTime, now)
|
|
|
+ .set(WmScorePackage::getUpdateUser, operatorId));
|
|
|
+ if (!updateScorePackage) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+ } else if ("1".equals(approvalOpinion)) {
|
|
|
+ // 审核通过,则判断企业审核通过积分值是否达到积分包的预设值
|
|
|
+ List<WmTask> approvalTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getScorePackageId, taskScorePackageId)
|
|
|
+ .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val())
|
|
|
+ .eq(WmTask::getRealFlag, "0")
|
|
|
+ .and(wrapper -> wrapper.eq(WmTask::getReportDrugApprovalOpinion, "1")
|
|
|
+ .or().eq(WmTask::getReportOneApprovalOpinion, "1")));
|
|
|
+ int totalScore = approvalTaskList.stream().mapToInt(WmTask::getScore).sum();
|
|
|
+ String scorePackageStatus = totalScore >= taskScorePackage.getScore() ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_SETTLED.val() : ScorePackageStatusEnum.IN_PROGRESS.val();
|
|
|
+ String taskAddFlagStr = totalScore >= taskScorePackage.getScore() ? "0" : "1";
|
|
|
+ // 更新积分包
|
|
|
+ log.info("scorePackage更新参数:条件id={},updateTime={},updateUser={},更新项scorePackageStatus={},taskAddFlag={},updateTime={},updateUser={}",
|
|
|
+ taskScorePackageId, taskScorePackage.getUpdateTime(), taskScorePackage.getUpdateUser(), scorePackageStatus, taskAddFlagStr, now, operatorId);
|
|
|
+ boolean updateScorePackage = wmScorePackageService.update(Wrappers.<WmScorePackage>lambdaUpdate()
|
|
|
+ .eq(WmScorePackage::getId, taskScorePackageId)
|
|
|
+ .eq(taskScorePackage.getUpdateTime() != null, WmScorePackage::getUpdateTime, taskScorePackage.getUpdateTime())
|
|
|
+ .eq(taskScorePackage.getUpdateUser() != null, WmScorePackage::getUpdateUser, taskScorePackage.getUpdateUser())
|
|
|
+ .set(WmScorePackage::getScorePackageStatus, scorePackageStatus)
|
|
|
+ .set(WmScorePackage::getTaskAddFlag, taskAddFlagStr)
|
|
|
+ .set(WmScorePackage::getUpdateTime, now)
|
|
|
+ .set(WmScorePackage::getUpdateUser, operatorId));
|
|
|
+ if (!updateScorePackage) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public R approvalReport(WmReport wmReport, List<String> taskIds, String approvalOpinion, String approvalInfo) {
|