Pārlūkot izejas kodu

feat:打卡任务限制

shc 2 gadi atpakaļ
vecāks
revīzija
822513137a

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskContentService.java

@@ -18,9 +18,12 @@
 package com.qunzhixinxi.hnqz.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
+import java.util.List;
+
 /**
  * 任务内容表
  *
@@ -36,4 +39,13 @@ public interface WmTaskContentService extends IService<WmTaskContent> {
 	 * @return 保存结果
 	 */
 	R<?> saveTaskContent(WmTaskContent wmTaskContent);
+
+	/**
+	 * 获取任务类型校验规则
+	 *
+	 * @param taskTypeId 任务类型id
+	 * @param deptId     企业id
+	 * @return 任务类型
+	 */
+	List<WmTaskSubmissionRule.SubmissionRule> getTaskSubmissionRule(String taskTypeId, String deptId);
 }

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java

@@ -671,6 +671,7 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 	 * @param deptId     所属规则的企业id
 	 * @return 规则
 	 */
+	@Override
 	public List<WmTaskSubmissionRule.SubmissionRule> getTaskSubmissionRule(String taskTypeId, String deptId) {
 
 		WmTaskTypeSubCategory subCategory = taskTypeSubCategoryService.getOne(Wrappers.<WmTaskTypeSubCategory>lambdaQuery().eq(WmTaskTypeSubCategory::getTaskTypeId, taskTypeId));

+ 45 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

@@ -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("打卡间隔过短");