Przeglądaj źródła

feat: 月度积分上限需求

lixuesong 1 rok temu
rodzic
commit
a7f3b95b6d

+ 2 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java

@@ -56,7 +56,8 @@ public final class UpmsType {
 		PHARMACY_VISIT("PHARMACY_VISIT", TaskCategory.CUSTOMER_VISIT, "药店拜访"),
 		INVENTORY_INFO_COLLECTION("INVENTORY_INFO_COLLECTION", TaskCategory.MARKET_INFO_COLLECTION, "库存信息搜集"),
 		HOSPITAL_INFO_COLLECTION("HOSPITAL_INFO_COLLECTION", TaskCategory.MARKET_INFO_COLLECTION, "医院信息搜集"),
-		SCORE_LIMIT("SCORE_LIMIT", TaskCategory.SCORE_LIMIT, "积分限制");
+		SCORE_LIMIT("SCORE_LIMIT", TaskCategory.SCORE_LIMIT, "积分限制"),
+		MONTH_SCORE_LIMIT("MONTH_SCORE_LIMIT", TaskCategory.SCORE_LIMIT, "每月积分限制");
 
 		@EnumValue
 		private final String type;

+ 29 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

@@ -12,8 +12,8 @@ import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.entity.*;
-import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.CommonFlag;
@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
@@ -59,6 +60,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageStatusService wmScorePackageStatusService;
 	private final WmTaskService wmTaskService;
+	private final WmTaskMapper wmTaskMapper;
 	private final WmTaskContentService taskContentService;
 	private final SysPublicParamService sysPublicParamService;
 	private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
@@ -262,6 +264,32 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 			throw new BizException(info);
 		}
 
+		// 月度积分限制
+		String monthLimitValue;
+		List<WmTaskSubmissionRule> monthScoreLimitRuleList = wmTaskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+				.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet("entId", 1))
+				.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
+				.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.MONTH_SCORE_LIMIT));
+		if (CollUtil.isNotEmpty(monthScoreLimitRuleList)) {
+			Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = monthScoreLimitRuleList.stream()
+					.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
+							BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
+			WmTaskSubmissionRule.SubmissionRule submissionRule = submissionRuleMap.containsKey(entId) ? submissionRuleMap.get(entId) : submissionRuleMap.get(1);
+			monthLimitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
+		} else {
+			monthLimitValue = "300000";
+		}
+
+		LocalDate localDate = LocalDate.now();
+		LocalDateTime startOfMonth = localDate.withDayOfMonth(1).atStartOfDay();
+		LocalDateTime startOfNextMonth = localDate.plusMonths(1).withDayOfMonth(1).atStartOfDay();
+		int total = wmTaskMapper.getUserTaskSubScore(String.valueOf(userId), startOfMonth, startOfNextMonth);
+
+		if (total >= Integer.parseInt(monthLimitValue)) {
+			String info = String.format("每月最多提交%s积分", monthLimitValue);
+			log.warn("系统当前限制月度积分上限:【{}】,提示:【{}】", monthLimitValue, info);
+			throw new BizException(info);
+		}
 	}
 
 	/**