Эх сурвалжийг харах

feat: 检索项:执行包名称、执行包ID、所属省份、产品所属生产企业、关联产品名称(取产品通用名)、执行包年度、执行包季度、知会阶段、审核阶段 都支持下拉搜索及手动输入联想搜索(与服务待审核页面搜索类似)

lixuesong 3 сар өмнө
parent
commit
3a2075ab04

+ 37 - 2
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/WmPkgDTO.java

@@ -1,14 +1,13 @@
 package com.qunzhixinxi.hnqz.admin.api.dto;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPackageRedemptionNotice;
 import com.qunzhixinxi.hnqz.admin.api.model.WmPkgRedemptionNoticeItemModel;
 import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.hibernate.validator.constraints.Length;
 
-import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotBlank;
@@ -109,6 +108,42 @@ public final class WmPkgDTO {
     @Min(value = 10, message = "分页数量最小为{value}")
     @Max(value = 100, message = "分页数量最大为{value}")
     private Integer size;
+
+    // 年度
+    private String year;
+
+    // 季度
+    private String quarter;
+
+    // 推广员
+    private Integer salesId;
+
+    // 生产企业
+    private String mahName;
+
+    // 关联产品
+    private String skuId;
+
+    // 服务包所属省份
+    private String provAbbr;
+
+    // 审核节点
+    private Integer nodeId;
+
+    // 包ID
+    private String pkgId;
+
+    // 包名称
+    private String pkgName;
+
+    // 审核状态(阶段)
+    private WmPackageRedemptionNotice.CheckState checkState;
+
+    // 知会状态
+    private WmPackageRedemptionNotice.NoticeState noticeState;
+
+    // 知会阶段
+    private Integer step;
   }
 
   @Data

+ 87 - 11
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/WmPackageManager.java

@@ -3,7 +3,6 @@ package com.qunzhixinxi.hnqz.admin.manager;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,8 +11,6 @@ import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.constant.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmPkgDTO;
-import com.qunzhixinxi.hnqz.admin.api.dto.WmPkgDTO.OnOwnerReplace;
-import com.qunzhixinxi.hnqz.admin.api.dto.WmPkgDTO.OnStop;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysAreaEntity;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysCheckChainNodeCheckHistory;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
@@ -36,12 +33,10 @@ import com.qunzhixinxi.hnqz.admin.api.model.excel.WmScorePackageInfoExcelModel;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCheckChainNodeCheckHistoryMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaDrugEntDrugtableMapper;
-import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageStatusMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysAreaEntityService;
 import com.qunzhixinxi.hnqz.admin.service.SysCheckChainNodeCheckHistoryService;
-import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysEnterpriseAreaService;
 import com.qunzhixinxi.hnqz.admin.service.SysImplementPlanService;
@@ -54,13 +49,16 @@ import com.qunzhixinxi.hnqz.admin.service.WmPackageTaskTypeQtyService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.core.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+
 import javax.validation.Valid;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -78,7 +76,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
-import java.util.stream.Collector;
 import java.util.stream.Collectors;
 
 /**
@@ -97,6 +94,7 @@ public class WmPackageManager {
   private static final int DIST_ADMIN_ROLE = 4;
   private static final int OK_CHAIN_TASK_NODE = 6;
 
+  private final RedisTemplate redisTemplate;
   private final WmScorePackageService scorePackageService;
   private final WmTaskMapper taskMapper;
   private final WmScorePackageStatusMapper scorePackageStatusMapper;
@@ -159,6 +157,11 @@ public class WmPackageManager {
 
     Page<WmPackageRedemptionNotice> page = new Page<>(query.getCurrent(), query.getSize());
     LambdaQueryWrapper<WmPackageRedemptionNotice> queryWrapper = Wrappers.lambdaQuery();
+    queryWrapper.eq(query.getCheckState() != null, WmPackageRedemptionNotice::getCheckState,
+        query.getCheckState().getState());
+    queryWrapper.eq(query.getNoticeState() != null, WmPackageRedemptionNotice::getNoticeState,
+        query.getNoticeState().getState());
+    queryWrapper.eq(query.getStep() != null, WmPackageRedemptionNotice::getStep, query.getStep());
 
     // 根据用户角色判断是管理员还是服务商
     // 区域管理员
@@ -206,11 +209,17 @@ public class WmPackageManager {
               .sorted()
               .collect(Collectors.toList());
 
-      List<WmScorePackage> pkgs =
-          scorePackageService.list(
-              Wrappers.<WmScorePackage>lambdaQuery()
-                  .in(WmScorePackage::getSendPackageDeptId, entIds)
-                  .in(WmScorePackage::getDrugtable, drugIds));
+      // 计算服务包查询周期
+      Map<String, LocalDate> pkgPeriod = this.calcPkgPeriod(query.getYear(), query.getQuarter());
+      LocalDate issueDate = pkgPeriod.get("issueDate");
+      LocalDate expiryDate = pkgPeriod.get("expiryDate");
+
+      List<WmScorePackage> pkgs = scorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+          .eq(StrUtil.isNotBlank(query.getPkgId()), WmScorePackage::getId, query.getPkgId())
+          .eq(StrUtil.isNotBlank(query.getPkgName()), WmScorePackage::getScorePackageName, query.getPkgName())
+          .eq(StrUtil.isNotBlank(query.getProvAbbr()), WmScorePackage::getProvAbbr, query.getProvAbbr())
+          .in(WmScorePackage::getSendPackageDeptId, entIds).in(WmScorePackage::getDrugtable, drugIds)
+          .between(WmScorePackage::getStartTime, issueDate, expiryDate));
 
       if (CollUtil.isEmpty(pkgs)) {
         return res;
@@ -279,6 +288,73 @@ public class WmPackageManager {
     return res;
   }
 
+  // 计算积分包周期
+  private Map<String, LocalDate> calcPkgPeriod(String yearStr, String quarterStr) {
+
+    LocalDate today = LocalDate.now();
+    LocalDate issue;
+    LocalDate expiry;
+    int year;
+    int month;
+    boolean annual = false;
+
+    // 没有参数 就查询当前日期的全年
+    if (StrUtil.isAllBlank(yearStr, quarterStr)) {
+      year = today.getYear();
+      month = 1;
+      annual = true;
+    } else {
+      year = StrUtil.isBlank(yearStr) ? today.getYear() : Integer.parseInt(yearStr);
+
+      if (StrUtil.isBlank(quarterStr)) {
+        month = 1;
+        annual = true;
+      } else {
+        month = getMonthValue(quarterStr);
+      }
+    }
+
+    issue = LocalDate.of(year, month, 1);
+    expiry = issue.plusMonths(annual ? 12 : 3).minusDays(1);
+    Map<String, LocalDate> pkgPeriod = new HashMap<>(2);
+    pkgPeriod.put("issueDate", issue);
+    pkgPeriod.put("expiryDate", expiry);
+    return pkgPeriod;
+  }
+
+  // 计算季度开始月份
+  private int getMonthValue(String quarterStr) {
+    return Integer.parseInt(quarterStr) * 3 - 2;
+  }
+
+  // 获取关联产品
+  private List<String> getSkuIds(String mahName, String skuId) {
+
+    if (StrUtil.isNotBlank(skuId)) {
+      return Collections.singletonList(skuId);
+    }
+
+    if (StrUtil.isNotBlank(mahName)) {
+      List<WmDaDrugEntDrugtable> range =
+              redisTemplate.opsForList().range(CacheConstants.DRUG_KEY, 0, -1);
+
+      if (CollUtil.isNotEmpty(range)) {
+        List<String> collect =
+                range.stream()
+                        .filter(drugtable -> StrUtil.equals(drugtable.getDrugEntName(), mahName))
+                        .map(WmDaDrugEntDrugtable::getId)
+                        .distinct()
+                        .sorted()
+                        .collect(Collectors.toList());
+
+        return collect;
+      }
+    }
+
+    return Collections.emptyList();
+  }
+
+
   /**
    * 阅读通知
    *