|
@@ -1,20 +1,28 @@
|
|
|
package com.qunzhixinxi.hnqz.admin.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.WmTask;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.mapper.WmTaskSubmissionPercentRuleMapper;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskSubmissionPercentRuleService;
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
|
|
|
import com.qunzhixinxi.hnqz.common.core.constant.enums.CommonFlag;
|
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 任务提交百分比规则
|
|
@@ -30,6 +38,8 @@ public class WmTaskSubmissionPercentRuleServiceImpl
|
|
|
|
|
|
private final WmTaskService wmTaskService;
|
|
|
|
|
|
+ private final WmTaskTypeService wmTaskTypeService;
|
|
|
+
|
|
|
/**
|
|
|
* 校验任务百分比限制规则(达到要求的积分包,【任务配置】-【百分比限制】所选的任务总完成积分值不得大于积分包值*百分比)
|
|
|
*
|
|
@@ -39,21 +49,57 @@ public class WmTaskSubmissionPercentRuleServiceImpl
|
|
|
@Override
|
|
|
public R<?> checkPercentRule(WmScorePackage scorePackage, Integer deptId) {
|
|
|
|
|
|
+ AtomicBoolean failFlag = new AtomicBoolean(false);
|
|
|
+ AtomicReference<String> message = new AtomicReference<>("");
|
|
|
+
|
|
|
// 查询配置的百分比规则
|
|
|
List<WmTaskSubmissionPercentRule> percentRules = this.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
|
|
|
.eq(WmTaskSubmissionPercentRule::getDeptId, deptId)
|
|
|
.eq(WmTaskSubmissionPercentRule::getOptFlag, CommonFlag.OptFlag.OK));
|
|
|
|
|
|
- percentRules.forEach(percentRule -> {
|
|
|
- List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
- .eq(WmTask::getRealFlag, "0")
|
|
|
- .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
|
|
|
- .in(WmTask::getScorePackageId, scorePackage.getId())
|
|
|
- .in(WmTask::getTaskTypeId, "15", "30")
|
|
|
- .ne(WmTask::getTaskStatus, "4"));
|
|
|
+ // 根据batchId分组
|
|
|
+ Map<String, List<WmTaskSubmissionPercentRule>> batchRules = percentRules.stream().collect(Collectors.groupingBy(WmTaskSubmissionPercentRule::getBatchId));
|
|
|
+
|
|
|
+ // 查询taskType
|
|
|
+ List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
|
|
|
+ .eq(WmTaskType::getTaskTypeLevel, "1")
|
|
|
+ .eq(WmTaskType::getDelFlag, "0")
|
|
|
+ .eq(WmTaskType::getEnableFlag, "0"));
|
|
|
+ // taskType通过id分组(key为parentId,value为taskTypeId的set)
|
|
|
+ Map<String, String> taskTypeIdMap = taskTypeList.stream()
|
|
|
+ .collect(Collectors.toMap(WmTaskType::getId, WmTaskType::getTaskTypeName));
|
|
|
+
|
|
|
+ batchRules.forEach((batchId, rules) -> {
|
|
|
+
|
|
|
+ // 获取该分组下所有taskTypeId
|
|
|
+ List<String> allTaskTypeIds = rules.stream()
|
|
|
+ .flatMap(percentRule -> Arrays.stream(percentRule.getRule().getTaskTypeIds()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ WmTaskSubmissionPercentRule.PercentRule rule = rules.get(0).getRule();
|
|
|
+
|
|
|
+ // 指定任务类型做的任务总积分不得大于积分包值的rule.limitPercent%(积分包值小于rule.startScore不做限制)
|
|
|
+ if (scorePackage.getScore() > rule.getStartScore()) {
|
|
|
+ List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getRealFlag, "0")
|
|
|
+ .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
|
|
|
+ .in(WmTask::getScorePackageId, scorePackage.getId())
|
|
|
+ .in(WmTask::getTaskTypeId, allTaskTypeIds)
|
|
|
+ .ne(WmTask::getTaskStatus, "4"));
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(wmTaskList)) {
|
|
|
+ int totalScore = scorePackage.getScore();
|
|
|
+ int partScore = wmTaskList.stream().mapToInt(WmTask::getScore).sum();
|
|
|
+ if (partScore * 100.0 / totalScore > Float.parseFloat(rule.getLimitPercent())) {
|
|
|
+ failFlag.set(true);
|
|
|
+
|
|
|
+ String taskTypeNames = allTaskTypeIds.stream().map(taskTypeIdMap::get).collect(Collectors.joining("、"));
|
|
|
+ message.set(String.format("%s任务类型的任务总积分不得大于积分包值的%s", taskTypeNames, rule.getLimitPercent()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
- // TODO
|
|
|
|
|
|
- return null;
|
|
|
+ return failFlag.get() ? R.failed(null, message.get()) : R.ok();
|
|
|
}
|
|
|
}
|