浏览代码

Merge branch 'feat-20230920-b2b' into temp-pre

lixuesong 1 年之前
父节点
当前提交
faf363c04b

+ 1 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java

@@ -89,6 +89,7 @@ public final class UpmsType {
 		SPECIAL_SERVICE("SPECIAL_SERVICE", null, "专项服务"),
 		BUSINESS_COMPANY_CUSTOMER_MANAGEMENT("BUSINESS_COMPANY_CUSTOMER_MANAGEMENT", null, "商业公司客户管理"),
 		AGENT_CUSTOMER_MANAGEMENT("AGENT_CUSTOMER_MANAGEMENT", null, "代理商客户管理"),
+		ENT_TASK("ENT_TASK", null, "企业任务"),
 		TASK_TYPE_CONFIG("TASK_TYPE_CONFIG", null, "任务类型配置");
 
 

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

@@ -1,15 +1,25 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业任务控制器
@@ -23,6 +33,7 @@ import java.util.List;
 public class WmDeptTaskController {
 
     private final WmScorePackageMapper wmScorePackageMapper;
+    private final WmDeptTaskService wmDeptTaskService;
 
     /**
      * 查询关联的企业积分包
@@ -38,10 +49,57 @@ public class WmDeptTaskController {
         queryPackage.setTypeid("0,1,2");
         List<WmScorePackage> packageList = wmScorePackageMapper.getScorePackagekfpjf(queryPackage);
 
-        return R.ok(packageList);
+        List<Map<String, String>> results = new ArrayList<>();
+        if (CollUtil.isNotEmpty(packageList)) {
+            packageList.forEach(wmScorePackage -> {
+                Map<String, String> result = new HashMap<>();
+                result.put("id", wmScorePackage.getId());
+                result.put("scorePackageName", wmScorePackage.getScorePackageName());
+                results.add(result);
+            });
+        }
+
+        return R.ok(results);
+    }
+
+    /**
+     * 企业任务保存-企业通用
+     *
+     * @param params 参数
+     * @return {@link R}<{@link ?}> 结果
+     */
+    @SysLog("企业任务保存-企业通用")
+    @PostMapping("/dept-task/save-task-type61")
+    public R<?> saveEntTaskForTaskType61(@Validated @RequestBody DeptTaskDTO.TaskType61 params) {
+        log.info("企业任务保存-企业通用请求参数:{}", params);
+
+        return R.ok(wmDeptTaskService.saveEntTaskForTaskType61(params));
+    }
+
+    /**
+     * 企业任务保存-医学会各级年会及卫星会
+     *
+     * @param params 参数
+     * @return {@link R}<{@link ?}> 结果
+     */
+    @SysLog("企业任务保存-医学会各级年会及卫星会")
+    @PostMapping("/dept-task/save-task-type62")
+    public R<?> saveEntTaskForTaskType62(@Validated @RequestBody DeptTaskDTO.TaskType62 params) {
+        log.info("企业任务保存-医学会各级年会及卫星会请求参数:{}", params);
+        // TODO
+        return null;
     }
 
-    public R<?> saveEntTask() {
+    /**
+     * 企业任务保存-专家共识巡讲会
+     *
+     * @param params 参数
+     * @return {@link R}<{@link ?}> 结果
+     */
+    @SysLog("企业任务保存-专家共识巡讲会")
+    @PostMapping("/dept-task/save-task-type63")
+    public R<?> saveEntTaskForTaskType63(@Validated @RequestBody DeptTaskDTO.TaskType63 params) {
+        log.info("企业任务保存-专家共识巡讲会请求参数:{}", params);
         // TODO
         return null;
     }

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

@@ -1,20 +1,157 @@
 package com.qunzhixinxi.hnqz.admin.entity.dto;
 
-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.time.LocalDateTime;
 
+/**
+ * 企业任务请求参数DTO
+ *
+ * @author lixuesong
+ * @date 2023/09/21
+ */
 @Data
 public class DeptTaskDTO implements Serializable {
     private static final long serialVersionUID = 410601826934557948L;
 
-    @Getter
-    @AllArgsConstructor
-    public enum DeptTaskDTOEnum {
+    /**
+     * 任务类型61-企业通用
+     *
+     * @author lixuesong
+     * @date 2023/09/21
+     */
+    @Data
+    public static class TaskType61 implements Serializable {
+        private static final long serialVersionUID = -8969888154230924285L;
+
+        /**
+         * 积分包id
+         */
+        @NotBlank(message = "积分包id必填")
+        private String packageId;
+
+        /**
+         * 主题
+         */
+        @NotBlank(message = "主题必填")
+        private String meetingtTitle;
+
+        /**
+         * 时间
+         */
+        @NotBlank(message = "时间必填")
+        private String meetingTime;
+
+        /**
+         * 文件上传
+         */
+        @NotEmpty(message = "文件上传必填")
+        private String[] files;
+
+        /**
+         * 外采费用
+         */
+        private String outsourcingAmount;
 
+        /**
+         * 外采费用-凭证
+         */
+        private String[] outsourcingAmountProof;
+
+        /**
+         * 任务积分
+         */
+        @NotNull(message = "任务积分必填")
+        private Integer score;
+
+        /**
+         * 会议总结
+         */
+        private String meetingSummary;
+    }
+
+    /**
+     * 任务类型63-专家共识巡讲会
+     *
+     * @author lixuesong
+     * @date 2023/09/21
+     */
+    @Data
+    public static class TaskType63 implements Serializable {
+        private static final long serialVersionUID = -1918885625462400849L;
+
+        /**
+         * 积分包id
+         */
+        @NotBlank(message = "积分包id必填")
+        private String packageId;
+
+        /**
+         * 主题
+         */
+        @NotBlank(message = "主题必填")
+        private String meetingtTitle;
+
+        /**
+         * 时间
+         */
+        @NotBlank(message = "时间必填")
+        private String meetingTime;
+
+        /**
+         * 参加人次
+         */
+        @NotBlank(message = "参加人次必填")
+        private String meetingNumber;
+
+        /**
+         * 活动策划书
+         */
+        @NotEmpty(message = "活动策划书必填")
+        private String[] eventPlannerUrl;
+
+        /**
+         * 活动计划表
+         */
+        @NotEmpty(message = "活动计划表必填")
+        private String[] meetingPlanUrl;
+
+        /**
+         * 会议签到表
+         */
+        @NotEmpty(message = "会议签到表必填")
+        private String[] meetingCheckInUrl;
+
+        /**
+         * 现场照片
+         */
+        @NotEmpty(message = "现场照片必填")
+        private String[] livePhotosUrl;
+
+        /**
+         * 会议内容
+         */
+        @NotBlank(message = "会议内容必填")
+        private String meetingContent;
+
+        /**
+         * 外采费用
+         */
+        private String outsourcingAmount;
+
+        /**
+         * 外采费用-凭证
+         */
+        private String[] outsourcingAmountProof;
+
+        /**
+         * 会议总结
+         */
+        private String meetingSummary;
     }
 
     /**
@@ -26,50 +163,60 @@ public class DeptTaskDTO implements Serializable {
     @Data
     public static class TaskType62 implements Serializable {
         private static final long serialVersionUID = -2282200603021121878L;
+
         /**
          * 积分包id
          */
+        @NotBlank(message = "积分包id必填")
         private String packageId;
 
         /**
          * 会议主题
          */
+        @NotBlank(message = "会议主题必填")
         private String meetingtTitle;
 
         /**
          * 会议时间
          */
-        private LocalDateTime meetingTime;
+        @NotBlank(message = "会议时间必填")
+        private String meetingTime;
 
         /**
          * 会议人次
          */
+        @NotBlank(message = "会议人次必填")
         private String meetingNumber;
 
         /**
          * 会议邀请函
          */
+        @NotEmpty(message = "会议邀请函必填")
         private String[] meetingInvitationUrl;
 
         /**
          * 会议计划表
          */
+        @NotEmpty(message = "会议计划表必填")
         private String[] meetingPlanUrl;
 
         /**
          * 会议签到表
          */
+        @NotEmpty(message = "会议签到表必填")
         private String[] meetingCheckInUrl;
 
         /**
          * 现场照片
          */
+        @NotEmpty(message = "现场照片必填")
         private String[] livePhotosUrl;
 
         /**
          * 会议内容
          */
-        private String[] meetingContent;
+        @NotEmpty(message = "会议内容必填")
+        private String meetingContent;
 
         /**
          * 外采费用

+ 37 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskService.java

@@ -0,0 +1,37 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+
+/**
+ * 企业任务服务
+ *
+ * @author lixuesong
+ * @date 2023/09/21
+ */
+public interface WmDeptTaskService {
+
+    /**
+     * 企业任务保存-企业通用
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    Boolean saveEntTaskForTaskType61(DeptTaskDTO.TaskType61 params);
+
+    /**
+     * 企业任务保存-医学会各级年会及卫星会
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    Boolean saveEntTaskForTaskType62(DeptTaskDTO.TaskType62 params);
+
+    /**
+     * 企业任务保存-专家共识巡讲会
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params);
+}

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

@@ -0,0 +1,192 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.entity.dto.DeptTaskDTO;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
+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.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 企业任务服务
+ *
+ * @author lixuesong
+ * @date 2023/09/21
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class WmDeptTaskServiceImpl implements WmDeptTaskService {
+
+    private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
+    private final WmScorePackageService wmScorePackageService;
+    private final WmScorePackageStatusService wmScorePackageStatusService;
+    private final WmTaskContentService wmTaskContentService;
+    private final WmTaskService wmTaskService;
+    private final Sequence taskSequence;
+
+    /**
+     * 企业任务保存-企业通用
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean saveEntTaskForTaskType61(DeptTaskDTO.TaskType61 params) {
+
+        HnqzUser user = SecurityUtils.getUser();
+        LocalDateTime now = LocalDateTime.now();
+
+//        // 查询任务类型启用状态
+//        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());
+
+        if (params.getScore() > scorePackage.getKfpjf()) {
+            throw new RuntimeException("可分配积分不足!");
+        }
+
+        // 保存taskContent
+        WmTaskContent taskContent = new WmTaskContent();
+        // 任务类型
+        taskContent.setTemp30("61");
+        // 积分包id
+        taskContent.setTemp32(params.getPackageId());
+        // 主题
+        taskContent.setTemp2(params.getMeetingtTitle());
+        // 时间
+        taskContent.setTemp3(params.getMeetingTime());
+        // 文件上传
+        taskContent.setTemp4(String.join(",", params.getFiles()));
+        // 外采费用
+        taskContent.setTemp5(params.getOutsourcingAmount());
+        // 凭证
+        taskContent.setTemp6(String.join(",", params.getOutsourcingAmountProof()));
+        // 任务积分
+        taskContent.setTemp7(String.valueOf(params.getScore()));
+        // 总结
+        taskContent.setTemp8(params.getMeetingSummary());
+        log.info("保存taskContent参数:{}", taskContent);
+        wmTaskContentService.save(taskContent);
+
+        // 保存任务
+        WmTask task = new WmTask();
+        task.setTaskContentId(String.valueOf(taskContent.getId()));
+        task.setTaskFrom("1");
+        task.setTaskTypeId("61");
+        task.setTaskUserId(String.valueOf(user.getId()));
+        task.setScorePackageId(params.getPackageId());
+        task.setScore(params.getScore());
+        task.setLookintoDate(now);
+        task.setUpdateTime(now);
+        task.setDrugEntId(scorePackage.getDrugEntId());
+        task.setTaskRuleId(scorePackage.getTaskRuleId());
+        task.setDeptId(String.valueOf(user.getDeptId()));
+        task.setSubmitStatus("0");
+        task.setRealFlag("0");
+        task.setTaskStatus(TaskStatusEnum.APPROVED.val());
+        task.setTaskNumber(taskSequence.nextNo());
+        if (ArrayUtil.containsAny(user.getRoles(), 3)) {
+            task.setTaskUserType("3");
+        } else if (ArrayUtil.containsAny(user.getRoles(), 4)) {
+            task.setTaskUserType("4");
+        } else {
+            task.setTaskUserType(ArrayUtil.join(user.getRoles(), ","));
+        }
+        log.info("保存任务参数:{}", task);
+        wmTaskService.save(task);
+
+        // 创建一条领包记录
+        WmScorePackageStatus wmScorePackageStatus = new WmScorePackageStatus();
+        wmScorePackageStatus.setPackageId(params.getPackageId());
+        wmScorePackageStatus.setUserId(String.valueOf(user.getId()));
+        wmScorePackageStatus.setDelFlag("0");
+        wmScorePackageStatus.setEnableFlag("0");
+        List<WmScorePackageStatus> wmScorePackageStatusList = wmScorePackageStatusService.
+                list(Wrappers.query(wmScorePackageStatus).lambda().ne(WmScorePackageStatus::getStatus, 3));
+        if (CollUtil.isEmpty(wmScorePackageStatusList)) {
+            wmScorePackageStatus.setStatus("1");
+            wmScorePackageStatus.setTaskAddFlag("1");
+            if (PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(scorePackage.getPackageType1())
+                    || PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(scorePackage.getPackageType1())) {
+                wmScorePackageStatus.setUserScore(scorePackage.getScore() + "");
+            } else {
+                wmScorePackageStatus.setUserScore(scorePackage.getUserScore());
+            }
+            wmScorePackageStatus.setTaskNum(scorePackage.getTaskNum());
+            wmScorePackageStatus.setDeptId(String.valueOf(user.getDeptId()));
+            wmScorePackageStatus.setCreateTime(now);
+            wmScorePackageStatus.setUpdateTime(now);
+            log.info("创建领包记录参数:{}", wmScorePackageStatus);
+            wmScorePackageStatusService.save(wmScorePackageStatus);
+        }
+
+        // 扣减可分配积分值
+        WmScorePackage updatePackage = new WmScorePackage();
+        updatePackage.setId(params.getPackageId());
+        updatePackage.setKfpjf(scorePackage.getKfpjf() - params.getScore());
+        updatePackage.setUpdateUser(user.getId());
+        updatePackage.setUpdateTime(now);
+        log.info("扣减可分配积分值参数:{}", updatePackage);
+        wmScorePackageService.updateById(updatePackage);
+
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 企业任务保存-医学会各级年会及卫星会
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    @Override
+    public Boolean saveEntTaskForTaskType62(DeptTaskDTO.TaskType62 params) {
+        return null;
+    }
+
+    /**
+     * 企业任务保存-专家共识巡讲会
+     *
+     * @param params 参数
+     * @return {@link Boolean} 结果
+     */
+    @Override
+    public Boolean saveEntTaskForTaskType63(DeptTaskDTO.TaskType63 params) {
+        return null;
+    }
+}