林小张 преди 2 месеца
родител
ревизия
3203d41c34
променени са 100 файла, в които са добавени 7425 реда и са изтрити 1 реда
  1. 11 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java
  2. 53 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteBo.java
  3. 30 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteResult.java
  4. 81 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteVo.java
  5. 5 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  6. 8 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  7. 3 0
      ruoyi-modules/ruoyi-customer/pom.xml
  8. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerBankController.java
  9. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContactsController.java
  10. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContractController.java
  11. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerDictController.java
  12. 115 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.java
  13. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedController.java
  14. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedProductController.java
  15. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerQualificationController.java
  16. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerUserController.java
  17. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerWarehouseController.java
  18. 38 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/ProductRemoteController.java
  19. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerBank.java
  20. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContacts.java
  21. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContract.java
  22. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerDict.java
  23. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerInfo.java
  24. 134 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPrepared.java
  25. 68 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPreparedProduct.java
  26. 79 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerQualification.java
  27. 97 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.java
  28. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerWarehouse.java
  29. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerBankBo.java
  30. 66 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContactsBo.java
  31. 135 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContractBo.java
  32. 65 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerDictBo.java
  33. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerInfoBo.java
  34. 128 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedBo.java
  35. 62 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedProductBo.java
  36. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerQualificationBo.java
  37. 93 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerUserBo.java
  38. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerWarehouseBo.java
  39. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerBankVo.java
  40. 83 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContactsVo.java
  41. 166 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContractVo.java
  42. 81 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerDictVo.java
  43. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerInfoVo.java
  44. 78 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedProductVo.java
  45. 158 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedVo.java
  46. 91 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerQualificationVo.java
  47. 107 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerUserVo.java
  48. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerWarehouseVo.java
  49. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerBankMapper.java
  50. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContactsMapper.java
  51. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContractMapper.java
  52. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerDictMapper.java
  53. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerInfoMapper.java
  54. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedMapper.java
  55. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedProductMapper.java
  56. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerQualificationMapper.java
  57. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerUserMapper.java
  58. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerWarehouseMapper.java
  59. 164 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcAddressController.java
  60. 164 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcContactController.java
  61. 155 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcDeptController.java
  62. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcEnterpriseController.java
  63. 140 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcInvoiceController.java
  64. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerBankService.java
  65. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContactsService.java
  66. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContractService.java
  67. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerDictService.java
  68. 77 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerInfoService.java
  69. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedProductService.java
  70. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedService.java
  71. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerQualificationService.java
  72. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerUserService.java
  73. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerWarehouseService.java
  74. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerBankServiceImpl.java
  75. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContactsServiceImpl.java
  76. 152 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContractServiceImpl.java
  77. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerDictServiceImpl.java
  78. 164 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerInfoServiceImpl.java
  79. 138 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedProductServiceImpl.java
  80. 214 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedServiceImpl.java
  81. 140 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerQualificationServiceImpl.java
  82. 170 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerUserServiceImpl.java
  83. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerWarehouseServiceImpl.java
  84. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerBankMapper.xml
  85. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContactsMapper.xml
  86. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContractMapper.xml
  87. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerDictMapper.xml
  88. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerInfoMapper.xml
  89. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedMapper.xml
  90. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedProductMapper.xml
  91. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerQualificationMapper.xml
  92. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerUserMapper.xml
  93. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerWarehouseMapper.xml
  94. 3 0
      ruoyi-modules/ruoyi-external/pom.xml
  95. 3 0
      ruoyi-modules/ruoyi-gen/pom.xml
  96. 3 0
      ruoyi-modules/ruoyi-job/pom.xml
  97. 3 0
      ruoyi-modules/ruoyi-order/pom.xml
  98. 3 0
      ruoyi-modules/ruoyi-product/pom.xml
  99. 40 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java
  100. 3 0
      ruoyi-modules/ruoyi-resource/pom.xml

+ 11 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java

@@ -5,6 +5,9 @@ import org.dromara.product.api.domain.ProductCategoryRemoteVo;
 import org.dromara.product.api.domain.ProductChangeLogApiVo;
 import org.dromara.product.api.domain.ProductPriceInventoryRemoteVo;
 import org.dromara.product.api.domain.ProductVo;
+import org.dromara.product.api.domain.SiteProductRemoteBo;
+import org.dromara.product.api.domain.SiteProductRemoteResult;
+import org.dromara.product.api.domain.SiteProductRemoteVo;
 import org.dromara.product.api.domain.zhongche.dto.StocksResultDto;
 import org.dromara.product.api.domain.RemoteProductBrand;
 
@@ -64,4 +67,12 @@ public interface RemoteProductService {
 
     List<Prices> queryProductPrice(List<String> goodsIds);
 
+    /**
+     * 分页查询站点产品列表(供远程调用)
+     *
+     * @param bo 查询条件
+     * @return 站点产品列表及分页信息
+     */
+    SiteProductRemoteResult querySiteProductPage(SiteProductRemoteBo bo);
+
 }

+ 53 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteBo.java

@@ -0,0 +1,53 @@
+package org.dromara.product.api.domain;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 站点产品远程调用查询条件
+ *
+ * @author yoe
+ */
+@Data
+public class SiteProductRemoteBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 关键词(编号/名称模糊查询) */
+    private String keyword;
+
+    /** 产品编号 */
+    private String productNo;
+
+    /** 产品名称(模糊查询) */
+    private String productName;
+
+    /** 品牌ID */
+    private Long brandId;
+
+    /** 顶级分类ID */
+    private Long topCategoryId;
+
+    /** 中级分类ID */
+    private Long mediumCategoryId;
+
+    /** 底层分类ID */
+    private Long bottomCategoryId;
+
+    /** 是否自营(1=是,0=否) */
+    private Integer isSelf;
+
+    /** 产品审核状态 */
+    private Integer productReviewStatus;
+
+    /** 商品状态(1=上架,0=下架) */
+    private Integer productStatus;
+
+    /** 当前页码 */
+    private Integer pageNum = 1;
+
+    /** 每页数量 */
+    private Integer pageSize = 10;
+}

+ 30 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteResult.java

@@ -0,0 +1,30 @@
+package org.dromara.product.api.domain;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 站点产品远程调用返回结果
+ *
+ * @author yoe
+ */
+@Data
+public class SiteProductRemoteResult implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 状态码 */
+    private int code;
+
+    /** 消息 */
+    private String msg;
+
+    /** 总数 */
+    private long total;
+
+    /** 数据列表 */
+    private List<SiteProductRemoteVo> rows;
+}

+ 81 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteVo.java

@@ -0,0 +1,81 @@
+package org.dromara.product.api.domain;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 站点产品远程调用视图对象
+ *
+ * @author yoe
+ */
+@Data
+public class SiteProductRemoteVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 产品编号 */
+    private String productNo;
+
+    /** 产品名称 */
+    private String productName;
+
+    /** 产品图片 */
+    private String productImage;
+
+    /** 是否自营(1=是,0=否) */
+    private Integer isSelf;
+
+    /** 产品审核状态 */
+    private Integer productReviewStatus;
+
+    /** 商品状态(1=上架,0=下架) */
+    private Integer productStatus;
+
+    /** 市场价格 */
+    private BigDecimal marketPrice;
+
+    /** 会员价格 */
+    private BigDecimal memberPrice;
+
+    /** 最低销售价格 */
+    private BigDecimal minSellingPrice;
+
+    /** 采购价格 */
+    private BigDecimal purchasingPrice;
+
+    /** 总库存量 */
+    private Long totalInventory;
+
+    /** 当前可用库存 */
+    private Long nowInventory;
+
+    /** 虚拟库存 */
+    private Long virtualInventory;
+
+    /** 品牌ID */
+    private Long brandId;
+
+    /** 品牌名称 */
+    private String brandName;
+
+    /** 顶级分类名称 */
+    private String topCategoryName;
+
+    /** 中级分类名称 */
+    private String mediumCategoryName;
+
+    /** 底层分类名称 */
+    private String bottomCategoryName;
+
+    /** 单位名称 */
+    private String unitName;
+
+    /** 备注 */
+    private String remark;
+}

+ 5 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java

@@ -118,6 +118,11 @@ public class RemoteUserBo implements Serializable {
      * */
     private String userSonType;
 
+    /**
+     * 平台代码
+     */
+    private String platformCode;
+
     public RemoteUserBo(Long userId) {
         this.userId = userId;
     }

+ 8 - 1
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java

@@ -82,7 +82,14 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "industry_category",
         "contract_product",
         "supplier_contact",
-        "address_area"
+        "address_area",
+        "partner_info",
+        "partner_user",
+        "partner_bank",
+        "partner_contacts",
+        "partner_contract",
+        "partner_warehouse",
+        "partner_qualification"
 
 
         // 注意:前缀匹配需特殊处理(如 qrtz_),见 isIgnoreTable 方法

+ 3 - 0
ruoyi-modules/ruoyi-customer/pom.xml

@@ -140,6 +140,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.customer.RuoyiCustomerApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerBankController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerBankVo;
+import org.dromara.customer.domain.bo.PartnerBankBo;
+import org.dromara.customer.service.IPartnerBankService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商银行账户
+ * 前端访问路由地址为:/customer/partnerBank
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerBank")
+public class PartnerBankController extends BaseController {
+
+    private final IPartnerBankService partnerBankService;
+
+    /**
+     * 查询伙伴商银行账户列表
+     */
+    @SaCheckPermission("customer:partnerBank:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerBankVo> list(PartnerBankBo bo, PageQuery pageQuery) {
+        return partnerBankService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商银行账户列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商银行账户", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerBankBo bo, HttpServletResponse response) {
+        List<PartnerBankVo> list = partnerBankService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商银行账户", PartnerBankVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商银行账户详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerBankVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerBankService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商银行账户
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商银行账户", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerBankBo bo) {
+        return toAjax(partnerBankService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商银行账户
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商银行账户", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerBankBo bo) {
+        return toAjax(partnerBankService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商银行账户
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商银行账户", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerBankService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContactsController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerContactsVo;
+import org.dromara.customer.domain.bo.PartnerContactsBo;
+import org.dromara.customer.service.IPartnerContactsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商联系人
+ * 前端访问路由地址为:/customer/contacts
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerContacts")
+public class PartnerContactsController extends BaseController {
+
+    private final IPartnerContactsService partnerContactsService;
+
+    /**
+     * 查询伙伴商联系人列表
+     */
+    @SaCheckPermission("customer:partnerContacts:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerContactsVo> list(PartnerContactsBo bo, PageQuery pageQuery) {
+        return partnerContactsService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商联系人列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商联系人", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerContactsBo bo, HttpServletResponse response) {
+        List<PartnerContactsVo> list = partnerContactsService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商联系人", PartnerContactsVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商联系人详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerContactsVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerContactsService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商联系人
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商联系人", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerContactsBo bo) {
+        return toAjax(partnerContactsService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商联系人
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商联系人", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerContactsBo bo) {
+        return toAjax(partnerContactsService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商联系人
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商联系人", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerContactsService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContractController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerContractVo;
+import org.dromara.customer.domain.bo.PartnerContractBo;
+import org.dromara.customer.service.IPartnerContractService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商合同
+ * 前端访问路由地址为:/customer/partnerContract
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerContract")
+public class PartnerContractController extends BaseController {
+
+    private final IPartnerContractService partnerContractService;
+
+    /**
+     * 查询伙伴商合同列表
+     */
+    @SaCheckPermission("customer:partnerContract:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerContractVo> list(PartnerContractBo bo, PageQuery pageQuery) {
+        return partnerContractService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商合同列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商合同", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerContractBo bo, HttpServletResponse response) {
+        List<PartnerContractVo> list = partnerContractService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商合同", PartnerContractVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商合同详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerContractVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerContractService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商合同
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商合同", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerContractBo bo) {
+        return toAjax(partnerContractService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商合同
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商合同", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerContractBo bo) {
+        return toAjax(partnerContractService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商合同
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商合同", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerContractService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerDictController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerDictVo;
+import org.dromara.customer.domain.bo.PartnerDictBo;
+import org.dromara.customer.service.IPartnerDictService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商字典
+ * 前端访问路由地址为:/customer/dict
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerDict")
+public class PartnerDictController extends BaseController {
+
+    private final IPartnerDictService partnerDictService;
+
+    /**
+     * 查询伙伴商字典列表
+     */
+    @SaCheckPermission("customer:dict:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerDictVo> list(PartnerDictBo bo, PageQuery pageQuery) {
+        return partnerDictService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商字典列表
+     */
+    @SaCheckPermission("customer:dict:export")
+    @Log(title = "伙伴商字典", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerDictBo bo, HttpServletResponse response) {
+        List<PartnerDictVo> list = partnerDictService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商字典", PartnerDictVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商字典详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:dict:query")
+    @GetMapping("/{id}")
+    public R<PartnerDictVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerDictService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商字典
+     */
+    @SaCheckPermission("customer:dict:add")
+    @Log(title = "伙伴商字典", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerDictBo bo) {
+        return toAjax(partnerDictService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商字典
+     */
+    @SaCheckPermission("customer:dict:edit")
+    @Log(title = "伙伴商字典", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerDictBo bo) {
+        return toAjax(partnerDictService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商字典
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:dict:remove")
+    @Log(title = "伙伴商字典", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerDictService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 115 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.java

@@ -0,0 +1,115 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerInfoVo;
+import org.dromara.customer.domain.bo.PartnerInfoBo;
+import org.dromara.customer.service.IPartnerInfoService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商基本信息
+ * 前端访问路由地址为:/customer/partnerInfo
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerInfo")
+public class PartnerInfoController extends BaseController {
+
+    private final IPartnerInfoService partnerInfoService;
+
+    /**
+     * 查询伙伴商基本信息列表
+     */
+    @SaCheckPermission("customer:partnerInfo:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerInfoVo> list(PartnerInfoBo bo, PageQuery pageQuery) {
+        return partnerInfoService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商基本信息列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商基本信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerInfoBo bo, HttpServletResponse response) {
+        List<PartnerInfoVo> list = partnerInfoService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商基本信息", PartnerInfoVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商基本信息详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerInfoVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerInfoService.queryById(id));
+    }
+
+    /**
+     * 获取当前登录用户的伙伴商信息
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/current")
+    public R<PartnerInfoVo> getCurrentPartnerInfo() {
+        return R.ok(partnerInfoService.queryCurrentPartnerInfo());
+    }
+
+    /**
+     * 新增伙伴商基本信息
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商基本信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerInfoBo bo) {
+        return toAjax(partnerInfoService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商基本信息
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商基本信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerInfoBo bo) {
+        return toAjax(partnerInfoService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商基本信息
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商基本信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerInfoService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerPreparedVo;
+import org.dromara.customer.domain.bo.PartnerPreparedBo;
+import org.dromara.customer.service.IPartnerPreparedService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商备货单
+ * 前端访问路由地址为:/customer/prepared
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerPrepared")
+public class PartnerPreparedController extends BaseController {
+
+    private final IPartnerPreparedService partnerPreparedService;
+
+    /**
+     * 查询伙伴商备货单列表
+     */
+    @SaCheckPermission("customer:prepared:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerPreparedVo> list(PartnerPreparedBo bo, PageQuery pageQuery) {
+        return partnerPreparedService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商备货单列表
+     */
+    @SaCheckPermission("customer:prepared:export")
+    @Log(title = "伙伴商备货单", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerPreparedBo bo, HttpServletResponse response) {
+        List<PartnerPreparedVo> list = partnerPreparedService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商备货单", PartnerPreparedVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商备货单详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:prepared:query")
+    @GetMapping("/{id}")
+    public R<PartnerPreparedVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerPreparedService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商备货单
+     */
+    @SaCheckPermission("customer:prepared:add")
+    @Log(title = "伙伴商备货单", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerPreparedBo bo) {
+        return toAjax(partnerPreparedService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商备货单
+     */
+    @SaCheckPermission("customer:prepared:edit")
+    @Log(title = "伙伴商备货单", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerPreparedBo bo) {
+        return toAjax(partnerPreparedService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商备货单
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:prepared:remove")
+    @Log(title = "伙伴商备货单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerPreparedService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedProductController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerPreparedProductVo;
+import org.dromara.customer.domain.bo.PartnerPreparedProductBo;
+import org.dromara.customer.service.IPartnerPreparedProductService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商备货单产品明细
+ * 前端访问路由地址为:/customer/preparedProduct
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerPreparedProduct")
+public class PartnerPreparedProductController extends BaseController {
+
+    private final IPartnerPreparedProductService partnerPreparedProductService;
+
+    /**
+     * 查询伙伴商备货单产品明细列表
+     */
+    @SaCheckPermission("customer:preparedProduct:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerPreparedProductVo> list(PartnerPreparedProductBo bo, PageQuery pageQuery) {
+        return partnerPreparedProductService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商备货单产品明细列表
+     */
+    @SaCheckPermission("customer:preparedProduct:export")
+    @Log(title = "伙伴商备货单产品明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerPreparedProductBo bo, HttpServletResponse response) {
+        List<PartnerPreparedProductVo> list = partnerPreparedProductService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商备货单产品明细", PartnerPreparedProductVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商备货单产品明细详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:preparedProduct:query")
+    @GetMapping("/{id}")
+    public R<PartnerPreparedProductVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerPreparedProductService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商备货单产品明细
+     */
+    @SaCheckPermission("customer:preparedProduct:add")
+    @Log(title = "伙伴商备货单产品明细", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerPreparedProductBo bo) {
+        return toAjax(partnerPreparedProductService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商备货单产品明细
+     */
+    @SaCheckPermission("customer:preparedProduct:edit")
+    @Log(title = "伙伴商备货单产品明细", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerPreparedProductBo bo) {
+        return toAjax(partnerPreparedProductService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商备货单产品明细
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:preparedProduct:remove")
+    @Log(title = "伙伴商备货单产品明细", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerPreparedProductService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerQualificationController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerQualificationVo;
+import org.dromara.customer.domain.bo.PartnerQualificationBo;
+import org.dromara.customer.service.IPartnerQualificationService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商资质
+ * 前端访问路由地址为:/customer/qualification
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerQualification")
+public class PartnerQualificationController extends BaseController {
+
+    private final IPartnerQualificationService partnerQualificationService;
+
+    /**
+     * 查询伙伴商资质列表
+     */
+    @SaCheckPermission("customer:partnerQualification:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerQualificationVo> list(PartnerQualificationBo bo, PageQuery pageQuery) {
+        return partnerQualificationService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商资质列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商资质", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerQualificationBo bo, HttpServletResponse response) {
+        List<PartnerQualificationVo> list = partnerQualificationService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商资质", PartnerQualificationVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商资质详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerQualificationVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerQualificationService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商资质
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商资质", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerQualificationBo bo) {
+        return toAjax(partnerQualificationService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商资质
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商资质", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerQualificationBo bo) {
+        return toAjax(partnerQualificationService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商资质
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商资质", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerQualificationService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerUserController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerUserVo;
+import org.dromara.customer.domain.bo.PartnerUserBo;
+import org.dromara.customer.service.IPartnerUserService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商用户
+ * 前端访问路由地址为:/customer/user
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerUser")
+public class PartnerUserController extends BaseController {
+
+    private final IPartnerUserService partnerUserService;
+
+    /**
+     * 查询伙伴商用户列表
+     */
+    @SaCheckPermission("customer:partnerInfo:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerUserVo> list(PartnerUserBo bo, PageQuery pageQuery) {
+        return partnerUserService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商用户列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商用户", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerUserBo bo, HttpServletResponse response) {
+        List<PartnerUserVo> list = partnerUserService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商用户", PartnerUserVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商用户详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerUserVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerUserService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商用户
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商用户", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerUserBo bo) {
+        return toAjax(partnerUserService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商用户
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商用户", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerUserBo bo) {
+        return toAjax(partnerUserService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商用户
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商用户", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerUserService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerWarehouseController.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.customer.domain.vo.PartnerWarehouseVo;
+import org.dromara.customer.domain.bo.PartnerWarehouseBo;
+import org.dromara.customer.service.IPartnerWarehouseService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 伙伴商仓库
+ * 前端访问路由地址为:/customer/warehouse
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/partnerWarehouse")
+public class PartnerWarehouseController extends BaseController {
+
+    private final IPartnerWarehouseService partnerWarehouseService;
+
+    /**
+     * 查询伙伴商仓库列表
+     */
+    @SaCheckPermission("customer:partnerWarehouse:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerWarehouseVo> list(PartnerWarehouseBo bo, PageQuery pageQuery) {
+        return partnerWarehouseService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商仓库列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerWarehouseBo bo, HttpServletResponse response) {
+        List<PartnerWarehouseVo> list = partnerWarehouseService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商仓库", PartnerWarehouseVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商仓库详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerWarehouseVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerWarehouseService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商仓库
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerWarehouseBo bo) {
+        return toAjax(partnerWarehouseService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商仓库
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerWarehouseBo bo) {
+        return toAjax(partnerWarehouseService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商仓库
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerWarehouseService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 38 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/ProductRemoteController.java

@@ -0,0 +1,38 @@
+package org.dromara.customer.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.product.api.RemoteProductService;
+import org.dromara.product.api.domain.SiteProductRemoteBo;
+import org.dromara.product.api.domain.SiteProductRemoteResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 商品远程调用控制器
+ * 用于customer模块调用product模块的商品数据
+ *
+ * @author yoe
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/productRemote")
+public class ProductRemoteController extends BaseController {
+
+    @DubboReference
+    private RemoteProductService remoteProductService;
+
+    /**
+     * 分页查询商品列表(远程调用product模块)
+     */
+    @GetMapping("/siteProductList")
+    public R<SiteProductRemoteResult> getSiteProductList(SiteProductRemoteBo bo) {
+        SiteProductRemoteResult result = remoteProductService.querySiteProductPage(bo);
+        return R.ok(result);
+    }
+}

+ 92 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerBank.java

@@ -0,0 +1,92 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商银行账户对象 partner_bank
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_bank")
+public class PartnerBank extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 开户名称
+     */
+    private String account;
+
+    /**
+     * 财务登记号
+     */
+    private String registrationNumber;
+
+    /**
+     * 开户银行名称
+     */
+    private String accountBankName;
+
+    /**
+     * 银行账号
+     */
+    private String bankNumber;
+
+    /**
+     * 开户银行所在地
+     */
+    private String bankLocation;
+
+    /**
+     * 银行联行号
+     */
+    private String bankInterbankNumber;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 72 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContacts.java

@@ -0,0 +1,72 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商联系人对象 partner_contacts
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_contacts")
+public class PartnerContacts extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 联系人姓名
+     */
+    private String name;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 电子邮箱
+     */
+    private String email;
+
+    /**
+     * 联系人类型(1=主要联系人 2=次要联系人)
+     */
+    private Long contactType;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 139 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContract.java

@@ -0,0 +1,139 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商合同对象 partner_contract
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_contract")
+public class PartnerContract extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合作项目名称
+     */
+    private String cooperativeName;
+
+    /**
+     * 合作项目ID(关联项目表)
+     */
+    private Long cooperationId;
+
+    /**
+     * 合作开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 合作结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 合作包类
+     */
+    private String categories;
+
+    /**
+     * 合作商品费用
+     */
+    private Long fee;
+
+    /**
+     * 合作类型(1=战略合作 2=项目合作)
+     */
+    private Long contractType;
+
+    /**
+     * 结算周期
+     */
+    private String settlementCycle;
+
+    /**
+     * 销售目标(万元)
+     */
+    private Long salesTarget;
+
+    /**
+     * 合作区域
+     */
+    private String area;
+
+    /**
+     * 联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    private String annex;
+
+    /**
+     * 重要条款
+     */
+    private String importantTerms;
+
+    /**
+     * 合同状态(0=草稿 1=待审核 2=已通过 3=已驳回)
+     */
+    private Long contractStatus;
+
+    /**
+     * 驳回原因
+     */
+    private String rejectInfo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 72 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerDict.java

@@ -0,0 +1,72 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商字典对象 partner_dict
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_dict")
+public class PartnerDict extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 字典名称
+     */
+    private String name;
+
+    /**
+     * 字典编码
+     */
+    private String code;
+
+    /**
+     * 字典值
+     */
+    private String value;
+
+    /**
+     * 备注说明
+     */
+    private String remark;
+
+    /**
+     * 排序
+     */
+    private Long sort;
+
+    /**
+     * 编码索引
+     */
+    private Long codeIndex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 92 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerInfo.java

@@ -0,0 +1,92 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商基本信息对象 partner_info
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_info")
+public class PartnerInfo extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID(主键,用于关联)
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商编号(业务编号,唯一)
+     */
+    private String partnerNo;
+
+    /**
+     * 伙伴商名称
+     */
+    private String partnerName;
+
+    /**
+     * 公司简称
+     */
+    private String company;
+
+    /**
+     * 合作型态(0=伙伴商 1=经销商 2=代理商)
+     */
+    private Long partnerCooperateType;
+
+    /**
+     * 法人代表
+     */
+    private String legal;
+
+    /**
+     * 固定电话
+     */
+    private String telephone;
+
+    /**
+     * 传真号码
+     */
+    private String fax;
+
+    /**
+     * 公司注册地址
+     */
+    private String registerAddress;
+
+    /**
+     * 分司注册地址
+     */
+    private String operatingAddress;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 134 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPrepared.java

@@ -0,0 +1,134 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商备货单对象 partner_prepared
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_prepared")
+public class PartnerPrepared extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 备货单编号
+     */
+    private String preparedNo;
+
+    /**
+     * 合作项目代码(关联字典 cooperation_code)
+     */
+    private String cooperationCode;
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 采购单位名称
+     */
+    private String purchasingUnitName;
+
+    /**
+     * 备货金额
+     */
+    private Long amount;
+
+    /**
+     * 区域
+     */
+    private String area;
+
+    /**
+     * 预计时间
+     */
+    private Date estimatedTime;
+
+    /**
+     * 到期日期
+     */
+    private Date dueDate;
+
+    /**
+     * 发票附件
+     */
+    private String invoiceAttachment;
+
+    /**
+     * 采购单位
+     */
+    private String purchasingUnit;
+
+    /**
+     * 联系人
+     */
+    private String person;
+
+    /**
+     * 部门
+     */
+    private String deptName;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 备货状态(0=待审核 1=已通过 2=已驳回)
+     */
+    private Long preparedStatus;
+
+    /**
+     * 处理状态(0=未处理 1=处理中 2=已完成)
+     */
+    private Long dealStatus;
+
+    /**
+     * 驳回原因
+     */
+    private String reject;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 68 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPreparedProduct.java

@@ -0,0 +1,68 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.math.BigDecimal;
+
+/**
+ * 伙伴商备货单产品明细对象 partner_prepared_product
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_prepared_product")
+public class PartnerPreparedProduct extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 备货单ID(关联partner_prepared.id)
+     */
+    private Long partnerPreparedId;
+
+    /**
+     * 产品ID(关联product_base.id)
+     */
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    private Long quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 79 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerQualification.java

@@ -0,0 +1,79 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商资质对象 partner_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_qualification")
+public class PartnerQualification extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 资质证书编号
+     */
+    private String qualificationNo;
+
+    /**
+     * 资质类型(1=营业执照 2=资质证书 3=其他)
+     */
+    private Long qualificationType;
+
+    /**
+     * 签发机构
+     */
+    private String authority;
+
+    /**
+     * 截止日期
+     */
+    private Date deadline;
+
+    /**
+     * 附件路径
+     */
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 97 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.java

@@ -0,0 +1,97 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商用户对象 partner_user
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_user")
+public class PartnerUser extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 登录账号
+     */
+    private String loginUser;
+
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 电子邮箱
+     */
+    private String email;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 职务
+     */
+    private String duties;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 角色ID(关联角色表)
+     */
+    private Long roleId;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 系统用户ID(关联sys_user.user_id)
+     */
+    private Long sysUserId;
+
+
+}

+ 92 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerWarehouse.java

@@ -0,0 +1,92 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商仓库对象 partner_warehouse
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_warehouse")
+public class PartnerWarehouse extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库性质(1=自有 2=租赁)
+     */
+    private Long warehouseNature;
+
+    /**
+     * 所在地区
+     */
+    private String warehouseLocation;
+
+    /**
+     * 所在地址
+     */
+    private String warehouseAddress;
+
+    /**
+     * 仓库面积(m2)
+     */
+    private String warehouseArea;
+
+    /**
+     * 仓库联系人
+     */
+    private String warehouseContacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerBankBo.java

@@ -0,0 +1,86 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerBank;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商银行账户业务对象 partner_bank
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerBank.class, reverseConvertGenerate = false)
+public class PartnerBankBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 开户名称
+     */
+    private String account;
+
+    /**
+     * 财务登记号
+     */
+    private String registrationNumber;
+
+    /**
+     * 开户银行名称
+     */
+    private String accountBankName;
+
+    /**
+     * 银行账号
+     */
+    private String bankNumber;
+
+    /**
+     * 开户银行所在地
+     */
+    private String bankLocation;
+
+    /**
+     * 银行联行号
+     */
+    private String bankInterbankNumber;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 66 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContactsBo.java

@@ -0,0 +1,66 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerContacts;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商联系人业务对象 partner_contacts
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerContacts.class, reverseConvertGenerate = false)
+public class PartnerContactsBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 联系人姓名
+     */
+    private String name;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 电子邮箱
+     */
+    private String email;
+
+    /**
+     * 联系人类型(1=主要联系人 2=次要联系人)
+     */
+    private Long contactType;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 135 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContractBo.java

@@ -0,0 +1,135 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerContract;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 伙伴商合同业务对象 partner_contract
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerContract.class, reverseConvertGenerate = false)
+public class PartnerContractBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合作项目名称
+     */
+    private String cooperativeName;
+
+    /**
+     * 合作项目ID(关联项目表)
+     */
+//    @NotNull(message = "合作项目ID(关联项目表)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long cooperationId;
+
+    /**
+     * 合作开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 合作结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 合作包类
+     */
+    private String categories;
+
+    /**
+     * 合作商品费用
+     */
+    private Long fee;
+
+    /**
+     * 合作类型(1=战略合作 2=项目合作)
+     */
+    private Long contractType;
+
+    /**
+     * 结算周期
+     */
+    private String settlementCycle;
+
+    /**
+     * 销售目标(万元)
+     */
+    private Long salesTarget;
+
+    /**
+     * 合作区域
+     */
+    private String area;
+
+    /**
+     * 联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    private String annex;
+
+    /**
+     * 重要条款
+     */
+    private String importantTerms;
+
+    /**
+     * 合同状态(0=草稿 1=待审核 2=已通过 3=已驳回)
+     */
+    private Long contractStatus;
+
+    /**
+     * 驳回原因
+     */
+//    @NotBlank(message = "驳回原因不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String rejectInfo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 65 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerDictBo.java

@@ -0,0 +1,65 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerDict;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商字典业务对象 partner_dict
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerDict.class, reverseConvertGenerate = false)
+public class PartnerDictBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 字典名称
+     */
+    private String name;
+
+    /**
+     * 字典编码
+     */
+    private String code;
+
+    /**
+     * 字典值
+     */
+    private String value;
+
+    /**
+     * 备注说明
+     */
+    private String remark;
+
+    /**
+     * 排序
+     */
+    private Long sort;
+
+    /**
+     * 编码索引
+     */
+    private Long codeIndex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerInfoBo.java

@@ -0,0 +1,86 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerInfo;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商基本信息业务对象 partner_info
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerInfo.class, reverseConvertGenerate = false)
+public class PartnerInfoBo extends BaseEntity {
+
+    /**
+     * ID(主键,用于关联)
+     */
+    private Long id;
+
+    /**
+     * 伙伴商编号(业务编号,唯一)
+     */
+    private String partnerNo;
+
+    /**
+     * 伙伴商名称
+     */
+    private String partnerName;
+
+    /**
+     * 公司简称
+     */
+    private String company;
+
+    /**
+     * 合作型态(0=伙伴商 1=经销商 2=代理商)
+     */
+    private Long partnerCooperateType;
+
+    /**
+     * 法人代表
+     */
+    private String legal;
+
+    /**
+     * 固定电话
+     */
+    private String telephone;
+
+    /**
+     * 传真号码
+     */
+    private String fax;
+
+    /**
+     * 公司注册地址
+     */
+    private String registerAddress;
+
+    /**
+     * 分司注册地址
+     */
+    private String operatingAddress;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+
+}

+ 128 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedBo.java

@@ -0,0 +1,128 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerPrepared;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 伙伴商备货单业务对象 partner_prepared
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerPrepared.class, reverseConvertGenerate = false)
+public class PartnerPreparedBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 备货单编号
+     */
+    private String preparedNo;
+
+    /**
+     * 合作项目代码(关联字典 cooperation_code)
+     */
+    private String cooperationCode;
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 采购单位名称
+     */
+    private String purchasingUnitName;
+
+    /**
+     * 备货金额
+     */
+    private Long amount;
+
+    /**
+     * 区域
+     */
+    private String area;
+
+    /**
+     * 预计时间
+     */
+    private Date estimatedTime;
+
+    /**
+     * 到期日期
+     */
+    private Date dueDate;
+
+    /**
+     * 发票附件
+     */
+    private String invoiceAttachment;
+
+    /**
+     * 采购单位
+     */
+    private String purchasingUnit;
+
+    /**
+     * 联系人
+     */
+    private String person;
+
+    /**
+     * 部门
+     */
+    private String deptName;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 备货状态(0=待审核 1=已通过 2=已驳回)
+     */
+    private Long preparedStatus;
+
+    /**
+     * 处理状态(0=未处理 1=处理中 2=已完成)
+     */
+    private Long dealStatus;
+
+    /**
+     * 驳回原因
+     */
+    private String reject;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 62 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedProductBo.java

@@ -0,0 +1,62 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerPreparedProduct;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+
+/**
+ * 伙伴商备货单产品明细业务对象 partner_prepared_product
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerPreparedProduct.class, reverseConvertGenerate = false)
+public class PartnerPreparedProductBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 备货单ID(关联partner_prepared.id)
+     */
+    private Long partnerPreparedId;
+
+    /**
+     * 产品ID(关联product_base.id)
+     */
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    private Long quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 75 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerQualificationBo.java

@@ -0,0 +1,75 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerQualification;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 伙伴商资质业务对象 partner_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerQualification.class, reverseConvertGenerate = false)
+public class PartnerQualificationBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 资质证书编号
+     */
+    private String qualificationNo;
+
+    /**
+     * 资质类型(1=营业执照 2=资质证书 3=其他)
+     */
+    private Long qualificationType;
+
+    /**
+     * 签发机构
+     */
+    private String authority;
+
+    /**
+     * 截止日期
+     */
+//    @NotNull(message = "截止日期不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Date deadline;
+
+    /**
+     * 附件路径
+     */
+//    @NotBlank(message = "附件路径不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 93 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerUserBo.java

@@ -0,0 +1,93 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerUser;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商用户业务对象 partner_user
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerUser.class, reverseConvertGenerate = false)
+public class PartnerUserBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 登录账号
+     */
+    private String loginUser;
+
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 电子邮箱
+     */
+    private String email;
+
+    /**
+     * 联系电话
+     */
+//    @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String phone;
+
+    /**
+     * 职务
+     */
+    private String duties;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 角色ID(关联角色表)
+     */
+//    @NotNull(message = "角色ID(关联角色表)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long roleId;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+    /**
+     * 系统用户ID(关联sys_user.user_id)
+     */
+    private Long sysUserId;
+
+
+}

+ 86 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerWarehouseBo.java

@@ -0,0 +1,86 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerWarehouse;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商仓库业务对象 partner_warehouse
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerWarehouse.class, reverseConvertGenerate = false)
+public class PartnerWarehouseBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    private Long partnerId;
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库性质(1=自有 2=租赁)
+     */
+    private Long warehouseNature;
+
+    /**
+     * 所在地区
+     */
+    private String warehouseLocation;
+
+    /**
+     * 所在地址
+     */
+    private String warehouseAddress;
+
+    /**
+     * 仓库面积(m2)
+     */
+    private String warehouseArea;
+
+    /**
+     * 仓库联系人
+     */
+    private String warehouseContacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+//    @NotBlank(message = "状态(0正常 1停用)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 备注
+     */
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String remark;
+
+
+}

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerBankVo.java

@@ -0,0 +1,106 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerBank;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商银行账户视图对象 partner_bank
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerBank.class)
+public class PartnerBankVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 开户名称
+     */
+    @ExcelProperty(value = "开户名称")
+    private String account;
+
+    /**
+     * 财务登记号
+     */
+    @ExcelProperty(value = "财务登记号")
+    private String registrationNumber;
+
+    /**
+     * 开户银行名称
+     */
+    @ExcelProperty(value = "开户银行名称")
+    private String accountBankName;
+
+    /**
+     * 银行账号
+     */
+    @ExcelProperty(value = "银行账号")
+    private String bankNumber;
+
+    /**
+     * 开户银行所在地
+     */
+    @ExcelProperty(value = "开户银行所在地")
+    private String bankLocation;
+
+    /**
+     * 银行联行号
+     */
+    @ExcelProperty(value = "银行联行号")
+    private String bankInterbankNumber;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 地址
+     */
+    @ExcelProperty(value = "地址")
+    private String address;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 83 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContactsVo.java

@@ -0,0 +1,83 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerContacts;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商联系人视图对象 partner_contacts
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerContacts.class)
+public class PartnerContactsVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 联系人姓名
+     */
+    @ExcelProperty(value = "联系人姓名")
+    private String name;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 电子邮箱
+     */
+    @ExcelProperty(value = "电子邮箱")
+    private String email;
+
+    /**
+     * 联系人类型(1=主要联系人 2=次要联系人)
+     */
+    @ExcelProperty(value = "联系人类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1==主要联系人,2==次要联系人")
+    private Long contactType;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 166 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContractVo.java

@@ -0,0 +1,166 @@
+package org.dromara.customer.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.PartnerContract;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商合同视图对象 partner_contract
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerContract.class)
+public class PartnerContractVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 合同编号
+     */
+    @ExcelProperty(value = "合同编号")
+    private String contractNo;
+
+    /**
+     * 合作项目名称
+     */
+    @ExcelProperty(value = "合作项目名称")
+    private String cooperativeName;
+
+    /**
+     * 合作项目ID(关联项目表)
+     */
+    @ExcelProperty(value = "合作项目ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联项目表")
+    private Long cooperationId;
+
+    /**
+     * 合作开始时间
+     */
+    @ExcelProperty(value = "合作开始时间")
+    private Date startTime;
+
+    /**
+     * 合作结束时间
+     */
+    @ExcelProperty(value = "合作结束时间")
+    private Date endTime;
+
+    /**
+     * 合作包类
+     */
+    @ExcelProperty(value = "合作包类")
+    private String categories;
+
+    /**
+     * 合作商品费用
+     */
+    @ExcelProperty(value = "合作商品费用")
+    private Long fee;
+
+    /**
+     * 合作类型(1=战略合作 2=项目合作)
+     */
+    @ExcelProperty(value = "合作类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1==战略合作,2==项目合作")
+    private Long contractType;
+
+    /**
+     * 结算周期
+     */
+    @ExcelProperty(value = "结算周期")
+    private String settlementCycle;
+
+    /**
+     * 销售目标(万元)
+     */
+    @ExcelProperty(value = "销售目标", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "万=元")
+    private Long salesTarget;
+
+    /**
+     * 合作区域
+     */
+    @ExcelProperty(value = "合作区域")
+    private String area;
+
+    /**
+     * 联系人
+     */
+    @ExcelProperty(value = "联系人")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    @ExcelProperty(value = "附件路径")
+    private String annex;
+
+    /**
+     * 重要条款
+     */
+    @ExcelProperty(value = "重要条款")
+    private String importantTerms;
+
+    /**
+     * 合同状态(0=草稿 1=待审核 2=已通过 3=已驳回)
+     */
+    @ExcelProperty(value = "合同状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==草稿,1==待审核,2==已通过,3==已驳回")
+    private Long contractStatus;
+
+    /**
+     * 驳回原因
+     */
+    @ExcelProperty(value = "驳回原因")
+    private String rejectInfo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 81 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerDictVo.java

@@ -0,0 +1,81 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerDict;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商字典视图对象 partner_dict
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerDict.class)
+public class PartnerDictVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 字典名称
+     */
+    @ExcelProperty(value = "字典名称")
+    private String name;
+
+    /**
+     * 字典编码
+     */
+    @ExcelProperty(value = "字典编码")
+    private String code;
+
+    /**
+     * 字典值
+     */
+    @ExcelProperty(value = "字典值")
+    private String value;
+
+    /**
+     * 备注说明
+     */
+    @ExcelProperty(value = "备注说明")
+    private String remark;
+
+    /**
+     * 排序
+     */
+    @ExcelProperty(value = "排序")
+    private Long sort;
+
+    /**
+     * 编码索引
+     */
+    @ExcelProperty(value = "编码索引")
+    private Long codeIndex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+
+}

+ 108 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerInfoVo.java

@@ -0,0 +1,108 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerInfo;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商基本信息视图对象 partner_info
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerInfo.class)
+public class PartnerInfoVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID(主键,用于关联)
+     */
+    @ExcelProperty(value = "ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "主=键,用于关联")
+    private Long id;
+
+    /**
+     * 伙伴商编号(业务编号,唯一)
+     */
+    @ExcelProperty(value = "伙伴商编号", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "业=务编号,唯一")
+    private String partnerNo;
+
+    /**
+     * 伙伴商名称
+     */
+    @ExcelProperty(value = "伙伴商名称")
+    private String partnerName;
+
+    /**
+     * 公司简称
+     */
+    @ExcelProperty(value = "公司简称")
+    private String company;
+
+    /**
+     * 合作型态(0=伙伴商 1=经销商 2=代理商)
+     */
+    @ExcelProperty(value = "合作型态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==伙伴商,1==经销商,2==代理商")
+    private Long partnerCooperateType;
+
+    /**
+     * 法人代表
+     */
+    @ExcelProperty(value = "法人代表")
+    private String legal;
+
+    /**
+     * 固定电话
+     */
+    @ExcelProperty(value = "固定电话")
+    private String telephone;
+
+    /**
+     * 传真号码
+     */
+    @ExcelProperty(value = "传真号码")
+    private String fax;
+
+    /**
+     * 公司注册地址
+     */
+    @ExcelProperty(value = "公司注册地址")
+    private String registerAddress;
+
+    /**
+     * 分司注册地址
+     */
+    @ExcelProperty(value = "分司注册地址")
+    private String operatingAddress;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+
+}

+ 78 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedProductVo.java

@@ -0,0 +1,78 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerPreparedProduct;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商备货单产品明细视图对象 partner_prepared_product
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerPreparedProduct.class)
+public class PartnerPreparedProductVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 备货单ID(关联partner_prepared.id)
+     */
+    @ExcelProperty(value = "备货单ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_prepared.id")
+    private Long partnerPreparedId;
+
+    /**
+     * 产品ID(关联product_base.id)
+     */
+    @ExcelProperty(value = "产品ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联product_base.id")
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    @ExcelProperty(value = "数量")
+    private Long quantity;
+
+    /**
+     * 单价
+     */
+    @ExcelProperty(value = "单价")
+    private BigDecimal price;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 158 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedVo.java

@@ -0,0 +1,158 @@
+package org.dromara.customer.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.PartnerPrepared;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商备货单视图对象 partner_prepared
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerPrepared.class)
+public class PartnerPreparedVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 备货单编号
+     */
+    @ExcelProperty(value = "备货单编号")
+    private String preparedNo;
+
+    /**
+     * 合作项目代码(关联字典 cooperation_code)
+     */
+    @ExcelProperty(value = "合作项目代码")
+    private String cooperationCode;
+
+    /**
+     * 客户名称
+     */
+    @ExcelProperty(value = "客户名称")
+    private String customerName;
+
+    /**
+     * 采购单位名称
+     */
+    @ExcelProperty(value = "采购单位名称")
+    private String purchasingUnitName;
+
+    /**
+     * 备货金额
+     */
+    @ExcelProperty(value = "备货金额")
+    private Long amount;
+
+    /**
+     * 区域
+     */
+    @ExcelProperty(value = "区域")
+    private String area;
+
+    /**
+     * 预计时间
+     */
+    @ExcelProperty(value = "预计时间")
+    private Date estimatedTime;
+
+    /**
+     * 到期日期
+     */
+    @ExcelProperty(value = "到期日期")
+    private Date dueDate;
+
+    /**
+     * 发票附件
+     */
+    @ExcelProperty(value = "发票附件")
+    private String invoiceAttachment;
+
+    /**
+     * 采购单位
+     */
+    @ExcelProperty(value = "采购单位")
+    private String purchasingUnit;
+
+    /**
+     * 联系人
+     */
+    @ExcelProperty(value = "联系人")
+    private String person;
+
+    /**
+     * 部门
+     */
+    @ExcelProperty(value = "部门")
+    private String deptName;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 备货状态(0=待审核 1=已通过 2=已驳回)
+     */
+    @ExcelProperty(value = "备货状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==待审核,1==已通过,2==已驳回")
+    private Long preparedStatus;
+
+    /**
+     * 处理状态(0=未处理 1=处理中 2=已完成)
+     */
+    @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==未处理,1==处理中,2==已完成")
+    private Long dealStatus;
+
+    /**
+     * 驳回原因
+     */
+    @ExcelProperty(value = "驳回原因")
+    private String reject;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 91 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerQualificationVo.java

@@ -0,0 +1,91 @@
+package org.dromara.customer.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.PartnerQualification;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商资质视图对象 partner_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerQualification.class)
+public class PartnerQualificationVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 资质证书编号
+     */
+    @ExcelProperty(value = "资质证书编号")
+    private String qualificationNo;
+
+    /**
+     * 资质类型(1=营业执照 2=资质证书 3=其他)
+     */
+    @ExcelProperty(value = "资质类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1==营业执照,2==资质证书,3==其他")
+    private Long qualificationType;
+
+    /**
+     * 签发机构
+     */
+    @ExcelProperty(value = "签发机构")
+    private String authority;
+
+    /**
+     * 截止日期
+     */
+    @ExcelProperty(value = "截止日期")
+    private Date deadline;
+
+    /**
+     * 附件路径
+     */
+    @ExcelProperty(value = "附件路径")
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 107 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerUserVo.java

@@ -0,0 +1,107 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerUser;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商用户视图对象 partner_user
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerUser.class)
+public class PartnerUserVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 登录账号
+     */
+    @ExcelProperty(value = "登录账号")
+    private String loginUser;
+
+    /**
+     * 用户姓名
+     */
+    @ExcelProperty(value = "用户姓名")
+    private String name;
+
+    /**
+     * 电子邮箱
+     */
+    @ExcelProperty(value = "电子邮箱")
+    private String email;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 职务
+     */
+    @ExcelProperty(value = "职务")
+    private String duties;
+
+    /**
+     * 角色名称
+     */
+    @ExcelProperty(value = "角色名称")
+    private String roleName;
+
+    /**
+     * 角色ID(关联角色表)
+     */
+    @ExcelProperty(value = "角色ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联角色表")
+    private Long roleId;
+
+    /**
+     * 登录密码
+     */
+    @ExcelProperty(value = "登录密码")
+    private String password;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 108 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerWarehouseVo.java

@@ -0,0 +1,108 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerWarehouse;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商仓库视图对象 partner_warehouse
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerWarehouse.class)
+public class PartnerWarehouseVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 伙伴商ID(关联partner_info.id)
+     */
+    @ExcelProperty(value = "伙伴商ID", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "关=联partner_info.id")
+    private Long partnerId;
+
+    /**
+     * 仓库名称
+     */
+    @ExcelProperty(value = "仓库名称")
+    private String name;
+
+    /**
+     * 仓库性质(1=自有 2=租赁)
+     */
+    @ExcelProperty(value = "仓库性质", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1==自有,2==租赁")
+    private Long warehouseNature;
+
+    /**
+     * 所在地区
+     */
+    @ExcelProperty(value = "所在地区")
+    private String warehouseLocation;
+
+    /**
+     * 所在地址
+     */
+    @ExcelProperty(value = "所在地址")
+    private String warehouseAddress;
+
+    /**
+     * 仓库面积(m2)
+     */
+    @ExcelProperty(value = "仓库面积", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "m=2")
+    private String warehouseArea;
+
+    /**
+     * 仓库联系人
+     */
+    @ExcelProperty(value = "仓库联系人")
+    private String warehouseContacts;
+
+    /**
+     * 联系电话
+     */
+    @ExcelProperty(value = "联系电话")
+    private String phone;
+
+    /**
+     * 附件路径
+     */
+    @ExcelProperty(value = "附件路径")
+    private String annex;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerBankMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerBank;
+import org.dromara.customer.domain.vo.PartnerBankVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商银行账户Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerBankMapper extends BaseMapperPlus<PartnerBank, PartnerBankVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContactsMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerContacts;
+import org.dromara.customer.domain.vo.PartnerContactsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商联系人Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerContactsMapper extends BaseMapperPlus<PartnerContacts, PartnerContactsVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContractMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerContract;
+import org.dromara.customer.domain.vo.PartnerContractVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商合同Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerContractMapper extends BaseMapperPlus<PartnerContract, PartnerContractVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerDictMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerDict;
+import org.dromara.customer.domain.vo.PartnerDictVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商字典Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerDictMapper extends BaseMapperPlus<PartnerDict, PartnerDictVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerInfoMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerInfo;
+import org.dromara.customer.domain.vo.PartnerInfoVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商基本信息Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerInfoMapper extends BaseMapperPlus<PartnerInfo, PartnerInfoVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerPrepared;
+import org.dromara.customer.domain.vo.PartnerPreparedVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商备货单Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerPreparedMapper extends BaseMapperPlus<PartnerPrepared, PartnerPreparedVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedProductMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerPreparedProduct;
+import org.dromara.customer.domain.vo.PartnerPreparedProductVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商备货单产品明细Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerPreparedProductMapper extends BaseMapperPlus<PartnerPreparedProduct, PartnerPreparedProductVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerQualificationMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerQualification;
+import org.dromara.customer.domain.vo.PartnerQualificationVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商资质Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerQualificationMapper extends BaseMapperPlus<PartnerQualification, PartnerQualificationVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerUserMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerUser;
+import org.dromara.customer.domain.vo.PartnerUserVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商用户Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerUserMapper extends BaseMapperPlus<PartnerUser, PartnerUserVo> {
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerWarehouseMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerWarehouse;
+import org.dromara.customer.domain.vo.PartnerWarehouseVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商仓库Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface PartnerWarehouseMapper extends BaseMapperPlus<PartnerWarehouse, PartnerWarehouseVo> {
+
+}

+ 164 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcAddressController.java

@@ -0,0 +1,164 @@
+package org.dromara.customer.pc.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.validation.constraints.*;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.bo.CustomerShippingAddressBo;
+import org.dromara.customer.domain.vo.CustomerShippingAddressVo;
+import org.dromara.customer.service.ICustomerShippingAddressService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+
+/**
+ * PC端 - 收货地址管理
+ * 前端访问路由地址为:/pc/enterprise/address
+ *
+ * @author Claude
+ * @date 2026-01-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise/address")
+public class PcAddressController extends BaseController {
+
+    private final ICustomerShippingAddressService customerShippingAddressService;
+
+    /**
+     * 查询当前企业的收货地址列表
+     * PC端用户只能查询自己企业的地址
+     */
+    @GetMapping("/list")
+    public TableDataInfo<CustomerShippingAddressVo> list(CustomerShippingAddressBo bo, PageQuery pageQuery) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        return customerShippingAddressService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 获取收货地址详细信息
+     * PC端用户只能查询自己企业的地址
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id}")
+    public R<CustomerShippingAddressVo> getInfo(@NotNull(message = "主键不能为空")
+                                                @PathVariable("id") Long id) {
+        // 查询地址信息
+        CustomerShippingAddressVo vo = customerShippingAddressService.queryById(id);
+
+        // 验证地址是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该地址");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 新增收货地址
+     */
+    @Log(title = "PC端-收货地址", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody CustomerShippingAddressBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止为其他企业添加地址
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerShippingAddressService.insertByBo(bo));
+    }
+
+    /**
+     * 修改收货地址
+     */
+    @Log(title = "PC端-收货地址", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody CustomerShippingAddressBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证地址是否属于当前用户的企业
+        CustomerShippingAddressVo existingAddress = customerShippingAddressService.queryById(bo.getId());
+        if (existingAddress == null) {
+            return R.fail("地址不存在");
+        }
+        if (!customerId.equals(existingAddress.getCustomerId())) {
+            return R.fail("无权修改该地址");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerShippingAddressService.updateByBo(bo));
+    }
+
+    /**
+     * 删除收货地址
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "PC端-收货地址", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有地址是否都属于当前用户的企业
+        for (Long id : ids) {
+            CustomerShippingAddressVo address = customerShippingAddressService.queryById(id);
+            if (address == null) {
+                return R.fail("地址ID " + id + " 不存在");
+            }
+            if (!customerId.equals(address.getCustomerId())) {
+                return R.fail("无权删除地址ID " + id);
+            }
+        }
+
+        return toAjax(customerShippingAddressService.deleteWithValidByIds(List.of(ids), true));
+    }
+
+    /**
+     * 设置默认地址
+     */
+    @Log(title = "PC端-收货地址", businessType = BusinessType.UPDATE)
+    @PutMapping("/default")
+    public R<Void> changeDefaultAddress(@RequestBody CustomerShippingAddressBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证地址是否属于当前用户的企业
+        CustomerShippingAddressVo address = customerShippingAddressService.queryById(bo.getId());
+        if (address == null) {
+            return R.fail("地址不存在");
+        }
+        if (!customerId.equals(address.getCustomerId())) {
+            return R.fail("无权设置该地址为默认");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerShippingAddressService.changeDefaultAddress(bo));
+    }
+}

+ 164 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcContactController.java

@@ -0,0 +1,164 @@
+package org.dromara.customer.pc.controller;
+
+import java.util.List;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import lombok.RequiredArgsConstructor;
+import jakarta.validation.constraints.*;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.bo.CustomerContactBo;
+import org.dromara.customer.domain.vo.CustomerContactVo;
+import org.dromara.customer.service.ICustomerContactService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+
+/**
+ * PC端 - 人员管理
+ * 前端访问路由地址为:/pc/organization/contact
+ *
+ * @author Claude
+ * @date 2026-01-27
+ */
+@SaIgnore
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/organization/contact")
+public class PcContactController extends BaseController {
+
+    private final ICustomerContactService customerContactService;
+
+    /**
+     * 获取当前登录用户的个人信息
+     */
+    @GetMapping("/current")
+    public R<CustomerContactVo> getCurrentUserInfo() {
+        // TODO: 需要根据当前登录用户的实际ID查询联系人信息
+        // 目前LoginHelper.getUserId()返回的是customerId(企业ID)
+        // 需要通过其他方式(如手机号、用户名)来查询当前用户的联系人记录
+        Long customerId = LoginHelper.getUserId();
+
+        // 查询该企业下的联系人(不限制是否为主联系人)
+        CustomerContactBo bo = new CustomerContactBo();
+        bo.setCustomerId(customerId);
+
+        List<CustomerContactVo> list = customerContactService.queryList(bo);
+        if (list != null && !list.isEmpty()) {
+            return R.ok(list.get(0));
+        }
+
+        return R.fail("未找到当前用户信息,customerId: " + customerId);
+    }
+
+    /**
+     * 查询当前企业的联系人列表
+     * PC端用户只能查询自己企业的联系人
+     */
+    @GetMapping("/list")
+    public TableDataInfo<CustomerContactVo> list(CustomerContactBo bo, PageQuery pageQuery) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        return customerContactService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 获取联系人详细信息
+     * PC端用户只能查询自己企业的联系人
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id:[0-9]+}")
+    public R<CustomerContactVo> getInfo(@NotNull(message = "主键不能为空")
+                                        @PathVariable("id") Long id) {
+        // 查询联系人信息
+        CustomerContactVo vo = customerContactService.queryById(id);
+
+        // 验证联系人是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该联系人");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 新增联系人
+     */
+    @Log(title = "PC端-人员管理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody CustomerContactBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止为其他企业添加联系人
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerContactService.insertByBo(bo));
+    }
+
+    /**
+     * 修改联系人
+     */
+    @Log(title = "PC端-人员管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody CustomerContactBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证联系人是否属于当前用户的企业
+        CustomerContactVo existingContact = customerContactService.queryById(bo.getId());
+        if (existingContact == null) {
+            return R.fail("联系人不存在");
+        }
+        if (!customerId.equals(existingContact.getCustomerId())) {
+            return R.fail("无权修改该联系人");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerContactService.updateByBo(bo));
+    }
+
+    /**
+     * 删除联系人
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "PC端-人员管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有联系人是否都属于当前用户的企业
+        for (Long id : ids) {
+            CustomerContactVo contact = customerContactService.queryById(id);
+            if (contact == null) {
+                return R.fail("联系人ID " + id + " 不存在");
+            }
+            if (!customerId.equals(contact.getCustomerId())) {
+                return R.fail("无权删除联系人ID " + id);
+            }
+        }
+
+        return toAjax(customerContactService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 155 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcDeptController.java

@@ -0,0 +1,155 @@
+package org.dromara.customer.pc.controller;
+
+import java.util.List;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import lombok.RequiredArgsConstructor;
+import jakarta.validation.constraints.*;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.bo.CustomerDeptBo;
+import org.dromara.customer.domain.vo.CustomerDeptTreeVo;
+import org.dromara.customer.domain.vo.CustomerDeptVo;
+import org.dromara.customer.service.ICustomerDeptService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+
+/**
+ * PC端 - 部门管理
+ * 前端访问路由地址为:/pc/organization/dept
+ *
+ * @author Claude
+ * @date 2026-01-27
+ */
+@SaIgnore
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/organization/dept")
+public class PcDeptController extends BaseController {
+
+    private final ICustomerDeptService customerDeptService;
+
+    /**
+     * 查询当前企业的部门树
+     * PC端用户只能查询自己企业的部门
+     */
+    @GetMapping("/tree")
+    public R<List<CustomerDeptTreeVo>> getDeptTree() {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        List<CustomerDeptTreeVo> tree = customerDeptService.getCustomerDeptTree(customerId);
+        return R.ok(tree);
+    }
+
+    /**
+     * 查询当前企业的部门列表
+     * PC端用户只能查询自己企业的部门
+     */
+    @GetMapping("/list")
+    public R<List<CustomerDeptVo>> list(CustomerDeptBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        List<CustomerDeptVo> list = customerDeptService.queryList(bo);
+        return R.ok(list);
+    }
+
+    /**
+     * 获取部门详细信息
+     * PC端用户只能查询自己企业的部门
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id}")
+    public R<CustomerDeptVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        // 查询部门信息
+        CustomerDeptVo vo = customerDeptService.queryById(id);
+
+        // 验证部门是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该部门");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 新增部门
+     */
+    @Log(title = "PC端-部门管理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody CustomerDeptBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止为其他企业添加部门
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerDeptService.insertByBo(bo));
+    }
+
+    /**
+     * 修改部门
+     */
+    @Log(title = "PC端-部门管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody CustomerDeptBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证部门是否属于当前用户的企业
+        CustomerDeptVo existingDept = customerDeptService.queryById(bo.getDeptId());
+        if (existingDept == null) {
+            return R.fail("部门不存在");
+        }
+        if (!customerId.equals(existingDept.getCustomerId())) {
+            return R.fail("无权修改该部门");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerDeptService.updateByBo(bo));
+    }
+
+    /**
+     * 删除部门
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "PC端-部门管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有部门是否都属于当前用户的企业
+        for (Long id : ids) {
+            CustomerDeptVo dept = customerDeptService.queryById(id);
+            if (dept == null) {
+                return R.fail("部门ID " + id + " 不存在");
+            }
+            if (!customerId.equals(dept.getCustomerId())) {
+                return R.fail("无权删除部门ID " + id);
+            }
+        }
+
+        return toAjax(customerDeptService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 72 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcEnterpriseController.java

@@ -0,0 +1,72 @@
+package org.dromara.customer.pc.controller;
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.bo.CustomerInfoBo;
+import org.dromara.customer.domain.vo.CustomerInfoVo;
+import org.dromara.customer.service.ICustomerInfoService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * PC端 - 企业信息管理
+ * 前端访问路由地址为:/pc/enterprise
+ *
+ * @author Claude
+ * @date 2026-01-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise")
+public class PcEnterpriseController extends BaseController {
+
+    private final ICustomerInfoService customerInfoService;
+
+    /**
+     * 查询当前企业信息
+     * PC端用户只能查询自己所属企业的信息
+     */
+    @GetMapping("/info")
+    public R<CustomerInfoVo> getInfo() {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        if (customerId == null) {
+            return R.fail("用户未登录或企业信息不存在");
+        }
+
+        // 查询企业信息
+        CustomerInfoVo vo = customerInfoService.queryById(customerId);
+        if (vo == null) {
+            return R.fail("企业信息不存在");
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 修改当前企业信息
+     * PC端用户只能修改自己所属企业的信息
+     */
+    @Log(title = "PC端-企业信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/info")
+    public R<Void> updateInfo(@Validated @RequestBody CustomerInfoBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        if (customerId == null) {
+            return R.fail("用户未登录或企业信息不存在");
+        }
+
+        // 强制设置企业ID,防止越权修改其他企业信息
+        bo.setId(customerId);
+
+        // 调用Service更新企业信息
+        boolean result = customerInfoService.updateByBo(bo);
+        return toAjax(result);
+    }
+}

+ 140 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcInvoiceController.java

@@ -0,0 +1,140 @@
+package org.dromara.customer.pc.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.validation.constraints.*;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.customer.domain.bo.CustomerInvoiceInfoBo;
+import org.dromara.customer.domain.vo.CustomerInvoiceInfoVo;
+import org.dromara.customer.service.ICustomerInvoiceInfoService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+
+/**
+ * PC端 - 发票信息管理
+ * 前端访问路由地址为:/pc/enterprise/invoice
+ *
+ * @author Claude
+ * @date 2026-01-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pc/enterprise/invoice")
+public class PcInvoiceController extends BaseController {
+
+    private final ICustomerInvoiceInfoService customerInvoiceInfoService;
+
+    /**
+     * 查询当前企业的发票信息列表
+     * PC端用户只能查询自己企业的发票
+     */
+    @GetMapping("/list")
+    public TableDataInfo<CustomerInvoiceInfoVo> list(CustomerInvoiceInfoBo bo, PageQuery pageQuery) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止越权访问
+        bo.setCustomerId(customerId);
+
+        return customerInvoiceInfoService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 获取发票信息详细信息
+     * PC端用户只能查询自己企业的发票
+     *
+     * @param id 主键
+     */
+    @GetMapping("/{id}")
+    public R<CustomerInvoiceInfoVo> getInfo(@NotNull(message = "主键不能为空")
+                                            @PathVariable("id") Long id) {
+        // 查询发票信息
+        CustomerInvoiceInfoVo vo = customerInvoiceInfoService.queryById(id);
+
+        // 验证发票是否属于当前用户的企业
+        if (vo != null) {
+            Long customerId = LoginHelper.getUserId();
+            if (!customerId.equals(vo.getCustomerId())) {
+                return R.fail("无权访问该发票信息");
+            }
+        }
+
+        return R.ok(vo);
+    }
+
+    /**
+     * 新增发票信息
+     */
+    @Log(title = "PC端-发票信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody CustomerInvoiceInfoBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+        // 强制设置企业ID,防止为其他企业添加发票
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerInvoiceInfoService.insertByBo(bo));
+    }
+
+    /**
+     * 修改发票信息
+     */
+    @Log(title = "PC端-发票信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody CustomerInvoiceInfoBo bo) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证发票是否属于当前用户的企业
+        CustomerInvoiceInfoVo existingInvoice = customerInvoiceInfoService.queryById(bo.getId());
+        if (existingInvoice == null) {
+            return R.fail("发票信息不存在");
+        }
+        if (!customerId.equals(existingInvoice.getCustomerId())) {
+            return R.fail("无权修改该发票信息");
+        }
+
+        // 强制设置企业ID
+        bo.setCustomerId(customerId);
+
+        return toAjax(customerInvoiceInfoService.updateByBo(bo));
+    }
+
+    /**
+     * 删除发票信息
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "PC端-发票信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        // 获取当前登录用户的企业ID
+        Long customerId = LoginHelper.getUserId();
+
+        // 验证所有发票是否都属于当前用户的企业
+        for (Long id : ids) {
+            CustomerInvoiceInfoVo invoice = customerInvoiceInfoService.queryById(id);
+            if (invoice == null) {
+                return R.fail("发票信息ID " + id + " 不存在");
+            }
+            if (!customerId.equals(invoice.getCustomerId())) {
+                return R.fail("无权删除发票信息ID " + id);
+            }
+        }
+
+        return toAjax(customerInvoiceInfoService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerBankService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerBank;
+import org.dromara.customer.domain.vo.PartnerBankVo;
+import org.dromara.customer.domain.bo.PartnerBankBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商银行账户Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerBankService extends IService<PartnerBank>{
+
+    /**
+     * 查询伙伴商银行账户
+     *
+     * @param id 主键
+     * @return 伙伴商银行账户
+     */
+    PartnerBankVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商银行账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商银行账户分页列表
+     */
+    TableDataInfo<PartnerBankVo> queryPageList(PartnerBankBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商银行账户列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商银行账户列表
+     */
+    List<PartnerBankVo> queryList(PartnerBankBo bo);
+
+    /**
+     * 新增伙伴商银行账户
+     *
+     * @param bo 伙伴商银行账户
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerBankBo bo);
+
+    /**
+     * 修改伙伴商银行账户
+     *
+     * @param bo 伙伴商银行账户
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerBankBo bo);
+
+    /**
+     * 校验并批量删除伙伴商银行账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContactsService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerContacts;
+import org.dromara.customer.domain.vo.PartnerContactsVo;
+import org.dromara.customer.domain.bo.PartnerContactsBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商联系人Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerContactsService extends IService<PartnerContacts>{
+
+    /**
+     * 查询伙伴商联系人
+     *
+     * @param id 主键
+     * @return 伙伴商联系人
+     */
+    PartnerContactsVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商联系人列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商联系人分页列表
+     */
+    TableDataInfo<PartnerContactsVo> queryPageList(PartnerContactsBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商联系人列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商联系人列表
+     */
+    List<PartnerContactsVo> queryList(PartnerContactsBo bo);
+
+    /**
+     * 新增伙伴商联系人
+     *
+     * @param bo 伙伴商联系人
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerContactsBo bo);
+
+    /**
+     * 修改伙伴商联系人
+     *
+     * @param bo 伙伴商联系人
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerContactsBo bo);
+
+    /**
+     * 校验并批量删除伙伴商联系人信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContractService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerContract;
+import org.dromara.customer.domain.vo.PartnerContractVo;
+import org.dromara.customer.domain.bo.PartnerContractBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商合同Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerContractService extends IService<PartnerContract>{
+
+    /**
+     * 查询伙伴商合同
+     *
+     * @param id 主键
+     * @return 伙伴商合同
+     */
+    PartnerContractVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商合同列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商合同分页列表
+     */
+    TableDataInfo<PartnerContractVo> queryPageList(PartnerContractBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商合同列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商合同列表
+     */
+    List<PartnerContractVo> queryList(PartnerContractBo bo);
+
+    /**
+     * 新增伙伴商合同
+     *
+     * @param bo 伙伴商合同
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerContractBo bo);
+
+    /**
+     * 修改伙伴商合同
+     *
+     * @param bo 伙伴商合同
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerContractBo bo);
+
+    /**
+     * 校验并批量删除伙伴商合同信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerDictService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerDict;
+import org.dromara.customer.domain.vo.PartnerDictVo;
+import org.dromara.customer.domain.bo.PartnerDictBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商字典Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerDictService extends IService<PartnerDict>{
+
+    /**
+     * 查询伙伴商字典
+     *
+     * @param id 主键
+     * @return 伙伴商字典
+     */
+    PartnerDictVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商字典列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商字典分页列表
+     */
+    TableDataInfo<PartnerDictVo> queryPageList(PartnerDictBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商字典列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商字典列表
+     */
+    List<PartnerDictVo> queryList(PartnerDictBo bo);
+
+    /**
+     * 新增伙伴商字典
+     *
+     * @param bo 伙伴商字典
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerDictBo bo);
+
+    /**
+     * 修改伙伴商字典
+     *
+     * @param bo 伙伴商字典
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerDictBo bo);
+
+    /**
+     * 校验并批量删除伙伴商字典信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 77 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerInfoService.java

@@ -0,0 +1,77 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerInfo;
+import org.dromara.customer.domain.vo.PartnerInfoVo;
+import org.dromara.customer.domain.bo.PartnerInfoBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商基本信息Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerInfoService extends IService<PartnerInfo>{
+
+    /**
+     * 查询伙伴商基本信息
+     *
+     * @param id 主键
+     * @return 伙伴商基本信息
+     */
+    PartnerInfoVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商基本信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商基本信息分页列表
+     */
+    TableDataInfo<PartnerInfoVo> queryPageList(PartnerInfoBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商基本信息列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商基本信息列表
+     */
+    List<PartnerInfoVo> queryList(PartnerInfoBo bo);
+
+    /**
+     * 新增伙伴商基本信息
+     *
+     * @param bo 伙伴商基本信息
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerInfoBo bo);
+
+    /**
+     * 修改伙伴商基本信息
+     *
+     * @param bo 伙伴商基本信息
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerInfoBo bo);
+
+    /**
+     * 校验并批量删除伙伴商基本信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 获取当前登录用户的伙伴商信息
+     *
+     * @return 伙伴商基本信息
+     */
+    PartnerInfoVo queryCurrentPartnerInfo();
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedProductService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerPreparedProduct;
+import org.dromara.customer.domain.vo.PartnerPreparedProductVo;
+import org.dromara.customer.domain.bo.PartnerPreparedProductBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商备货单产品明细Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerPreparedProductService extends IService<PartnerPreparedProduct>{
+
+    /**
+     * 查询伙伴商备货单产品明细
+     *
+     * @param id 主键
+     * @return 伙伴商备货单产品明细
+     */
+    PartnerPreparedProductVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商备货单产品明细列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商备货单产品明细分页列表
+     */
+    TableDataInfo<PartnerPreparedProductVo> queryPageList(PartnerPreparedProductBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商备货单产品明细列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商备货单产品明细列表
+     */
+    List<PartnerPreparedProductVo> queryList(PartnerPreparedProductBo bo);
+
+    /**
+     * 新增伙伴商备货单产品明细
+     *
+     * @param bo 伙伴商备货单产品明细
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerPreparedProductBo bo);
+
+    /**
+     * 修改伙伴商备货单产品明细
+     *
+     * @param bo 伙伴商备货单产品明细
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerPreparedProductBo bo);
+
+    /**
+     * 校验并批量删除伙伴商备货单产品明细信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerPrepared;
+import org.dromara.customer.domain.vo.PartnerPreparedVo;
+import org.dromara.customer.domain.bo.PartnerPreparedBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商备货单Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerPreparedService extends IService<PartnerPrepared>{
+
+    /**
+     * 查询伙伴商备货单
+     *
+     * @param id 主键
+     * @return 伙伴商备货单
+     */
+    PartnerPreparedVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商备货单列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商备货单分页列表
+     */
+    TableDataInfo<PartnerPreparedVo> queryPageList(PartnerPreparedBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商备货单列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商备货单列表
+     */
+    List<PartnerPreparedVo> queryList(PartnerPreparedBo bo);
+
+    /**
+     * 新增伙伴商备货单
+     *
+     * @param bo 伙伴商备货单
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerPreparedBo bo);
+
+    /**
+     * 修改伙伴商备货单
+     *
+     * @param bo 伙伴商备货单
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerPreparedBo bo);
+
+    /**
+     * 校验并批量删除伙伴商备货单信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerQualificationService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerQualification;
+import org.dromara.customer.domain.vo.PartnerQualificationVo;
+import org.dromara.customer.domain.bo.PartnerQualificationBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商资质Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerQualificationService extends IService<PartnerQualification>{
+
+    /**
+     * 查询伙伴商资质
+     *
+     * @param id 主键
+     * @return 伙伴商资质
+     */
+    PartnerQualificationVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商资质列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商资质分页列表
+     */
+    TableDataInfo<PartnerQualificationVo> queryPageList(PartnerQualificationBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商资质列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商资质列表
+     */
+    List<PartnerQualificationVo> queryList(PartnerQualificationBo bo);
+
+    /**
+     * 新增伙伴商资质
+     *
+     * @param bo 伙伴商资质
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerQualificationBo bo);
+
+    /**
+     * 修改伙伴商资质
+     *
+     * @param bo 伙伴商资质
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerQualificationBo bo);
+
+    /**
+     * 校验并批量删除伙伴商资质信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerUserService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerUser;
+import org.dromara.customer.domain.vo.PartnerUserVo;
+import org.dromara.customer.domain.bo.PartnerUserBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商用户Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerUserService extends IService<PartnerUser>{
+
+    /**
+     * 查询伙伴商用户
+     *
+     * @param id 主键
+     * @return 伙伴商用户
+     */
+    PartnerUserVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商用户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商用户分页列表
+     */
+    TableDataInfo<PartnerUserVo> queryPageList(PartnerUserBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商用户列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商用户列表
+     */
+    List<PartnerUserVo> queryList(PartnerUserBo bo);
+
+    /**
+     * 新增伙伴商用户
+     *
+     * @param bo 伙伴商用户
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerUserBo bo);
+
+    /**
+     * 修改伙伴商用户
+     *
+     * @param bo 伙伴商用户
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerUserBo bo);
+
+    /**
+     * 校验并批量删除伙伴商用户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 70 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerWarehouseService.java

@@ -0,0 +1,70 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.PartnerWarehouse;
+import org.dromara.customer.domain.vo.PartnerWarehouseVo;
+import org.dromara.customer.domain.bo.PartnerWarehouseBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 伙伴商仓库Service接口
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+public interface IPartnerWarehouseService extends IService<PartnerWarehouse>{
+
+    /**
+     * 查询伙伴商仓库
+     *
+     * @param id 主键
+     * @return 伙伴商仓库
+     */
+    PartnerWarehouseVo queryById(Long id);
+
+    /**
+     * 分页查询伙伴商仓库列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商仓库分页列表
+     */
+    TableDataInfo<PartnerWarehouseVo> queryPageList(PartnerWarehouseBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的伙伴商仓库列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商仓库列表
+     */
+    List<PartnerWarehouseVo> queryList(PartnerWarehouseBo bo);
+
+    /**
+     * 新增伙伴商仓库
+     *
+     * @param bo 伙伴商仓库
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PartnerWarehouseBo bo);
+
+    /**
+     * 修改伙伴商仓库
+     *
+     * @param bo 伙伴商仓库
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PartnerWarehouseBo bo);
+
+    /**
+     * 校验并批量删除伙伴商仓库信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 143 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerBankServiceImpl.java

@@ -0,0 +1,143 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerBankBo;
+import org.dromara.customer.domain.vo.PartnerBankVo;
+import org.dromara.customer.domain.PartnerBank;
+import org.dromara.customer.mapper.PartnerBankMapper;
+import org.dromara.customer.service.IPartnerBankService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商银行账户Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerBankServiceImpl  extends ServiceImpl<PartnerBankMapper, PartnerBank> implements IPartnerBankService {
+
+    private final PartnerBankMapper baseMapper;
+
+    /**
+     * 查询伙伴商银行账户
+     *
+     * @param id 主键
+     * @return 伙伴商银行账户
+     */
+    @Override
+    public PartnerBankVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商银行账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商银行账户分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerBankVo> queryPageList(PartnerBankBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerBank> lqw = buildQueryWrapper(bo);
+        Page<PartnerBankVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商银行账户列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商银行账户列表
+     */
+    @Override
+    public List<PartnerBankVo> queryList(PartnerBankBo bo) {
+        LambdaQueryWrapper<PartnerBank> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerBank> buildQueryWrapper(PartnerBankBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerBank> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerBank::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerBank::getPartnerId, bo.getPartnerId());
+        lqw.eq(StringUtils.isNotBlank(bo.getAccount()), PartnerBank::getAccount, bo.getAccount());
+        lqw.eq(StringUtils.isNotBlank(bo.getRegistrationNumber()), PartnerBank::getRegistrationNumber, bo.getRegistrationNumber());
+        lqw.like(StringUtils.isNotBlank(bo.getAccountBankName()), PartnerBank::getAccountBankName, bo.getAccountBankName());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankNumber()), PartnerBank::getBankNumber, bo.getBankNumber());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankLocation()), PartnerBank::getBankLocation, bo.getBankLocation());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankInterbankNumber()), PartnerBank::getBankInterbankNumber, bo.getBankInterbankNumber());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerBank::getPhone, bo.getPhone());
+        lqw.eq(StringUtils.isNotBlank(bo.getAddress()), PartnerBank::getAddress, bo.getAddress());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerBank::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerBank::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商银行账户
+     *
+     * @param bo 伙伴商银行账户
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerBankBo bo) {
+        PartnerBank add = MapstructUtils.convert(bo, PartnerBank.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商银行账户
+     *
+     * @param bo 伙伴商银行账户
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerBankBo bo) {
+        PartnerBank update = MapstructUtils.convert(bo, PartnerBank.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerBank entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商银行账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 139 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContactsServiceImpl.java

@@ -0,0 +1,139 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerContactsBo;
+import org.dromara.customer.domain.vo.PartnerContactsVo;
+import org.dromara.customer.domain.PartnerContacts;
+import org.dromara.customer.mapper.PartnerContactsMapper;
+import org.dromara.customer.service.IPartnerContactsService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商联系人Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerContactsServiceImpl  extends ServiceImpl<PartnerContactsMapper, PartnerContacts> implements IPartnerContactsService {
+
+    private final PartnerContactsMapper baseMapper;
+
+    /**
+     * 查询伙伴商联系人
+     *
+     * @param id 主键
+     * @return 伙伴商联系人
+     */
+    @Override
+    public PartnerContactsVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商联系人列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商联系人分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerContactsVo> queryPageList(PartnerContactsBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerContacts> lqw = buildQueryWrapper(bo);
+        Page<PartnerContactsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商联系人列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商联系人列表
+     */
+    @Override
+    public List<PartnerContactsVo> queryList(PartnerContactsBo bo) {
+        LambdaQueryWrapper<PartnerContacts> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerContacts> buildQueryWrapper(PartnerContactsBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerContacts> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerContacts::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerContacts::getPartnerId, bo.getPartnerId());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), PartnerContacts::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerContacts::getPhone, bo.getPhone());
+        lqw.eq(StringUtils.isNotBlank(bo.getEmail()), PartnerContacts::getEmail, bo.getEmail());
+        lqw.eq(bo.getContactType() != null, PartnerContacts::getContactType, bo.getContactType());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerContacts::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerContacts::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商联系人
+     *
+     * @param bo 伙伴商联系人
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerContactsBo bo) {
+        PartnerContacts add = MapstructUtils.convert(bo, PartnerContacts.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商联系人
+     *
+     * @param bo 伙伴商联系人
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerContactsBo bo) {
+        PartnerContacts update = MapstructUtils.convert(bo, PartnerContacts.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerContacts entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商联系人信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 152 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContractServiceImpl.java

@@ -0,0 +1,152 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerContractBo;
+import org.dromara.customer.domain.vo.PartnerContractVo;
+import org.dromara.customer.domain.PartnerContract;
+import org.dromara.customer.mapper.PartnerContractMapper;
+import org.dromara.customer.service.IPartnerContractService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商合同Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerContractServiceImpl  extends ServiceImpl<PartnerContractMapper, PartnerContract> implements IPartnerContractService {
+
+    private final PartnerContractMapper baseMapper;
+
+    /**
+     * 查询伙伴商合同
+     *
+     * @param id 主键
+     * @return 伙伴商合同
+     */
+    @Override
+    public PartnerContractVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商合同列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商合同分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerContractVo> queryPageList(PartnerContractBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerContract> lqw = buildQueryWrapper(bo);
+        Page<PartnerContractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商合同列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商合同列表
+     */
+    @Override
+    public List<PartnerContractVo> queryList(PartnerContractBo bo) {
+        LambdaQueryWrapper<PartnerContract> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerContract> buildQueryWrapper(PartnerContractBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerContract> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerContract::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerContract::getPartnerId, bo.getPartnerId());
+        lqw.eq(StringUtils.isNotBlank(bo.getContractNo()), PartnerContract::getContractNo, bo.getContractNo());
+        lqw.like(StringUtils.isNotBlank(bo.getCooperativeName()), PartnerContract::getCooperativeName, bo.getCooperativeName());
+        lqw.eq(bo.getCooperationId() != null, PartnerContract::getCooperationId, bo.getCooperationId());
+        lqw.eq(bo.getStartTime() != null, PartnerContract::getStartTime, bo.getStartTime());
+        lqw.eq(bo.getEndTime() != null, PartnerContract::getEndTime, bo.getEndTime());
+        lqw.eq(StringUtils.isNotBlank(bo.getCategories()), PartnerContract::getCategories, bo.getCategories());
+        lqw.eq(bo.getFee() != null, PartnerContract::getFee, bo.getFee());
+        lqw.eq(bo.getContractType() != null, PartnerContract::getContractType, bo.getContractType());
+        lqw.eq(StringUtils.isNotBlank(bo.getSettlementCycle()), PartnerContract::getSettlementCycle, bo.getSettlementCycle());
+        lqw.eq(bo.getSalesTarget() != null, PartnerContract::getSalesTarget, bo.getSalesTarget());
+        lqw.eq(StringUtils.isNotBlank(bo.getArea()), PartnerContract::getArea, bo.getArea());
+        lqw.eq(StringUtils.isNotBlank(bo.getContacts()), PartnerContract::getContacts, bo.getContacts());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerContract::getPhone, bo.getPhone());
+        lqw.eq(StringUtils.isNotBlank(bo.getAnnex()), PartnerContract::getAnnex, bo.getAnnex());
+        lqw.eq(StringUtils.isNotBlank(bo.getImportantTerms()), PartnerContract::getImportantTerms, bo.getImportantTerms());
+        lqw.eq(bo.getContractStatus() != null, PartnerContract::getContractStatus, bo.getContractStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getRejectInfo()), PartnerContract::getRejectInfo, bo.getRejectInfo());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerContract::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerContract::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商合同
+     *
+     * @param bo 伙伴商合同
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerContractBo bo) {
+        PartnerContract add = MapstructUtils.convert(bo, PartnerContract.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商合同
+     *
+     * @param bo 伙伴商合同
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerContractBo bo) {
+        PartnerContract update = MapstructUtils.convert(bo, PartnerContract.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerContract entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商合同信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 139 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerDictServiceImpl.java

@@ -0,0 +1,139 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerDictBo;
+import org.dromara.customer.domain.vo.PartnerDictVo;
+import org.dromara.customer.domain.PartnerDict;
+import org.dromara.customer.mapper.PartnerDictMapper;
+import org.dromara.customer.service.IPartnerDictService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商字典Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerDictServiceImpl  extends ServiceImpl<PartnerDictMapper, PartnerDict> implements IPartnerDictService {
+
+    private final PartnerDictMapper baseMapper;
+
+    /**
+     * 查询伙伴商字典
+     *
+     * @param id 主键
+     * @return 伙伴商字典
+     */
+    @Override
+    public PartnerDictVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商字典列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商字典分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerDictVo> queryPageList(PartnerDictBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerDict> lqw = buildQueryWrapper(bo);
+        Page<PartnerDictVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商字典列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商字典列表
+     */
+    @Override
+    public List<PartnerDictVo> queryList(PartnerDictBo bo) {
+        LambdaQueryWrapper<PartnerDict> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerDict> buildQueryWrapper(PartnerDictBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerDict> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerDict::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getName()), PartnerDict::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getCode()), PartnerDict::getCode, bo.getCode());
+        lqw.eq(StringUtils.isNotBlank(bo.getValue()), PartnerDict::getValue, bo.getValue());
+        lqw.eq(bo.getSort() != null, PartnerDict::getSort, bo.getSort());
+        lqw.eq(bo.getCodeIndex() != null, PartnerDict::getCodeIndex, bo.getCodeIndex());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerDict::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerDict::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商字典
+     *
+     * @param bo 伙伴商字典
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerDictBo bo) {
+        PartnerDict add = MapstructUtils.convert(bo, PartnerDict.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商字典
+     *
+     * @param bo 伙伴商字典
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerDictBo bo) {
+        PartnerDict update = MapstructUtils.convert(bo, PartnerDict.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerDict entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商字典信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 164 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerInfoServiceImpl.java

@@ -0,0 +1,164 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerInfoBo;
+import org.dromara.customer.domain.vo.PartnerInfoVo;
+import org.dromara.customer.domain.PartnerInfo;
+import org.dromara.customer.domain.PartnerUser;
+import org.dromara.customer.mapper.PartnerInfoMapper;
+import org.dromara.customer.mapper.PartnerUserMapper;
+import org.dromara.customer.service.IPartnerInfoService;
+import org.dromara.common.satoken.utils.LoginHelper;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商基本信息Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerInfoServiceImpl  extends ServiceImpl<PartnerInfoMapper, PartnerInfo> implements IPartnerInfoService {
+
+    private final PartnerInfoMapper baseMapper;
+    private final PartnerUserMapper partnerUserMapper;
+
+    /**
+     * 查询伙伴商基本信息
+     *
+     * @param id 主键
+     * @return 伙伴商基本信息
+     */
+    @Override
+    public PartnerInfoVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商基本信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商基本信息分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerInfoVo> queryPageList(PartnerInfoBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerInfo> lqw = buildQueryWrapper(bo);
+        Page<PartnerInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商基本信息列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商基本信息列表
+     */
+    @Override
+    public List<PartnerInfoVo> queryList(PartnerInfoBo bo) {
+        LambdaQueryWrapper<PartnerInfo> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerInfo> buildQueryWrapper(PartnerInfoBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerInfo> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerInfo::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getPartnerNo()), PartnerInfo::getPartnerNo, bo.getPartnerNo());
+        lqw.like(StringUtils.isNotBlank(bo.getPartnerName()), PartnerInfo::getPartnerName, bo.getPartnerName());
+        lqw.eq(StringUtils.isNotBlank(bo.getCompany()), PartnerInfo::getCompany, bo.getCompany());
+        lqw.eq(bo.getPartnerCooperateType() != null, PartnerInfo::getPartnerCooperateType, bo.getPartnerCooperateType());
+        lqw.eq(StringUtils.isNotBlank(bo.getLegal()), PartnerInfo::getLegal, bo.getLegal());
+        lqw.eq(StringUtils.isNotBlank(bo.getTelephone()), PartnerInfo::getTelephone, bo.getTelephone());
+        lqw.eq(StringUtils.isNotBlank(bo.getFax()), PartnerInfo::getFax, bo.getFax());
+        lqw.eq(StringUtils.isNotBlank(bo.getRegisterAddress()), PartnerInfo::getRegisterAddress, bo.getRegisterAddress());
+        lqw.eq(StringUtils.isNotBlank(bo.getOperatingAddress()), PartnerInfo::getOperatingAddress, bo.getOperatingAddress());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerInfo::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerInfo::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商基本信息
+     *
+     * @param bo 伙伴商基本信息
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerInfoBo bo) {
+        PartnerInfo add = MapstructUtils.convert(bo, PartnerInfo.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商基本信息
+     *
+     * @param bo 伙伴商基本信息
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerInfoBo bo) {
+        PartnerInfo update = MapstructUtils.convert(bo, PartnerInfo.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerInfo entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商基本信息信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    /**
+     * 获取当前登录用户的伙伴商信息
+     *
+     * @return 伙伴商基本信息
+     */
+    @Override
+    public PartnerInfoVo queryCurrentPartnerInfo() {
+        Long userId = LoginHelper.getUserId();
+        LambdaQueryWrapper<PartnerUser> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(PartnerUser::getSysUserId, userId);
+        PartnerUser partnerUser = partnerUserMapper.selectOne(wrapper);
+        if (partnerUser == null) {
+            return null;
+        }
+        return baseMapper.selectVoById(partnerUser.getPartnerId());
+    }
+}

+ 138 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedProductServiceImpl.java

@@ -0,0 +1,138 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerPreparedProductBo;
+import org.dromara.customer.domain.vo.PartnerPreparedProductVo;
+import org.dromara.customer.domain.PartnerPreparedProduct;
+import org.dromara.customer.mapper.PartnerPreparedProductMapper;
+import org.dromara.customer.service.IPartnerPreparedProductService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商备货单产品明细Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerPreparedProductServiceImpl  extends ServiceImpl<PartnerPreparedProductMapper, PartnerPreparedProduct> implements IPartnerPreparedProductService {
+
+    private final PartnerPreparedProductMapper baseMapper;
+
+    /**
+     * 查询伙伴商备货单产品明细
+     *
+     * @param id 主键
+     * @return 伙伴商备货单产品明细
+     */
+    @Override
+    public PartnerPreparedProductVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商备货单产品明细列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商备货单产品明细分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerPreparedProductVo> queryPageList(PartnerPreparedProductBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerPreparedProduct> lqw = buildQueryWrapper(bo);
+        Page<PartnerPreparedProductVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商备货单产品明细列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商备货单产品明细列表
+     */
+    @Override
+    public List<PartnerPreparedProductVo> queryList(PartnerPreparedProductBo bo) {
+        LambdaQueryWrapper<PartnerPreparedProduct> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerPreparedProduct> buildQueryWrapper(PartnerPreparedProductBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerPreparedProduct> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerPreparedProduct::getId);
+        lqw.eq(bo.getPartnerPreparedId() != null, PartnerPreparedProduct::getPartnerPreparedId, bo.getPartnerPreparedId());
+        lqw.eq(bo.getProductId() != null, PartnerPreparedProduct::getProductId, bo.getProductId());
+        lqw.eq(bo.getQuantity() != null, PartnerPreparedProduct::getQuantity, bo.getQuantity());
+        lqw.eq(bo.getPrice() != null, PartnerPreparedProduct::getPrice, bo.getPrice());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerPreparedProduct::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerPreparedProduct::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商备货单产品明细
+     *
+     * @param bo 伙伴商备货单产品明细
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerPreparedProductBo bo) {
+        PartnerPreparedProduct add = MapstructUtils.convert(bo, PartnerPreparedProduct.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商备货单产品明细
+     *
+     * @param bo 伙伴商备货单产品明细
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerPreparedProductBo bo) {
+        PartnerPreparedProduct update = MapstructUtils.convert(bo, PartnerPreparedProduct.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerPreparedProduct entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商备货单产品明细信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 214 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedServiceImpl.java

@@ -0,0 +1,214 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.enums.FormatsType;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerPreparedBo;
+import org.dromara.customer.domain.vo.PartnerPreparedVo;
+import org.dromara.customer.domain.PartnerPrepared;
+import org.dromara.customer.mapper.PartnerPreparedMapper;
+import org.dromara.customer.service.IPartnerPreparedService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商备货单Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerPreparedServiceImpl  extends ServiceImpl<PartnerPreparedMapper, PartnerPrepared> implements IPartnerPreparedService {
+
+    private final PartnerPreparedMapper baseMapper;
+
+    /**
+     * 查询伙伴商备货单
+     *
+     * @param id 主键
+     * @return 伙伴商备货单
+     */
+    @Override
+    public PartnerPreparedVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商备货单列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商备货单分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerPreparedVo> queryPageList(PartnerPreparedBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerPrepared> lqw = buildQueryWrapper(bo);
+        Page<PartnerPreparedVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商备货单列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商备货单列表
+     */
+    @Override
+    public List<PartnerPreparedVo> queryList(PartnerPreparedBo bo) {
+        LambdaQueryWrapper<PartnerPrepared> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerPrepared> buildQueryWrapper(PartnerPreparedBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerPrepared> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerPrepared::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerPrepared::getPartnerId, bo.getPartnerId());
+        lqw.eq(StringUtils.isNotBlank(bo.getPreparedNo()), PartnerPrepared::getPreparedNo, bo.getPreparedNo());
+        lqw.eq(bo.getCooperationCode() != null, PartnerPrepared::getCooperationCode, bo.getCooperationCode());
+        lqw.like(StringUtils.isNotBlank(bo.getCustomerName()), PartnerPrepared::getCustomerName, bo.getCustomerName());
+        lqw.like(StringUtils.isNotBlank(bo.getPurchasingUnitName()), PartnerPrepared::getPurchasingUnitName, bo.getPurchasingUnitName());
+        lqw.eq(bo.getAmount() != null, PartnerPrepared::getAmount, bo.getAmount());
+        lqw.eq(StringUtils.isNotBlank(bo.getArea()), PartnerPrepared::getArea, bo.getArea());
+        lqw.eq(bo.getEstimatedTime() != null, PartnerPrepared::getEstimatedTime, bo.getEstimatedTime());
+        lqw.eq(bo.getDueDate() != null, PartnerPrepared::getDueDate, bo.getDueDate());
+        lqw.eq(StringUtils.isNotBlank(bo.getInvoiceAttachment()), PartnerPrepared::getInvoiceAttachment, bo.getInvoiceAttachment());
+        lqw.eq(StringUtils.isNotBlank(bo.getPurchasingUnit()), PartnerPrepared::getPurchasingUnit, bo.getPurchasingUnit());
+        lqw.eq(StringUtils.isNotBlank(bo.getPerson()), PartnerPrepared::getPerson, bo.getPerson());
+        lqw.like(StringUtils.isNotBlank(bo.getDeptName()), PartnerPrepared::getDeptName, bo.getDeptName());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerPrepared::getPhone, bo.getPhone());
+        lqw.eq(bo.getPreparedStatus() != null, PartnerPrepared::getPreparedStatus, bo.getPreparedStatus());
+        lqw.eq(bo.getDealStatus() != null, PartnerPrepared::getDealStatus, bo.getDealStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getReject()), PartnerPrepared::getReject, bo.getReject());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerPrepared::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerPrepared::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商备货单
+     *
+     * @param bo 伙伴商备货单
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerPreparedBo bo) {
+        PartnerPrepared add = MapstructUtils.convert(bo, PartnerPrepared.class);
+        
+        // TODO: 【重要】partner_id 用于关联当前登录的伙伴商用户
+        //  应该从当前登录用户的 token/session 中获取其关联的伙伴商ID(partner_info.id)
+        //  伙伴商用户登录后,其创建的所有订单报备都应自动绑定到该伙伴商
+        //  临时方案:这里暂时硬编码为 1,需要根据实际登录用户动态获取
+        if (add.getPartnerId() == null) {
+            add.setPartnerId(1L);
+        }
+        
+        // 自动生成备货单编号
+        if (StringUtils.isBlank(add.getPreparedNo())) {
+            add.setPreparedNo(generatePreparedNo());
+        }
+        
+        // 设置必填字段的默认值(避免数据库约束错误)
+        if (StringUtils.isBlank(add.getPurchasingUnitName())) {
+            add.setPurchasingUnitName("");
+        }
+        if (StringUtils.isBlank(add.getDeptName())) {
+            add.setDeptName("");
+        }
+        if (StringUtils.isBlank(add.getInvoiceAttachment())) {
+            add.setInvoiceAttachment("");
+        }
+        
+        // 设置初始状态:新建订单默认为待审核、未处理
+        if (add.getPreparedStatus() == null) {
+            add.setPreparedStatus(0L); // 0=待审核
+        }
+        if (add.getDealStatus() == null) {
+            add.setDealStatus(0L); // 0=未处理
+        }
+        
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+    
+    /**
+     * 生成备货单编号
+     * 格式:BH + yyyyMMdd + 6位流水号
+     * 例如:BH202601220000001
+     */
+    private String generatePreparedNo() {
+        String dateStr = DateUtils.dateTimeNow(FormatsType.YYYYMMDD);
+        String prefix = "BH" + dateStr;
+        
+        // 查询当天最大的流水号
+        LambdaQueryWrapper<PartnerPrepared> wrapper = Wrappers.lambdaQuery();
+        wrapper.likeRight(PartnerPrepared::getPreparedNo, prefix)
+               .orderByDesc(PartnerPrepared::getPreparedNo)
+               .last("LIMIT 1");
+        PartnerPrepared lastOrder = baseMapper.selectOne(wrapper);
+        
+        int sequence = 1;
+        if (lastOrder != null && StringUtils.isNotBlank(lastOrder.getPreparedNo())) {
+            String lastNo = lastOrder.getPreparedNo();
+            if (lastNo.length() >= prefix.length() + 6) {
+                String lastSequence = lastNo.substring(prefix.length());
+                sequence = Integer.parseInt(lastSequence) + 1;
+            }
+        }
+        
+        return prefix + String.format("%06d", sequence);
+    }
+
+    /**
+     * 修改伙伴商备货单
+     *
+     * @param bo 伙伴商备货单
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerPreparedBo bo) {
+        PartnerPrepared update = MapstructUtils.convert(bo, PartnerPrepared.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerPrepared entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商备货单信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 140 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerQualificationServiceImpl.java

@@ -0,0 +1,140 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerQualificationBo;
+import org.dromara.customer.domain.vo.PartnerQualificationVo;
+import org.dromara.customer.domain.PartnerQualification;
+import org.dromara.customer.mapper.PartnerQualificationMapper;
+import org.dromara.customer.service.IPartnerQualificationService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商资质Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerQualificationServiceImpl  extends ServiceImpl<PartnerQualificationMapper, PartnerQualification> implements IPartnerQualificationService {
+
+    private final PartnerQualificationMapper baseMapper;
+
+    /**
+     * 查询伙伴商资质
+     *
+     * @param id 主键
+     * @return 伙伴商资质
+     */
+    @Override
+    public PartnerQualificationVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商资质列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商资质分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerQualificationVo> queryPageList(PartnerQualificationBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerQualification> lqw = buildQueryWrapper(bo);
+        Page<PartnerQualificationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商资质列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商资质列表
+     */
+    @Override
+    public List<PartnerQualificationVo> queryList(PartnerQualificationBo bo) {
+        LambdaQueryWrapper<PartnerQualification> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerQualification> buildQueryWrapper(PartnerQualificationBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerQualification> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerQualification::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerQualification::getPartnerId, bo.getPartnerId());
+        lqw.eq(StringUtils.isNotBlank(bo.getQualificationNo()), PartnerQualification::getQualificationNo, bo.getQualificationNo());
+        lqw.eq(bo.getQualificationType() != null, PartnerQualification::getQualificationType, bo.getQualificationType());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthority()), PartnerQualification::getAuthority, bo.getAuthority());
+        lqw.eq(bo.getDeadline() != null, PartnerQualification::getDeadline, bo.getDeadline());
+        lqw.eq(StringUtils.isNotBlank(bo.getAnnex()), PartnerQualification::getAnnex, bo.getAnnex());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerQualification::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerQualification::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商资质
+     *
+     * @param bo 伙伴商资质
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerQualificationBo bo) {
+        PartnerQualification add = MapstructUtils.convert(bo, PartnerQualification.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商资质
+     *
+     * @param bo 伙伴商资质
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerQualificationBo bo) {
+        PartnerQualification update = MapstructUtils.convert(bo, PartnerQualification.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerQualification entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商资质信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 170 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerUserServiceImpl.java

@@ -0,0 +1,170 @@
+package org.dromara.customer.service.impl;
+
+import cn.hutool.crypto.digest.BCrypt;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.dromara.customer.domain.bo.PartnerUserBo;
+import org.dromara.customer.domain.vo.PartnerUserVo;
+import org.dromara.customer.domain.PartnerUser;
+import org.dromara.customer.mapper.PartnerUserMapper;
+import org.dromara.customer.service.IPartnerUserService;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商用户Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerUserServiceImpl  extends ServiceImpl<PartnerUserMapper, PartnerUser> implements IPartnerUserService {
+
+    private final PartnerUserMapper baseMapper;
+    private final RemoteUserService remoteUserService;
+
+    /**
+     * 查询伙伴商用户
+     *
+     * @param id 主键
+     * @return 伙伴商用户
+     */
+    @Override
+    public PartnerUserVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商用户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商用户分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerUserVo> queryPageList(PartnerUserBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerUser> lqw = buildQueryWrapper(bo);
+        Page<PartnerUserVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商用户列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商用户列表
+     */
+    @Override
+    public List<PartnerUserVo> queryList(PartnerUserBo bo) {
+        LambdaQueryWrapper<PartnerUser> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerUser> buildQueryWrapper(PartnerUserBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerUser> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerUser::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerUser::getPartnerId, bo.getPartnerId());
+        lqw.eq(StringUtils.isNotBlank(bo.getLoginUser()), PartnerUser::getLoginUser, bo.getLoginUser());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), PartnerUser::getName, bo.getName());
+        lqw.eq(StringUtils.isNotBlank(bo.getEmail()), PartnerUser::getEmail, bo.getEmail());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerUser::getPhone, bo.getPhone());
+        lqw.eq(StringUtils.isNotBlank(bo.getDuties()), PartnerUser::getDuties, bo.getDuties());
+        lqw.like(StringUtils.isNotBlank(bo.getRoleName()), PartnerUser::getRoleName, bo.getRoleName());
+        lqw.eq(bo.getRoleId() != null, PartnerUser::getRoleId, bo.getRoleId());
+        lqw.eq(StringUtils.isNotBlank(bo.getPassword()), PartnerUser::getPassword, bo.getPassword());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerUser::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerUser::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商用户
+     *
+     * @param bo 伙伴商用户
+     * @return 是否新增成功
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByBo(PartnerUserBo bo) {
+        PartnerUser add = MapstructUtils.convert(bo, PartnerUser.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+
+            // 调用远程服务创建系统用户
+            RemoteUserBo remoteUserBo = new RemoteUserBo();
+            remoteUserBo.setUserName(bo.getLoginUser());
+            remoteUserBo.setPassword(BCrypt.hashpw(bo.getPassword()));
+            remoteUserBo.setPhonenumber(bo.getPhone());
+            remoteUserBo.setEmail(bo.getEmail());
+            remoteUserBo.setNickName(bo.getName());
+            remoteUserBo.setTenantId(add.getTenantId()); // 从实体对象获取 tenantId
+            remoteUserBo.setUserSonType("2"); // 2=伙伴商
+            remoteUserBo.setStatus(StringUtils.isNotBlank(bo.getStatus()) ? bo.getStatus() : "0");
+            remoteUserBo.setRemark(bo.getRemark());
+            remoteUserBo.setPlatformCode("bp"); // 设置平台代码为bp,用于伙伴商协同平台登录
+
+            // 调用远程服务新增用户
+            Long sysUserId = remoteUserService.addUser(remoteUserBo);
+
+            // 更新 sys_user_id
+            add.setSysUserId(sysUserId);
+            baseMapper.updateById(add);
+            bo.setSysUserId(sysUserId);
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商用户
+     *
+     * @param bo 伙伴商用户
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerUserBo bo) {
+        PartnerUser update = MapstructUtils.convert(bo, PartnerUser.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerUser entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商用户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 143 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerWarehouseServiceImpl.java

@@ -0,0 +1,143 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.PartnerWarehouseBo;
+import org.dromara.customer.domain.vo.PartnerWarehouseVo;
+import org.dromara.customer.domain.PartnerWarehouse;
+import org.dromara.customer.mapper.PartnerWarehouseMapper;
+import org.dromara.customer.service.IPartnerWarehouseService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 伙伴商仓库Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-21
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerWarehouseServiceImpl  extends ServiceImpl<PartnerWarehouseMapper, PartnerWarehouse> implements IPartnerWarehouseService {
+
+    private final PartnerWarehouseMapper baseMapper;
+
+    /**
+     * 查询伙伴商仓库
+     *
+     * @param id 主键
+     * @return 伙伴商仓库
+     */
+    @Override
+    public PartnerWarehouseVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询伙伴商仓库列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商仓库分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerWarehouseVo> queryPageList(PartnerWarehouseBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerWarehouse> lqw = buildQueryWrapper(bo);
+        Page<PartnerWarehouseVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商仓库列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商仓库列表
+     */
+    @Override
+    public List<PartnerWarehouseVo> queryList(PartnerWarehouseBo bo) {
+        LambdaQueryWrapper<PartnerWarehouse> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PartnerWarehouse> buildQueryWrapper(PartnerWarehouseBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerWarehouse> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerWarehouse::getId);
+        lqw.eq(bo.getPartnerId() != null, PartnerWarehouse::getPartnerId, bo.getPartnerId());
+        lqw.like(StringUtils.isNotBlank(bo.getName()), PartnerWarehouse::getName, bo.getName());
+        lqw.eq(bo.getWarehouseNature() != null, PartnerWarehouse::getWarehouseNature, bo.getWarehouseNature());
+        lqw.eq(StringUtils.isNotBlank(bo.getWarehouseLocation()), PartnerWarehouse::getWarehouseLocation, bo.getWarehouseLocation());
+        lqw.eq(StringUtils.isNotBlank(bo.getWarehouseAddress()), PartnerWarehouse::getWarehouseAddress, bo.getWarehouseAddress());
+        lqw.eq(StringUtils.isNotBlank(bo.getWarehouseArea()), PartnerWarehouse::getWarehouseArea, bo.getWarehouseArea());
+        lqw.eq(StringUtils.isNotBlank(bo.getWarehouseContacts()), PartnerWarehouse::getWarehouseContacts, bo.getWarehouseContacts());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PartnerWarehouse::getPhone, bo.getPhone());
+        lqw.eq(StringUtils.isNotBlank(bo.getAnnex()), PartnerWarehouse::getAnnex, bo.getAnnex());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PartnerWarehouse::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getPlatformCode()), PartnerWarehouse::getPlatformCode, bo.getPlatformCode());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商仓库
+     *
+     * @param bo 伙伴商仓库
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerWarehouseBo bo) {
+        PartnerWarehouse add = MapstructUtils.convert(bo, PartnerWarehouse.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改伙伴商仓库
+     *
+     * @param bo 伙伴商仓库
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerWarehouseBo bo) {
+        PartnerWarehouse update = MapstructUtils.convert(bo, PartnerWarehouse.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerWarehouse entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商仓库信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerBankMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerBankMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContactsMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerContactsMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContractMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerContractMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerDictMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerDictMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerInfoMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerInfoMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerPreparedMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedProductMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerPreparedProductMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerQualificationMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerQualificationMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerUserMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerUserMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerWarehouseMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.customer.mapper.PartnerWarehouseMapper">
+
+</mapper>

+ 3 - 0
ruoyi-modules/ruoyi-external/pom.xml

@@ -139,6 +139,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.external.RuoyiExternalApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 3 - 0
ruoyi-modules/ruoyi-gen/pom.xml

@@ -111,6 +111,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.gen.RuoYiGenApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 3 - 0
ruoyi-modules/ruoyi-job/pom.xml

@@ -96,6 +96,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.job.RuoYiJobApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 3 - 0
ruoyi-modules/ruoyi-order/pom.xml

@@ -139,6 +139,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.order.RuoyiOrderApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 3 - 0
ruoyi-modules/ruoyi-product/pom.xml

@@ -141,6 +141,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.product.RuoyiProductApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

+ 40 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java

@@ -12,8 +12,15 @@ import org.dromara.product.api.RemoteProductService;
 import org.dromara.product.api.domain.ProductCategoryRemoteVo;
 import org.dromara.product.api.domain.ProductChangeLogApiVo;
 import org.dromara.product.api.domain.ProductVo;
+import org.dromara.product.api.domain.SiteProductRemoteBo;
+import org.dromara.product.api.domain.SiteProductRemoteResult;
+import org.dromara.product.api.domain.SiteProductRemoteVo;
 import org.dromara.product.api.domain.zhongche.dto.StocksResult;
 import org.dromara.product.api.domain.zhongche.dto.StocksResultDto;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.product.domain.bo.SiteProductBo;
+import org.dromara.product.domain.vo.SiteProductVo;
 import org.dromara.product.domain.ProductPriceInventory;
 import org.dromara.product.domain.bo.ProductCategoryBo;
 import org.dromara.product.api.domain.RemoteProductBrand;
@@ -205,5 +212,38 @@ public class RemoteProductServiceImpl implements RemoteProductService {
 
     }
 
+    /**
+     * 分页查询站点产品列表(供远程调用)
+     *
+     * @param bo 查询条件
+     * @return 站点产品列表及分页信息
+     */
+    @Override
+    public SiteProductRemoteResult querySiteProductPage(SiteProductRemoteBo bo) {
+        // 构建查询条件
+        SiteProductBo siteProductBo = new SiteProductBo();
+        BeanUtil.copyProperties(bo, siteProductBo);
+
+        // 构建分页参数
+        PageQuery pageQuery = new PageQuery();
+        pageQuery.setPageNum(bo.getPageNum() != null ? bo.getPageNum() : 1);
+        pageQuery.setPageSize(bo.getPageSize() != null ? bo.getPageSize() : 10);
+
+        // 查询数据
+        TableDataInfo<SiteProductVo> tableDataInfo = productBaseService.querySiteProductPageList(siteProductBo, pageQuery);
+
+        // 转换为远程调用VO
+        List<SiteProductRemoteVo> remoteVoList = BeanUtil.copyToList(tableDataInfo.getRows(), SiteProductRemoteVo.class);
+
+        // 构建返回结果
+        SiteProductRemoteResult result = new SiteProductRemoteResult();
+        result.setRows(remoteVoList);
+        result.setTotal(tableDataInfo.getTotal());
+        result.setCode(tableDataInfo.getCode());
+        result.setMsg(tableDataInfo.getMsg());
+
+        return result;
+    }
+
 
 }

+ 3 - 0
ruoyi-modules/ruoyi-resource/pom.xml

@@ -134,6 +134,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <mainClass>org.dromara.resource.RuoYiResourceApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

Някои файлове не бяха показани, защото твърде много файлове са промени