浏览代码

Merge branch 'hotfix-mpshare-20210706' of googol/YY_BE_2 into master

屈桐 4 年之前
父节点
当前提交
a9454c1fcd

+ 92 - 25
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -3129,6 +3129,7 @@ public class ApiController {
 				}
 				}
 				wmTask.setScore(score);
 				wmTask.setScore(score);
 
 
+				boolean needToCheckLimit = true;
 				if ("open".equals(type)) {
 				if ("open".equals(type)) {
 					List<WmWkArticleShare> wmWkArticleShareList = wmWkArticleShareService.list(Wrappers.
 					List<WmWkArticleShare> wmWkArticleShareList = wmWkArticleShareService.list(Wrappers.
 							<WmWkArticleShare>lambdaQuery()
 							<WmWkArticleShare>lambdaQuery()
@@ -3173,6 +3174,14 @@ public class ApiController {
 
 
 						}
 						}
 					}
 					}
+
+					// 校验打开结果
+					if ("article".equalsIgnoreCase(taskCategoryName)) {
+						needToCheckLimit = checkArticleOpenLimit(wmWkArticle,sysUser,wmTask);
+					} else if ("album".equalsIgnoreCase(taskCategoryName)) {
+						needToCheckLimit = checkAlbumOpenLimit(wmWkAlbum, sysUser, wmTask);
+					}
+
 				}
 				}
 
 
 				// 记录分享记录
 				// 记录分享记录
@@ -3190,6 +3199,7 @@ public class ApiController {
 				wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
 				wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
 				wmTask.setTaskContentId(String.valueOf(wmWkArticleShare.getId()));
 				wmTask.setTaskContentId(String.valueOf(wmWkArticleShare.getId()));
 				wmTask.setCreateTime(now);
 				wmTask.setCreateTime(now);
+				wmTask.setDeptId(String.valueOf(userVO.getDeptId()));
 
 
 				if (isZbRole(userVO.getRoleList(), 5)) {
 				if (isZbRole(userVO.getRoleList(), 5)) {
 					wmTask.setTaskUserType("5");
 					wmTask.setTaskUserType("5");
@@ -3199,29 +3209,30 @@ public class ApiController {
 					wmTask.setTaskUserType("6");
 					wmTask.setTaskUserType("6");
 				}
 				}
 
 
-				wmTask.setDeptId(String.valueOf(userVO.getDeptId()));
-
-				// 保存前最后校验一遍文章分享和文章阅读以及产品分享和产品分享阅读所做的积分值是否在比例范围之内(初始设定为30%)
-				String value = sysPublicParamService.getSysPublicParamKeyToValue("SHARE_READ_TASK_SCORE_UPPER_LIMIT_RATIO");
-				value = StringUtils.isEmpty(value) ? "0.3" : value;
-				log.warn("系统当前分享类及分享阅读类积分上限:【{}】", value);
-				int limit = (int) (tWmScorePackage.getScore() * Double.parseDouble(value));
-				List<WmTask> taskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
-						// 两对分享阅读任务
-						.in(WmTask::getTaskTypeId, Arrays.asList("8", "9", "10", "11"))
-						// 同一个积分包
-						.eq(WmTask::getScorePackageId, tWmScorePackage.getId())
-						// 分享人
-						.eq(WmTask::getTaskUserId, shareUserId)
-						// 审核不通过
-						.ne(WmTask::getTaskStatus, "4")
-				);
 
 
-				int sum = taskList.stream().mapToInt(WmTask::getScore).sum();
-				log.info("当前积分包值限制上限为:{},当前任务积分和为:{}", limit, sum);
-				if (sum >= limit) {
-					log.warn("完成任务积分值已经超过上限,设置为0");
-					wmTask.setScore(0);
+				// 判断是否保存前最后校验一遍文章分享和文章阅读以及产品分享和产品分享阅读所做的积分值是否在比例范围之内(初始设定为30%)
+				if (needToCheckLimit) {
+					String value = sysPublicParamService.getSysPublicParamKeyToValue("SHARE_READ_TASK_SCORE_UPPER_LIMIT_RATIO");
+					value = StringUtils.isEmpty(value) ? "0.3" : value;
+					log.warn("系统当前分享类及分享阅读类积分上限:【{}】", value);
+					int limit = (int) (tWmScorePackage.getScore() * Double.parseDouble(value));
+					List<WmTask> taskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+							// 两对分享阅读任务
+							.in(WmTask::getTaskTypeId, Arrays.asList("8", "9", "10", "11"))
+							// 同一个积分包
+							.eq(WmTask::getScorePackageId, tWmScorePackage.getId())
+							// 分享人
+							.eq(WmTask::getTaskUserId, shareUserId)
+							// 审核不通过
+							.ne(WmTask::getTaskStatus, "4")
+					);
+
+					int sum = taskList.stream().mapToInt(WmTask::getScore).sum();
+					log.info("当前积分包值限制上限为:{},当前任务积分和为:{}", limit, sum);
+					if (sum >= limit) {
+						log.warn("完成任务积分值已经超过上限,设置为0");
+						wmTask.setScore(0);
+					}
 				}
 				}
 
 
 				boolean isSave = wmTaskService.save(wmTask);   //保存任务
 				boolean isSave = wmTaskService.save(wmTask);   //保存任务
@@ -3303,6 +3314,60 @@ public class ApiController {
 		return R.ok();
 		return R.ok();
 	}
 	}
 
 
+
+	/**
+	 * 文章打开判断
+	 * @param article 文章
+	 * @param user    分享用户
+	 * @param task	  任务
+	 */
+	private Boolean checkArticleOpenLimit(WmWkArticle article, SysUser user, WmTask task){
+		Assert.notNull(article);
+		LocalDateTime now = LocalDateTime.now();
+		final String cacheKey = CacheConstants.ARTICLE_PERSONAL_SHARE_KEY + DateUtil.format(now, "yyyyMMdd:")
+				+ user.getUserId() + ":" + article.getId();
+		Integer times = (Integer) redisTemplate.opsForValue().get(cacheKey);
+		if (null != times && times >= upmsConfig.getMaxShareTimes()) {
+			log.info("{}:{}已经转发文章{}次数:{}", user.getUserId(), user.getRealname(), article.getId(), times);
+			task.setScore(0);
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * 相册打开判断
+	 *
+	 * @param album 相册
+	 * @param user  分享用户
+	 * @param task  任务
+	 */
+	private Boolean checkAlbumOpenLimit(WmWkAlbum album, SysUser user, WmTask task){
+		Assert.notNull(album);
+		if (StringUtils.isNotEmpty(album.getGlyp())) {
+			List<WmDaDrugEntDrugtable> drugTableList =
+					wmDaDrugEntDrugtableService.listByIds(Arrays.asList(album.getGlyp().split(",")));
+			if (CollectionUtils.isNotEmpty(drugTableList)) {
+				String date = DateUtil.today() + ":";
+				log.info("DateUtil.today():{}",date);
+				for (WmDaDrugEntDrugtable drug : drugTableList){
+					if (StringUtils.isEmpty(drug.getDrugEntId())) {
+						continue;
+					}
+					String key = CacheConstants.DRUG_ENT_PERSONAL_SHARE_KEY1 + date
+							+ drug.getDrugEntId() + CacheConstants.DRUG_ENT_PERSONAL_SHARE_KEY2 + user.getUserId();
+					log.info("key:{}", key);
+					Integer times = (Integer) redisTemplate.opsForValue().get(key);
+					if (times != null && times >= upmsConfig.getMaxShareTimes()) {
+						task.setScore(0);
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
 	/**
 	/**
 	 * 校验文章转发限制
 	 * 校验文章转发限制
 	 *
 	 *
@@ -3313,14 +3378,16 @@ public class ApiController {
 	private String checkArticleLimit(WmWkArticle wmWkArticle, SysUser sysUser) {
 	private String checkArticleLimit(WmWkArticle wmWkArticle, SysUser sysUser) {
 		Assert.notNull(wmWkArticle);
 		Assert.notNull(wmWkArticle);
 		LocalDateTime now = LocalDateTime.now();
 		LocalDateTime now = LocalDateTime.now();
-		final String cacheKey = CacheConstants.ARTICLE_PERSONAL_SHARE_KEY + DateUtil.format(now, "yyyyMMdd:") + sysUser.getUserId() + ":" + wmWkArticle
-				.getId();
+		final String cacheKey = CacheConstants.ARTICLE_PERSONAL_SHARE_KEY + DateUtil.format(now, "yyyyMMdd:")
+				+ sysUser.getUserId() + ":" + wmWkArticle.getId();
 		Integer times = (Integer) redisTemplate.opsForValue().get(cacheKey);
 		Integer times = (Integer) redisTemplate.opsForValue().get(cacheKey);
 		if (null != times) {
 		if (null != times) {
-			if (times++ >= 5) {
+			log.info("{}:{}已经转发文章{}次数:{}", sysUser.getUserId(), sysUser.getRealname(), wmWkArticle.getId(), times);
+			if (times++ >= upmsConfig.getMaxShareTimes()) {
 				return "您当日转发的该文章次数已超过20次,转发将不再获得积分";
 				return "您当日转发的该文章次数已超过20次,转发将不再获得积分";
 			}
 			}
 		} else {
 		} else {
+			log.info("{}:{}已经首次转发文章:{}", sysUser.getUserId(), sysUser.getRealname(), wmWkArticle.getId(), times);
 			times = 1;
 			times = 1;
 		}
 		}
 		redisTemplate.opsForValue()
 		redisTemplate.opsForValue()