Ver código fonte

Merge branch 'feat-20231204-usersignmonthlimit'

lixuesong 1 ano atrás
pai
commit
f28868735a

+ 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;

+ 1 - 31
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -3217,37 +3217,7 @@ public class ApiController {
 				if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), tWmScorePackage.getPackageType1())
 						|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), tWmScorePackage.getPackageType1())) {
 
-					String limitValue = "30000";
-					// 查询当前企业配置的积分限制
-					List<WmTaskSubmissionRule> scoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-							.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(sysUser.getDeptId(), 1))
-							.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-							.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
-
-					// 公共参数配置的
-					String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
-
-					if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
-						Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.stream()
-								.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
-										BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
-						WmTaskSubmissionRule.SubmissionRule submissionRule = null;
-						if (submissionRuleMap.containsKey(sysUser.getDeptId())) {
-							submissionRule = submissionRuleMap.get(sysUser.getDeptId());
-						} else {
-							submissionRule = submissionRuleMap.get(1);
-						}
-						limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
-					} else if (StrUtil.isNotBlank(userTaskSubScore)) {
-						limitValue = userTaskSubScore;
-					}
-
-					boolean fullFlag = wmTaskService.checkUserTaskSubScore(String.valueOf(userVO.getUserId()), limitValue);
-					if (fullFlag) {
-						String info = String.format("每日最多提交%s积分", limitValue);
-						log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
-						return R.failed(info + ",积分+0");
-					}
+					wmTaskContentService.limitScore(sysUser.getUserId(), sysUser.getDeptId(), tWmScorePackage.getPackageType1());
 				}
 
 				List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(

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

@@ -40,4 +40,13 @@ public interface WmTaskContentService extends IService<WmTaskContent> {
 	 * @return 创建结果
 	 */
 	boolean saveTaskContent1(WmTaskDTO.OnOutPartyCreate resource);
+
+	/**
+	 * 校验积分上线
+	 *
+	 * @param userId  用户id
+	 * @param deptId  部门id
+	 * @param pkgType 积分包类型
+	 */
+	void limitScore(Integer userId, Integer deptId, String pkgType);
 }

+ 32 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java

@@ -30,6 +30,7 @@ import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaHospitalMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskContentMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysPublicParamService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
@@ -81,6 +82,7 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, WmTaskContent> implements WmTaskContentService {
 	private final WmTaskService wmTaskService;
+	private final WmTaskMapper wmTaskMapper;
 	private final SysUserService sysUserService;
 	private final WmTaskTypeService wmTaskTypeService;
 	private final WmScorePackageService wmScorePackageService;
@@ -150,9 +152,10 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 	 * @param deptId  部门id
 	 * @param pkgType 积分包类型
 	 */
-	private void limitScore(Integer userId, Integer deptId, String pkgType) {
+	public void limitScore(Integer userId, Integer deptId, String pkgType) {
 
-		if ("1".equals(pkgType)) {
+		if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), pkgType)
+				|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), pkgType)) {
 			String limitValue = "30000";
 			// 查询当前企业配置的积分限制
 			List<WmTaskSubmissionRule> scoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
@@ -184,6 +187,33 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 				log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
 				throw new RuntimeException(info);
 			}
+
+			// 月度积分限制
+			String monthLimitValue;
+			List<WmTaskSubmissionRule> monthScoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+					.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(deptId, 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(deptId) ? submissionRuleMap.get(deptId) : 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);
+			}
 		}
 	}
 

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

@@ -12,11 +12,11 @@ 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.enums.PackageTypeEnum;
+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;
 import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
@@ -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;
@@ -228,42 +230,6 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 		}
 	}
 
-	/**
-	 * 校验积分限制
-	 *
-	 * @param entId  企业ID
-	 * @param userId 用户ID
-	 */
-	private void checkLimitScore(Integer entId, Integer userId) {
-		String limitValue = "30000";
-		// 查询当前企业配置的积分限制
-		List<WmTaskSubmissionRule> scoreLimitRuleList = wmTaskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-				.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(entId, 1))
-				.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-				.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
-
-		// 公共参数配置的
-		String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
-
-		if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
-			Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.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);
-			limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
-		} else if (StrUtil.isNotBlank(userTaskSubScore)) {
-			limitValue = userTaskSubScore;
-		}
-
-		boolean fullFlag = wmTaskService.checkUserTaskSubScore(userId.toString(), limitValue);
-		if (fullFlag) {
-			String info = String.format("每日最多提交%s积分", limitValue);
-			log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
-			throw new BizException(info);
-		}
-
-	}
-
 	/**
 	 * 获取积分包领取明细
 	 *
@@ -529,7 +495,9 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 
 		Set<Integer> signIds = signs.stream().map(WmUserSign::getId).collect(Collectors.toSet());
 
-		List<WmTaskContent> taskContents = taskContentService.list(Wrappers.<WmTaskContent>lambdaQuery().in(WmTaskContent::getTemp3, signIds));
+		List<WmTaskContent> taskContents = taskContentService.list(Wrappers.<WmTaskContent>lambdaQuery()
+				.in(WmTaskContent::getTemp3, signIds)
+				.isNull(WmTaskContent::getTemp30));
 
 		List<WmTaskContent> availTaskContents = taskContents.stream().filter(con -> StrUtil.isNotBlank(con.getTemp3())).collect(Collectors.toList());
 
@@ -677,8 +645,9 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 		WmScorePackageStatus packageStatus = checkPkgStatus(tWmScorePackage.getId(), sysU.getUserId());
 
 		// 校验积分限制
-		if ("1".equals(tWmScorePackage.getPackageType1())) {
-			checkLimitScore(sysU.getDeptId(), sysU.getUserId());
+		if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), tWmScorePackage.getPackageType1())
+				|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), tWmScorePackage.getPackageType1())) {
+			wmTaskContentService.limitScore(sysU.getUserId(), sysU.getDeptId(), "1");
 		}
 
 		// 设置参数 && 保存

+ 37 - 2
hnqz-upms/hnqz-upms-biz/src/test/java/com/qunzhixinxi/hnqz/admin/WmTaskSubmissionRuleServiceTest.java

@@ -8,6 +8,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskSubmissionPercentRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskSubmissionRuleService;
@@ -19,11 +20,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -43,6 +46,8 @@ public class WmTaskSubmissionRuleServiceTest {
 	private WmTaskSubmissionRuleService taskSubmissionRuleService;
     @Autowired
     private SysDeptService deptService;
+	@Autowired
+	private WmTaskMapper wmTaskMapper;
 
 	/**
 	 * 初始化企业的特定任务规则
@@ -111,12 +116,12 @@ public class WmTaskSubmissionRuleServiceTest {
     /**
      * 增量更新企业的任务类型配置数据
      */
-//    @Test
+    @Test
     public void initNewTaskTypeConfig() {
 
         // 平台新增的任务类型
         Set<String> taskTypeIds = new HashSet<>();
-        taskTypeIds.add("64");
+        taskTypeIds.add("73");
 
             // 查询待修改企业的规则
             List<WmTaskSubmissionPercentRule> queryRules = taskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
@@ -139,4 +144,34 @@ public class WmTaskSubmissionRuleServiceTest {
                 });
             }
     }
+
+	/**
+	 * 月度积分限制校验
+	 */
+//	@Test
+	public void checkMonthScoreLimit() {
+		Integer entId = 1611890565;
+		// 月度积分限制
+		String monthLimitValue;
+		List<WmTaskSubmissionRule> monthScoreLimitRuleList = taskSubmissionRuleService.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("4714", startOfMonth, startOfNextMonth);
+
+		System.out.println("total=" + total + " limit=" + monthLimitValue);
+	}
 }