Prechádzať zdrojové kódy

feat(order): 增加客户和营销类型订单分配功能

- 引入RemoteCustomerService远程服务用于客户信息查询
- 添加客户类型和营销类型的分配逻辑处理
- 实现客户名称批量查询映射功能
- 更新订单分配验证规则支持营销类型
- 优化子订单分配字段设置逻辑
- 扩展订单主服务中的客户和营销类型处理
hurx 12 hodín pred
rodič
commit
81cfa92a53

+ 22 - 7
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderAssignmentServiceImpl.java

@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.redis.utils.SequenceUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.customer.api.RemotePartnerInfoService;
 import org.dromara.customer.api.RemotePartnerPreparedService;
 import org.dromara.customer.api.RemoteSupplierInfoService;
@@ -62,6 +63,9 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
     @DubboReference
     private RemoteSupplierInfoService remoteSupplierInfoService;
 
+    @DubboReference
+    private RemoteCustomerService remoteCustomerService;
+
     @DubboReference
     private RemoteUserService remoteUserService;
 
@@ -99,7 +103,11 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
         List<OrderAssignmentVo> records = result.getRecords();
         if (CollUtil.isNotEmpty(records)) {
             Set<Long> createUserIds = records.stream().map(OrderAssignmentVo::getCreateBy).collect(Collectors.toSet());
-
+            Set<Long> customerIds = records.stream()
+                .filter(r -> AssigneeTypeConstants.CUSTOMER.getCode().equals(r.getAssigneeType())||AssigneeTypeConstants.MKT.getCode().equals(r.getAssigneeType()))
+                .map(OrderAssignmentVo::getAssigneeId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
 
             Set<Long> partnerIds = records.stream()
                 .filter(r -> AssigneeTypeConstants.PARTNER.getCode().equals(r.getAssigneeType()))
@@ -120,6 +128,7 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
                 .collect(Collectors.toSet());
             // 批量查询名称
             Map<Long, String> createUserNameMap = remoteUserService.selectUserNamesByIds(createUserIds.stream().toList());
+            Map<Long, String> customerNameMap = remoteCustomerService.selectCustomerNameByIds(customerIds);
             Map<Long, String> partnerNameMap = remotePartnerInfoService.selectPartnerNameByIds(partnerIds);
             Map<Long, String> supplierNameMap = remoteSupplierInfoService.selectSupplierNameByIds(supplierIds);
             Map<Long, String> preparedOrderNoMap = remotePartnerPreparedService.selectPreparedOrderNoByIds(preparedOrderIds);
@@ -139,6 +148,8 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
                     name = partnerNameMap.get(assigneeId);
                 } else if (AssigneeTypeConstants.SUPPLIER.getCode().equals(assigneeType)) {
                     name = supplierNameMap.get(assigneeId);
+                }else if (AssigneeTypeConstants.CUSTOMER.getCode().equals(assigneeType)||AssigneeTypeConstants.MKT.getCode().equals(assigneeType)) {
+                    name = customerNameMap.get(assigneeId);
                 }
                 record.setAssigneeName(name);
                 record.setCreateName(createUserNameMap.get(record.getCreateBy()));
@@ -301,13 +312,13 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
                 !AssigneeTypeConstants.MKT.getCode().equals(type)) {
                 throw new ServiceException("分配对象类型不支持: " + type);
             }
-            // 校验:srm和bp必须有assigneeId,zy和mkt不能有assigneeId
-            if (("srm".equals(type) || "bp".equals(type)) && rule.getAssigneeId() == null) {
+            // 校验:srm和bp mkt必须有assigneeId  2026/06/11刘洋刘总提出 伙伴商管理平台分配自营客户时要改为必须选择某一个自营客户(之前他确认的时选择自营时不需要选择客户)
+            if (("srm".equals(type) || "bp".equals(type)|| "mkt".equals(type)) && rule.getAssigneeId() == null) {
                 throw new ServiceException("分配类型为 [" + type + "] 时,必须指定分配对象ID");
             }
-            if (("zy".equals(type) || "mkt".equals(type)) && rule.getAssigneeId() != null) {
+           /* if (("zy".equals(type) ) && rule.getAssigneeId() != null) {
                 throw new ServiceException("分配类型为 [" + type + "] 时,不能指定分配对象ID");
-            }
+            }*/
         }
 
         // 3. 按 (assigneeId, assigneeType) 分组
@@ -609,9 +620,13 @@ public class OrderAssignmentServiceImpl extends ServiceImpl<OrderAssignmentMappe
         child.setPaymentStatus(parent.getPaymentStatus());
         child.setOrderType(parent.getOrderType());
         // 新增分配字段
-        child.setAssigneeId(assigneeId);
-        child.setAssigneeType(assigneeType);
 
+        child.setAssigneeType(assigneeType);
+        if (assigneeType.equals(AssigneeTypeConstants.CUSTOMER.getCode())){
+            child.setAssigneeId(parent.getAssigneeId());
+        }else {
+            child.setAssigneeId(assigneeId);
+        }
         // 子订单状态初始化
         child.setSplitStatus(OrderSplitStatus.WAIT_SPLIT.getCode()); // 子订单默认未拆
 

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

@@ -211,7 +211,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
                     if (childOrder.getAssigneeId() == null) continue;
 
                     String type = childOrder.getAssigneeType();
-                    if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type)) {
+                    if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type) || AssigneeTypeConstants.MKT.getCode().equals(type)) {
                         customerIds.add(childOrder.getAssigneeId());
                     } else if (AssigneeTypeConstants.SUPPLIER.getCode().equals(type)) {
                         supplierIds.add(childOrder.getAssigneeId());
@@ -244,7 +244,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
                             String assigneeName = null;
                             String type = childOrder.getAssigneeType();
 
-                            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type)) {
+                            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type) || AssigneeTypeConstants.MKT.getCode().equals(type)) {
                                 assigneeName = customerNameMap.get(childOrder.getAssigneeId());
                             } else if (AssigneeTypeConstants.SUPPLIER.getCode().equals(type)) {
                                 assigneeName = supplierNameMap.get(childOrder.getAssigneeId());
@@ -263,7 +263,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             List<Long> supplierIds = new ArrayList<>();
             List<Long> partnerIds = new ArrayList<>();
             String type = orderAssignment.getAssigneeType();
-            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type)) {
+            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type) || AssigneeTypeConstants.MKT.getCode().equals(type)) {
                 customerIds.add(orderAssignment.getAssigneeId());
             } else if (AssigneeTypeConstants.SUPPLIER.getCode().equals(type)) {
                 supplierIds.add(orderAssignment.getAssigneeId());
@@ -285,7 +285,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
             }
             orderMainVo.setAssigneeRemark(orderAssignment.getRemark());
             String assigneeName = null;
-            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type)) {
+            if (AssigneeTypeConstants.CUSTOMER.getCode().equals(type) || AssigneeTypeConstants.MKT.getCode().equals(type)) {
                 assigneeName = customerNameMap.get(orderAssignment.getAssigneeId());
             } else if (AssigneeTypeConstants.SUPPLIER.getCode().equals(type)) {
                 assigneeName = supplierNameMap.get(orderAssignment.getAssigneeId());