Procházet zdrojové kódy

feat:任务个数强校验

shc před 9 měsíci
rodič
revize
e8fd1fcf4b

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

@@ -14,6 +14,7 @@ import com.google.common.collect.ImmutableList;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageTaskTypeQty;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskTypeSubCategory;
@@ -34,6 +35,7 @@ import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysPublicParamService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
+import com.qunzhixinxi.hnqz.admin.service.WmPackageTaskTypeQtyService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
@@ -82,1069 +84,1097 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, WmTaskContent> implements WmTaskContentService {
-	private final WmTaskService wmTaskService;
-	private final WmTaskMapper wmTaskMapper;
-	private final SysUserService sysUserService;
-	private final WmTaskTypeService wmTaskTypeService;
-	private final WmScorePackageService wmScorePackageService;
-	private final WmScorePackageStatusService wmScorePackageStatusService;
-	private final WmUserSignMapper wmUserSignMapper;
-	private final WmDaHospitalMapper wmDaHospitalMapper;
-	private final SysPublicParamService sysPublicParamService;
-	private final WmTaskTypeSubCategoryService taskTypeSubCategoryService;
-	private final WmTaskSubmissionRuleService taskSubmissionRuleService;
-	private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
-	private final ApplicationEventPublisher applicationEventPublisher;
-	private final Sequence taskSequence;
-
-	private static final DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
-
-	private static final String[] ingTypeIds = {"5", "6", "8", "9", "10", "11", "33"};
-
-	/**
-	 * 校验积分包
-	 *
-	 * @param pkgId 积分包id
-	 * @return 积分包
-	 */
-	private WmScorePackage checkPackage(String pkgId) {
-		// 获取积分包
-		WmScorePackage tWmScorePackage = wmScorePackageService.getById(pkgId);
-
-		if (null == tWmScorePackage) {
-			log.warn("获取不到积分包:{}", pkgId);
-			throw new RuntimeException("获取不到积分包");
-		}
-		if (LocalDate.now().isAfter(tWmScorePackage.getEndTime())) {
-			throw new BizException("当前积分包已过截止日期");
-		}
-
-		return tWmScorePackage;
-	}
-
-	/**
-	 * 校验领包记录
-	 *
-	 * @param userId 用户id
-	 * @param pkgId  积分包id
-	 * @return 领包记录集合
-	 */
-	private List<WmScorePackageStatus> checkPackageStatus(Integer userId, String pkgId) {
-		List<WmScorePackageStatus> statusList =
-				wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
-						.eq(WmScorePackageStatus::getUserId, userId)
-						.eq(WmScorePackageStatus::getStatus, "2")
-						.eq(WmScorePackageStatus::getTaskAddFlag, "1")
-						.eq(WmScorePackageStatus::getPackageId, pkgId)
-				);
-
-		if (CollectionUtils.isEmpty(statusList)) {
-			log.warn("获取积分包异常,任务保存失败9001:{}", pkgId);
-			throw new RuntimeException("获取积分包异常,任务保存失败");
-		}
-		if (statusList.size() != 1) {
-			log.warn("获取积分包异常,任务保存失败9002:{}", pkgId);
-			throw new RuntimeException("获取积分包异常,任务保存失败");
-		}
-
-		return statusList;
-	}
-
-	/**
-	 * 校验积分上线
-	 *
-	 * @param userId  用户id
-	 * @param deptId  部门id
-	 * @param pkgType 积分包类型
-	 */
-	public void limitScore(Integer userId, Integer deptId, String pkgType) {
-
-		if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), pkgType)
-				|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), pkgType)) {
-			String limitValue = "30000";
-			// 查询当前企业配置的积分限制
-			List<WmTaskSubmissionRule> scoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-					.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(deptId, 1))
-					.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-					.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
-
-			// 公共参数配置的
-			String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
-
-			if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
-				Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.stream()
-						.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
-								BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
-				WmTaskSubmissionRule.SubmissionRule submissionRule = null;
-				if (submissionRuleMap.containsKey(deptId)) {
-					submissionRule = submissionRuleMap.get(deptId);
-				} else {
-					submissionRule = submissionRuleMap.get(1);
-				}
-				limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
-			} else if (StrUtil.isNotBlank(userTaskSubScore)) {
-				limitValue = userTaskSubScore;
-			}
-
-			Boolean fullFlag = wmTaskService.checkUserTaskSubScore(String.valueOf(userId), limitValue);
-			if (fullFlag) {
-				String info = String.format("每日最多提交%s积分", limitValue);
-				log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
-				throw new RuntimeException(info);
-			}
-
-			// 月度积分限制
-			String monthLimitValue;
-			List<WmTaskSubmissionRule> monthScoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-					.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(deptId, 1))
-					.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-					.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.MONTH_SCORE_LIMIT));
-			if (CollUtil.isNotEmpty(monthScoreLimitRuleList)) {
-				Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = monthScoreLimitRuleList.stream()
-						.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
-								BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
-				WmTaskSubmissionRule.SubmissionRule submissionRule = submissionRuleMap.containsKey(deptId) ? submissionRuleMap.get(deptId) : submissionRuleMap.get(1);
-				monthLimitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
-			} else {
-				monthLimitValue = "300000";
-			}
-
-			LocalDate localDate = LocalDate.now();
-			LocalDateTime startOfMonth = localDate.withDayOfMonth(1).atStartOfDay();
-			LocalDateTime startOfNextMonth = localDate.plusMonths(1).withDayOfMonth(1).atStartOfDay();
-			int total = wmTaskMapper.getUserTaskSubScore(String.valueOf(userId), startOfMonth, startOfNextMonth);
-
-			if (total >= Integer.parseInt(monthLimitValue)) {
-				String info = String.format("每月最多提交%s积分", monthLimitValue);
-				log.warn("系统当前限制月度积分上限:【{}】,提示:【{}】", monthLimitValue, info);
-				throw new BizException(info);
-			}
-		}
-	}
-
-	/**
-	 * 获取任务提交规则
-	 * 1.如果目标企业不存在规则,取平台的默认规则
-	 *
-	 * @param taskTypeId 任务类型id
-	 * @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));
-
-		if (subCategory == null) {
-			return null;
-		}
-
-		// 获取企业和平台的规则
-		List<WmTaskSubmissionRule> rules = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-				.eq(WmTaskSubmissionRule::getSubCategory, subCategory.getSubCategory())
-				.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-				.in(WmTaskSubmissionRule::getDeptId, ImmutableList.of(deptId, 1))
-		);
-
-		if (CollUtil.isEmpty(rules)) {
-			return null;
-		}
-
-		// 平台限制和企业限制都存在取企业的
-		if (rules.size() != 1) {
-			Optional<WmTaskSubmissionRule> first = rules.stream().filter(r -> r.getDeptId() != 1).findFirst();
-			if (first.isPresent()) {
-				return first.get().getRule();
-			}
-		}
-		return rules.get(0).getRule();
-	}
-
-	/**
-	 * 会议、1对1专访、培训的校验
-	 *
-	 * @param lookInDate  获取时间
-	 * @param taskTypeIds 二级分类归属任务类型
-	 * @param userId      用户id
-	 * @param rules       校验规则
-	 */
-	private void ctt_1_19_34(String lookInDate, List<String> taskTypeIds, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
-
-		int upperLimit = 0;
-		int betweenDay = 0;
-
-		// 获取限制
-		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");
-				upperLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
-
-			}
-			if ("任务有效期限".equals(r.getManual())) {
-
-				List<Integer> quantity = r.getFrequency().stream().map(f -> {
-					Object o = f.get("quantity");
-					return o instanceof String ? Integer.parseInt((String) o) : (int) o;
-				}).sorted().collect(Collectors.toList());
-				betweenDay = quantity.get(0);
-			}
-		}
-
-		LocalDate currentLookIntoDate = LocalDate.parse(lookInDate, df);
-		LocalDateTime start = LocalDateTime.of(currentLookIntoDate, LocalTime.MIN);
-		LocalDateTime end = LocalDateTime.of(currentLookIntoDate, LocalTime.MAX);
-		long meetingTaskCount = wmTaskService.countMeetingTask(taskTypeIds, String.valueOf(userId), start, end);
-		log.info("举办上限:{}", meetingTaskCount);
-		if (meetingTaskCount >= upperLimit) {
-			throw new RuntimeException(String.format("每天最多举办%s场", upperLimit));
-		}
-
-		LocalDate now = LocalDate.now();
-		if (currentLookIntoDate.isAfter(now)) {
-			throw new RuntimeException("会议时间不能选择之后的时间");
-		}
-
-
-		if (now.minusDays(betweenDay).isAfter(currentLookIntoDate)) {
-			throw new RuntimeException(String.format("%s天以前的任务无法提交", betweenDay));
-		}
-	}
-
-	/**
-	 * 医院信息修改
-	 *
-	 * @param hosId  医院id
-	 * @param userId 用户id
-	 * @param rules  校验规则
-	 */
-	private void ctt_30(String hosId, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
-
-		int hosUpperLimit = 0;
-		int userUpperLimit = 0;
-
-		// 获取限制
-		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())) {
-				List<Integer> quantity = r.getFrequency().stream().map(f -> {
-					Object o = f.get("quantity");
-					return o instanceof String ? Integer.parseInt((String) o) : (int) o;
-				}).sorted().collect(Collectors.toList());
-				hosUpperLimit = quantity.get(0);
-
-			}
-			if ("同一个人对同一家医院的修改次数上限".equals(r.getManual())) {
-
-				List<Integer> quantity = r.getFrequency().stream().map(f -> {
-					Object o = f.get("quantity");
-					return o instanceof String ? Integer.parseInt((String) o) : (int) o;
-				}).sorted().collect(Collectors.toList());
-				userUpperLimit = quantity.get(0);
-			}
-		}
-
-		List<WmTask> taskList = wmTaskService.listCurrentMonthHospitalTask(hosId);
-		if (CollectionUtil.isNotEmpty(taskList)) {
-			List<WmTask> userUpperLimitList = taskList.stream().filter(wmTask -> String.valueOf(userId).equals(wmTask.getTaskUserId())).collect(Collectors.toList());
-			if (userUpperLimitList.size() >= userUpperLimit) {
-				throw new RuntimeException("该医院同一个人一个月只能修改一次");
-			}
-			if (taskList.size() >= hosUpperLimit) {
-				throw new RuntimeException("该医院一个月最多只能修改3次");
-			}
-		}
-	}
-
-
-	/**
-	 * 校验任务内容
-	 *
-	 * @param scorePackage  积分包
-	 * @param wmTaskContent 任务内容
-	 * @param userId        用户id
-	 * @param rules         校验规则
-	 */
-	private void checkTaskContent(WmScorePackage scorePackage, WmTaskContent wmTaskContent, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
-		String taskTypeId = wmTaskContent.getTemp30();
-		LocalDate now = LocalDate.now();
-
-		// 会议举办/一对一专访/培训(医院患者教育培训 、药店药师培训 、商业公司培训)
-		if ("1".equals(taskTypeId) || "19".equals(wmTaskContent.getTemp30()) || "34".equals(wmTaskContent.getTemp30())) {
-			List<String> taskTypeIds = null;
-			switch (taskTypeId) {
-				case "1":
-					taskTypeIds = CollectionUtil.toList("1", "2", "3", "4", "64");
-					break;
-				case "19":
-					taskTypeIds = CollectionUtil.toList("19");
-					break;
-				case "34":
-					taskTypeIds = CollectionUtil.toList("34", "35", "36");
-					break;
-
-			}
-
-			this.ctt_1_19_34(wmTaskContent.getTemp4(), taskTypeIds, userId, rules);
-			wmTaskContent.setTemp30(wmTaskContent.getTemp3());
-		}
-
-
-		// 政策信息收集/竞品信息收集/库存信息收集/药物警戒相关信息收集(疗效等)/专家咨询
-		if ("12".equals(wmTaskContent.getTemp30())
-				|| "13".equals(wmTaskContent.getTemp30())
-				// || "14".equals(wmTaskContent.getTemp30())
-				|| "17".equals(wmTaskContent.getTemp30())
-				|| "21".equals(wmTaskContent.getTemp30())) {
-
-			String date = wmTaskContent.getTemp4();
-			LocalDate d = LocalDate.parse(date, df);
-			if (d.isAfter(now)) {
-				throw new RuntimeException("任务时间不能选择之后的时间");
-			}
-			if (now.minusDays(30).isAfter(d)) {
-				throw new RuntimeException("30天以前的任务无法提交");
-			}
-
-			// if ("14".equals(wmTaskContent.getTemp30())) {
-			// 	// 设置调查对象和调查品种
-			// 	wmTaskContent.setTemp24(wmTaskContent.getTemp24label());
-			// 	wmTaskContent.setTemp26(wmTaskContent.getTemp26label());
-			// }
-		}
-
-		// 商业公司信息收集/医院信息收集
-		if ("15".equals(wmTaskContent.getTemp30()) || "16".equals(wmTaskContent.getTemp30())) {
-			if ("15".equals(wmTaskContent.getTemp30())) {
-				WmDaHospital wmDaHospital = new WmDaHospital();
-				wmDaHospital.setYymc(wmTaskContent.getTemp3());
-				int num = wmDaHospitalMapper.selectCount(Wrappers.query(wmDaHospital));
-				if (num != 0) {
-					wmTaskContent.setTemp30("30");
-				}
-			}
-
-			String date = wmTaskContent.getTemp2();
-			LocalDate d = LocalDate.parse(date, df);
-			if (d.isAfter(now)) {
-				throw new RuntimeException("任务时间不能选择之后的时间");
-			}
-			if (now.minusDays(30).isAfter(d)) {
-				throw new RuntimeException("30天以前的任务无法提交");
-			}
-		}
-
-		// 药店调查
-		if ("18".equals(wmTaskContent.getTemp30())) {
-			//会议类型
-			String date = wmTaskContent.getTemp6();
-			LocalDate d = LocalDate.parse(date, df);
-			if (d.isAfter(now)) {
-				throw new RuntimeException("任务时间不能选择之后的时间");
-			}
-			if (now.minusDays(30).isAfter(d)) {
-				throw new RuntimeException("30天以前的任务无法提交");
-			}
-		}
-
-		if ("29".equals(wmTaskContent.getTemp30())) {
-			if ("1".equals(wmTaskContent.getTemp29())) {
-				wmTaskContent.setTemp30("5");
-			} else {
-				wmTaskContent.setTemp30("6");
-			}
-		}
-
-		// 校验任务百分比限制规则(如果积分包值大于【任务配置】-【百分比限制】配置的起始值,
-		// 且【任务配置】-【百分比限制】所选的任务类型对应的任务总完成积分值>积分包值*【任务配置】-【百分比限制】配置的百分比,则校验不通过)
-		log.info("当前提交任务类型id:{}", taskTypeId);
-		if (!ArrayUtil.contains(ingTypeIds, taskTypeId)) {
-
-			List<String> toCheckTaskTypeIds;
-			if ("15".equals(taskTypeId) || "30".equals(taskTypeId)) {
-				toCheckTaskTypeIds = new ArrayList<>(2);
-				toCheckTaskTypeIds.add("15");
-				toCheckTaskTypeIds.add("30");
-			} else {
-				toCheckTaskTypeIds = Collections.singletonList(taskTypeId);
-			}
-
-			R<?> checkPercentRuleResult =
-					wmTaskSubmissionPercentRuleService.checkPercentRule(scorePackage, SecurityUtils.getUser().getDeptId(), null, toCheckTaskTypeIds);
-			if (checkPercentRuleResult.getCode() != 0) {
-				throw new RuntimeException(checkPercentRuleResult.getMsg());
-			}
-		}
-
-		// 校验医院信息修改的任务(同一家医院,同一个人一个月只能修改一次,该医院一个月最多可修改3次)
-		if ("30".equals(wmTaskContent.getTemp30())) {
-			rules = this.getTaskSubmissionRule("30", scorePackage.getRelatedService());
-			ctt_30(wmTaskContent.getTemp29(), userId, rules);
-		}
-
-		// 校验首次库存调查
-		if ("31".equals(wmTaskContent.getTemp30())) {
-			// 获取调查类别:0:首次
-			String surveyType = wmTaskContent.getTemp23();
-
-			if (!"0".equals(surveyType)) {
-				throw new RuntimeException("首次调查类型错误");
-			}
-
-			// 调查对象
-			String surveyTarget = wmTaskContent.getTemp26label();
-			// 调查品种
-			String surveyCategory = wmTaskContent.getTemp24label();
-			// 所属区域
-			String location = wmTaskContent.getTemp5();
-
-			List<WmTaskContent> taskContentList = list(Wrappers.<WmTaskContent>lambdaQuery()
-					.eq(WmTaskContent::getTemp23, surveyType)
-					.eq(WmTaskContent::getTemp26, surveyTarget)
-					.eq(WmTaskContent::getTemp24, surveyCategory)
-			);
-
-			log.warn("内容:【{}】", taskContentList.toString());
-			if (CollectionUtils.isNotEmpty(taskContentList)) {
-				// 获取 所有任务id为31的任务且不是审核不通过的任务
-				List<Integer> taskContentIdList = taskContentList.stream().mapToInt(WmTaskContent::getId).boxed().collect(Collectors.toList());
-				List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery().eq(WmTask::getTaskTypeId, "31")
-						.ne(WmTask::getTaskStatus, "4")
-						.in(WmTask::getTaskContentId, taskContentIdList)
-				);
-				if (CollectionUtils.isNotEmpty(wmTaskList)) {
-					throw new RuntimeException("该药品在本院的首次调查已经完结,不能提交");
-				}
-			}
-
-			// 设置调查对象和调查品种
-			wmTaskContent.setTemp24(surveyCategory);
-			wmTaskContent.setTemp26(surveyTarget);
-
-		}
-	}
-
-	/**
-	 * 提交任务任务
-	 *
-	 * @param wmTaskContent 任务内容
-	 * @return 保存结果
-	 */
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public R<?> saveTaskContent(WmTaskContent wmTaskContent, String ip, String region) {
-
-		// 获取积分包
-		WmScorePackage tWmScorePackage = this.checkPackage(wmTaskContent.getTemp32());
-
-		// 校验
-		HnqzUser user = SecurityUtils.getUser();
-		UserVO sysU = sysUserService.selectUserVoById(user.getId());
-
-		// 校验超过60周岁,不能做任务
-		Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
-		if (CollUtil.isNotEmpty(checkResult) && checkResult.containsKey("OVER")) {
-			throw new RuntimeException(checkResult.get("OVER"));
-		}
-
-		List<WmScorePackageStatus> statusList = checkPackageStatus(sysU.getUserId(), tWmScorePackage.getId());
-
-		// 查询任务类型启用状态
-		List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-				.eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
-				.eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
-		if (CollUtil.isEmpty(rules)) {
-			throw new RuntimeException("当前企业未开启该任务!");
-		}
-		String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
-		if (!ArrayUtil.contains(taskTypeIds, wmTaskContent.getTemp30())) {
-			throw new RuntimeException("当前企业未开启该任务!");
-		}
-
-		// 检验分值 3W
-		this.limitScore(sysU.getUserId(), sysU.getDeptId(), tWmScorePackage.getPackageType1());
-
-		// 获取校验规则
-		//List<WmTaskSubmissionRule.SubmissionRule> taskSubmissionRule = this.getTaskSubmissionRule(wmTaskContent.getTemp30(), tWmScorePackage.getRelatedService());
-
-
-		// 校验提交数据
-		//this.checkTaskContent(tWmScorePackage, wmTaskContent, sysU.getUserId(), taskSubmissionRule);
-
-		Map<String, String> resultMap = new HashMap<>();
-		WmScorePackageStatus scorePackageStatus = statusList.get(0);
-		int score = 0;
-		if (this.save(wmTaskContent)) {
-			if (null != sysU) {
-				WmTask wmTask = new WmTask();
-				wmTask.setRemoteIp(ip);
-				wmTask.setIp2region(region);
-				wmTask.setTaskFrom("1");
-				LocalDateTime localDateTime = LocalDateTime.now();
-				wmTask.setUpdateTime(localDateTime);
-				//任务提交人
-				wmTask.setTaskUserId(String.valueOf(sysU.getUserId()));
-				//调研时间
-				wmTask.setLookintoDate(localDateTime);
-				wmTask.setDrugEntId(tWmScorePackage.getDrugEntId());
-				wmTask.setTaskTypeId(wmTaskContent.getTemp30());
-
-				WmTaskType wmTaskType = new WmTaskType();
-				wmTaskType.setRuleId(tWmScorePackage.getRuleId());
-				WmTaskType wmTaskType1 = wmTaskTypeService.getById(wmTaskContent.getTemp30());
-				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-				score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
-
-				// 医院区分新增和修改,修改积分搞为1000 start
-				if ("15".equals(wmTaskContent.getTemp30()) || "30".equals(wmTaskContent.getTemp30())) {
-					System.err.println("医院区分新增和修改:" + score);
-					WmDaHospital wmDaHospital = new WmDaHospital();
-					wmDaHospital.setYymc(wmTaskContent.getTemp3());
-					if (wmDaHospitalMapper.selectCount(Wrappers.query(wmDaHospital)) != 0) {
-						WmTaskType wmTaskType2 = new WmTaskType();
-						WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-						wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-						wmTaskType2.setTaskTypeName("医院信息修改");
-						score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
-					}
-				}
-				// 医院区分新增和修改,修改积分搞为1000 end
-
-				// 2021-06-11 库存调查分成,首次调查和常规调查,常规调查走之前的逻辑 start
-				if ("31".equals(wmTaskContent.getTemp30())) {
-					WmTaskType wmTaskType2 = new WmTaskType();
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					wmTaskType2.setTaskTypeName("库存信息收集-首次");
-					score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
-				}
-				// 2021-06-11 库存调查分成,首次调查和常规调查,常规调查走之前的逻辑 end
-
-				// 调剂服务 任务积分值 = 每一味积分值 * 调剂味数
-				if ("38".equals(wmTaskContent.getTemp30())) {
-					WmTaskType wmTaskType2 = new WmTaskType();
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					wmTaskType2.setTaskTypeName("调剂服务");
-					score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
-					score = (int) Math.round(score * Double.parseDouble(wmTaskContent.getTemp24()));
-				}
-
-				// 应收账款回款-A类/应收账款回款-B类/应收账款回款-C类 积分值按照“回款总额”乘“回款类别”对应的百分比,四舍五入
-				if ("39".equals(wmTaskContent.getTemp30())) {
-					WmTaskType wmTaskType2 = new WmTaskType();
-					// 根据选择的回款类别 查任务类型模板
-					WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
-					// 查询当前企业的任务类型积分
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					wmTaskType2.setTaskTypeName(baseTaskType.getTaskTypeName());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
-					// 计算实际任务积分(任务积分值 = 每一味积分值 * 调剂味数),这里应收账款回款积分值存的是1000的倍数,所以需要除以1000
-					score = (int) Math.round(score * Double.parseDouble(wmTaskContent.getTemp8()) / 1000.0D);
-				}
-
-				// 手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型 积分值设置
-				if ("42".equals(wmTaskContent.getTemp30())) {
-					// 根据选择的跟台级别 设置积分值
-					String taskTypeId = "42";
-					switch (wmTaskContent.getTemp23()) {
-						case "1":
-							taskTypeId = "42";
-							break;
-						case "2":
-							taskTypeId = "43";
-							break;
-						case "3":
-							taskTypeId = "44";
-							break;
-						default:
-					}
-					WmTaskType baseTaskType = wmTaskTypeService.getById(taskTypeId);
-					// 查询当前企业的任务类型积分
-					WmTaskType wmTaskType2 = new WmTaskType();
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					wmTaskType2.setTaskTypeName(baseTaskType.getTaskTypeName());
-					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
-					score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
-					// 设置实际的任务类型
-					wmTaskContent.setTemp30(taskTypeId);
-					wmTask.setTaskTypeId(taskTypeId);
-				}
-
-				// 药店推广-47 积分值设置
-				if ("47".equals(wmTaskContent.getTemp30())) {
-					// 根据选择的推广类型 查任务类型模板
-					WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
-					// 查询当前企业的任务类型积分
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					WmTaskType queryTaskType = new WmTaskType();
-					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-					queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
-					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-					score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
-					// 计算实际任务积分(数量*企业这个任务类型的积分值)
-					score = score * Integer.parseInt(wmTaskContent.getTemp13());
-					// 设置实际的任务类型
-					wmTaskContent.setTemp30(wmTaskContent.getTemp23());
-					wmTask.setTaskTypeId(wmTaskContent.getTemp23());
-				}
-
-				// 信用管理A/B/C 积分值设置
-				//if ("51".equals(wmTaskContent.getTemp30())) {
-				//	// 根据选择的信用等级 查任务类型模板
-				//	WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
-				//	// 查询当前企业的任务类型积分
-				//	WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-				//	WmTaskType queryTaskType = new WmTaskType();
-				//	queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-				//	queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
-				//	queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-				//	score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
-				//	// 设置实际的任务类型
-				//	wmTaskContent.setTemp30(wmTaskContent.getTemp23());
-				//	wmTask.setTaskTypeId(wmTaskContent.getTemp23());
-				//}
-				// 首营管理-诊所/药店
-				if ("56".equals(wmTaskContent.getTemp30())) {
-					// 根据选择的终端类型 查任务类型模板
-					WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp3());
-					// 查询当前企业的任务类型积分
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
-					WmTaskType queryTaskType = new WmTaskType();
-					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-					queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
-					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-					score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
-					// 设置实际的任务类型
-					wmTaskContent.setTemp30(wmTaskContent.getTemp3());
-					wmTask.setTaskTypeId(wmTaskContent.getTemp3());
-				}
-
-				// 校验任务类型是否启用
-				WmTaskType _baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp30());
-				WmTaskType queryTaskType = new WmTaskType();
-				queryTaskType.setRuleId(tWmScorePackage.getRuleId());
-				queryTaskType.setTaskTypeName(_baseTaskType.getTaskTypeName());
-				queryTaskType.setDelFlag("0");
-				List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.query(queryTaskType));
-				if (CollUtil.isEmpty(deptTaskTypes)) {
-					throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型不存在");
-				}
-				if (EnableEnum.DISABLE.val().equals(deptTaskTypes.get(0).getEnableFlag())) {
-					throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型已停用");
-				}
-
-				log.info("获取任务得分:{}", score);
-
-				if (score < 0) {
-					return R.failed("获取任务积分失败");
-				}
-				wmTask.setScore(score);
-
-				resultMap.put("score", tWmScorePackage.getPackageType1());
-				log.warn("获取积分包ID:{}", tWmScorePackage);
-
-				wmTask.setScorePackageId(tWmScorePackage.getId());
-				wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
-
-				wmTask.setTaskContentId(String.valueOf(wmTaskContent.getId()));
-
-				if (HnqzUtils.isZbRole(sysU.getRoleList(), 5)) {
-					wmTask.setTaskUserType("5");
-				}
-
-				wmTask.setCreateTime(localDateTime);
-
-				if (HnqzUtils.isZbRole(sysU.getRoleList(), 6)) {
-					wmTask.setTaskUserType("6");
-				}
-
-				wmTask.setDeptId(sysU.getDeptId() + "");
-				wmTask.setSubmitStatus("0");
-
-				// 不需要平台管理员审核的直接提交上级审核  taskStatus = 2 已提交 否则 taskStatus = 1 待提交
-				wmTask.setRealFlag("0");
-				wmTask.setTaskStatus("2");
-
-				wmTask.setTaskNumber(taskSequence.nextNo());
-				//保存任务
-				boolean isSave = wmTaskService.save(wmTask);
-
-				/*
-				 * 2020-12-21
-				 * 15、30-医院 16-商业  18-药店
-				 * 三类修改为平台管理员审核后才能在任务中心查出来
-				 * realFlag  0-真实  1-非真实  9-审核中
-				 *
-				 * 2021-9-2 by lixuesong
-				 * 去掉平台管理员审核,调整到个人任务审核
-				 */
-				if ("15".equals(wmTaskContent.getTemp30())
-						|| "16".equals(wmTaskContent.getTemp30())
-						|| "30".equals(wmTaskContent.getTemp30())
-						|| "18".equals(wmTaskContent.getTemp30())) {
-					// 校验调查信息审核,对比信息无改动则不可保存(15、30-医院 16-商业  18-药店)
-					R taskResult = wmTaskService.getSurveryTaskInfo(wmTask.getId());
-					Map<String, Object> data = (Map<String, Object>) taskResult.getData();
-					WmTask task = (WmTask) data.get("wmTask");
-					if ("3".equals(task.getCompareResult())) {
-						// 3-信息无变化,删除这条任务
-						wmTaskService.removeById(wmTask.getId());
-						this.removeById(wmTask.getTaskContentId());
-						return R.failed("信息无变化,不可提交");
-					}
-					resultMap.put("type", "3");
-				}
-				// 2020-12-21 end
-
-				//判断任务是否完成
-				if (isSave) {
-					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
-					if (null != wmScorePackage1) {
-						WmTask taskQuery = new WmTask();
-						taskQuery.setScorePackageId(tWmScorePackage.getId());
-						QueryWrapper<WmTask> taskQueryWrapper = Wrappers.query(taskQuery);
-
-						// 查询出 审核通过和审核中的任务
-						taskQueryWrapper.lambda()
-								.ne(WmTask::getTaskStatus, "4")
-								.eq(WmTask::getRealFlag, "0");
+
+    private final WmTaskService wmTaskService;
+    private final WmTaskMapper wmTaskMapper;
+    private final SysUserService sysUserService;
+    private final WmTaskTypeService wmTaskTypeService;
+    private final WmScorePackageService wmScorePackageService;
+    private final WmScorePackageStatusService wmScorePackageStatusService;
+    private final WmUserSignMapper wmUserSignMapper;
+    private final WmDaHospitalMapper wmDaHospitalMapper;
+    private final SysPublicParamService sysPublicParamService;
+    private final WmTaskTypeSubCategoryService taskTypeSubCategoryService;
+    private final WmTaskSubmissionRuleService taskSubmissionRuleService;
+    private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
+    private final ApplicationEventPublisher applicationEventPublisher;
+    private final WmPackageTaskTypeQtyService packageTaskTypeQtyService;
+    private final Sequence taskSequence;
+
+    private static final DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+
+    private static final String[] ingTypeIds = {"5", "6", "8", "9", "10", "11", "33"};
+
+    /**
+     * 校验积分包
+     *
+     * @param pkgId 积分包id
+     * @return 积分包
+     */
+    private WmScorePackage checkPackage(String pkgId) {
+        // 获取积分包
+        WmScorePackage tWmScorePackage = wmScorePackageService.getById(pkgId);
+
+        if (null == tWmScorePackage) {
+            log.warn("获取不到积分包:{}", pkgId);
+            throw new RuntimeException("获取不到积分包");
+        }
+        if (LocalDate.now().isAfter(tWmScorePackage.getEndTime())) {
+            throw new BizException("当前积分包已过截止日期");
+        }
+
+        return tWmScorePackage;
+    }
+
+    /**
+     * 校验领包记录
+     *
+     * @param userId 用户id
+     * @param pkgId  积分包id
+     * @return 领包记录集合
+     */
+    private List<WmScorePackageStatus> checkPackageStatus(Integer userId, String pkgId) {
+        List<WmScorePackageStatus> statusList =
+                wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+                        .eq(WmScorePackageStatus::getUserId, userId)
+                        .eq(WmScorePackageStatus::getStatus, "2")
+                        .eq(WmScorePackageStatus::getTaskAddFlag, "1")
+                        .eq(WmScorePackageStatus::getPackageId, pkgId)
+                );
+
+        if (CollectionUtils.isEmpty(statusList)) {
+            log.warn("获取积分包异常,任务保存失败9001:{}", pkgId);
+            throw new RuntimeException("获取积分包异常,任务保存失败");
+        }
+        if (statusList.size() != 1) {
+            log.warn("获取积分包异常,任务保存失败9002:{}", pkgId);
+            throw new RuntimeException("获取积分包异常,任务保存失败");
+        }
+
+        return statusList;
+    }
+
+    /**
+     * 校验积分上线
+     *
+     * @param userId  用户id
+     * @param deptId  部门id
+     * @param pkgType 积分包类型
+     */
+    public void limitScore(Integer userId, Integer deptId, String pkgType) {
+
+        if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), pkgType)
+                || StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), pkgType)) {
+            String limitValue = "30000";
+            // 查询当前企业配置的积分限制
+            List<WmTaskSubmissionRule> scoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+                    .in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(deptId, 1))
+                    .eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
+                    .eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
+
+            // 公共参数配置的
+            String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
+
+            if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
+                Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.stream()
+                        .collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
+                                BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
+                WmTaskSubmissionRule.SubmissionRule submissionRule = null;
+                if (submissionRuleMap.containsKey(deptId)) {
+                    submissionRule = submissionRuleMap.get(deptId);
+                } else {
+                    submissionRule = submissionRuleMap.get(1);
+                }
+                limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
+            } else if (StrUtil.isNotBlank(userTaskSubScore)) {
+                limitValue = userTaskSubScore;
+            }
+
+            Boolean fullFlag = wmTaskService.checkUserTaskSubScore(String.valueOf(userId), limitValue);
+            if (fullFlag) {
+                String info = String.format("每日最多提交%s积分", limitValue);
+                log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
+                throw new RuntimeException(info);
+            }
+
+            // 月度积分限制
+            String monthLimitValue;
+            List<WmTaskSubmissionRule> monthScoreLimitRuleList = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+                    .in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(deptId, 1))
+                    .eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
+                    .eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.MONTH_SCORE_LIMIT));
+            if (CollUtil.isNotEmpty(monthScoreLimitRuleList)) {
+                Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = monthScoreLimitRuleList.stream()
+                        .collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
+                                BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
+                WmTaskSubmissionRule.SubmissionRule submissionRule = submissionRuleMap.containsKey(deptId) ? submissionRuleMap.get(deptId) : submissionRuleMap.get(1);
+                monthLimitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
+            } else {
+                monthLimitValue = "300000";
+            }
+
+            LocalDate localDate = LocalDate.now();
+            LocalDateTime startOfMonth = localDate.withDayOfMonth(1).atStartOfDay();
+            LocalDateTime startOfNextMonth = localDate.plusMonths(1).withDayOfMonth(1).atStartOfDay();
+            int total = wmTaskMapper.getUserTaskSubScore(String.valueOf(userId), startOfMonth, startOfNextMonth);
+
+            if (total >= Integer.parseInt(monthLimitValue)) {
+                String info = String.format("每月最多提交%s积分", monthLimitValue);
+                log.warn("系统当前限制月度积分上限:【{}】,提示:【{}】", monthLimitValue, info);
+                throw new BizException(info);
+            }
+        }
+    }
+
+    /**
+     * 获取任务提交规则
+     * 1.如果目标企业不存在规则,取平台的默认规则
+     *
+     * @param taskTypeId 任务类型id
+     * @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));
+
+        if (subCategory == null) {
+            return null;
+        }
+
+        // 获取企业和平台的规则
+        List<WmTaskSubmissionRule> rules = taskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+                .eq(WmTaskSubmissionRule::getSubCategory, subCategory.getSubCategory())
+                .eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
+                .in(WmTaskSubmissionRule::getDeptId, ImmutableList.of(deptId, 1))
+        );
+
+        if (CollUtil.isEmpty(rules)) {
+            return null;
+        }
+
+        // 平台限制和企业限制都存在取企业的
+        if (rules.size() != 1) {
+            Optional<WmTaskSubmissionRule> first = rules.stream().filter(r -> r.getDeptId() != 1).findFirst();
+            if (first.isPresent()) {
+                return first.get().getRule();
+            }
+        }
+        return rules.get(0).getRule();
+    }
+
+    /**
+     * 会议、1对1专访、培训的校验
+     *
+     * @param lookInDate  获取时间
+     * @param taskTypeIds 二级分类归属任务类型
+     * @param userId      用户id
+     * @param rules       校验规则
+     */
+    private void ctt_1_19_34(String lookInDate, List<String> taskTypeIds, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
+
+        int upperLimit = 0;
+        int betweenDay = 0;
+
+        // 获取限制
+        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");
+                upperLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
+
+            }
+            if ("任务有效期限".equals(r.getManual())) {
+
+                List<Integer> quantity = r.getFrequency().stream().map(f -> {
+                    Object o = f.get("quantity");
+                    return o instanceof String ? Integer.parseInt((String) o) : (int) o;
+                }).sorted().collect(Collectors.toList());
+                betweenDay = quantity.get(0);
+            }
+        }
+
+        LocalDate currentLookIntoDate = LocalDate.parse(lookInDate, df);
+        LocalDateTime start = LocalDateTime.of(currentLookIntoDate, LocalTime.MIN);
+        LocalDateTime end = LocalDateTime.of(currentLookIntoDate, LocalTime.MAX);
+        long meetingTaskCount = wmTaskService.countMeetingTask(taskTypeIds, String.valueOf(userId), start, end);
+        log.info("举办上限:{}", meetingTaskCount);
+        if (meetingTaskCount >= upperLimit) {
+            throw new RuntimeException(String.format("每天最多举办%s场", upperLimit));
+        }
+
+        LocalDate now = LocalDate.now();
+        if (currentLookIntoDate.isAfter(now)) {
+            throw new RuntimeException("会议时间不能选择之后的时间");
+        }
+
+
+        if (now.minusDays(betweenDay).isAfter(currentLookIntoDate)) {
+            throw new RuntimeException(String.format("%s天以前的任务无法提交", betweenDay));
+        }
+    }
+
+    /**
+     * 医院信息修改
+     *
+     * @param hosId  医院id
+     * @param userId 用户id
+     * @param rules  校验规则
+     */
+    private void ctt_30(String hosId, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
+
+        int hosUpperLimit = 0;
+        int userUpperLimit = 0;
+
+        // 获取限制
+        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())) {
+                List<Integer> quantity = r.getFrequency().stream().map(f -> {
+                    Object o = f.get("quantity");
+                    return o instanceof String ? Integer.parseInt((String) o) : (int) o;
+                }).sorted().collect(Collectors.toList());
+                hosUpperLimit = quantity.get(0);
+
+            }
+            if ("同一个人对同一家医院的修改次数上限".equals(r.getManual())) {
+
+                List<Integer> quantity = r.getFrequency().stream().map(f -> {
+                    Object o = f.get("quantity");
+                    return o instanceof String ? Integer.parseInt((String) o) : (int) o;
+                }).sorted().collect(Collectors.toList());
+                userUpperLimit = quantity.get(0);
+            }
+        }
+
+        List<WmTask> taskList = wmTaskService.listCurrentMonthHospitalTask(hosId);
+        if (CollectionUtil.isNotEmpty(taskList)) {
+            List<WmTask> userUpperLimitList = taskList.stream().filter(wmTask -> String.valueOf(userId).equals(wmTask.getTaskUserId())).collect(Collectors.toList());
+            if (userUpperLimitList.size() >= userUpperLimit) {
+                throw new RuntimeException("该医院同一个人一个月只能修改一次");
+            }
+            if (taskList.size() >= hosUpperLimit) {
+                throw new RuntimeException("该医院一个月最多只能修改3次");
+            }
+        }
+    }
+
+
+    /**
+     * 校验任务内容
+     *
+     * @param scorePackage  积分包
+     * @param wmTaskContent 任务内容
+     * @param userId        用户id
+     * @param rules         校验规则
+     */
+    private void checkTaskContent(WmScorePackage scorePackage, WmTaskContent wmTaskContent, Integer userId, List<WmTaskSubmissionRule.SubmissionRule> rules) {
+        String taskTypeId = wmTaskContent.getTemp30();
+        LocalDate now = LocalDate.now();
+
+        // 会议举办/一对一专访/培训(医院患者教育培训 、药店药师培训 、商业公司培训)
+        if ("1".equals(taskTypeId) || "19".equals(wmTaskContent.getTemp30()) || "34".equals(wmTaskContent.getTemp30())) {
+            List<String> taskTypeIds = null;
+            switch (taskTypeId) {
+                case "1":
+                    taskTypeIds = CollectionUtil.toList("1", "2", "3", "4", "64");
+                    break;
+                case "19":
+                    taskTypeIds = CollectionUtil.toList("19");
+                    break;
+                case "34":
+                    taskTypeIds = CollectionUtil.toList("34", "35", "36");
+                    break;
+
+            }
+
+            this.ctt_1_19_34(wmTaskContent.getTemp4(), taskTypeIds, userId, rules);
+            wmTaskContent.setTemp30(wmTaskContent.getTemp3());
+        }
+
+
+        // 政策信息收集/竞品信息收集/库存信息收集/药物警戒相关信息收集(疗效等)/专家咨询
+        if ("12".equals(wmTaskContent.getTemp30())
+                || "13".equals(wmTaskContent.getTemp30())
+                // || "14".equals(wmTaskContent.getTemp30())
+                || "17".equals(wmTaskContent.getTemp30())
+                || "21".equals(wmTaskContent.getTemp30())) {
+
+            String date = wmTaskContent.getTemp4();
+            LocalDate d = LocalDate.parse(date, df);
+            if (d.isAfter(now)) {
+                throw new RuntimeException("任务时间不能选择之后的时间");
+            }
+            if (now.minusDays(30).isAfter(d)) {
+                throw new RuntimeException("30天以前的任务无法提交");
+            }
+
+            // if ("14".equals(wmTaskContent.getTemp30())) {
+            // 	// 设置调查对象和调查品种
+            // 	wmTaskContent.setTemp24(wmTaskContent.getTemp24label());
+            // 	wmTaskContent.setTemp26(wmTaskContent.getTemp26label());
+            // }
+        }
+
+        // 商业公司信息收集/医院信息收集
+        if ("15".equals(wmTaskContent.getTemp30()) || "16".equals(wmTaskContent.getTemp30())) {
+            if ("15".equals(wmTaskContent.getTemp30())) {
+                WmDaHospital wmDaHospital = new WmDaHospital();
+                wmDaHospital.setYymc(wmTaskContent.getTemp3());
+                int num = wmDaHospitalMapper.selectCount(Wrappers.query(wmDaHospital));
+                if (num != 0) {
+                    wmTaskContent.setTemp30("30");
+                }
+            }
+
+            String date = wmTaskContent.getTemp2();
+            LocalDate d = LocalDate.parse(date, df);
+            if (d.isAfter(now)) {
+                throw new RuntimeException("任务时间不能选择之后的时间");
+            }
+            if (now.minusDays(30).isAfter(d)) {
+                throw new RuntimeException("30天以前的任务无法提交");
+            }
+        }
+
+        // 药店调查
+        if ("18".equals(wmTaskContent.getTemp30())) {
+            // 会议类型
+            String date = wmTaskContent.getTemp6();
+            LocalDate d = LocalDate.parse(date, df);
+            if (d.isAfter(now)) {
+                throw new RuntimeException("任务时间不能选择之后的时间");
+            }
+            if (now.minusDays(30).isAfter(d)) {
+                throw new RuntimeException("30天以前的任务无法提交");
+            }
+        }
+
+        if ("29".equals(wmTaskContent.getTemp30())) {
+            if ("1".equals(wmTaskContent.getTemp29())) {
+                wmTaskContent.setTemp30("5");
+            } else {
+                wmTaskContent.setTemp30("6");
+            }
+        }
+
+        // 校验任务百分比限制规则(如果积分包值大于【任务配置】-【百分比限制】配置的起始值,
+        // 且【任务配置】-【百分比限制】所选的任务类型对应的任务总完成积分值>积分包值*【任务配置】-【百分比限制】配置的百分比,则校验不通过)
+        log.info("当前提交任务类型id:{}", taskTypeId);
+        if (!ArrayUtil.contains(ingTypeIds, taskTypeId)) {
+
+            List<String> toCheckTaskTypeIds;
+            if ("15".equals(taskTypeId) || "30".equals(taskTypeId)) {
+                toCheckTaskTypeIds = new ArrayList<>(2);
+                toCheckTaskTypeIds.add("15");
+                toCheckTaskTypeIds.add("30");
+            } else {
+                toCheckTaskTypeIds = Collections.singletonList(taskTypeId);
+            }
+
+            R<?> checkPercentRuleResult =
+                    wmTaskSubmissionPercentRuleService.checkPercentRule(scorePackage, SecurityUtils.getUser().getDeptId(), null, toCheckTaskTypeIds);
+            if (checkPercentRuleResult.getCode() != 0) {
+                throw new RuntimeException(checkPercentRuleResult.getMsg());
+            }
+        }
+
+        // 校验医院信息修改的任务(同一家医院,同一个人一个月只能修改一次,该医院一个月最多可修改3次)
+        if ("30".equals(wmTaskContent.getTemp30())) {
+            rules = this.getTaskSubmissionRule("30", scorePackage.getRelatedService());
+            ctt_30(wmTaskContent.getTemp29(), userId, rules);
+        }
+
+        // 校验首次库存调查
+        if ("31".equals(wmTaskContent.getTemp30())) {
+            // 获取调查类别:0:首次
+            String surveyType = wmTaskContent.getTemp23();
+
+            if (!"0".equals(surveyType)) {
+                throw new RuntimeException("首次调查类型错误");
+            }
+
+            // 调查对象
+            String surveyTarget = wmTaskContent.getTemp26label();
+            // 调查品种
+            String surveyCategory = wmTaskContent.getTemp24label();
+            // 所属区域
+            String location = wmTaskContent.getTemp5();
+
+            List<WmTaskContent> taskContentList = list(Wrappers.<WmTaskContent>lambdaQuery()
+                    .eq(WmTaskContent::getTemp23, surveyType)
+                    .eq(WmTaskContent::getTemp26, surveyTarget)
+                    .eq(WmTaskContent::getTemp24, surveyCategory)
+            );
+
+            log.warn("内容:【{}】", taskContentList.toString());
+            if (CollectionUtils.isNotEmpty(taskContentList)) {
+                // 获取 所有任务id为31的任务且不是审核不通过的任务
+                List<Integer> taskContentIdList = taskContentList.stream().mapToInt(WmTaskContent::getId).boxed().collect(Collectors.toList());
+                List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery().eq(WmTask::getTaskTypeId, "31")
+                        .ne(WmTask::getTaskStatus, "4")
+                        .in(WmTask::getTaskContentId, taskContentIdList)
+                );
+                if (CollectionUtils.isNotEmpty(wmTaskList)) {
+                    throw new RuntimeException("该药品在本院的首次调查已经完结,不能提交");
+                }
+            }
+
+            // 设置调查对象和调查品种
+            wmTaskContent.setTemp24(surveyCategory);
+            wmTaskContent.setTemp26(surveyTarget);
+
+        }
+    }
+
+    /**
+     * 提交任务任务
+     *
+     * @param wmTaskContent 任务内容
+     * @return 保存结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R<?> saveTaskContent(WmTaskContent wmTaskContent, String ip, String region) {
+
+        // 获取积分包
+        WmScorePackage tWmScorePackage = this.checkPackage(wmTaskContent.getTemp32());
+
+        // 校验
+        HnqzUser user = SecurityUtils.getUser();
+        UserVO sysU = sysUserService.selectUserVoById(user.getId());
+
+        // 校验超过60周岁,不能做任务
+        Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
+        if (CollUtil.isNotEmpty(checkResult) && checkResult.containsKey("OVER")) {
+            throw new RuntimeException(checkResult.get("OVER"));
+        }
+
+        List<WmScorePackageStatus> statusList = checkPackageStatus(sysU.getUserId(), tWmScorePackage.getId());
+
+        // 查询任务类型启用状态
+        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
+                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+        if (CollUtil.isEmpty(rules)) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+        if (!ArrayUtil.contains(taskTypeIds, wmTaskContent.getTemp30())) {
+            throw new RuntimeException("当前企业未开启该任务!");
+        }
+
+        // 检验分值 3W
+        this.limitScore(sysU.getUserId(), sysU.getDeptId(), tWmScorePackage.getPackageType1());
+
+        // 校验任务个数
+        String taskTypeIdStr = wmTaskContent.getTemp30().trim();
+
+        if (!StrUtil.equalsAny(taskTypeIdStr, "8", "8", "8", "8")) {
+            Integer pId = Integer.valueOf(tWmScorePackage.getId());
+            Map<Integer, List<WmPackageTaskTypeQty>> qtyList = packageTaskTypeQtyService.listPkgTaskTypeQtyByPkgIds(Collections.singletonList(pId)).stream().collect(Collectors.groupingBy(WmPackageTaskTypeQty::getTaskTypeId));
+
+            List<WmPackageTaskTypeQty> packageTaskTypeQtyList = qtyList.get(Integer.valueOf(taskTypeIdStr));
+
+            if (CollUtil.isEmpty(packageTaskTypeQtyList)) {
+                throw new RuntimeException("当前积分包拆解结果中该服务类型数量为:0,不能提交!");
+            } else {
+
+                // 获取任务类型比较数据
+                Integer count = wmTaskMapper.selectCount(Wrappers.<WmTask>lambdaQuery().eq(WmTask::getTaskTypeId, taskTypeIdStr).eq(WmTask::getScorePackageId, pId.toString()));
+
+                Integer qty = packageTaskTypeQtyList.get(0).getQty();
+
+                if (qty - count <= 0) {
+                    throw new RuntimeException("当前积分包拆解结果中该服务类型数量为:" + qty + ",已提交数为:" + count + ",剩余个数为:0,不能提交!");
+                }
+            }
+
+        }
+
+
+        // 获取校验规则
+        // List<WmTaskSubmissionRule.SubmissionRule> taskSubmissionRule = this.getTaskSubmissionRule(wmTaskContent.getTemp30(), tWmScorePackage.getRelatedService());
+
+
+        // 校验提交数据
+        // this.checkTaskContent(tWmScorePackage, wmTaskContent, sysU.getUserId(), taskSubmissionRule);
+
+        Map<String, String> resultMap = new HashMap<>();
+        WmScorePackageStatus scorePackageStatus = statusList.get(0);
+        int score = 0;
+        if (this.save(wmTaskContent)) {
+            if (null != sysU) {
+                WmTask wmTask = new WmTask();
+                wmTask.setRemoteIp(ip);
+                wmTask.setIp2region(region);
+                wmTask.setTaskFrom("1");
+                LocalDateTime localDateTime = LocalDateTime.now();
+                wmTask.setUpdateTime(localDateTime);
+                // 任务提交人
+                wmTask.setTaskUserId(String.valueOf(sysU.getUserId()));
+                // 调研时间
+                wmTask.setLookintoDate(localDateTime);
+                wmTask.setDrugEntId(tWmScorePackage.getDrugEntId());
+                wmTask.setTaskTypeId(wmTaskContent.getTemp30());
+
+                WmTaskType wmTaskType = new WmTaskType();
+                wmTaskType.setRuleId(tWmScorePackage.getRuleId());
+                WmTaskType wmTaskType1 = wmTaskTypeService.getById(wmTaskContent.getTemp30());
+                wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
+                score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+                // 医院区分新增和修改,修改积分搞为1000 start
+                if ("15".equals(wmTaskContent.getTemp30()) || "30".equals(wmTaskContent.getTemp30())) {
+                    System.err.println("医院区分新增和修改:" + score);
+                    WmDaHospital wmDaHospital = new WmDaHospital();
+                    wmDaHospital.setYymc(wmTaskContent.getTemp3());
+                    if (wmDaHospitalMapper.selectCount(Wrappers.query(wmDaHospital)) != 0) {
+                        WmTaskType wmTaskType2 = new WmTaskType();
+                        WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                        wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                        wmTaskType2.setTaskTypeName("医院信息修改");
+                        score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+                    }
+                }
+                // 医院区分新增和修改,修改积分搞为1000 end
+
+                // 2021-06-11 库存调查分成,首次调查和常规调查,常规调查走之前的逻辑 start
+                if ("31".equals(wmTaskContent.getTemp30())) {
+                    WmTaskType wmTaskType2 = new WmTaskType();
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    wmTaskType2.setTaskTypeName("库存信息收集-首次");
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+                }
+                // 2021-06-11 库存调查分成,首次调查和常规调查,常规调查走之前的逻辑 end
+
+                // 调剂服务 任务积分值 = 每一味积分值 * 调剂味数
+                if ("38".equals(wmTaskContent.getTemp30())) {
+                    WmTaskType wmTaskType2 = new WmTaskType();
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    wmTaskType2.setTaskTypeName("调剂服务");
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+                    score = (int) Math.round(score * Double.parseDouble(wmTaskContent.getTemp24()));
+                }
+
+                // 应收账款回款-A类/应收账款回款-B类/应收账款回款-C类 积分值按照“回款总额”乘“回款类别”对应的百分比,四舍五入
+                if ("39".equals(wmTaskContent.getTemp30())) {
+                    WmTaskType wmTaskType2 = new WmTaskType();
+                    // 根据选择的回款类别 查任务类型模板
+                    WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
+                    // 查询当前企业的任务类型积分
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    wmTaskType2.setTaskTypeName(baseTaskType.getTaskTypeName());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+                    // 计算实际任务积分(任务积分值 = 每一味积分值 * 调剂味数),这里应收账款回款积分值存的是1000的倍数,所以需要除以1000
+                    score = (int) Math.round(score * Double.parseDouble(wmTaskContent.getTemp8()) / 1000.0D);
+                }
+
+                // 手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型 积分值设置
+                if ("42".equals(wmTaskContent.getTemp30())) {
+                    // 根据选择的跟台级别 设置积分值
+                    String taskTypeId = "42";
+                    switch (wmTaskContent.getTemp23()) {
+                        case "1":
+                            taskTypeId = "42";
+                            break;
+                        case "2":
+                            taskTypeId = "43";
+                            break;
+                        case "3":
+                            taskTypeId = "44";
+                            break;
+                        default:
+                    }
+                    WmTaskType baseTaskType = wmTaskTypeService.getById(taskTypeId);
+                    // 查询当前企业的任务类型积分
+                    WmTaskType wmTaskType2 = new WmTaskType();
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    wmTaskType2.setTaskTypeName(baseTaskType.getTaskTypeName());
+                    wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+                    // 设置实际的任务类型
+                    wmTaskContent.setTemp30(taskTypeId);
+                    wmTask.setTaskTypeId(taskTypeId);
+                }
+
+                // 药店推广-47 积分值设置
+                if ("47".equals(wmTaskContent.getTemp30())) {
+                    // 根据选择的推广类型 查任务类型模板
+                    WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
+                    // 查询当前企业的任务类型积分
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    WmTaskType queryTaskType = new WmTaskType();
+                    queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                    queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
+                    queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
+                    // 计算实际任务积分(数量*企业这个任务类型的积分值)
+                    score = score * Integer.parseInt(wmTaskContent.getTemp13());
+                    // 设置实际的任务类型
+                    wmTaskContent.setTemp30(wmTaskContent.getTemp23());
+                    wmTask.setTaskTypeId(wmTaskContent.getTemp23());
+                }
+
+                // 信用管理A/B/C 积分值设置
+                // if ("51".equals(wmTaskContent.getTemp30())) {
+                //	// 根据选择的信用等级 查任务类型模板
+                //	WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
+                //	// 查询当前企业的任务类型积分
+                //	WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                //	WmTaskType queryTaskType = new WmTaskType();
+                //	queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                //	queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
+                //	queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                //	score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
+                //	// 设置实际的任务类型
+                //	wmTaskContent.setTemp30(wmTaskContent.getTemp23());
+                //	wmTask.setTaskTypeId(wmTaskContent.getTemp23());
+                //}
+                // 首营管理-诊所/药店
+                if ("56".equals(wmTaskContent.getTemp30())) {
+                    // 根据选择的终端类型 查任务类型模板
+                    WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp3());
+                    // 查询当前企业的任务类型积分
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+                    WmTaskType queryTaskType = new WmTaskType();
+                    queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                    queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
+                    queryTaskType.setRuleId(wmScorePackage1.getRuleId());
+                    score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
+                    // 设置实际的任务类型
+                    wmTaskContent.setTemp30(wmTaskContent.getTemp3());
+                    wmTask.setTaskTypeId(wmTaskContent.getTemp3());
+                }
+
+                // 校验任务类型是否启用
+                WmTaskType _baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp30());
+                WmTaskType queryTaskType = new WmTaskType();
+                queryTaskType.setRuleId(tWmScorePackage.getRuleId());
+                queryTaskType.setTaskTypeName(_baseTaskType.getTaskTypeName());
+                queryTaskType.setDelFlag("0");
+                List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.query(queryTaskType));
+                if (CollUtil.isEmpty(deptTaskTypes)) {
+                    throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型不存在");
+                }
+                if (EnableEnum.DISABLE.val().equals(deptTaskTypes.get(0).getEnableFlag())) {
+                    throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型已停用");
+                }
+
+                log.info("获取任务得分:{}", score);
+
+                if (score < 0) {
+                    return R.failed("获取任务积分失败");
+                }
+                wmTask.setScore(score);
+
+                resultMap.put("score", tWmScorePackage.getPackageType1());
+                log.warn("获取积分包ID:{}", tWmScorePackage);
+
+                wmTask.setScorePackageId(tWmScorePackage.getId());
+                wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
+
+                wmTask.setTaskContentId(String.valueOf(wmTaskContent.getId()));
+
+                if (HnqzUtils.isZbRole(sysU.getRoleList(), 5)) {
+                    wmTask.setTaskUserType("5");
+                }
+
+                wmTask.setCreateTime(localDateTime);
+
+                if (HnqzUtils.isZbRole(sysU.getRoleList(), 6)) {
+                    wmTask.setTaskUserType("6");
+                }
+
+                wmTask.setDeptId(sysU.getDeptId() + "");
+                wmTask.setSubmitStatus("0");
+
+                // 不需要平台管理员审核的直接提交上级审核  taskStatus = 2 已提交 否则 taskStatus = 1 待提交
+                wmTask.setRealFlag("0");
+                wmTask.setTaskStatus("2");
+
+                wmTask.setTaskNumber(taskSequence.nextNo());
+                // 保存任务
+                boolean isSave = wmTaskService.save(wmTask);
+
+                /*
+                 * 2020-12-21
+                 * 15、30-医院 16-商业  18-药店
+                 * 三类修改为平台管理员审核后才能在任务中心查出来
+                 * realFlag  0-真实  1-非真实  9-审核中
+                 *
+                 * 2021-9-2 by lixuesong
+                 * 去掉平台管理员审核,调整到个人任务审核
+                 */
+                if ("15".equals(wmTaskContent.getTemp30())
+                        || "16".equals(wmTaskContent.getTemp30())
+                        || "30".equals(wmTaskContent.getTemp30())
+                        || "18".equals(wmTaskContent.getTemp30())) {
+                    // 校验调查信息审核,对比信息无改动则不可保存(15、30-医院 16-商业  18-药店)
+                    R taskResult = wmTaskService.getSurveryTaskInfo(wmTask.getId());
+                    Map<String, Object> data = (Map<String, Object>) taskResult.getData();
+                    WmTask task = (WmTask) data.get("wmTask");
+                    if ("3".equals(task.getCompareResult())) {
+                        // 3-信息无变化,删除这条任务
+                        wmTaskService.removeById(wmTask.getId());
+                        this.removeById(wmTask.getTaskContentId());
+                        return R.failed("信息无变化,不可提交");
+                    }
+                    resultMap.put("type", "3");
+                }
+                // 2020-12-21 end
+
+                // 判断任务是否完成
+                if (isSave) {
+                    WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
+                    if (null != wmScorePackage1) {
+                        WmTask taskQuery = new WmTask();
+                        taskQuery.setScorePackageId(tWmScorePackage.getId());
+                        QueryWrapper<WmTask> taskQueryWrapper = Wrappers.query(taskQuery);
+
+                        // 查询出 审核通过和审核中的任务
+                        taskQueryWrapper.lambda()
+                                .ne(WmTask::getTaskStatus, "4")
+                                .eq(WmTask::getRealFlag, "0");
 //								.ne(WmTask::getRealFlag, "1");
-						List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
-
-						// 判断定量还是定额 1- 定额   2-定量
-						if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
-
-							int totalCount = 0;
-							for (WmTask wmtask : wmTaskList) {
-								totalCount += wmtask.getScore();
-							}
-
-							if (totalCount >= wmScorePackage1.getScore()) {
-								wmScorePackage1.setTaskAddFlag("0");
-								scorePackageStatus.setTaskAddFlag("0");
-								wmScorePackageStatusService.updateById(scorePackageStatus);
-							}
-							resultMap.put("type", "1");
-						} else if (StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
-							// 多人积分包处理
-							int totalCount = 0;
-							for (WmTask wmtask : wmTaskList) {
-								totalCount += wmtask.getScore();
-							}
-
-							if (totalCount >= wmScorePackage1.getScore()) {
-								wmScorePackage1.setTaskAddFlag("0");
-								List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
-										.eq(WmScorePackageStatus::getStatus, "2")
-										.eq(WmScorePackageStatus::getTaskAddFlag, "1")
-										.eq(WmScorePackageStatus::getPackageId, tWmScorePackage.getId()));
-								if (CollUtil.isNotEmpty(packageStatusList)) {
-									packageStatusList.forEach(packageStatus -> {
-										WmScorePackageStatus updatePackageStatus = new WmScorePackageStatus();
-										updatePackageStatus.setId(packageStatus.getId());
-										updatePackageStatus.setTaskAddFlag("0");
-										updatePackageStatus.setUpdateTime(LocalDateTime.now());
-										wmScorePackageStatusService.updateById(updatePackageStatus);
-									});
-								}
-							}
-							resultMap.put("type", "1");
-						} else if ("2".equals(wmScorePackage1.getPackageType1()) || "3".equals(wmScorePackage1.getPackageType1())) {
-							score = 0;
-
-							List<WmTask> userTaskList = wmTaskList.stream().filter(item ->
-									item.getTaskUserId().equals(sysU.getUserId() + "")).collect(Collectors.toList());
-
-							if (userTaskList.size() >= scorePackageStatus.getTaskNum()) {
-								scorePackageStatus.setTaskAddFlag("0");
-								wmScorePackageStatusService.updateById(scorePackageStatus);
-
-								// 改变大包状态
-								WmScorePackageStatus queryAll = new WmScorePackageStatus();
-								queryAll.setPackageId(tWmScorePackage.getId());
-								queryAll.setStatus("2");
-								queryAll.setTaskAddFlag("0");
-								List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
-										list(Wrappers.query(queryAll));
-								if (new BigDecimal(wmScorePackage1.getUserNum())
-										.compareTo(new BigDecimal(statusAll.size())) <= 0) {
-									wmScorePackage1.setTaskAddFlag("0");
-								}
-							}
-
-							resultMap.put("type", "2");
-						}
-
-						wmScorePackage1.setIsConduct("1");
-						wmScorePackageService.updateById(wmScorePackage1);
-
-					}
-
-				} else {
-					return R.failed("任务保存失败");
-				}
-				//保存打卡记录
-				if ("5".equals(wmTaskContent.getTemp30()) || "6".equals(wmTaskContent.getTemp30()) || "33".equals(wmTaskContent.getTemp30())) {
-					WmUserSign wmUserSign = new WmUserSign();
-					wmUserSign.setSignEntType(wmTaskContent.getTemp29());
-					wmUserSign.setSignEntName(wmTaskContent.getTemp7());
-					wmUserSign.setLatitude(wmTaskContent.getTemp28());
-					wmUserSign.setLongitude(wmTaskContent.getTemp26());
-					wmUserSign.setSignUserid(wmTaskContent.getTemp25());
-					wmUserSign.setSignEntId(wmTaskContent.getTemp24());
-					wmUserSign.setSignDate(localDateTime);
-					wmUserSignMapper.insert(wmUserSign);
-				}
-
-				// 推送任务h5截图
-				applicationEventPublisher.publishEvent(new TaskInfoImgEvent(wmTask.getId()));
-			}
-		}
-
-		resultMap.put("score", String.valueOf(score));
-		return R.ok(resultMap);
-	}
-
-
-	/**
-	 * 三方提交任务
-	 *
-	 * @param resource 任务信息
-	 * @return 创建结果
-	 */
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean saveTaskContent1(WmTaskDTO.OnOutPartyCreate resource) {
-
-		final String pkgId = resource.getPkgId();
-		final String username = resource.getUsername();
-		final String taskTypeId = resource.getTaskTypeId();
-
-
-		// 获取积分包
-		WmScorePackage tWmScorePackage = wmScorePackageService.getById(pkgId);
-		if (tWmScorePackage == null) {
-			log.error("当前企业不存在,ID为[{}]的积分包", pkgId);
-			throw new BizException("积分包不存在");
-		}
-		if (LocalDate.now().isAfter(tWmScorePackage.getEndTime())) {
-			throw new BizException("当前积分包已过截止日期");
-		}
-
-		Integer deptId = Integer.parseInt(tWmScorePackage.getDeptId());
-		log.info("获取企业ID: [{}]", deptId);
-
-		// 校验
-		SysUser user = sysUserService.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getDeptId, deptId).eq(SysUser::getUsername, username)
-				.eq(SysUser::getDelFlag, CommonConstants.STATUS_NORMAL)
-				.eq(SysUser::getLockFlag, CommonConstants.STATUS_NORMAL)
-		);
-
-		if (user == null) {
-			log.error("当前企业不存在,手机号为[{}]的人员", username);
-			throw new BizException("人员不存在");
-		}
-
-		UserVO sysU = sysUserService.selectUserVoById(user.getUserId());
-
-
-		// 校验超过60周岁,不能做任务
-		Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
-		if (CollUtil.isNotEmpty(checkResult) && checkResult.containsKey("OVER")) {
-			log.error("当前人员超过60周岁");
-			throw new BizException(checkResult.get("OVER"));
-		}
-
-		List<WmScorePackageStatus> statusList = checkPackageStatus(sysU.getUserId(), tWmScorePackage.getId());
-
-		// 查询任务类型启用状态
-		List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-				.eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
-				.eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
-		if (CollUtil.isEmpty(rules)) {
-			log.error("当前企业未开启该任务");
-			throw new BizException("当前企业未开启该任务!");
-		}
-
-		String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
-		if (!ArrayUtil.contains(taskTypeIds, taskTypeId)) {
-			log.error("当前企业未开启该任务");
-			throw new BizException("当前企业未开启该任务!");
-		}
-
-		// 检验分值 3W
-		this.limitScore(sysU.getUserId(), deptId, tWmScorePackage.getPackageType1());
-
-		// 保存详情
-		WmTaskContent taskContent = new WmTaskContent();
-		taskContent.setTemp28(JSONUtil.toJsonStr(resource.getResult()));
-		taskContent.setTemp29(JSONUtil.toJsonStr(resource.getResult()));
-		taskContent.setTemp30(taskTypeId);
-		taskContent.setTemp32(pkgId);
-		boolean save = this.save(taskContent);
-
-		WmScorePackageStatus scorePackageStatus = statusList.get(0);
-		if (save) {
-
-			WmTask wmTask = new WmTask();
-			wmTask.setTaskFrom("1");
-			LocalDateTime now = LocalDateTime.now();
-			wmTask.setUpdateTime(now);
-			wmTask.setCreateTime(now);
-			wmTask.setTaskUserId(String.valueOf(sysU.getUserId()));
-			wmTask.setLookintoDate(now);
-			wmTask.setDrugEntId(tWmScorePackage.getDrugEntId());
-			wmTask.setTaskTypeId(taskTypeId);
-
-			WmTaskType wmTaskType = new WmTaskType();
-			wmTaskType.setRuleId(tWmScorePackage.getRuleId());
-			WmTaskType wmTaskType1 = wmTaskTypeService.getById(taskTypeId);
-			wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-			int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
-
-
-			// 校验任务类型是否启用
-			WmTaskType _baseTaskType = wmTaskTypeService.getById(taskTypeId);
-			WmTaskType queryTaskType = new WmTaskType();
-			queryTaskType.setRuleId(tWmScorePackage.getRuleId());
-			queryTaskType.setTaskTypeName(_baseTaskType.getTaskTypeName());
-			queryTaskType.setDelFlag("0");
-			List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.query(queryTaskType));
-			if (CollUtil.isEmpty(deptTaskTypes)) {
-				throw new BizException(_baseTaskType.getTaskTypeName() + "任务类型不存在");
-			}
-			if (EnableEnum.DISABLE.val().equals(deptTaskTypes.get(0).getEnableFlag())) {
-				throw new BizException(_baseTaskType.getTaskTypeName() + "任务类型已停用");
-			}
-
-			log.info("获取任务得分:{}", score);
-
-			if (score < 0) {
-				throw new BizException("获取任务积分失败");
-			}
-			wmTask.setScore(score);
-
-			log.warn("获取积分包ID:{}", tWmScorePackage);
-			wmTask.setScorePackageId(tWmScorePackage.getId());
-			wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
-
-			wmTask.setTaskContentId(String.valueOf(taskContent.getId()));
-
-			if (HnqzUtils.isZbRole(sysU.getRoleList(), 5)) {
-				wmTask.setTaskUserType("5");
-			}
-
-			if (HnqzUtils.isZbRole(sysU.getRoleList(), 6)) {
-				wmTask.setTaskUserType("6");
-			}
-
-			wmTask.setDeptId(deptId.toString());
-			wmTask.setSubmitStatus("0");
-
-			// 不需要平台管理员审核的直接提交上级审核  taskStatus = 2 已提交 否则 taskStatus = 1 待提交
-			wmTask.setRealFlag("0");
-			wmTask.setTaskStatus("2");
-
-			wmTask.setTaskNumber(taskSequence.nextNo());
-			//保存任务
-			boolean isSave = wmTaskService.save(wmTask);
-
-			//判断任务是否完成
-			if (isSave) {
-				WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
-				if (null != wmScorePackage1) {
-					WmTask taskQuery = new WmTask();
-					taskQuery.setScorePackageId(tWmScorePackage.getId());
-					QueryWrapper<WmTask> taskQueryWrapper = Wrappers.query(taskQuery);
-
-					// 查询出 审核通过和审核中的任务
-					taskQueryWrapper.lambda()
-							.ne(WmTask::getTaskStatus, "4")
-							.eq(WmTask::getRealFlag, "0");
-					List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
-
-					// 判断定量还是定额 1- 定额   2-定量
-					if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
-
-						int totalCount = 0;
-						for (WmTask wmtask : wmTaskList) {
-							totalCount += wmtask.getScore();
-						}
-
-						if (totalCount >= wmScorePackage1.getScore()) {
-							wmScorePackage1.setTaskAddFlag("0");
-							scorePackageStatus.setTaskAddFlag("0");
-							wmScorePackageStatusService.updateById(scorePackageStatus);
-						}
-					} else if (StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
-						// 多人积分包处理
-						int totalCount = 0;
-						for (WmTask wmtask : wmTaskList) {
-							totalCount += wmtask.getScore();
-						}
-
-						if (totalCount >= wmScorePackage1.getScore()) {
-							wmScorePackage1.setTaskAddFlag("0");
-							List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
-									.eq(WmScorePackageStatus::getStatus, "2")
-									.eq(WmScorePackageStatus::getTaskAddFlag, "1")
-									.eq(WmScorePackageStatus::getPackageId, tWmScorePackage.getId()));
-							if (CollUtil.isNotEmpty(packageStatusList)) {
-								packageStatusList.forEach(packageStatus -> {
-									WmScorePackageStatus updatePackageStatus = new WmScorePackageStatus();
-									updatePackageStatus.setId(packageStatus.getId());
-									updatePackageStatus.setTaskAddFlag("0");
-									updatePackageStatus.setUpdateTime(LocalDateTime.now());
-									wmScorePackageStatusService.updateById(updatePackageStatus);
-								});
-							}
-						}
-					} else if ("2".equals(wmScorePackage1.getPackageType1()) || "3".equals(wmScorePackage1.getPackageType1())) {
-						score = 0;
-
-						List<WmTask> userTaskList = wmTaskList.stream().filter(item ->
-								item.getTaskUserId().equals(sysU.getUserId() + "")).collect(Collectors.toList());
-
-						if (userTaskList.size() >= scorePackageStatus.getTaskNum()) {
-							scorePackageStatus.setTaskAddFlag("0");
-							wmScorePackageStatusService.updateById(scorePackageStatus);
-
-							// 改变大包状态
-							WmScorePackageStatus queryAll = new WmScorePackageStatus();
-							queryAll.setPackageId(tWmScorePackage.getId());
-							queryAll.setStatus("2");
-							queryAll.setTaskAddFlag("0");
-							List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
-									list(Wrappers.query(queryAll));
-							if (new BigDecimal(wmScorePackage1.getUserNum())
-									.compareTo(new BigDecimal(statusAll.size())) <= 0) {
-								wmScorePackage1.setTaskAddFlag("0");
-							}
-						}
-
-					}
-
-					wmScorePackage1.setIsConduct("1");
-					wmScorePackageService.updateById(wmScorePackage1);
-
-				}
-
-			} else {
-				throw new BizException("任务保存失败");
-			}
-		} else {
-			throw new BizException("任务详情保存失败");
-		}
-
-		return true;
-	}
+                        List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
+
+                        // 判断定量还是定额 1- 定额   2-定量
+                        if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
+
+                            int totalCount = 0;
+                            for (WmTask wmtask : wmTaskList) {
+                                totalCount += wmtask.getScore();
+                            }
+
+                            if (totalCount >= wmScorePackage1.getScore()) {
+                                wmScorePackage1.setTaskAddFlag("0");
+                                scorePackageStatus.setTaskAddFlag("0");
+                                wmScorePackageStatusService.updateById(scorePackageStatus);
+                            }
+                            resultMap.put("type", "1");
+                        } else if (StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
+                            // 多人积分包处理
+                            int totalCount = 0;
+                            for (WmTask wmtask : wmTaskList) {
+                                totalCount += wmtask.getScore();
+                            }
+
+                            if (totalCount >= wmScorePackage1.getScore()) {
+                                wmScorePackage1.setTaskAddFlag("0");
+                                List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+                                        .eq(WmScorePackageStatus::getStatus, "2")
+                                        .eq(WmScorePackageStatus::getTaskAddFlag, "1")
+                                        .eq(WmScorePackageStatus::getPackageId, tWmScorePackage.getId()));
+                                if (CollUtil.isNotEmpty(packageStatusList)) {
+                                    packageStatusList.forEach(packageStatus -> {
+                                        WmScorePackageStatus updatePackageStatus = new WmScorePackageStatus();
+                                        updatePackageStatus.setId(packageStatus.getId());
+                                        updatePackageStatus.setTaskAddFlag("0");
+                                        updatePackageStatus.setUpdateTime(LocalDateTime.now());
+                                        wmScorePackageStatusService.updateById(updatePackageStatus);
+                                    });
+                                }
+                            }
+                            resultMap.put("type", "1");
+                        } else if ("2".equals(wmScorePackage1.getPackageType1()) || "3".equals(wmScorePackage1.getPackageType1())) {
+                            score = 0;
+
+                            List<WmTask> userTaskList = wmTaskList.stream().filter(item ->
+                                    item.getTaskUserId().equals(sysU.getUserId() + "")).collect(Collectors.toList());
+
+                            if (userTaskList.size() >= scorePackageStatus.getTaskNum()) {
+                                scorePackageStatus.setTaskAddFlag("0");
+                                wmScorePackageStatusService.updateById(scorePackageStatus);
+
+                                // 改变大包状态
+                                WmScorePackageStatus queryAll = new WmScorePackageStatus();
+                                queryAll.setPackageId(tWmScorePackage.getId());
+                                queryAll.setStatus("2");
+                                queryAll.setTaskAddFlag("0");
+                                List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
+                                        list(Wrappers.query(queryAll));
+                                if (new BigDecimal(wmScorePackage1.getUserNum())
+                                        .compareTo(new BigDecimal(statusAll.size())) <= 0) {
+                                    wmScorePackage1.setTaskAddFlag("0");
+                                }
+                            }
+
+                            resultMap.put("type", "2");
+                        }
+
+                        wmScorePackage1.setIsConduct("1");
+                        wmScorePackageService.updateById(wmScorePackage1);
+
+                    }
+
+                } else {
+                    return R.failed("任务保存失败");
+                }
+                // 保存打卡记录
+                if ("5".equals(wmTaskContent.getTemp30()) || "6".equals(wmTaskContent.getTemp30()) || "33".equals(wmTaskContent.getTemp30())) {
+                    WmUserSign wmUserSign = new WmUserSign();
+                    wmUserSign.setSignEntType(wmTaskContent.getTemp29());
+                    wmUserSign.setSignEntName(wmTaskContent.getTemp7());
+                    wmUserSign.setLatitude(wmTaskContent.getTemp28());
+                    wmUserSign.setLongitude(wmTaskContent.getTemp26());
+                    wmUserSign.setSignUserid(wmTaskContent.getTemp25());
+                    wmUserSign.setSignEntId(wmTaskContent.getTemp24());
+                    wmUserSign.setSignDate(localDateTime);
+                    wmUserSignMapper.insert(wmUserSign);
+                }
+
+                // 推送任务h5截图
+                applicationEventPublisher.publishEvent(new TaskInfoImgEvent(wmTask.getId()));
+            }
+        }
+
+        resultMap.put("score", String.valueOf(score));
+        return R.ok(resultMap);
+    }
+
+
+    /**
+     * 三方提交任务
+     *
+     * @param resource 任务信息
+     * @return 创建结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveTaskContent1(WmTaskDTO.OnOutPartyCreate resource) {
+
+        final String pkgId = resource.getPkgId();
+        final String username = resource.getUsername();
+        final String taskTypeId = resource.getTaskTypeId();
+
+
+        // 获取积分包
+        WmScorePackage tWmScorePackage = wmScorePackageService.getById(pkgId);
+        if (tWmScorePackage == null) {
+            log.error("当前企业不存在,ID为[{}]的积分包", pkgId);
+            throw new BizException("积分包不存在");
+        }
+        if (LocalDate.now().isAfter(tWmScorePackage.getEndTime())) {
+            throw new BizException("当前积分包已过截止日期");
+        }
+
+        Integer deptId = Integer.parseInt(tWmScorePackage.getDeptId());
+        log.info("获取企业ID: [{}]", deptId);
+
+        // 校验
+        SysUser user = sysUserService.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getDeptId, deptId).eq(SysUser::getUsername, username)
+                .eq(SysUser::getDelFlag, CommonConstants.STATUS_NORMAL)
+                .eq(SysUser::getLockFlag, CommonConstants.STATUS_NORMAL)
+        );
+
+        if (user == null) {
+            log.error("当前企业不存在,手机号为[{}]的人员", username);
+            throw new BizException("人员不存在");
+        }
+
+        UserVO sysU = sysUserService.selectUserVoById(user.getUserId());
+
+
+        // 校验超过60周岁,不能做任务
+        Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
+        if (CollUtil.isNotEmpty(checkResult) && checkResult.containsKey("OVER")) {
+            log.error("当前人员超过60周岁");
+            throw new BizException(checkResult.get("OVER"));
+        }
+
+        List<WmScorePackageStatus> statusList = checkPackageStatus(sysU.getUserId(), tWmScorePackage.getId());
+
+        // 查询任务类型启用状态
+        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
+                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+        if (CollUtil.isEmpty(rules)) {
+            log.error("当前企业未开启该任务");
+            throw new BizException("当前企业未开启该任务!");
+        }
+
+        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+        if (!ArrayUtil.contains(taskTypeIds, taskTypeId)) {
+            log.error("当前企业未开启该任务");
+            throw new BizException("当前企业未开启该任务!");
+        }
+
+        // 检验分值 3W
+        this.limitScore(sysU.getUserId(), deptId, tWmScorePackage.getPackageType1());
+
+        // 保存详情
+        WmTaskContent taskContent = new WmTaskContent();
+        taskContent.setTemp28(JSONUtil.toJsonStr(resource.getResult()));
+        taskContent.setTemp29(JSONUtil.toJsonStr(resource.getResult()));
+        taskContent.setTemp30(taskTypeId);
+        taskContent.setTemp32(pkgId);
+        boolean save = this.save(taskContent);
+
+        WmScorePackageStatus scorePackageStatus = statusList.get(0);
+        if (save) {
+
+            WmTask wmTask = new WmTask();
+            wmTask.setTaskFrom("1");
+            LocalDateTime now = LocalDateTime.now();
+            wmTask.setUpdateTime(now);
+            wmTask.setCreateTime(now);
+            wmTask.setTaskUserId(String.valueOf(sysU.getUserId()));
+            wmTask.setLookintoDate(now);
+            wmTask.setDrugEntId(tWmScorePackage.getDrugEntId());
+            wmTask.setTaskTypeId(taskTypeId);
+
+            WmTaskType wmTaskType = new WmTaskType();
+            wmTaskType.setRuleId(tWmScorePackage.getRuleId());
+            WmTaskType wmTaskType1 = wmTaskTypeService.getById(taskTypeId);
+            wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
+            int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+
+            // 校验任务类型是否启用
+            WmTaskType _baseTaskType = wmTaskTypeService.getById(taskTypeId);
+            WmTaskType queryTaskType = new WmTaskType();
+            queryTaskType.setRuleId(tWmScorePackage.getRuleId());
+            queryTaskType.setTaskTypeName(_baseTaskType.getTaskTypeName());
+            queryTaskType.setDelFlag("0");
+            List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.query(queryTaskType));
+            if (CollUtil.isEmpty(deptTaskTypes)) {
+                throw new BizException(_baseTaskType.getTaskTypeName() + "任务类型不存在");
+            }
+            if (EnableEnum.DISABLE.val().equals(deptTaskTypes.get(0).getEnableFlag())) {
+                throw new BizException(_baseTaskType.getTaskTypeName() + "任务类型已停用");
+            }
+
+            log.info("获取任务得分:{}", score);
+
+            if (score < 0) {
+                throw new BizException("获取任务积分失败");
+            }
+            wmTask.setScore(score);
+
+            log.warn("获取积分包ID:{}", tWmScorePackage);
+            wmTask.setScorePackageId(tWmScorePackage.getId());
+            wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
+
+            wmTask.setTaskContentId(String.valueOf(taskContent.getId()));
+
+            if (HnqzUtils.isZbRole(sysU.getRoleList(), 5)) {
+                wmTask.setTaskUserType("5");
+            }
+
+            if (HnqzUtils.isZbRole(sysU.getRoleList(), 6)) {
+                wmTask.setTaskUserType("6");
+            }
+
+            wmTask.setDeptId(deptId.toString());
+            wmTask.setSubmitStatus("0");
+
+            // 不需要平台管理员审核的直接提交上级审核  taskStatus = 2 已提交 否则 taskStatus = 1 待提交
+            wmTask.setRealFlag("0");
+            wmTask.setTaskStatus("2");
+
+            wmTask.setTaskNumber(taskSequence.nextNo());
+            // 保存任务
+            boolean isSave = wmTaskService.save(wmTask);
+
+            // 判断任务是否完成
+            if (isSave) {
+                WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
+                if (null != wmScorePackage1) {
+                    WmTask taskQuery = new WmTask();
+                    taskQuery.setScorePackageId(tWmScorePackage.getId());
+                    QueryWrapper<WmTask> taskQueryWrapper = Wrappers.query(taskQuery);
+
+                    // 查询出 审核通过和审核中的任务
+                    taskQueryWrapper.lambda()
+                            .ne(WmTask::getTaskStatus, "4")
+                            .eq(WmTask::getRealFlag, "0");
+                    List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
+
+                    // 判断定量还是定额 1- 定额   2-定量
+                    if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
+
+                        int totalCount = 0;
+                        for (WmTask wmtask : wmTaskList) {
+                            totalCount += wmtask.getScore();
+                        }
+
+                        if (totalCount >= wmScorePackage1.getScore()) {
+                            wmScorePackage1.setTaskAddFlag("0");
+                            scorePackageStatus.setTaskAddFlag("0");
+                            wmScorePackageStatusService.updateById(scorePackageStatus);
+                        }
+                    } else if (StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
+                        // 多人积分包处理
+                        int totalCount = 0;
+                        for (WmTask wmtask : wmTaskList) {
+                            totalCount += wmtask.getScore();
+                        }
+
+                        if (totalCount >= wmScorePackage1.getScore()) {
+                            wmScorePackage1.setTaskAddFlag("0");
+                            List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+                                    .eq(WmScorePackageStatus::getStatus, "2")
+                                    .eq(WmScorePackageStatus::getTaskAddFlag, "1")
+                                    .eq(WmScorePackageStatus::getPackageId, tWmScorePackage.getId()));
+                            if (CollUtil.isNotEmpty(packageStatusList)) {
+                                packageStatusList.forEach(packageStatus -> {
+                                    WmScorePackageStatus updatePackageStatus = new WmScorePackageStatus();
+                                    updatePackageStatus.setId(packageStatus.getId());
+                                    updatePackageStatus.setTaskAddFlag("0");
+                                    updatePackageStatus.setUpdateTime(LocalDateTime.now());
+                                    wmScorePackageStatusService.updateById(updatePackageStatus);
+                                });
+                            }
+                        }
+                    } else if ("2".equals(wmScorePackage1.getPackageType1()) || "3".equals(wmScorePackage1.getPackageType1())) {
+                        score = 0;
+
+                        List<WmTask> userTaskList = wmTaskList.stream().filter(item ->
+                                item.getTaskUserId().equals(sysU.getUserId() + "")).collect(Collectors.toList());
+
+                        if (userTaskList.size() >= scorePackageStatus.getTaskNum()) {
+                            scorePackageStatus.setTaskAddFlag("0");
+                            wmScorePackageStatusService.updateById(scorePackageStatus);
+
+                            // 改变大包状态
+                            WmScorePackageStatus queryAll = new WmScorePackageStatus();
+                            queryAll.setPackageId(tWmScorePackage.getId());
+                            queryAll.setStatus("2");
+                            queryAll.setTaskAddFlag("0");
+                            List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
+                                    list(Wrappers.query(queryAll));
+                            if (new BigDecimal(wmScorePackage1.getUserNum())
+                                    .compareTo(new BigDecimal(statusAll.size())) <= 0) {
+                                wmScorePackage1.setTaskAddFlag("0");
+                            }
+                        }
+
+                    }
+
+                    wmScorePackage1.setIsConduct("1");
+                    wmScorePackageService.updateById(wmScorePackage1);
+
+                }
+
+            } else {
+                throw new BizException("任务保存失败");
+            }
+        } else {
+            throw new BizException("任务详情保存失败");
+        }
+
+        return true;
+    }
 
 }