|
@@ -16,9 +16,14 @@
|
|
|
*/
|
|
|
package com.qunzhixinxi.hnqz.admin.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.bean.copier.CopyOptions;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskTypeSubCategory;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.*;
|
|
|
import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
|
|
@@ -35,6 +40,7 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -60,6 +66,8 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
private final SysPublicParamService sysPublicParamService;
|
|
|
private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
|
|
|
private final WmUserSignDetailService wmUserSignDetailService;
|
|
|
+ private final WmTaskSubmissionRuleService taskSubmissionRuleService;
|
|
|
+ private final WmTaskTypeSubCategoryService taskTypeSubCategoryService;
|
|
|
|
|
|
@Override
|
|
|
public R saveWmUserSign(WmUserSign wmUserSign) {
|
|
@@ -102,15 +110,50 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ String taskTypeId;
|
|
|
+ if ("1".equals(wmUserSign.getSignEntType())){
|
|
|
+ taskTypeId = "5";
|
|
|
+ } else if ("2".equals(wmUserSign.getSignEntType())){
|
|
|
+ taskTypeId = "6";
|
|
|
+ } else if ("3".equals(wmUserSign.getSignEntType())){
|
|
|
+ taskTypeId = "33";
|
|
|
+ } else {
|
|
|
+ return R.failed("拜访类型不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ int totalLimit = 4;
|
|
|
+ int halfHourTotalLimit = 30;
|
|
|
+
|
|
|
+ List<WmTaskSubmissionRule.SubmissionRule> rules = wmTaskContentService.getTaskSubmissionRule(taskTypeId, tWmScorePackage.getRelatedService());
|
|
|
+
|
|
|
+ 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())) {
|
|
|
+ Object o = r.getFrequency().get(0).get("quantity");
|
|
|
+ halfHourTotalLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
|
|
|
+
|
|
|
+ }
|
|
|
+ if ("同一个人在同一个商业公司的打卡时间间隔".equals(r.getManual())) {
|
|
|
+ Object o = r.getFrequency().get(0).get("quantity");
|
|
|
+ totalLimit = 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(4, ChronoUnit.HOURS)));
|
|
|
+ .gt(WmUserSign::getSignDate, LocalDateTime.now().minus(totalLimit, ChronoUnit.HOURS)));
|
|
|
// 一个用户,半小时内只能打卡一次
|
|
|
int halfHourTotal = this.count(Wrappers.<WmUserSign>lambdaQuery()
|
|
|
.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
|
|
|
- .gt(WmUserSign::getSignDate, LocalDateTime.now().minus(30, ChronoUnit.MINUTES)));
|
|
|
+ .gt(WmUserSign::getSignDate, LocalDateTime.now().minus(halfHourTotalLimit, ChronoUnit.MINUTES)));
|
|
|
if (total != 0 || halfHourTotal != 0) {
|
|
|
log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
|
|
|
return R.failed("打卡间隔过短");
|