Ver código fonte

Merge branch 'refs/heads/master' into xiaolu

肖路 2 meses atrás
pai
commit
5274c79c2a
100 arquivos alterados com 5403 adições e 27 exclusões
  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. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteAddressAreaService.java
  6. 5 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  7. 55 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/dto/AddressAreaDTO.java
  8. 26 0
      ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
  9. 19 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java
  10. 12 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/EmailAuthStrategy.java
  11. 12 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java
  12. 12 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SmsAuthStrategy.java
  13. 12 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java
  14. 12 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/impl/XcxAuthStrategy.java
  15. 23 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/InvoiceStatus.java
  16. 39 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/StatementStatus.java
  17. 11 2
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  18. 0 1
      ruoyi-modules/pom.xml
  19. 7 2
      ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/StatementDetail.java
  20. 2 0
      ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/bo/StatementDetailBo.java
  21. 2 0
      ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/vo/StatementDetailVo.java
  22. 5 1
      ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/service/impl/StatementInvoiceServiceImpl.java
  23. 9 4
      ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/service/impl/StatementOrderServiceImpl.java
  24. 3 0
      ruoyi-modules/ruoyi-customer/pom.xml
  25. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerBankController.java
  26. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContactsController.java
  27. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContractController.java
  28. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerDictController.java
  29. 115 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.java
  30. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedController.java
  31. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedProductController.java
  32. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerQualificationController.java
  33. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerUserController.java
  34. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerWarehouseController.java
  35. 38 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/ProductRemoteController.java
  36. 18 6
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierAuthorizeController.java
  37. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierContractController.java
  38. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierQualificationController.java
  39. 31 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/CustomerRegisterController.java
  40. 4 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/CustomerContact.java
  41. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerBank.java
  42. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContacts.java
  43. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContract.java
  44. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerDict.java
  45. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerInfo.java
  46. 134 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPrepared.java
  47. 68 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPreparedProduct.java
  48. 79 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerQualification.java
  49. 97 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.java
  50. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerWarehouse.java
  51. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/QualificationFile.java
  52. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierAuthorize.java
  53. 2 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierContract.java
  54. 96 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierQualification.java
  55. 6 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/CustomerContactBo.java
  56. 35 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/CustomerRegisterBo.java
  57. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerBankBo.java
  58. 66 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContactsBo.java
  59. 135 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContractBo.java
  60. 65 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerDictBo.java
  61. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerInfoBo.java
  62. 128 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedBo.java
  63. 62 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedProductBo.java
  64. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerQualificationBo.java
  65. 93 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerUserBo.java
  66. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerWarehouseBo.java
  67. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/QualificationFileBo.java
  68. 8 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierAuthorizeBo.java
  69. 32 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContractBo.java
  70. 3 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierInfoBo.java
  71. 80 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierQualificationBo.java
  72. 5 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierapproveBo.java
  73. 4 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/CustomerContactVo.java
  74. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerBankVo.java
  75. 83 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContactsVo.java
  76. 166 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContractVo.java
  77. 81 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerDictVo.java
  78. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerInfoVo.java
  79. 78 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedProductVo.java
  80. 158 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedVo.java
  81. 91 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerQualificationVo.java
  82. 107 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerUserVo.java
  83. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerWarehouseVo.java
  84. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/QualificationFileVo.java
  85. 9 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierAuthorizeVo.java
  86. 47 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContractVo.java
  87. 1 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierInfoVo.java
  88. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierQualificationVo.java
  89. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerBankMapper.java
  90. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContactsMapper.java
  91. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContractMapper.java
  92. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerDictMapper.java
  93. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerInfoMapper.java
  94. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedMapper.java
  95. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedProductMapper.java
  96. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerQualificationMapper.java
  97. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerUserMapper.java
  98. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerWarehouseMapper.java
  99. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/SupplierQualificationMapper.java
  100. 164 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/pc/controller/PcAddressController.java

+ 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;
 
@@ -69,4 +72,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;
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteAddressAreaService.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.domain.dto.AddressAreaDTO;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * author
+ * 时间:2026/1/27,13:58
+ */
+public interface RemoteAddressAreaService {
+
+
+    List<AddressAreaDTO> listByIds(Set<Long> allAreaIds);
+
+    Long getIdsByName(String province);
+}

+ 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;
     }

+ 55 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/dto/AddressAreaDTO.java

@@ -0,0 +1,55 @@
+package org.dromara.system.api.domain.dto;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * author
+ * 时间:2026/1/27,14:13
+ */
+@Data
+public class AddressAreaDTO implements Serializable {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+    /**
+     * 地区编码
+     */
+    private String areaCode;
+
+    /**
+     * 地区名称
+     */
+    private String areaName;
+
+    /**
+     * 父类ID
+     */
+    private Long parentCode;
+
+    /**
+     * 地区简称
+     */
+    private String simpleName;
+
+    /**
+     * 地区等级省 1 市 2
+     */
+    private Long level;
+
+    /**
+     * 拼英
+     */
+    private String pinYin;
+
+    /**
+     * 数据来源
+     */
+    private String dataSource;
+
+}

+ 26 - 0
ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java

@@ -228,4 +228,30 @@ public class TokenController {
         return R.ok(result);
     }
 
+    /**
+    * 客户登录
+    * */
+    @PostMapping("/client/login")
+    public R<LoginVo> clientLogin(@RequestBody String body) {
+        LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
+        ValidatorUtils.validate(loginBody);
+        // 授权类型和客户端id
+        String clientId = loginBody.getClientId();
+        String grantType = loginBody.getGrantType();
+        RemoteClientVo clientVo = remoteClientService.queryByClientId(clientId);
+
+        // 查询不到 client 或 client 内不包含 grantType
+        if (ObjectUtil.isNull(clientVo) || !StringUtils.contains(clientVo.getGrantType(), grantType)) {
+            log.info("客户端id: {} 认证类型:{} 异常!.", clientId, grantType);
+            return R.fail(MessageUtils.message("auth.grant.type.error"));
+        } else if (!SystemConstants.NORMAL.equals(clientVo.getStatus())) {
+            return R.fail(MessageUtils.message("auth.grant.type.blocked"));
+        }
+        // 登录
+        LoginVo loginVo = IAuthStrategy.clientLogin(body, clientVo, grantType);
+
+        Long userId = LoginHelper.getUserId();
+        return R.ok(loginVo);
+    }
+
 }

+ 19 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java

@@ -37,6 +37,16 @@ public interface IAuthStrategy {
         return instance.getToken(username,password);
     }
 
+    static LoginVo clientLogin(String body, RemoteClientVo client, String grantType) {
+        // 授权类型和客户端id
+        String beanName = grantType + BASE_NAME;
+        if (!SpringUtils.containsBean(beanName)) {
+            throw new ServiceException("授权类型不正确!");
+        }
+        IAuthStrategy instance = SpringUtils.getBean(beanName);
+        return instance.login(body, client);
+    }
+
     /**
      * 登录
      *
@@ -46,6 +56,15 @@ public interface IAuthStrategy {
      */
     LoginVo login(String body, RemoteClientVo client);
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    LoginVo clientLogin(String body, RemoteClientVo client);
+
     LoginVo getToken(String username, String password);
 
 }

+ 12 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/EmailAuthStrategy.java

@@ -71,6 +71,18 @@ public class EmailAuthStrategy implements IAuthStrategy {
         return loginVo;
     }
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    @Override
+    public LoginVo clientLogin(String body, RemoteClientVo client) {
+        return null;
+    }
+
     @Override
     public LoginVo getToken(String username, String password) {
         return null;

+ 12 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java

@@ -90,6 +90,18 @@ public class PasswordAuthStrategy implements IAuthStrategy {
         return loginVo;
     }
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    @Override
+    public LoginVo clientLogin(String body, RemoteClientVo client) {
+        return null;
+    }
+
     /**
      * 校验验证码
      *

+ 12 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SmsAuthStrategy.java

@@ -71,6 +71,18 @@ public class SmsAuthStrategy implements IAuthStrategy {
         return loginVo;
     }
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    @Override
+    public LoginVo clientLogin(String body, RemoteClientVo client) {
+        return null;
+    }
+
     @Override
     public LoginVo getToken(String username, String password) {
         return null;

+ 12 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java

@@ -99,6 +99,18 @@ public class SocialAuthStrategy implements IAuthStrategy {
         return loginVo;
     }
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    @Override
+    public LoginVo clientLogin(String body, RemoteClientVo client) {
+        return null;
+    }
+
     @Override
     public LoginVo getToken(String username, String password) {
         return null;

+ 12 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/impl/XcxAuthStrategy.java

@@ -88,6 +88,18 @@ public class XcxAuthStrategy implements IAuthStrategy {
         return loginVo;
     }
 
+    /**
+     * 客户登录
+     *
+     * @param body   登录对象
+     * @param client 授权管理视图对象
+     * @return 登录验证信息
+     */
+    @Override
+    public LoginVo clientLogin(String body, RemoteClientVo client) {
+        return null;
+    }
+
     @Override
     public LoginVo getToken(String username, String password) {
         return null;

+ 23 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/InvoiceStatus.java

@@ -0,0 +1,23 @@
+package org.dromara.common.core.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum InvoiceStatus {
+
+    /**
+     * 未开票
+     */
+    NOT_INVOICED("0", "未开票"),
+
+    /**
+     * 已开票
+     */
+    INVOICED("1", "已开票");
+
+
+    private final String code;
+    private final String info;
+}

+ 39 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/StatementStatus.java

@@ -0,0 +1,39 @@
+package org.dromara.common.core.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum StatementStatus {
+
+    /**
+     * 待确认
+     */
+    PENDING_CONFIRMATION("0", "待确认"),
+
+    /**
+     * 待对账
+     */
+    PENDING_RECONCILIATION("1", "待对账"),
+
+    /**
+     * 已对账
+     */
+    RECONCILED("2", "已对账"),
+
+    /**
+     * 驳回
+     */
+    REJECTED("3", "驳回"),
+
+    /**
+     * 作废
+     */
+    CANCELLED("4", "作废");
+
+
+    private final String code;
+    private final String info;
+
+}

+ 11 - 2
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java

@@ -83,8 +83,17 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "contract_product",
         "supplier_contact",
         "address_area",
+        "partner_info",
+        "partner_user",
+        "partner_bank",
+        "partner_contacts",
+        "partner_contract",
+        "partner_warehouse",
+        "partner_qualification",
+        "address_area",
         "supplier_",
-        "supply_area"
+        "supply_area",
+        "authorize_type_level"
 
 
 
@@ -201,7 +210,7 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         }
 
         // 前缀匹配
-        return tableName.startsWith("qrtz_") || tableName.startsWith("product_") || tableName.startsWith("com_") || tableName.startsWith("supplier_");
+        return tableName.startsWith("qrtz_") || tableName.startsWith("product_") || tableName.startsWith("com_");
     }
 
     /**

+ 0 - 1
ruoyi-modules/pom.xml

@@ -19,7 +19,6 @@
         <module>ruoyi-customer</module>
 	    <module>ruoyi-external</module>
 	    <module>ruoyi-mall</module>
-        <module>ruoyi-external</module>
         <module>ruoyi-bill</module>
     </modules>
 

+ 7 - 2
ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/StatementDetail.java

@@ -48,15 +48,20 @@ public class StatementDetail extends TenantEntity {
     private String type;
 
     /**
-     * 关联的订单id
+     * 关联的订单id----关联的发货单的订单id
      */
     private Long orderId;
 
     /**
-     * 关联的订单编号
+     * 关联的订单编号----订单主表的订单编号
      */
     private String orderNo;
 
+    /**
+     * 订单发货单编号
+     */
+    private String deliverCode;
+
     /**
      * 该明细金额
      */

+ 2 - 0
ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/bo/StatementDetailBo.java

@@ -51,6 +51,8 @@ public class StatementDetailBo extends BaseEntity {
      */
     private String orderNo;
 
+    private String deliverCode;
+
     /**
      * 该明细金额
      */

+ 2 - 0
ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/domain/vo/StatementDetailVo.java

@@ -70,6 +70,8 @@ public class StatementDetailVo implements Serializable {
     @ExcelProperty(value = "关联的订单编号")
     private String orderNo;
 
+    private String deliverCode;
+
     /**
      * 该明细金额
      */

+ 5 - 1
ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/service/impl/StatementInvoiceServiceImpl.java

@@ -224,12 +224,16 @@ public class StatementInvoiceServiceImpl extends ServiceImpl<StatementInvoiceMap
     }
 
     /**
-     * 公共方法:删除明细和商品
+     * 公共方法:删除明细,商品和发票明细
      */
     private void deleteDetailsAndProductsAndInvoiceInfos(Long statementInvoiceId) {
+
         statementInvoiceDetailMapper.deleteByStatementInvoiceId(statementInvoiceId);
+
         statementInvoiceProductMapper.deleteByStatementInvoiceId(statementInvoiceId);
+
         invoiceInfoMapper.deleteByStatementInvoiceId(statementInvoiceId);
+
     }
 
     /**

+ 9 - 4
ruoyi-modules/ruoyi-bill/src/main/java/org/dromara/bill/service/impl/StatementOrderServiceImpl.java

@@ -22,6 +22,7 @@ import org.dromara.bill.mapper.StatementDetailMapper;
 import org.dromara.bill.mapper.StatementOrderMapper;
 import org.dromara.bill.mapper.StatementProductMapper;
 import org.dromara.bill.service.IStatementOrderService;
+import org.dromara.common.core.enums.InvoiceStatus;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -127,7 +128,7 @@ public class StatementOrderServiceImpl extends ServiceImpl<StatementOrderMapper,
 
         // 查询客户的所有有效对账单
         LambdaQueryWrapper<StatementOrder> orderWrapper = new LambdaQueryWrapper<>();
-        orderWrapper.eq(StatementOrder::getCustomerId, customerId)
+        orderWrapper.eq(StatementOrder::getCustomerId, customerId)//.ne(StatementOrder::getIsInvoiceStatus, InvoiceStatus.INVOICED.getCode())
             .eq(StatementOrder::getDelFlag, "0");
 
         List<StatementOrder> statementOrders = baseMapper.selectList(orderWrapper);
@@ -307,14 +308,18 @@ public class StatementOrderServiceImpl extends ServiceImpl<StatementOrderMapper,
         Map<Long, List<StatementProductBo>> productGroupByOrderId =
             CollectionUtil.isNotEmpty(bo.getProductList())
                 ? bo.getProductList().stream()
+                .filter(product -> product.getOrderId() != null)
                 .collect(Collectors.groupingBy(StatementProductBo::getOrderId))
                 : Collections.emptyMap();
 
-        // 3. 为每个明细,找到对应的商品
+        // 3. 处理每个明细
         for (StatementDetailBo detailBo : bo.getDetailList()) {
-            Long originalOrderId = detailBo.getOrderId();
-            List<StatementProductBo> productListForThisOrder = productGroupByOrderId.get(originalOrderId);
+            Long originalOrderId = detailBo.getOrderId(); // 可能为 null
+            if (originalOrderId == null) {
+                continue; // 跳过无效明细
+            }
 
+            List<StatementProductBo> productListForThisOrder = productGroupByOrderId.get(originalOrderId);
             if (CollectionUtil.isNotEmpty(productListForThisOrder)) {
                 for (StatementProductBo productBo : productListForThisOrder) {
                     StatementProduct product = MapstructUtils.convert(productBo, StatementProduct.class);

+ 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);
+    }
+}

+ 18 - 6
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierAuthorizeController.java

@@ -64,7 +64,7 @@ public class SupplierAuthorizeController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("supplier:supplierauthorize:query")
+    //@SaCheckPermission("supplier:supplierauthorize:query")
     @GetMapping("/{id}")
     public R<SupplierAuthorizeVo> getInfo(@NotNull(message = "主键不能为空")
                                      @PathVariable("id") Long id) {
@@ -76,14 +76,26 @@ public class SupplierAuthorizeController extends BaseController {
      */
 //    @SaCheckPermission("supplier:supplierauthorize:query")
     @GetMapping("/getAuthorizeDetailList")
-    public R<List<SupplierAuthorizeVo>> getAuthorizeDetailList(Long supplierId) {
-        return R.ok(supplierAuthorizeService.getAuthorizeDetailList(supplierId));
+    public R<List<SupplierAuthorizeVo>> getAuthorizeDetailList(Long supplierId, PageQuery pageQuery) {
+        return R.ok(supplierAuthorizeService.getAuthorizeDetailList(supplierId, pageQuery));
     }
 
+    @GetMapping("/getDetailList")
+    public R<List<SupplierAuthorizeVo>> getDetailList(SupplierAuthorizeBo bo) {
+        return R.ok(supplierAuthorizeService.srmgetAuthorizeDetailList(bo));
+    }
+
+    @GetMapping("/getBrandAuthorizeDetail")
+    public R<SupplierAuthorizeVo> getBrandAuthorizeDetail(@RequestParam Long id) {
+        return R.ok(supplierAuthorizeService.getBrandAuthorizeDetail(id));
+    }
+
+
+
     /**
      * 供应能力查询信息列表
      */
-    @SaCheckPermission("supplier:supplierauthorize:list")
+    //@SaCheckPermission("supplier:supplierauthorize:list")
     @GetMapping("/getSupplyCapacityList")
     public TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
         return supplierAuthorizeService.getSupplyCapacityList(bo, pageQuery);
@@ -92,7 +104,7 @@ public class SupplierAuthorizeController extends BaseController {
     /**
      * 新增供应能力查询
      */
-    @SaCheckPermission("supplier:supplierauthorize:add")
+    //@SaCheckPermission("supplier:supplierauthorize:add")
     @Log(title = "供应能力查询", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -103,7 +115,7 @@ public class SupplierAuthorizeController extends BaseController {
     /**
      * 修改供应能力查询
      */
-    @SaCheckPermission("supplier:supplierauthorize:edit")
+    //@SaCheckPermission("supplier:supplierauthorize:edit")
     @Log(title = "供应能力查询", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierContractController.java

@@ -83,7 +83,7 @@ public class SupplierContractController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("supplier:contract:query")
+    //@SaCheckPermission("supplier:contract:query")
     @GetMapping("/{id}")
     public R<SupplierContractVo> getInfo(@NotNull(message = "主键不能为空")
                                      @PathVariable("id") Long id) {

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierQualificationController.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.SupplierQualificationVo;
+import org.dromara.customer.domain.bo.SupplierQualificationBo;
+import org.dromara.customer.service.ISupplierQualificationService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商资质信息
+ * 前端访问路由地址为:/supplier/qualification
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/qualification")
+public class SupplierQualificationController extends BaseController {
+
+    private final ISupplierQualificationService supplierQualificationService;
+
+    /**
+     * 查询供应商资质信息列表
+     */
+    //@SaCheckPermission("supplier:qualification:list")
+    @GetMapping("/list")
+    public TableDataInfo<SupplierQualificationVo> list(SupplierQualificationBo bo, PageQuery pageQuery) {
+        return supplierQualificationService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出供应商资质信息列表
+     */
+    //@SaCheckPermission("supplier:qualification:export")
+    @Log(title = "供应商资质信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(SupplierQualificationBo bo, HttpServletResponse response) {
+        List<SupplierQualificationVo> list = supplierQualificationService.queryList(bo);
+        ExcelUtil.exportExcel(list, "供应商资质信息", SupplierQualificationVo.class, response);
+    }
+
+    /**
+     * 获取供应商资质信息详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("supplier:qualification:query")
+    @GetMapping("/{id}")
+    public R<SupplierQualificationVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(supplierQualificationService.queryById(id));
+    }
+
+    /**
+     * 新增供应商资质信息
+     */
+    //@SaCheckPermission("supplier:qualification:add")
+    @Log(title = "供应商资质信息", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody SupplierQualificationBo bo) {
+        return toAjax(supplierQualificationService.insertByBo(bo));
+    }
+
+    /**
+     * 修改供应商资质信息
+     */
+    //@SaCheckPermission("supplier:qualification:edit")
+    @Log(title = "供应商资质信息", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SupplierQualificationBo bo) {
+        return toAjax(supplierQualificationService.updateByBo(bo));
+    }
+
+    /**
+     * 删除供应商资质信息
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("supplier:qualification:remove")
+    @Log(title = "供应商资质信息", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(supplierQualificationService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 31 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/CustomerRegisterController.java

@@ -0,0 +1,31 @@
+package org.dromara.customer.controller.pc;
+
+/**
+ * @author
+ * @date 2026/1/29 上午10:15
+ */
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.customer.domain.bo.CustomerRegisterBo;
+import org.dromara.customer.service.ICustomerInfoService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/customerContact")
+public class CustomerRegisterController {
+
+    private final ICustomerInfoService customerInfoService;
+
+    /**
+    * 企业注册
+    * */
+    public R<Void> register(CustomerRegisterBo bo) {
+        customerInfoService.register(bo);
+        return R.ok();
+    }
+}

+ 4 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/CustomerContact.java

@@ -66,8 +66,12 @@ public class CustomerContact extends TenantEntity {
      */
     private Long roleId;
 
+    private String roleName;
+
     private Long deptId;
 
+    private String deptName;
+
     private String email;
 
     private Date birthday;

+ 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;
+
+
+}

+ 2 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/QualificationFile.java

@@ -34,6 +34,8 @@ public class QualificationFile extends TenantEntity {
      */
     private String authorizeNo;
 
+    private Long authorizeId;
+
     /**
      * 资质类型名称
      */

+ 2 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierAuthorize.java

@@ -39,6 +39,8 @@ public class SupplierAuthorize extends TenantEntity {
      */
     private String supplierNo;
 
+    private Long brandId;
+
     /**
      * 供应商ID
      */

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

@@ -79,7 +79,7 @@ public class SupplierContract extends TenantEntity {
     /**
      * 发票类型(如增值税专票/普票)
      */
-    private String invoiceType;
+    private Long invoiceType;
 
     /**
      * 税率(如13%/9%/6%)
@@ -89,7 +89,7 @@ public class SupplierContract extends TenantEntity {
     /**
      * 结算方式(如月结/季结/一次性)
      */
-    private String settlementMethod;
+    private Long settlementMethod;
 
     /**
      * 合同说明

+ 96 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierQualification.java

@@ -0,0 +1,96 @@
+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;
+
+/**
+ * 供应商资质信息对象 supplier_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("supplier_qualification")
+public class SupplierQualification extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 资质名称(对应表单“资质名称”)
+     */
+    private String qualificationName;
+
+    /**
+     * 资质级别(对应表单“资质级别”)
+     */
+    private String qualificationLevel;
+
+    private Long qualificationLevelId;
+
+    /**
+     * 证件编号(对应表单“证件编号”)
+     */
+    private String certificateNo;
+
+    /**
+     * 发证机构(对应表单“发证机构”)
+     */
+    private String issuingAuthority;
+
+    /**
+     * 资质有效期-开始日期(对应表单“开始日期”)
+     */
+    private Date startDate;
+
+    /**
+     * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+     */
+    private Date endDate;
+
+    /**
+     * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+     */
+    private Long isLongValid;
+
+    /**
+     * 附件存储地址(对应表单“上传附件”)
+     */
+    private String attachmentUrl;
+
+    /**
+     * 附件原文件名
+     */
+    private String attachmentName;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 6 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/CustomerContactBo.java

@@ -35,13 +35,13 @@ public class CustomerContactBo extends BaseEntity {
     /**
      * 联系人姓名
      */
-    @NotBlank(message = "联系人姓名不能为空", groups = {AddGroup.class, EditGroup.class})
+//    @NotBlank(message = "联系人姓名不能为空", groups = {AddGroup.class, EditGroup.class})
     private String contactName;
 
     /**
      * 手机号码
      */
-    @NotBlank(message = "手机号码不能为空", groups = {AddGroup.class, EditGroup.class})
+//    @NotBlank(message = "手机号码不能为空", groups = {AddGroup.class, EditGroup.class})
     private String phone;
 
     /**
@@ -67,8 +67,12 @@ public class CustomerContactBo extends BaseEntity {
      */
     private Long roleId;
 
+    private String roleName;
+
     private Long deptId;
 
+    private String deptName;
+
     private String email;
 
     private Date birthday;

+ 35 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/CustomerRegisterBo.java

@@ -0,0 +1,35 @@
+package org.dromara.customer.domain.bo;
+
+import lombok.Data;
+
+/**
+ * @author
+ * @date 2026/1/29 上午10:24
+ */
+@Data
+public class CustomerRegisterBo {
+    /**
+    * 客户名称
+    * */
+    private String customerName;
+    /**
+    * 采购人姓名
+    * */
+    private String purchaseName;
+    /**
+    * 采购人手机号
+    * */
+    private String purchasePhone;
+    /**
+    * 验证码
+    * */
+    private String code;
+    /**
+    * 密码
+    * */
+    private String password;
+    /**
+    * 确认密码
+    * */
+    private String confirmPassword;
+}

+ 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;
+
+
+}

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/QualificationFileBo.java

@@ -32,6 +32,9 @@ public class QualificationFileBo extends BaseEntity {
      */
     private String authorizeNo;
 
+
+    private Long authorizeId;
+
     /**
      * 资质类型名称
      */

+ 8 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierAuthorizeBo.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.domain.bo;
 
+import org.dromara.customer.domain.QualificationFile;
 import org.dromara.customer.domain.SupplierAuthorize;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
@@ -158,5 +159,12 @@ public class SupplierAuthorizeBo extends BaseEntity {
      */
     private String city;
 
+    private Long brandId;
+
+
+    private List<QualificationFile>  qualificationFiles;
+
+    private List<Long> categoryIds;
+
 
 }

+ 32 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContractBo.java

@@ -54,13 +54,44 @@ public class SupplierContractBo extends BaseEntity {
     /**
      * 合同类型(年度合作/项目采购/其他合作)
      */
-    private Long contractType;
+    private String contractType;
 
     /**
      * 合同生效时间
      */
     private Date contractStartTime;
 
+    /**
+     * 发票类型(如增值税专票/普票)
+     */
+    private Long invoiceType;
+
+    /**
+     * 结算方式(如月结/季结/一次性)
+     */
+    private Long settlementMethod;
+
+    /**
+     * 项目负责人(姓名/工号)
+     */
+    private String projectLeader;
+
+    /**
+     * 状态变更原因(如终止原因/作废理由)
+     */
+    private String reason;
+
+    /**
+     * 合同附件原文件名
+     */
+    private String filename;
+
+    /**
+     * 备注信息
+     */
+    private String remark;
+
+
     /**
      * 合同到期时间
      */

+ 3 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierInfoBo.java

@@ -159,6 +159,8 @@ public class SupplierInfoBo extends BaseEntity {
     //@NotBlank(message = "注册地址-省不能为空", groups = { AddGroup.class, EditGroup.class })
     private String businessProvince;
 
+    private String businessLicense;
+
     /**
      * 注册地址-市
      */
@@ -180,8 +182,7 @@ public class SupplierInfoBo extends BaseEntity {
     /**
      * 营业执照图片路径
      */
-    //@NotBlank(message = "营业执照图片路径不能为空", groups = { AddGroup.class, EditGroup.class })
-    private String businessLicense;
+
 
     /**
      * 发票类型

+ 80 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierQualificationBo.java

@@ -0,0 +1,80 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.SupplierQualification;
+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;
+
+/**
+ * 供应商资质信息业务对象 supplier_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SupplierQualification.class, reverseConvertGenerate = false)
+public class SupplierQualificationBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 资质名称(对应表单“资质名称”)
+     */
+    private String qualificationName;
+
+    /**
+     * 资质级别(对应表单“资质级别”)
+     */
+    private String qualificationLevel;
+
+    /**
+     * 证件编号(对应表单“证件编号”)
+     */
+    private String certificateNo;
+
+    /**
+     * 发证机构(对应表单“发证机构”)
+     */
+    private String issuingAuthority;
+
+    private Long qualificationLevelId;
+
+    /**
+     * 资质有效期-开始日期(对应表单“开始日期”)
+     */
+    private Date startDate;
+
+    /**
+     * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+     */
+    private Date endDate;
+
+    /**
+     * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+     */
+    private Long isLongValid;
+
+    /**
+     * 附件存储地址(对应表单“上传附件”)
+     */
+    private String attachmentUrl;
+
+    /**
+     * 附件原文件名
+     */
+    private String attachmentName;
+
+    private String remark;
+
+
+}

+ 5 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierapproveBo.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.domain.bo;
 
+import org.dromara.customer.domain.QualificationFile;
 import org.dromara.customer.domain.Supplierapprove;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
@@ -10,6 +11,8 @@ import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import org.dromara.common.translation.annotation.Translation;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.dromara.common.translation.constant.TransConstant;
 
@@ -62,4 +65,6 @@ public class SupplierapproveBo extends BaseEntity {
     private String status;
 
 
+
+
 }

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

@@ -40,7 +40,6 @@ public class CustomerContactVo implements Serializable {
     private Long customerId;
 
 
-
     /**
      * 联系人姓名
      */
@@ -79,11 +78,14 @@ public class CustomerContactVo implements Serializable {
      * 采购角色(如:采购经理、财务)
      */
     @ExcelProperty(value = "采购角色", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(readConverterExp = "如=:采购经理、财务")
     private Long roleId;
 
+    private String roleName;
+
     private Long deptId;
 
+    private String deptName;
+
     /**
      * 是否主联系人:0=是,1=否
      */

+ 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;
+
+
+}

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

@@ -42,6 +42,8 @@ public class QualificationFileVo implements Serializable {
     @ExcelProperty(value = "资质编号")
     private String authorizeNo;
 
+    private Long authorizeId;
+
     /**
      * 资质类型名称
      */

+ 9 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierAuthorizeVo.java

@@ -2,6 +2,7 @@ package org.dromara.customer.domain.vo;
 
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.QualificationFile;
 import org.dromara.customer.domain.SupplierAuthorize;
 import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
 import cn.idev.excel.annotation.ExcelProperty;
@@ -13,6 +14,7 @@ import lombok.Data;
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 
@@ -37,6 +39,8 @@ public class SupplierAuthorizeVo implements Serializable {
      */
     private Long categoryId;
 
+    private Long brandId;
+
     /**
      * 供应商编号
      */
@@ -204,4 +208,9 @@ public class SupplierAuthorizeVo implements Serializable {
     Map<String, String> categorysMap;
 
 
+    private List<QualificationFile> qualificationFiles;
+
+
+
+
 }

+ 47 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContractVo.java

@@ -55,7 +55,7 @@ public class SupplierContractVo implements Serializable {
     /**
      * 合同类型(年度合作/项目采购/其他合作)
      */
-    private Long contractType;
+    private String contractType;
 
     /**
      * 合同名称
@@ -79,6 +79,21 @@ public class SupplierContractVo implements Serializable {
      */
     private Date contractEndTime;
 
+    /**
+     * 到期提醒时间(单位:天,如提前7天提醒)
+     */
+    private Long demandReminderTime;
+
+    /**
+     * 发票类型(如增值税专票/普票)
+     */
+    private Long invoiceType;
+
+    /**
+     * 结算方式(如月结/季结/一次性)
+     */
+    private Long settlementMethod;
+
 
     /**
      * 上传时间
@@ -90,6 +105,36 @@ public class SupplierContractVo implements Serializable {
      */
     private Long contractStatus;
 
+    /**
+     * 税率(如13%/9%/6%)
+     */
+    private Long taxRate;
+    /**
+     * 合同说明
+     */
+    private String contractDescription;
+    /**
+     * 项目负责人(姓名/工号)
+     */
+    private String projectLeader;
+
+    /**
+     * 状态变更原因(如终止原因/作废理由)
+     */
+    private String reason;
+
+    /**
+     * 合同附件原文件名
+     */
+    private String filename;
+
+    /**
+     * 备注信息
+     */
+    private String remark;
+
+
+
 
     /**
      * 合同附件存储地址(多个附件用分隔符区分)
@@ -110,4 +155,5 @@ public class SupplierContractVo implements Serializable {
      */
     private String invalidContract;
 
+
 }

+ 1 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierInfoVo.java

@@ -68,6 +68,7 @@ public class SupplierInfoVo implements Serializable {
     @ExcelProperty(value = "合作类型")
     private Long cooperationType;
 
+
     /**
      * 固定电话
      */

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

@@ -0,0 +1,106 @@
+package org.dromara.customer.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.SupplierQualification;
+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;
+
+
+
+/**
+ * 供应商资质信息视图对象 supplier_qualification
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = SupplierQualification.class)
+public class SupplierQualificationVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 资质名称(对应表单“资质名称”)
+     */
+    @ExcelProperty(value = "资质名称", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“资质名称”")
+    private String qualificationName;
+
+    /**
+     * 资质级别(对应表单“资质级别”)
+     */
+    @ExcelProperty(value = "资质级别", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“资质级别”")
+    private String qualificationLevel;
+
+    private Long qualificationLevelId;
+
+    /**
+     * 证件编号(对应表单“证件编号”)
+     */
+    @ExcelProperty(value = "证件编号", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“证件编号”")
+    private String certificateNo;
+
+    /**
+     * 发证机构(对应表单“发证机构”)
+     */
+    @ExcelProperty(value = "发证机构", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“发证机构”")
+    private String issuingAuthority;
+
+    /**
+     * 资质有效期-开始日期(对应表单“开始日期”)
+     */
+    @ExcelProperty(value = "资质有效期-开始日期", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“开始日期”")
+    private Date startDate;
+
+    /**
+     * 资质有效期-结束日期(对应表单“结束日期”,长期有效时为NULL)
+     */
+    @ExcelProperty(value = "资质有效期-结束日期", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“结束日期”,长期有效时为NULL")
+    private Date endDate;
+
+    /**
+     * 是否长期有效(0=否 1=是,对应表单“长期有效”复选框)
+     */
+    @ExcelProperty(value = "是否长期有效", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==否,1==是,对应表单“长期有效”复选框")
+    private Long isLongValid;
+
+    /**
+     * 附件存储地址(对应表单“上传附件”)
+     */
+    @ExcelProperty(value = "附件存储地址", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "对=应表单“上传附件”")
+    private String attachmentUrl;
+
+    /**
+     * 附件原文件名
+     */
+    @ExcelProperty(value = "附件原文件名")
+    private String attachmentName;
+
+    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> {
+
+}

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

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.SupplierQualification;
+import org.dromara.customer.domain.vo.SupplierQualificationVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商资质信息Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+public interface SupplierQualificationMapper extends BaseMapperPlus<SupplierQualification, SupplierQualificationVo> {
+
+}

+ 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));
+    }
+}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff