Преглед на файлове

feat: 企业提交任务-校验积分包的企业任务上限

lixuesong преди 1 година
родител
ревизия
055ddb5b1d

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java

@@ -559,6 +559,11 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	 */
 	private Integer mahSettleDeptId;
 
+	/**
+	 * 企业任务上限(单位%)
+	 */
+	private BigDecimal entTaskLimit;
+
 	@AllArgsConstructor
 	public enum PackageStopStatus {
 		NOTHING(0, "不能操作"),

+ 97 - 34
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskServiceImpl.java

@@ -3,12 +3,16 @@ package com.qunzhixinxi.hnqz.admin.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 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.WmTaskContent;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
@@ -26,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -59,25 +64,45 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType61(DeptTaskDTO.TaskType61 params) {
         String taskTypeId = "61";
 
-//        // 查询任务类型启用状态
-//        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-//                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
-//                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
-//        if (CollUtil.isEmpty(rules)) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
-//        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
-//        if (!ArrayUtil.contains(taskTypeIds, "61")) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
+        // 校验任务类型启用状态
+        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().getDeptId())
+                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+        if (CollUtil.isEmpty(rules)) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+        if (!ArrayUtil.contains(taskTypeIds, "61")) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+
 
         // 查询积分包
         WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
 
+        // 校验是否超过可分配积分值
         if (params.getScore() > scorePackage.getKfpjf()) {
             throw new RuntimeException("可分配积分不足!");
         }
 
+        // 校验是否超过积分包企业任务上限
+        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+                .eq(WmTask::getScorePackageId, params.getPackageId())
+                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+
+        int totalScoreSum = 0;
+        totalScoreSum += params.getScore();
+        if (CollUtil.isNotEmpty(queryTaskList)) {
+            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
+        }
+        if (BigDecimal.valueOf(totalScoreSum)
+                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
+                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
+            throw new RuntimeException("已超过积分包的企业任务上限!");
+        }
+
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
         // 任务类型
@@ -118,17 +143,17 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType62(DeptTaskDTO.TaskType62 params) {
         String taskTypeId = "62";
 
-//        // 查询任务类型启用状态
-//        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-//                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
-//                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
-//        if (CollUtil.isEmpty(rules)) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
-//        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
-//        if (!ArrayUtil.contains(taskTypeIds, "61")) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
+        // 查询任务类型启用状态
+        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().getDeptId())
+                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+        if (CollUtil.isEmpty(rules)) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+        if (!ArrayUtil.contains(taskTypeIds, "61")) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
 
         // 查询积分包
         WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
@@ -139,10 +164,29 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
         int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
 
+        // 校验是否超过可分配积分值
         if (score > scorePackage.getKfpjf()) {
             throw new RuntimeException("可分配积分不足!");
         }
 
+        // 校验是否超过积分包企业任务上限
+        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+                .eq(WmTask::getScorePackageId, params.getPackageId())
+                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+
+        int totalScoreSum = 0;
+        totalScoreSum += score;
+        if (CollUtil.isNotEmpty(queryTaskList)) {
+            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
+        }
+        if (BigDecimal.valueOf(totalScoreSum)
+                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
+                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
+            throw new RuntimeException("已超过积分包的企业任务上限!");
+        }
+
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
         // 任务类型
@@ -190,17 +234,17 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params) {
         String taskTypeId = "63";
 
-//        // 查询任务类型启用状态
-//        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-//                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
-//                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
-//        if (CollUtil.isEmpty(rules)) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
-//        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
-//        if (!ArrayUtil.contains(taskTypeIds, "61")) {
-//            throw new RuntimeException("当前企业未开启该任务!");
-//        }
+        // 查询任务类型启用状态
+        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().getDeptId())
+                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+        if (CollUtil.isEmpty(rules)) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+        if (!ArrayUtil.contains(taskTypeIds, "61")) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
 
         // 查询积分包
         WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
@@ -211,10 +255,29 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
         int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
 
+        // 校验是否超过可分配积分值
         if (score > scorePackage.getKfpjf()) {
             throw new RuntimeException("可分配积分不足!");
         }
 
+        // 校验是否超过积分包企业任务上限
+        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+                .eq(WmTask::getScorePackageId, params.getPackageId())
+                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+
+        int totalScoreSum = 0;
+        totalScoreSum += score;
+        if (CollUtil.isNotEmpty(queryTaskList)) {
+            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
+        }
+        if (BigDecimal.valueOf(totalScoreSum)
+                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
+                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
+            throw new RuntimeException("已超过积分包的企业任务上限!");
+        }
+
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
         // 任务类型
@@ -246,7 +309,7 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         log.info("保存taskContent参数:{}", taskContent);
         wmTaskContentService.save(taskContent);
 
-        // 保存企业任务通用方法 TODO 初始化企业任务类型
+        // 保存企业任务通用方法
         this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
 
         return Boolean.TRUE;