Sfoglia il codice sorgente

Merge branch 'feat-20231110-b2bv2'

lixuesong 1 anno fa
parent
commit
fb5356d751
16 ha cambiato i file con 1621 aggiunte e 446 eliminazioni
  1. 3 0
      db/v2.0/20231114.sql
  2. 9 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  3. 223 13
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskController.java
  4. 266 233
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java
  5. 38 7
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java
  6. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskSubmissionRuleController.java
  7. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java
  8. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmTask.java
  9. 415 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/DeptTaskDTO.java
  10. 8 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageMapper.java
  11. 40 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskService.java
  12. 5 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java
  13. 441 150
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskServiceImpl.java
  14. 18 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java
  15. 89 23
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java
  16. 54 13
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

+ 3 - 0
db/v2.0/20231114.sql

@@ -4,3 +4,6 @@ alter table wm_dept_task_type_template
 alter table wm_user_sign_detail
     add detail json null comment '详情数据';
 
+
+alter table wm_score_package
+    add audit_management_fee_rates decimal(5, 2) default '0.00' not null comment '审核管理费比例';

+ 9 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -126,6 +126,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmWkArticleShareService;
 import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
 import com.qunzhixinxi.hnqz.admin.util.GetOpenIDUtil;
 import com.qunzhixinxi.hnqz.admin.util.Html2ImageByJsWrapper;
+import com.qunzhixinxi.hnqz.admin.util.OsEnvUtils;
 import com.qunzhixinxi.hnqz.admin.util.QRCodeGenerator;
 import com.qunzhixinxi.hnqz.admin.view.user.UserUpdateInput;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
@@ -2554,7 +2555,7 @@ public class ApiController {
 	@GetMapping("/getQrCodeByUrl")
 	public R getQrCodeByUrl(String url, int width, int height) throws FileNotFoundException {
 
-		String QR_CODE_IMAGE_PATH = "/" + UUID.randomUUID() + ".png";
+		String QR_CODE_IMAGE_PATH = OsEnvUtils.getEachEnvPaths().get("EXCEL_FILE_PATH") + "out/" + UUID.randomUUID() + ".png";
 		try {
 			QRCodeGenerator.generateQRCodeImage(url, width, height, QR_CODE_IMAGE_PATH);
 		} catch (WriterException e) {
@@ -2565,13 +2566,19 @@ public class ApiController {
 		File imageFile = new File(QR_CODE_IMAGE_PATH);
 		FileInputStream in = new FileInputStream(imageFile);
 		MultipartFile file = null;
+		R r = null;
 		try {
 			file = new MockMultipartFile("file", imageFile.getName(), "text/plain", IOUtils.toByteArray(in));
+			r = sysFileService.uploadFile(file);
+
+			// 删除缓存文件
+			in.close();
+			imageFile.delete();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 
-		return R.ok(sysFileService.uploadFile(file));
+		return R.ok(r);
 	}
 
 

+ 223 - 13
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskController.java

@@ -17,6 +17,7 @@ import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
@@ -37,11 +38,15 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -62,6 +67,128 @@ public class WmDeptTaskController {
     private final SysUserService sysUserService;
     private final RedisTemplate redisTemplate;
 
+	/**
+	 * 积分包任务统计
+	 *
+	 * @param packageId 积分包id
+	 * @return {@link R}<{@link ?}> 统计结果
+	 */
+	@GetMapping("/dept-task/task-statistics/{pacakgeId}")
+	public R<?> getTaskStatistics(@PathVariable("pacakgeId") String packageId) {
+		Map<String, String> result = new HashMap<>();
+
+		WmScorePackage scorePackage = wmScorePackageService.getById(packageId);
+
+		// 积分包包值
+		result.put("package_score", String.valueOf(scorePackage.getScore()));
+
+		Set<String> allPackageIds = new HashSet<>();
+		allPackageIds.add(packageId);
+		// 查询所有子包值
+		List<WmScorePackage> subPackageList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+				.eq(WmScorePackage::getRelationScoreId, packageId)
+				.ne(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.TERMINATED.val()));
+		if (CollUtil.isNotEmpty(subPackageList)) {
+			Set<String> subPackageIds = subPackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+			allPackageIds.addAll(subPackageIds);
+			// 查询所有子子包值
+			List<WmScorePackage> subSubPackageList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+					.in(WmScorePackage::getRelationScoreId, subPackageIds)
+					.ne(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.TERMINATED.val()));
+			if (CollUtil.isNotEmpty(subSubPackageList)) {
+				Set<String> subSubPackageIds = subSubPackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+				allPackageIds.addAll(subSubPackageIds);
+			}
+		}
+
+		// 查询taskType
+		List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
+				.eq(WmTaskType::getTaskTypeLevel, "1")
+				.eq(WmTaskType::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val()));
+
+		// 个人任务类型id
+		List<String> personalTaskTypeIds = taskTypeList.stream()
+				.filter(taskType -> "1".equals(taskType.getTaskReceiverType()) && !"p-19".equals(taskType.getParentId()))
+				.map(WmTaskType::getId).collect(Collectors.toList());
+		// 企业任务类型id
+		List<String> entTaskTypeIds = taskTypeList.stream()
+				.filter(taskType -> "2".equals(taskType.getTaskReceiverType()) && !"p-19".equals(taskType.getParentId()))
+				.map(WmTaskType::getId).collect(Collectors.toList());
+		// 招商经理任务类型id
+		List<String> p19TaskTypeIds = taskTypeList.stream()
+				.filter(taskType -> "p-19".equals(taskType.getParentId()))
+				.map(WmTaskType::getId).collect(Collectors.toList());
+
+		// 查询所有审核通过的任务
+		List<WmTask> taskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+				.in(WmTask::getScorePackageId, allPackageIds)
+				.eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+				.eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+
+		// 给个默认值
+		// 个人任务分值
+		result.put("personal_task_score", "0");
+		// 个人任务条数
+		result.put("personal_task_number", "0");
+		// 全职分值
+		result.put("full_time_task_score", "0");
+		// 全职任务数
+		result.put("full_time_task_number", "0");
+		// 招商经理任务分值
+		result.put("investment_manager_task_score", "0");
+		// 招商经理任务条数
+		result.put("investment_manager_task_number", "0");
+
+		if ("3".equals(scorePackage.getTypeid())) {
+			// 全职任务
+			// 全职分值
+			result.put("full_time_task_score", String.valueOf(taskList.stream().mapToInt(WmTask::getScore).sum()));
+			// 全职任务数
+			result.put("full_time_task_number", String.valueOf(taskList.size()));
+		} else {
+			// 非全职任务
+			List<WmTask> personalTask = taskList.stream()
+					.filter(task -> personalTaskTypeIds.contains(task.getTaskTypeId()))
+					.collect(Collectors.toList());
+			// 个人任务分值
+			result.put("personal_task_score", String.valueOf(personalTask.stream().mapToInt(WmTask::getScore).sum()));
+			// 个人任务条数
+			result.put("personal_task_number", String.valueOf(personalTask.size()));
+			List<WmTask> p19TaskList = taskList.stream()
+					.filter(task -> p19TaskTypeIds.contains(task.getTaskTypeId()))
+					.collect(Collectors.toList());
+
+			// 招商经理任务分值
+			result.put("investment_manager_task_score", String.valueOf(p19TaskList.stream().mapToInt(WmTask::getScore).sum()));
+			// 招商经理任务条数
+			result.put("investment_manager_task_number", String.valueOf(p19TaskList.size()));
+
+			List<WmTask> entTaskList = taskList.stream()
+					.filter(task -> entTaskTypeIds.contains(task.getTaskTypeId()))
+					.collect(Collectors.toList());
+			// 企业任务分值
+			result.put("ent_task_score", String.valueOf(entTaskList.stream().mapToInt(WmTask::getScore).sum()));
+			// 企业任务条数
+			result.put("ent_task_number", String.valueOf(entTaskList.size()));
+		}
+
+		// 审核管理费分值
+		int taskScoreSum = taskList.stream().mapToInt(WmTask::getScore).sum();
+		BigDecimal auditManagementFee = BigDecimal.valueOf(taskScoreSum)
+				.multiply(scorePackage.getAuditManagementFeeRates())
+				.divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN);
+		result.put("audit_management_fee", auditManagementFee.toString());
+		// 审核任务数(所有审核通过的任务数)
+		result.put("audit_tasks_number", String.valueOf(taskList.size()));
+		// 实际完成分值(所有审核通过的任务分+审核管理费分值)
+		int totalTaskScore = taskList.stream().mapToInt(WmTask::getScore).sum();
+		result.put("actual_completion_score", auditManagementFee.add(BigDecimal.valueOf(totalTaskScore)).toString());
+
+		return R.ok(result);
+	}
+
     /**
      * 查询关联的企业积分包
      *
@@ -257,6 +384,76 @@ public class WmDeptTaskController {
         return R.ok(wmDeptTaskService.saveEntTaskForTaskType63(params));
     }
 
+	/**
+	 * 企业任务保存-医院准入
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-医院准入")
+	@PostMapping("/dept-task/save-task-type66")
+	public R<?> saveEntTaskForTaskType66(@Validated @RequestBody DeptTaskDTO.TaskType66 params) {
+		log.info("企业任务保存-医院准入请求参数:{}", params);
+
+		return R.ok(wmDeptTaskService.saveEntTaskForTaskType66(params));
+	}
+
+	/**
+	 * 企业任务保存-招投标服务
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-招投标服务")
+	@PostMapping("/dept-task/save-task-type67")
+	public R<?> saveEntTaskForTaskType67(@Validated @RequestBody DeptTaskDTO.TaskType67 params) {
+		log.info("企业任务保存-招投标服务请求参数:{}", params);
+
+		return R.ok(wmDeptTaskService.saveEntTaskForTaskType67(params));
+	}
+
+	/**
+	 * 企业任务保存-商业推广会
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-商业推广会")
+	@PostMapping("/dept-task/save-task-type68")
+	public R<?> saveEntTaskForTaskType68(@Validated @RequestBody DeptTaskDTO.TaskType68 params) {
+		log.info("企业任务保存-商业推广会请求参数:{}", params);
+
+		return R.ok(wmDeptTaskService.saveEntTaskForTaskType68(params));
+	}
+
+	/**
+	 * 企业任务保存-商业渠道维护
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-商业渠道维护")
+	@PostMapping("/dept-task/save-task-type69")
+	public R<?> saveEntTaskForTaskType69(@Validated @RequestBody DeptTaskDTO.TaskType69 params) {
+		log.info("企业任务保存-商业渠道维护请求参数:{}", params);
+
+		return R.ok(wmDeptTaskService.saveEntTaskForTaskType69(params));
+	}
+
+	/**
+	 * 企业任务保存-第三方专项合同
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-第三方专项合同")
+	@PostMapping("/dept-task/save-task-type70")
+	public R<?> saveEntTaskForTaskType70(@Validated @RequestBody DeptTaskDTO.TaskType70 params) {
+		log.info("企业任务保存-第三方专项合同请求参数:{}", params);
+
+		return R.ok(wmDeptTaskService.saveEntTaskForTaskType70(params));
+	}
+
     /**
      * 企业任务保存-企业通用-缓存
      *
@@ -269,7 +466,7 @@ public class WmDeptTaskController {
         log.info("企业任务保存-企业通用-缓存:{}", params);
 
         String cacheKey = String.format("%s-%s-%s", CacheConstants.ENT_TASK_CACHE_KEY, "61", SecurityUtils.getUser().getId());
-        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params));
+        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params), 12, TimeUnit.HOURS);
 
         return R.ok();
     }
@@ -286,7 +483,7 @@ public class WmDeptTaskController {
         log.info("企业任务保存-医学会各级年会及卫星会-缓存:{}", params);
 
         String cacheKey = String.format("%s-%s-%s", CacheConstants.ENT_TASK_CACHE_KEY, "62", SecurityUtils.getUser().getId());
-        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params));
+        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params), 12, TimeUnit.HOURS);
 
         return R.ok();
     }
@@ -303,11 +500,29 @@ public class WmDeptTaskController {
         log.info("企业任务保存-专家共识巡讲会-缓存:{}", params);
 
         String cacheKey = String.format("%s-%s-%s", CacheConstants.ENT_TASK_CACHE_KEY, "63", SecurityUtils.getUser().getId());
-        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params));
+        redisTemplate.opsForValue().set(cacheKey, JSONUtil.toJsonStr(params), 12, TimeUnit.HOURS);
 
         return R.ok();
     }
 
+	/**
+	 * 企业任务保存-缓存
+	 *
+	 * @param taskTypeId 任务类型
+	 * @param paramsStr 指定任务类型对应的参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("企业任务保存-缓存")
+	@PostMapping("/dept-task/save-temp/{taskTypeId}")
+	public R<?> saveEntTaskForTemp(@PathVariable("taskTypeId") String taskTypeId, @RequestBody String paramsStr) {
+		log.info("企业任务保存-缓存:taskTypeId={}, params={}", taskTypeId, paramsStr);
+
+		String cacheKey = String.format("%s-%s-%s", CacheConstants.ENT_TASK_CACHE_KEY, taskTypeId, SecurityUtils.getUser().getId());
+		redisTemplate.opsForValue().set(cacheKey, paramsStr, 12, TimeUnit.HOURS);
+
+		return R.ok();
+	}
+
     /**
      * 获取企业任务保存缓存数据
      *
@@ -321,15 +536,10 @@ public class WmDeptTaskController {
         if (StrUtil.isBlank(jsonStr)) {
             return R.ok();
         }
-        switch (taskTypeId) {
-            case "61":
-                return R.ok(JSONUtil.toBean(jsonStr, DeptTaskDTO.TaskType61.class));
-            case "62":
-                return R.ok(JSONUtil.toBean(jsonStr, DeptTaskDTO.TaskType62.class));
-            case "63":
-                return R.ok(JSONUtil.toBean(jsonStr, DeptTaskDTO.TaskType63.class));
-            default:
-                return R.ok();
-        }
+
+		Object o = JSONUtil.toBean(jsonStr,
+				Objects.requireNonNull(DeptTaskDTO.DeptTaskTypeParam.getByType(taskTypeId)).getClazz());
+		return R.ok(o);
     }
+
 }

+ 266 - 233
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -432,20 +432,19 @@ public class WmScorePackageController {
 			}
 		}
 
-		List<WmScorePackage> listExt = new ArrayList<>();
 		if (3 == sysDept.getLevel()) {
 			queryWrapper.eq("dept_id", SecurityUtils.getUser().getDeptId());
 			queryWrapper.eq("typeid", 1);
 			wmScorePackage.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
 			wmScorePackage.setTypeid(String.valueOf(1));
-			listExt = wmScorePackageService.listWmScorePackageAndTaskExt(wmScorePackage);
+			wmScorePackageService.listWmScorePackageAndTaskExt(page, wmScorePackage);
 
 
 		} else if (4 == sysDept.getLevel()) {
 			queryWrapper.eq("dept_id", SecurityUtils.getUser().getDeptId());
 			wmScorePackage.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
 			wmScorePackage.setTypeid(String.valueOf(2));
-			listExt = wmScorePackageService.listWmScorePackageAndTaskExt2(wmScorePackage);
+			wmScorePackageService.listWmScorePackageAndTaskExt2(page, wmScorePackage);
 
 		} else if (2 == sysDept.getLevel()) {
 			queryWrapper.eq("typeid", 0);
@@ -453,7 +452,7 @@ public class WmScorePackageController {
 			wmScorePackage.setTypeid(String.valueOf(0));
 			wmScorePackage.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
 			wmScorePackage.setSendPackageDeptId(wmScorePackage.getSendPackageDeptId());
-			listExt = wmScorePackageService.listWmScorePackageAndTaskExt(wmScorePackage);
+			wmScorePackageService.listWmScorePackageAndTaskExt(page, wmScorePackage);
 
 		}
 
@@ -461,246 +460,280 @@ public class WmScorePackageController {
 			queryWrapper.eq("dept_id", SecurityUtils.getUser().getDeptId());
 			wmScorePackage.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
 			wmScorePackage.setSendPackageDeptId(wmScorePackage.getSendPackageDeptId());
-			listExt = wmScorePackageService.listWmScorePackageAndTaskExt(wmScorePackage);
-		}
-
-		Page<WmScorePackage> page1 = new Page<>();
-		int current = new Long(page.getCurrent()).intValue();
-		int size = new Long(page.getSize()).intValue();
-
-		int count = listExt.size();
-		List<WmScorePackage> pageList = new ArrayList<>();
-		//计算当前页第一条数据的下标
-		int currId = current > 1 ? (current - 1) * size : 0;
-		for (int i = 0; i < size && i < count - currId; i++) {
-			pageList.add(listExt.get(currId + i));
-		}
-		page1.setSize(size);
-		page1.setCurrent(current);
-		page1.setTotal(count);
-		//计算分页总页数
-		page1.setPages(count % 10 == 0 ? count / 10 : count / 10 + 1);
-		page1.setRecords(pageList);
-
-		for (WmScorePackage ext : listExt) {
-			List<WmScoreTaskType> taskTypelist = wmScoreTaskTypeMapper.getScoreTaskTypeByScoreId(ext.getId());
-			if (taskTypelist != null && taskTypelist.size() > 0) {
-				String taskTypes = taskTypelist.stream()
-						.map(WmScoreTaskType::getTaskTypeName)
-						.collect(Collectors.joining(","));
-				ext.setTaskTypes(taskTypes);
-			}
-			if (!StringUtil.isEmpty(ext.getRelationScoreId())) {
-				WmScorePackage wm1 = wmScorePackageService.getById(ext.getRelationScoreId());
-				ext.setRelationScoreId(wm1.getScorePackageName());
-			}
-			WmScorePackage wmScorePackage2 = wmScorePackageService.getById(ext.getId());
-			wmScorePackage2.setRelationScoreId(wmScorePackage2.getId());
-			List<WmScorePackage> wmScorePackageList = wmScorePackageService.selectLists(wmScorePackage2);
-			int score = 0;
-			Integer total1 = 0;
-			Integer ytjtt = 0;
-			SysDept sysDept1 = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
-			if (wmScorePackageList.size() > 0) {
-				List<String> ids2 = wmScorePackageList.stream().map(WmScorePackage::getId).collect(Collectors.toList());
-				for (String id : ids2) {
-					WmScorePackage wmScorePackage1 = new WmScorePackage();
-					wmScorePackage1.setRelationScoreId(id);
-					List<WmScorePackage> wmScorePackageList1 = wmScorePackageService.selectLists(wmScorePackage1);
-					WmTask wmTask1 = new WmTask();
-					wmTask1.setScorePackageId(id);
-					wmTask1.setTaskStatus(String.valueOf(3));
-					List<WmTask> wmTaskList = wmTaskMapper.selectListByScorePackageId(wmTask1);
-					if (sysDept1.getLevel() == 2) {
-						List<WmTask> score1 = wmTaskList.stream()
-								.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
-								.collect(Collectors.toList());
-						for (WmTask item : score1) {
-							if ("1".equals(item.getReportDrugApprovalOpinion())) {
-								total1 += item.getScore();
-
-							}
-							ytjtt += item.getScore();
-						}
-					}
-					if (sysDept1.getLevel() == 3) {
-						List<WmTask> score1 = wmTaskList.stream()
-								.filter(task -> task.getReportOneApprovalStatus().equals("6"))
-								.collect(Collectors.toList());
-						for (WmTask item : score1) {
-							if ("1".equals(item.getReportOneApprovalOpinion())) {
-								total1 += item.getScore();
-
-							}
-							ytjtt += item.getScore();
-						}
-					}
-					if (sysDept1.getLevel() == 4) {
-						List<WmTask> score1 = wmTaskList.stream()
-								.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
-								.collect(Collectors.toList());
-						for (WmTask item : score1) {
-							if ("1".equals(item.getReportSecondApprovalOpinion())) {
-								total1 += item.getScore();
-
-							}
-							ytjtt += item.getScore();
-						}
-					}
-					List<Integer> scoreList1 = wmTaskList.stream().map(WmTask::getScore).collect(Collectors.toList());
-					Integer score2 = 0;
-					for (Integer score1 : scoreList1) {
-						score2 += score1;
-					}
-					score += score2;
-					List<String> ids4 = wmScorePackageList1.stream().map(WmScorePackage::getId).collect(Collectors.toList());
-					ids4.add(ext.getId());
-					for (String id1 : ids4) {
-						WmTask wmTask2 = new WmTask();
-						wmTask2.setScorePackageId(id1);
-						wmTask2.setTaskStatus(String.valueOf(3));
-						List<WmTask> wmTaskList1 = wmTaskMapper.selectListByScorePackageId(wmTask2);
-						if (sysDept1.getLevel() == 2) {
-							List<WmTask> score1 = wmTaskList1.stream()
-									.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
-									.collect(Collectors.toList());
-							for (WmTask item : score1) {
-								if ("1".equals(item.getReportDrugApprovalOpinion())) {
-									total1 += item.getScore();
-
-								}
-								ytjtt += item.getScore();
-							}
+			wmScorePackageService.listWmScorePackageAndTaskExt(page, wmScorePackage);
+		}
+
+//		for (WmScorePackage ext : page.getRecords()) {
+//			List<WmScoreTaskType> taskTypelist = wmScoreTaskTypeMapper.getScoreTaskTypeByScoreId(ext.getId());
+//			if (taskTypelist != null && taskTypelist.size() > 0) {
+//				String taskTypes = taskTypelist.stream()
+//						.map(WmScoreTaskType::getTaskTypeName)
+//						.collect(Collectors.joining(","));
+//				ext.setTaskTypes(taskTypes);
+//			}
+//			if (!StringUtil.isEmpty(ext.getRelationScoreId())) {
+//				WmScorePackage wm1 = wmScorePackageService.getById(ext.getRelationScoreId());
+//				ext.setRelationScoreId(wm1.getScorePackageName());
+//			}
+//			WmScorePackage wmScorePackage2 = wmScorePackageService.getById(ext.getId());
+//			wmScorePackage2.setRelationScoreId(wmScorePackage2.getId());
+//			List<WmScorePackage> wmScorePackageList = wmScorePackageService.selectLists(wmScorePackage2);
+//			int score = 0;
+//			Integer total1 = 0;
+//			Integer ytjtt = 0;
+//			SysDept sysDept1 = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
+//			if (wmScorePackageList.size() > 0) {
+//				List<String> ids2 = wmScorePackageList.stream().map(WmScorePackage::getId).collect(Collectors.toList());
+//				for (String id : ids2) {
+//					WmScorePackage wmScorePackage1 = new WmScorePackage();
+//					wmScorePackage1.setRelationScoreId(id);
+//					List<WmScorePackage> wmScorePackageList1 = wmScorePackageService.selectLists(wmScorePackage1);
+//					WmTask wmTask1 = new WmTask();
+//					wmTask1.setScorePackageId(id);
+//					wmTask1.setTaskStatus(String.valueOf(3));
+//					List<WmTask> wmTaskList = wmTaskMapper.selectListByScorePackageId(wmTask1);
+//					if (sysDept1.getLevel() == 2) {
+//						List<WmTask> score1 = wmTaskList.stream()
+//								.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
+//								.collect(Collectors.toList());
+//						for (WmTask item : score1) {
+//							if ("1".equals(item.getReportDrugApprovalOpinion())) {
+//								total1 += item.getScore();
+//
+//							}
+//							ytjtt += item.getScore();
+//						}
+//					}
+//					if (sysDept1.getLevel() == 3) {
+//						List<WmTask> score1 = wmTaskList.stream()
+//								.filter(task -> task.getReportOneApprovalStatus().equals("6"))
+//								.collect(Collectors.toList());
+//						for (WmTask item : score1) {
+//							if ("1".equals(item.getReportOneApprovalOpinion())) {
+//								total1 += item.getScore();
+//
+//							}
+//							ytjtt += item.getScore();
+//						}
+//					}
+//					if (sysDept1.getLevel() == 4) {
+//						List<WmTask> score1 = wmTaskList.stream()
+//								.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
+//								.collect(Collectors.toList());
+//						for (WmTask item : score1) {
+//							if ("1".equals(item.getReportSecondApprovalOpinion())) {
+//								total1 += item.getScore();
+//
+//							}
+//							ytjtt += item.getScore();
+//						}
+//					}
+//					List<Integer> scoreList1 = wmTaskList.stream().map(WmTask::getScore).collect(Collectors.toList());
+//					Integer score2 = 0;
+//					for (Integer score1 : scoreList1) {
+//						score2 += score1;
+//					}
+//					score += score2;
+//					List<String> ids4 = wmScorePackageList1.stream().map(WmScorePackage::getId).collect(Collectors.toList());
+//					ids4.add(ext.getId());
+//					for (String id1 : ids4) {
+//						WmTask wmTask2 = new WmTask();
+//						wmTask2.setScorePackageId(id1);
+//						wmTask2.setTaskStatus(String.valueOf(3));
+//						List<WmTask> wmTaskList1 = wmTaskMapper.selectListByScorePackageId(wmTask2);
+//						if (sysDept1.getLevel() == 2) {
+//							List<WmTask> score1 = wmTaskList1.stream()
+//									.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
+//									.collect(Collectors.toList());
+//							for (WmTask item : score1) {
+//								if ("1".equals(item.getReportDrugApprovalOpinion())) {
+//									total1 += item.getScore();
+//
+//								}
+//								ytjtt += item.getScore();
+//							}
+//
+//						}
+//						if (sysDept1.getLevel() == 3) {
+//							List<WmTask> score1 = wmTaskList1.stream()
+//									.filter(task -> task.getReportOneApprovalStatus().equals("6"))
+//									.collect(Collectors.toList());
+//							for (WmTask item : score1) {
+//								if ("1".equals(item.getReportOneApprovalOpinion())) {
+//									total1 += item.getScore();
+//
+//								}
+//								ytjtt += item.getScore();
+//							}
+//						}
+//						if (sysDept1.getLevel() == 4) {
+//							List<WmTask> score1 = wmTaskList1.stream()
+//									.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
+//									.collect(Collectors.toList());
+//							for (WmTask item : score1) {
+//								if ("1".equals(item.getReportSecondApprovalOpinion())) {
+//									total1 += item.getScore();
+//
+//								}
+//								ytjtt += item.getScore();
+//							}
+//						}
+//						List<Integer> scoreList2 = wmTaskList1.stream()
+//								.map(WmTask::getScore)
+//								.collect(Collectors.toList());
+//						Integer score3 = 0;
+//						if (scoreList2.size() != 0) {
+//							for (Integer score1 : scoreList2) {
+//								score3 += score1;
+//							}
+//							score += score3;
+//						}
+//					}
+//				}
+//			} else {
+//				WmTask wmTask1 = new WmTask();
+//				wmTask1.setScorePackageId(ext.getId());
+//				wmTask1.setTaskStatus(String.valueOf(3));
+//				List<WmTask> wmTaskList1 = wmTaskMapper.selectListByScorePackageId(wmTask1);
+//				if (sysDept1.getLevel() == 2) {
+//					List<WmTask> score1 = wmTaskList1.stream()
+//							.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
+//							.collect(Collectors.toList());
+//					for (WmTask item : score1) {
+//						if ("1".equals(item.getReportDrugApprovalOpinion())) {
+//							total1 += item.getScore();
+//
+//						}
+//						ytjtt += item.getScore();
+//					}
+//				}
+//				if (sysDept1.getLevel() == 3) {
+//					List<WmTask> score1 = wmTaskList1.stream()
+//							.filter(task -> task.getReportOneApprovalStatus().equals("6"))
+//							.collect(Collectors.toList());
+//					for (WmTask item : score1) {
+//						if ("1".equals(item.getReportOneApprovalOpinion())) {
+//							total1 += item.getScore();
+//
+//						}
+//						ytjtt += item.getScore();
+//					}
+//				}
+//				if (sysDept1.getLevel() == 4) {
+//					List<WmTask> score1 = wmTaskList1.stream()
+//							.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
+//							.collect(Collectors.toList());
+//					for (WmTask item : score1) {
+//						if ("1".equals(item.getReportSecondApprovalOpinion())) {
+//							total1 += item.getScore();
+//
+//						}
+//						ytjtt += item.getScore();
+//					}
+//				}
+//				List<Integer> scoreList1 = wmTaskList1.stream().map(WmTask::getScore).collect(Collectors.toList());
+//				Integer score4 = 0;
+//				for (Integer score1 : scoreList1) {
+//					score4 += score1;
+//				}
+//				score = score4;
+//			}
+//
+//			// 完成积分值(最终完成积分值 = 完成积分值 * (1+审核管理费比例))
+//			int actualScore = BigDecimal.valueOf(score).multiply(
+//					ext.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+//			).intValue();
+//			ext.setYsh(actualScore);
+//
+//			// ytjtt(ytjtt = 完成积分值 * (1+审核管理费比例))
+//			int actualYtjtt = BigDecimal.valueOf(ytjtt).multiply(
+//					ext.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+//			).intValue();
+//			ext.setYtjtt(actualYtjtt);
+//
+//			// total1(total1 = 完成积分值 * (1+审核管理费比例))
+//			int actualTotal1 = BigDecimal.valueOf(total1).multiply(
+//					ext.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+//			).intValue();
+//			ext.setPayScore(actualTotal1);
+//
+//			BigDecimal fin = new BigDecimal(ext.getYsh()).multiply(BigDecimal.valueOf(100)).divide(new BigDecimal(ext.getScore()), 2, RoundingMode.HALF_UP);
+//			BigDecimal fin1 = BigDecimal.valueOf(100.00);
+//			if (fin.compareTo(fin1) == 1) {
+//				fin = BigDecimal.valueOf(100.00);
+//			}
+//			ext.setFinishRate(fin.toString());
+//			BigDecimal payRate = new BigDecimal(actualTotal1).multiply(BigDecimal.valueOf(100)).divide(new BigDecimal(ext.getScore()), 2, RoundingMode.HALF_UP);
+//			if (payRate.compareTo(fin1) > 0) {
+//				payRate = BigDecimal.valueOf(100.00);
+//			}
+//			ext.setPayRate(payRate.toString());
+//			if (ext.getPayRate().equals("100.00")) {
+//				ext.setPackageFinishStatus("1");
+//			}
+//
+//			// 封装导出结果
+//			ext.setReportMqName(CacheConstants.EXPORT_NBA_REPORT_CACHE);
+//			wmScorePackageService.getReportOpt(ext);
+//			// 封装excel报告状态
+//			wmScorePackageService.getExcelReportOpt(ext, CacheConstants.EXCEL_EXPORT_NBA_REPORT_CACHE);
+//		}
+//
+//		page.getRecords().forEach(r -> {
+//			if (r.getP2pAmount() != null) {
+//				r.setP2pDraft(false);
+//			} else {
+//				String s = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:amount:%s", r.getId()));
+//				String s1 = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:service-amount:%s", r.getId()));
+//				String desc = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:desc:%s", r.getId()));
+//				if (StrUtil.isNotBlank(s)) {
+//					r.setP2pAmount(new BigDecimal(s));
+//					r.setP2pServiceAmount(new BigDecimal(s1));
+//					r.setDescription(desc);
+//				}
+//				r.setP2pDraft(true);
+//			}
+//
+//		});
+
+		List<WmScorePackage> wmList = page.getRecords();
+		List<Future<WmScorePackage>> futureList = new ArrayList<>(wmList.size());
 
-						}
-						if (sysDept1.getLevel() == 3) {
-							List<WmTask> score1 = wmTaskList1.stream()
-									.filter(task -> task.getReportOneApprovalStatus().equals("6"))
-									.collect(Collectors.toList());
-							for (WmTask item : score1) {
-								if ("1".equals(item.getReportOneApprovalOpinion())) {
-									total1 += item.getScore();
 
-								}
-								ytjtt += item.getScore();
-							}
-						}
-						if (sysDept1.getLevel() == 4) {
-							List<WmTask> score1 = wmTaskList1.stream()
-									.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
-									.collect(Collectors.toList());
-							for (WmTask item : score1) {
-								if ("1".equals(item.getReportSecondApprovalOpinion())) {
-									total1 += item.getScore();
+		for (WmScorePackage wmS : wmList) {
+			Future<WmScorePackage> future = wmScorePackageService.finishRate(wmS);
+			futureList.add(future);
+		}
 
-								}
-								ytjtt += item.getScore();
-							}
-						}
-						List<Integer> scoreList2 = wmTaskList1.stream()
-								.map(WmTask::getScore)
-								.collect(Collectors.toList());
-						Integer score3 = 0;
-						if (scoreList2.size() != 0) {
-							for (Integer score1 : scoreList2) {
-								score3 += score1;
-							}
-							score += score3;
-						}
-					}
-				}
-			} else {
-				WmTask wmTask1 = new WmTask();
-				wmTask1.setScorePackageId(ext.getId());
-				wmTask1.setTaskStatus(String.valueOf(3));
-				List<WmTask> wmTaskList1 = wmTaskMapper.selectListByScorePackageId(wmTask1);
-				if (sysDept1.getLevel() == 2) {
-					List<WmTask> score1 = wmTaskList1.stream()
-							.filter(task -> task.getReportDrugApprovalStatus().equals("6"))
-							.collect(Collectors.toList());
-					for (WmTask item : score1) {
-						if ("1".equals(item.getReportDrugApprovalOpinion())) {
-							total1 += item.getScore();
 
-						}
-						ytjtt += item.getScore();
-					}
-				}
-				if (sysDept1.getLevel() == 3) {
-					List<WmTask> score1 = wmTaskList1.stream()
-							.filter(task -> task.getReportOneApprovalStatus().equals("6"))
-							.collect(Collectors.toList());
-					for (WmTask item : score1) {
-						if ("1".equals(item.getReportOneApprovalOpinion())) {
-							total1 += item.getScore();
+		List<WmScorePackage> finalRecords = new ArrayList<>(wmList.size());
+		try {
+			for (Future<WmScorePackage> future : futureList) {
+				WmScorePackage sPackage = future.get();
 
-						}
-						ytjtt += item.getScore();
+				if (sPackage.getP2pAmount() != null) {
+					sPackage.setP2pDraft(false);
+				} else {
+					String s = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:amount:%s", sPackage.getId()));
+					String s1 = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:service-amount:%s", sPackage.getId()));
+					String desc = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:desc:%s", sPackage.getId()));
+					if (StrUtil.isNotBlank(s)) {
+						sPackage.setP2pAmount(new BigDecimal(s));
+						sPackage.setP2pServiceAmount(new BigDecimal(s1));
+						sPackage.setDescription(desc);
 					}
+					sPackage.setP2pDraft(true);
 				}
-				if (sysDept1.getLevel() == 4) {
-					List<WmTask> score1 = wmTaskList1.stream()
-							.filter(task -> task.getReportSecondApprovalStatus().equals("6"))
-							.collect(Collectors.toList());
-					for (WmTask item : score1) {
-						if ("1".equals(item.getReportSecondApprovalOpinion())) {
-							total1 += item.getScore();
 
-						}
-						ytjtt += item.getScore();
-					}
-				}
-				List<Integer> scoreList1 = wmTaskList1.stream().map(WmTask::getScore).collect(Collectors.toList());
-				Integer score4 = 0;
-				for (Integer score1 : scoreList1) {
-					score4 += score1;
-				}
-				score = score4;
-			}
-			ext.setYsh(score);
-			ext.setYtjtt(ytjtt);
+				finalRecords.add(sPackage);
 
-			ext.setPayScore(total1);
-			BigDecimal fin = new BigDecimal(ext.getYsh()).multiply(BigDecimal.valueOf(100)).divide(new BigDecimal(ext.getScore()), 1, RoundingMode.HALF_UP);
-			BigDecimal fin1 = BigDecimal.valueOf(100.00);
-			if (fin.compareTo(fin1) == 1) {
-				fin = BigDecimal.valueOf(100.00);
-			}
-			ext.setFinishRate(fin + "0");
-			BigDecimal payRate = new BigDecimal(ext.getPayScore()).multiply(BigDecimal.valueOf(100)).divide(new BigDecimal(ext.getScore()), 1, RoundingMode.HALF_UP);
-			if (payRate.compareTo(fin1) > 0) {
-				payRate = BigDecimal.valueOf(100.00);
-			}
-			ext.setPayRate(payRate + "0");
-			if (ext.getPayRate().equals("100.00")) {
-				ext.setPackageFinishStatus("1");
 			}
-
-			// 封装导出结果
-			ext.setReportMqName(CacheConstants.EXPORT_NBA_REPORT_CACHE);
-			wmScorePackageService.getReportOpt(ext);
-			// 封装excel报告状态
-			wmScorePackageService.getExcelReportOpt(ext, CacheConstants.EXCEL_EXPORT_NBA_REPORT_CACHE);
+		} catch (ExecutionException | InterruptedException e) {
+			log.error("获取分页信息失败", e);
+			return R.failed("获取分页信息失败");
 		}
 
-		page1.getRecords().forEach(r -> {
-			if (r.getP2pAmount() != null) {
-				r.setP2pDraft(false);
-			} else {
-				String s = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:amount:%s", r.getId()));
-				String s1 = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:service-amount:%s", r.getId()));
-				String desc = redisTemplate.opsForValue().get(String.format("scorepackage:p2p:desc:%s", r.getId()));
-				if (StrUtil.isNotBlank(s)) {
-					r.setP2pAmount(new BigDecimal(s));
-					r.setP2pServiceAmount(new BigDecimal(s1));
-					r.setDescription(desc);
-				}
-				r.setP2pDraft(true);
-			}
-
-		});
-
-		return R.ok(page1);
+		return R.ok(page);
 	}
 
 
@@ -2876,7 +2909,7 @@ public class WmScorePackageController {
 
 		log.info("修改积分包(小包)入参:{}", wmScorePackage);
 
-		if (wmScorePackage.getId() != null) {
+		if (StrUtil.isBlank(wmScorePackage.getId())) {
 			return R.failed("积分包id必填");
 		}
 

+ 38 - 7
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -204,30 +204,41 @@ public class WmTaskController {
 	 */
 	@GetMapping("/pageSum")
 	public R pageSum(Page page, WmTask wmTask) {
+		List<WmScorePackage> allScorePackageList = new ArrayList<>();
+
 		WmScorePackage wmScorePackage = wmScorePackageService.getById(wmTask.getScorePackageId());
+		allScorePackageList.add(wmScorePackage);
+
 		wmScorePackage.setRelationScoreId(wmScorePackage.getId());
 		List<WmScorePackage> wmScorePackageList = wmScorePackageService.selectLists(wmScorePackage);
 		List<WmTask> list = new ArrayList<>();
 		if (wmScorePackageList.size() > 0) {
+			allScorePackageList.addAll(wmScorePackageList);
+
 			WmTask wmTask3 = new WmTask();
 			wmTask3.setScorePackageId(wmScorePackage.getId());
 			List<WmTask> wmTaskList3 = wmTaskMapper.selectListByIds(wmTask3);
+
 			list.addAll(wmTaskList3);
-			List<String> ids2 = wmScorePackageList.stream().map(p -> p.getId()).collect(Collectors.toList());
-			for (String id : ids2) {
+
+			for (WmScorePackage subScorePackage : wmScorePackageList) {
 				WmScorePackage wmScorePackage1 = new WmScorePackage();
-				wmScorePackage1.setRelationScoreId(id);
+				wmScorePackage1.setRelationScoreId(subScorePackage.getId());
 				List<WmScorePackage> wmScorePackageList1 = wmScorePackageService.selectLists(wmScorePackage1);
+				allScorePackageList.addAll(wmScorePackageList1);
+
 				WmTask wmTask1 = new WmTask();
-				wmTask1.setScorePackageId(id);
+				wmTask1.setScorePackageId(subScorePackage.getId());
 				List<WmTask> wmTaskList = wmTaskMapper.selectListByIds(wmTask1);
+
 				List<String> ids3 = wmTaskList.stream().map(p -> p.getId()).collect(Collectors.toList());
-				List<String> ids4 = wmScorePackageList1.stream().map(p -> p.getId()).collect(Collectors.toList());
+
 				if (wmScorePackageList1.size() > 0) {
-					for (String id1 : ids4) {
+					for (WmScorePackage subSubScorePackage : wmScorePackageList1) {
 						WmTask wmTask2 = new WmTask();
-						wmTask2.setScorePackageId(id1);
+						wmTask2.setScorePackageId(subSubScorePackage.getId());
 						List<WmTask> wmTaskList1 = wmTaskMapper.selectListByIds(wmTask2);
+
 						List<String> ids5 = wmTaskList1.stream().map(p -> p.getId()).collect(Collectors.toList());
 						for (String id2 : ids5) {
 							WmTask wmTaskList2 = wmTaskMapper.selectByRealFlag(Integer.parseInt(id2));
@@ -244,8 +255,28 @@ public class WmTaskController {
 			WmTask wmTask1 = new WmTask();
 			wmTask1.setScorePackageId(wmScorePackage.getId());
 			List<WmTask> wmTaskList1 = wmTaskMapper.selectListByIds(wmTask1);
+
 			list.addAll(wmTaskList1);
 		}
+
+		if (CollUtil.isEmpty(list)) {
+			return R.ok(page);
+		}
+		// 查询task包含的所有userId
+		Set<String> taskUserIds = list.stream().map(WmTask::getTaskUserId).collect(Collectors.toSet());
+		List<SysUser> userList = sysUserService.listByIds(taskUserIds);
+		Map<Integer, String> userMap = userList.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getRealname));
+
+		// 所有积分包对应map
+		Map<String, String> packageMap = allScorePackageList.stream().collect(Collectors.toMap(WmScorePackage::getId, WmScorePackage::getScorePackageName));
+
+		list.forEach(task -> {
+			// 回显承接人名称
+			task.setTaskUsername(userMap.get(Integer.parseInt(task.getTaskUserId())));
+			// 回显积分包名称
+			task.setScorePackageName(packageMap.get(task.getScorePackageId()));
+		});
+
 		//每页数据条数
 		Page<WmTask> page1 = new Page<>();
 		int current = new Long(page.getCurrent()).intValue();

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskSubmissionRuleController.java

@@ -85,6 +85,7 @@ public class WmTaskSubmissionRuleController {
 		// 查询基础任务类型
 		List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
 				.eq(WmTaskType::getTaskTypeLevel, "1")
+				.eq(WmTaskType::getStatus, "0")
 				.eq(WmTaskType::getDelFlag, DelEnum.NOT_DEL.val()));
 		Map<String, String> baseTaskTypeMap = taskTypeList.stream()
 				.collect(Collectors.toMap(WmTaskType::getTaskTypeName, WmTaskType::getId));

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java

@@ -501,6 +501,11 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	 */
 	private String[] drugtable;
 
+	/**
+	 * 审核管理费比例(单位%)
+	 */
+	private BigDecimal auditManagementFeeRates;
+
 	/**
 	 * 获取积分包的关联试卷
 	 */

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmTask.java

@@ -50,6 +50,12 @@ public class WmTask extends Model<WmTask> {
 
 	String scorePackageId;
 
+	/**
+	 * 积分包名称
+	 */
+	@TableField(exist = false)
+	private String scorePackageName;
+
 	String taskRuleId;
 
 	/**

+ 415 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/DeptTaskDTO.java

@@ -1,11 +1,15 @@
 package com.qunzhixinxi.hnqz.admin.entity.dto;
 
+import cn.hutool.core.util.StrUtil;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.Getter;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -234,6 +238,368 @@ public class DeptTaskDTO implements Serializable {
         private String meetingSummary;
     }
 
+	/**
+	 * 任务类型66-医院准入
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Data
+	public static class TaskType66 implements Serializable {
+		private static final long serialVersionUID = -7268001509315036318L;
+
+		/**
+		 * 积分包id
+		 */
+		@NotBlank(message = "积分包id必填")
+		private String packageId;
+
+		/**
+		 * 推广产品名称
+		 */
+		@NotBlank(message = "推广产品名称必填")
+		private String productName;
+
+		/**
+		 * 医院等级
+		 */
+		@NotBlank(message = "医院等级必填")
+		private String hospitalLevel;
+
+		/**
+		 * 产品进入形式
+		 */
+		@NotBlank(message = "产品进入形式必填")
+		private String entryForm;
+
+		/**
+		 * 预期销售量
+		 */
+		@NotBlank(message = "预期销售量必填")
+		private String expectedSales;
+
+		/**
+		 * 负责人
+		 */
+		@NotBlank(message = "负责人必填")
+		private String leader;
+
+		/**
+		 * 中标通知书
+		 */
+		@NotEmpty(message = "中标通知书必填")
+		private List<FileUrlObj> noticeUrl;
+
+		/**
+		 * 购销合同
+		 */
+		@NotEmpty(message = "购销合同必填")
+		private List<FileUrlObj> contractsUrl;
+
+		/**
+		 * 合同金额
+		 */
+		@NotNull(message = "合同金额必填")
+		private BigDecimal contractsAmount;
+
+		/**
+		 * 发票上传
+		 */
+		@NotEmpty(message = "发票上传必填")
+		private List<FileUrlObj> invoiceUrl;
+
+		/**
+		 * 会议总结
+		 */
+		private String summary;
+	}
+
+	/**
+	 * 任务类型67-招投标服务
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Data
+	public static class TaskType67 implements Serializable {
+		private static final long serialVersionUID = -9203744525584265085L;
+
+		/**
+		 * 积分包id
+		 */
+		@NotBlank(message = "积分包id必填")
+		private String packageId;
+
+		/**
+		 * 推广产品名称
+		 */
+		@NotBlank(message = "推广产品名称必填")
+		private String productName;
+
+		/**
+		 * 招标计划书
+		 */
+		@NotEmpty(message = "招标计划书必填")
+		private List<FileUrlObj> tenderProposalUrl;
+
+		/**
+		 * 招标目录
+		 */
+		@NotEmpty(message = "招标目录必填")
+		private List<FileUrlObj> tendersCatalogueUrl;
+
+		/**
+		 * 标书
+		 */
+		@NotEmpty(message = "标书必填")
+		private List<FileUrlObj> tenderUrl;
+
+		/**
+		 * 投标资料清单
+		 */
+		@NotEmpty(message = "投标资料清单必填")
+		private List<FileUrlObj> informationListUrl;
+
+		/**
+		 * 产品投标及报价
+		 */
+		@NotEmpty(message = "产品投标及报价必填")
+		private List<FileUrlObj> quoteUrl;
+
+		/**
+		 * 招标活动总结表
+		 */
+		@NotEmpty(message = "招标活动总结表必填")
+		private List<FileUrlObj> summaryTableUrl;
+
+		/**
+		 * 会议总结
+		 */
+		private String summary;
+	}
+
+	/**
+	 * 任务类型69-商业渠道维护
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Data
+	public static class TaskType68 implements Serializable {
+		private static final long serialVersionUID = 3437372981272089491L;
+
+		/**
+		 * 积分包id
+		 */
+		@NotBlank(message = "积分包id必填")
+		private String packageId;
+
+		/**
+		 * 推广产品名称
+		 */
+		@NotBlank(message = "推广产品名称必填")
+		private String productName;
+
+		/**
+		 * 会议时间
+		 */
+		@NotBlank(message = "会议时间必填")
+		private String meetingTime;
+
+		/**
+		 * 会议地点
+		 */
+		@NotBlank(message = "会议地点必填")
+		private String meetingPlace;
+
+		/**
+		 * 会议计划表
+		 */
+		@NotEmpty(message = "会议计划表必填")
+		private List<FileUrlObj> meetingPlanUrl;
+
+		/**
+		 * 会议通知/邀请函
+		 */
+		@NotEmpty(message = "会议通知/邀请函必填")
+		private List<FileUrlObj> meetingInvitationUrl;
+
+		/**
+		 * 签到表
+		 */
+		@NotEmpty(message = "签到表必填")
+		private List<FileUrlObj> meetingCheckInUrl;
+
+		/**
+		 * 会议照片
+		 */
+		@NotEmpty(message = "会议照片必填")
+		private List<FileUrlObj> meetingPhotosUrl;
+
+		/**
+		 * 宣传资料使用清单
+		 */
+		@NotEmpty(message = "宣传资料使用清单必填")
+		private List<FileUrlObj> promotionalMaterialsUrl;
+
+		/**
+		 * 发票上传
+		 */
+		@NotEmpty(message = "发票上传必填")
+		private List<FileUrlObj> invoiceUrl;
+
+		/**
+		 * 会议纪要或总结
+		 */
+		private String summary;
+	}
+
+	/**
+	 * 任务类型69-商业渠道维护
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Data
+	public static class TaskType69 implements Serializable {
+		private static final long serialVersionUID = -2615877505967750457L;
+
+		/**
+		 * 积分包id
+		 */
+		@NotBlank(message = "积分包id必填")
+		private String packageId;
+
+		/**
+		 * 推广产品名称
+		 */
+		@NotBlank(message = "推广产品名称必填")
+		private String productName;
+
+		/**
+		 * 产品规格
+		 */
+		@NotBlank(message = "产品规格必填")
+		private String productSpecifications;
+
+		/**
+		 * 维护周期
+		 */
+		@NotBlank(message = "维护周期必填")
+		private String maintenanceIntervals;
+
+		/**
+		 * 进量
+		 */
+		@NotBlank(message = "进量必填")
+		private String purchaseNumber;
+
+		/**
+		 * 销量
+		 */
+		@NotBlank(message = "销量必填")
+		private String salesNumber;
+
+		/**
+		 * 存量
+		 */
+		@NotBlank(message = "存量必填")
+		private String stockNumber;
+
+		/**
+		 * 本产品信息搜集表
+		 */
+		@NotEmpty(message = "本产品信息搜集表必填")
+		private List<FileUrlObj> productInformationUrl;
+
+		/**
+		 * 商业流向数据表
+		 */
+		@NotEmpty(message = "商业流向数据表必填")
+		private List<FileUrlObj> businessFlowDataUrl;
+
+		/**
+		 * 竞品信息搜集表
+		 */
+		@NotEmpty(message = "竞品信息搜集表必填")
+		private List<FileUrlObj> competitorInformationUrl;
+
+		/**
+		 * 竞品商业数据流向表
+		 */
+		@NotEmpty(message = "竞品商业数据流向表必填")
+		private List<FileUrlObj> competitorBusinessDataFlowUrl;
+
+		/**
+		 * 总结
+		 */
+		private String summary;
+	}
+
+	/**
+	 * 任务类型70-第三方专项合同
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Data
+	public static class TaskType70 implements Serializable {
+		private static final long serialVersionUID = -4614288064808194504L;
+
+		/**
+		 * 积分包id
+		 */
+		@NotBlank(message = "积分包id必填")
+		private String packageId;
+
+		/**
+		 * 项目名称
+		 */
+		@NotBlank(message = "项目名称必填")
+		private String projectName;
+
+		/**
+		 * 甲方名称
+		 */
+		@NotBlank(message = "甲方名称必填")
+		private String partAName;
+
+		/**
+		 * 乙方名称
+		 */
+		@NotBlank(message = "乙方名称必填")
+		private String partBName;
+
+		/**
+		 * 项目简介
+		 */
+		@NotBlank(message = "项目简介必填")
+		private String introduction;
+
+		/**
+		 * 合同金额
+		 */
+		@NotNull(message = "合同金额必填")
+		private BigDecimal contractsAmount;
+
+		/**
+		 * 合同上传
+		 */
+		@NotEmpty(message = "合同上传必填")
+		private List<FileUrlObj> contractsUrl;
+
+		/**
+		 * 发票上传
+		 */
+		@NotEmpty(message = "发票上传必填")
+		private List<FileUrlObj> invoiceUrl;
+
+		/**
+		 * 总结
+		 */
+		private String summary;
+	}
+
     /**
      * 文件 URL obj
      *
@@ -249,4 +615,53 @@ public class DeptTaskDTO implements Serializable {
         private String url;
     }
 
+	/**
+	 * 任务类型参数枚举
+	 *
+	 * @author lixuesong
+	 * @date 2023/11/10
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum DeptTaskTypeParam {
+		TASK_TYPE_61("61", "企业通用", TaskType61.class),
+		TASK_TYPE_62("62", "医学会各级年会及卫星会", TaskType62.class),
+		TASK_TYPE_63("63", "专家共识巡讲会", TaskType63.class),
+		TASK_TYPE_66("66", "医院准入", TaskType66.class),
+		TASK_TYPE_67("67", "招投标服务", TaskType67.class),
+		TASK_TYPE_68("68", "商业推广会", TaskType68.class),
+		TASK_TYPE_69("69", "商业渠道维护", TaskType69.class),
+		TASK_TYPE_70("70", "第三方专项合同", TaskType70.class);
+
+		/**
+		 * 类型
+		 */
+		private final String type;
+
+		/**
+		 * 描述
+		 */
+		private final String desc;
+
+		/**
+		 * class类型
+		 */
+		private final Class<?> clazz;
+
+		/**
+		 * 根据任务类型id查询枚举对象
+		 *
+		 * @param type 任务类型id
+		 * @return {@link DeptTaskTypeParam} 枚举对象
+		 */
+		public static DeptTaskTypeParam getByType(String type) {
+			for (DeptTaskTypeParam taskTypeParam : DeptTaskTypeParam.values()) {
+				if (StrUtil.equals(taskTypeParam.getType(), type)) {
+					return taskTypeParam;
+				}
+			}
+			return null;
+		}
+	}
+
 }

+ 8 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageMapper.java

@@ -48,13 +48,19 @@ public interface WmScorePackageMapper extends DataScopeMapper<WmScorePackage> {
 	public List<WmScorePackage> listWmScorePackageAndTask(@Param("query") WmScorePackage wmScorePackage, DataScope dataScope);
 
 	@SqlParser(filter=true)
-	public List<WmScorePackage> listWmScorePackageAndTaskExt(@Param("query") WmScorePackage wmScorePackage);
+	List<WmScorePackage> listWmScorePackageAndTaskExt(@Param("query") WmScorePackage wmScorePackage);
+
+	@SqlParser(filter=true)
+	IPage<WmScorePackage> listWmScorePackageAndTaskExt(Page<WmScorePackage> page, @Param("query") WmScorePackage wmScorePackage);
 
 	@SqlParser(filter=true)
 	public List<WmScorePackage> listWmScorePackageAndTaskExtOld(@Param("query") WmScorePackage wmScorePackage);
 
 	@SqlParser(filter=true)
-	public List<WmScorePackage> listWmScorePackageAndTaskExt2(@Param("query") WmScorePackage wmScorePackage);
+	List<WmScorePackage> listWmScorePackageAndTaskExt2(@Param("query") WmScorePackage wmScorePackage);
+
+	@SqlParser(filter=true)
+	IPage<WmScorePackage> listWmScorePackageAndTaskExt2(Page<WmScorePackage> page, @Param("query") WmScorePackage wmScorePackage);
 
 	@SqlParser(filter=true)
 	public List<WmScorePackage> listWmScorePackageAndTaskExt2Old(@Param("query") WmScorePackage wmScorePackage);

+ 40 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskService.java

@@ -1,7 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.service;
 
 import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
-import com.qunzhixinxi.hnqz.common.core.util.R;
 
 /**
  * 企业任务服务
@@ -34,4 +33,44 @@ public interface WmDeptTaskService {
      * @return {@link Boolean} 结果
      */
     Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params);
+
+	/**
+	 * 企业任务保存-医院准入
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	Boolean saveEntTaskForTaskType66(DeptTaskDTO.TaskType66 params);
+
+	/**
+	 * 企业任务保存-招投标服务
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	Boolean saveEntTaskForTaskType67(DeptTaskDTO.TaskType67 params);
+
+	/**
+	 * 企业任务保存-商业推广会
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	Boolean saveEntTaskForTaskType68(DeptTaskDTO.TaskType68 params);
+
+	/**
+	 * 企业任务保存-商业渠道维护
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	Boolean saveEntTaskForTaskType69(DeptTaskDTO.TaskType69 params);
+
+	/**
+	 * 企业任务保存-第三方专项合同
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	Boolean saveEntTaskForTaskType70(DeptTaskDTO.TaskType70 params);
 }

+ 5 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java

@@ -47,12 +47,15 @@ public interface WmScorePackageService extends IService<WmScorePackage> {
 
 	public List<WmScorePackage> listWmScorePackageAndTask(WmScorePackage wmScorePackage);
 
-	public List<WmScorePackage> listWmScorePackageAndTaskExt(WmScorePackage wmScorePackage);
+	List<WmScorePackage> listWmScorePackageAndTaskExt(WmScorePackage wmScorePackage);
+
+	IPage<WmScorePackage> listWmScorePackageAndTaskExt(Page<WmScorePackage> page, WmScorePackage wmScorePackage);
 
 	public List<WmScorePackage> listWmScorePackageAndTaskExtOld(WmScorePackage wmScorePackage);
 
+	List<WmScorePackage> listWmScorePackageAndTaskExt2(WmScorePackage wmScorePackage);
 
-	public List<WmScorePackage> listWmScorePackageAndTaskExt2(WmScorePackage wmScorePackage);
+	IPage<WmScorePackage> listWmScorePackageAndTaskExt2(Page<WmScorePackage> page, WmScorePackage wmScorePackage);
 
 	public List<WmScorePackage> listWmScorePackageAndTaskExt2Old(WmScorePackage wmScorePackage);
 

+ 441 - 150
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskServiceImpl.java

@@ -17,6 +17,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
@@ -26,6 +27,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskSubmissionPercentRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
@@ -37,7 +39,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 企业任务服务
@@ -71,53 +76,17 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType61(DeptTaskDTO.TaskType61 params) {
         String taskTypeId = "61";
 
-        // 校验任务类型启用状态
-        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().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, taskTypeId)) {
-            throw new RuntimeException("当前企业未开启该任务!");
-        }
-
-        int scoreTaskTypeCount = wmScoreTaskTypeService.count(Wrappers.<WmScoreTaskType>lambdaQuery()
-                .eq(WmScoreTaskType::getScoreId, params.getPackageId())
-                .eq(WmScoreTaskType::getTaskTypeId, taskTypeId));
-        if (scoreTaskTypeCount <= 0) {
-            throw new RuntimeException("有效任务类型未启用该任务!");
-        }
-
-        // 查询积分包
-        WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
-
-        // 校验是否超过可分配积分值
-        List<WmScorePackage> scorePackagekfpjf =
-                wmScorePackageService.getScorePackagekfpjf(null, SecurityUtils.getUser().getDeptId(),
-                        new String[]{"0", "1", "2"}, new String[]{params.getPackageId()});
-        if (params.getScore() > scorePackagekfpjf.get(0).getKfpjf()) {
-            throw new RuntimeException("可分配积分不足!");
-        }
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
 
-        // 校验是否超过积分包企业任务上限
-        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
-                .eq(WmTask::getScorePackageId, params.getPackageId())
-                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
-                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
-                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
-
-        int totalScoreSum = 0;
-        totalScoreSum += params.getScore();
-        if (CollUtil.isNotEmpty(queryTaskList)) {
-            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
-        }
-        if (BigDecimal.valueOf(totalScoreSum)
-                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
-                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
-            throw new RuntimeException("已超过积分包的企业任务上限!");
-        }
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, params.getScore(), scorePackage);
 
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
@@ -159,59 +128,17 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType62(DeptTaskDTO.TaskType62 params) {
         String taskTypeId = "62";
 
-        // 查询任务类型启用状态
-        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().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, taskTypeId)) {
-            throw new RuntimeException("当前企业未开启该任务!");
-        }
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
 
-        int scoreTaskTypeCount = wmScoreTaskTypeService.count(Wrappers.<WmScoreTaskType>lambdaQuery()
-                .eq(WmScoreTaskType::getScoreId, params.getPackageId())
-                .eq(WmScoreTaskType::getTaskTypeId, taskTypeId));
-        if (scoreTaskTypeCount <= 0) {
-            throw new RuntimeException("有效任务类型未启用该任务!");
-        }
-
-        // 查询积分包
-        WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
-        // 查询任务规则积分
-        WmTaskType wmTaskType = new WmTaskType();
-        wmTaskType.setRuleId(scorePackage.getRuleId());
-        WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
-        wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
-        int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
-
-        // 校验是否超过可分配积分值
-        List<WmScorePackage> scorePackagekfpjf =
-                wmScorePackageService.getScorePackagekfpjf(null, SecurityUtils.getUser().getDeptId(),
-                        new String[]{"0", "1", "2"}, new String[]{params.getPackageId()});
-        if (score > scorePackagekfpjf.get(0).getKfpjf()) {
-            throw new RuntimeException("可分配积分不足!");
-        }
-
-        // 校验是否超过积分包企业任务上限
-        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
-                .eq(WmTask::getScorePackageId, params.getPackageId())
-                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
-                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
-                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
-
-        int totalScoreSum = 0;
-        totalScoreSum += score;
-        if (CollUtil.isNotEmpty(queryTaskList)) {
-            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
-        }
-        if (BigDecimal.valueOf(totalScoreSum)
-                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
-                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
-            throw new RuntimeException("已超过积分包的企业任务上限!");
-        }
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
 
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
@@ -260,59 +187,17 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
     public Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params) {
         String taskTypeId = "63";
 
-        // 查询任务类型启用状态
-        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-                .eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().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, taskTypeId)) {
-            throw new RuntimeException("当前企业未开启该任务!");
-        }
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
 
-        int scoreTaskTypeCount = wmScoreTaskTypeService.count(Wrappers.<WmScoreTaskType>lambdaQuery()
-                .eq(WmScoreTaskType::getScoreId, params.getPackageId())
-                .eq(WmScoreTaskType::getTaskTypeId, taskTypeId));
-        if (scoreTaskTypeCount <= 0) {
-            throw new RuntimeException("有效任务类型未启用该任务!");
-        }
-
-        // 查询积分包
-        WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
-        // 查询任务规则积分
-        WmTaskType wmTaskType = new WmTaskType();
-        wmTaskType.setRuleId(scorePackage.getRuleId());
-        WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
-        wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
-        int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
-
-        // 校验是否超过可分配积分值
-        List<WmScorePackage> scorePackagekfpjf =
-                wmScorePackageService.getScorePackagekfpjf(null, SecurityUtils.getUser().getDeptId(),
-                        new String[]{"0", "1", "2"}, new String[]{params.getPackageId()});
-        if (score > scorePackagekfpjf.get(0).getKfpjf()) {
-            throw new RuntimeException("可分配积分不足!");
-        }
-
-        // 校验是否超过积分包企业任务上限
-        List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
-                .eq(WmTask::getScorePackageId, params.getPackageId())
-                .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
-                .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
-                .eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
-
-        int totalScoreSum = 0;
-        totalScoreSum += score;
-        if (CollUtil.isNotEmpty(queryTaskList)) {
-            totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
-        }
-        if (BigDecimal.valueOf(totalScoreSum)
-                .compareTo(BigDecimal.valueOf(scorePackage.getScore())
-                        .multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
-            throw new RuntimeException("已超过积分包的企业任务上限!");
-        }
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
 
         // 保存taskContent
         WmTaskContent taskContent = new WmTaskContent();
@@ -351,6 +236,308 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         return Boolean.TRUE;
     }
 
+	/**
+	 * 企业任务保存-医院准入
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	@Override
+	public Boolean saveEntTaskForTaskType66(DeptTaskDTO.TaskType66 params) {
+
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+
+		// 查询任务规则积分
+		// 3,基层医院 对应任务类型66
+		// 2,二级医院 对应任务类型71
+		// 1,三级医院 对应任务类型72
+		String taskTypeId = "";
+		switch (params.getHospitalLevel()) {
+			case "3":
+				taskTypeId = "66";
+				break;
+			case "2":
+				taskTypeId = "71";
+				break;
+			case "1":
+				taskTypeId = "72";
+				break;
+			default:
+				throw new BizException("没有对应的任务类型");
+		}
+
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
+
+		// 保存taskContent
+		WmTaskContent taskContent = new WmTaskContent();
+		// 任务类型
+		taskContent.setTemp30(taskTypeId);
+		// 积分包id
+		taskContent.setTemp32(params.getPackageId());
+		// 推广产品名称
+		taskContent.setTemp2(params.getProductName());
+		// 准入医院等级
+		taskContent.setTemp3(params.getHospitalLevel());
+		// 产品进入形式
+		taskContent.setTemp4(params.getEntryForm());
+		// 预期销售量
+		taskContent.setTemp5(params.getExpectedSales());
+		// 负责人
+		taskContent.setTemp6(params.getLeader());
+		// 中标通知书
+		taskContent.setTemp7(this.convertFileUrlArrayToString(params.getNoticeUrl()));
+		// 购销合同
+		taskContent.setTemp8(this.convertFileUrlArrayToString(params.getContractsUrl()));
+		// 合同金额
+		taskContent.setTemp10(params.getContractsAmount().toString());
+		// 发票上传
+		taskContent.setTemp11(this.convertFileUrlArrayToString(params.getInvoiceUrl()));
+		// 总结
+		taskContent.setTemp12(params.getSummary());
+
+		log.info("保存taskContent参数:{}", taskContent);
+		wmTaskContentService.save(taskContent);
+
+		// 保存企业任务通用方法
+		this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
+
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * 企业任务保存-招投标服务
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	@Override
+	public Boolean saveEntTaskForTaskType67(DeptTaskDTO.TaskType67 params) {
+		String taskTypeId = "67";
+
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
+
+		// 保存taskContent
+		WmTaskContent taskContent = new WmTaskContent();
+		// 任务类型
+		taskContent.setTemp30(taskTypeId);
+		// 积分包id
+		taskContent.setTemp32(params.getPackageId());
+		// 推广产品名称
+		taskContent.setTemp2(params.getProductName());
+		// 招标计划书
+		taskContent.setTemp3(this.convertFileUrlArrayToString(params.getTenderProposalUrl()));
+		// 招标目录
+		taskContent.setTemp4(this.convertFileUrlArrayToString(params.getTendersCatalogueUrl()));
+		// 标书
+		taskContent.setTemp5(this.convertFileUrlArrayToString(params.getTenderUrl()));
+		// 投标资料清单
+		taskContent.setTemp6(this.convertFileUrlArrayToString(params.getInformationListUrl()));
+		// 产品投标及报价
+		taskContent.setTemp7(this.convertFileUrlArrayToString(params.getQuoteUrl()));
+		// 招标活动总结表
+		taskContent.setTemp8(this.convertFileUrlArrayToString(params.getSummaryTableUrl()));
+		// 总结
+		taskContent.setTemp12(params.getSummary());
+
+		log.info("保存taskContent参数:{}", taskContent);
+		wmTaskContentService.save(taskContent);
+
+		// 保存企业任务通用方法
+		this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
+
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * 企业任务保存-商业推广会
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	@Override
+	public Boolean saveEntTaskForTaskType68(DeptTaskDTO.TaskType68 params) {
+		String taskTypeId = "68";
+
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
+
+		// 保存taskContent
+		WmTaskContent taskContent = new WmTaskContent();
+		// 任务类型
+		taskContent.setTemp30(taskTypeId);
+		// 积分包id
+		taskContent.setTemp32(params.getPackageId());
+		// 推广产品名称
+		taskContent.setTemp2(params.getProductName());
+		// 会议时间
+		taskContent.setTemp3(params.getMeetingTime());
+		// 会议地点
+		taskContent.setTemp4(params.getMeetingPlace());
+		// 会议计划表
+		taskContent.setTemp5(this.convertFileUrlArrayToString(params.getMeetingPlanUrl()));
+		// 会议通知/邀请函
+		taskContent.setTemp6(this.convertFileUrlArrayToString(params.getMeetingInvitationUrl()));
+		// 签到表
+		taskContent.setTemp7(this.convertFileUrlArrayToString(params.getMeetingCheckInUrl()));
+		// 会议照片
+		taskContent.setTemp8(this.convertFileUrlArrayToString(params.getMeetingPhotosUrl()));
+		// 宣传资料使用清单
+		taskContent.setTemp9(this.convertFileUrlArrayToString(params.getPromotionalMaterialsUrl()));
+		// 发票上传
+		taskContent.setTemp11(this.convertFileUrlArrayToString(params.getInvoiceUrl()));
+		// 会议纪要或总结
+		taskContent.setTemp12(params.getSummary());
+
+		log.info("保存taskContent参数:{}", taskContent);
+		wmTaskContentService.save(taskContent);
+
+		// 保存企业任务通用方法
+		this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
+
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * 企业任务保存-商业渠道维护
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	@Override
+	public Boolean saveEntTaskForTaskType69(DeptTaskDTO.TaskType69 params) {
+		String taskTypeId = "69";
+
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
+
+		// 保存taskContent
+		WmTaskContent taskContent = new WmTaskContent();
+		// 任务类型
+		taskContent.setTemp30(taskTypeId);
+		// 积分包id
+		taskContent.setTemp32(params.getPackageId());
+		// 推广产品名称
+		taskContent.setTemp2(params.getProductName());
+		// 产品规格
+		taskContent.setTemp3(params.getProductSpecifications());
+		// 维护周期
+		taskContent.setTemp4(params.getMaintenanceIntervals());
+		// 进量
+		taskContent.setTemp5(params.getPurchaseNumber());
+		// 销量
+		taskContent.setTemp6(params.getSalesNumber());
+		// 存量
+		taskContent.setTemp7(params.getStockNumber());
+		// 本产品信息搜集表
+		taskContent.setTemp8(this.convertFileUrlArrayToString(params.getProductInformationUrl()));
+		// 商业流向数据表
+		taskContent.setTemp9(this.convertFileUrlArrayToString(params.getBusinessFlowDataUrl()));
+		// 竞品信息搜集表
+		taskContent.setTemp10(this.convertFileUrlArrayToString(params.getCompetitorInformationUrl()));
+		// 竞品商业数据流向表
+		taskContent.setTemp11(this.convertFileUrlArrayToString(params.getCompetitorBusinessDataFlowUrl()));
+		// 总结
+		taskContent.setTemp12(params.getSummary());
+
+		log.info("保存taskContent参数:{}", taskContent);
+		wmTaskContentService.save(taskContent);
+
+		// 保存企业任务通用方法
+		this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
+
+		return Boolean.TRUE;
+	}
+
+	/**
+	 * 企业任务保存-第三方专项合同
+	 *
+	 * @param params 参数
+	 * @return {@link Boolean} 结果
+	 */
+	@Override
+	public Boolean saveEntTaskForTaskType70(DeptTaskDTO.TaskType70 params) {
+		String taskTypeId = "70";
+
+		// 查询积分包
+		WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+		// 查询任务规则积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setRuleId(scorePackage.getRuleId());
+		WmTaskType queryTaskType = wmTaskTypeService.getById(taskTypeId);
+		wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+		// 校验企业任务类型
+		this.checkDeptTask(taskTypeId, score, scorePackage);
+
+		// 保存taskContent
+		WmTaskContent taskContent = new WmTaskContent();
+		// 任务类型
+		taskContent.setTemp30(taskTypeId);
+		// 积分包id
+		taskContent.setTemp32(params.getPackageId());
+		// 项目名称
+		taskContent.setTemp2(params.getProjectName());
+		// 甲方名称
+		taskContent.setTemp3(params.getPartAName());
+		// 乙方名称
+		taskContent.setTemp4(params.getPartBName());
+		// 项目简介
+		taskContent.setTemp5(params.getIntroduction());
+		// 合同金额
+		taskContent.setTemp6(params.getContractsAmount().toString());
+		// 合同上传
+		taskContent.setTemp7(this.convertFileUrlArrayToString(params.getContractsUrl()));
+		// 发票上传
+		taskContent.setTemp8(this.convertFileUrlArrayToString(params.getInvoiceUrl()));
+		// 总结
+		taskContent.setTemp12(params.getSummary());
+
+		log.info("保存taskContent参数:{}", taskContent);
+		wmTaskContentService.save(taskContent);
+
+		// 保存企业任务通用方法
+		this.saveEntTaskCommon(taskTypeId, taskContent, score, scorePackage);
+
+		return Boolean.TRUE;
+	}
+
     /**
      * 保存企业任务通用方法
      *
@@ -373,6 +560,9 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         task.setScore(taskScore);
         task.setLookintoDate(now);
         task.setUpdateTime(now);
+		task.setCreateTime(now);
+		task.setCreateUser(user.getId());
+		task.setUpdateUser(String.valueOf(user.getId()));
         task.setDrugEntId(scorePackage.getDrugEntId());
         task.setTaskRuleId(scorePackage.getTaskRuleId());
         task.setDeptId(String.valueOf(user.getDeptId()));
@@ -430,6 +620,107 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         redisTemplate.delete(cacheKey);
     }
 
+	/**
+	 * 校验企业任务类型
+	 *
+	 * @param taskTypeId   任务类型id
+	 * @param score        任务类型积分值
+	 * @param scorePackage 积分包
+	 */
+	private void checkDeptTask(String taskTypeId, int score, WmScorePackage scorePackage) {
+		// 查询任务类型启用状态
+		List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+				.eq(WmTaskSubmissionPercentRule::getDeptId, SecurityUtils.getUser().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, taskTypeId)) {
+			throw new RuntimeException("当前企业未开启该任务!");
+		}
+
+		int scoreTaskTypeCount = wmScoreTaskTypeService.count(Wrappers.<WmScoreTaskType>lambdaQuery()
+				.eq(WmScoreTaskType::getScoreId, scorePackage.getId())
+				.eq(WmScoreTaskType::getTaskTypeId, taskTypeId));
+		if (scoreTaskTypeCount <= 0) {
+			throw new RuntimeException("积分包有效任务类型未启用该任务!");
+		}
+
+		Set<String> allPackageIds = new HashSet<>();
+		allPackageIds.add(scorePackage.getId());
+		// 查询所有子包值
+		List<WmScorePackage> subPackageList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+				.eq(WmScorePackage::getRelationScoreId, scorePackage.getId())
+				.ne(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.TERMINATED.val()));
+		if (CollUtil.isNotEmpty(subPackageList)) {
+			Set<String> subPackageIds = subPackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+			allPackageIds.addAll(subPackageIds);
+			// 查询所有子子包值
+			List<WmScorePackage> subSubPackageList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+					.in(WmScorePackage::getRelationScoreId, subPackageIds)
+					.ne(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.TERMINATED.val()));
+			if (CollUtil.isNotEmpty(subSubPackageList)) {
+				Set<String> subSubPackageIds = subSubPackageList.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+				allPackageIds.addAll(subSubPackageIds);
+			}
+		}
+		List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+				.in(WmTask::getScorePackageId, allPackageIds)
+				.eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
+				.eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+
+		// 校验是否超过可分配积分值
+		List<WmScorePackage> scorePackagekfpjf =
+				wmScorePackageService.getScorePackagekfpjf(null, SecurityUtils.getUser().getDeptId(),
+						new String[]{"0", "1", "2"}, new String[]{scorePackage.getId()});
+		if (score > scorePackagekfpjf.get(0).getKfpjf()) {
+			log.info("可分配积分不足");
+			throw new RuntimeException("可分配积分不足!");
+		}
+
+		// 查询taskType
+		List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
+				.eq(WmTaskType::getTaskTypeLevel, "1")
+				.eq(WmTaskType::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val()));
+		// 企业任务类型id
+		List<String> entTaskTypeIds = taskTypeList.stream()
+				.filter(taskType -> "2".equals(taskType.getTaskReceiverType()) && !"p-19".equals(taskType.getParentId()))
+				.map(WmTaskType::getId).collect(Collectors.toList());
+
+		// 任务总积分(不包括当前提交的积分值)
+		int totalScoreSum = 0;
+		// 企业任务总积分(包括当前提交的积分值)
+		int entTotalScoreSum = 0;
+//		totalScoreSum += score;
+		entTotalScoreSum += score;
+		if (CollUtil.isNotEmpty(queryTaskList)) {
+			totalScoreSum += queryTaskList.stream().mapToInt(WmTask::getScore).sum();
+			entTotalScoreSum += queryTaskList.stream()
+					.filter(task -> entTaskTypeIds.contains(task.getTaskTypeId()))
+					.mapToInt(WmTask::getScore).sum();
+		}
+
+		// 校验是否超过可做任务分值(设n为实际可提交任务总分值, 则n需满足: n + n * 审核管理费比例(%) <= 积分包值)
+		BigDecimal totalTaskAndFeeScore = BigDecimal.valueOf(totalScoreSum).multiply(scorePackage.getAuditManagementFeeRates())
+				.divide(new BigDecimal("100.00")).add(BigDecimal.valueOf(totalScoreSum));
+		if (totalTaskAndFeeScore.compareTo(BigDecimal.valueOf(scorePackage.getScore())) > 0) {
+			log.info("可做任务积分值不足");
+			throw new RuntimeException("可分配积分不足!");
+		}
+
+		// 校验是否超过积分包企业任务上限
+		if (BigDecimal.valueOf(entTotalScoreSum)
+				.compareTo(
+						BigDecimal.valueOf(scorePackage.getScore())
+								.multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))
+				) > 0) {
+			throw new RuntimeException("已超过积分包的企业任务上限!");
+		}
+	}
+
     /**
      * 将文件地址数组转换为字符串
      *

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

@@ -94,6 +94,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -151,6 +153,16 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 
 		List<WmReport> records = reportListPage.getRecords();
 
+		if (CollUtil.isEmpty(records)) {
+			return page;
+		}
+
+		Set<Integer> scoreIds = records.stream().map(WmReport::getScoreId).collect(Collectors.toSet());
+		List<WmScorePackage> scorePackageList = wmScorePackageService.listByIds(scoreIds);
+		// 积分包对应的审核管理费
+		Map<String, BigDecimal> packageAuditManagFeeRatesMap = scorePackageList.stream()
+				.collect(Collectors.toMap(WmScorePackage::getId, WmScorePackage::getAuditManagementFeeRates));
+
 		for (WmReport report : records){
 
 			// word报告状态
@@ -230,6 +242,12 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 			}
 			report.setExcelReportOpt(excelPpt);
 
+			// 完成积分值(最终完成积分值 = 完成积分值 * (1+审核管理费比例))
+			int actualScore = new BigDecimal(report.getTotalScore()).multiply(
+					packageAuditManagFeeRatesMap.get(String.valueOf(report.getScoreId()))
+							.divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+			).intValue();
+			report.setTotalScore(String.valueOf(actualScore));
 		}
 
 		return reportListPage;

+ 89 - 23
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java

@@ -64,6 +64,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -112,6 +113,11 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		return wmScorePackageMapper.listWmScorePackageAndTask(wmScorePackage, new DataScope());
 	}
 
+	@Override
+	public IPage<WmScorePackage> listWmScorePackageAndTaskExt(Page<WmScorePackage> page, WmScorePackage wmScorePackage) {
+		return wmScorePackageMapper.listWmScorePackageAndTaskExt(page, wmScorePackage);
+	}
+
 	@Override
 	public List<WmScorePackage> listWmScorePackageAndTaskExt(WmScorePackage wmScorePackage) {
 		return wmScorePackageMapper.listWmScorePackageAndTaskExt(wmScorePackage);
@@ -122,12 +128,16 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		return wmScorePackageMapper.listWmScorePackageAndTaskExtOld(wmScorePackage);
 	}
 
+	@Override
+	public IPage<WmScorePackage> listWmScorePackageAndTaskExt2(Page<WmScorePackage> page, WmScorePackage wmScorePackage) {
+		return wmScorePackageMapper.listWmScorePackageAndTaskExt2(page, wmScorePackage);
+	}
+
 	@Override
 	public List<WmScorePackage> listWmScorePackageAndTaskExt2(WmScorePackage wmScorePackage) {
 		return wmScorePackageMapper.listWmScorePackageAndTaskExt2(wmScorePackage);
 	}
 
-
 	@Override
 	public List<WmScorePackage> listWmScorePackageAndTaskExt2Old(WmScorePackage wmScorePackage) {
 		return wmScorePackageMapper.listWmScorePackageAndTaskExt2Old(wmScorePackage);
@@ -1466,7 +1476,14 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		}
 
 		wmScorePackage.setQuizRelations(quizRelations);
-		
+
+		// 可分配积分值设置
+		if (StrUtil.isNotBlank(wmScorePackage.getRelationScoreId())) {
+			List<WmScorePackage> pkgList =
+					this.getScorePackagekfpjf(null, null, new String[]{"0", "1", "2"}, new String[]{wmScorePackage.getRelationScoreId()});
+			wmScorePackage.setKfpjf(pkgList.get(0).getKfpjf());
+		}
+
 		return R.ok(wmScorePackage);
 	}
 
@@ -1521,22 +1538,42 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 				.equals("-1")) {
 			WmScorePackage wmScorePackage1 = new WmScorePackage();
 			wmScorePackage1.setId(wmScorePackage.getRelationScoreId());
-			WmScorePackage wmScorePackage2 = wmScorePackageMapper.selectById(wmScorePackage1.getId());
 			Integer kfpjf = 0;
-			if (wmScorePackage2 != null) {
-				kfpjf += wmScorePackage2.getKfpjf() == null ? 0 : wmScorePackage2.getKfpjf();
-				WmScorePackage wmScorePackageOld = wmScorePackageMapper.selectById(wmScorePackage.getId());
-				kfpjf += wmScorePackageOld.getScore();
-				if (kfpjf > 0 && wmScorePackage.getScore() > kfpjf) {
-					return R.failed("预积分包值不能大于可分配积分值");
+
+			List<WmScorePackage> scorePackagekfpjf = this.getScorePackagekfpjf(null, null, new String[]{"0", "1", "2"},
+					new String[]{wmScorePackage.getRelationScoreId()});
+
+			if (CollUtil.isNotEmpty(scorePackagekfpjf)) {
+				kfpjf = scorePackagekfpjf.get(0).getKfpjf();
+				WmScorePackage oldScorePackage = wmScorePackageMapper.selectById(wmScorePackage.getId());
+
+				// 积分值相比修改前的变动(相对于积分余额,增加则为负-消耗,减少则为正-回收)
+				int changeScore = oldScorePackage.getScore() - wmScorePackage.getScore();
+
+				if (changeScore < 0 && Math.abs(changeScore) > kfpjf) {
+					return R.failed("修改后增加的积分值不能大于可分配积分值");
 				}
 				//更新可分配积分包值
-				if (kfpjf >= wmScorePackage.getScore()) {
+				if (changeScore > 0 || (changeScore < 0 && Math.abs(changeScore) <= kfpjf)) {
 					relationScorePackage.setId(wmScorePackage.getRelationScoreId());
-					relationScorePackage.setKfpjf(kfpjf - wmScorePackage.getScore());
+					relationScorePackage.setKfpjf(kfpjf - changeScore);
 				}
-
 			}
+
+//			if (wmScorePackage2 != null) {
+//				kfpjf += wmScorePackage2.getKfpjf() == null ? 0 : wmScorePackage2.getKfpjf();
+//				WmScorePackage wmScorePackageOld = wmScorePackageMapper.selectById(wmScorePackage.getId());
+//				kfpjf += wmScorePackageOld.getScore();
+//				if (kfpjf > 0 && wmScorePackage.getScore() > kfpjf) {
+//					return R.failed("预积分包值不能大于可分配积分值");
+//				}
+//				//更新可分配积分包值
+//				if (kfpjf >= wmScorePackage.getScore()) {
+//					relationScorePackage.setId(wmScorePackage.getRelationScoreId());
+//					relationScorePackage.setKfpjf(kfpjf - wmScorePackage.getScore());
+//				}
+//
+//			}
 			//List<WmScorePackage> packageList=wmScorePackageMapper.getScorePackagekfpjf(wmScorePackage1);
 			//Integer kfpjf=0;
 //			if(null!=packageList&&packageList.size()!=0){
@@ -2446,7 +2483,6 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		String type1Lable = package_type1.getLabel();
 		String type2Lable = package_type2.getLabel();
 
-
 		// 设置
 		// scorePackage.setYsh(yshtt >= 100 ? scorePackage.getScore() : ysh);
 		scorePackage.setYjd((int) yjd);
@@ -2673,16 +2709,26 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		int payScore = payScoreAndYsh.get("payScore");
 		int ysh = payScoreAndYsh.get("ysh");
 
-		BigDecimal payRate = new BigDecimal(payScore).multiply(BigDecimal.valueOf(100))
-				.divide(new BigDecimal(wmScorePackage.getScore()), 2, BigDecimal.ROUND_HALF_UP);
+		// 完成积分值(最终完成积分值 = 完成积分值 * (1+审核管理费比例))
+		int actualScore = BigDecimal.valueOf(ysh).multiply(
+				wmScorePackage.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), 2, RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+		).intValue();
+
+		// payScore(payScore = 完成积分值 * (1+审核管理费比例))
+		int actualPayScore = BigDecimal.valueOf(payScore).multiply(
+				wmScorePackage.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), 2, RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+		).intValue();
+
+		BigDecimal payRate = new BigDecimal(actualPayScore).multiply(BigDecimal.valueOf(100))
+				.divide(new BigDecimal(wmScorePackage.getScore()), 2, RoundingMode.HALF_UP);
 		if (payRate.compareTo(new BigDecimal("100")) >= 0) {
 			wmScorePackage.setPayRate(100 + ".00");
 		} else {
 			wmScorePackage.setPayRate(payRate + "");
 		}
 
-		BigDecimal fin = new BigDecimal(ysh).multiply(BigDecimal.valueOf(100))
-				.divide(new BigDecimal(wmScorePackage.getScore()), 2, BigDecimal.ROUND_HALF_UP);
+		BigDecimal fin = new BigDecimal(actualScore).multiply(BigDecimal.valueOf(100))
+				.divide(new BigDecimal(wmScorePackage.getScore()), 2, RoundingMode.HALF_UP);
 		if (fin.compareTo(new BigDecimal("100")) > 0) {
 			wmScorePackage.setFinishRate(100 + ".00");
 			if ("0".equals(wmScorePackage.getPackageFinishStatus())) {
@@ -2698,8 +2744,12 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 			}
 		}
 
-		wmScorePackage.setPayScore(payScoreAndYsh.get("payScore"));
-		wmScorePackage.setYsh(payScoreAndYsh.get("ysh"));
+		wmScorePackage.setPayScore(actualPayScore);
+
+		wmScorePackage.setYsh(actualScore);
+
+		// 对应页面可结算积分值(没有什么作用)
+		wmScorePackage.setYtjtt(actualPayScore);
 
 		// 封装报告状态
 		wmScorePackage.setReportMqName(CacheConstants.EXPORT_NBA_REPORT_CACHE);
@@ -3186,6 +3236,12 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 			assignedScore += entTaskList.stream().mapToInt(WmTask::getScore).sum();
 		}
 
+		// 实际已分配积分值(实际已分配积分值 = 已分配积分值 * (1+审核管理费比例))
+		int actualAssignedScore= BigDecimal.valueOf(assignedScore).multiply(
+				scorePackage.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN).add(BigDecimal.ONE)
+		).intValue();
+		log.info("当前积分包pacakgeId={},已分配积分值={},实际已分配积分值={}", scorePackage.getId(), assignedScore, actualAssignedScore);
+
 		log.info("当前积分包终止前数据:{}", scorePackage);
 		if (UpmsType.TerminatePackageType.ALL.equals(terminatePackageType) || assignedScore <= 0) {
 			// 全部终止的校验
@@ -3340,7 +3396,7 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 						.collect(Collectors.groupingBy(WmScorePackage::getRelationScoreId, Collectors.summingInt(WmScorePackage::getScore)));
 			}
 
-			// 查询积分包的任务
+			// 查询当前积分包的直接关联的任务
 			List<WmTask> tasks = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
 					.in(WmTask::getScorePackageId, packageIdSet)
                     .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
@@ -3359,13 +3415,23 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 				String packageId = pkg.getId();
 				// 统计可分配积分值
                 Integer score = pkg.getScore();
+				// 实际可下发积分值 = 可分配积分值 / (1+审核管理费比例)
+				int actualScore = BigDecimal.valueOf(score).divide(
+						pkg.getAuditManagementFeeRates().divide(new BigDecimal("100.00"), RoundingMode.HALF_EVEN)
+								.add(BigDecimal.ONE),
+						RoundingMode.HALF_EVEN
+				).intValue();
+
+				// 减去直接关联的下级包的积分值
                 if (finalRelatedPackageScoresMap.containsKey(packageId)) {
-					score -= finalRelatedPackageScoresMap.get(packageId);
+					actualScore -= finalRelatedPackageScoresMap.get(packageId);
                 }
+				// 减去直接关联的任务(目前任务类型只有企业任务)的积分值
                 if (finalRelatedTaskScoresMap.containsKey(packageId)) {
-					score -= finalRelatedTaskScoresMap.get(packageId);
+					actualScore -= finalRelatedTaskScoresMap.get(packageId);
                 }
-                pkg.setKfpjf(score);
+
+				pkg.setKfpjf(actualScore);
 			});
 		}
 

+ 54 - 13
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

@@ -162,7 +162,8 @@
 		       p2p_service_amount,
 		       bb.ytj,
 		       bb.ysh,
-		       bb.dsh
+		       bb.dsh,
+			   audit_management_fee_rates
 		from wm_score_package LEFT JOIN (
 		select score_package_id,sum(if(task_status>0,score,0)) ytj,sum(if(task_status=3,score,0))
 		ysh,sum(if(task_status=2,score,0)) dsh from wm_task where score_package_id is not null and wm_task.del_flag=0
@@ -287,18 +288,58 @@
 
 
 	<select id="listWmScorePackageAndTaskExt2" resultMap="wmScorePackageMap">
-		select id, task_rule_id, drug_ent_id, score_id, score_name, score, agent_type_id, level1_id, level2_id,
-		zb_id,score_package_status,settlement_date,
-		xxdb_id, typeid, package_finish_status, dept_id, del_flag, enable_flag, tenant_id, create_time,
-		create_user,send_package_dept_id,old_package,
-		update_time,p2p_amount,p2p_service_amount,
-		update_user,belong_date,allocation_date,score_package_name,package_type1,relation_score_id,ywctt,settle_status,finish_rate
-		,bb.ytj,bb.ysh,bb.dsh from wm_score_package LEFT JOIN (
-		select score_package_id,sum(if(task_status>0,score,0)) ytj,sum(if(task_status=3,score,0))
-		ysh,sum(if(task_status=2,score,0)) dsh from wm_task where score_package_id is not null and wm_task.del_flag=0
-		and wm_task.enable_flag=0 and wm_task.real_flag = '0' group by score_package_id)
-		bb
-		on wm_score_package.id =bb.score_package_id
+		select id,
+			task_rule_id,
+			drug_ent_id,
+			score_id,
+			score_name,
+			score,
+			agent_type_id,
+			level1_id,
+			level2_id,
+			zb_id,
+			score_package_status,
+			settlement_date,
+			xxdb_id,
+			typeid,
+			package_finish_status,
+			dept_id,
+			del_flag,
+			enable_flag,
+			tenant_id,
+			create_time,
+			create_user,
+			send_package_dept_id,
+			old_package,
+			update_time,
+			p2p_amount,
+			p2p_service_amount,
+			update_user,
+			belong_date,
+			allocation_date,
+			score_package_name,
+			package_type1,
+			relation_score_id,
+			ywctt,
+			settle_status,
+			finish_rate,
+			bb.ytj,
+			bb.ysh,
+			bb.dsh,
+			audit_management_fee_rates
+		from wm_score_package
+		LEFT JOIN (select score_package_id,
+			sum(if(task_status > 0, score, 0)) ytj,
+			sum(if(task_status = 3, score, 0))
+			ysh,
+			sum(if(task_status = 2, score, 0)) dsh
+			from wm_task
+			where score_package_id is not null
+			and wm_task.del_flag = 0
+			and wm_task.enable_flag = 0
+			and wm_task.real_flag = '0'
+			group by score_package_id) bb
+		on wm_score_package.id = bb.score_package_id
 		<where>
 			wm_score_package.del_flag='0' and wm_score_package.enable_flag='0'
 			and wm_score_package.package_type1='1'