Преглед на файлове

feat: 中生线上问题排查处理:分管领导查到了不属于自己区域的包

lixuesong преди 2 дни
родител
ревизия
3d7b2bd216

+ 49 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/TaskManager.java

@@ -15,6 +15,7 @@ import com.qunzhixinxi.hnqz.admin.api.dto.SysCheckChainNodeCheckHistoryDTO.OnCre
 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.SysEnterpriseArea;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaDrugEntDrugtable;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmDaHospital;
@@ -28,6 +29,8 @@ 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;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysEnterpriseAreaMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskV2Mapper;
 import com.qunzhixinxi.hnqz.admin.service.SysUserAreaService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
@@ -41,6 +44,7 @@ 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 java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -51,6 +55,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -85,6 +90,8 @@ public class TaskManager {
   @Resource private WmScorePackageStatusService scorePackageStatusService;
   @Resource private SysCheckChainNodeCheckHistoryMapper checkChainNodeCheckHistoryMapper;
   @Resource private WmDaHospitalService wmDaHospitalService;
+  @Resource private SysEnterpriseAreaMapper enterpriseAreaMapper;
+  @Resource private SysDeptMapper deptMapper;
 
   // 丁凯总作为分管领导可见的服务商
   private static final List<Integer> DING_KAI_DEPT_ID =
@@ -162,6 +169,9 @@ public class TaskManager {
     // 获取vendor 根据人员所属区域
     List<Integer> vendorList = getVendorList(query.getVendorId(), user);
 
+    // 获取服务区域简称
+    Set<String> provAbbrs = this.getProvAbbrs(user);
+
     // 计算服务包查询周期
     Map<String, LocalDate> pkgPeriod = this.calcPkgPeriod(query.getYear(), query.getQuarter());
     LocalDate issueDate = pkgPeriod.get("issueDate");
@@ -196,6 +206,7 @@ public class TaskManager {
           endTime,
           query.getTaskTypeId(),
           vendorList,
+          provAbbrs,
           skuIds,
           query.getSalesId(),
           query.getProvAbbr(),
@@ -229,6 +240,7 @@ public class TaskManager {
               endTime,
               query.getTaskTypeId(),
               Collections.singletonList(query.getVendorId()),
+              null,
               skuIds,
               query.getSalesId(),
               query.getProvAbbr(),
@@ -250,6 +262,7 @@ public class TaskManager {
           endTime,
           query.getTaskTypeId(),
           vendor,
+          null,
           skuIds,
           query.getSalesId(),
           query.getProvAbbr(),
@@ -269,6 +282,7 @@ public class TaskManager {
             endTime,
             query.getTaskTypeId(),
             vendorList,
+            null,
             skuIds,
             query.getSalesId(),
             query.getProvAbbr(),
@@ -281,6 +295,35 @@ public class TaskManager {
     }
   }
 
+  /**
+   * 获取服务区域简称
+   *
+   * @param user 用户
+   * @return {@link Set }<{@link String }> 服务区域简称
+   */
+  private Set<String> getProvAbbrs(HnqzUser user) {
+    // 当前登录人所拥有的区域
+    List<Long> areaIds = userAreaService.listUserAreas(Long.valueOf(user.getId()));
+
+    // 服务区域简称
+    Set<String> provAbbrs = new HashSet<>();
+    if (CollUtil.isNotEmpty(areaIds)) {
+      // 根据areaIds查区域/服务商(注意业务要求这里只用省级进行粗粒度的匹配,vendor的前两位为省级编码)
+      Set<String> provAreaIds = areaIds.stream()
+              .map(vendor -> String.valueOf(vendor).substring(0, 2)).collect(Collectors.toSet());
+
+      List<SysEnterpriseArea> enterpriseAreas = enterpriseAreaMapper.selectList(Wrappers.emptyWrapper());
+
+      Set<Integer> entIds = enterpriseAreas.stream()
+              .filter(entArea -> provAreaIds.contains(String.valueOf(entArea.getAreaId()).substring(0, 2)))
+              .map(entArea -> Math.toIntExact(entArea.getEntId())).collect(Collectors.toSet());
+
+      List<SysDept> depts = deptMapper.selectBatchIds(entIds);
+      provAbbrs = depts.stream().map(SysDept::getProvAbbr).filter(abbr -> !StrUtil.isBlank(abbr)).collect(Collectors.toSet());
+    }
+    return provAbbrs;
+  }
+
   private void pageDirectCheck(
       Page<ToDirectCheck> page,
       LocalDate issueDate,
@@ -290,6 +333,7 @@ public class TaskManager {
       LocalDateTime endTime,
       String taskTypeId,
       List<Integer> vendorList,
+      Set<String> provAbbrs,
       List<String> skuIds,
       Integer salesId,
       String provAbbr,
@@ -304,6 +348,7 @@ public class TaskManager {
         endTime,
         taskTypeId,
         vendorList,
+        provAbbrs,
         skuIds,
         salesId,
         provAbbr,
@@ -1016,6 +1061,9 @@ public class TaskManager {
     // 获取vendor
     List<Integer> vendorList = getVendorList(query.getVendorId(), user);
 
+    // 获取服务区域简称
+    Set<String> provAbbrs = this.getProvAbbrs(user);
+
     // 计算服务包查询周期
     Map<String, LocalDate> pkgPeriod = this.calcPkgPeriod(query.getYear(), query.getQuarter());
     LocalDate issueDate = pkgPeriod.get("issueDate");
@@ -1044,6 +1092,7 @@ public class TaskManager {
         endTime,
         query.getTaskTypeId(),
         vendorList,
+        provAbbrs,
         skuIds,
         query.getSalesId(),
         query.getProvAbbr(),

+ 4 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskV2Mapper.java

@@ -7,6 +7,8 @@ import com.qunzhixinxi.hnqz.admin.controller.task.vo.TaskRespVO;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Set;
+
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -28,6 +30,7 @@ public interface WmTaskV2Mapper extends BaseMapper<WmTask> {
       @Param("taskEndTime") LocalDateTime taskEndTime,
       @Param("taskTypeId") String taskTypeId,
       @Param("vendorIds") List<Integer> vendorIds,
+      @Param("provAbbrs") Set<String> provAbbrs,
       @Param("skuIds") List<String> skuIds,
       @Param("salesId") Integer salesId,
       @Param("prov") String prov,
@@ -46,6 +49,7 @@ public interface WmTaskV2Mapper extends BaseMapper<WmTask> {
       @Param("taskEndTime") LocalDateTime taskEndTime,
       @Param("taskTypeId") String taskTypeId,
       @Param("vendorIds") List<Integer> vendorIds,
+      @Param("provAbbrs") Set<String> provAbbrs,
       @Param("skuIds") List<String> skuIds,
       @Param("salesId") Integer salesId,
       @Param("prov") String prov,

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskV2Mapper.xml

@@ -74,6 +74,12 @@
           #{vid}
         </foreach>
       </if>
+      <if test="provAbbrs != null and provAbbrs.size > 0">
+        AND pkg.prov_abbr IN
+        <foreach collection="provAbbrs" item="provAbbr" open="(" close=")" separator=",">
+          #{provAbbr}
+        </foreach>
+      </if>
       <if test="skuIds != null and skuIds.size > 0">
         AND pkg.drugtable IN
         <foreach collection="skuIds" item="skuId" open="(" close=")" separator=",">
@@ -142,6 +148,12 @@
           #{vid}
         </foreach>
       </if>
+      <if test="provAbbrs != null and provAbbrs.size > 0">
+        AND pkg.prov_abbr IN
+        <foreach collection="provAbbrs" item="provAbbr" open="(" close=")" separator=",">
+          #{provAbbr}
+        </foreach>
+      </if>
       <if test="skuIds != null and skuIds.size > 0">
         AND pkg.drugtable IN
         <foreach collection="skuIds" item="skuId" open="(" close=")" separator=",">