|
@@ -37,6 +37,8 @@ import java.util.Arrays;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -56,6 +58,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
private final WmScorePackageService wmScorePackageService;
|
|
|
private final WmScorePackageStatusService wmScorePackageStatusService;
|
|
|
private final WmTaskService wmTaskService;
|
|
|
+ private final WmTaskContentService taskContentService;
|
|
|
private final SysPublicParamService sysPublicParamService;
|
|
|
private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
|
|
|
private final WmUserSignDetailService wmUserSignDetailService;
|
|
@@ -510,8 +513,47 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ 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> availTaskContents = taskContents.stream().filter(con -> StrUtil.isNotBlank(con.getTemp3())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (CollUtil.isEmpty(availTaskContents)) {
|
|
|
+ log.info("当前用户本月不存在打卡任务记录,放行");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, String> signIdAndContentIdMap = availTaskContents.stream().collect(Collectors.toMap(WmTaskContent::getTemp3, cont -> cont.getId().toString()));
|
|
|
+
|
|
|
+ List<WmTask> taskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getTaskUserId, wmUserSign.getSignUserid())
|
|
|
+ .eq(WmTask::getTaskTypeId, taskTypeId)
|
|
|
+ .in(WmTask::getTaskContentId, signIdAndContentIdMap.values()));
|
|
|
+
|
|
|
+ Map<String, WmTask> taskMap = taskList.stream().collect(Collectors.toMap(WmTask::getTaskContentId, Function.identity()));
|
|
|
+
|
|
|
+ List<WmUserSign> availSigned = signs.stream().filter(sign -> {
|
|
|
+ String contId = signIdAndContentIdMap.get(sign.getId().toString());
|
|
|
+
|
|
|
+ if (StrUtil.isNotBlank(contId)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ WmTask wmTask = taskMap.get(contId);
|
|
|
+
|
|
|
+ if (wmTask == null){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ String taskStatus = wmTask.getTaskStatus();
|
|
|
+
|
|
|
+ return "2".equals(taskStatus) || "3".equals(taskStatus);
|
|
|
+
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
// 校验 同一个人,对同一拜访对象
|
|
|
- Map<String, List<WmUserSign>> collect = signs.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
|
|
|
+ Map<String, List<WmUserSign>> collect = availSigned.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
|
|
|
List<WmUserSign> wmUserSigns = collect.get(wmUserSign.getSignEntId());
|
|
|
if (CollUtil.isNotEmpty(wmUserSigns)) {
|
|
|
|
|
@@ -553,7 +595,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
|
|
|
|
|
|
// 校验当日的拜访限制
|
|
|
- int currCount = signs.size();
|
|
|
+ int currCount = availSigned.size();
|
|
|
log.info("当前用户本月已完成打卡次数:[{}]", currCount);
|
|
|
Integer monthLimit = totalLimitMap.get("MONTH");
|
|
|
log.info("拜访次数上限打卡每月限制:[{}]", monthLimit);
|
|
@@ -566,7 +608,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
log.info("拜访次数上限打卡每天限制:[{}]", dailyLimit);
|
|
|
if (dailyLimit != null) {
|
|
|
LocalDateTime todayStart = LocalDateTime.of(now.toLocalDate(), LocalTime.MIN);
|
|
|
- long dailyCount = signs.stream().filter(sign -> sign.getSignDate().isAfter(todayStart)).count();
|
|
|
+ long dailyCount = availSigned.stream().filter(sign -> sign.getSignDate().isAfter(todayStart)).count();
|
|
|
log.info("当前用户本日已完成打卡次数:[{}]", dailyCount);
|
|
|
if (dailyLimit <= dailyCount) {
|
|
|
log.warn("超过拜访次数上限打卡每日限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
@@ -578,7 +620,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
log.info("拜访次数上限打卡每小时限制:[{}]", hourLimit);
|
|
|
if (hourLimit != null) {
|
|
|
LocalDateTime hourStart = now.minusHours(1L);
|
|
|
- long hourCount = signs.stream().filter(sign -> sign.getSignDate().isAfter(hourStart)).count();
|
|
|
+ long hourCount = availSigned.stream().filter(sign -> sign.getSignDate().isAfter(hourStart)).count();
|
|
|
log.info("当前用户本小时已完成打卡次数:[{}]", hourCount);
|
|
|
if (hourLimit <= hourCount) {
|
|
|
log.warn("超过拜访次数上限打卡每小时限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
@@ -661,9 +703,9 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
* 保存签到详情
|
|
|
*
|
|
|
* @param wmUserSign 打卡信息
|
|
|
- * @param deptId 部门id
|
|
|
+ * @param deptId 部门id
|
|
|
* @param taskTypeId 任务类型id
|
|
|
- * @param baseScore 任务类型规则分数
|
|
|
+ * @param baseScore 任务类型规则分数
|
|
|
* @return int 任务实际分值(拜访科室数 * 任务类型规则分数)
|
|
|
*/
|
|
|
private int saveSignDetail(WmUserSign wmUserSign, Integer deptId, String taskTypeId, Integer baseScore) {
|