|
@@ -32,6 +32,7 @@ import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
@@ -267,16 +268,7 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
* @param pkg 积分包信息
|
|
|
* @return 任务结果
|
|
|
*/
|
|
|
- private WmTask createTask(String taskTypeId, WmUserSign wmUserSign, UserVO userVO, WmScorePackage pkg) {
|
|
|
-
|
|
|
- // 获取任务类型积分
|
|
|
- WmTaskType wmTaskType = new WmTaskType();
|
|
|
- wmTaskType.setTaskTypeName(wmTaskTypeService.getById(taskTypeId).getTaskTypeName());
|
|
|
- wmTaskType.setRuleId(pkg.getRuleId());
|
|
|
- int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
|
|
|
- if (score < 0) {
|
|
|
- throw new BizException("获取任务积分失败");
|
|
|
- }
|
|
|
+ private WmTask createTask(String taskTypeId, WmUserSign wmUserSign, UserVO userVO, WmScorePackage pkg, int score) {
|
|
|
|
|
|
// 保存任务详情
|
|
|
WmTaskContent wmTaskContent = new WmTaskContent();
|
|
@@ -364,9 +356,22 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
wmScorePackageService.updateById(tWmScorePackage);
|
|
|
|
|
|
// 如果配置了医院拜访的任务类型模板,则关联保存签到详情
|
|
|
- if (wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(userVO.getDeptId(), taskTypeId)) {
|
|
|
+ List<WmDeptTaskTypeTemplate> taskTypeTemplates = wmDeptTaskTypeTemplateService.getTemplate(userVO.getDeptId(), taskTypeId);
|
|
|
+ if (CollUtil.isNotEmpty(taskTypeTemplates)) {
|
|
|
WmUserSignDetail userSignDetail = wmUserSign.getUserSignDetail();
|
|
|
if (userSignDetail != null) {
|
|
|
+ WmDeptTaskTypeTemplate taskTypeTemplate = taskTypeTemplates.get(0);
|
|
|
+ // 医院拜访限制科室个数
|
|
|
+ if (StrUtil.equals(taskTypeTemplate.getTaskTypeId(), "5")) {
|
|
|
+ Map<String, Object> detail = taskTypeTemplate.getDetail();
|
|
|
+ if (CollUtil.isNotEmpty(detail)) {
|
|
|
+ int numberLimit = (int) detail.getOrDefault("numberLimit", 1);
|
|
|
+ // 拜访科室个数和numberLimit 取最小值
|
|
|
+ int minDeptmentLimit = Math.min(numberLimit, userSignDetail.getDepartment().length);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
userSignDetail.setSignId(wmUserSign.getId());
|
|
|
wmUserSignDetailService.save(userSignDetail);
|
|
|
}
|
|
@@ -647,9 +652,23 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
// 保存后续操作
|
|
|
if (saveSign) {
|
|
|
|
|
|
+ // 获取任务类型积分
|
|
|
+ WmTaskType wmTaskType = new WmTaskType();
|
|
|
+ wmTaskType.setTaskTypeName(wmTaskTypeService.getById(taskTypeId).getTaskTypeName());
|
|
|
+ wmTaskType.setRuleId(tWmScorePackage.getRuleId());
|
|
|
+ int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
|
|
|
+ if (score < 0) {
|
|
|
+ throw new BizException("获取任务积分失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存签到详情, 获取任务分值
|
|
|
+ int detailScore = saveSignDetail(wmUserSign, sysU.getDeptId(), taskTypeId, score);
|
|
|
+ log.info("精细化拜访实际任务分值:{}", detailScore);
|
|
|
+
|
|
|
// 保存任务
|
|
|
- WmTask task = createTask(taskTypeId, wmUserSign, sysU, tWmScorePackage);
|
|
|
+ WmTask task = createTask(taskTypeId, wmUserSign, sysU, tWmScorePackage, detailScore);
|
|
|
task.setType(tWmScorePackage.getPackageType1());
|
|
|
+
|
|
|
// 操作积分包
|
|
|
operatePkgAndPkgStatus(tWmScorePackage, packageStatus, sysU, taskTypeId, wmUserSign);
|
|
|
|
|
@@ -659,5 +678,49 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
|
|
|
return R.failed("签到保存失败");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 保存签到详情
|
|
|
+ *
|
|
|
+ * @param wmUserSign 打卡信息
|
|
|
+ * @param deptId 部门id
|
|
|
+ * @param taskTypeId 任务类型id
|
|
|
+ * @param baseScore 任务类型规则分数
|
|
|
+ * @return int 任务实际分值(拜访科室数 * 任务类型规则分数)
|
|
|
+ */
|
|
|
+ private int saveSignDetail(WmUserSign wmUserSign, Integer deptId, String taskTypeId, Integer baseScore) {
|
|
|
+ int minDeptmentLimit = 1;
|
|
|
+ // 如果配置了精细化拜访的任务类型模板,则关联保存签到详情
|
|
|
+ List<WmDeptTaskTypeTemplate> taskTypeTemplates = wmDeptTaskTypeTemplateService.getTemplate(deptId, taskTypeId);
|
|
|
+ if (CollUtil.isNotEmpty(taskTypeTemplates)) {
|
|
|
+ WmUserSignDetail userSignDetail = wmUserSign.getUserSignDetail();
|
|
|
+ if (userSignDetail != null) {
|
|
|
+ WmDeptTaskTypeTemplate taskTypeTemplate = taskTypeTemplates.get(0);
|
|
|
+ // 医院拜访限制科室个数
|
|
|
+ if (StrUtil.equals(taskTypeTemplate.getTaskTypeId(), "5")) {
|
|
|
+ Map<String, Object> detail = taskTypeTemplate.getDetail();
|
|
|
+ if (CollUtil.isNotEmpty(detail)) {
|
|
|
+ int numberLimit = (int) detail.getOrDefault("numberLimit", 1);
|
|
|
+ // 拜访科室个数和numberLimit 取最小值
|
|
|
+ minDeptmentLimit = Math.min(numberLimit, userSignDetail.getDepartment().length);
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> signDetailDetail = userSignDetail.getDetail();
|
|
|
+ if (CollUtil.isNotEmpty(signDetailDetail)) {
|
|
|
+ List<String> departmentList = new ArrayList<>(signDetailDetail.size());
|
|
|
+ for (Map<String, Object> detailMap : signDetailDetail) {
|
|
|
+ String departmentName = (String) detailMap.get("departmentName");
|
|
|
+// String[] fileUrl = (String[]) detailMap.get("fileUrl");
|
|
|
+ departmentList.add(departmentName);
|
|
|
+ }
|
|
|
+ userSignDetail.setDepartment(departmentList.toArray(new String[0]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ userSignDetail.setSignId(wmUserSign.getId());
|
|
|
+ wmUserSignDetailService.save(userSignDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return baseScore * minDeptmentLimit;
|
|
|
+ }
|
|
|
|
|
|
}
|