Ver código fonte

feat: 查询企业任务关联积分包过滤条件:有剩余积分值的大包,且已提交企业任务未达到上限的

lixuesong 1 ano atrás
pai
commit
a36e3651d6

+ 28 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskController.java

@@ -17,6 +17,7 @@ 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.ReportEnum;
+import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
@@ -35,6 +36,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -73,13 +75,36 @@ public class WmDeptTaskController {
 
         List<Map<String, String>> results = new ArrayList<>();
         if (CollUtil.isNotEmpty(packageList)) {
+            Set<String> packageIdSet = packageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+            // 校验是否超过积分包企业任务上限
+            List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+                    .in(WmTask::getScorePackageId, packageIdSet)
+                    .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+                    .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+                    .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+            Map<String, Integer> packageTasksScoreMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(queryTaskList)) {
+                packageTasksScoreMap = queryTaskList.stream()
+                        .collect(Collectors.groupingBy(WmTask::getScorePackageId,
+                                Collectors.summingInt(WmTask::getScore)));
+            }
+
+            Map<String, Integer> finalPackageTasksScoreMap = packageTasksScoreMap;
             packageList.stream()
                     .filter(wmScorePackage -> {
-                        if (wmScorePackage.getKfpjf() > 0) {
+                        Integer tasksScore = finalPackageTasksScoreMap.getOrDefault(wmScorePackage.getId(), 0);
+                        // 是否超过企业任务上限
+                        boolean deptLimitFlag = BigDecimal.valueOf(tasksScore)
+                                .compareTo(BigDecimal.valueOf(wmScorePackage.getScore())
+                                        .multiply(wmScorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) <= 0;
+                        // 同时满足以下条件:
+                        // 1.可分配积分值大于0的
+                        // 2.没有超过企业任务上限
+                        if (wmScorePackage.getKfpjf() > 0 && deptLimitFlag
+                                && wmScorePackage.getEntTaskLimit().compareTo(BigDecimal.ZERO) > 0) {
                             return true;
-                        } else {
-                            return false;
                         }
+                        return false;
                     }).forEach(wmScorePackage -> {
                         Map<String, String> result = new HashMap<>();
                         result.put("id", wmScorePackage.getId());