Bladeren bron

feat: task check tile

shc 5 maanden geleden
bovenliggende
commit
6357dd03fd

+ 4 - 0
hnqz-common/hnqz-common-core/src/main/java/com/qunzhixinxi/hnqz/common/core/constant/CacheConstants.java

@@ -49,6 +49,10 @@ public interface CacheConstants {
 
   String USER_KEY = "user_key";
 
+  String TASK_CONTENT_CONFIG_KEY = "task_content_config_key";
+
+  String DICT_ITEM_KEY = "dict_item_key";
+
   /** redis reload 事件 */
   String ROUTE_REDIS_RELOAD_TOPIC = "gateway_redis_route_reload_topic";
 

+ 83 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/config/SysInitRunner.java

@@ -1,14 +1,19 @@
 package com.qunzhixinxi.hnqz.admin.config;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContentConfig;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskContentConfigService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
 import com.qunzhixinxi.hnqz.common.core.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
@@ -39,7 +44,9 @@ public class SysInitRunner {
   private final SysDeptMapper deptMapper;
   private final SysUserService sysUserService;
   private final WmTaskTypeService taskTypeService;
+  private final WmTaskContentConfigService taskContentConfigService;
   private final WmDaDrugEntDrugtableService drugtableService;
+  private final SysDictItemService dictItemService;
 
   @Async
   @Order
@@ -55,8 +62,80 @@ public class SysInitRunner {
     // 任务类型
     initTaskType();
 
+    // 初始化任务内容配置
+    initContentConfig();
+
     // 初始化药品名录
     initDrug();
+
+    // 字典项
+    initDictItem();
+  }
+
+  private void initDictItem() {
+    log.info("======> 初始化字典项开始 <======");
+    Boolean result = redisTemplate.delete(CacheConstants.DICT_ITEM_KEY);
+    log.info("======> 删除字典项信息:【{}】 ", result);
+
+    // 获取全部企业
+    List<SysDictItem> items =
+        dictItemService.list(
+            Wrappers.<SysDictItem>lambdaQuery()
+                .eq(SysDictItem::getDelFlag, CommonConstants.STATUS_NORMAL));
+
+    log.info("======> 获取字典项信息:全部【{}】", items.size());
+
+    if (CollUtil.isEmpty(items)) {
+      log.info("======> 可用字典项信息为0,结束初始化");
+    } else {
+
+      items.forEach(
+          item -> {
+
+
+            //            log.info("缓存字典项信息:{}, {}", user.getUserId(), user);
+            redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(WmTaskContentConfig.class));
+            redisTemplate.opsForList().rightPush(CacheConstants.DICT_ITEM_KEY, item);
+          });
+    }
+    log.debug("======> 初始化字典项信息结束 <======");
+  }
+
+  private void initContentConfig() {
+    log.info("======> 初始化任务内容配置开始 <======");
+    Boolean result = redisTemplate.delete(CacheConstants.TASK_CONTENT_CONFIG_KEY);
+    log.info("======> 删除任务内容配置信息:【{}】 ", result);
+
+    // 获取全部企业
+    List<WmTaskContentConfig> configs =
+        taskContentConfigService.list(
+            Wrappers.<WmTaskContentConfig>lambdaQuery()
+                .eq(WmTaskContentConfig::getEnableFlag, CommonConstants.STATUS_NORMAL)
+                .eq(WmTaskContentConfig::getDelFlag, CommonConstants.STATUS_NORMAL));
+
+    log.info("======> 获取任务内容配置信息:全部【{}】", configs.size());
+
+    if (CollUtil.isEmpty(configs)) {
+      log.info("======> 可用任务内容配置信息为0,结束初始化");
+    } else {
+
+      configs.forEach(
+          config -> {
+            if (StrUtil.isBlank(config.getTaskTypeId())){
+              return;
+            }
+
+            if (config.getSeq() == null){
+              config.setSeq(-1);
+            }
+
+
+            //            log.info("缓存任务内容配置信息:{}, {}", user.getUserId(), user);
+            redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(WmTaskContentConfig.class));
+            redisTemplate.opsForList().rightPush(CacheConstants.TASK_CONTENT_CONFIG_KEY, config);
+          });
+    }
+    log.debug("======> 初始化任务内容配置信息结束 <======");
   }
 
   private void initUser() {
@@ -79,7 +158,7 @@ public class SysInitRunner {
 
       users.forEach(
           user -> {
-//            log.info("缓存人员信息:{}, {}", user.getUserId(), user);
+            //            log.info("缓存人员信息:{}, {}", user.getUserId(), user);
             redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(SysUser.class));
             redisTemplate.opsForList().rightPush(CacheConstants.USER_KEY, user);
           });
@@ -107,7 +186,7 @@ public class SysInitRunner {
 
       drugtables.forEach(
           drugtable -> {
-//            log.info("缓存产品:{}, {}", drugtable.getId(), drugtable);
+            //            log.info("缓存产品:{}, {}", drugtable.getId(), drugtable);
             redisTemplate.setHashValueSerializer(
                 new Jackson2JsonRedisSerializer<>(WmDaDrugEntDrugtable.class));
             redisTemplate.opsForList().rightPush(CacheConstants.DRUG_KEY, drugtable);
@@ -134,7 +213,7 @@ public class SysInitRunner {
 
       deptList.forEach(
           dept -> {
-//            log.info("缓存企业信息:{}, {}", dept.getDeptId(), dept);
+            //            log.info("缓存企业信息:{}, {}", dept.getDeptId(), dept);
             redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(SysDept.class));
             redisTemplate.opsForList().rightPush(CacheConstants.DEPT_KEY, dept);
           });
@@ -163,7 +242,7 @@ public class SysInitRunner {
 
       taskTypes.forEach(
           tt -> {
-//            log.info("缓存任务类型:{}, {}", tt.getId(), tt);
+            //            log.info("缓存任务类型:{}, {}", tt.getId(), tt);
             redisTemplate.setHashValueSerializer(
                 new Jackson2JsonRedisSerializer<>(WmTaskType.class));
             redisTemplate.opsForList().rightPush(CacheConstants.TASK_TYPE_KEY, tt);

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/task/WmTaskController.java

@@ -1195,6 +1195,7 @@ public class WmTaskController {
      * @param taskTypeId 任务类型id
      * @return 列表结果
      */
+    @Deprecated
     @GetMapping("/list-review-task-info")
     public R<?> listTaskInfo(@RequestParam("packageId") String packageId, String taskTypeId) {
 

+ 27 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/task/WmTaskControllerV2.java

@@ -4,9 +4,11 @@ import static com.qunzhixinxi.hnqz.common.core.util.R.ok;
 
 import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskReqVO;
 import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskRespVO;
+import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskRespVO.ToTileCheck;
 import com.qunzhixinxi.hnqz.admin.manager.TaskManager;
 import com.qunzhixinxi.hnqz.admin.util.RedisUtils;
 import com.qunzhixinxi.hnqz.admin.util.RedisUtils.Token;
@@ -58,6 +60,29 @@ public class WmTaskControllerV2 {
     return ok(page);
   }
 
+  /**
+   * 平铺展示审核信息分页
+   *
+   * @param query 筛选条件
+   * @return 分页结果
+   */
+  @GetMapping(value = "/page/tile")
+  public R<IPage<TaskRespVO.ToTileCheck>> pageTaskToCheckInTile(@Valid TaskReqVO.OnPage query) {
+
+    Page<TaskRespVO.ToDirectCheck> page =
+        taskManager.pageTaskToCheckInTile(query, SecurityUtils.getUser());
+
+    // 封装token
+    IPage<ToTileCheck> convert = page.convert(r -> {
+      ToTileCheck toTileCheck = new ToTileCheck();
+      toTileCheck.setInfo(r);
+      toTileCheck.setToken(redisUtils.generateToken(r.getTaskId().toString()));
+      return toTileCheck;
+    });
+
+    return ok(convert);
+  }
+
   //  @Inner(value = false)
   @PostMapping("/token")
   public R<Token> getToken(@Valid @RequestBody TaskReqVO.OnToken query) {
@@ -133,7 +158,8 @@ public class WmTaskControllerV2 {
   public R<Boolean> doBatchCheck(@Valid @RequestBody TaskReqVO.OnBatchCheck checkReq) {
 
     // 删除幂等token
-    String taskIdStr = checkReq.getTaskIds().stream().sorted().collect(Collectors.joining(StrPool.COMMA));
+    String taskIdStr =
+        checkReq.getTaskIds().stream().sorted().collect(Collectors.joining(StrPool.COMMA));
 
     boolean valid = redisUtils.validToken(checkReq.getToken(), taskIdStr);
 

+ 19 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/task/vo/TaskRespVO.java

@@ -1,5 +1,9 @@
 package com.qunzhixinxi.hnqz.admin.controller.task.vo;
 
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContentConfig;
+import com.qunzhixinxi.hnqz.admin.util.RedisUtils.Token;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
@@ -35,6 +39,12 @@ public final class TaskRespVO {
     // 推广员信息
     private Integer taskUserId;
 
+    // 任务内容
+    private Integer taskContentId;
+    private WmTaskContent taskContent;
+    private List<WmTaskContentConfig> configs;
+    private Map<String, List<SysDictItem>> dict;
+
     private String salesName;
 
     // 企业信息
@@ -60,4 +70,13 @@ public final class TaskRespVO {
     // 审核信息
     private List<Map<String, Object>> checkHistoryList;
   }
+
+
+  @Data
+  public static class ToTileCheck {
+
+   private ToDirectCheck info;
+
+    private Token token;
+  }
 }

+ 101 - 17
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/TaskManager.java

@@ -13,12 +13,16 @@ import com.qunzhixinxi.hnqz.admin.api.dto.SysCheckChainNodeCheckHistoryDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.SysCheckChainNodeCheckHistoryDTO.OnCreate;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysCheckChainNodeCheckHistory;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskContentConfig;
 import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskReqVO;
+import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskReqVO.OnPage;
 import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskRespVO;
 import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskRespVO.ToDirectCheck;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCheckChainNodeCheckHistoryMapper;
@@ -26,6 +30,7 @@ import com.qunzhixinxi.hnqz.admin.mapper.WmTaskV2Mapper;
 import com.qunzhixinxi.hnqz.admin.service.SysUserAreaService;
 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.common.core.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
@@ -36,7 +41,10 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -59,6 +67,7 @@ public class TaskManager {
 
   @Resource private RedisTemplate redisTemplate;
   @Resource private WmTaskV2Mapper taskMapper;
+  @Resource private WmTaskContentService taskContentService;
   @Resource private WmTaskService taskService;
   @Resource private SysUserAreaService userAreaService;
   @Resource private WmScorePackageService scorePackageService;
@@ -66,6 +75,19 @@ public class TaskManager {
   @Resource private WmScorePackageStatusService scorePackageStatusService;
   @Resource private SysCheckChainNodeCheckHistoryMapper checkChainNodeCheckHistoryMapper;
 
+  /**
+   * 平铺审核分页
+   *
+   * @param query 查询条件
+   * @param user 审核人
+   * @return 分页信息
+   */
+  public Page<ToDirectCheck> pageTaskToCheckInTile(@Valid TaskReqVO.OnPage query, HnqzUser user) {
+
+    Page<ToDirectCheck> page = getCheckPage(query, user);
+    return build(page, true);
+  }
+
   /**
    * 分页查询
    *
@@ -75,6 +97,12 @@ public class TaskManager {
   public Page<TaskRespVO.ToDirectCheck> pageTaskToCheck(
       @Valid TaskReqVO.OnPage query, HnqzUser user) {
 
+    Page<ToDirectCheck> page = getCheckPage(query, user);
+
+    return build(page, false);
+  }
+
+  private Page<ToDirectCheck> getCheckPage(OnPage query, HnqzUser user) {
     // 获取vendor
     List<Integer> vendorList = getVendorList(query.getVendorId(), user);
 
@@ -94,7 +122,7 @@ public class TaskManager {
     // 获取产品信息
     List<String> skuIds = getSkuIds(query.getMahName(), query.getSkuId());
 
-    Page<TaskRespVO.ToDirectCheck> page = new Page<>(query.getCurrent(), query.getSize());
+    Page<ToDirectCheck> page = new Page<>(query.getCurrent(), query.getSize());
 
     taskMapper.pageDirectCheck(
         page,
@@ -112,8 +140,7 @@ public class TaskManager {
         query.getProvAbbr(),
         calcNodeSum(query.getNodeId()),
         query.getTaskStatus());
-
-    return build(page);
+    return page;
   }
 
   private List<Integer> calcNodeSum(Integer nodeId) {
@@ -182,7 +209,8 @@ public class TaskManager {
   }
 
   // 组装数据
-  private Page<TaskRespVO.ToDirectCheck> build(Page<TaskRespVO.ToDirectCheck> page) {
+  private Page<TaskRespVO.ToDirectCheck> build(
+      Page<TaskRespVO.ToDirectCheck> page, boolean toTile) {
 
     List<ToDirectCheck> records = page.getRecords();
 
@@ -206,6 +234,36 @@ public class TaskManager {
     Map<String, WmDaDrugEntDrugtable> drugtableMap =
         drugs.stream().collect(Collectors.toMap(WmDaDrugEntDrugtable::getId, Function.identity()));
 
+    // 从缓存中获取配置项
+    List<WmTaskContentConfig> configs =
+        operations.range(CacheConstants.TASK_CONTENT_CONFIG_KEY, 0, -1);
+    Map<String, List<WmTaskContentConfig>> configMap =
+        configs.stream()
+            .sorted(Comparator.comparingInt(WmTaskContentConfig::getSeq))
+            .collect(Collectors.groupingBy(WmTaskContentConfig::getTaskTypeId));
+
+    // 从缓存中获取字典项
+    List<SysDictItem> items = operations.range(CacheConstants.DICT_ITEM_KEY, 0, -1);
+    Map<String, List<SysDictItem>> itemMap =
+        items.stream().collect(Collectors.groupingBy(SysDictItem::getType));
+
+    // 获取任务内容
+    Map<Integer, WmTaskContent> tcId2EntityMap = new HashMap<>();
+    if (toTile) {
+      List<Integer> tcIds =
+          records.stream()
+              .map(ToDirectCheck::getTaskContentId)
+              .distinct()
+              .sorted()
+              .collect(Collectors.toList());
+
+      if (CollUtil.isNotEmpty(tcIds)) {
+        tcId2EntityMap =
+            taskContentService.listByIds(tcIds).stream()
+                .collect(Collectors.toMap(WmTaskContent::getId, Function.identity()));
+      }
+    }
+
     //    List<Integer> taskIds =
     //        records.stream()
     //            .mapToInt(ToDirectCheck::getTaskId)
@@ -220,21 +278,47 @@ public class TaskManager {
     //    Map<Long, List<Map<String, Object>>> his =
     //        taskCheckHis.stream().collect(Collectors.groupingBy(r -> (Long) r.get("target_id")));
 
-    records.forEach(
-        record -> {
-          SysUser sysUser = userMap.get(record.getTaskUserId());
-          SysDept dept = deptMap.get(record.getEntId());
-          WmDaDrugEntDrugtable drugtable = drugtableMap.get(record.getSkuId());
+    for (ToDirectCheck record : records) {
 
-          record.setSalesName(sysUser != null ? sysUser.getRealname() : "");
-          record.setEntName(dept.getName());
-          record.setSkuName(drugtable.getDrugnameTy());
-          record.setMahName(drugtable.getDrugEntName());
+      SysUser sysUser = userMap.get(record.getTaskUserId());
+      SysDept dept = deptMap.get(record.getEntId());
+      WmDaDrugEntDrugtable drugtable = drugtableMap.get(record.getSkuId());
 
-          // 查询审核记录
-          //          List<Map<String, Object>> maps = his.get((long) record.getTaskId());
-          //          record.setCheckHistoryList(maps);
-        });
+      record.setSalesName(sysUser != null ? sysUser.getRealname() : "");
+      record.setEntName(dept.getName());
+      record.setSkuName(drugtable.getDrugnameTy());
+      record.setMahName(drugtable.getDrugEntName());
+
+      // 任务内容
+      WmTaskContent taskContent = tcId2EntityMap.get(record.getTaskContentId());
+      record.setTaskContent(taskContent);
+      List<WmTaskContentConfig> configList = configMap.get(record.getTaskTypeId());
+      record.setConfigs(configList);
+
+      if (CollUtil.isNotEmpty(configList)) {
+
+        Map<String, List<SysDictItem>> coll = new LinkedHashMap<>();
+
+        for (WmTaskContentConfig config : configList) {
+
+          if (StrUtil.isBlank(config.getDictGroupName())) {
+            continue;
+          }
+          List<SysDictItem> items1 = itemMap.get(config.getDictGroupName());
+
+          if (CollUtil.isEmpty(items1)) {
+            continue;
+          }
+
+          coll.put(config.getDictGroupName(), itemMap.get(config.getDictGroupName()));
+        }
+        record.setDict(coll);
+      }
+
+      // 查询审核记录
+      //          List<Map<String, Object>> maps = his.get((long) record.getTaskId());
+      //          record.setCheckHistoryList(maps);
+    }
 
     page.setRecords(records);
     return page;

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskV2Mapper.xml

@@ -12,6 +12,7 @@
     <result property="taskStatus" column="task_status"/>
     <result property="createTime" column="create_time"/>
     <result property="taskUserId" column="task_user_id"/>
+    <result property="taskContentId" column="task_content_id"/>
     <result property="entId" column="dept_id"/>
     <result property="pkgName" column="score_package_name"/>
     <result property="relPkgName" column="rel_pkg_name"/>
@@ -24,7 +25,6 @@
     <!--      column="id"/>-->
   </resultMap>
 
-
   <select id="pageDirectCheck" resultMap="wmTaskMap">
     SELECT t.id,
     t.task_number,
@@ -33,6 +33,7 @@
     t.task_user_id,
     t.task_status,
     t.create_time,
+    t.task_content_id,
     pkg.dept_id,
     pkg.score_package_name,
     ppkg.score_package_name AS rel_pkg_name,