Bladeren bron

feat(external): 新增项目名称批量查询功能并优化订单数据源显示

- 在 IExternalItemService 中新增 selectItemNameByItemKeys 方法用于批量查询项目名称
- 实现 ExternalItemServiceImpl 的 selectItemNameByItemKeys 方法支持按 key 集合查询
- 通过 Dubbo 服务暴露 RemoteExternalItemService 的项目名称查询功能
- 在 OrderMainServiceImpl 中注入 RemoteExternalItemService 并用于显示数据源名称
- 为 OrderMainVo 添加 dataSourceStr 字段存储所属项目名称
- 修复订单主表服务中的数据源名称回显逻辑
- 调整订单状态更新时的数据源判断条件
- 格式化代码缩进和空格
- 新增物流公司查询接口和实现
- 添加第三方物流公司查询控制器方法
hurx 7 uur geleden
bovenliggende
commit
6886bea265

+ 6 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/service/RemoteExternalItemService.java

@@ -2,6 +2,9 @@ package org.dromara.external.api.service;
 
 import org.dromara.external.api.domain.ExternalItemDto;
 
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @author
  * @date 2026/3/27 上午12:30
@@ -11,4 +14,7 @@ public interface RemoteExternalItemService {
     * 获取项目信息
     * */
     ExternalItemDto getItemInfo(Long itemId);
+
+    /*批量根据项目key查询项目名称*/
+    Map<String, String> selectItemNameByItemKeys(Set<String> itemKeys);
 }

+ 2 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteComLogisticsCompanyService.java

@@ -21,4 +21,6 @@ public interface RemoteComLogisticsCompanyService {
     * 通过名称获取id
     * */
     RemoteLogisticsCompanyVo selectLogisticsCompanyByName(String name);
+
+    List<RemoteLogisticsCompanyVo> selectLogisticsCompanyList();
 }

+ 18 - 4
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/thirdparty/ThirdpartyCommonController.java

@@ -1,16 +1,17 @@
 package org.dromara.external.controller.thirdparty;
 
+import cn.hutool.core.bean.BeanUtil;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.domain.R;
 import org.dromara.external.api.thirdparty.domain.bo.ThirdpartyProductBrandBo;
 import org.dromara.external.api.thirdparty.domain.bo.ThirdpartyProductUnitBo;
-import org.dromara.external.api.thirdparty.domain.dto.ThirdpartyAreaDto;
-import org.dromara.external.api.thirdparty.domain.dto.ThirdpartyProductBrandDto;
-import org.dromara.external.api.thirdparty.domain.dto.ThirdpartyProductCateDto;
-import org.dromara.external.api.thirdparty.domain.dto.ThirdpartyProductUnitDto;
+import org.dromara.external.api.thirdparty.domain.dto.*;
+import org.dromara.system.api.RemoteComLogisticsCompanyService;
+import org.dromara.system.api.domain.vo.RemoteLogisticsCompanyVo;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -30,6 +31,9 @@ import java.util.List;
 @RequestMapping("/api/thirdparty")
 public class ThirdpartyCommonController {
 
+    @DubboReference
+    private RemoteComLogisticsCompanyService remoteComLogisticsCompanyService;
+
     /**
      * 获取区域地址
      */
@@ -69,4 +73,14 @@ public class ThirdpartyCommonController {
         // TODO: 实现产品单位查询逻辑
         return R.ok();
     }
+
+    /**
+     * 物流公司查询
+     */
+    @Operation(summary = "物流公司查询")
+    @PostMapping("/system/getLogisticsCompany")
+    public R<List<ThirdpartyLogisticsCompanyDto>> getLogisticsCompany() {
+        List<RemoteLogisticsCompanyVo> remoteLogisticsCompanyVos = remoteComLogisticsCompanyService.selectLogisticsCompanyList();
+        return R.ok(BeanUtil.copyToList(remoteLogisticsCompanyVos, ThirdpartyLogisticsCompanyDto.class));
+    }
 }

+ 8 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/dubbo/RemoteExternalItemServiceImpl.java

@@ -11,6 +11,9 @@ import org.dromara.external.domain.vo.ExternalItemVo;
 import org.dromara.external.service.IExternalItemService;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @author
  * @date 2026/1/14 下午5:02
@@ -36,4 +39,9 @@ public class RemoteExternalItemServiceImpl implements RemoteExternalItemService
         }
         return BeanUtil.toBean(externalItemVo, ExternalItemDto.class);
     }
+
+    @Override
+    public Map<String, String> selectItemNameByItemKeys(Set<String> itemKeys) {
+        return externalItemService.selectItemNameByItemKeys(itemKeys);
+    }
 }

+ 5 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/IExternalItemService.java

@@ -9,6 +9,8 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * 第三方对接项目管理Service接口
@@ -67,4 +69,7 @@ public interface IExternalItemService extends IService<ExternalItem>{
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /*批量根据项目key查询项目名称*/
+    Map<String, String> selectItemNameByItemKeys(Set<String> itemKeys);
 }

+ 16 - 3
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/impl/ExternalItemServiceImpl.java

@@ -23,9 +23,10 @@ import org.dromara.external.domain.ExternalItem;
 import org.dromara.external.mapper.ExternalItemMapper;
 import org.dromara.external.service.IExternalItemService;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import cn.hutool.core.collection.CollUtil;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 第三方对接项目管理Service业务层处理
@@ -159,4 +160,16 @@ public class ExternalItemServiceImpl  extends ServiceImpl<ExternalItemMapper, Ex
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    @Override
+    public Map<String, String> selectItemNameByItemKeys(Set<String> itemKeys) {
+        if (CollUtil.isEmpty(itemKeys)) {
+            return Collections.emptyMap();
+        }
+        return baseMapper.selectList(Wrappers.lambdaQuery(ExternalItem.class)
+                .in(ExternalItem::getItemKey, itemKeys)
+                .select(ExternalItem::getItemKey, ExternalItem::getItemName))
+            .stream()
+            .collect(Collectors.toMap(ExternalItem::getItemKey, ExternalItem::getItemName, (k1, k2) -> k1));
+    }
 }

+ 5 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderMainVo.java

@@ -482,4 +482,9 @@ public class OrderMainVo implements Serializable {
      */
     private String assigneeName;
 
+    /**
+     * 所属项目名称
+     */
+    private String dataSourceStr;
+
 }

+ 20 - 10
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -27,6 +27,7 @@ import org.dromara.customer.api.*;
 import org.dromara.customer.api.domain.dto.CustomerInfoDTO;
 import org.dromara.customer.api.domain.vo.RemoteCustomerContactVo;
 import org.dromara.customer.api.domain.vo.RemoteCustomerSalesVo;
+import org.dromara.external.api.service.RemoteExternalItemService;
 import org.dromara.external.api.tongji.RemoteTongJiPullService;
 import org.dromara.external.api.zhongche.RemoteZhongChePullService;
 import org.dromara.external.api.zhongche.domain.bo.OrderConfirmBo;
@@ -115,6 +116,9 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     @DubboReference
     private RemoteProductService remoteProductService;
 
+    @DubboReference
+    private RemoteExternalItemService remoteExternalItemService;
+
     private final IOrderCustomerFlowLinkService orderCustomerFlowLinkService;
 
     private final IOrderCustomerFlowNodeLinkService orderCustomerFlowNodeLinkService;
@@ -161,7 +165,10 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
         if (orderMainVo == null) {
             return null;
         }
-
+        if (StringUtils.isNotBlank(orderMainVo.getDataSource())) {
+            Map<String, String> dataSourceMap = remoteExternalItemService.selectItemNameByItemKeys(Set.of(orderMainVo.getDataSource()));
+            orderMainVo.setDataSourceStr(dataSourceMap.get(orderMainVo.getDataSource()));
+        }
         // 2. 查询关联的商品列表--并且查询商品已发货数量与未发货数量
         List<OrderProductVo> orderProductVoList = orderProductMapper.selectProductsWithDelivered(orderMainVo.getId());
         if (orderProductVoList != null && !orderProductVoList.isEmpty()) {
@@ -321,16 +328,18 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             Set<Long> createUserIds = records.stream().map(OrderMainVo::getCreateBy).collect(Collectors.toSet());
             Set<Long> createDeptIds = records.stream().map(OrderMainVo::getCreateDept).collect(Collectors.toSet());
             Set<Long> orderIds = records.stream().map(OrderMainVo::getParentOrderId).filter(Objects::nonNull).collect(Collectors.toSet());
-
+            Set<String> dataSources = records.stream().map(OrderMainVo::getDataSource).filter(Objects::nonNull).collect(Collectors.toSet());
             Map<Long, String> UserMap = remoteUserService.selectUserNamesByIds(createUserIds.stream().toList());
             Map<Long, String> deptMap = remoteDeptService.selectDeptNameByIds(createDeptIds);
             Map<Long, String> customerMap = remoteCustomerService.selectCustomerNameByIds(customerIds);
+            Map<String, String> dataSourceMap = remoteExternalItemService.selectItemNameByItemKeys(dataSources);
             Map<Long, String> orderNoMap = selectOrderNoByIds(orderIds);
             records.forEach(orderMainVo -> {
                 orderMainVo.setProjectOrderNo(orderNoMap.get(orderMainVo.getParentOrderId()));
                 orderMainVo.setCreateName(UserMap.get(orderMainVo.getCreateBy()));
                 orderMainVo.setCreateDeptName(deptMap.get(orderMainVo.getCreateDept()));
                 orderMainVo.setCustomerName(customerMap.get(orderMainVo.getCustomerId()));
+                orderMainVo.setDataSourceStr(dataSourceMap.get(orderMainVo.getDataSource()));
             });
         }
         return TableDataInfo.build(result);
@@ -1111,11 +1120,12 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
      */
     @Override
     public int updateStatus(OrderMainBo bo) {
+        OrderMainVo orderMainVo = baseMapper.selectVoById(bo.getId());
         OrderMain order = new OrderMain();
         order.setId(bo.getId());
         order.setOrderStatus(bo.getOrderStatus());
         //如果是项目订单取消则要调用拒单
-        if (Objects.equals("7", bo.getOrderStatus())) {
+        if (ObjectUtils.isNotEmpty(orderMainVo.getDataSource()) && Objects.equals("7", bo.getOrderStatus())) {
             this.reject(bo.getId(), "取消订单");
         }
         return baseMapper.updateById(order);
@@ -1300,12 +1310,12 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
         }
         String crrcOrderNo = ext.getCrrcOrderNo();
         OrderConfirmBo bo = new OrderConfirmBo(crrcOrderNo, orderNo);
-        if ("zhongche".equals(orderMain.getDataSource())  ) {
+        if ("zhongche".equals(orderMain.getDataSource())) {
             GoodsUpdateVo goodsUpdateVo = zhongChePullService.mallOrderConfirm(bo);
             if (goodsUpdateVo.getResult() != 1) {
                 throw new ZhongcheException("中车订单扩展信息不存在");
             }
-        }else if ("tongji".equals(orderMain.getDataSource())  ) {
+        } else if ("tongji".equals(orderMain.getDataSource())) {
             GoodsUpdateVo goodsUpdateVo = tongJiPullService.mallOrderConfirm(bo);
             if (goodsUpdateVo.getResult() != 1) {
                 throw new ZhongcheException("同济订单扩展信息不存在");
@@ -1343,13 +1353,13 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             throw new ZhongcheException("订单扩展信息不存在");
         }
         String crrcOrderNo = ext.getCrrcOrderNo();
-        if ("zhongche".equals(orderMain.getDataSource())  ) {
+        if ("zhongche".equals(orderMain.getDataSource())) {
             OrderRejectBo bo = new OrderRejectBo(crrcOrderNo, orderNo, reason);
             GoodsUpdateVo goodsUpdateVo = zhongChePullService.mallOrderReject(bo);
             if (goodsUpdateVo.getResult() != 1) {
                 throw new ZhongcheException("拒绝失败");
             }
-        }else if ("tongji".equals(orderMain.getDataSource())  ) {
+        } else if ("tongji".equals(orderMain.getDataSource())) {
             OrderRejectBo bo = new OrderRejectBo(crrcOrderNo, orderNo, reason);
             GoodsUpdateVo goodsUpdateVo = tongJiPullService.mallOrderReject(bo);
             if (goodsUpdateVo.getResult() != 1) {
@@ -2474,7 +2484,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     }
 
     private List<PurchaseDetailVo.StatItem> buildStatData(String orderCount, String productCount,
-                                                           String brandCount, String categoryCount) {
+                                                          String brandCount, String categoryCount) {
         List<PurchaseDetailVo.StatItem> list = new ArrayList<>();
         list.add(new PurchaseDetailVo.StatItem().setValue(orderCount).setLabel("购买数量(件)"));
         list.add(new PurchaseDetailVo.StatItem().setValue(productCount).setLabel("商品数量(件)"));
@@ -2484,8 +2494,8 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     }
 
     private List<PurchaseDetailVo.AfterSaleItem> buildAfterSaleData(String afterSaleCount, String avgDays,
-                                                                     String ratio, List<Integer> data1,
-                                                                     List<Integer> data2, List<Integer> data3) {
+                                                                    String ratio, List<Integer> data1,
+                                                                    List<Integer> data2, List<Integer> data3) {
         List<PurchaseDetailVo.AfterSaleItem> list = new ArrayList<>();
         list.add(new PurchaseDetailVo.AfterSaleItem()
             .setLabel("售后商品数量(件)").setValue(afterSaleCount)

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteComLogisticsCompanyServiceImpl.java

@@ -68,4 +68,12 @@ public class RemoteComLogisticsCompanyServiceImpl implements RemoteComLogisticsC
         );
         return ObjectUtil.isEmpty(one) ? null : BeanUtil.toBean(one, RemoteLogisticsCompanyVo.class);
     }
+
+    /*
+    * 查询物流公司列表*/
+    @Override
+    public List<RemoteLogisticsCompanyVo> selectLogisticsCompanyList() {
+        List<ComLogisticsCompany> list = comLogisticsCompanyService.list();
+        return BeanUtil.copyToList(list, RemoteLogisticsCompanyVo.class);
+    }
 }