Просмотр исходного кода

Merge remote-tracking branch 'origin/dev_20260131' into dev_20260131

donglang 1 месяц назад
Родитель
Сommit
00ca1638a5

+ 19 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -10,6 +10,7 @@ import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ApprovalEnum;
 import com.sckw.core.model.enums.ClientTypeEnum;
+import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.enums.MenuTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.utils.BeanUtils;
@@ -28,8 +29,11 @@ import com.sckw.system.model.pojo.FindMenuTreePojo;
 import com.sckw.system.model.pojo.FindPojoParam;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.*;
+import com.sckw.system.util.MenuEntTypeForUsingRolesUtil;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -460,11 +464,26 @@ public class KwsMenuService {
                 .collect(Collectors.groupingBy(KwsMenu::getParentId, LinkedHashMap::new, Collectors.toList()));
 
         List<AppMenuPermItemResVo> result = new ArrayList<>(menus.size());
+        menus=menus.stream().filter(x->Objects.equals(x.getParentId(),0L) && Objects.equals(x.getType(),1)).collect(Collectors.toList());
+        Long entId = LoginUserHolder.getEntId();
+        List<KwsEntType> listByEntId = kwsEntTypeDao.findListByEntId(entId);
+        List<String> entTypes =listByEntId.stream().map(KwsEntType::getType).map(String::valueOf).toList();
         for (KwsMenu m : menus) {
+            if (Objects.equals(m.getType(), MenuTypeEnum.DIRECTORY.getCode())
+                    && CollectionUtils.isNotEmpty(entTypes)
+                    && !MenuEntTypeForUsingRolesUtil.usingRolesMatchesAnyEntType(m.getUsingRoles(), entTypes)) {
+                continue;
+            }
             AppMenuPermItemResVo vo = toAppMenuPermItemResVo(m);
             List<KwsMenu> children = buttonsByParent.getOrDefault(m.getId(), Collections.emptyList());
             List<AppMenuPermItemResVo> btnVos = new ArrayList<>(children.size());
             for (KwsMenu c : children) {
+                // type 为按钮(2)时,在已登录企业类型非空的前提下,要求 using_roles 与任一企业类型匹配,否则不下发
+                if (Objects.equals(c.getType(), MenuTypeEnum.BUTTON.getCode())
+                        && CollectionUtils.isNotEmpty(entTypes)
+                        && !MenuEntTypeForUsingRolesUtil.usingRolesMatchesAnyEntType(c.getUsingRoles(), entTypes)) {
+                    continue;
+                }
                 btnVos.add(toAppMenuPermItemResVo(c));
             }
             vo.setButtons(btnVos);

+ 59 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/util/MenuEntTypeForUsingRolesUtil.java

@@ -0,0 +1,59 @@
+package com.sckw.system.util;
+
+import com.sckw.system.model.KwsEntType;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 将企业已绑定类型转为菜单表 using_roles 模糊匹配所需的类型编码(字符串集合)。
+ * <p>
+ * 与 {@link com.sckw.system.model.KwsMenu#usingRoles} 约定一致:1-供应商 2-采购商 3-4PL 4-3PL
+ */
+public final class MenuEntTypeForUsingRolesUtil {
+
+    private MenuEntTypeForUsingRolesUtil() {
+    }
+
+    /**
+     * 去重后的企业类型码(字符串),用于对 using_roles 做 like 条件。
+     *
+     * @param entTypes 企业多类型行,可为空
+     * @return 永不为 null,无数据时返回空表
+     */
+    public static List<String> toDistinctTypeCodes(List<KwsEntType> entTypes) {
+        if (entTypes == null || entTypes.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return entTypes.stream()
+                .map(KwsEntType::getType)
+                .filter(Objects::nonNull)
+                .map(String::valueOf)
+                .distinct()
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 判断 {@code using_roles} 是否与当前登录企业的任一类型编码匹配,语义与菜单查询中
+     * {@code LIKE '%code%'} 条件一致(子串包含即可)。
+     *
+     * @param usingRoles   菜单/按钮表中的适用企业类型字段,可为空
+     * @param entTypeCodes 当前登录企业已解析出的类型码列表(如 {@code "1"}、{@code "2"}),不可全为空白
+     * @return 任一类型码为 {@code using_roles} 的子串则 true;入参无效或无一匹配则 false
+     */
+    public static boolean usingRolesMatchesAnyEntType(String usingRoles, List<String> entTypeCodes) {
+        if (usingRoles == null || usingRoles.isBlank() || entTypeCodes == null || entTypeCodes.isEmpty()) {
+            return false;
+        }
+        List<String> splitList = java.util.Arrays.asList(usingRoles.split(","));
+//        return entTypeCodes.stream()
+//                .filter(Objects::nonNull)
+//                .map(String::trim)
+//                .filter(s -> !s.isEmpty())
+//                .anyMatch(usingRoles::contains);
+
+        return splitList.contains(entTypeCodes.get(0));
+    }
+}

+ 18 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3628,11 +3628,28 @@ public class KwtLogisticsConsignmentService {
         if (Objects.isNull(kwtLogisticsOrderUnit)) {
             throw new BusinessException("未找到承运企业信息");
         }
-        //车牌id去重
+        //过滤停用车辆
         List<DispatchCarReq.CarInfo> carInfos = req.getCarInfos();
+        List<Long> reqTruckIds = carInfos.stream()
+                .map(DispatchCarReq.CarInfo::getTruckId)
+                .filter(org.apache.commons.lang3.StringUtils::isNotBlank)
+                .map(Long::valueOf)
+                .toList();
+        Map<Long, RTruckVo> truckMap = remoteFleetService.findTruckByTruckIds(reqTruckIds).stream()
+                .collect(Collectors.toMap(RTruckVo::getId, Function.identity(), (k1, k2) -> k1));
+        final int disabledTruckStatus = 1;
+        carInfos = carInfos.stream()
+                .filter(carInfo -> {
+                    RTruckVo truckVo = truckMap.get(Long.valueOf(carInfo.getTruckId()));
+                    return truckVo == null || !Objects.equals(truckVo.getStatus(), disabledTruckStatus);
+                })
+                .toList();
+
+        //车牌id去重
         Set<String> truckIds = carInfos.stream()
                 .map(DispatchCarReq.CarInfo::getTruckId)
                 .collect(Collectors.toSet());
+
         //查询派车信息
         List<KwtLogisticsOrderCirculate> logisticsOrderCirculates =
                 logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckIds(logisticsOrder.getId(), truckIds);