Переглянути джерело

feat(order): 添加客户业务负责人和客服支持字段并优化订单状态日志查询

- 在CustomerInfoDTO中新增salesPersonId、serviceStaffId和belongingDepartmentId字段
- 修改OrderMainServiceImpl中使用CustomerInfoDTO替换RemoteCustomerSalesVo获取客户信息
- 在OrderReturnServiceImpl中添加订单退货项目详情查询功能
- 优化OrderStatusLogServiceImpl中的查询逻辑,支持主订单及其子订单的状态日志统一查询
- 实现订单状态日志查询时自动关联查询订单主表及其子订单数据
- 移除原有的按订单ID精确匹配,改为按订单ID列表批量查询方式
hurx 1 місяць тому
батько
коміт
257d2a3d0a

+ 17 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/domain/dto/CustomerInfoDTO.java

@@ -16,10 +16,27 @@ public class CustomerInfoDTO implements Serializable {
 
     private String customerNo;
 
+    /**
+     * 业务负责人
+     */
+    private Long salesPersonId;
+
+    /**
+     * 客服支持
+     */
+    private Long serviceStaffId;
+
+    /**
+     * 所属部门
+     */
+    private Long belongingDepartmentId;
+
     /**
      * 状态(0已审核 待审核)
      */
     private String status;
 
 
+
+
 }

+ 6 - 4
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderMainServiceImpl.java

@@ -24,6 +24,7 @@ import org.dromara.customer.api.RemoteCustomerSalesService;
 import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.customer.api.RemotePartnerInfoService;
 import org.dromara.customer.api.RemoteSupplierInfoService;
+import org.dromara.customer.api.domain.dto.CustomerInfoDTO;
 import org.dromara.customer.api.domain.vo.RemoteCustomerSalesVo;
 import org.dromara.external.api.zhongche.RemoteZhongChePullService;
 import org.dromara.external.api.zhongche.domain.bo.OrderConfirmBo;
@@ -576,6 +577,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long insertOrder(PcSubmitOrderBo bo, OrderMainBo mainBo) {
+        CustomerInfoDTO customerInfoDTO = remoteCustomerService.selectCustomerInfoById(mainBo.getCustomerId());
         RemoteCustomerSalesVo remoteCustomerSalesVo = remoteCustomerSalesService.selectCustomerSalesInfoByCustomerId(mainBo.getCustomerId());
 
         LoginUser userInfo = remoteUserService.getUserInfo(mainBo.getUserId(), "000000");
@@ -585,10 +587,10 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
                 mainBo.setCreateDept(userInfo.getDeptId());
             }
         }
-        if (null != remoteCustomerSalesVo) {
-            Long salesPersonId = remoteCustomerSalesVo.getSalesPersonId();//销售人员id
-            Long serviceStaffId = remoteCustomerSalesVo.getServiceStaffId();//服务人员
-            Long belongingDepartmentId = remoteCustomerSalesVo.getBelongingDepartmentId();//所属部门
+        if (null != customerInfoDTO) {
+            Long salesPersonId = customerInfoDTO.getSalesPersonId();//销售人员id
+            Long serviceStaffId = customerInfoDTO.getServiceStaffId();//服务人员
+            Long belongingDepartmentId = customerInfoDTO.getBelongingDepartmentId();//所属部门
             Set<Long> staffIds = new HashSet<>();
             Set<Long> deptIds = new HashSet<>();
 

+ 8 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderReturnServiceImpl.java

@@ -20,6 +20,7 @@ import org.dromara.order.domain.OrderReturnItem;
 import org.dromara.order.domain.OrderReturnPickCrrc;
 import org.dromara.order.domain.bo.OrderReturnBo;
 import org.dromara.order.domain.bo.OrderReturnItemBo;
+import org.dromara.order.domain.vo.OrderReturnItemVo;
 import org.dromara.order.domain.vo.OrderReturnVo;
 import org.dromara.order.mapper.OrderReturnItemMapper;
 import org.dromara.order.mapper.OrderReturnMapper;
@@ -136,6 +137,13 @@ public class OrderReturnServiceImpl extends ServiceImpl<OrderReturnMapper, Order
         if (CollUtil.isNotEmpty(records)) {
             Set<Long> customerIds = records.stream().map(OrderReturnVo::getCustomerId).collect(Collectors.toSet());
             Map<Long, String> customerMap = remoteCustomerService.selectCustomerNameByIds(customerIds);
+            List<OrderReturnItemVo> orderReturnItemList=null;
+            for (OrderReturnVo record : records) {
+                orderReturnItemList=orderReturnItemMapper.selectVoList(new LambdaQueryWrapper<OrderReturnItem>()
+                    .eq(OrderReturnItem::getReturnId, record.getId()));
+                record.setOrderReturnItemList(orderReturnItemList);
+            }
+
             records.forEach(vo -> {
                 vo.setCustomerName(customerMap.get(vo.getCustomerId()));
             });

+ 44 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderStatusLogServiceImpl.java

@@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.order.domain.OrderMain;
+import org.dromara.order.domain.vo.OrderMainVo;
+import org.dromara.order.mapper.OrderMainMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.order.domain.bo.OrderStatusLogBo;
 import org.dromara.order.domain.vo.OrderStatusLogVo;
@@ -17,9 +20,11 @@ import org.dromara.order.domain.OrderStatusLog;
 import org.dromara.order.mapper.OrderStatusLogMapper;
 import org.dromara.order.service.IOrderStatusLogService;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 订单状态流转记录Service业务层处理
@@ -34,6 +39,8 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
 
     private final OrderStatusLogMapper baseMapper;
 
+    private final OrderMainMapper orderMainMapper;
+
     /**
      * 查询订单状态流转记录
      *
@@ -54,11 +61,16 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
      */
     @Override
     public TableDataInfo<OrderStatusLogVo> queryPageList(OrderStatusLogBo bo, PageQuery pageQuery) {
+
         LambdaQueryWrapper<OrderStatusLog> lqw = buildQueryWrapper(bo);
+
         Page<OrderStatusLogVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+
         return TableDataInfo.build(result);
     }
 
+
+
     /**
      * 查询符合条件的订单状态流转记录列表
      *
@@ -74,9 +86,40 @@ public class OrderStatusLogServiceImpl extends ServiceImpl<OrderStatusLogMapper,
     private LambdaQueryWrapper<OrderStatusLog> buildQueryWrapper(OrderStatusLogBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<OrderStatusLog> lqw = Wrappers.lambdaQuery();
+        // 核心逻辑:处理主订单ID,查询其关联的所有子订单日志
+        // ==========================================
+        if (null != bo.getOrderId()) {
+            // 1. 查询订单主表信息 (注意:这里会产生一次数据库查询)
+            OrderMainVo orderMainVo = orderMainMapper.selectVoById(bo.getOrderId());
+
+            if (null != orderMainVo) {
+                List<Long> targetOrderIds = new ArrayList<>();
+
+                // 2. 加入自身ID (兼容传入的是子单ID的情况,确保能查到当前单的数据)
+                targetOrderIds.add(orderMainVo.getId());
+
+                // 3. 查询该订单下的所有子订单
+                List<OrderMain> subOrderList = orderMainMapper.selectList(
+                    new LambdaQueryWrapper<OrderMain>()
+                        .eq(OrderMain::getParentOrderId, orderMainVo.getId())
+                );
+
+                // 4. 如果有子订单,将子订单ID加入列表
+                if (subOrderList != null && !subOrderList.isEmpty()) {
+                    List<Long> subOrderIds = subOrderList.stream()
+                        .map(OrderMain::getId)
+                        .collect(Collectors.toList());
+                    targetOrderIds.addAll(subOrderIds);
+                }
+
+                // 5. 构建 IN 查询条件
+                // 这一步会替代原本的 eq("order_id", ...) 逻辑
+                lqw.in(OrderStatusLog::getOrderId, targetOrderIds);
+            }
+        }
         lqw.orderByAsc(OrderStatusLog::getId);
         lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), OrderStatusLog::getOrderNo, bo.getOrderNo());
-        lqw.eq(bo.getOrderId() != null, OrderStatusLog::getOrderId, bo.getOrderId());
+//        lqw.eq(bo.getOrderId() != null, OrderStatusLog::getOrderId, bo.getOrderId());
         lqw.eq(StringUtils.isNotBlank(bo.getCustomerNo()), OrderStatusLog::getCustomerNo, bo.getCustomerNo());
         lqw.eq(bo.getCustomerId() != null, OrderStatusLog::getCustomerId, bo.getCustomerId());
         lqw.eq(StringUtils.isNotBlank(bo.getDeliverMethod()), OrderStatusLog::getDeliverMethod, bo.getDeliverMethod());