|
@@ -45,6 +45,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
|
|
|
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.PackageStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
|
|
@@ -288,6 +289,200 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
|
|
|
wmTaskService.update(updateWrapper);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 结算报告审批-任务复审
|
|
|
+ *
|
|
|
+ * @param reportId 报告id
|
|
|
+ * @param taskId 任务id
|
|
|
+ * @param approvalOpinion 审核状态(1-通过,2-不通过)
|
|
|
+ * @param approvalInfo 审批说明
|
|
|
+ * @return 复审结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean reviewTask(String reportId, String taskId, String approvalOpinion, String approvalInfo) {
|
|
|
+ WmReport queryReport = this.getById(reportId);
|
|
|
+ if(queryReport == null){
|
|
|
+ throw new RuntimeException("未查询到报告信息");
|
|
|
+ }
|
|
|
+ if (!CollUtil.toList(ReportEnum.REPORT_STATUS_SETTLE.getType(), ReportEnum.REPORT_STATUS_PART_APPROVAL.getType()).contains(queryReport.getReportStatus())) {
|
|
|
+ throw new RuntimeException("报告状态不支持复审");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询任务
|
|
|
+ WmTask queryTask = wmTaskService.getById(taskId);
|
|
|
+
|
|
|
+ if (queryTask.getReviewTaskCount() > 0) {
|
|
|
+ throw new RuntimeException("不能重复审核");
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Integer operatorId = SecurityUtils.getUser().getId();
|
|
|
+
|
|
|
+ // 查询企业对应的积分包
|
|
|
+ Integer reportScorePackageId = queryReport.getScoreId();
|
|
|
+ WmScorePackage reportScorePackage = wmScorePackageService.getById(reportScorePackageId);
|
|
|
+ // 查询任务对应的积分包
|
|
|
+ String taskScorePackageId = queryTask.getScorePackageId();
|
|
|
+ WmScorePackage taskScorePackage = wmScorePackageService.getById(taskScorePackageId);
|
|
|
+
|
|
|
+ // STEP1: 更新任务企业审核状态
|
|
|
+ LambdaUpdateWrapper<WmTask> updateTaskWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateTaskWrapper.eq(WmTask::getId, taskId);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 审核状态同步
|
|
|
+ String taskStatus = "1".equals(approvalOpinion) ?
|
|
|
+ TaskStatusEnum.APPROVED.val() : TaskStatusEnum.FAIL_APPROVED.val();
|
|
|
+ updateTaskWrapper.set(WmTask::getTaskStatus, taskStatus);
|
|
|
+ updateTaskWrapper.set(WmTask::getRealFlag, "0");
|
|
|
+ updateTaskWrapper.set(WmTask::getDeptReviewTaskCount, 1);
|
|
|
+ updateTaskWrapper.set(WmTask::getUpdateTime, now);
|
|
|
+ updateTaskWrapper.set(WmTask::getUpdateUser, operatorId);
|
|
|
+ log.info("task更新参数:条件id={},updateTime={},updateUser={},更新项approvalOpinion={},approvalInfo={},taskStatus={},realFlag={},deptReviewTaskCount={},updateTime={},updateUser={}",
|
|
|
+ taskId, queryTask.getUpdateTime(), queryTask.getUpdateUser(), approvalOpinion, approvalInfo, taskStatus, "0", 1, 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)
|
|
|
+ .eq(WmTask::getScorePackageId, taskScorePackageId));
|
|
|
+
|
|
|
+ // 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("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询已提交的任务(除去审核不通过的任务)
|
|
|
+ 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 >= reportScorePackage.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 >= reportScorePackage.getScore() ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_SETTLED.val() : ScorePackageStatusEnum.IN_PROGRESS.val();
|
|
|
+ String taskAddFlagStr = totalTaskScore >= reportScorePackage.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(reportScorePackage.getUpdateTime() != null, WmScorePackage::getUpdateTime, reportScorePackage.getUpdateTime())
|
|
|
+ .eq(reportScorePackage.getUpdateUser() != null, WmScorePackage::getUpdateUser, reportScorePackage.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 >= reportScorePackage.getScore() ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_SETTLED.val() : ScorePackageStatusEnum.IN_PROGRESS.val();
|
|
|
+ String taskAddFlagStr = totalScore >= reportScorePackage.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(reportScorePackage.getUpdateTime() != null, WmScorePackage::getUpdateTime, reportScorePackage.getUpdateTime())
|
|
|
+ .eq(reportScorePackage.getUpdateUser() != null, WmScorePackage::getUpdateUser, reportScorePackage.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)
|