Browse Source

zl-1-23-后端

林小张 2 months ago
parent
commit
a0c5cfea8c
90 changed files with 6690 additions and 25 deletions
  1. 11 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java
  2. 53 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteBo.java
  3. 30 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteResult.java
  4. 81 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/domain/SiteProductRemoteVo.java
  5. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerBankController.java
  6. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContactsController.java
  7. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerContractController.java
  8. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerDictController.java
  9. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.java
  10. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedController.java
  11. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerPreparedProductController.java
  12. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerQualificationController.java
  13. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerUserController.java
  14. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerWarehouseController.java
  15. 38 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/ProductRemoteController.java
  16. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerBank.java
  17. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContacts.java
  18. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerContract.java
  19. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerDict.java
  20. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerInfo.java
  21. 134 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPrepared.java
  22. 68 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerPreparedProduct.java
  23. 79 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerQualification.java
  24. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.java
  25. 92 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerWarehouse.java
  26. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerBankBo.java
  27. 66 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContactsBo.java
  28. 135 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerContractBo.java
  29. 65 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerDictBo.java
  30. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerInfoBo.java
  31. 128 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedBo.java
  32. 62 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerPreparedProductBo.java
  33. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerQualificationBo.java
  34. 88 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerUserBo.java
  35. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerWarehouseBo.java
  36. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerBankVo.java
  37. 83 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContactsVo.java
  38. 166 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerContractVo.java
  39. 81 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerDictVo.java
  40. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerInfoVo.java
  41. 78 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedProductVo.java
  42. 158 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerPreparedVo.java
  43. 91 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerQualificationVo.java
  44. 107 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerUserVo.java
  45. 108 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerWarehouseVo.java
  46. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerBankMapper.java
  47. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContactsMapper.java
  48. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerContractMapper.java
  49. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerDictMapper.java
  50. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerInfoMapper.java
  51. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedMapper.java
  52. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerPreparedProductMapper.java
  53. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerQualificationMapper.java
  54. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerUserMapper.java
  55. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerWarehouseMapper.java
  56. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerBankService.java
  57. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContactsService.java
  58. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerContractService.java
  59. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerDictService.java
  60. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerInfoService.java
  61. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedProductService.java
  62. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerPreparedService.java
  63. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerQualificationService.java
  64. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerUserService.java
  65. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerWarehouseService.java
  66. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerBankServiceImpl.java
  67. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContactsServiceImpl.java
  68. 152 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerContractServiceImpl.java
  69. 139 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerDictServiceImpl.java
  70. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerInfoServiceImpl.java
  71. 138 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedProductServiceImpl.java
  72. 214 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerPreparedServiceImpl.java
  73. 140 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerQualificationServiceImpl.java
  74. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerUserServiceImpl.java
  75. 143 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerWarehouseServiceImpl.java
  76. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerBankMapper.xml
  77. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContactsMapper.xml
  78. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerContractMapper.xml
  79. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerDictMapper.xml
  80. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerInfoMapper.xml
  81. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedMapper.xml
  82. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerPreparedProductMapper.xml
  83. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerQualificationMapper.xml
  84. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerUserMapper.xml
  85. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerWarehouseMapper.xml
  86. 40 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java
  87. 2 2
      script/config/nacos/application-common.yml
  88. 22 23
      script/config/nacos/datasource.yml
  89. 39 0
      script/sql/customer_contract_menu.sql
  90. 5 0
      script/sql/customer_detail_menu.sql

+ 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;
 
@@ -56,4 +59,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;
+}

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

+ 106 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerInfoController.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.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: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:partnerInfo: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:partnerInfo:list")
+    @GetMapping("/list")
+    public TableDataInfo<PartnerWarehouseVo> list(PartnerWarehouseBo bo, PageQuery pageQuery) {
+        return partnerWarehouseService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出伙伴商仓库列表
+     */
+    @SaCheckPermission("customer:partnerInfo:export")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PartnerWarehouseBo bo, HttpServletResponse response) {
+        List<PartnerWarehouseVo> list = partnerWarehouseService.queryList(bo);
+        ExcelUtil.exportExcel(list, "伙伴商仓库", PartnerWarehouseVo.class, response);
+    }
+
+    /**
+     * 获取伙伴商仓库详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("customer:partnerInfo:query")
+    @GetMapping("/{id}")
+    public R<PartnerWarehouseVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(partnerWarehouseService.queryById(id));
+    }
+
+    /**
+     * 新增伙伴商仓库
+     */
+    @SaCheckPermission("customer:partnerInfo:add")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PartnerWarehouseBo bo) {
+        return toAjax(partnerWarehouseService.insertByBo(bo));
+    }
+
+    /**
+     * 修改伙伴商仓库
+     */
+    @SaCheckPermission("customer:partnerInfo:edit")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PartnerWarehouseBo bo) {
+        return toAjax(partnerWarehouseService.updateByBo(bo));
+    }
+
+    /**
+     * 删除伙伴商仓库
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("customer:partnerInfo:remove")
+    @Log(title = "伙伴商仓库", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(partnerWarehouseService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 92 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerUser.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_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;
+
+
+}

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

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

@@ -0,0 +1,88 @@
+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;
+
+
+}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 2 - 2
script/config/nacos/application-common.yml

@@ -104,10 +104,10 @@ spring:
   # redis通用配置 子服务可以自行配置进行覆盖
   data:
     redis:
-      host: localhost
+      host: 192.168.1.123
       port: 6379
       # redis 密码必须配置
-      password: ruoyi123
+      password: 123456
       database: 0
       # 需要使用数字
       timeout: 10000

+ 22 - 23
script/config/nacos/datasource.yml

@@ -1,30 +1,29 @@
+# 数据源占位符定义(供各服务配置文件引用)
 datasource:
   system-master:
-    # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
-    # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能
-    url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
-    username: root
-    password: password
-  gen:
-    url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
-    username: root
-    password: password
+    url: jdbc:mysql://192.168.1.123:3306/yoe_system_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
   job:
-    url: jdbc:mysql://localhost:3306/ry-job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
-    username: root
-    password: password
+    url: jdbc:mysql://192.168.1.123:3306/yoe_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
+  gen:
+    url: jdbc:mysql://192.168.1.123:3306/yoe_gen?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
   workflow:
-    url: jdbc:mysql://localhost:3306/ry-workflow?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
-    username: root
-    password: password
-#  system-oracle:
-#    url: jdbc:oracle:thin:@//localhost:1521/XE
-#    username: ROOT
-#    password: password
-#  system-postgres:
-#    url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
-#    username: root
-#    password: password
+    url: jdbc:mysql://192.168.1.123:3306/yoe_workflow?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
+  customer:
+    url: jdbc:mysql://192.168.1.123:3306/yoe_customer_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
+  product:
+    url: jdbc:mysql://192.168.1.123:3306/yoe_product_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    username: youyida
+    password: aapYBDthby
 
 spring:
   datasource:

+ 39 - 0
script/sql/customer_contract_menu.sql

@@ -0,0 +1,39 @@
+-- 客户合同管理菜单及按钮权限
+-- 父菜单ID: 1878652341000000100 (客户运营)
+
+-- 合同管理菜单(隐藏)
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000620, '合同管理', 1878652341000000100, 11, 'contract', '', 1, 0, 'M', '1', '0', '', '#', 103, 1, NOW(), NULL, NULL, '合同管理目录');
+
+-- 合同列表查询权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000621, '合同列表', 1878652341000000620, 1, '', '', 1, 0, 'F', '0', '0', 'customer:contract:list', '#', 103, 1, NOW(), NULL, NULL, '合同列表查询');
+
+-- 合同详情查询权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000622, '合同详情', 1878652341000000620, 2, '', '', 1, 0, 'F', '0', '0', 'customer:contract:query', '#', 103, 1, NOW(), NULL, NULL, '合同详情查询');
+
+-- 合同新增权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000623, '合同新增', 1878652341000000620, 3, '', '', 1, 0, 'F', '0', '0', 'customer:contract:add', '#', 103, 1, NOW(), NULL, NULL, '合同新增');
+
+-- 合同修改权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000624, '合同修改', 1878652341000000620, 4, '', '', 1, 0, 'F', '0', '0', 'customer:contract:edit', '#', 103, 1, NOW(), NULL, NULL, '合同修改');
+
+-- 合同删除权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000625, '合同删除', 1878652341000000620, 5, '', '', 1, 0, 'F', '0', '0', 'customer:contract:remove', '#', 103, 1, NOW(), NULL, NULL, '合同删除');
+
+-- 合同导出权限
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000626, '合同导出', 1878652341000000620, 6, '', '', 1, 0, 'F', '0', '0', 'customer:contract:export', '#', 103, 1, NOW(), NULL, NULL, '合同导出');
+
+-- 给超级管理员角色(role_id=1)分配权限
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000620);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000621);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000622);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000623);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000624);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000625);
+INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 1878652341000000626);

+ 5 - 0
script/sql/customer_detail_menu.sql

@@ -0,0 +1,5 @@
+-- 客户详情菜单(隐藏菜单)
+-- 父菜单ID: 1878652341000000100 (客户运营)
+-- visible = '1' 表示隐藏
+INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
+VALUES (1878652341000000610, '客户详情', 1878652341000000100, 10, 'customerDetail', 'platform/customerOperation/customerDetail/index', 1, 0, 'C', '1', '0', 'customer:customerInfo:query', '#', 103, 1, NOW(), NULL, NULL, '客户详情页面');