Преглед изворни кода

feat(product): 优化产品模块功能并修复订单流程相关问题

- 修改产品性质字段为产品经理,并更新相关VO和BO类
- 添加背景颜色和悬停颜色字段到PC装修页面相关类
- 调整PC装修页面服务接口返回类型,从Boolean改为具体实体类
- 在IndexProductController中新增获取品牌详情接口和调整商品程序产品列表返回类型
- 修复订单流程初始化方法返回类型,从void改为Boolean并添加事务注解
- 将订单流程中的handlerId字段从Long类型改为String类型
- 在系统控制器中为搜索标题添加排序功能
- 添加编号生成工具类NumberGeneratorUtil用于处理前导零格式
- 优化产品品牌查询逻辑,修复分类筛选功能
- 添加获取当前用户可审核订单ID和订单流程节点列表接口
- 在产品详情中添加库存信息和收藏状态标识
- 修复产品程序商品列表按品牌ID分组逻辑
- 添加更新时间字段到产品基础VO类
- 在远程客户服务中添加查询联系人ID和公司名称的方法
肖路 пре 1 месец
родитељ
комит
78f574fae5
36 измењених фајлова са 388 додато и 69 уклоњено
  1. 10 0
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteCustomerService.java
  2. 1 1
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/ProductVo.java
  3. 93 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NumberGeneratorUtil.java
  4. 2 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/ContractSupplyProductVo.java
  5. 31 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteCustomerServiceImpl.java
  6. 1 1
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/domain/vo/ExternalProductVo.java
  7. 4 4
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/MallDiyPcPageController.java
  8. 8 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/MallDiyPcPage.java
  9. 8 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/MallDiyPcPageBo.java
  10. 8 0
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/MallDiyPcPageVo.java
  11. 2 2
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IMallDiyPcPageService.java
  12. 4 4
      ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/MallDiyPcPageServiceImpl.java
  13. 46 3
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderController.java
  14. 1 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderFlowController.java
  15. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowLink.java
  16. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowNode.java
  17. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowNodeLink.java
  18. 2 2
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowLinkBo.java
  19. 2 2
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowNodeBo.java
  20. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowNodeLinkBo.java
  21. 2 2
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowLinkVo.java
  22. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowNodeLinkVo.java
  23. 2 2
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowNodeVo.java
  24. 1 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderCustomerFlowService.java
  25. 6 4
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/impl/OrderCustomerFlowServiceImpl.java
  26. 9 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/IndexProductController.java
  27. 8 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/PcProductBo.java
  28. 12 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseBo.java
  29. 20 3
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/PcProductVo.java
  30. 6 2
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseVo.java
  31. 1 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/IProductBaseService.java
  32. 54 4
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java
  33. 24 22
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBrandServiceImpl.java
  34. 1 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/IndexSystemController.java
  35. 9 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
  36. 5 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/UserInfoVo.java

+ 10 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteCustomerService.java

@@ -24,6 +24,16 @@ public interface RemoteCustomerService {
      */
     Long selectCustomerIdByUserId(Long userId);
 
+    /**
+    * 根据userId查询联系人id
+    * */
+    Long selectContactIdByUserId(Long userId);
+
+    /**
+    * 根据客户id查询公司名称
+    * */
+    String selectCompanyNameByCustomerId(Long customerId);
+
     /**
      * 新增收货人
      */

+ 1 - 1
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/ProductVo.java

@@ -289,7 +289,7 @@ public class ProductVo implements Serializable {
     private BigDecimal estimatedPurchasePrice;
 
     /**
-     * 产品性质
+     * 产品经理
      */
     private String productNature;
 

+ 93 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NumberGeneratorUtil.java

@@ -0,0 +1,93 @@
+package org.dromara.common.core.utils;
+
+/**
+ * 根据已有的编号生成 +1 的编号
+ * 支持保持前导零格式,如:00001 -> 00002
+ * @author 
+ * @date 2026/3/12 下午 6:32
+ */
+public class NumberGeneratorUtil {
+    
+    /**
+     * 根据已有的编号生成 +1 的编号
+     * 保持原始编号的位数和前导零格式
+     *
+     * @param number 原始编号
+     * @return 递增后的编号
+     */
+    public static String generateNumber(String number) {
+        if (number == null || number.length() == 0) {
+            return "1";
+        }
+        
+        // 去除前后空格
+        number = number.trim();
+        
+        // 验证是否为纯数字
+        if (!number.matches("\\d+")) {
+            throw new IllegalArgumentException("编号必须为数字,当前值:" + number);
+        }
+        
+        // 记录原始长度和前导零数量
+        int originalLength = number.length();
+        int leadingZeros = 0;
+        for (char c : number.toCharArray()) {
+            if (c == '0') {
+                leadingZeros++;
+            } else {
+                break;
+            }
+        }
+        
+        // 解析并递增数值
+        long num = Long.parseLong(number);
+        num++;
+        
+        // 转换为字符串
+        String result = String.valueOf(num);
+        
+        // 如果结果长度小于原始长度,补充前导零
+        if (result.length() < originalLength) {
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < originalLength - result.length(); i++) {
+                sb.append('0');
+            }
+            sb.append(result);
+            return sb.toString();
+        }
+        
+        // 如果发生进位导致长度增加(如 999 -> 1000),直接返回结果
+        return result;
+    }
+    
+    /**
+     * 根据指定的前缀和编号生成带前缀的编号
+     *
+     * @param prefix 前缀
+     * @param number 数字部分
+     * @return 带前缀的编号
+     */
+    public static String generateNumberWithPrefix(String prefix, String number) {
+        String incrementedNumber = generateNumber(number);
+        return (prefix != null ? prefix : "") + incrementedNumber;
+    }
+    
+    /**
+     * 批量生成指定数量的连续编号
+     *
+     * @param startNumber 起始编号
+     * @param count 生成数量
+     * @return 编号列表
+     */
+    public static java.util.List<String> generateNumbers(String startNumber, int count) {
+        java.util.List<String> results = new java.util.ArrayList<>();
+        String currentNumber = startNumber;
+        
+        for (int i = 0; i < count; i++) {
+            currentNumber = generateNumber(currentNumber);
+            results.add(currentNumber);
+        }
+        
+        return results;
+    }
+}

+ 2 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/ContractSupplyProductVo.java

@@ -392,9 +392,9 @@ public class ContractSupplyProductVo {
     private BigDecimal estimatedPurchasePrice;
 
     /**
-     * 产品性质
+     * 产品经理
      */
-    @ExcelProperty(value = "产品性质")
+    @ExcelProperty(value = "产品经理")
     private String productNature;
 
     /**

+ 31 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteCustomerServiceImpl.java

@@ -81,6 +81,37 @@ public class RemoteCustomerServiceImpl implements RemoteCustomerService {
         return null;
     }
 
+    /**
+     * 根据userId查询联系人id
+     *
+     * @param userId
+     */
+    @Override
+    public Long selectContactIdByUserId(Long userId) {
+        CustomerContact one = customerContactService.getOne(Wrappers.lambdaQuery(CustomerContact.class)
+            .eq(CustomerContact::getUserId, userId)
+            .last("limit 1")
+        );
+        if (one != null) {
+            return one.getId();
+        }
+        return null;
+    }
+
+    /**
+     * 根据用户id查询客户名称
+     *
+     * @param customerId
+     */
+    @Override
+    public String selectCompanyNameByCustomerId(Long customerId) {
+        CustomerInfo customerInfo = customerInfoService.getById(customerId);
+        if (customerInfo != null) {
+            return customerInfo.getCompanyName();
+        }
+        return "";
+    }
+
     @Override
     public CustomerInfoDTO addReceiver(String name, String email) {
         CustomerInfo customerInfo = new CustomerInfo();

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/domain/vo/ExternalProductVo.java

@@ -345,7 +345,7 @@ public class ExternalProductVo implements Serializable {
     private java.math.BigDecimal estimatedPurchasePrice;
 
     /**
-     * 产品性质
+     * 产品经理
      */
     private String productNature;
 

+ 4 - 4
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/controller/MallDiyPcPageController.java

@@ -80,7 +80,7 @@ public class MallDiyPcPageController extends BaseController {
     @Log(title = "pc装修页面", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody MallDiyPcPageBo bo) {
+    public R<MallDiyPcPage> add(@Validated(AddGroup.class) @RequestBody MallDiyPcPageBo bo) {
         if(Objects.equals(bo.getIsHome(), 1)){
             if(ObjectUtil.isEmpty(bo.getSiteId())){
                 mallDiyPcPageService.update(Wrappers.<MallDiyPcPage>lambdaUpdate()
@@ -94,7 +94,7 @@ public class MallDiyPcPageController extends BaseController {
 
 
         }
-        return toAjax(mallDiyPcPageService.insertByBo(bo));
+        return R.ok(mallDiyPcPageService.insertByBo(bo));
     }
 
     /**
@@ -104,7 +104,7 @@ public class MallDiyPcPageController extends BaseController {
     @Log(title = "pc装修页面", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @RequestBody MallDiyPcPageBo bo) {
+    public R<MallDiyPcPage> edit(@Validated(EditGroup.class) @RequestBody MallDiyPcPageBo bo) {
         if(Objects.equals(bo.getIsHome(), 1)){
             if(ObjectUtil.isEmpty(bo.getSiteId())){
                 mallDiyPcPageService.update(Wrappers.<MallDiyPcPage>lambdaUpdate()
@@ -117,7 +117,7 @@ public class MallDiyPcPageController extends BaseController {
                 );
             }
         }
-        return toAjax(mallDiyPcPageService.updateByBo(bo));
+        return R.ok(mallDiyPcPageService.updateByBo(bo));
     }
 
     /**

+ 8 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/MallDiyPcPage.java

@@ -72,5 +72,13 @@ public class MallDiyPcPage extends TenantEntity {
      */
     private Long isHome;
 
+    /**
+    * 背景颜色
+    * */
+    private String backgroundColor;
 
+    /**
+    * 悬停颜色
+    * */
+    private String hoverColor;
 }

+ 8 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/bo/MallDiyPcPageBo.java

@@ -78,5 +78,13 @@ public class MallDiyPcPageBo extends BaseEntity {
     //@NotNull(message = "是否首页不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long isHome;
 
+    /**
+     * 背景颜色
+     * */
+    private String backgroundColor;
 
+    /**
+     * 悬停颜色
+     * */
+    private String hoverColor;
 }

+ 8 - 0
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/domain/vo/MallDiyPcPageVo.java

@@ -88,5 +88,13 @@ public class MallDiyPcPageVo implements Serializable {
     @ExcelProperty(value = "是否首页")
     private Long isHome;
 
+    /**
+     * 背景颜色
+     * */
+    private String backgroundColor;
 
+    /**
+     * 悬停颜色
+     * */
+    private String hoverColor;
 }

+ 2 - 2
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/IMallDiyPcPageService.java

@@ -49,7 +49,7 @@ public interface IMallDiyPcPageService extends IService<MallDiyPcPage>{
      * @param bo pc装修页面
      * @return 是否新增成功
      */
-    Boolean insertByBo(MallDiyPcPageBo bo);
+    MallDiyPcPage insertByBo(MallDiyPcPageBo bo);
 
     /**
      * 修改pc装修页面
@@ -57,7 +57,7 @@ public interface IMallDiyPcPageService extends IService<MallDiyPcPage>{
      * @param bo pc装修页面
      * @return 是否修改成功
      */
-    Boolean updateByBo(MallDiyPcPageBo bo);
+    MallDiyPcPage updateByBo(MallDiyPcPageBo bo);
 
     /**
      * 校验并批量删除pc装修页面信息

+ 4 - 4
ruoyi-modules/ruoyi-mall/src/main/java/org/dromara/mall/service/impl/MallDiyPcPageServiceImpl.java

@@ -93,14 +93,14 @@ public class MallDiyPcPageServiceImpl  extends ServiceImpl<MallDiyPcPageMapper,
      * @return 是否新增成功
      */
     @Override
-    public Boolean insertByBo(MallDiyPcPageBo bo) {
+    public MallDiyPcPage insertByBo(MallDiyPcPageBo bo) {
         MallDiyPcPage add = MapstructUtils.convert(bo, MallDiyPcPage.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());
         }
-        return flag;
+        return add  ;
     }
 
     /**
@@ -110,10 +110,10 @@ public class MallDiyPcPageServiceImpl  extends ServiceImpl<MallDiyPcPageMapper,
      * @return 是否修改成功
      */
     @Override
-    public Boolean updateByBo(MallDiyPcPageBo bo) {
+    public MallDiyPcPage updateByBo(MallDiyPcPageBo bo) {
         MallDiyPcPage update = MapstructUtils.convert(bo, MallDiyPcPage.class);
         validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
+        return baseMapper.updateById(update) > 0 ? update : null;
     }
 
     /**

+ 46 - 3
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderController.java

@@ -2,6 +2,7 @@ package org.dromara.order.controller.pc;
 
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -17,6 +18,9 @@ import org.dromara.common.web.core.BaseController;
 import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.customer.api.domain.CustomerApiVo;
 import org.dromara.order.domain.OrderCustomerFlowLink;
+import org.dromara.order.domain.OrderCustomerFlowNode;
+import org.dromara.order.domain.OrderCustomerFlowNodeLink;
+import org.dromara.order.domain.OrderMain;
 import org.dromara.order.domain.bo.*;
 import org.dromara.order.domain.dto.OrderPayDto;
 import org.dromara.order.domain.vo.OrderCountVo;
@@ -24,6 +28,7 @@ import org.dromara.order.domain.vo.OrderMainVo;
 import org.dromara.order.domain.vo.OrderProductVo;
 import org.dromara.order.domain.vo.OrderStatusStats;
 import org.dromara.order.service.IOrderCustomerFlowLinkService;
+import org.dromara.order.service.IOrderCustomerFlowNodeLinkService;
 import org.dromara.order.service.IOrderCustomerFlowService;
 import org.dromara.order.service.IOrderMainService;
 import org.dromara.product.api.RemoteProductService;
@@ -71,6 +76,9 @@ public class PcOrderController extends BaseController {
 
     private final IOrderMainService orderMainService;
 
+
+    private final IOrderCustomerFlowNodeLinkService orderCustomerFlowNodeLinkService;
+
     /**
      * 查询当前企业的订单列表
      * PC端用户只能查询自己企业的订单
@@ -86,10 +94,42 @@ public class PcOrderController extends BaseController {
     }
 
     @GetMapping("/countOrder")
-    public OrderCountVo countOrder() {
+    public R<OrderCountVo> countOrder() {
         // 获取当前登录用户的企业ID
         Long customerId = LoginHelper.getLoginUser().getCustomerId();
-        return orderMainService.countOrderNum(customerId);
+        return R.ok(orderMainService.countOrderNum(customerId));
+    }
+
+    /**
+    * 查询当前用户能审核的订单id
+    * */
+    @GetMapping("/getCheckOrderIds")
+    public R<List<Long>> getCheckOrderIds() {
+        Long contactId = remoteCustomerService.selectContactIdByUserId(LoginHelper.getUserId());
+        if (contactId == null) {
+            return R.ok();
+        }
+        List<OrderCustomerFlowNodeLink> list = orderCustomerFlowNodeLinkService.list(
+            Wrappers.lambdaQuery(OrderCustomerFlowNodeLink.class)
+                .select(OrderCustomerFlowNodeLink::getOrderId)
+                .like(OrderCustomerFlowNodeLink::getHandlerId, contactId)
+                .eq(OrderCustomerFlowNodeLink::getReviewStatus, 0)
+                .inSql(OrderCustomerFlowNodeLink::getId, "select node_id from order_customer_flow_link where review_status = 0")
+        );
+
+        return R.ok(list.stream().map(OrderCustomerFlowNodeLink::getOrderId).distinct().collect(Collectors.toList()));
+    }
+
+    /**
+    * 查询当前订单的流程节点列表
+    * */
+    @GetMapping("/getOrderFlowNodes/{orderId}")
+    public R<List<OrderCustomerFlowNodeLink>> getOrderFlowNodes(@PathVariable("orderId") Long orderId) {
+        return R.ok(orderCustomerFlowNodeLinkService.list(
+            Wrappers.lambdaQuery(OrderCustomerFlowNodeLink.class)
+                .eq(OrderCustomerFlowNodeLink::getOrderId, orderId)
+                .orderByAsc(OrderCustomerFlowNodeLink::getSort)
+        ));
     }
 
     /**
@@ -364,7 +404,10 @@ public class PcOrderController extends BaseController {
             Long orderId = orderMainService.insertByBo(mainBo);
             if (orderId != null && orderId > 0) {
                 //初始化审批流程
-                orderCustomerFlowService.initOrderFlow(orderId);
+                Boolean initOrderFlow = orderCustomerFlowService.initOrderFlow(orderId);
+                if (initOrderFlow) {
+                    orderMainService.update(Wrappers.lambdaUpdate(OrderMain.class).eq(OrderMain::getId, orderId).set(OrderMain::getOrderStatus, 1));
+                }
                 if (bo.getPlaceOrderType() == 1) {
                     // 成功下单后,删除对应的购物车项
                     remoteProductShoppingCartService.deleteWithValidByIds(bo.getProductShoppingCartId());

+ 1 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/pc/PcOrderFlowController.java

@@ -42,6 +42,7 @@ public class PcOrderFlowController extends BaseController {
     * */
     @GetMapping("/list")
     public TableDataInfo<OrderCustomerFlowVo> list(OrderCustomerFlowBo bo, PageQuery pageQuery) {
+        bo.setCustomerId(LoginHelper.getLoginUser().getCustomerId());
         return orderCustomerFlowService.queryPageList(bo, pageQuery);
     }
 

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowLink.java

@@ -45,7 +45,7 @@ public class OrderCustomerFlowLink extends TenantEntity {
     /**
      * 当前流程处理者id
      */
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 审核状态 0待审核 1已通过 2已驳回

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowNode.java

@@ -40,7 +40,7 @@ public class OrderCustomerFlowNode extends TenantEntity {
     /**
      * 处理人id
      */
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 节点顺序(开始节点默认是0,结束节点最大)

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/OrderCustomerFlowNodeLink.java

@@ -45,7 +45,7 @@ public class OrderCustomerFlowNodeLink extends TenantEntity {
     /**
      * 处理者id
      */
-    private Long handlerId;
+    private String handlerId;
 
     /**
     * 节点顺序(开始节点默认是0,结束节点最大)

+ 2 - 2
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowLinkBo.java

@@ -21,7 +21,7 @@ import jakarta.validation.constraints.*;
 public class OrderCustomerFlowLinkBo extends BaseEntity {
 
     /**
-     * 
+     *
      */
     private Long id;
 
@@ -47,7 +47,7 @@ public class OrderCustomerFlowLinkBo extends BaseEntity {
      * 当前流程处理者id
      */
     //@NotNull(message = "当前流程处理者id不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 审核状态 0待审核 1已通过 2已驳回

+ 2 - 2
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowNodeBo.java

@@ -21,7 +21,7 @@ import jakarta.validation.constraints.*;
 public class OrderCustomerFlowNodeBo extends BaseEntity {
 
     /**
-     * 
+     *
      */
     private Long id;
 
@@ -41,7 +41,7 @@ public class OrderCustomerFlowNodeBo extends BaseEntity {
      * 处理人id
      */
     //@NotNull(message = "处理人id不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 节点顺序(开始节点默认是0,结束节点最大)

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/bo/OrderCustomerFlowNodeLinkBo.java

@@ -47,7 +47,7 @@ public class OrderCustomerFlowNodeLinkBo extends BaseEntity {
      * 处理者id
      */
     //@NotNull(message = "处理者id不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 节点顺序(开始节点默认是0,结束节点最大)

+ 2 - 2
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowLinkVo.java

@@ -29,7 +29,7 @@ public class OrderCustomerFlowLinkVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -56,7 +56,7 @@ public class OrderCustomerFlowLinkVo implements Serializable {
      * 当前流程处理者id
      */
     @ExcelProperty(value = "当前流程处理者id")
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 审核状态 0待审核 1已通过 2已驳回

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowNodeLinkVo.java

@@ -62,7 +62,7 @@ public class OrderCustomerFlowNodeLinkVo implements Serializable {
      * 处理者id
      */
     @ExcelProperty(value = "处理者id")
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 审核状态 0待审核 1已通过 2已驳回

+ 2 - 2
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/domain/vo/OrderCustomerFlowNodeVo.java

@@ -29,7 +29,7 @@ public class OrderCustomerFlowNodeVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 
+     *
      */
     @ExcelProperty(value = "")
     private Long id;
@@ -51,7 +51,7 @@ public class OrderCustomerFlowNodeVo implements Serializable {
      * 处理人id
      */
     @ExcelProperty(value = "处理人id")
-    private Long handlerId;
+    private String handlerId;
 
     /**
      * 节点顺序(开始节点默认是0,结束节点最大)

+ 1 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/service/IOrderCustomerFlowService.java

@@ -81,7 +81,7 @@ public interface IOrderCustomerFlowService extends IService<OrderCustomerFlow>{
     * 初始化订单流程
      * @param orderId 订单ID
     * */
-    void initOrderFlow(Long orderId);
+    Boolean initOrderFlow(Long orderId);
 
     /**
     * 审核订单流程

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

@@ -229,7 +229,8 @@ public class OrderCustomerFlowServiceImpl extends ServiceImpl<OrderCustomerFlowM
      * @param orderId 订单ID
      */
     @Override
-    public void initOrderFlow(Long orderId) {
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean initOrderFlow(Long orderId) {
         //查询默认开启的流程
         OrderCustomerFlow flow = baseMapper.selectOne(
             new LambdaQueryWrapper<OrderCustomerFlow>().eq(OrderCustomerFlow::getStatus, "0")
@@ -237,14 +238,14 @@ public class OrderCustomerFlowServiceImpl extends ServiceImpl<OrderCustomerFlowM
                 .last("limit 1")
         );
         if (flow == null) {
-            return;
+            return  false;
         }
         //查询流程节点
         List<OrderCustomerFlowNode> orderCustomerFlowNodes = nodeService.list(
             new LambdaQueryWrapper<OrderCustomerFlowNode>().eq(OrderCustomerFlowNode::getFlowId, flow.getId())
         );
         if (ObjectUtil.isEmpty(orderCustomerFlowNodes)) {
-            return;
+            return false;
         }
         //
         List<OrderCustomerFlowNodeLink> orderCustomerFlowNodeLinks = new ArrayList<>();
@@ -261,7 +262,8 @@ public class OrderCustomerFlowServiceImpl extends ServiceImpl<OrderCustomerFlowM
         flowLink.setOrderId(orderId);
         flowLink.setFlowId(flow.getId());
         flowLink.setNodeId(orderCustomerFlowNodeLinks.get(0).getId());
-        linkService.save(flowLink);
+        return linkService.save(flowLink);
+
     }
 
     /**

+ 9 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/IndexProductController.java

@@ -113,6 +113,14 @@ public class IndexProductController {
         return R.ok(productCategoryService.queryList(bo));
     }
 
+    /**
+    * 获取品牌详情
+    * */
+    @GetMapping("getProductBrandDetail/{brandId}")
+    public R<ProductBrandVo> getProductBrandDetail(@PathVariable Long brandId) {
+        return R.ok(productBrandService.queryById(brandId));
+    }
+
     /**
     * 查询行家精选商品列表(平台装修-特价管理)
     * */
@@ -270,7 +278,7 @@ public class IndexProductController {
     * 获取场景采购下的商品
     * */
     @GetMapping("/getProductProgramProductList/{programId}")
-    public R<Map<String, List<PcProductVo>>> getProductProgramProductList(@PathVariable Long programId) {
+    public R<Map<Long, List<PcProductVo>>> getProductProgramProductList(@PathVariable Long programId) {
         return R.ok(productBaseService.getProductProgramProductList(programId));
     }
 

+ 8 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/PcProductBo.java

@@ -31,6 +31,14 @@ public class PcProductBo {
     * 品牌id
     * */
     private Long brandId;
+    /**
+     * 品牌id
+     */
+    private String brandIds;
+    /**
+     * 分类ids(底级)
+     * */
+    private String categoryIds;
     /**
     * 顶级分类id
     * */

+ 12 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ProductBaseBo.java

@@ -53,6 +53,12 @@ public class ProductBaseBo extends BaseEntity {
     //@NotNull(message = "品牌id不能为空", groups = {AddGroup.class, EditGroup.class})
     private Long brandId;
 
+    /**
+     * 品牌id
+     */
+    //@NotNull(message = "品牌id不能为空", groups = {AddGroup.class, EditGroup.class})
+    private String brandIds;
+
     /**
      * 品牌名称(用于搜索)
      */
@@ -63,6 +69,11 @@ public class ProductBaseBo extends BaseEntity {
      */
     private String categoryName;
 
+    /**
+    * 分类ids(底级)
+    * */
+    private String categoryIds;
+
     /**
      * 顶级分类id
      */
@@ -280,7 +291,7 @@ public class ProductBaseBo extends BaseEntity {
     private Long virtualInventory;
 
     /**
-     * 产品性质
+     * 产品经理
      */
     private String productNature;
 

+ 20 - 3
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/PcProductVo.java

@@ -20,9 +20,9 @@ public class PcProductVo {
      */
     private String itemName;
     /**
-    * 分类名称
-    * */
-    private String categoryName;
+     * 品牌id
+     */
+    private Long brandId;
     /**
      * 产品编号
      */
@@ -78,11 +78,28 @@ public class PcProductVo {
     * */
     private Long totalInventory;
 
+    /**
+     * 当前可用库存
+     * */
+    private Long nowInventory;
+
+    /**
+     * 虚拟库存
+     * */
+    private Long virtualInventory;
+
     /**
     * 购物车id
     * */
     private Long shoppingCartId;
 
+    /**
+    * 是否收藏 0-未收藏 1-已收藏
+    * */
+    private String isCollect;
+
+
+
     /**
     * 创建时间
     * */

+ 6 - 2
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductBaseVo.java

@@ -365,9 +365,9 @@ public class ProductBaseVo implements Serializable {
     private BigDecimal estimatedPurchasePrice;
 
     /**
-     * 产品性质
+     * 产品经理
      */
-    @ExcelProperty(value = "产品性质")
+    @ExcelProperty(value = "产品经理")
     private String productNature;
 
     /**
@@ -484,4 +484,8 @@ public class ProductBaseVo implements Serializable {
     * 创建时间
     * */
     private Date createTime;
+    /**
+    * 更新时间
+    * */
+    private Date updateTime;
 }

+ 1 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/IProductBaseService.java

@@ -215,7 +215,7 @@ public interface IProductBaseService extends IService<ProductBase>{
     /**
     * PC端场景采购下的商品
      * */
-    Map<String, List<PcProductVo>> getProductProgramProductList(Long programId);
+    Map<Long, List<PcProductVo>> getProductProgramProductList(Long programId);
 
     /**
     * PC端协议商品列表

+ 54 - 4
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

@@ -15,7 +15,9 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.dubbo.common.logger.FluentLogger;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.NumberGeneratorUtil;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -24,6 +26,7 @@ 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.common.satoken.utils.LoginHelper;
 import org.dromara.easyes.core.biz.EsPageInfo;
 import org.dromara.easyes.core.biz.SAPageInfo;
 import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
@@ -472,13 +475,18 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             .eq(ObjectUtil.isNotEmpty(bo.getIsSelf()), ProductBaseVo::getIsSelf, bo.getIsSelf())
             .eq(ObjectUtil.isNotEmpty(bo.getProductReviewStatus()), ProductBaseVo::getProductReviewStatus, bo.getProductReviewStatus())
             .eq(ObjectUtil.isNotEmpty(bo.getDataSource()), ProductBaseVo::getDataSource, bo.getDataSource())
+            .eq(ObjectUtil.isNotEmpty(bo.getProductCategory()), ProductBaseVo::getProductCategory, bo.getProductCategory())
 //            .orderByDesc(ProductBaseVo::getCreateTime)
             ;
         if (ObjectUtil.isNotEmpty(bo.getIds())){
             productBaseVoLambdaEsQueryWrapper.in(ProductBaseVo::getId, bo.getIds().split(","));
         }
-
-
+        if (ObjectUtil.isNotEmpty(bo.getBrandIds())){
+            productBaseVoLambdaEsQueryWrapper.in(ProductBaseVo::getBrandId, bo.getBrandIds().split(","));
+        }
+        if (ObjectUtil.isNotEmpty(bo.getCategoryIds())){
+            productBaseVoLambdaEsQueryWrapper.in(ProductBaseVo::getBottomCategoryId, bo.getCategoryIds().split(","));
+        }
         return productBaseVoLambdaEsQueryWrapper;
     }
 
@@ -636,6 +644,24 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             // 1. 保存产品基础信息
             ProductBase productBase = MapstructUtils.convert(bo, ProductBase.class);
             validEntityBeforeSave(productBase);
+            //查询最大productNo生成productNo
+            if(ObjectUtil.isEmpty(productBase.getProductNo())){
+                ProductBase one = baseMapper.selectOne(Wrappers.lambdaQuery(ProductBase.class).orderByDesc(ProductBase::getProductNo).last("limit 1"));
+                if (one == null) {
+                    productBase.setProductNo("0000000001");
+                }else {
+                    productBase.setProductNo(NumberGeneratorUtil.generateNumber(one.getProductNo()));
+                }
+            }else {
+                //校验编号不能重复
+                ProductBase one = baseMapper.selectOne(Wrappers.lambdaQuery(ProductBase.class)
+                    .eq(ProductBase::getProductNo, productBase.getProductNo())
+                    .last("limit 1")
+                );
+                if (one != null) {
+                    throw new ServiceException("编号已存在");
+                }
+            }
 
             // 设置默认值
             setDefaultValues(productBase);
@@ -1266,6 +1292,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             .set(ProductExtend::getReviewComments, bo.getReviewComments())
             .eq(ProductExtend::getProductId, bo.getId())
         );
+        syncToES(bo.getId());
     }
 
     /**
@@ -1283,6 +1310,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             .set(ProductExtend::getShelfComments, bo.getShelfComments())
             .eq(ProductExtend::getProductId, bo.getId())
         );
+        syncToES(bo.getId());
     }
 
     /**
@@ -1299,6 +1327,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             .set(ProductBase::getProductCategory, bo.getProductCategory())
             .eq(ProductBase::getId, bo.getId())
         );
+        syncToES(bo.getId());
     }
 
     /**
@@ -1439,6 +1468,12 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
         if(ObjectUtil.isNotEmpty( bo.getIds())){
             lqw.in("b.id", bo.getIds());
         }
+        if (ObjectUtil.isNotEmpty(bo.getBrandIds())){
+            lqw.in("b.brand_id", bo.getBrandIds().split(","));
+        }
+        if (ObjectUtil.isNotEmpty(bo.getCategoryIds())){
+            lqw.in("b.bottom_category_id", bo.getCategoryIds().split(","));
+        }
         lqw.ge(ObjectUtil.isNotEmpty(pageQuery.getFirstSeenId()) && pageQuery.getWay() == 0,"b.id", pageQuery.getFirstSeenId());
         lqw.gt(ObjectUtil.isNotEmpty(pageQuery.getLastSeenId()) && pageQuery.getWay() == 1,"b.id", pageQuery.getLastSeenId());
 //        lqw.eq("b.product_status", 1);
@@ -1492,6 +1527,12 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             if(ObjectUtil.isNotEmpty(bo.getIds())){
                 esQueryWrapper.in(ProductBaseVo::getId, bo.getIds());
             }
+            if (ObjectUtil.isNotEmpty(bo.getBrandIds())){
+                esQueryWrapper.in(ProductBaseVo::getBrandId, bo.getBrandIds().split(","));
+            }
+            if (ObjectUtil.isNotEmpty(bo.getCategoryIds())){
+                esQueryWrapper.in(ProductBaseVo::getBottomCategoryId, bo.getCategoryIds().split(","));
+            }
             // 添加额外的查询条件
             if (ObjectUtil.isNotEmpty(bo.getSearchKeyword())) {
                 esQueryWrapper.and(wrapper -> wrapper
@@ -1675,6 +1716,15 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
                 List<ProductBaseVo> productBaseVos = baseMapper.selectAllList(Wrappers.query(ProductBase.class)
                     .eq("b.id", productShoppingCart.getProductId())
                 );
+                //查询商品是否在收藏夹收藏
+                if(productCollectMapper.exists(Wrappers.lambdaQuery(ProductCollect.class)
+                    .eq(ProductCollect::getUserId, LoginHelper.getUserId())
+                    .eq(ProductCollect::getProductId, productShoppingCart.getProductId())
+                )){
+                    productVo.setIsCollect("1");
+                }else {
+                    productVo.setIsCollect("0");
+                }
                 if (CollUtil.isNotEmpty(productBaseVos)) {
                     BeanUtil.copyProperties(productBaseVos.get(0), productVo);
                     productVo.setProductNum(productShoppingCart.getProductNum());
@@ -1886,7 +1936,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
      * @param programId
      */
     @Override
-    public Map<String, List<PcProductVo>> getProductProgramProductList(Long programId) {
+    public Map<Long, List<PcProductVo>> getProductProgramProductList(Long programId) {
         List<ProductProgramLinkVo> productProgramLinkVos = productProgramLinkMapper.selectVoList(
             Wrappers.lambdaQuery(ProductProgramLink.class)
                 .eq(ProductProgramLink::getProgramId, programId)
@@ -1900,7 +1950,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
 
             List<PcProductVo> pcProductVos = BeanUtil.copyToList(productBaseVos, PcProductVo.class);
             //通过分类名称分组
-            Map<String, List<PcProductVo>> map = pcProductVos.stream().collect(Collectors.groupingBy(PcProductVo::getCategoryName));
+            Map<Long, List<PcProductVo>> map = pcProductVos.stream().collect(Collectors.groupingBy(PcProductVo::getBrandId));
             if (CollUtil.isNotEmpty(map)) {
                 return map;
             }

+ 24 - 22
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBrandServiceImpl.java

@@ -65,6 +65,7 @@ public class ProductBrandServiceImpl  extends ServiceImpl<ProductBrandMapper, Pr
 
 
 
+
     private final ProductIndustrialFloorLinkMapper productIndustrialFloorLinkMapper;
 
     // Redis key前缀,用于存储品牌编号自增的计数器
@@ -302,30 +303,31 @@ public class ProductBrandServiceImpl  extends ServiceImpl<ProductBrandMapper, Pr
      */
     @Override
     public TableDataInfo<ProductBrandVo> getBrandByCategoryList(Long categoryId,String name,String initial,PageQuery pageQuery) {
-        SearchResponse<ProductBaseVo> response = productEsMapper.search(new LambdaEsQueryWrapper<ProductBaseVo>()
-            .eq(ObjectUtil.isNotEmpty(categoryId),ProductBaseVo::getTopCategoryId, categoryId)
-            .like(ObjectUtil.isNotEmpty(name),ProductBaseVo::getBrandName, name)
-            .like(ObjectUtil.isNotEmpty(initial),ProductBaseVo::getBrandName, initial)
-            .limit(pageQuery.getPageNum())
-            .size(pageQuery.getPageSize())
-            .groupBy(ProductBaseVo::getBrandId)
-        );
-        // 解析结果
-        Map<String, Aggregate> aggregations = response.aggregations();
-        if (CollUtil.isEmpty(aggregations)) {
-            return null;
-        }
-        LongTermsAggregate aggregate = (LongTermsAggregate) aggregations.get("brandIdTerms")._get();
-        if (ObjectUtil.isEmpty( aggregate)) {
-            return null;
+        List<Long> brandIds = null;
+        if(ObjectUtil.isNotEmpty(categoryId) || ObjectUtil.isNotEmpty(name)){
+            List<ProductBaseVo> productBaseVos = productEsMapper.selectList(new LambdaEsQueryWrapper<ProductBaseVo>()
+                .select(ProductBaseVo::getBrandId)
+                .eq(ObjectUtil.isNotEmpty(categoryId),ProductBaseVo::getTopCategoryId, categoryId)
+                .like(ObjectUtil.isNotEmpty(name),ProductBaseVo::getBrandName, name)
+                .groupBy(ProductBaseVo::getBrandId)
+            );
+            if (CollUtil.isEmpty(productBaseVos)) {
+                return TableDataInfo.build();
+            }
+            brandIds = productBaseVos.stream().map(ProductBaseVo::getBrandId).toList();
         }
-        List<LongTermsBucket> buckets = (List<LongTermsBucket>) aggregate.buckets()._get();
-        if (CollUtil.isEmpty(buckets)) {
-            return null;
+
+        LambdaQueryWrapper<ProductBrand> lqw = Wrappers.lambdaQuery(ProductBrand.class);
+        if(ObjectUtil.isNotEmpty(categoryId) || ObjectUtil.isNotEmpty(name)){
+            if(ObjectUtil.isNotEmpty(brandIds)){
+                lqw.in(ProductBrand::getId,brandIds);
+            }else {
+                lqw.isNull(ProductBrand::getId);
+            }
         }
-        List<Long> brandIds = buckets.stream().map(LongTermsBucket::key).toList();
-        Page<ProductBrandVo> productBrandVos = baseMapper.selectVoPage(pageQuery.build(),Wrappers.lambdaQuery(ProductBrand.class)
-            .in(ProductBrand::getId, brandIds));
+        lqw.eq(ObjectUtil.isNotEmpty(initial),ProductBrand::getBrandInitials,initial);
+        lqw.eq(ProductBrand::getIsShow,1);
+        Page<ProductBrandVo> productBrandVos = baseMapper.selectVoPage(pageQuery.build(),lqw);
         return TableDataInfo.build(productBrandVos);
     }
 

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/IndexSystemController.java

@@ -59,6 +59,7 @@ public class IndexSystemController {
     public R<List<PlatformNavigation>> getSearchTitle() {
         List<PlatformNavigation> list = platformNavigationService.list(Wrappers.<PlatformNavigation>lambdaQuery(PlatformNavigation.class)
             .eq(PlatformNavigation::getNavType, "setting_search")
+            .orderByAsc(PlatformNavigation::getSort)
         );
         return R.ok(list);
     }

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -8,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.constant.SystemConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.StreamUtils;
@@ -22,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.api.RemoteCustomerService;
 import org.dromara.system.api.model.LoginUser;
 import org.dromara.system.domain.bo.SysDeptBo;
 import org.dromara.system.domain.bo.SysPostBo;
@@ -55,6 +57,9 @@ public class SysUserController extends BaseController {
     private final ISysDeptService deptService;
     private final ISysTenantService tenantService;
 
+    @DubboReference
+    private RemoteCustomerService remoteCustomerService;
+
     /**
      * 获取用户列表
      */
@@ -118,6 +123,10 @@ public class SysUserController extends BaseController {
         userInfoVo.setUser(user);
         userInfoVo.setPermissions(loginUser.getMenuPermission());
         userInfoVo.setRoles(loginUser.getRolePermission());
+        if(ObjectUtil.isNotEmpty(loginUser.getCustomerId())){
+            userInfoVo.setCompanyName(remoteCustomerService.selectCompanyNameByCustomerId(loginUser.getCustomerId()));
+        }
+
         return R.ok(userInfoVo);
     }
 

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/UserInfoVo.java

@@ -22,6 +22,11 @@ public class UserInfoVo implements Serializable {
      */
     private SysUserVo user;
 
+    /**
+    * 客户名称
+    * */
+    private String companyName;
+
     /**
      * 菜单权限
      */