Forráskód Böngészése

feat: update something

shc 1 éve
szülő
commit
ca14e275fe
17 módosított fájl, 621 hozzáadás és 185 törlés
  1. 0 0
      doc/db/22wm_drug_quiz_rel.sql
  2. 35 0
      doc/db/23sys_notice.sql
  3. 67 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/SysNoticeDto.java
  4. 33 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmReportDto.java
  5. 45 32
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmTaskDTO.java
  6. 60 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysNotice.java
  7. 6 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmTask.java
  8. 50 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysNoticeController.java
  9. 20 25
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java
  10. 35 58
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java
  11. 16 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysNoticeMapper.java
  12. 52 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysNoticeService.java
  13. 2 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmReportService.java
  14. 6 4
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskService.java
  15. 100 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysNoticeServiceImpl.java
  16. 78 61
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java
  17. 16 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java

+ 0 - 0
doc/db/21wm_drug_quiz_rel.sql → doc/db/22wm_drug_quiz_rel.sql


+ 35 - 0
doc/db/23sys_notice.sql

@@ -0,0 +1,35 @@
+USE `cnbg_20240511_001`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_notice`;
+CREATE TABLE `sys_notice`
+(
+    `notice_id`      BIGINT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '主键ID',
+    `notice_title`   VARCHAR(32)                    NOT NULL COMMENT '通知标题',
+    `notice_content` VARCHAR(512)                   NOT NULL COMMENT '通知信息',
+    `user_id`        BIGINT UNSIGNED                NOT NULL COMMENT '用户ID',
+    `read_flag`      TINYINT(1) DEFAULT FALSE       NOT NULL COMMENT '阅读标记',
+    `read_time`      DATETIME                       NULL COMMENT '阅读时间',
+    `create_by`      VARCHAR(32)                    NOT NULL COMMENT '创建人',
+    `create_time`    DATETIME                       NOT NULL COMMENT '创建时间',
+
+    PRIMARY KEY `pk_id` (`notice_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = DYNAMIC COMMENT ='系统通知';
+
+
+-- ----------------------------
+-- Records of sys_notice
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 67 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/SysNoticeDto.java

@@ -0,0 +1,67 @@
+package com.qunzhixinxi.hnqz.admin.api.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysNotice;
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * 通知dto
+ *
+ * @author jimmy
+ * @date 09/07/2024 17:50
+ */
+@NoArgsConstructor(access = AccessLevel.NONE)
+public final class SysNoticeDto {
+
+    @Data
+    public static class OnPage {
+
+
+        private Boolean read;
+
+
+        @NotNull(message = "页码必填")
+        @Min(value = 1, message = "页码最小为{value}")
+        private Integer current;
+
+        @NotNull(message = "分页数量必填")
+        @Min(value = 10, message = "分页数量最小为{value}")
+        @Max(value = 100, message = "分页数量最大为{value}")
+        private Integer size;
+
+
+    }
+
+    @Data
+    public static class OnRead {
+
+        @NotNull(message = "通知ID必填")
+        private Integer noticeId;
+
+        @NotNull(message = "阅读标记必填")
+        private Boolean read;
+
+    }
+
+    @Data
+    public static class OnCreate {
+
+        private String title;
+
+        private String content;
+
+        /**
+         * 目标人
+         */
+        private Integer userId;
+
+
+    }
+}

+ 33 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmReportDto.java

@@ -0,0 +1,33 @@
+package com.qunzhixinxi.hnqz.admin.api.dto;
+
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.Map;
+
+/**
+ * @author jimmy
+ * @date 09/07/2024 18:05
+ */
+@NoArgsConstructor(access = AccessLevel.NONE)
+public final class WmReportDto {
+
+    @Data
+    public static class OnBatchCheck{
+
+        @NotBlank(message = "报告ID必填")
+        private String reportId;
+
+        @NotEmpty(message = "任务审核节点映射必填")
+        private Map<String, Integer> taskIdToNodeIdMap;
+
+        @NotBlank(message = "审核信息必填")
+        private String approvalOpinion;
+
+        private String approvalInfo;
+
+    }
+}

+ 45 - 32
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmTaskDTO.java

@@ -6,6 +6,8 @@ import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -18,47 +20,58 @@ import java.util.Map;
 @NoArgsConstructor(access = AccessLevel.NONE)
 public final class WmTaskDTO {
 
-	@Data
-	public static class OnOutPartyCreate {
+    @Data
+    public static class OnOutPartyCreate {
 
-		@NotBlank(message = "任务类型ID必填")
-		private String taskTypeId;
+        @NotBlank(message = "任务类型ID必填")
+        private String taskTypeId;
 
-		private String pkgName;
+        private String pkgName;
 
-		private String pkgId;
+        private String pkgId;
 
-		@NotBlank(message = "代表用户名必填")
-		private String username;
+        @NotBlank(message = "代表用户名必填")
+        private String username;
 
-		@NotEmpty(message = "三方结构必填")
-		private Map<String, Object> struct;
+        @NotEmpty(message = "三方结构必填")
+        private Map<String, Object> struct;
 
-		@NotEmpty(message = "三方结果必填")
-		private Map<String, Object> result;
+        @NotEmpty(message = "三方结果必填")
+        private Map<String, Object> result;
 
-	}
+    }
 
-	/**
-	 * 更新任务备注参数
-	 *
-	 * @author lixuesong
-	 * @date 2024/01/31
-	 */
-	@Data
-	public static class TaskRemarkUpdate {
+    /**
+     * 更新任务备注参数
+     *
+     * @author lixuesong
+     * @date 2024/01/31
+     */
+    @Data
+    public static class TaskRemarkUpdate {
 
-		/**
-		 * 任务类型主键id
-		 */
-		@NotBlank(message = "id必填")
-		private String id;
+        /**
+         * 任务类型主键id
+         */
+        @NotBlank(message = "id必填")
+        private String id;
 
-		/**
-		 * 任务备注
-		 */
-		@NotBlank(message = "任务备注必填")
-		private String taskRemark;
-	}
+        /**
+         * 任务备注
+         */
+        @NotBlank(message = "任务备注必填")
+        private String taskRemark;
+    }
+
+    @Data
+    public static class OnBatchCheck {
+
+        @NotEmpty(message = "任务ID和节点关系必填")
+        private Map<String, Integer> taskIdToNodeIdMap;
+
+        @NotBlank(message = "审核状态必填")
+        private String taskStatus;
+
+    }
 
 }

+ 60 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysNotice.java

@@ -0,0 +1,60 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 系统通知实体
+ *
+ * @author jimmy
+ * @date 09/07/2024 15:42
+ */
+@Data
+@TableName(value = "sys_notice")
+public final class SysNotice implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Integer noticeId;
+
+    @TableField(value = "notice_title")
+    private String title;
+
+    @TableField(value = "notice_content")
+    private String content;
+
+    /**
+     * 目标人
+     */
+    private Integer userId;
+
+    /**
+     * 阅读标记
+     */
+    private Boolean readFlag;
+
+    /**
+     * 阅读时间
+     */
+    private LocalDateTime readTime;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+
+}

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

@@ -333,6 +333,12 @@ public class WmTask implements Serializable {
     @TableField(exist = false)
     private Integer nodeId;
 
+    /**
+     * 批量审核节点集合
+     */
+    @TableField(exist = false)
+    private String nodeIds;
+
 
     @Getter
     @AllArgsConstructor

+ 50 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysNoticeController.java

@@ -0,0 +1,50 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.api.dto.SysNoticeDto;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysNotice;
+import com.qunzhixinxi.hnqz.admin.service.SysNoticeService;
+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 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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 系统通知前端控制器
+ *
+ * @author jimmy
+ * @date 09/07/2024 15:51
+ */
+@RestController
+@AllArgsConstructor
+public class SysNoticeController {
+
+    private final SysNoticeService noticeService;
+
+
+    @GetMapping(value = "/notice/page")
+    public R<Page<SysNotice>> pageNotices(@Validated SysNoticeDto.OnPage query) {
+
+        return R.ok(noticeService.pageNotices(query, SecurityUtils.getUser()));
+    }
+
+    @SysLog(value = "阅读通知")
+    @PostMapping(value = "/notice/read")
+    public R<Boolean> readNotice(@Validated @RequestBody SysNoticeDto.OnRead resource) {
+
+        return R.ok(noticeService.readNotice(resource, SecurityUtils.getUser()));
+
+    }
+
+
+    @GetMapping(value = "/notice/count")
+    public R<Integer> countNotice(@RequestParam(value = "read") Boolean read) {
+        return R.ok(noticeService.countNotices(read, SecurityUtils.getUser()));
+    }
+}

+ 20 - 25
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java

@@ -1,5 +1,3 @@
-
-
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollUtil;
@@ -11,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmReportDto;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.api.dto.ReportTaskListPageDTO;
@@ -129,10 +128,10 @@ public class WmReportController {
         wmReport.setDelFlag("1");
         wmReportService.updateById(wmReport);
         WmScorePackage scorePackage = wmScorePackageService.getById(wmReport.getScoreId());
-        //typeid  0 药企  1一级代理商 2二级代理商 3全职学术推广员 4兼职学术推广员
+        // typeid  0 药企  1一级代理商 2二级代理商 3全职学术推广员 4兼职学术推广员
         LambdaUpdateWrapper<WmTask> updateWrapper = new LambdaUpdateWrapper<>();
 
-        if ("0".equals(scorePackage.getTypeid())) {//药企
+        if ("0".equals(scorePackage.getTypeid())) {// 药企
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportDrugId, null);
                 updateWrapper.set(WmTask::getReportDrugApprovalOpinion, null);
@@ -140,18 +139,18 @@ public class WmReportController {
             }
             updateWrapper.set(WmTask::getReportDrugApprovalStatus, "0");
             updateWrapper.eq(WmTask::getReportDrugId, wmReport.getId());
-        } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportOneId, null);
                 updateWrapper.set(WmTask::getReportOneApprovalOpinion, null);
                 updateWrapper.set(WmTask::getReportOneApprovalInfo, null);
             }
-            if (SecurityUtils.getRoles().contains(3)) {//药企
+            if (SecurityUtils.getRoles().contains(3)) {// 药企
                 updateWrapper.set(WmTask::getReportDrugApprovalStatus, "0");
             }
             updateWrapper.set(WmTask::getReportOneApprovalStatus, "0");
             updateWrapper.eq(WmTask::getReportOneId, wmReport.getId());
-        } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportSecondId, null);
                 updateWrapper.set(WmTask::getReportSecondApprovalOpinion, null);
@@ -179,10 +178,10 @@ public class WmReportController {
     public R reportPage(Page page, WmReport wmReport, String type, String queryScoreId, String queryName) {
         HnqzUser user = SecurityUtils.getUser();
         wmReport.setDelFlag("0");
-        if ("1".equals(type)) {//1结算报告管理,当前用户是申请结算企业
+        if ("1".equals(type)) {// 1结算报告管理,当前用户是申请结算企业
             wmReport.setDrugEntId(null);
             wmReport.setApplyDrugEntId(user.getDeptId());
-        } else {//2结算报告审批,当前用户是结算企业
+        } else {// 2结算报告审批,当前用户是结算企业
             wmReport.setApplyDrugEntId(null);
             wmReport.setDrugEntId(user.getDeptId());
         }
@@ -271,23 +270,19 @@ public class WmReportController {
      */
     @SysLog("快速批量任务审核")
     @PostMapping("/batch-approval-task")
-    public R<?> batchApprovalTask(@RequestBody Map<String, String> requestMap) {
-        log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}",
-                requestMap, SecurityUtils.getUser().getId(), LocalDateTime.now());
-        String reportId = requestMap.get("reportId");
-        String taskIds = requestMap.get("taskIds");
-        String approvalOpinion = requestMap.get("approvalOpinion");
-        String approvalInfo = requestMap.get("approvalInfo");
+    public R<?> batchApprovalTask(@Validated @RequestBody WmReportDto.OnBatchCheck resource) {
+        log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}", resource, SecurityUtils.getUser().getId(), LocalDateTime.now());
+        String reportId = resource.getReportId();
+        Map<String, Integer> taskIdAndNodeIdMap = resource.getTaskIdToNodeIdMap();
+        Set<String> taskIds = taskIdAndNodeIdMap.keySet();
+        String approvalOpinion = resource.getApprovalOpinion();
+        String approvalInfo = resource.getApprovalInfo();
 
-        if (!StrUtil.isAllNotBlank(reportId, taskIds, approvalOpinion)) {
-            return R.failed("必填参数为空");
-        }
         if (!CollUtil.toList("1", "2").contains(approvalOpinion)) {
             return R.failed("approvalOpinion不正确");
         }
 
-        List<String> sortedIdList = StrUtil.split(taskIds, StrUtil.COMMA)
-                .stream()
+        List<String> sortedIdList = taskIds.stream()
                 .sorted(Comparator.comparingInt(Integer::parseInt))
                 .collect(Collectors.toList());
 
@@ -299,7 +294,7 @@ public class WmReportController {
             }
         });
 
-        Boolean approvalTask = wmReportService.batchApprovalTask(reportId, sortedIdList, approvalOpinion, approvalInfo);
+        Boolean approvalTask = wmReportService.batchApprovalTask(reportId, taskIdAndNodeIdMap, approvalOpinion, approvalInfo);
 
         Set<String> cahceKeys = sortedIdList.stream()
                 .map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
@@ -450,11 +445,11 @@ public class WmReportController {
                 .or().eq(WmTask::getReportSecondId, reportId));
         // 如果是审批页面,则过滤掉通过和不通过的数据(reportDrugApprovalOpinion或reportOneApprovalOpinion:1通过,2不通过)
         if (isApprovalPage != null && isApprovalPage.equals(1)) {
-            if ("0".equals(scorePackage.getTypeid())) {//药企
+            if ("0".equals(scorePackage.getTypeid())) {// 药企
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-            } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+            } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-            } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+            } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportOneApprovalOpinion));
             }
         }

+ 35 - 58
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -1,6 +1,8 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
@@ -19,6 +21,7 @@ import com.pig4cloud.plugin.excel.annotation.RequestExcel;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.MqConstants;
 import com.qunzhixinxi.hnqz.admin.api.dto.SysCheckChainNodeCheckHistoryDTO;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysFile;
@@ -89,6 +92,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.util.ResourceUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -129,6 +133,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -256,14 +261,14 @@ public class WmTaskController {
             task.setScorePackageName(packageMap.get(task.getScorePackageId()));
         });
 
-        //每页数据条数
+        // 每页数据条数
         Page<WmTask> page1 = new Page<>();
         int current = new Long(page.getCurrent()).intValue();
         int size = new Long(page.getSize()).intValue();
 
         int count = list.size();
         List<WmTask> pageList = new ArrayList<>();
-        //计算当前页第一条数据的下标
+        // 计算当前页第一条数据的下标
         int currId = current > 1 ? (current - 1) * size : 0;
         for (int i = 0; i < size && i < count - currId; i++) {
             pageList.add(list.get(currId + i));
@@ -271,7 +276,7 @@ public class WmTaskController {
         page1.setSize(size);
         page1.setCurrent(current);
         page1.setTotal(count);
-        //计算分页总页数
+        // 计算分页总页数
         page1.setPages(count % 10 == 0 ? count / 10 : count / 10 + 1);
         page1.setRecords(pageList);
         return R.ok(page1);
@@ -689,7 +694,7 @@ public class WmTaskController {
 
             for (WmTask wmTask : wmTasks) {
                 wmTask.setTaskStatus(auditEntity.getAudit());
-                //wmTask.setPlatAuditStatus("1");
+                // wmTask.setPlatAuditStatus("1");
 //				if("15".equals(wmTask.getTaskTypeId()))
 //				{
 //					wmDaHospitalService.saveOrUpdateHospitalByTask(wmTask);
@@ -796,7 +801,7 @@ public class WmTaskController {
             if (wmScorePackage.getScore() > 0) {
                 Integer taskScore = 0;
 
-                //判断当前积分包已有任务积分
+                // 判断当前积分包已有任务积分
                 WmTask wmTask1 = new WmTask();
                 wmTask1.setDelFlag("0");
                 wmTask1.setEnableFlag("0");
@@ -877,7 +882,7 @@ public class WmTaskController {
             }
         }
 
-        //String basePath="/Users/gaoyang/Desktop/xlst";
+        // String basePath="/Users/gaoyang/Desktop/xlst";
         String basePath = "";
         String templateFileName = "/drugEnt.xlsx";
 
@@ -952,13 +957,13 @@ public class WmTaskController {
 
 
         InputStream bis = new BufferedInputStream(new FileInputStream(f));
-        //假如以中文名下载的话,设置下载文件名称
+        // 假如以中文名下载的话,设置下载文件名称
         String filename = "导入模板.xls";
-        //转码,免得文件名中文乱码
+        // 转码,免得文件名中文乱码
         filename = URLEncoder.encode(filename, "UTF-8");
-        //设置文件下载头
+        // 设置文件下载头
         response.addHeader("Content-Disposition", "attachment;filename=" + filename);
-        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
+        // 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
         response.setContentType("application/vnd.ms-excel");
         BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
         int len = 0;
@@ -1198,12 +1203,12 @@ public class WmTaskController {
         // 结算列表加个结算状态
         if (TaskStatusEnum.APPROVED.equals(taskStatus)) {
             if (CollUtil.isNotEmpty(taskIPage.getRecords())) {
-                //List<WmScorePackageSettleNote> settleNoteList = wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+                // List<WmScorePackageSettleNote> settleNoteList = wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
                 //		.eq(WmScorePackageSettleNote::getPackageId, packageId));
-                //Map<String, WmScorePackageSettleNote> settleNoteMap = settleNoteList.stream()
+                // Map<String, WmScorePackageSettleNote> settleNoteMap = settleNoteList.stream()
                 //		.filter(note -> StrUtil.isNotBlank(note.getTaskId()))
                 //		.collect(Collectors.toMap(WmScorePackageSettleNote::getTaskId, Function.identity()));
-                //taskIPage.getRecords().forEach(wmTask -> {
+                // taskIPage.getRecords().forEach(wmTask -> {
                 //	WmScorePackageSettleNote settleNote = settleNoteMap.get(wmTask.getId());
                 //	if (settleNote != null) {
                 //		wmTask.setSettleStatus(settleNote.getSettleNoteStatus());
@@ -1323,7 +1328,15 @@ public class WmTaskController {
             List<SysUser> userList = sysUserService.listByIds(taskList.stream().map(WmTask::getTaskUserId).collect(Collectors.toSet()));
             Map<Integer, String> userMap = userList.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getRealname));
 
+            // 任务审核状态
+            Set<Integer> taskIds = taskList.stream().mapToInt(task -> Integer.parseInt(task.getId())).boxed().collect(Collectors.toSet());
+
+            Map<Integer, Map<String, Object>> targetLatestCheckState = checkChainManager.getTargetLatestCheckState(taskIds);
+
             taskList.forEach(wmTask -> {
+
+                wmTask.setCheckState(targetLatestCheckState.get(Integer.parseInt(wmTask.getId())));
+
                 Map<String, Object> map = new HashMap<>();
                 wmTask.setTaskTypeName(taskTypeNameMap.get(wmTask.getTaskTypeId()));
                 map.put("taskType", wmTask.getTaskTypeId());
@@ -1492,23 +1505,15 @@ public class WmTaskController {
     /**
      * 快速批量任务审核
      *
-     * @param wmTask 任务审核信息
+     * @param resource 任务审核信息
      * @return 审核结果
      */
     @SysLog("快速批量任务审核")
     @PostMapping("/batch-approval-task")
-    public R<?> batchApprovalTask(@RequestBody WmTask wmTask) {
-        log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}",
-                wmTask, SecurityUtils.getUser().getId(), LocalDateTime.now());
-        if (!StrUtil.isAllNotBlank(wmTask.getId(), wmTask.getTaskStatus())) {
-            return R.failed("必填参数为空");
-        }
-        List<String> sortedIdList = StrUtil.split(wmTask.getId(), StrUtil.COMMA)
-                .stream()
-                .sorted(Comparator.comparingInt(Integer::parseInt))
-                .collect(Collectors.toList());
+    public R<?> batchApprovalTask(@Validated @RequestBody WmTaskDTO.OnBatchCheck resource) {
+        log.info("快速批量任务审核 请求参数:{}, 操作人:{},操作时间:{}", resource, SecurityUtils.getUser().getId(), LocalDateTime.now());
 
-        sortedIdList.forEach(taskId -> {
+        resource.getTaskIdToNodeIdMap().keySet().forEach(taskId -> {
             String cacheKey = CacheConstants.TASK_APPROVAL_KEY + taskId;
             Boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, String.format("task_batch_%s", taskId), 3, TimeUnit.SECONDS);
             if (Boolean.FALSE.equals(absent)) {
@@ -1516,10 +1521,10 @@ public class WmTaskController {
             }
         });
 
-        Boolean approvalTask = wmTaskService.batchApprovalTask(sortedIdList, wmTask.getTaskStatus(), wmTask.getTaskStatusInfo());
 
-        Set<String> cahceKeys = sortedIdList.stream()
-                .map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
+        Boolean approvalTask = wmTaskService.batchApprovalTask(resource.getTaskIdToNodeIdMap(), resource.getTaskStatus(), "");
+
+        Set<String> cahceKeys = resource.getTaskIdToNodeIdMap().keySet().stream().map(taskId -> CacheConstants.TASK_APPROVAL_KEY + taskId).collect(Collectors.toSet());
         redisTemplate.delete(cahceKeys);
 
         return R.ok(approvalTask);
@@ -1634,8 +1639,8 @@ public class WmTaskController {
     @PostMapping(value = "/task/check/node/history/create")
     public R<Boolean> doCheck(@RequestBody WmTask wmTask) {
 
-        //要循环判断,每一个接单用户,所有用户完成,审核通过,才算是积分包完成
-        //有没有什么问题,例如,个人包收回,影响积分包的积分值
+        // 要循环判断,每一个接单用户,所有用户完成,审核通过,才算是积分包完成
+        // 有没有什么问题,例如,个人包收回,影响积分包的积分值
         String[] ids = wmTask.getId().split(",");
         if (ids.length <= 0) {
             return R.failed("缺少参数!");
@@ -1716,34 +1721,6 @@ public class WmTaskController {
         return R.ok(wmTaskService.selectSettleTask(page, wmTask));
     }
 
-    // /**
-    //  * 任务中心--导出汇总或详情
-    //  *
-    //  * @param wmScorePackage
-    //  * @return
-    //  * @throws IOException
-    //  */
-    // @GetMapping("/exportNba")
-    // public R exportNba(WmScorePackage wmScorePackage) throws IOException {
-    // 	wmScorePackage = wmScorePackageService.getById(wmScorePackage.getId());
-    // 	List<WmTask> taskList = wmTaskMapper.selectListByWmTask(wmScorePackage);
-    // 	//更新任务表审批意见
-    // 	WmTask wmTask = new WmTask();
-    // 	wmTask.setDelFlag("0");
-    // 	wmTask.setEnableFlag("0");
-    //
-    // 	if (null == taskList || taskList.size() <= 0) {
-    // 		return R.failed("未查询到该报告关联的审批通过的任务");
-    // 	}
-    // 	String ids = taskList.stream().map(WmTask::getId).collect(Collectors.joining(","));
-    // 	wmTask.setScorePackageId(wmScorePackage.getId());
-    // 	wmTask.setId(ids);
-    //
-    // 	return reportExportService.exportNba(wmTask, wmScorePackage);//报告汇总
-    //
-    //dddd
-    // }
-
     /**
      * 任务中心--导出汇总或详情
      *

+ 16 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysNoticeMapper.java

@@ -0,0 +1,16 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysNotice;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 系统通知mapper
+ *
+ * @author jimmy
+ * @date 09/07/2024 15:47
+ */
+@Mapper
+public interface SysNoticeMapper extends BaseMapper<SysNotice> {
+}
+

+ 52 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysNoticeService.java

@@ -0,0 +1,52 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.dto.SysNoticeDto;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysNotice;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import org.springframework.lang.Nullable;
+
+/**
+ * 系统通知服务
+ *
+ * @author jimmy
+ * @date 09/07/2024 15:48
+ */
+public interface SysNoticeService extends IService<SysNotice> {
+
+    /**
+     * 分页查询通知
+     *
+     * @param query 查询条件
+     * @param user  操作人
+     * @return 分页结果
+     */
+    Page<SysNotice> pageNotices(SysNoticeDto.OnPage query, HnqzUser user);
+
+    /**
+     * 阅读通知
+     *
+     * @param resource 通知信息
+     * @param user     阅读人
+     * @return 阅读结果
+     */
+    Boolean readNotice(SysNoticeDto.OnRead resource, HnqzUser user);
+
+    /**
+     * 创建通知
+     *
+     * @param resource 通知信息
+     * @param user     操作人
+     * @return 创建结果
+     */
+    Boolean createNotice(SysNoticeDto.OnCreate resource, HnqzUser user);
+
+    /**
+     * 统计通知
+     *
+     * @param read 阅读状态
+     * @return 统计结果
+     */
+    int countNotices(@Nullable Boolean read, HnqzUser user);
+}

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

@@ -38,12 +38,12 @@ public interface WmReportService extends IService<WmReport> {
      * 结算报告审批-快速批量任务审核
      *
      * @param reportId        报告id
-     * @param taskIdList      任务id列表
+     * @param taskIdAndNodeIdMap      任务id列表
      * @param approvalOpinion 审核状态(1-通过,2-不通过)
      * @param approvalInfo    审批说明
      * @return 审核结果
      */
-    Boolean batchApprovalTask(String reportId, List<String> taskIdList, String approvalOpinion, String approvalInfo);
+    Boolean batchApprovalTask(String reportId,  Map<String, Integer> taskIdAndNodeIdMap, String approvalOpinion, String approvalInfo);
 
     R approvalReport(WmReport wmReport, List<String> taskIds, String approvalOpinion, String approvalInfo, Integer nodeId);
 

+ 6 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
@@ -196,12 +197,12 @@ public interface WmTaskService extends IService<WmTask> {
     /**
      * 快速批量任务审核
      *
-     * @param idList         任务id列表
-     * @param taskStatus     审核状态(3-通过,4-不通过)
-     * @param taskStatusInfo 审批说明
+     * @param taskIdToNodeIdMap 任务id列表
+     * @param taskStatus        审核状态(3-通过,4-不通过)
+     * @param taskStatusInfo    审批说明
      * @return 审核结果
      */
-    Boolean batchApprovalTask(List<String> idList, String taskStatus, String taskStatusInfo);
+    Boolean batchApprovalTask(Map<String, Integer> taskIdToNodeIdMap, String taskStatus, String taskStatusInfo);
 
     /**
      * 更新调查信息数据
@@ -220,4 +221,5 @@ public interface WmTaskService extends IService<WmTask> {
      * @param taskStatusInfo 审批说明
      */
     void task15_30_16_18ForManualOperation(WmTask task, String taskStatus, String taskStatusInfo);
+
 }

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

@@ -0,0 +1,100 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.dto.SysNoticeDto;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysNotice;
+import com.qunzhixinxi.hnqz.admin.mapper.SysNoticeMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysNoticeService;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ * 系统通知服务
+ *
+ * @author jimmy
+ * @date 09/07/2024 15:49
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements SysNoticeService {
+    /**
+     * 分页查询通知
+     *
+     * @param query 查询条件
+     * @param user  操作人
+     * @return 分页结果
+     */
+    @Override
+    public Page<SysNotice> pageNotices(SysNoticeDto.OnPage query, HnqzUser user) {
+        return this.page(new Page<>(query.getCurrent(), query.getSize()),
+                Wrappers.<SysNotice>lambdaQuery()
+                        .eq(SysNotice::getUserId, user.getId())
+                        .eq(Objects.nonNull(query.getRead()), SysNotice::getReadFlag, query.getRead())
+                        .orderByDesc(SysNotice::getCreateTime)
+        );
+    }
+
+    /**
+     * 阅读通知
+     *
+     * @param resource 通知信息
+     * @param user     阅读人
+     * @return 阅读结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean readNotice(SysNoticeDto.OnRead resource, HnqzUser user) {
+
+        SysNotice sysNotice = new SysNotice();
+        sysNotice.setReadFlag(resource.getRead());
+        sysNotice.setNoticeId(resource.getNoticeId());
+        sysNotice.setReadTime(LocalDateTime.now());
+
+        return this.updateById(sysNotice);
+    }
+
+    /**
+     * 创建通知
+     *
+     * @param resource 通知信息
+     * @param user     操作人
+     * @return 创建结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean createNotice(SysNoticeDto.OnCreate resource, HnqzUser user) {
+        SysNotice notice = new SysNotice();
+        notice.setTitle(resource.getTitle());
+        notice.setContent(resource.getContent());
+        notice.setUserId(resource.getUserId());
+        notice.setReadFlag(Boolean.FALSE);
+        notice.setCreateBy(user.getUsername());
+        notice.setCreateTime(LocalDateTime.now());
+
+        return this.save(notice);
+    }
+
+    /**
+     * 统计通知
+     *
+     * @param read 阅读状态
+     * @param user
+     * @return 统计结果
+     */
+    @Override
+    public int countNotices(@Nullable Boolean read, HnqzUser user) {
+        return this.count(Wrappers.<SysNotice>lambdaQuery()
+                .eq(Objects.nonNull(read), SysNotice::getReadFlag, read)
+                .eq(SysNotice::getUserId, user.getId()));
+    }
+}

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

@@ -137,11 +137,11 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
             return page;
         }
 
-        //Set<Integer> scoreIds = records.stream().map(WmReport::getScoreId).collect(Collectors.toSet());
-        //Set<Integer> scoreIds = records.stream().map(WmReport::getScoreId).collect(Collectors.toSet());
-        //List<WmScorePackage> scorePackageList = wmScorePackageService.listByIds(scoreIds);
+        // Set<Integer> scoreIds = records.stream().map(WmReport::getScoreId).collect(Collectors.toSet());
+        // Set<Integer> scoreIds = records.stream().map(WmReport::getScoreId).collect(Collectors.toSet());
+        // List<WmScorePackage> scorePackageList = wmScorePackageService.listByIds(scoreIds);
         //// 积分包对应的审核管理费
-        //Map<String, BigDecimal> packageAuditManagFeeRatesMap = scorePackageList.stream()
+        // Map<String, BigDecimal> packageAuditManagFeeRatesMap = scorePackageList.stream()
         //        .collect(Collectors.toMap(WmScorePackage::getId, WmScorePackage::getAuditManagementFeeRates));
 
         for (WmReport report : records) {
@@ -249,7 +249,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
     @Transactional(rollbackFor = Exception.class)
     public R updateReportStatus(WmReport wmReport) {
         HnqzUser user = SecurityUtils.getUser();
-        //提交修改状态,更新时间
+        // 提交修改状态,更新时间
         LambdaUpdateWrapper<WmReport> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(WmReport::getUpdatePeople, user.getId());
         updateWrapper.set(WmReport::getUpdateTime, LocalDateTime.now());
@@ -260,7 +260,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
             return R.failed("更新报告状态失败");
 
         }
-        //报告状态更新之后,要同时更新任务的报告审核状态
+        // 报告状态更新之后,要同时更新任务的报告审核状态
         updateTaskStatusByReport(wmReport);
 
         return R.ok("成功");
@@ -275,10 +275,10 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
     @Transactional(rollbackFor = Exception.class)
     public void updateTaskStatusByReport(WmReport wmReport) {
         WmScorePackage scorePackage = wmScorePackageService.getById(wmReport.getScoreId());
-        //typeid  0 药企  1一级代理商 2二级代理商 3全职学术推广员 4兼职学术推广员
+        // typeid  0 药企  1一级代理商 2二级代理商 3全职学术推广员 4兼职学术推广员
         LambdaUpdateWrapper<WmTask> updateWrapper = new LambdaUpdateWrapper<>();
 
-        if ("0".equals(scorePackage.getTypeid())) {//药企
+        if ("0".equals(scorePackage.getTypeid())) {// 药企
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportDrugId, null);
                 updateWrapper.set(WmTask::getReportDrugApprovalOpinion, null);
@@ -286,18 +286,18 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
             }
             updateWrapper.set(WmTask::getReportDrugApprovalStatus, wmReport.getReportStatus());
             updateWrapper.eq(WmTask::getReportDrugId, wmReport.getId());
-        } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportOneId, null);
                 updateWrapper.set(WmTask::getReportOneApprovalOpinion, null);
                 updateWrapper.set(WmTask::getReportOneApprovalInfo, null);
             }
-            if (SecurityUtils.getRoles().contains(3)) {//药企
+            if (SecurityUtils.getRoles().contains(3)) {// 药企
                 updateWrapper.set(WmTask::getReportDrugApprovalStatus, wmReport.getReportStatus());
             }
             updateWrapper.set(WmTask::getReportOneApprovalStatus, wmReport.getReportStatus());
             updateWrapper.eq(WmTask::getReportOneId, wmReport.getId());
-        } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
             if ("1".equals(wmReport.getDelFlag())) {
                 updateWrapper.set(WmTask::getReportSecondId, null);
                 updateWrapper.set(WmTask::getReportSecondApprovalOpinion, null);
@@ -377,7 +377,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                 updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
             }
         } else if (roles.contains(4)) {
-            //一级代理商类型
+            // 一级代理商类型
             updateTaskWrapper.set(WmTask::getReportOneApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
             updateTaskWrapper.set(WmTask::getReportOneApprovalOpinion, approvalOpinion);
             updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
@@ -403,13 +403,13 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         }
 
         WmTask taskSelect = new WmTask();
-        if ("0".equals(reportScorePackage.getTypeid())) {//药企
+        if ("0".equals(reportScorePackage.getTypeid())) {// 药企
             taskSelect.setReportDrugId(Integer.valueOf(reportId));
             taskSelect.setReportDrugApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("1".equals(reportScorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(reportScorePackage.getTypeid())) {// 一级代理商类型
             taskSelect.setReportOneId(Integer.valueOf(reportId));
             taskSelect.setReportOneApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("2".equals(reportScorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(reportScorePackage.getTypeid())) {// 二级代理商类型
             taskSelect.setReportSecondId(Integer.valueOf(reportId));
             taskSelect.setReportSecondApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
         }
@@ -526,15 +526,15 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
     /**
      * 结算报告审批-快速批量任务审核
      *
-     * @param reportId        报告id
-     * @param taskIdList      任务id列表
-     * @param approvalOpinion 审核状态(1-通过,2-不通过)
-     * @param approvalInfo    审批说明
+     * @param reportId           报告id
+     * @param taskIdAndNodeIdMap 任务id列表
+     * @param approvalOpinion    审核状态(1-通过,2-不通过)
+     * @param approvalInfo       审批说明
      * @return 审核结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean batchApprovalTask(String reportId, List<String> taskIdList, String approvalOpinion, String approvalInfo) {
+    public Boolean batchApprovalTask(String reportId, Map<String, Integer> taskIdAndNodeIdMap, String approvalOpinion, String approvalInfo) {
         LocalDateTime now = LocalDateTime.now();
         Integer operatorId = SecurityUtils.getUser().getId();
 
@@ -547,7 +547,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         }
 
         // 批量查询任务
-        List<WmTask> wmTasks = wmTaskService.listByIds(taskIdList);
+        List<WmTask> wmTasks = wmTaskService.listByIds(taskIdAndNodeIdMap.keySet());
         Map<String, WmTask> taskMap = wmTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
 
         Set<String> scorePackageIds = wmTasks.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
@@ -562,7 +562,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         Integer reportScorePackageId = queryReport.getScoreId();
         WmScorePackage reportScorePackage = wmScorePackageService.getById(reportScorePackageId);
 
-        taskIdList.forEach(id -> {
+        taskIdAndNodeIdMap.keySet().forEach(id -> {
             // 查询这条任务
             WmTask queryTask = taskMap.get(id);
             if (queryTask == null) {
@@ -591,7 +591,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                     updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
                 }
             } else if (roles.contains(4)) {
-                //一级代理商类型
+                // 一级代理商类型
                 updateTaskWrapper.set(WmTask::getReportOneApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
                 updateTaskWrapper.set(WmTask::getReportOneApprovalOpinion, approvalOpinion);
                 updateTaskWrapper.set(WmTask::getReportOneApprovalInfo, approvalInfo);
@@ -619,16 +619,25 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                 throw new RuntimeException("操作失败,请重试");
             }
 
+
+            SysCheckChainNodeCheckHistoryDTO.OnCreate res = new SysCheckChainNodeCheckHistoryDTO.OnCreate();
+            res.setNodeId(taskIdAndNodeIdMap.get(id));
+            res.setTargetId(Integer.valueOf(id));
+            res.setCheckResult("1".equals(approvalOpinion));
+            res.setCheckMessage("1".equals(approvalOpinion) ? "批量通过" : "批量拒绝");
+
+            checkChainManager.doCheck(Collections.singletonList(res), SecurityUtils.getUser());
+
         });
 
         WmTask taskSelect = new WmTask();
-        if ("0".equals(reportScorePackage.getTypeid())) {//药企
+        if ("0".equals(reportScorePackage.getTypeid())) {// 药企
             taskSelect.setReportDrugId(Integer.valueOf(reportId));
             taskSelect.setReportDrugApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("1".equals(reportScorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(reportScorePackage.getTypeid())) {// 一级代理商类型
             taskSelect.setReportOneId(Integer.valueOf(reportId));
             taskSelect.setReportOneApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("2".equals(reportScorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(reportScorePackage.getTypeid())) {// 二级代理商类型
             taskSelect.setReportSecondId(Integer.valueOf(reportId));
             taskSelect.setReportSecondApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
         }
@@ -753,7 +762,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 
         WmScorePackage scorePackage = wmScorePackageService.getById(wmReport.getScoreId());
         //// 如果是源头积分包,则判断是否审核入库调查信息
-        //if (StringUtils.isBlank(scorePackage.getRelationScoreId())) {
+        // if (StringUtils.isBlank(scorePackage.getRelationScoreId())) {
         //    List<WmTask> tasks = wmTaskService.list(Wrappers.<WmTask>lambdaQuery().in(WmTask::getId, taskIds));
         //    // 调查信息审核(15、30-医院 16-商业公司 18-药店)
         //    tasks.forEach(task -> {
@@ -793,11 +802,11 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         Integer userId = SecurityUtils.getUser().getId();
         LocalDateTime now = LocalDateTime.now();
 
-        //更新任务表审批意见,查询所有未审核的任务,判断报告关联任务是否全部审核
+        // 更新任务表审批意见,查询所有未审核的任务,判断报告关联任务是否全部审核
         LambdaUpdateWrapper<WmTask> updateTaskWrapper = new LambdaUpdateWrapper<>();
         WmTask wmTask = new WmTask();
-        //if (SecurityUtils.getRoles().contains(3)) {//药企
-        if (SecurityUtils.getRoles().contains(39)) {//总经理
+        // if (SecurityUtils.getRoles().contains(3)) {//药企
+        if (SecurityUtils.getRoles().contains(39)) {// 总经理
             updateTaskWrapper.set(WmTask::getReportDrugApprovalStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
             updateTaskWrapper.set(WmTask::getReportDrugApprovalOpinion, approvalOpinion);
             updateTaskWrapper.set(WmTask::getReportDrugApprovalInfo, approvalInfo);
@@ -810,8 +819,8 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 
         }
 
-        //else if (SecurityUtils.getRoles().contains(4)) {//一级代理商类型
-        else if (SecurityUtils.getRoles().contains(4)) {//区域
+        // else if (SecurityUtils.getRoles().contains(4)) {//一级代理商类型
+        else if (SecurityUtils.getRoles().contains(4)) {// 区域
 
             updateTaskWrapper.set(WmTask::getReportOneApprovalStatus, ReportEnum.REPORT_STATUS_CREATE.getType());
             updateTaskWrapper.set(WmTask::getReportOneApprovalOpinion, approvalOpinion);
@@ -823,13 +832,13 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
             }
         }
 
-        if ("0".equals(scorePackage.getTypeid())) {//药企
+        if ("0".equals(scorePackage.getTypeid())) {// 药企
             wmTask.setReportDrugId(wmReport.getId());
             wmTask.setReportDrugApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
             wmTask.setReportOneId(wmReport.getId());
             wmTask.setReportOneApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
-        } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
             wmTask.setReportSecondId(wmReport.getId());
             wmTask.setReportSecondApprovalStatus(ReportEnum.REPORT_STATUS_APPROVAL.getType());
         }
@@ -859,16 +868,16 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         checkChainManager.doCheck(collect, SecurityUtils.getUser());
 
 
-        //该报告关联的所有未提交的任务
+        // 该报告关联的所有未提交的任务
         List<WmTask> taskList = wmTaskService.list(Wrappers.query(wmTask));
 
         // 更新报告状态  START======================================================
-        //提交修改状态,更新时间
+        // 提交修改状态,更新时间
         LambdaUpdateWrapper<WmReport> updateWrapper = new LambdaUpdateWrapper<>();
-        //判断任务是不是已经全部审核完成,所有的任务都完成才算完成
-        if (taskList.isEmpty()) {//taskList为空,说明任务都已审核
+        // 判断任务是不是已经全部审核完成,所有的任务都完成才算完成
+        if (taskList.isEmpty()) {// taskList为空,说明任务都已审核
             updateWrapper.set(WmReport::getReportStatus, ReportEnum.REPORT_STATUS_SETTLE.getType());
-        } else {//不为空,说明是部分审批
+        } else {// 不为空,说明是部分审批
             updateWrapper.set(WmReport::getReportStatus, ReportEnum.REPORT_STATUS_PART_APPROVAL.getType());
         }
         updateWrapper.set(WmReport::getUpdatePeople, userId);
@@ -891,7 +900,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                 WmScorePackageStatus scorePackageStatus = new WmScorePackageStatus();
                 scorePackageStatus.setPackageId(task.getScorePackageId());
                 scorePackageStatus.setUserId(task.getTaskUserId());
-                scorePackageStatus.setStatus("2");//接单审核通过
+                scorePackageStatus.setStatus("2");// 接单审核通过
                 WmScorePackageStatus updateScorePackageStatus = wmScorePackageStatusService.getOne(Wrappers.query(scorePackageStatus));
                 // 查询已提交的任务(除去审核不通过的任务)
                 Wrapper<WmTask> taskQueryWrapper = Wrappers.<WmTask>lambdaQuery()
@@ -1012,39 +1021,39 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         WmScorePackage scorePackage = wmScorePackageService.getById(wmReport.getScoreId());
         LambdaQueryWrapper<WmTask> lambdaQueryWrapper = Wrappers.<WmTask>query().lambda();
         lambdaQueryWrapper.and(wrapper -> wrapper.eq(WmTask::getReportDrugId, wmReport.getId())
-                        .or().eq(WmTask::getReportOneId, wmReport.getId())
-                        .or().eq(WmTask::getReportSecondId, wmReport.getId()));
+                .or().eq(WmTask::getReportOneId, wmReport.getId())
+                .or().eq(WmTask::getReportSecondId, wmReport.getId()));
         // 如果是审批页面,则过滤掉通过和不通过的数据(reportDrugApprovalOpinion或reportOneApprovalOpinion:1通过,2不通过)
         if (isApprovalPage != null && isApprovalPage.equals(1)) {
             lambdaQueryWrapper.eq(WmTask::getTaskStatus, "3");
-            if ("0".equals(scorePackage.getTypeid())) {//药企
+            if ("0".equals(scorePackage.getTypeid())) {// 药企
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-            } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+            } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion)
                         .eq(WmTask::getReportOneApprovalOpinion, "1")
                         .eq(WmTask::getReportOneApprovalStatus, "2")
                 );
-            } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+            } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
                 lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportOneApprovalOpinion));
             }
         } else {
             // 查看页面, 审核状态筛选条件
             if (StrUtil.equals("0", reportApprovalOpinion)) {
                 // 未审核的条件
-                if ("0".equals(scorePackage.getTypeid())) {//药企
+                if ("0".equals(scorePackage.getTypeid())) {// 药企
                     lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-                } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+                } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
                     lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-                } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+                } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
                     lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportOneApprovalOpinion));
                 }
             } else if (StrUtil.equalsAny(reportApprovalOpinion, "1", "2")) {
                 // 审核通过/不通过的条件
-                if ("0".equals(scorePackage.getTypeid())) {//药企
+                if ("0".equals(scorePackage.getTypeid())) {// 药企
                     lambdaQueryWrapper.eq(WmTask::getReportDrugApprovalOpinion, reportApprovalOpinion);
-                } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+                } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
                     lambdaQueryWrapper.eq(WmTask::getReportDrugApprovalOpinion, reportApprovalOpinion);
-                } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+                } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
                     lambdaQueryWrapper.eq(WmTask::getReportOneApprovalOpinion, reportApprovalOpinion);
                 }
             }
@@ -1105,10 +1114,10 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                 Map map = JSON.parseObject(JSON.toJSONString(wmtask), Map.class);
                 map.put("reportNo", wmReport.getReportNo());
                 map.put("scoreId", wmReport.getScoreId());
-                if ("0".equals(scorePackage.getTypeid())) {//药企
+                if ("0".equals(scorePackage.getTypeid())) {// 药企
                     map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
                     map.put("reportApprovalInfo", wmtask.getReportDrugApprovalInfo());
-                } else if ("1".equals(scorePackage.getTypeid())) {//一级代理商类型
+                } else if ("1".equals(scorePackage.getTypeid())) {// 一级代理商类型
 //					map.put("reportApprovalOpinion",wmtask.getReportOneApprovalOpinion());
                     if (StrUtil.isNotBlank(wmtask.getReportDrugApprovalOpinion())) {
                         map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
@@ -1118,7 +1127,7 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                         map.put("reportApprovalOpinion", wmtask.getReportOneApprovalOpinion());
                         map.put("reportApprovalInfo", wmtask.getReportOneApprovalInfo());
                     }
-                } else if ("2".equals(scorePackage.getTypeid())) {//二级代理商类型
+                } else if ("2".equals(scorePackage.getTypeid())) {// 二级代理商类型
 //					map.put("reportApprovalOpinion",wmtask.getReportSecondApprovalOpinion());
                     map.put("reportApprovalOpinion", wmtask.getReportOneApprovalOpinion());
                     map.put("reportApprovalInfo", wmtask.getReportOneApprovalInfo());
@@ -1282,11 +1291,11 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
                 Map<String, Object> map = JSON.parseObject(JSON.toJSONString(wmtask), Map.class);
                 map.put("reportNo", wmtask.getReportNo());
                 map.put("scoreId", wmtask.getScoreId());
-                if (dept.getLevel() == 2) {//药企
+                if (dept.getLevel() == 2) {// 药企
                     map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
-                } else if (dept.getLevel() == 3) {//一级代理商类型
+                } else if (dept.getLevel() == 3) {// 一级代理商类型
                     map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
-                } else if (dept.getLevel() == 4) {//二级代理商类型
+                } else if (dept.getLevel() == 4) {// 二级代理商类型
                     map.put("reportApprovalOpinion", wmtask.getReportOneApprovalOpinion());
                 }
                 // 姓名
@@ -1337,11 +1346,11 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
         lambdaQueryWrapper.and(wrapper -> wrapper.eq(WmTask::getReportDrugId, reportId)
                 .or().eq(WmTask::getReportOneId, reportId)
                 .or().eq(WmTask::getReportSecondId, reportId));
-        if ("0".equals(reportScorePackage.getTypeid())) {//药企
+        if ("0".equals(reportScorePackage.getTypeid())) {// 药企
             lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-        } else if ("1".equals(reportScorePackage.getTypeid())) {//一级代理商类型
+        } else if ("1".equals(reportScorePackage.getTypeid())) {// 一级代理商类型
             lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportDrugApprovalOpinion));
-        } else if ("2".equals(reportScorePackage.getTypeid())) {//二级代理商类型
+        } else if ("2".equals(reportScorePackage.getTypeid())) {// 二级代理商类型
             lambdaQueryWrapper.and(wrapper -> wrapper.isNull(WmTask::getReportOneApprovalOpinion));
         }
         if (StrUtil.isNotBlank(taskTypeId)) {
@@ -1436,7 +1445,15 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
             List<SysUser> userList = sysUserService.listByIds(taskList.stream().map(WmTask::getTaskUserId).collect(Collectors.toSet()));
             Map<Integer, String> userMap = userList.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getRealname));
 
+            // 任务审核状态
+            Set<Integer> taskIds = taskList.stream().mapToInt(task -> Integer.parseInt(task.getId())).boxed().collect(Collectors.toSet());
+
+            Map<Integer, Map<String, Object>> targetLatestCheckState = checkChainManager.getTargetLatestCheckState(taskIds);
+
             taskList.forEach(wmTask -> {
+
+                wmTask.setCheckState(targetLatestCheckState.get(Integer.parseInt(wmTask.getId())));
+
                 WmScorePackage scorePackage = scorePackageMap.get(wmTask.getScorePackageId());
 
                 Map<String, Object> map = new HashMap<>();

+ 16 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.dto.SysCheckChainNodeCheckHistoryDTO;
+import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.*;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.api.dto.CommonEvidenceDTO;
@@ -73,6 +74,7 @@ import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -1741,7 +1743,6 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
                 checkResult = false;
                 break;
         }
-
         // 创建审批流审核记录
         Boolean finalCheckResult = checkResult;
         List<SysCheckChainNodeCheckHistoryDTO.OnCreate> collect = Arrays.stream(ids).map(id -> {
@@ -2634,17 +2635,19 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
     /**
      * 快速批量任务审核
      *
-     * @param idList         任务id列表
+     * @param taskIdToNodeIdMap         任务id列表
      * @param taskStatus     审核状态(3-通过,4-不通过)
      * @param taskStatusInfo 审批说明
      * @return 审核结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean batchApprovalTask(List<String> idList, String taskStatus, String taskStatusInfo) {
+    public Boolean batchApprovalTask(Map<String, Integer> taskIdToNodeIdMap, String taskStatus, String taskStatusInfo) {
         LocalDateTime now = LocalDateTime.now();
         Integer operatorId = SecurityUtils.getUser().getId();
 
+        Set<String> idList = taskIdToNodeIdMap.keySet();
+
         // 批量查询任务
         List<WmTask> wmTasks = this.listByIds(idList);
         Map<String, WmTask> taskMap = wmTasks.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
@@ -2702,6 +2705,16 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 
             // 移除图片缓存
             this.removePicCache(queryTask);
+
+            // 创建审批流审核记录
+            Boolean finalCheckResult = ("3".equals(taskStatus));
+            SysCheckChainNodeCheckHistoryDTO.OnCreate res = new SysCheckChainNodeCheckHistoryDTO.OnCreate();
+            res.setNodeId(taskIdToNodeIdMap.get(id));
+            res.setTargetId(Integer.valueOf(id));
+            res.setCheckResult(finalCheckResult);
+            res.setCheckMessage(taskStatusInfo);
+            checkChainManager.doCheck(Collections.singletonList(res), SecurityUtils.getUser());
+
         });
 
         // 查询积分包下审核通过和审核中的任务