瀏覽代碼

Merge branch 'feat-20230920-b2b' into temp-pre

lixuesong 1 年之前
父節點
當前提交
3dd1d75f16

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

@@ -15,9 +15,9 @@ 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.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
@@ -37,6 +37,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 企业任务控制器
@@ -49,7 +50,7 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class WmDeptTaskController {
 
-    private final WmScorePackageMapper wmScorePackageMapper;
+    private final WmScorePackageService wmScorePackageService;
     private final WmDeptTaskService wmDeptTaskService;
     private final WmTaskService wmTaskService;
     private final WmTaskTypeService wmTaskTypeService;
@@ -64,10 +65,7 @@ public class WmDeptTaskController {
     public R<?> listRelatedEntPackage() {
         Integer deptId = SecurityUtils.getUser().getDeptId();
 
-        WmScorePackage queryPackage = new WmScorePackage();
-        queryPackage.setDeptId(String.valueOf(deptId));
-        queryPackage.setTypeid("0,1,2");
-        List<WmScorePackage> packageList = wmScorePackageMapper.getScorePackagekfpjf(queryPackage);
+        List<WmScorePackage> packageList = wmScorePackageService.getScorePackagekfpjf(deptId, new String[]{"0", "1", "2"});
 
         List<Map<String, String>> results = new ArrayList<>();
         if (CollUtil.isNotEmpty(packageList)) {
@@ -75,6 +73,8 @@ public class WmDeptTaskController {
                 Map<String, String> result = new HashMap<>();
                 result.put("id", wmScorePackage.getId());
                 result.put("scorePackageName", wmScorePackage.getScorePackageName());
+                result.put("score", String.valueOf(wmScorePackage.getScore()));
+                result.put("kfpjf", String.valueOf(wmScorePackage.getKfpjf()));
                 results.add(result);
             });
         }
@@ -104,7 +104,7 @@ public class WmDeptTaskController {
         if (StrUtil.isNotBlank(scorePackageName)) {
             queryWrapper.like(WmScorePackage::getScorePackageName, scorePackageName);
         }
-        List<WmScorePackage> relatedPackages = wmScorePackageMapper.selectList(queryWrapper);
+        List<WmScorePackage> relatedPackages = wmScorePackageService.list(queryWrapper);
         if (CollUtil.isEmpty(relatedPackages)) {
             return R.ok(page);
         }

+ 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, "不能操作"),

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java

@@ -212,4 +212,13 @@ public interface WmScorePackageService extends IService<WmScorePackage> {
 	 * @return {@link Boolean} 结果
 	 */
 	Boolean terminatePackageForDept(String packageId, UpmsType.TerminatePackageType terminatePackageType);
+
+	/**
+	 * 获取指定企业下积分包的可分配积分值
+	 *
+	 * @param deptId 企业id
+	 * @param typeIds 企业类型
+	 * @return 结果
+	 */
+	List<WmScorePackage> getScorePackagekfpjf(Integer deptId, String[] typeIds);
 }

+ 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, taskTypeId)) {
+            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, taskTypeId)) {
+            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, taskTypeId)) {
+            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;

+ 68 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java

@@ -542,11 +542,11 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 			relatedService = sysDeptMapper.selectById(wmScorePackage.getRelatedService());
 		}
 		//查询分配给当前用户机构的积分包,deptid为当前用户,而且typeid=1或2
-		String deptId = SecurityUtils.getUser().getDeptId() + "";
-		wmScorePackage.setDeptId(deptId);
-		wmScorePackage.setTypeid("0,1,2");
-		wmScorePackage.setSendPackageDeptId(wmScorePackage.getRelatedService());
-		List<WmScorePackage> packageList = wmScorePackageMapper.getScorePackagekfpjf(wmScorePackage);
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+//		wmScorePackage.setDeptId(deptId);
+//		wmScorePackage.setTypeid("0,1,2");
+//		wmScorePackage.setSendPackageDeptId(wmScorePackage.getRelatedService());
+		List<WmScorePackage> packageList = this.getScorePackagekfpjf(deptId, new String[]{"0", "1", "2"});
 
 		for (WmScorePackage wmScorePackage1 : packageList) {
 			List<WmScoreTaskType> taskTypelist = wmScoreTaskTypeMapper.getScoreTaskTypeByScoreId(wmScorePackage1.getId());
@@ -3173,4 +3173,67 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		newRechargeRecord.setCreateTime(now);
 		sysDeptRechargeRecordMapper.insert(newRechargeRecord);
 	}
+
+	/**
+	 * 获取指定企业下积分包的可分配积分值
+	 *
+	 * @param deptId  企业id
+	 * @param typeIds 企业类型
+	 * @return 结果
+	 */
+	@Override
+	public List<WmScorePackage> getScorePackagekfpjf(Integer deptId, String[] typeIds) {
+		// 查询企业下的积分包
+		List<WmScorePackage> packages = this.list(Wrappers.<WmScorePackage>lambdaQuery()
+				.eq(WmScorePackage::getDeptId, deptId)
+				.in(WmScorePackage::getTypeid, typeIds)
+				.eq(WmScorePackage::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val())
+				.eq(WmScorePackage::getOldPackage, "0"));
+
+		if (CollUtil.isNotEmpty(packages)) {
+			// 查询积分包的子包
+			Set<String> packageIdSet = packages.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+			List<WmScorePackage> subPackages = this.list(Wrappers.<WmScorePackage>lambdaQuery()
+					.in(WmScorePackage::getRelationScoreId, packageIdSet)
+					.eq(WmScorePackage::getDelFlag, DelEnum.NOT_DEL.val())
+					.eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val()));
+			Map<String, Integer> relatedPackageScoresMap = new HashMap<>();
+			if (CollUtil.isNotEmpty(subPackages)) {
+				// 已分配的积分
+				relatedPackageScoresMap = subPackages.stream()
+						.collect(Collectors.groupingBy(WmScorePackage::getRelationScoreId, Collectors.summingInt(WmScorePackage::getScore)));
+			}
+
+			// 查询积分包的任务
+			List<WmTask> tasks = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
+					.in(WmTask::getScorePackageId, packageIdSet)
+                    .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+                    .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+					.eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+			Map<String, Integer> relatedTaskScoresMap = new HashMap<>();
+			if (CollUtil.isNotEmpty(tasks)) {
+                // 已分配的积分
+                relatedTaskScoresMap = tasks.stream()
+                        .collect(Collectors.groupingBy(WmTask::getScorePackageId, Collectors.summingInt(WmTask::getScore)));
+            }
+
+			Map<String, Integer> finalRelatedPackageScoresMap = relatedPackageScoresMap;
+			Map<String, Integer> finalRelatedTaskScoresMap = relatedTaskScoresMap;
+			packages.forEach(pkg -> {
+				String packageId = pkg.getId();
+				// 统计可分配积分值
+                Integer kfpjf = pkg.getKfpjf();
+                if (finalRelatedPackageScoresMap.containsKey(packageId)) {
+                    kfpjf += finalRelatedPackageScoresMap.get(packageId);
+                }
+                if (finalRelatedTaskScoresMap.containsKey(packageId)) {
+                    kfpjf += finalRelatedTaskScoresMap.get(packageId);
+                }
+                pkg.setKfpjf(kfpjf);
+			});
+		}
+
+		return packages;
+	}
 }