|
@@ -37,10 +37,15 @@ import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.time.Duration;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -89,7 +94,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
log.warn("获取不到积分包:{}", wmUserSign.getPackageId());
|
|
|
return R.failed("获取不到积分包");
|
|
|
}
|
|
|
- if(StringUtils.isEmpty(tWmScorePackage.getRuleId())){
|
|
|
+ if (StringUtils.isEmpty(tWmScorePackage.getRuleId())) {
|
|
|
log.warn("积分包未配置积分规则:{}", wmUserSign.getPackageId());
|
|
|
return R.failed("积分包未配置积分规则");
|
|
|
}
|
|
@@ -100,63 +105,89 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
return R.failed("客户拜访任务,登录人不符");
|
|
|
}
|
|
|
|
|
|
- if("1".equals(tWmScorePackage.getPackageType1())){
|
|
|
+ if ("1".equals(tWmScorePackage.getPackageType1())) {
|
|
|
Boolean fullFlag = wmTaskService.checkUserTaskSubScore(sysU.getUserId() + "");
|
|
|
- if(fullFlag){
|
|
|
+ if (fullFlag) {
|
|
|
String value = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
|
|
|
- String info = StringUtils.isEmpty(value)?"每日最多提交3万积分":"每日最多提交"+Integer.parseInt(value)+"积分";
|
|
|
+ String info = StringUtils.isEmpty(value) ? "每日最多提交3万积分" : "每日最多提交" + Integer.parseInt(value) + "积分";
|
|
|
log.warn("系统当前限制积分上限:【{}】,提示:【{}】", value, info);
|
|
|
- return R.failed(1,info);
|
|
|
+ return R.failed(1, info);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String taskTypeId;
|
|
|
- if ("1".equals(wmUserSign.getSignEntType())){
|
|
|
+ if ("1".equals(wmUserSign.getSignEntType())) {
|
|
|
taskTypeId = "5";
|
|
|
- } else if ("2".equals(wmUserSign.getSignEntType())){
|
|
|
+ } else if ("2".equals(wmUserSign.getSignEntType())) {
|
|
|
taskTypeId = "6";
|
|
|
- } else if ("3".equals(wmUserSign.getSignEntType())){
|
|
|
+ } else if ("3".equals(wmUserSign.getSignEntType())) {
|
|
|
taskTypeId = "33";
|
|
|
} else {
|
|
|
return R.failed("拜访类型不存在");
|
|
|
}
|
|
|
|
|
|
- int totalLimit = 4;
|
|
|
- int halfHourTotalLimit = 30;
|
|
|
+ int dailyLimit = 0;
|
|
|
+ int eachLimit = 0;
|
|
|
|
|
|
List<WmTaskSubmissionRule.SubmissionRule> rules = wmTaskContentService.getTaskSubmissionRule(taskTypeId, tWmScorePackage.getRelatedService());
|
|
|
|
|
|
- if (CollUtil.isNotEmpty(rules)){
|
|
|
+ if (CollUtil.isNotEmpty(rules)) {
|
|
|
// 获取限制
|
|
|
for (int i = 0, size = rules.size(); i < size; i++) {
|
|
|
Map<String, Object> map = (Map<String, Object>) rules.get(i);
|
|
|
WmTaskSubmissionRule.SubmissionRule r = BeanUtil.mapToBean(map, WmTaskSubmissionRule.SubmissionRule.class, true, new CopyOptions());
|
|
|
|
|
|
- if ("打卡时间间隔".equals(r.getManual())) {
|
|
|
+ if ("拜访次数上限".equals(r.getManual())) {
|
|
|
Object o = r.getFrequency().get(0).get("quantity");
|
|
|
- halfHourTotalLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
|
|
|
+ dailyLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
|
|
|
|
|
|
}
|
|
|
- if ("同一个人在同一个商业公司的打卡时间间隔".equals(r.getManual())) {
|
|
|
+ if (r.getManual().startsWith("同一个人")) {
|
|
|
Object o = r.getFrequency().get(0).get("quantity");
|
|
|
- totalLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
|
|
|
+ eachLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- // 一个用户,在同一打卡地点,4小时内只能打卡一次
|
|
|
- int total = this.count(Wrappers.<WmUserSign>lambdaQuery()
|
|
|
- .eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
|
|
|
- .eq(WmUserSign::getSignEntId, wmUserSign.getSignEntId())
|
|
|
- .gt(WmUserSign::getSignDate, LocalDateTime.now().minus(totalLimit, ChronoUnit.HOURS)));
|
|
|
- // 一个用户,半小时内只能打卡一次
|
|
|
- int halfHourTotal = this.count(Wrappers.<WmUserSign>lambdaQuery()
|
|
|
+ // 查询当天所有的记录
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ List<WmUserSign> signs = this.list(Wrappers.<WmUserSign>lambdaQuery()
|
|
|
.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
|
|
|
- .gt(WmUserSign::getSignDate, LocalDateTime.now().minus(halfHourTotalLimit, ChronoUnit.MINUTES)));
|
|
|
- if (total != 0 || halfHourTotal != 0) {
|
|
|
- log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
- return R.failed("打卡间隔过短");
|
|
|
+ .between(WmUserSign::getSignDate, LocalDateTime.of(now.toLocalDate(), LocalTime.MIN), LocalDateTime.of(now.toLocalDate(), LocalTime.MAX)));
|
|
|
+
|
|
|
+ // 没有超过日打卡限制
|
|
|
+ if (dailyLimit > signs.size()) {
|
|
|
+
|
|
|
+ Map<String, List<WmUserSign>> collect = signs.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
|
|
|
+ List<WmUserSign> wmUserSigns = collect.get(wmUserSign.getSignEntId());
|
|
|
+ if (wmUserSigns.size() < eachLimit) {
|
|
|
+
|
|
|
+ // 一个用户,在同一打卡地点,4小时内只能打卡一次
|
|
|
+ Optional<LocalDateTime> first = wmUserSigns.stream().map(WmUserSign::getSignDate).filter(sd -> Duration.between(sd, now).toHours() <= 4).findFirst();
|
|
|
+
|
|
|
+ if (first.isPresent()) {
|
|
|
+ log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
+ return R.failed("打卡间隔过短");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 一个用户,半小时内只能打卡一次
|
|
|
+ Optional<LocalDateTime> first1 = signs.stream().map(WmUserSign::getSignDate).filter(sd -> Duration.between(sd, now).toMinutes() <= 30).findFirst();
|
|
|
+
|
|
|
+ if (first1.isPresent()) {
|
|
|
+ log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
+ return R.failed("打卡间隔过短");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ log.warn("超过每个地点打卡限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
+ return R.failed("超过每个地点打卡限制");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ log.warn("超过打卡每日限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
+ return R.failed("超过打卡每日限制");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -288,8 +319,8 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
queryAll.setTaskAddFlag("0");
|
|
|
List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
|
|
|
list(Wrappers.query(queryAll));
|
|
|
- if(new BigDecimal(updatePke.getUserNum())
|
|
|
- .compareTo(new BigDecimal(statusAll.size())) <= 0){
|
|
|
+ if (new BigDecimal(updatePke.getUserNum())
|
|
|
+ .compareTo(new BigDecimal(statusAll.size())) <= 0) {
|
|
|
updatePke.setTaskAddFlag("0");
|
|
|
}
|
|
|
}
|