Browse Source

feat: 企业承接包-可做任务分值校验(考虑审核管理费的情况)

lixuesong 1 year ago
parent
commit
24749f46ad

+ 128 - 127
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskController.java

@@ -69,6 +69,134 @@ 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");
+
+		// 3,全职学术信息沟通专员
+		// 4,兼职学术信息沟通专员
+		// 5,招商经理
+		switch (scorePackage.getTypeid()) {
+			case "3":
+				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()));
+				break;
+			case "4":
+				// 全职分值
+				result.put("full_time_task_score", String.valueOf(taskList.stream().mapToInt(WmTask::getScore).sum()));
+				// 全职任务数
+				result.put("full_time_task_number", String.valueOf(taskList.size()));
+				break;
+			case "5":
+				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()));
+				break;
+			default:
+		}
+
+		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);
+	}
+
     /**
      * 查询关联的企业积分包
      *
@@ -422,131 +550,4 @@ public class WmDeptTaskController {
 		return R.ok(o);
     }
 
-	/**
-	 * 积分包任务统计
-	 *
-	 * @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");
-
-		// 3,全职学术信息沟通专员
-		// 4,兼职学术信息沟通专员
-		// 5,招商经理
-		switch (scorePackage.getTypeid()) {
-			case "3":
-				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()));
-				break;
-			case "4":
-				// 全职分值
-				result.put("full_time_task_score", String.valueOf(taskList.stream().mapToInt(WmTask::getScore).sum()));
-				// 全职任务数
-				result.put("full_time_task_number", String.valueOf(taskList.size()));
-				break;
-			case "5":
-				List<WmTask> p19Task = taskList.stream()
-						.filter(task -> p19TaskTypeIds.contains(task.getTaskTypeId()))
-						.collect(Collectors.toList());
-				// 招商经理任务分值
-				result.put("investment_manager_task_score", String.valueOf(p19Task.stream().mapToInt(WmTask::getScore).sum()));
-				// 招商经理任务条数
-				result.put("investment_manager_task_number", String.valueOf(p19Task.size()));
-				break;
-			default:
-		}
-
-		List<WmTask> entTask = taskList.stream()
-				.filter(task -> entTaskTypeIds.contains(task.getTaskTypeId()))
-				.collect(Collectors.toList());
-		// 企业任务分值
-		result.put("ent_task_score", String.valueOf(entTask.stream().mapToInt(WmTask::getScore).sum()));
-		// 企业任务条数
-		result.put("ent_task_number", String.valueOf(entTask.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", "0");
-		// 实际完成分值(所有审核通过的任务分+审核管理费分值)
-		int totalTaskScore = taskList.stream().mapToInt(WmTask::getScore).sum();
-		result.put("actual_completion_score", auditManagementFee.add(BigDecimal.valueOf(totalTaskScore)).toString());
-
-		return R.ok(result);
-	}
 }

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

@@ -38,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 企业任务服务
@@ -739,29 +740,58 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
 			throw new RuntimeException("有效任务类型未启用该任务!");
 		}
 
+		List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+				.eq(WmTask::getScorePackageId, scorePackage.getId())
+				.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("可分配积分不足!");
 		}
 
-		// 校验是否超过积分包企业任务上限
-		List<WmTask> queryTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
-				.eq(WmTask::getScorePackageId, scorePackage.getId())
-				.eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
-				.eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
-				.eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val()));
+		// 查询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(totalScoreSum)
-				.compareTo(BigDecimal.valueOf(scorePackage.getScore())
-						.multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))) > 0) {
+
+		// 校验是否超过积分包企业任务上限
+		if (BigDecimal.valueOf(entTotalScoreSum)
+				.compareTo(
+						BigDecimal.valueOf(scorePackage.getScore())
+								.multiply(scorePackage.getEntTaskLimit()).divide(new BigDecimal("100"))
+				) > 0) {
 			throw new RuntimeException("已超过积分包的企业任务上限!");
 		}
 	}