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

Merge remote-tracking branch 'origin/master'

Lijingyang 2 місяців тому
батько
коміт
15af189fc6
100 змінених файлів з 5445 додано та 6 видалено
  1. 35 0
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteErpCustomerService.java
  2. 18 0
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/erp/domain/ErpCompanyScaleData.java
  3. 18 0
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/erp/domain/ErpIndustryData.java
  4. 26 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpBank.java
  5. 22 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpBrand.java
  6. 24 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCity.java
  7. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCompanyScale.java
  8. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCountry.java
  9. 25 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomer.java
  10. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerGrade.java
  11. 47 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerSalesPriceList.java
  12. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerType.java
  13. 28 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpDepartment.java
  14. 24 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpDistrict.java
  15. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpExpense.java
  16. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpExpress.java
  17. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIncomeApplication.java
  18. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIncomeExpenseType.java
  19. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIndustry.java
  20. 27 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpPerson.java
  21. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpPosition.java
  22. 24 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpProductCategory.java
  23. 22 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpProvince.java
  24. 28 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesDelivery.java
  25. 22 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesOrder.java
  26. 46 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesPriceList.java
  27. 22 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesReturnApplication.java
  28. 21 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSupplierType.java
  29. 22 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpTaxCode.java
  30. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpUnit.java
  31. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpWarehouse.java
  32. 47 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteErpProductService.java
  33. 11 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java
  34. 53 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteBo.java
  35. 30 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteResult.java
  36. 81 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteVo.java
  37. 18 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/erp/domain/ErpBrandData.java
  38. 19 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/erp/domain/ErpProductCategoryData.java
  39. 18 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/erp/domain/ErpUnitData.java
  40. 165 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteErpSystemService.java
  41. 5 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  42. 21 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpBankData.java
  43. 19 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCityData.java
  44. 39 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCompanyData.java
  45. 17 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCountryData.java
  46. 16 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCustomerGradeData.java
  47. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCustomerTypeData.java
  48. 24 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpDepartmentData.java
  49. 19 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpDistrictData.java
  50. 16 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpExpressData.java
  51. 19 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpIncomeExpenseTypeData.java
  52. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpPersonData.java
  53. 17 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpPositionData.java
  54. 17 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpProvinceData.java
  55. 16 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpSupplierTypeData.java
  56. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpTaxCodeData.java
  57. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpWarehouseData.java
  58. 9 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  59. 3 0
      ruoyi-modules/ruoyi-customer/pom.xml
  60. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerBankController.java
  61. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContactsController.java
  62. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContractController.java
  63. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerDictController.java
  64. 115 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.java
  65. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedController.java
  66. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedProductController.java
  67. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerQualificationController.java
  68. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerUserController.java
  69. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerWarehouseController.java
  70. 38 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/ProductRemoteController.java
  71. 5 5
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierInfoController.java
  72. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerBank.java
  73. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContacts.java
  74. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContract.java
  75. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerDict.java
  76. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerInfo.java
  77. 134 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPrepared.java
  78. 68 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPreparedProduct.java
  79. 79 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerQualification.java
  80. 97 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.java
  81. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerWarehouse.java
  82. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerBankBo.java
  83. 66 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContactsBo.java
  84. 135 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContractBo.java
  85. 65 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerDictBo.java
  86. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerInfoBo.java
  87. 128 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedBo.java
  88. 62 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedProductBo.java
  89. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerQualificationBo.java
  90. 93 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerUserBo.java
  91. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerWarehouseBo.java
  92. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerBankVo.java
  93. 83 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContactsVo.java
  94. 166 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContractVo.java
  95. 81 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerDictVo.java
  96. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerInfoVo.java
  97. 78 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedProductVo.java
  98. 158 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedVo.java
  99. 91 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerQualificationVo.java
  100. 107 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerUserVo.java

+ 35 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteErpCustomerService.java

@@ -0,0 +1,35 @@
+package org.dromara.customer.api;
+
+import org.dromara.customer.api.erp.domain.*;
+
+import java.util.Map;
+
+/**
+ * erp客户服务
+ * @author
+ * @date 2026/1/23 下午6:18
+ */
+public interface RemoteErpCustomerService {
+
+    /**
+    * 同步企业规模
+    * */
+    Boolean syncCompanyScale(ErpCompanyScaleData companyScale);
+
+    /**
+    * 删除企业规模
+    * */
+    Boolean deleteCompanyScale(ErpCompanyScaleData companyScale);
+
+
+
+    /**
+    * 同步行业类别
+    * */
+    Boolean syncIndustry(ErpIndustryData industry);
+    /**
+    * 删除行业类别
+    * */
+    Boolean deleteIndustry(ErpIndustryData industry);
+
+}

+ 18 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/erp/domain/ErpCompanyScaleData.java

@@ -0,0 +1,18 @@
+package org.dromara.customer.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:13
+ */
+@Data
+public class ErpCompanyScaleData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Long ValidityFromDate; // 有效期从(时间戳,单位通常为毫秒)
+    private Long ValidityToDate;   // 有效期至(时间戳)
+    private String CropSclId;      // 编码(如 "SMALL", "MEDIUM", "LARGE")
+    private String CropSclNm;      // 名称(如 "小型企业", "中型企业", "大型企业")
+}

+ 18 - 0
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/erp/domain/ErpIndustryData.java

@@ -0,0 +1,18 @@
+package org.dromara.customer.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:28
+ */
+@Data
+public class ErpIndustryData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String InduId;             // 编码(如 "IT", "FINANCE", "MANUFACTURE")
+    private String InduNm;             // 名称(如 "信息技术", "金融", "制造业")
+    private Long ValidityFromDate;     // 有效期从(时间戳)
+    private Long ValidityToDate;       // 有效期至(时间戳)
+}

+ 26 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpBank.java

@@ -0,0 +1,26 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 银行主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpBank implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComBn comBn; // 顶层字段名,与 JSON 中的 "comBn" 一致
+
+    @Data
+    public static class ComBn {
+        private String BnAddr;     // 银行地址
+        private String BnCatgId;   // 银行类别(关联银行类别主数据)
+        private String FaxNo;      // 传真
+        private String Remark;     // 备注
+        private String TelNo;      // 联系电话
+        private String BnId;       // 编号(如 "ICBC", "BOC", "BNK001")
+        private String BnNm;       // 名称(如 "中国工商银行", "Bank of China")
+    }
+}

+ 22 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpBrand.java

@@ -0,0 +1,22 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 品牌资料实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpBrand implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComTradMrkDt comTradMrkDt; // 顶层字段名,与 JSON 中的 "comTradMrkDt" 一致
+
+    @Data
+    public static class ComTradMrkDt {
+        private String MnemonicId;  // 助记码(如 "APPL", "HW")
+        private String TradMrkId;   // 编码(品牌唯一标识)
+        private String TradMrkNm;   // 名称(如 "Apple", "华为")
+    }
+}

+ 24 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCity.java

@@ -0,0 +1,24 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 城市信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComCity comCity; // 顶层字段名,与 JSON 一致
+
+    @Data
+    public static class ComCity {
+        private String AreaCode;     // 区号
+        private String CountryId;    // 所属国家
+        private String PrvnId;       // 所属省份
+        private String CityId;       // 编号
+        private String CityNm;       // 名称
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCompanyScale.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 企业规模主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCompanyScale implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private CrmCropScl crmCropScl; // 顶层字段名,与 JSON 中的 "crmCropScl" 完全一致
+
+    @Data
+    public static class CrmCropScl {
+        private Long ValidityFromDate; // 有效期从(时间戳,单位通常为毫秒)
+        private Long ValidityToDate;   // 有效期至(时间戳)
+        private String CropSclId;      // 编码(如 "SMALL", "MEDIUM", "LARGE")
+        private String CropSclNm;      // 名称(如 "小型企业", "中型企业", "大型企业")
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCountry.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 国家/地区信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCountry implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComCountry comCountry; // 顶层字段名,与 JSON 中的 "comCountry" 一致
+
+    @Data
+    public static class ComCountry {
+        private String CountryId;     // 编号(如 "CN", "US", "JP")
+        private String CountryName;   // 名称(如 "中国", "United States")
+    }
+}

+ 25 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomer.java

@@ -0,0 +1,25 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 客户资料设定实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCustomer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private CustomerData data;        // 对应顶层 "data"
+    private String GathCndInfo;       // 条件说明(独立顶层字段)
+
+    @Data
+    public static class CustomerData {
+        private Integer ChkoutDa;   // 结账日(通常为 1~31 的整数)
+        private String CustId;      // 编号
+        private String CustNm;      // 名称
+        private String GathCnd;     // 收款条件
+        private Integer GathDays;   // 收款天数
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerGrade.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 客户等级信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCustomerGrade implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComCustGad comCustGad; // 顶层字段名,与 JSON 中的 "comCustGad" 一致
+
+    @Data
+    public static class ComCustGad {
+        private String GadId; // 编号(如 "VIP", "A01", "NORMAL")
+        private String GadNm; // 名称(如 "金牌客户", "普通客户")
+    }
+}

+ 47 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerSalesPriceList.java

@@ -0,0 +1,47 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 销售价格清单-客户产品实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCustomerSalesPriceList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Header salSalePrList;           // 单据头
+    private CompanyInfo salSalePrListCo;    // 公司信息
+    private List<Detail> salSalePrListDt;   // 明细行(客户+产品价格列表)
+
+    @Data
+    public static class Header {
+        private String TypeId;             // 单据类型
+        private Long BlDa;                 // 单据日期(时间戳)
+        private String BlNo;               // 单据编号
+        private String Remark;             // 备注
+        private Long ValidityFromDate;     // 有效期从
+        private Long ValidityToDate;       // 有效期至
+    }
+
+    @Data
+    public static class CompanyInfo {
+        private String CoId;               // 公司编号
+    }
+
+    @Data
+    public static class Detail {
+        private String CU_Remark;          // 备注(注意字段名含下划线)
+        private String CurId;              // 币别编号
+        private String CustId;             // 客户编号(新增字段!)
+        private Double Pr;                 // 未税单价
+        private String ProdId;             // 产品编号
+        private Double PrWTax;             // 含税单价
+        private String RowCd;              // 标识号
+        private Integer RowNo;             // 序号
+        private String SUiId;              // 交易单位编号
+        private String TaxId;              // 税码编号
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpCustomerType.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 客户类别信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpCustomerType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComCustTy comCustTy; // 顶层字段名,与 JSON 中的 "comCustTy" 一致
+
+    @Data
+    public static class ComCustTy {
+        private Long ValidityFromDate; // 有效期从(时间戳,单位通常为毫秒或秒)
+        private Long ValidityToDate;   // 有效期至(时间戳)
+        private String CustTyId;       // 编号(如 "CORP", "RETAIL")
+        private String CustTyNm;       // 名称(如 "企业客户", "零售客户")
+    }
+}

+ 28 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpDepartment.java

@@ -0,0 +1,28 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 部门信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpDepartment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComDept comDept; // 顶层字段名与 JSON 一致
+
+    @Data
+    public static class ComDept {
+        private String DepartmentCategory;   // 部门类型
+        private String Executive;            // 主管
+        private Integer Lv;                  // 级数
+        private String PDeptId;              // 上级部门
+        private String RtDeptId;             // 一级部门
+        private Long ValidityFromDate;       // 有效期从
+        private Long ValidityToDate;         // 有效期至
+        private String DeptId;               // 编号
+        private String DeptNm;               // 名称
+    }
+}

+ 24 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpDistrict.java

@@ -0,0 +1,24 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 区/县主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpDistrict implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComDistrict comDistrict; // 顶层字段名,与 JSON 中的 "comDistrict" 一致
+
+    @Data
+    public static class ComDistrict {
+        private String CityId;      // 城市(上级城市编码)
+        private String CountryId;   // 所属国家
+        private String PrvnId;      // 所属省份
+        private String DistrictId;  // 编码(如 "DIST_001", "310115")
+        private String DistrictNm;  // 名称(如 "浦东新区", "朝阳区")
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpExpense.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 费用申请单实体类(避免内部类与 Lombok @Data 冲突)
+ */
+@Data
+public class ErpExpense implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ExpenseData data; // 字段名仍为 "data",匹配 JSON;但内部类不叫 Data
+
+    @Data
+    public static class ExpenseData {
+        private String BlNo;       // 单据编号
+        private String IsRelChk;   // 是否关联确认单(通常 "Y"/"N" 或 "0"/"1",用 String 更安全)
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpExpress.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 快递主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpExpress implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComExpr comExpr; // 顶层字段名,与 JSON 中的 "comExpr" 一致
+
+    @Data
+    public static class ComExpr {
+        private String ExprId; // 编码(如 "SF", "YTO", "ZTO")
+        private String ExprNm; // 名称(如 "顺丰速运", "圆通速递")
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIncomeApplication.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 收入申请单实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpIncomeApplication implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private IncomeData data; // 字段名保持为 "data",匹配 JSON;内部类使用语义化名称
+
+    @Data
+    public static class IncomeData {
+        private String BlNo;       // 单据编号
+        private String IsRelChk;   // 是否关联确认单(通常为 "Y"/"N" 或 "1"/"0")
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIncomeExpenseType.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 收入费用类型主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpIncomeExpenseType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComIcmCs comIcmCs; // 顶层字段名,与 JSON 中的 "comIcmCs" 一致
+
+    @Data
+    public static class ComIcmCs {
+        private String IsCs;   // 费用标识(如 "Y"/"N" 或 "1"/"0")
+        private String IsIcm;  // 收入标识(如 "Y"/"N" 或 "1"/"0")
+        private String TyNm;   // 名称(如 "差旅费", "销售收入")
+        private String TypeId; // 编号(如 "EXP001", "INC001")
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpIndustry.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 行业别主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpIndustry implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private CrmIndu crmIndu; // 顶层字段名,与 JSON 中的 "crmIndu" 一致
+
+    @Data
+    public static class CrmIndu {
+        private String InduId;             // 编码(如 "IT", "FINANCE", "MANUFACTURE")
+        private String InduNm;             // 名称(如 "信息技术", "金融", "制造业")
+        private Long ValidityFromDate;     // 有效期从(时间戳)
+        private Long ValidityToDate;       // 有效期至(时间戳)
+    }
+}

+ 27 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpPerson.java

@@ -0,0 +1,27 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 人员资料设定实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpPerson implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComPerDt comPerDt; // 顶层字段名,与 JSON 中的 "comPerDt" 一致
+
+    @Data
+    public static class ComPerDt {
+        private String Phone;              // 移动电话
+        private String PostId;             // 岗位(岗位编码,关联岗位主数据)
+        private String Sex;                // 性别(如 "M"/"F" 或 "男"/"女")
+        private Long ValidityFromDate;     // 有效期从(时间戳)
+        private Long ValidityToDate;       // 有效期至(时间戳)
+        private String DeptId;             // 所属部门(部门编码)
+        private String PerId;              // 编号(人员唯一标识)
+        private String PerNm;              // 姓名
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpPosition.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 岗位信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpPosition implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComPot comPot; // 顶层字段名,与 JSON 中的 "ComPot" 一致
+
+    @Data
+    public static class ComPot {
+        private String PotId; // 编号
+        private String PotNm; // 名称
+    }
+}

+ 24 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpProductCategory.java

@@ -0,0 +1,24 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 产品类别信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpProductCategory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComProdCatg comProdCatg; // 顶层字段名,与 JSON 一致
+
+    @Data
+    public static class ComProdCatg {
+        private Integer Lv;                   // 级数
+        private String PurPerId;              // 采购员
+        private String ParentProdCatgId;      // 上级类别
+        private String ProdCatgId;            // 编码
+        private String ProdCatgNm;            // 名称
+    }
+}

+ 22 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpProvince.java

@@ -0,0 +1,22 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 省份主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpProvince implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComProvince comProvince; // 顶层字段名,与 JSON 中的 "comProvince" 一致
+
+    @Data
+    public static class ComProvince {
+        private String CountryId; // 所属国家(如 "CN")
+        private String PrvnId;    // 编号(如 "110000", "PROV_GD")
+        private String PrvnNm;    // 名称(如 "广东省", "北京市")
+    }
+}

+ 28 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesDelivery.java

@@ -0,0 +1,28 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 销售出货申请单实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpSalesDelivery implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private SalesDelivery data; // 顶层字段名,与 JSON 中的 "data" 一致
+
+    @Data
+    public static class SalesDelivery {
+        private String AnaPerId;   // 复点人员编号
+        private String BlNo;       // 单据编号
+        private String ChkPerId;   // 清货人员编号
+        private String DisPerId;   // 配货人员编号
+        private String ExprId;     // 快递编号
+        private String ExprNo;     // 快递单号
+        private String ExprPay;    // 快递付款方式
+        private String RecBlNo;    // 库存记录单号
+        private String ReSign;     // 回签信息
+    }
+}

+ 22 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesOrder.java

@@ -0,0 +1,22 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 销售订单实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpSalesOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private SalesOrderData data; // 顶层字段名,对应 JSON 中的 "data"
+
+    @Data
+    public static class SalesOrderData {
+        private String BlNo;      // 单据编号
+        private String OutStkSt;  // 出库状态(数据库原值,通常为状态码如 "NOT_OUT", "PARTIAL
+
+    }
+}

+ 46 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesPriceList.java

@@ -0,0 +1,46 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 销售价格清单实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpSalesPriceList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Header salSalePrList;           // 单据头
+    private CompanyInfo salSalePrListCo;    // 公司信息
+    private List<Detail> salSalePrListDt;   // 明细行(列表)
+
+    @Data
+    public static class Header {
+        private Long BlDa;                // 单据日期(时间戳)
+        private String BlNo;              // 单据编号
+        private String Remark;            // 备注
+        private String TypeId;            // 单据类型
+        private Long ValidityFromDate;    // 有效期从
+        private Long ValidityToDate;      // 有效期至
+    }
+
+    @Data
+    public static class CompanyInfo {
+        private String CoId;              // 公司编号
+    }
+
+    @Data
+    public static class Detail {
+        private String CU_Remark;         // 备注(注意字段名含下划线)
+        private String CurId;             // 币别编号
+        private Double Pr;                // 未税单价
+        private String ProdId;            // 产品编号
+        private Double PrWTax;            // 含税单价
+        private String RowCd;             // 标识号
+        private Integer RowNo;            // 序号
+        private String SUiId;             // 交易单位编号
+        private String TaxId;             // 税码编号
+    }
+}

+ 22 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSalesReturnApplication.java

@@ -0,0 +1,22 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 销售退货申请单实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpSalesReturnApplication implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ReturnData data; // 字段名保持为 "data",匹配 JSON;内部类使用语义化名称
+
+    @Data
+    public static class ReturnData {
+        private String BlNo;      // 商城订单退货号
+        private String InStkSt;   // 入库状态(数据库原值,如 "NOT_IN", "PARTIAL", "COMPLETE")
+        private String OrdBlno;   // 商城订单号
+    }
+}

+ 21 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpSupplierType.java

@@ -0,0 +1,21 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 供应商类别信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpSupplierType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComSupTy comSupTy; // 顶层字段名,与 JSON 中的 "comSupTy" 一致
+
+    @Data
+    public static class ComSupTy {
+        private String TyNm;   // 名称
+        private String TypeId; // 编号
+    }
+}

+ 22 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpTaxCode.java

@@ -0,0 +1,22 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 税码设定主数据实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpTaxCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComSetTax comSetTax; // 顶层字段名,与 JSON 中的 "comSetTax" 一致
+
+    @Data
+    public static class ComSetTax {
+        private String TaxId;   // 编号(如 "VAT13", "GST05")
+        private String TaxNm;   // 名称(如 "增值税-13%", "消费税")
+        private Double TaxRt;   // 税率(%),例如 13.0 表示 13%
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpUnit.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 计量单位信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpUnit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComUnit comUnit; // 顶层字段名,与 JSON 中的 "comUnit" 一致
+
+    @Data
+    public static class ComUnit {
+        private String UnitProperty;     // 属性(数据库原值,如 "STANDARD", "WEIGHT" 等)
+        private Integer DecimalDigits;   // 小数位数(数据库原值,通常为整数)
+        private String UnitId;           // 编号(如 "KG", "PCS", "MTR")
+        private String UnitName;         // 名称(如 "千克", "件", "米")
+    }
+}

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/erp/domain/ErpWarehouse.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.erp.domain;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 仓库信息实体类(字段名与 JSON 保持一致)
+ */
+@Data
+public class ErpWarehouse implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private ComWhs comWhs; // 顶层字段名与 JSON 一致
+
+    @Data
+    public static class ComWhs {
+        private String CoId;      // 公司
+        private String StkStu;    // 预设库存状态
+        private String WhsId;     // 编号
+        private String WhsNm;     // 名称
+    }
+}

+ 47 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteErpProductService.java

@@ -0,0 +1,47 @@
+package org.dromara.product.api;
+
+import org.dromara.product.api.erp.domain.*;
+
+import java.util.Map;
+
+/**
+ * erp商品服务
+ * @author
+ * @date 2026/1/23 下午6:16
+ */
+public interface RemoteErpProductService {
+
+
+    /**
+     * 同步erp商品品牌
+     * */
+    Boolean syncErpBrand(ErpBrandData erpBrand);
+
+    /**
+     * 删除erp商品品牌
+     * */
+    Boolean deleteErpBrand(ErpBrandData erpBrand);
+
+    /**
+     * 同步erp商品分类
+     * */
+    Boolean syncErpCategory(ErpProductCategoryData erpCategory);
+
+    /**
+     * 删除erp商品分类
+     * */
+    Boolean deleteErpCategory(ErpProductCategoryData erpCategory);
+    /**
+     * 同步计量单位
+     * */
+    Boolean syncErpUnit(ErpUnitData erpUnit);
+    /**
+     * 删除计量单位
+     * */
+    Boolean deleteErpUnit(ErpUnitData erpUnit);
+    /**
+     * 销售价格清单-产品
+     * */
+    Boolean syncSalesPriceList(Map<String,Object> salesPriceList);
+}
+

+ 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-product/src/main/java/org/dromara/product/api/erp/domain/ErpBrandData.java

@@ -0,0 +1,18 @@
+package org.dromara.product.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:17
+ */
+@Data
+public class ErpBrandData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String MnemonicId;  // 助记码(如 "APPL", "HW")
+    private String TradMrkId;   // 编码(品牌唯一标识)
+    private String TradMrkNm;   // 名称(如 "Apple", "华为")
+}

+ 19 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/erp/domain/ErpProductCategoryData.java

@@ -0,0 +1,19 @@
+package org.dromara.product.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:38
+ */
+@Data
+public class ErpProductCategoryData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer Lv;                   // 级数
+    private String PurPerId;              // 采购员
+    private String ParentProdCatgId;      // 上级类别
+    private String ProdCatgId;            // 编码
+    private String ProdCatgNm;            // 名称
+}

+ 18 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/erp/domain/ErpUnitData.java

@@ -0,0 +1,18 @@
+package org.dromara.product.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:29
+ */
+@Data
+public class ErpUnitData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String UnitProperty;     // 属性(数据库原值,如 "STANDARD", "WEIGHT" 等)
+    private Integer DecimalDigits;   // 小数位数(数据库原值,通常为整数)
+    private String UnitId;           // 编号(如 "KG", "PCS", "MTR")
+    private String UnitName;         // 名称(如 "千克", "件", "米")
+}

+ 165 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteErpSystemService.java

@@ -0,0 +1,165 @@
+package org.dromara.system.api;
+
+import org.dromara.system.api.erp.domain.*;
+
+
+/**
+ * erp系统服务
+ *
+ * @author
+ * @date 2026/1/23 下午6:17
+ */
+public interface RemoteErpSystemService {
+
+
+    /**
+     * 同步人员资料
+     * */
+    Boolean syncPerson(ErpPersonData person);
+
+    /**
+     * 删除人员资料
+     * */
+    Boolean deletePerson(ErpPersonData person);
+    /**
+     * 同步公司数据
+     * */
+    Boolean syncCompany(ErpCompanyData company);
+
+    /**
+     * 删除公司数据
+     * */
+    Boolean deleteCompany(ErpCompanyData company);
+
+    /**
+    * 同步仓库数据
+    * */
+    Boolean syncWarehouse(ErpWarehouseData warehouse);
+
+    /**
+    * 删除仓库数据
+    * */
+    Boolean deleteWarehouse(ErpWarehouseData warehouse);
+
+    /**
+    * 同步区县数据
+    * */
+    Boolean syncDistrict(ErpDistrictData district);
+
+    /**
+    * 删除区县数据
+    * */
+    Boolean deleteDistrict(ErpDistrictData district);
+
+    /**
+    * 同步国家数据
+    * */
+    Boolean syncCountry(ErpCountryData country);
+
+    /**
+    * 删除国家数据
+    * */
+    Boolean deleteCountry(ErpCountryData country);
+
+    /**
+    * 同步城市数据
+    * */
+    Boolean syncCity(ErpCityData city);
+
+    /**
+    * 删除城市数据
+    * */
+    Boolean deleteCity(ErpCityData city);
+
+    /**
+    * 同步岗位数据
+    * */
+    Boolean syncPosition(ErpPositionData position);
+
+    /**
+    * 删除岗位数据
+    * */
+    Boolean deletePosition(ErpPositionData position);
+
+    /**
+    * 同步快递物流公司数据
+    * */
+    Boolean syncExpress(ErpExpressData express);
+
+    /**
+    * 删除快递物流公司数据
+    * */
+    Boolean deleteExpress(ErpExpressData express);
+
+    /**
+     * 同步收入费用
+     * */
+    Boolean syncIncomeExpense(ErpIncomeExpenseTypeData incomeExpense);
+    /**
+     * 删除收入费用类型
+     * */
+    Boolean deleteIncomeExpense(ErpIncomeExpenseTypeData incomeExpense);
+    /**
+     * 同步省份
+     * */
+    Boolean syncProvince(ErpProvinceData province);
+    /**
+     * 删除省份
+     * */
+    Boolean deleteProvince(ErpProvinceData province);
+    /**
+     * 同步税码
+     * */
+    Boolean syncTaxCode(ErpTaxCodeData taxCode);
+    /**
+     * 删除税码
+     * */
+    Boolean deleteTaxCode(ErpTaxCodeData taxCode);
+
+    /**
+    * 同步部门
+    * */
+    Boolean syncDepartment(ErpDepartmentData department);
+    /**
+    * 删除部门
+    * */
+    Boolean deleteDepartment(ErpDepartmentData department);
+    /**
+    * 同步银行
+    * */
+    Boolean syncBank(ErpBankData bank);
+    /**
+    * 删除银行
+    * */
+    Boolean deleteBank(ErpBankData bank);
+
+    /**
+     * 同步供应商类别
+     * */
+    Boolean syncSupplierType(ErpSupplierTypeData supplierType);
+
+    /**
+     * 删除供应商类别
+     * */
+    Boolean deleteSupplierType(ErpSupplierTypeData supplierType);
+
+    /**
+     * 同步客户等级
+     * */
+    Boolean syncCustomerGrade(ErpCustomerGradeData customerGrade);
+    /**
+     * 删除客户等级
+     * */
+    Boolean deleteCustomerGrade(ErpCustomerGradeData customerGrade);
+
+    /**
+     * 同步客户类别
+     * */
+    Boolean syncCustomerType(ErpCustomerTypeData customerType);
+
+    /**
+     * 删除客户类别
+     * */
+    Boolean deleteCustomerType(ErpCustomerTypeData customerType);
+
+}

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

+ 21 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpBankData.java

@@ -0,0 +1,21 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:31
+ */
+@Data
+public class ErpBankData implements Serializable {
+
+    private String BnAddr;     // 银行地址
+    private String BnCatgId;   // 银行类别(关联银行类别主数据)
+    private String FaxNo;      // 传真
+    private String Remark;     // 备注
+    private String TelNo;      // 联系电话
+    private String BnId;       // 编号(如 "ICBC", "BOC", "BNK001")
+    private String BnNm;       // 名称(如 "中国工商银行", "Bank of China")
+}

+ 19 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCityData.java

@@ -0,0 +1,19 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:19
+ */
+@Data
+public class ErpCityData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String AreaCode;     // 区号
+    private String CountryId;    // 所属国家
+    private String PrvnId;       // 所属省份
+    private String CityId;       // 编号
+    private String CityNm;       // 名称
+}

+ 39 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCompanyData.java

@@ -0,0 +1,39 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:33
+ */
+@Data
+public class ErpCompanyData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String AccBnId;      // 开户银行
+    private String AccBnNo;      // 开户银行帐号
+    private String Address;      // 地址信息
+    private Long BegDa;          // 营业期限(开始)— JSON 中是数字 0
+    private String BusScp;       // 经营范围
+    private Double CapAmt;       // 注册资本 — JSON 是 0.000000
+    private String CoFuNm;       // 企业名称
+    private String Corporation;  // 法定代表人
+    private String EMail;        // E-Mail
+    private Long EndDa;          // 营业期限(结束)
+    private Long FoundDa;        // 成立日期
+    private String InCustId;     // 内部交易客户
+    private String InSupId;      // 内部交易供应商
+    private String LelPer;       // 法人代表
+    private String Phone;        // 办公电话
+    private String Principal;    // 负责人
+    private String RegAddr;      // 注册地址
+    private Long RegDa;          // 登记日期
+    private String RegOrg;       // 登记机关
+    private String Remark;       // 备注
+    private String TaxNo;        // 统一社会信用代码
+    private String CoId;         // 编号
+    private String CoNm;         // 名称
+
+}

+ 17 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCountryData.java

@@ -0,0 +1,17 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:18
+ */
+@Data
+public class ErpCountryData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String CountryId;     // 编号(如 "CN", "US", "JP")
+    private String CountryName;   // 名称(如 "中国", "United States")
+}

+ 16 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCustomerGradeData.java

@@ -0,0 +1,16 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:20
+ */
+@Data
+public class ErpCustomerGradeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String GadId; // 编号(如 "VIP", "A01", "NORMAL")
+    private String GadNm; // 名称(如 "金牌客户", "普通客户")
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpCustomerTypeData.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:21
+ */
+@Data
+public class ErpCustomerTypeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Long ValidityFromDate; // 有效期从(时间戳,单位通常为毫秒或秒)
+    private Long ValidityToDate;   // 有效期至(时间戳)
+    private String CustTyId;       // 编号(如 "CORP", "RETAIL")
+    private String CustTyNm;       // 名称(如 "企业客户", "零售客户")
+}

+ 24 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpDepartmentData.java

@@ -0,0 +1,24 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:30
+ */
+@Data
+public class ErpDepartmentData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    private String DepartmentCategory;   // 部门类型
+    private String Executive;            // 主管
+    private Integer Lv;                  // 级数
+    private String PDeptId;              // 上级部门
+    private String RtDeptId;             // 一级部门
+    private Long ValidityFromDate;       // 有效期从
+    private Long ValidityToDate;         // 有效期至
+    private String DeptId;               // 编号
+    private String DeptNm;               // 名称
+}

+ 19 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpDistrictData.java

@@ -0,0 +1,19 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:16
+ */
+@Data
+public class ErpDistrictData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String CityId;      // 城市(上级城市编码)
+    private String CountryId;   // 所属国家
+    private String PrvnId;      // 所属省份
+    private String DistrictId;  // 编码(如 "DIST_001", "310115")
+    private String DistrictNm;  // 名称(如 "浦东新区", "朝阳区")
+}

+ 16 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpExpressData.java

@@ -0,0 +1,16 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:22
+ */
+@Data
+public class ErpExpressData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String ExprId; // 编码(如 "SF", "YTO", "ZTO")
+    private String ExprNm; // 名称(如 "顺丰速运", "圆通速递")
+}

+ 19 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpIncomeExpenseTypeData.java

@@ -0,0 +1,19 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:24
+ */
+@Data
+public class ErpIncomeExpenseTypeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String IsCs;   // 费用标识(如 "Y"/"N" 或 "1"/"0")
+    private String IsIcm;  // 收入标识(如 "Y"/"N" 或 "1"/"0")
+    private String TyNm;   // 名称(如 "差旅费", "销售收入")
+    private String TypeId; // 编号(如 "EXP001", "INC001")
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpPersonData.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ErpPersonData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String Phone;              // 移动电话
+    private String PostId;             // 岗位(岗位编码,关联岗位主数据)
+    private String Sex;                // 性别(如 "M"/"F" 或 "男"/"女")
+    private Long ValidityFromDate;     // 有效期从(时间戳)
+    private Long ValidityToDate;       // 有效期至(时间戳)
+    private String DeptId;             // 所属部门(部门编码)
+    private String PerId;              // 编号(人员唯一标识)
+    private String PerNm;              // 姓名
+}

+ 17 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpPositionData.java

@@ -0,0 +1,17 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:21
+ */
+@Data
+public class ErpPositionData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String PotId; // 编号
+    private String PotNm; // 名称
+}

+ 17 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpProvinceData.java

@@ -0,0 +1,17 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:26
+ */
+@Data
+public class ErpProvinceData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String CountryId; // 所属国家(如 "CN")
+    private String PrvnId;    // 编号(如 "110000", "PROV_GD")
+    private String PrvnNm;    // 名称(如 "广东省", "北京市")
+}

+ 16 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpSupplierTypeData.java

@@ -0,0 +1,16 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:14
+ */
+@Data
+public class ErpSupplierTypeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String TyNm;   // 名称
+    private String TypeId; // 编号
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpTaxCodeData.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:27
+ */
+@Data
+public class ErpTaxCodeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String TaxId;   // 编号(如 "VAT13", "GST05")
+    private String TaxNm;   // 名称(如 "增值税-13%", "消费税")
+    private Double TaxRt;   // 税率(%),例如 13.0 表示 13%
+}

+ 18 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/erp/domain/ErpWarehouseData.java

@@ -0,0 +1,18 @@
+package org.dromara.system.api.erp.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2026/1/27 下午7:12
+ */
+@Data
+public class ErpWarehouseData implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String CoId;      // 公司
+    private String StkStu;    // 预设库存状态
+    private String WhsId;     // 编号
+    private String WhsNm;     // 名称
+}

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

@@ -83,6 +83,14 @@ 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",
         "authorize_type_level"
@@ -202,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_");
     }
 
     /**

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

+ 5 - 5
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierInfoController.java

@@ -49,7 +49,7 @@ public class SupplierInfoController extends BaseController {
     /**
      * 查询供应商信息列表
      */
-    @SaCheckPermission("customer:info:list")
+    //@SaCheckPermission("customer:info:list")
     @GetMapping("/list")
     public TableDataInfo<SupplierInfoVo> list(SupplierInfoBo bo, PageQuery pageQuery) {
         return supplierInfoService.queryPageList(bo, pageQuery);
@@ -61,7 +61,7 @@ public class SupplierInfoController extends BaseController {
      * @param pageQuery
      * @return
      */
-    @SaCheckPermission("customer:info:list")
+    //@SaCheckPermission("customer:info:list")
     @GetMapping("/getList")
     public TableDataInfo<SupplierInfoVo> getList(SupplierInfoBo bo, PageQuery pageQuery) {
         return supplierInfoService.getSupplierInformation(bo, pageQuery);
@@ -73,7 +73,7 @@ public class SupplierInfoController extends BaseController {
      * @param pageQuery
      * @return
      */
-    @SaCheckPermission("customer:info:list")
+    //@SaCheckPermission("customer:info:list")
     @GetMapping("/getApproveList")
     public TableDataInfo<SupplierInfoVo> getApproveList(SupplierInfoBo bo, PageQuery pageQuery) {
 
@@ -104,7 +104,7 @@ public class SupplierInfoController extends BaseController {
     /**
      * 导出供应商信息列表
      */
-    @SaCheckPermission("customer:info:export")
+    //@SaCheckPermission("customer:info:export")
     @Log(title = "供应商信息", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(SupplierInfoBo bo, HttpServletResponse response) {
@@ -151,7 +151,7 @@ public class SupplierInfoController extends BaseController {
      *
      * @param ids 主键串
      */
-    @SaCheckPermission("customer:info:remove")
+    //@SaCheckPermission("customer:info:remove")
     @Log(title = "供应商信息", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Деякі файли не було показано, через те що забагато файлів було змінено