Browse Source

feat: 分页查询企业任务记录

lixuesong 1 year ago
parent
commit
b07d4726ec

+ 109 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskController.java

@@ -1,10 +1,25 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
+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.mapper.WmScorePackageMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
@@ -20,6 +35,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 企业任务控制器
@@ -34,6 +51,9 @@ public class WmDeptTaskController {
 
     private final WmScorePackageMapper wmScorePackageMapper;
     private final WmDeptTaskService wmDeptTaskService;
+    private final WmTaskService wmTaskService;
+    private final WmTaskTypeService wmTaskTypeService;
+    private final SysUserService sysUserService;
 
     /**
      * 查询关联的企业积分包
@@ -62,6 +82,93 @@ public class WmDeptTaskController {
         return R.ok(results);
     }
 
+    /**
+     * 分页查询企业任务
+     *
+     * @param page             分页参数
+     * @param scorePackageName 积分包名称
+     * @return {@link R}<{@link ?}> 结果
+     */
+    @GetMapping("/dept-task/page-ent-task")
+    public R<?> pageEntTask(Page<WmTaskVO> page, String scorePackageName) {
+
+        Integer deptId = SecurityUtils.getUser().getDeptId();
+
+        // 查询当前企业所有的企业大包(包括上级发给自己的,和自己发给自己的)
+        LambdaQueryWrapper<WmScorePackage> queryWrapper = Wrappers.<WmScorePackage>lambdaQuery()
+                .eq(WmScorePackage::getDeptId, deptId)
+                .in(WmScorePackage::getTypeid, "0", "1", "2")
+                .eq(WmScorePackage::getDelFlag, DelEnum.NOT_DEL.val())
+                .eq(WmScorePackage::getEnableFlag, EnableEnum.ENABLE.val())
+                .eq(WmScorePackage::getOldPackage, "0");
+        if (StrUtil.isNotBlank(scorePackageName)) {
+            queryWrapper.like(WmScorePackage::getScorePackageName, scorePackageName);
+        }
+        List<WmScorePackage> relatedPackages = wmScorePackageMapper.selectList(queryWrapper);
+        if (CollUtil.isEmpty(relatedPackages)) {
+            return R.ok(page);
+        }
+        // 积分包id列表
+        Set<String> packageIdSet = relatedPackages.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
+
+        // 查询积分包下的企业任务
+        Page<WmTask> taskPage = wmTaskService.page(new Page<>(page.getCurrent(), page.getSize()), Wrappers.<WmTask>lambdaQuery()
+                .in(WmTask::getScorePackageId, packageIdSet));
+
+        if (CollUtil.isEmpty(taskPage.getRecords())) {
+            return R.ok(page);
+        }
+
+        // 查询taskType
+        List<WmTaskType> taskTypeList = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
+                .eq(WmTaskType::getTaskTypeLevel, "1")
+                .eq(WmTaskType::getDelFlag, "0")
+                .eq(WmTaskType::getEnableFlag, "0"));
+        // taskType通过id分组(key为parentId,value为taskTypeName)
+        Map<String, String> taskTypeIdMap = taskTypeList.stream()
+                .collect(Collectors.toMap(WmTaskType::getId, WmTaskType::getTaskTypeName));
+
+        // 查询涉及到的user
+        Set<String> userIdSet = taskPage.getRecords().stream().map(WmTask::getTaskUserId).collect(Collectors.toSet());
+        List<SysUser> users = sysUserService.listByIds(userIdSet);
+        Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getRealname));
+
+        List<WmTaskVO> vos = taskPage.getRecords().stream().map(wmTask -> {
+            WmTaskVO wmTaskVO = BeanUtil.copyProperties(wmTask, WmTaskVO.class);
+            // 任务类型名称
+            wmTaskVO.setTaskTypeName(taskTypeIdMap.getOrDefault(wmTaskVO.getTaskTypeId(), ""));
+            // 姓名
+            wmTaskVO.setTaskUsername(userMap.getOrDefault(Integer.parseInt(wmTaskVO.getTaskUserId()), ""));
+            // 报告审核状态
+            wmTaskVO.setApprovalOpinionName("");
+            if (StrUtil.isNotBlank(wmTask.getReportDrugApprovalOpinion())) {
+                if (ReportEnum.APPROVAL_OPINION_YES.getType().equals(wmTask.getReportDrugApprovalOpinion())) {
+                    wmTaskVO.setApprovalOpinion(ReportEnum.APPROVAL_OPINION_YES.getType());
+                    wmTaskVO.setApprovalOpinionName(ReportEnum.APPROVAL_OPINION_YES.getDescription());
+                } else if (ReportEnum.APPROVAL_OPINION_NO.getType().equals(wmTask.getReportDrugApprovalOpinion())) {
+                    wmTaskVO.setApprovalOpinion(ReportEnum.APPROVAL_OPINION_NO.getType());
+                    wmTaskVO.setApprovalOpinionName(ReportEnum.APPROVAL_OPINION_NO.getDescription());
+                }
+            } else if (StrUtil.isNotBlank(wmTask.getReportOneApprovalOpinion())) {
+                if (ReportEnum.APPROVAL_OPINION_YES.getType().equals(wmTask.getReportOneApprovalOpinion())) {
+                    wmTaskVO.setApprovalOpinion(ReportEnum.APPROVAL_OPINION_YES.getType());
+                    wmTaskVO.setApprovalOpinionName(ReportEnum.APPROVAL_OPINION_YES.getDescription());
+                } else if (ReportEnum.APPROVAL_OPINION_NO.getType().equals(wmTask.getReportOneApprovalOpinion())) {
+                    wmTaskVO.setApprovalOpinion(ReportEnum.APPROVAL_OPINION_NO.getType());
+                    wmTaskVO.setApprovalOpinionName(ReportEnum.APPROVAL_OPINION_NO.getDescription());
+                }
+            }
+
+            return wmTaskVO;
+        }).collect(Collectors.toList());
+
+        page.setRecords(vos);
+        page.setTotal(taskPage.getTotal());
+        page.setPages(taskPage.getPages());
+
+        return R.ok(page);
+    }
+
     /**
      * 企业任务保存-企业通用
      *
@@ -100,7 +207,7 @@ public class WmDeptTaskController {
     @PostMapping("/dept-task/save-task-type63")
     public R<?> saveEntTaskForTaskType63(@Validated @RequestBody DeptTaskDTO.TaskType63 params) {
         log.info("企业任务保存-专家共识巡讲会请求参数:{}", params);
-        // TODO
-        return null;
+
+        return R.ok(wmDeptTaskService.saveEntTaskForTaskType63(params));
     }
 }

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

@@ -74,14 +74,14 @@ public class DeptTaskDTO implements Serializable {
     }
 
     /**
-     * 任务类型63-专家共识巡讲
+     * 任务类型62-医学会各级年会及卫星
      *
      * @author lixuesong
      * @date 2023/09/21
      */
     @Data
-    public static class TaskType63 implements Serializable {
-        private static final long serialVersionUID = -1918885625462400849L;
+    public static class TaskType62 implements Serializable {
+        private static final long serialVersionUID = -2282200603021121878L;
 
         /**
          * 积分包id
@@ -90,33 +90,33 @@ public class DeptTaskDTO implements Serializable {
         private String packageId;
 
         /**
-         * 主题
+         * 会议主题
          */
-        @NotBlank(message = "主题必填")
+        @NotBlank(message = "会议主题必填")
         private String meetingtTitle;
 
         /**
-         * 时间
+         * 会议时间
          */
-        @NotBlank(message = "时间必填")
+        @NotBlank(message = "会议时间必填")
         private String meetingTime;
 
         /**
-         * 参加人次
+         * 会议人次
          */
-        @NotBlank(message = "参加人次必填")
+        @NotBlank(message = "会议人次必填")
         private String meetingNumber;
 
         /**
-         * 活动策划书
+         * 会议邀请函
          */
-        @NotEmpty(message = "活动策划书必填")
-        private String[] eventPlannerUrl;
+        @NotEmpty(message = "会议邀请函必填")
+        private String[] meetingInvitationUrl;
 
         /**
-         * 活动计划表
+         * 会议计划表
          */
-        @NotEmpty(message = "活动计划表必填")
+        @NotEmpty(message = "会议计划表必填")
         private String[] meetingPlanUrl;
 
         /**
@@ -134,7 +134,7 @@ public class DeptTaskDTO implements Serializable {
         /**
          * 会议内容
          */
-        @NotBlank(message = "会议内容必填")
+        @NotEmpty(message = "会议内容必填")
         private String[] meetingContentUrl;
 
         /**
@@ -154,14 +154,14 @@ public class DeptTaskDTO implements Serializable {
     }
 
     /**
-     * 任务类型62-医学会各级年会及卫星
+     * 任务类型63-专家共识巡讲
      *
      * @author lixuesong
      * @date 2023/09/21
      */
     @Data
-    public static class TaskType62 implements Serializable {
-        private static final long serialVersionUID = -2282200603021121878L;
+    public static class TaskType63 implements Serializable {
+        private static final long serialVersionUID = -1918885625462400849L;
 
         /**
          * 积分包id
@@ -170,33 +170,33 @@ public class DeptTaskDTO implements Serializable {
         private String packageId;
 
         /**
-         * 会议主题
+         * 主题
          */
-        @NotBlank(message = "会议主题必填")
+        @NotBlank(message = "主题必填")
         private String meetingtTitle;
 
         /**
-         * 会议时间
+         * 时间
          */
-        @NotBlank(message = "会议时间必填")
+        @NotBlank(message = "时间必填")
         private String meetingTime;
 
         /**
-         * 会议人次
+         * 参加人次
          */
-        @NotBlank(message = "会议人次必填")
+        @NotBlank(message = "参加人次必填")
         private String meetingNumber;
 
         /**
-         * 会议邀请函
+         * 活动策划书
          */
-        @NotEmpty(message = "会议邀请函必填")
-        private String[] meetingInvitationUrl;
+        @NotEmpty(message = "活动策划书必填")
+        private String[] eventPlannerUrl;
 
         /**
-         * 会议计划表
+         * 活动计划表
          */
-        @NotEmpty(message = "会议计划表必填")
+        @NotEmpty(message = "活动计划表必填")
         private String[] meetingPlanUrl;
 
         /**
@@ -232,4 +232,5 @@ public class DeptTaskDTO implements Serializable {
          */
         private String meetingSummary;
     }
+
 }

+ 11 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/WmTaskVO.java

@@ -50,6 +50,11 @@ public class WmTaskVO implements Serializable {
 	@ApiModelProperty(value="任务类型ID")
 	private String taskTypeId;
 
+	/**
+	 * 任务类型名称
+	 */
+	private String taskTypeName;
+
 	@ApiModelProperty(value="任务得分")
 	Integer score;
 
@@ -193,6 +198,12 @@ public class WmTaskVO implements Serializable {
 	 */
 	@ApiModelProperty(value="审批意见")
 	private String approvalOpinion;
+
+	/**
+	 * 审批意见中文名称
+	 */
+	private String approvalOpinionName;
+
 	/**
 	 * 审批说明
 	 */

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

@@ -113,6 +113,7 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
      * @return {@link Boolean} 结果
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean saveEntTaskForTaskType62(DeptTaskDTO.TaskType62 params) {
 
 //        // 查询任务类型启用状态
@@ -157,7 +158,7 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         // 会议计划表
         taskContent.setTemp6(String.join(",", params.getMeetingPlanUrl()));
         // 会议签到表
-        taskContent.setTemp7(String.join(",", params.getMeetingCheckInUrl()));// 会议邀请函
+        taskContent.setTemp7(String.join(",", params.getMeetingCheckInUrl()));
         // 现场照片
         taskContent.setTemp8(String.join(",", params.getLivePhotosUrl()));
         // 会议内容
@@ -177,6 +178,77 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         return Boolean.TRUE;
     }
 
+    /**
+     * 企业任务保存-专家共识巡讲会
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    @Override
+    public Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params) {
+
+//        // 查询任务类型启用状态
+//        List<WmTaskSubmissionPercentRule> rules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
+//                .eq(WmTaskSubmissionPercentRule::getDeptId, user.getDeptId())
+//                .eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
+//        if (CollUtil.isEmpty(rules)) {
+//            throw new RuntimeException("当前企业未开启该任务!");
+//        }
+//        String[] taskTypeIds = rules.get(0).getRule().getTaskTypeIds();
+//        if (!ArrayUtil.contains(taskTypeIds, "61")) {
+//            throw new RuntimeException("当前企业未开启该任务!");
+//        }
+
+        // 查询积分包
+        WmScorePackage scorePackage = wmScorePackageService.getById(params.getPackageId());
+        // 查询任务规则积分
+        WmTaskType wmTaskType = new WmTaskType();
+        wmTaskType.setRuleId(scorePackage.getRuleId());
+        WmTaskType queryTaskType = wmTaskTypeService.getById("63");
+        wmTaskType.setTaskTypeName(queryTaskType.getTaskTypeName());
+        int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+
+        if (score > scorePackage.getKfpjf()) {
+            throw new RuntimeException("可分配积分不足!");
+        }
+
+        // 保存taskContent
+        WmTaskContent taskContent = new WmTaskContent();
+        // 任务类型
+        taskContent.setTemp30("63");
+        // 积分包id
+        taskContent.setTemp32(params.getPackageId());
+        // 主题
+        taskContent.setTemp2(params.getMeetingtTitle());
+        // 时间
+        taskContent.setTemp3(params.getMeetingTime());
+        // 参加人次
+        taskContent.setTemp4(params.getMeetingNumber());
+        // 活动策划书
+        taskContent.setTemp5(String.join(",", params.getEventPlannerUrl()));
+        // 活动计划表
+        taskContent.setTemp6(String.join(",", params.getMeetingPlanUrl()));
+        // 会议签到表
+        taskContent.setTemp7(String.join(",", params.getMeetingCheckInUrl()));
+        // 现场照片
+        taskContent.setTemp8(String.join(",", params.getLivePhotosUrl()));
+        // 会议内容
+        taskContent.setTemp9(String.join(",", params.getMeetingContentUrl()));
+        // 外采费用
+        taskContent.setTemp10(params.getOutsourcingAmount());
+        // 外采费用凭证
+        taskContent.setTemp11(String.join(",", params.getOutsourcingAmountProof()));
+        // 总结
+        taskContent.setTemp12(params.getMeetingSummary());
+        log.info("保存taskContent参数:{}", taskContent);
+        wmTaskContentService.save(taskContent);
+
+        // 保存企业任务通用方法 TODO 初始化企业任务类型
+        this.saveEntTaskCommon(taskContent, score, scorePackage);
+
+        return Boolean.TRUE;
+    }
+
     /**
      * 保存企业任务通用方法
      *
@@ -250,14 +322,4 @@ public class WmDeptTaskServiceImpl implements WmDeptTaskService {
         wmScorePackageService.updateById(updatePackage);
     }
 
-    /**
-     * 企业任务保存-专家共识巡讲会
-     *
-     * @param params 参数
-     * @return {@link Boolean} 结果
-     */
-    @Override
-    public Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params) {
-        return null;
-    }
 }