//获取当天完成2次任务以上的用户 //日期格式化 String now = queryDateTime(); String starTime = now + " 00:00:00"; String endTime = now + " 23:59:59"; //日期格式化 List<TaskCompletedDTO> taskCompleted = taskCompletedService.selectUserByNow(starTime, endTime); for (TaskCompletedDTO dto : taskCompleted) { String taskGroupCode = dto.getTaskGroupCode(); //获取当前任务是签到还是阅读文章 String taskCode = dto.getTaskCode(); List<TaskRuleDetail> primaryData = taskRuleDetailMapper.selectTaskGroupListCode(taskGroupCode, taskCode); Map<String, Object> ruleDetail = getRuleDetail(taskCode, primaryData); //如果是签到那么为重复领取 //当天可完成次数 Object dayCompleteTaskMax = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.DAY_COMPLETE_TASK_MAX.getValue()); Object checkInAttribute = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.CHECK_IN_ATTRIBUTE.getValue()); Object shareGoodsCount = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.SHARE_GOODS_COUNT.getValue()); Object readingArticle = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.READING_ARTICLE_DURATION.getValue()); //分享商品和文章阅读判断当天完成次数 if (shareGoodsCount != null || readingArticle != null) { if (dayCompleteTaskMax != null) { Integer dayCompleteTaskMax1 = (Integer) dayCompleteTaskMax; if (dayCompleteTaskMax1.compareTo(dto.getFinishCount()) < 0) { log.info("文章阅读或分享商品达完成上限后再次完成"); return; } } } //签到(默认一天一次) if (checkInAttribute != null) { log.info("签到重复完成"); return; } }
时间: 2023-05-23 21:04:27 浏览: 47
这段代码的作用是获取当天完成了2次任务以上的用户。首先,它使用了当前日期作为开始时间和结束时间来查询完成任务的用户,然后对于每个用户,它会获取任务组代码和任务代码,并使用这些代码查询任务规则明细。接着,它会使用任务代码和任务规则明细获取任务的详细规则。
然后,它会判断当前任务是签到还是阅读文章或分享商品。如果是阅读文章或分享商品,则会检查当天可完成的任务次数,如果已经达到了最大值,则会返回;如果是签到,则会直接返回。
最后,如果一直执行到了最后,则意味着当天没有完成2次任务以上的用户。
相关问题
int survivalTime = (int)(endTime.getTime()-starTime.getTime())/1000;
这段代码的作用是计算两个时间之间的生存时间(单位为秒),其中endTime和starTime是两个时间对象。具体来说,它使用了Java中的Date类的getTime()方法来获取时间的毫秒数,然后将两个时间毫秒数相减,再除以1000,就得到了两个时间之间的生存时间(单位为秒)。最后将结果转换为int类型并赋值给survivalTime变量。
优化下列代码。 List<TaskCompletedDTO> taskCompleted = taskCompletedService.selectUserByNow(starTime, endTime); for (TaskCompletedDTO dto : taskCompleted) { String taskGroupCode = dto.getTaskGroupCode(); //获取当前任务是签到还是阅读文章 String taskCode = dto.getTaskCode(); List<TaskRuleDetail> primaryData = taskRuleDetailMapper.selectTaskGroupListCode(taskGroupCode, taskCode); Map<String, Object> ruleDetail = getRuleDetail(taskCode, primaryData); //如果是签到那么为重复领取 //当天可完成次数 Object dayCompleteTaskMax = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.DAY_COMPLETE_TASK_MAX.getValue()); Object checkInAttribute = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.CHECK_IN_ATTRIBUTE.getValue()); Object readingArticle = ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.READING_ARTICLE_DURATION.getValue()); //分享商品和文章阅读判断当天完成次数 if (readingArticle != null) { if (dayCompleteTaskMax != null) { Integer dayCompleteTaskMax1 = (Integer) dayCompleteTaskMax; if (dayCompleteTaskMax1.compareTo(dto.getFinishCount()) < 0) { log.info("文章阅读或分享商品达完成上限后再次完成"); log.info("是否重复发放奖励"); return; } return; } } //签到(默认一天一次) if (checkInAttribute != null) { log.info("签到重复完成"); return; } //监控奖励是否重复发放(发放奖励的次数大于任务完成的次数奖励为重复发放) }
优化后的代码如下:
```
List<TaskCompletedDTO> taskCompleted = taskCompletedService.selectUserByNow(starTime, endTime);
for (TaskCompletedDTO dto : taskCompleted) {
String taskGroupCode = dto.getTaskGroupCode();
String taskCode = dto.getTaskCode();
List<TaskRuleDetail> primaryData = taskRuleDetailMapper.selectTaskGroupListCode(taskGroupCode, taskCode);
Map<String, Object> ruleDetail = getRuleDetail(taskCode, primaryData);
// 当天可完成次数
Integer dayCompleteTaskMax = (Integer) ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.DAY_COMPLETE_TASK_MAX.getValue());
// 签到属性
Boolean checkInAttribute = (Boolean) ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.CHECK_IN_ATTRIBUTE.getValue());
// 文章阅读时长
Integer readingArticle = (Integer) ruleDetail.get(CommonBusinessEnum.RuleDetailDataFieldEnum.READING_ARTICLE_DURATION.getValue());
// 判断是否为签到任务
if (checkInAttribute != null && checkInAttribute) {
log.info("签到重复完成");
return;
}
// 判断是否为文章阅读或分享商品任务
if (readingArticle != null && dayCompleteTaskMax != null) {
if (dayCompleteTaskMax < dto.getFinishCount()) {
log.info("文章阅读或分享商品达完成上限后再次完成");
log.info("是否重复发放奖励");
return;
}
return;
}
// 监控奖励是否重复发放(发放奖励的次数大于任务完成的次数奖励为重复发放)
}
```
对于任务完成情况的判断,应该先判断任务的类型是否为签到或文章阅读/分享商品,再根据任务的类型来判断是否重复完成。
在代码中,将原本的 `Object` 类