ソースを参照

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

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LiftRodReleaseHandler.java
donglang 1 ヶ月 前
コミット
3086473fa9

+ 46 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GatekeeperTypeEnum.java

@@ -0,0 +1,46 @@
+package com.sckw.core.model.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.EnumSet;
+
+/**
+ * @author lfdc
+ * @desc 车辆往来运单状态枚举
+ * @date 2023-07-14 14:07:23
+ */
+@Getter
+@AllArgsConstructor
+public enum GatekeeperTypeEnum {
+
+    /**
+     * 门卫装货单
+     */
+    LOADING(1,  "门卫装货单"),
+
+    /**
+     * 门卫卸货单
+     */
+    UNLOADING(5,  "门卫卸货单"),
+
+    ;
+
+    private final Integer code;
+
+    private final String destination;
+
+
+    public static String getDesc(Integer status) {
+        if (status == null) {
+            return null;
+        }
+        for (GatekeeperTypeEnum forkliftStatusEnum : EnumSet.allOf(GatekeeperTypeEnum.class)) {
+            if (forkliftStatusEnum.code.equals(status)) {
+                return forkliftStatusEnum.destination;
+            }
+        }
+        return null;
+    }
+
+}

+ 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.constant.Global;
 import com.sckw.core.model.enums.ApprovalEnum;
 import com.sckw.core.model.enums.ApprovalEnum;
 import com.sckw.core.model.enums.ClientTypeEnum;
 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.MenuTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.utils.BeanUtils;
 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.pojo.FindPojoParam;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.*;
 import com.sckw.system.model.vo.res.*;
+import com.sckw.system.util.MenuEntTypeForUsingRolesUtil;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import org.apache.dubbo.config.annotation.DubboReference;
 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.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -460,11 +464,26 @@ public class KwsMenuService {
                 .collect(Collectors.groupingBy(KwsMenu::getParentId, LinkedHashMap::new, Collectors.toList()));
                 .collect(Collectors.groupingBy(KwsMenu::getParentId, LinkedHashMap::new, Collectors.toList()));
 
 
         List<AppMenuPermItemResVo> result = new ArrayList<>(menus.size());
         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) {
         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);
             AppMenuPermItemResVo vo = toAppMenuPermItemResVo(m);
             List<KwsMenu> children = buttonsByParent.getOrDefault(m.getId(), Collections.emptyList());
             List<KwsMenu> children = buttonsByParent.getOrDefault(m.getId(), Collections.emptyList());
             List<AppMenuPermItemResVo> btnVos = new ArrayList<>(children.size());
             List<AppMenuPermItemResVo> btnVos = new ArrayList<>(children.size());
             for (KwsMenu c : children) {
             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));
                 btnVos.add(toAppMenuPermItemResVo(c));
             }
             }
             vo.setButtons(btnVos);
             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));
+    }
+}

+ 5 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ComeIntoHandler.java

@@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.exception.BusinessPlatfromException;
-import com.sckw.core.model.enums.CarWaybillV1Enum;
-import com.sckw.core.model.enums.ForkliftStatusEnum;
-import com.sckw.core.model.enums.GatekeeperStatusEnum;
-import com.sckw.core.model.enums.LoadingTypeEnum;
+import com.sckw.core.model.enums.*;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.utils.StringUtils;
@@ -172,7 +169,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
                 forkliftWaybillOrderRepository.save(forklift);
                 forkliftWaybillOrderRepository.save(forklift);
                 log.debug("铲车司机数据保存成功");
                 log.debug("铲车司机数据保存成功");
             } catch (Exception e) {
             } catch (Exception e) {
-                log.error("异步保存铲车司机数据失败!");
+                throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存铲车司机数据失败!");
             }
             }
         });
         });
     }
     }
@@ -184,7 +181,8 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
      */
      */
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
         log.info("推进门卫数据为已进场:{}", JSON.toJSONString(waybillOrder));
         log.info("推进门卫数据为已进场:{}", JSON.toJSONString(waybillOrder));
-        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository.queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId());
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.LOADING.getCode());
         if (gatekeeper == null) {
         if (gatekeeper == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
         }
         }
@@ -221,7 +219,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
                 waybillOrderWeighbridgeRepository.save(weighbridge);
                 waybillOrderWeighbridgeRepository.save(weighbridge);
                 log.debug("异步保存过磅数据保存成功");
                 log.debug("异步保存过磅数据保存成功");
             } catch (Exception e) {
             } catch (Exception e) {
-                log.error("异步保存过磅数据失败!");
+                throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存过磅数据失败!");
             }
             }
         });
         });
     }
     }

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/EmptyLoadLeaveHandler.java

@@ -6,6 +6,7 @@ import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
@@ -53,7 +54,8 @@ public class EmptyLoadLeaveHandler extends AbstractWaybillOrderHandler<WaybillOr
      * @return
      * @return
      */
      */
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
-        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository.queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId());
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.LOADING.getCode());
         if (gatekeeper == null) {
         if (gatekeeper == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
         }
         }

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LeaveHandler.java

@@ -6,6 +6,7 @@ import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
@@ -53,7 +54,8 @@ public class LeaveHandler extends AbstractWaybillOrderHandler<WaybillOrderLeaveP
      * @return
      * @return
      */
      */
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
-        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository.queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId());
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.LOADING.getCode());
         if (gatekeeper == null) {
         if (gatekeeper == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
         }
         }

+ 7 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LiftRodReleaseHandler.java

@@ -8,6 +8,11 @@ import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.*;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
+import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
+import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.KwtWaybillOrderSubtask;
+import com.sckw.transport.model.KwtWaybillOrderTicket;
 import com.sckw.transport.model.param.WaybillOrderLiftRodReleaseParam;
 import com.sckw.transport.model.param.WaybillOrderLiftRodReleaseParam;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -77,7 +82,8 @@ public class LiftRodReleaseHandler extends AbstractWaybillOrderHandler<WaybillOr
      * @return
      * @return
      */
      */
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder, Boolean isEmptyLoadLeave) {
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder, Boolean isEmptyLoadLeave) {
-        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository.queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId());
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.LOADING.getCode());
         if (gatekeeper == null) {
         if (gatekeeper == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
         }
         }

+ 45 - 47
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ReplenishHandler.java

@@ -56,54 +56,52 @@ public class ReplenishHandler extends AbstractWaybillOrderHandler<WaybillOrderRe
      * @param waybillOrder
      * @param waybillOrder
      */
      */
     private void createForkliftWaybill(KwtWaybillOrder waybillOrder) {
     private void createForkliftWaybill(KwtWaybillOrder waybillOrder) {
-        CompletableFuture.runAsync(() ->{
-            try {
-                log.debug("开始异步保存铲车司机数据,运单ID:{}", waybillOrder.getId());
-
-                KwtForkliftWaybillOrder forklift = new KwtForkliftWaybillOrder();
-                forklift.setFOrderNo("F" + System.currentTimeMillis());
-                forklift.setEntId(waybillOrder.getEntId());
-                forklift.setWOrderId(waybillOrder.getId());
-                forklift.setLOrderId(waybillOrder.getLOrderId());
-
-                //查询字典
-                Map<String, Map<String, String>> dictValueAndDictResDtoMap = remoteSystemService.queryDictByType(
-                        Arrays.asList(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
-                Map<String, String> goodsTypeMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
-                Map<String, String> goodsSpecMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.GOODS_SPEC.getType(), new HashMap<>());
-
-                // 查询商品信息
-                KwtLogisticsOrderGoods orderGoods = logisticsOrderGoodsRepository.queryByLogOrderId(waybillOrder.getLOrderId());
-                KwpGoods goods = goodsInfoService.getGoodsById(orderGoods.getGoodsId());
-                if (goods != null) {
-                    List<SysDictResDto> dictResDtoList = remoteSystemService.queryDictFrontAll(DictTypeEnum.GOODS_SPEC.getType(), goods.getSpec());
-                    forklift.setDictId(CollectionUtils.isNotEmpty(dictResDtoList) ? dictResDtoList.get(0).getId() : -1L);
-                    forklift.setGoodsId(goods.getId());
-                    forklift.setGoodsName(goods.getName()+"/"+goodsTypeMap.getOrDefault(goods.getGoodsType(),"")+"/"+goodsSpecMap.getOrDefault(goods.getSpec(), ""));
-                }
-                forklift.setLoadingType(LoadingTypeEnum.SUPPLEMENT.getCode());
-                forklift.setStatus(ForkliftStatusEnum.PENDING_ORDERS.getCode());
-                forklift.setWaybillAcceptTime(waybillOrder.getCreateTime());
-
-                // 任务量
-                KwtWaybillOrderSubtask waybillSubtask = getWaybillSubtask(waybillOrder.getId());
-                forklift.setEntrustAmount(waybillSubtask.getEntrustAmount());
-                // 车辆类型
-                RTruckVo truckVo = remoteFleetService.findTruckByTruckNo(waybillOrder.getTruckNo());
-                if (truckVo != null) {
-                    forklift.setTruckType(truckVo.getTruckType());
-                    forklift.setCarAxis(truckVo.getCarAxis());
-                }
-                forklift.setCreateTime(new Date());
-                forklift.setCreateUser(waybillOrder.getDriverId());
-                forklift.setUpdateUser(waybillOrder.getDriverId());
-
-                forkliftWaybillOrderRepository.save(forklift);
-                log.debug("铲车司机数据保存成功");
-            } catch (Exception e) {
-                log.error("异步保存铲车司机数据失败!");
+        try {
+            log.debug("开始异步保存铲车司机数据,运单ID:{}", waybillOrder.getId());
+
+            KwtForkliftWaybillOrder forklift = new KwtForkliftWaybillOrder();
+            forklift.setFOrderNo("F" + System.currentTimeMillis());
+            forklift.setEntId(waybillOrder.getEntId());
+            forklift.setWOrderId(waybillOrder.getId());
+            forklift.setLOrderId(waybillOrder.getLOrderId());
+
+            //查询字典
+            Map<String, Map<String, String>> dictValueAndDictResDtoMap = remoteSystemService.queryDictByType(
+                    Arrays.asList(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
+            Map<String, String> goodsTypeMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
+            Map<String, String> goodsSpecMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.GOODS_SPEC.getType(), new HashMap<>());
+
+            // 查询商品信息
+            KwtLogisticsOrderGoods orderGoods = logisticsOrderGoodsRepository.queryByLogOrderId(waybillOrder.getLOrderId());
+            KwpGoods goods = goodsInfoService.getGoodsById(orderGoods.getGoodsId());
+            if (goods != null) {
+                List<SysDictResDto> dictResDtoList = remoteSystemService.queryDictFrontAll(DictTypeEnum.GOODS_SPEC.getType(), goods.getSpec());
+                forklift.setDictId(CollectionUtils.isNotEmpty(dictResDtoList) ? dictResDtoList.get(0).getId() : -1L);
+                forklift.setGoodsId(goods.getId());
+                forklift.setGoodsName(goods.getName()+"/"+goodsTypeMap.getOrDefault(goods.getGoodsType(),"")+"/"+goodsSpecMap.getOrDefault(goods.getSpec(), ""));
             }
             }
-        });
+            forklift.setLoadingType(LoadingTypeEnum.SUPPLEMENT.getCode());
+            forklift.setStatus(ForkliftStatusEnum.PENDING_ORDERS.getCode());
+            forklift.setWaybillAcceptTime(waybillOrder.getCreateTime());
+
+            // 任务量
+            KwtWaybillOrderSubtask waybillSubtask = getWaybillSubtask(waybillOrder.getId());
+            forklift.setEntrustAmount(waybillSubtask.getEntrustAmount());
+            // 车辆类型
+            RTruckVo truckVo = remoteFleetService.findTruckByTruckNo(waybillOrder.getTruckNo());
+            if (truckVo != null) {
+                forklift.setTruckType(truckVo.getTruckType());
+                forklift.setCarAxis(truckVo.getCarAxis());
+            }
+            forklift.setCreateTime(new Date());
+            forklift.setCreateUser(waybillOrder.getDriverId());
+            forklift.setUpdateUser(waybillOrder.getDriverId());
+
+            forkliftWaybillOrderRepository.save(forklift);
+            log.debug("铲车司机数据保存成功");
+        } catch (Exception e) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "保存铲车司机数据失败!");
+        }
     }
     }
 
 
     @Override
     @Override

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/TakingOrderHandler.java

@@ -158,6 +158,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
                     gatekeeper.setGoodsName(orderGoods.getGoodsName());
                     gatekeeper.setGoodsName(orderGoods.getGoodsName());
                 }
                 }
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
+                gatekeeper.setType(GatekeeperTypeEnum.LOADING.getCode());
                 gatekeeper.setStatus(GatekeeperStatusEnum.PENDING_ENTRY.getCode());
                 gatekeeper.setStatus(GatekeeperStatusEnum.PENDING_ENTRY.getCode());
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
                 gatekeeper.setTruckType(truck.getTruckType());
                 gatekeeper.setTruckType(truck.getTruckType());

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtGatekeeperWaybillOrder.java

@@ -58,6 +58,11 @@ public class KwtGatekeeperWaybillOrder implements Serializable {
      */
      */
     private String goodsName;
     private String goodsName;
 
 
+    /**
+     * 门卫类型(1-装货单,2-卸货单)
+     */
+    private Integer type;
+
     /**
     /**
      * 状态(1-待进场,5-已进场、10-待离场、15-空载待离场、20-已放行未离场、25-已离场、30-空载离场)
      * 状态(1-待进场,5-已进场、10-待离场、15-空载待离场、20-已放行未离场、25-已离场、30-空载离场)
      */
      */

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtGatekeeperWaybillOrderRepository.java

@@ -33,10 +33,11 @@ public class KwtGatekeeperWaybillOrderRepository extends ServiceImpl<KwtGatekeep
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId));
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId));
     }
     }
 
 
-    public KwtGatekeeperWaybillOrder queryGatekeeperWaybillOrderByWOrderId(Long wOrderId) {
+    public KwtGatekeeperWaybillOrder queryGatekeeperWaybillOrderByWOrderId(Long wOrderId, Integer type) {
         return getOne(
         return getOne(
                 Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
                 Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
                         .eq(KwtGatekeeperWaybillOrder::getWOrderId, wOrderId)
                         .eq(KwtGatekeeperWaybillOrder::getWOrderId, wOrderId)
+                        .eq(KwtGatekeeperWaybillOrder::getType, type)
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId)
                         .orderByDesc(KwtGatekeeperWaybillOrder::getId)
                         .last("limit 1"));
                         .last("limit 1"));
     }
     }

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

@@ -3727,11 +3727,28 @@ public class KwtLogisticsConsignmentService {
         if (Objects.isNull(kwtLogisticsOrderUnit)) {
         if (Objects.isNull(kwtLogisticsOrderUnit)) {
             throw new BusinessException("未找到承运企业信息");
             throw new BusinessException("未找到承运企业信息");
         }
         }
-        //车牌id去重
+        //过滤停用车辆
         List<DispatchCarReq.CarInfo> carInfos = req.getCarInfos();
         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()
         Set<String> truckIds = carInfos.stream()
                 .map(DispatchCarReq.CarInfo::getTruckId)
                 .map(DispatchCarReq.CarInfo::getTruckId)
                 .collect(Collectors.toSet());
                 .collect(Collectors.toSet());
+
         //查询派车信息
         //查询派车信息
         List<KwtLogisticsOrderCirculate> logisticsOrderCirculates =
         List<KwtLogisticsOrderCirculate> logisticsOrderCirculates =
                 logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckIds(logisticsOrder.getId(), truckIds);
                 logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckIds(logisticsOrder.getId(), truckIds);