Parcourir la source

供应商列表

tjxt il y a 2 mois
Parent
commit
2d1c158392
43 fichiers modifiés avec 2259 ajouts et 45 suppressions
  1. 2 1
      ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteSupplierProcurementService.java
  2. 15 0
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteCategoryService.java
  3. 5 0
      ruoyi-gateway/pom.xml
  4. 126 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierAuthorizeController.java
  5. 115 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierBankController.java
  6. 13 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierContactController.java
  7. 10 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierContractController.java
  8. 19 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierInfoController.java
  9. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplyAreaController.java
  10. 154 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierAuthorize.java
  11. 112 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierBank.java
  12. 4 13
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierContract.java
  13. 148 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierAuthorizeBo.java
  14. 84 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierBankBo.java
  15. 10 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContactBo.java
  16. 5 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContractBo.java
  17. 189 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierAuthorizeVo.java
  18. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierBankVo.java
  19. 20 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContactVo.java
  20. 77 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContractVo.java
  21. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierInformationVo.java
  22. 3 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteSupplierProcurementServiceImpl.java
  23. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/SupplierAuthorizeMapper.java
  24. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/SupplierBankMapper.java
  25. 75 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierAuthorizeService.java
  26. 72 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierBankService.java
  27. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierContactService.java
  28. 6 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierContractService.java
  29. 5 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierInfoService.java
  30. 2 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierProcurementService.java
  31. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplyAreaService.java
  32. 272 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java
  33. 144 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierBankServiceImpl.java
  34. 56 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContactServiceImpl.java
  35. 84 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContractServiceImpl.java
  36. 89 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java
  37. 4 4
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierProcurementServiceImpl.java
  38. 47 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplyAreaServiceImpl.java
  39. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SupplierAuthorizeMapper.xml
  40. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SupplierBankMapper.xml
  41. 8 3
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProductCategoryController.java
  42. 132 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteCategoryServiceImpl.java
  43. 21 13
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/ComStaffController.java

+ 2 - 1
ruoyi-api/ruoyi-api-customer/src/main/java/org/dromara/customer/api/RemoteSupplierProcurementService.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.api;
 
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -8,5 +9,5 @@ import java.util.Set;
  */
 public interface RemoteSupplierProcurementService {
 
-    Set<Long> selectSupplierProcurementIds(Long id);
+    Map<String,Long> selectSupplierProcurementIds(Long id);
 }

+ 15 - 0
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteCategoryService.java

@@ -0,0 +1,15 @@
+package org.dromara.product.api;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * author
+ * 时间:2026/1/16,10:18
+ */
+public interface RemoteCategoryService {
+
+    Map<Long,Map<String,String>> getallCategoryNameById(Map<Long,Long> categoryMap);
+
+    Map<Long,String> getCategoryNamebyIds(Set<Long> ids);
+}

+ 5 - 0
ruoyi-gateway/pom.xml

@@ -72,6 +72,11 @@
             </exclusions>
         </dependency>
 
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-json</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.dromara</groupId>
             <artifactId>ruoyi-common-satoken</artifactId>

+ 126 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierAuthorizeController.java

@@ -0,0 +1,126 @@
+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.dromara.customer.domain.bo.SupplyAreaBo;
+import org.dromara.customer.domain.vo.SupplyAreaVo;
+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.SupplierAuthorizeVo;
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
+import org.dromara.customer.service.ISupplierAuthorizeService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应能力查询
+ * 前端访问路由地址为:/supplier/supplierauthorize
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/supplierauthorize")
+public class SupplierAuthorizeController extends BaseController {
+
+    private final ISupplierAuthorizeService supplierAuthorizeService;
+
+    /**
+     * 查询供应能力查询列表
+     */
+    @SaCheckPermission("supplier:supplierauthorize:list")
+    @GetMapping("/list")
+    public TableDataInfo<SupplierAuthorizeVo> list(SupplierAuthorizeBo bo, PageQuery pageQuery) {
+        return supplierAuthorizeService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出供应能力查询列表
+     */
+    @SaCheckPermission("supplier:supplierauthorize:export")
+    @Log(title = "供应能力查询", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(SupplierAuthorizeBo bo, HttpServletResponse response) {
+        List<SupplierAuthorizeVo> list = supplierAuthorizeService.queryList(bo);
+        ExcelUtil.exportExcel(list, "供应能力查询", SupplierAuthorizeVo.class, response);
+    }
+
+    /**
+     * 获取供应能力查询详细信息
+     *
+     * @param id 主键
+     */
+    @SaCheckPermission("supplier:supplierauthorize:query")
+    @GetMapping("/{id}")
+    public R<SupplierAuthorizeVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(supplierAuthorizeService.queryById(id));
+    }
+
+    /**
+     * 根据供应商ID查询授权详情信息列表
+     */
+    @SaCheckPermission("supplier:supplierauthorize:query")
+    @GetMapping("/getAuthorizeDetailList")
+    public R<List<SupplierAuthorizeVo>> getAuthorizeDetailList(Long supplierId) {
+        return R.ok(supplierAuthorizeService.getAuthorizeDetailList(supplierId));
+    }
+
+    /**
+     * 供应能力查询信息列表
+     */
+    @SaCheckPermission("supplier:area:list")
+    @GetMapping("/getSupplyCapacityList")
+    public TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
+        return supplierAuthorizeService.getSupplyCapacityList(bo, pageQuery);
+    }
+
+    /**
+     * 新增供应能力查询
+     */
+    @SaCheckPermission("supplier:supplierauthorize:add")
+    @Log(title = "供应能力查询", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody SupplierAuthorizeBo bo) {
+        return toAjax(supplierAuthorizeService.insertByBo(bo));
+    }
+
+    /**
+     * 修改供应能力查询
+     */
+    @SaCheckPermission("supplier:supplierauthorize:edit")
+    @Log(title = "供应能力查询", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody SupplierAuthorizeBo bo) {
+        return toAjax(supplierAuthorizeService.updateByBo(bo));
+    }
+
+    /**
+     * 删除供应能力查询
+     *
+     * @param ids 主键串
+     */
+    @SaCheckPermission("supplier:supplierauthorize:remove")
+    @Log(title = "供应能力查询", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(supplierAuthorizeService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

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

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

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

@@ -38,7 +38,7 @@ public class SupplierContactController extends BaseController {
     private final ISupplierContactService supplierContactService;
 
     /**
-     * 查询联系人列表
+     * 获取业务联系人信息
      */
     @SaCheckPermission("supplier:contact:list")
     @GetMapping("/list")
@@ -46,6 +46,18 @@ public class SupplierContactController extends BaseController {
         return supplierContactService.queryPageList(bo, pageQuery);
     }
 
+
+    /**
+     * 根据id获取业务联系人
+     */
+    @SaCheckPermission("supplier:contact:list")
+    @GetMapping("/getSupplierContactlistById")
+    public TableDataInfo<SupplierContactVo> getlistById(SupplierContactBo bo, PageQuery pageQuery) {
+        return supplierContactService.queryPageListById(bo, pageQuery);
+    }
+
+
+
     /**
      * 导出联系人列表
      */

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

@@ -57,6 +57,16 @@ public class SupplierContractController extends BaseController {
         ExcelUtil.exportExcel(list, "合同管理", SupplierContractVo.class, response);
     }
 
+    /**
+     * 根据supplierid查询合同列表
+     */
+    @SaCheckPermission("supplier:contract:list")
+    @GetMapping("/supplierContractsById")
+    public TableDataInfo<SupplierContractVo> supplierContractsById(SupplierContractBo bo, PageQuery pageQuery) {
+        TableDataInfo<SupplierContractVo> supplierContracts = supplierContractService.queryContractsPageList(bo, pageQuery);
+        return supplierContracts;
+    }
+
     /**
      * 获取合同管理详细信息
      *

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

@@ -1,7 +1,10 @@
 package org.dromara.customer.controller;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
@@ -76,6 +79,20 @@ public class SupplierInfoController extends BaseController {
         return supplierInfoService.getSupplierApproveInformation(bo, pageQuery);
     }
 
+    /**
+     * 根据id获取品目列表
+     * @param supplierId
+     * @return
+     */
+    @GetMapping("/getSupplierCategories")
+    public R<List<String>> getSupplierCategories(@RequestParam Long supplierId) throws JsonProcessingException {
+        // 根据供应商ID查询已选择的品目ID列表
+        SupplierInformationVo supplierInfo = supplierInfoService.queryById(supplierId);
+        List<String> collect = Arrays.stream(supplierInfo.getOperatingCategory().split(",")).collect(Collectors.toList());
+        //List<String> categoryIds = supplierCategoryService.getCategoryIdsBySupplierId(supplierId);
+        return R.ok(collect);
+    }
+
 
 
 
@@ -98,8 +115,8 @@ public class SupplierInfoController extends BaseController {
      */
     @SaCheckPermission("customer:info:query")
     @GetMapping("/{id}")
-    public R<SupplierInfoVo> getInfo(@NotNull(message = "主键不能为空")
-                                     @PathVariable("id") Long id) {
+    public R<SupplierInformationVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) throws JsonProcessingException {
         return R.ok(supplierInfoService.queryById(id));
     }
 

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplyAreaController.java

@@ -46,6 +46,9 @@ public class SupplyAreaController extends BaseController {
         return supplyAreaService.queryPageList(bo, pageQuery);
     }
 
+
+
+
     /**
      * 导出供应区域列表
      */

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

@@ -0,0 +1,154 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 供应能力查询对象 supplier_authorize
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("supplier_authorize")
+public class SupplierAuthorize extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 类目ID 三级
+     */
+    private Long categoryId;
+
+    /**
+     * 供应商编号
+     */
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 授权单编号
+     */
+    private String authorizeNo;
+
+    /**
+     * 品牌编号
+     */
+    private String brandNo;
+
+    /**
+     * 品牌名称(中文)
+     */
+    private String brandName;
+
+    /**
+     * 品牌英文名称
+     */
+    private String brandEnglishName;
+
+    /**
+     * 品牌LOGO图片地址
+     */
+    private String brandLogo;
+
+    /**
+     * 授权类型(如独家/非独家)
+     */
+    private String authorizeType;
+
+    /**
+     * 授权品类(多个品类用分隔符区分)
+     */
+    private String authorizationCategory;
+
+    /**
+     * 品牌授权方(授权出具主体)
+     */
+    private String brandLicensor;
+
+    /**
+     * 授权关系文件存储地址
+     */
+    private String authorizationRelationshipFile;
+
+    /**
+     * 授权开始时间
+     */
+    private Date authorizationStartTime;
+
+    /**
+     * 授权结束时间
+     */
+    private Date authorizationEndTime;
+
+    /**
+     * 授权区域(如中国大陆/全球等)
+     */
+    private String authorizedArea;
+
+    /**
+     * 品牌持有类型(如自有/代理)
+     */
+    private String brandHoldType;
+
+    /**
+     * 授权层级(如一级/二级授权)
+     */
+    private String authorizeLevel;
+
+    /**
+     * 授权审核状态(0待审核/1已通过/2已驳回)
+     */
+    private String authorizedStatus;
+
+    /**
+     * 授权关系文件原文件名
+     */
+    private String authorizationRelationshipFileName;
+
+    /**
+     * 品牌注册人
+     */
+    private String brandRegistrant;
+
+    /**
+     * 审核反馈意见
+     */
+    private String reviewFeedback;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注信息
+     */
+    private String remark;
+
+
+}

+ 112 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierBank.java

@@ -0,0 +1,112 @@
+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;
+
+/**
+ * 供应商银行账户对象 supplier_bank
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("supplier_bank")
+public class SupplierBank extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 账户序号
+     */
+    private Long num;
+
+    /**
+     * 供应商编号
+     */
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 银行行号
+     */
+    private String bankNum;
+
+    /**
+     * 银行信息编号(可能为内部系统编号)
+     */
+    private String bankInfoNo;
+
+    /**
+     * 银行名称
+     */
+    private String bankName;
+
+    /**
+     * 银行账号
+     */
+    private String bankNo;
+
+    /**
+     * 账户有效性标识(1-有效, 0-无效)
+     */
+    private String isture;
+
+    /**
+     * 账户户名
+     */
+    private String circlesName;
+
+    /**
+     * 账户预留电话
+     */
+    private String phone;
+
+    /**
+     * 发票类型编码
+     */
+    private String invoiceTypeNo;
+
+    /**
+     * 发票类型名称
+     */
+    private String invoiceTypeName;
+
+    /**
+     * 推送状态(例如:0-未推送, 1-已推送, 16-推送失败)
+     */
+    private String pushStatus;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

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

@@ -40,12 +40,12 @@ public class SupplierContract extends TenantEntity {
     private Long supplierId;
 
     /**
-     * 合同编号(唯一标识)
+     * 合同编号
      */
     private String contractNo;
 
     /**
-     * 合同类型(如采购/合作/框架协议
+     * 合同类型(年度合作/项目采购/其他合作
      */
     private String contractType;
 
@@ -70,9 +70,9 @@ public class SupplierContract extends TenantEntity {
     private Date contractEndTime;
 
     /**
-     * 合同金额(元,支持小数)
+     * 合同金额
      */
-    private String contractAmount;
+    private Long contractAmount;
 
     /**
      * 发票类型(如增值税专票/普票)
@@ -114,15 +114,6 @@ public class SupplierContract extends TenantEntity {
      */
     private String reason;
 
-    /**
-     * 原始创建时间(兼容旧数据)
-     */
-    private Date created;
-
-    /**
-     * 原始修改时间(兼容旧数据)
-     */
-    private Date modify;
 
     /**
      * 合同附件原文件名

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

@@ -0,0 +1,148 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.SupplierAuthorize;
+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 java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 供应能力查询业务对象 supplier_authorize
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SupplierAuthorize.class, reverseConvertGenerate = false)
+public class SupplierAuthorizeBo extends BaseEntity {
+
+    /**
+     * 供应商编号
+     */
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplierName;
+
+    /**
+     * 有授权品牌
+     */
+    private List<String> authBrand;
+
+    /**
+     * 供货类目
+     */
+    private String supplyProCate;
+
+    /**
+     * 可供货品牌
+     */
+    private String supplyBrand;
+
+    /**
+     * 授权单编号
+     */
+    private String authorizeNo;
+
+    /**
+     * 品牌编号
+     */
+    private String brandNo;
+
+    /**
+     * 品牌名称(中文)
+     */
+    private String brandName;
+
+    /**
+     * 品牌英文名称
+     */
+    private String brandEnglishName;
+
+    /**
+     * 品牌LOGO图片地址
+     */
+    private String brandLogo;
+
+    /**
+     * 授权类型(如独家/非独家)
+     */
+    private String authorizeType;
+
+    /**
+     * 授权品类(多个品类用分隔符区分)
+     */
+    private String authorizationCategory;
+
+    /**
+     * 品牌授权方(授权出具主体)
+     */
+    private String brandLicensor;
+
+    /**
+     * 授权关系文件存储地址
+     */
+    private String authorizationRelationshipFile;
+
+    /**
+     * 授权开始时间
+     */
+    private Date authorizationStartTime;
+
+    /**
+     * 授权结束时间
+     */
+    private Date authorizationEndTime;
+
+    /**
+     * 授权区域(如中国大陆/全球等)
+     */
+    private String authorizedArea;
+
+    /**
+     * 品牌持有类型(如自有/代理)
+     */
+    private String brandHoldType;
+
+    /**
+     * 授权层级(如一级/二级授权)
+     */
+    private String authorizeLevel;
+
+    /**
+     * 授权审核状态(0待审核/1已通过/2已驳回)
+     */
+    private String authorizedStatus;
+
+    /**
+     * 授权关系文件原文件名
+     */
+    private String authorizationRelationshipFileName;
+
+    /**
+     * 品牌注册人
+     */
+    private String brandRegistrant;
+
+    /**
+     * 审核反馈意见
+     */
+    private String reviewFeedback;
+
+
+}

+ 84 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierBankBo.java

@@ -0,0 +1,84 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.SupplierBank;
+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.*;
+
+/**
+ * 供应商银行账户业务对象 supplier_bank
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SupplierBank.class, reverseConvertGenerate = false)
+public class SupplierBankBo extends BaseEntity {
+
+    /**
+     * 账户序号
+     */
+    private Long num;
+
+    /**
+     * 供应商编号
+     */
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 银行行号
+     */
+    private String bankNum;
+
+    /**
+     * 银行信息编号(可能为内部系统编号)
+     */
+    private String bankInfoNo;
+
+    /**
+     * 银行名称
+     */
+    private String bankName;
+
+    /**
+     * 银行账号
+     */
+    private String bankNo;
+
+    /**
+     * 账户有效性标识(1-有效, 0-无效)
+     */
+    private String isture;
+
+    /**
+     * 账户户名
+     */
+    private String circlesName;
+
+    /**
+     * 账户预留电话
+     */
+    private String phone;
+
+    /**
+     * 发票类型编码
+     */
+    private String invoiceTypeNo;
+
+    /**
+     * 发票类型名称
+     */
+    private String invoiceTypeName;
+
+
+}

+ 10 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContactBo.java

@@ -25,6 +25,16 @@ public class SupplierContactBo extends BaseEntity {
      */
     private String supplierNo;
 
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 员工编号
+     */
+    private String userNo;
+
     /**
      * 员工姓名
      */

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

@@ -27,5 +27,10 @@ public class SupplierContractBo extends BaseEntity {
      */
     private String supplierNo;
 
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
 
 }

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

@@ -0,0 +1,189 @@
+package org.dromara.customer.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.customer.domain.SupplierAuthorize;
+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;
+import java.util.Map;
+
+
+/**
+ * 供应能力查询视图对象 supplier_authorize
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = SupplierAuthorize.class)
+public class SupplierAuthorizeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /**
+     * 类目ID 三级
+     */
+    private Long categoryId;
+
+    /**
+     * 供应商编号
+     */
+    @ExcelProperty(value = "供应商编号")
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    @ExcelProperty(value = "供应商ID")
+    private Long supplierId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplierName;
+
+    /**
+     * 授权单编号
+     */
+    @ExcelProperty(value = "授权单编号")
+    private String authorizeNo;
+
+    /**
+     * 品牌编号
+     */
+    @ExcelProperty(value = "品牌编号")
+    private String brandNo;
+
+    /**
+     * 品牌名称(中文)
+     */
+    @ExcelProperty(value = "品牌名称", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "中=文")
+    private String brandName;
+
+    /**
+     * 品牌英文名称
+     */
+    @ExcelProperty(value = "品牌英文名称")
+    private String brandEnglishName;
+
+    /**
+     * 品牌LOGO图片地址
+     */
+    @ExcelProperty(value = "品牌LOGO图片地址")
+    private String brandLogo;
+
+    /**
+     * 授权类型(如独家/非独家)
+     */
+    @ExcelProperty(value = "授权类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "如=独家/非独家")
+    private String authorizeType;
+
+    /**
+     * 授权品类(多个品类用分隔符区分)
+     */
+    @ExcelProperty(value = "授权品类", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "多=个品类用分隔符区分")
+    private String authorizationCategory;
+
+    /**
+     * 品牌授权方(授权出具主体)
+     */
+    @ExcelProperty(value = "品牌授权方", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "授=权出具主体")
+    private String brandLicensor;
+
+    /**
+     * 授权关系文件存储地址
+     */
+    @ExcelProperty(value = "授权关系文件存储地址")
+    private String authorizationRelationshipFile;
+
+    /**
+     * 授权开始时间
+     */
+    @ExcelProperty(value = "授权开始时间")
+    private Date authorizationStartTime;
+
+    /**
+     * 授权结束时间
+     */
+    @ExcelProperty(value = "授权结束时间")
+    private Date authorizationEndTime;
+
+    /**
+     * 授权区域(如中国大陆/全球等)
+     */
+    @ExcelProperty(value = "授权区域", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "如=中国大陆/全球等")
+    private String authorizedArea;
+
+    /**
+     * 品牌持有类型(如自有/代理)
+     */
+    @ExcelProperty(value = "品牌持有类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "如=自有/代理")
+    private String brandHoldType;
+
+    /**
+     * 授权层级(如一级/二级授权)
+     */
+    @ExcelProperty(value = "授权层级", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "如=一级/二级授权")
+    private String authorizeLevel;
+
+    /**
+     * 授权审核状态(0待审核/1已通过/2已驳回)
+     */
+    @ExcelProperty(value = "授权审核状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=待审核/1已通过/2已驳回")
+    private String authorizedStatus;
+
+    /**
+     * 授权关系文件原文件名
+     */
+    @ExcelProperty(value = "授权关系文件原文件名")
+    private String authorizationRelationshipFileName;
+
+    /**
+     * 品牌注册人
+     */
+    @ExcelProperty(value = "品牌注册人")
+    private String brandRegistrant;
+
+    /**
+     * 审核反馈意见
+     */
+    @ExcelProperty(value = "审核反馈意见")
+    private String reviewFeedback;
+
+    /**
+     * 供应区域(省)
+     */
+    private String province;
+
+    /**
+     * 供应区域(市)
+     */
+    private String city;
+
+    /**
+     * 一级,二级,三级品目名称 oneLevelName twoLevelName threeLevelName
+     */
+    Map<String, String> categorysMap;
+
+
+}

+ 75 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierBankVo.java

@@ -0,0 +1,75 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.SupplierBank;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 供应商银行账户视图对象 supplier_bank
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = SupplierBank.class)
+public class SupplierBankVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 账户序号
+     */
+    @ExcelProperty(value = "账户序号")
+    private Long num;
+
+    /**
+     * 供应商编号
+     */
+    @ExcelProperty(value = "供应商编号")
+    private String supplierNo;
+
+    /**
+     * 供应商ID
+     */
+    @ExcelProperty(value = "供应商ID")
+    private Long supplierId;
+
+    /**
+     * 银行行号
+     */
+    @ExcelProperty(value = "银行行号")
+    private String bankNum;
+
+    /**
+     * 银行信息编号(可能为内部系统编号)
+     */
+    @ExcelProperty(value = "银行信息编号", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "可=能为内部系统编号")
+    private String bankInfoNo;
+
+    /**
+     * 银行名称
+     */
+    @ExcelProperty(value = "银行名称")
+    private String bankName;
+
+    /**
+     * 银行账号
+     */
+    @ExcelProperty(value = "银行账号")
+    private String bankNo;
+
+
+}

+ 20 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContactVo.java

@@ -40,6 +40,21 @@ public class SupplierContactVo implements Serializable {
     @ExcelProperty(value = "用户ID")
     private String userNo;
 
+    /**
+     * 供应商名称
+     */
+    private String supplierName;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 对接人编号
+     */
+    private Long abutmentNo;
+
     /**
      * 员工姓名
      */
@@ -58,6 +73,11 @@ public class SupplierContactVo implements Serializable {
     @ExcelProperty(value = "角色")
     private String roleNo;
 
+    /**
+     * A10标识号
+     */
+    private String abutment_no;
+
     /**
      * 部门
      */

+ 77 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContractVo.java

@@ -36,5 +36,82 @@ public class SupplierContractVo implements Serializable {
     @ExcelProperty(value = "供应商编号")
     private String supplierNo;
 
+    /**
+     * 供应商ID
+     */
+    private Long supplierId;
+
+    /**
+     * 供应商名称
+     */
+    private String supplierName;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合同类型(年度合作/项目采购/其他合作)
+     */
+    private String contractType;
+
+    /**
+     * 合同名称
+     */
+    private String contractName;
+
+
+    /**
+     * 合同金额
+     */
+    private Long contractAmount;
+
+
+    /**
+     * 合同生效时间
+     */
+    private Date contractStartTime;
+
+    /**
+     * 合同到期时间
+     */
+    private Date contractEndTime;
+
+
+    /**
+     * 上传时间
+     */
+    private Date createTime;
+
+    /**
+     * 合同状态(0草稿 1已生效 2已到期 3已终止 4已作废)
+     */
+    private Long contractStatus;
+
+
+    /**
+     * 合同附件存储地址(多个附件用分隔符区分)
+     */
+    private String contractAttachment;
+
+    /**
+     * 合同数
+     */
+    private String ContractNum;
+
+    /**
+     * 有效期内的合同
+     */
+    private String validContract;
+    /**
+     * 失效合同
+     */
+    private String invalidContract;
+
+
+
+
+
 
 }

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierInformationVo.java

@@ -13,6 +13,7 @@ import org.dromara.customer.domain.SupplierInfo;
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Map;
 
 
 /**
@@ -174,5 +175,7 @@ public class SupplierInformationVo implements Serializable {
      */
     private String city;
 
+    private Map<String,Object> otherCustomersMap;
+
 
 }

+ 3 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/dubbo/RemoteSupplierProcurementServiceImpl.java

@@ -6,6 +6,7 @@ import org.dromara.customer.api.RemoteSupplierProcurementService;
 import org.dromara.customer.service.ISupplierProcurementService;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -20,8 +21,8 @@ public class RemoteSupplierProcurementServiceImpl  implements RemoteSupplierProc
     private final ISupplierProcurementService supplierProcurementService;
 
     @Override
-    public Set<Long> selectSupplierProcurementIds(Long id){
-        Set<Long> supplierIds =supplierProcurementService.selectSupplierId(id);
+    public Map<String,Long> selectSupplierProcurementIds(Long id){
+        Map<String,Long> supplierIds =supplierProcurementService.selectSupplierId(id);
 
         return supplierIds;
     }

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

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.SupplierAuthorize;
+import org.dromara.customer.domain.vo.SupplierAuthorizeVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应能力查询Mapper接口
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+public interface SupplierAuthorizeMapper extends BaseMapperPlus<SupplierAuthorize, SupplierAuthorizeVo> {
+
+}

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

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.SupplierBank;
+import org.dromara.customer.domain.vo.SupplierBankVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商银行账户Mapper接口
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+public interface SupplierBankMapper extends BaseMapperPlus<SupplierBank, SupplierBankVo> {
+
+}

+ 75 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierAuthorizeService.java

@@ -0,0 +1,75 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.SupplierAuthorize;
+import org.dromara.customer.domain.vo.SupplierAuthorizeVo;
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.customer.domain.vo.SupplyAreaVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 供应能力查询Service接口
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+public interface ISupplierAuthorizeService extends IService<SupplierAuthorize>{
+
+    /**
+     * 查询供应能力查询
+     *
+     * @param id 主键
+     * @return 供应能力查询
+     */
+    SupplierAuthorizeVo queryById(Long id);
+
+    /**
+     * 分页查询供应能力查询列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应能力查询分页列表
+     */
+    TableDataInfo<SupplierAuthorizeVo> queryPageList(SupplierAuthorizeBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的供应能力查询列表
+     *
+     * @param bo 查询条件
+     * @return 供应能力查询列表
+     */
+    List<SupplierAuthorizeVo> queryList(SupplierAuthorizeBo bo);
+
+    /**
+     * 新增供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(SupplierAuthorizeBo bo);
+
+    /**
+     * 修改供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(SupplierAuthorizeBo bo);
+
+    /**
+     * 校验并批量删除供应能力查询信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId);
+
+    TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery);
+}

+ 72 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierBankService.java

@@ -0,0 +1,72 @@
+package org.dromara.customer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.customer.domain.SupplierBank;
+import org.dromara.customer.domain.vo.SupplierBankVo;
+import org.dromara.customer.domain.bo.SupplierBankBo;
+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 LJY
+ * @date 2026-01-15
+ */
+public interface ISupplierBankService extends IService<SupplierBank>{
+
+    /**
+     * 查询供应商银行账户
+     *
+     * @param id 主键
+     * @return 供应商银行账户
+     */
+    SupplierBankVo queryById(Long id);
+
+    /**
+     * 分页查询供应商银行账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应商银行账户分页列表
+     */
+    TableDataInfo<SupplierBankVo> queryPageList(SupplierBankBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的供应商银行账户列表
+     *
+     * @param bo 查询条件
+     * @return 供应商银行账户列表
+     */
+    List<SupplierBankVo> queryList(SupplierBankBo bo);
+
+    /**
+     * 新增供应商银行账户
+     *
+     * @param bo 供应商银行账户
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(SupplierBankBo bo);
+
+    /**
+     * 修改供应商银行账户
+     *
+     * @param bo 供应商银行账户
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(SupplierBankBo bo);
+
+    /**
+     * 校验并批量删除供应商银行账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    SupplierBankVo selectBySupplierId(Long id);
+}

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierContactService.java

@@ -67,4 +67,7 @@ public interface ISupplierContactService extends IService<SupplierContact>{
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    TableDataInfo<SupplierContactVo> queryPageListById(SupplierContactBo bo, PageQuery pageQuery);
+
 }

+ 6 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierContractService.java

@@ -35,6 +35,8 @@ public interface ISupplierContractService extends IService<SupplierContract>{
      */
     TableDataInfo<SupplierContractVo> queryPageList(SupplierContractBo bo, PageQuery pageQuery);
 
+    TableDataInfo<SupplierContractVo> queryContractsPageList(SupplierContractBo bo, PageQuery pageQuery);
+
     /**
      * 查询符合条件的合同管理列表
      *
@@ -43,6 +45,8 @@ public interface ISupplierContractService extends IService<SupplierContract>{
      */
     List<SupplierContractVo> queryList(SupplierContractBo bo);
 
+
+
     /**
      * 新增合同管理
      *
@@ -67,4 +71,6 @@ public interface ISupplierContractService extends IService<SupplierContract>{
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+
 }

+ 5 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierInfoService.java

@@ -1,7 +1,10 @@
 package org.dromara.customer.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import org.dromara.customer.domain.SupplierInfo;
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
 import org.dromara.customer.domain.vo.SupplierInfoVo;
 import org.dromara.customer.domain.bo.SupplierInfoBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -25,7 +28,7 @@ public interface ISupplierInfoService extends IService<SupplierInfo>{
      * @param id 主键
      * @return 供应商信息
      */
-    SupplierInfoVo queryById(Long id);
+    SupplierInformationVo queryById(Long id) throws JsonProcessingException;
 
     /**
      * 分页查询供应商信息列表
@@ -87,4 +90,5 @@ public interface ISupplierInfoService extends IService<SupplierInfo>{
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 
+    IPage<SupplierInfo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery);
 }

+ 2 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierProcurementService.java

@@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -69,5 +70,5 @@ public interface ISupplierProcurementService extends IService<SupplierProcuremen
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
-    Set<Long> selectSupplierId(Long id);
+    Map<String,Long> selectSupplierId(Long id);
 }

+ 3 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplyAreaService.java

@@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 供应区域Service接口
@@ -67,4 +68,6 @@ public interface ISupplyAreaService extends IService<SupplyArea>{
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    Map<Long, String> queryProvincesorCity(Long supplierId,Map<Long, List<String>> areaMap,int level);
 }

+ 272 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java

@@ -0,0 +1,272 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.dubbo.config.annotation.DubboReference;
+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.dromara.customer.domain.SupplierInfo;
+import org.dromara.customer.domain.vo.SupplierContractVo;
+import org.dromara.customer.domain.vo.SupplyAreaVo;
+import org.dromara.customer.service.ISupplierInfoService;
+import org.dromara.customer.service.ISupplyAreaService;
+import org.dromara.product.api.RemoteCategoryService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
+import org.dromara.customer.domain.vo.SupplierAuthorizeVo;
+import org.dromara.customer.domain.SupplierAuthorize;
+import org.dromara.customer.mapper.SupplierAuthorizeMapper;
+import org.dromara.customer.service.ISupplierAuthorizeService;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 供应能力查询Service业务层处理
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorizeMapper, SupplierAuthorize> implements ISupplierAuthorizeService {
+
+    private final SupplierAuthorizeMapper baseMapper;
+
+    private final ISupplierInfoService supplierInfoService;
+
+    private final ISupplyAreaService supplyAreaService;
+
+    @DubboReference
+    private final RemoteCategoryService remoteCategoryService;
+
+    /**
+     * 查询供应能力查询
+     *
+     * @param id 主键
+     * @return 供应能力查询
+     */
+    @Override
+    public SupplierAuthorizeVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询供应能力查询列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应能力查询分页列表
+     */
+    @Override
+    public TableDataInfo<SupplierAuthorizeVo> queryPageList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierAuthorize> lqw = buildQueryWrapper(bo);
+        Page<SupplierAuthorizeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的供应能力查询列表
+     *
+     * @param bo 查询条件
+     * @return 供应能力查询列表
+     */
+    @Override
+    public List<SupplierAuthorizeVo> queryList(SupplierAuthorizeBo bo) {
+        LambdaQueryWrapper<SupplierAuthorize> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    @Override
+    public TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
+        //查询供应商信息
+        IPage<SupplierInfo> result =supplierInfoService.getSupplyCapacityList(bo,pageQuery);
+        List<SupplierInfo> records = result.getRecords();
+        Map<Long,String> supplierCategoryMap = records.stream().collect(Collectors.toMap(SupplierInfo::getId, SupplierInfo::getOperatingCategory));
+
+        Set<Long> allCategoryIds = new HashSet<>();
+        for (String categoryIdStr : supplierCategoryMap.values()) {
+            // 拆分品类ID字符串(如"1,2,3" → ["1","2","3"])
+            String[] idArr = categoryIdStr.split(",");
+            for (String idStr : idArr) {
+                try {
+                    Long categoryId = Long.parseLong(idStr.trim()); // 去除空格,避免格式问题
+                    allCategoryIds.add(categoryId);
+                } catch (NumberFormatException e) {
+                    // 异常处理:ID格式错误时跳过,不影响整体逻辑
+                    continue;
+                }
+            }
+        }
+
+        // 2. 批量查询品类ID→名称的映射
+        Map<Long, String> categoryIdToNameMap = new HashMap<>();
+        if (!allCategoryIds.isEmpty()) {
+            Map<Long, String> categoryNamebyIds = remoteCategoryService.getCategoryNamebyIds(allCategoryIds);
+        }
+
+        /*result.getRecords().stream().map(item -> {
+            SupplierAuthorizeVo supplierAuthorizeVo = new SupplierAuthorizeVo();
+            BeanUtils.copyProperties(item, supplierAuthorizeVo);
+            supplierAuthorizeVo.setSupplierName(item.getSupplierName());
+
+        }).collect(Collectors.toList());*/
+
+        //supplierInfoService
+
+        return null;
+
+    }
+
+    private LambdaQueryWrapper<SupplierAuthorize> buildQueryWrapper(SupplierAuthorizeBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SupplierAuthorize> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(SupplierAuthorize::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierAuthorize::getSupplierNo, bo.getSupplierNo());
+        lqw.like(StringUtils.isNotBlank(bo.getBrandName()), SupplierAuthorize::getBrandName, bo.getBrandName());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizeType()), SupplierAuthorize::getAuthorizeType, bo.getAuthorizeType());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizationCategory()), SupplierAuthorize::getAuthorizationCategory, bo.getAuthorizationCategory());
+        lqw.eq(StringUtils.isNotBlank(bo.getBrandLicensor()), SupplierAuthorize::getBrandLicensor, bo.getBrandLicensor());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizationRelationshipFile()), SupplierAuthorize::getAuthorizationRelationshipFile, bo.getAuthorizationRelationshipFile());
+        lqw.eq(bo.getAuthorizationStartTime() != null, SupplierAuthorize::getAuthorizationStartTime, bo.getAuthorizationStartTime());
+        lqw.eq(bo.getAuthorizationEndTime() != null, SupplierAuthorize::getAuthorizationEndTime, bo.getAuthorizationEndTime());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizedArea()), SupplierAuthorize::getAuthorizedArea, bo.getAuthorizedArea());
+        lqw.eq(StringUtils.isNotBlank(bo.getBrandHoldType()), SupplierAuthorize::getBrandHoldType, bo.getBrandHoldType());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizeLevel()), SupplierAuthorize::getAuthorizeLevel, bo.getAuthorizeLevel());
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizedStatus()), SupplierAuthorize::getAuthorizedStatus, bo.getAuthorizedStatus());
+        lqw.like(StringUtils.isNotBlank(bo.getAuthorizationRelationshipFileName()), SupplierAuthorize::getAuthorizationRelationshipFileName, bo.getAuthorizationRelationshipFileName());
+        lqw.eq(StringUtils.isNotBlank(bo.getBrandRegistrant()), SupplierAuthorize::getBrandRegistrant, bo.getBrandRegistrant());
+        lqw.eq(StringUtils.isNotBlank(bo.getReviewFeedback()), SupplierAuthorize::getReviewFeedback, bo.getReviewFeedback());
+        return lqw;
+    }
+
+    /**
+     * 新增供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(SupplierAuthorizeBo bo) {
+        SupplierAuthorize add = MapstructUtils.convert(bo, SupplierAuthorize.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        return flag;
+    }
+
+    /**
+     * 修改供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(SupplierAuthorizeBo bo) {
+        SupplierAuthorize update = MapstructUtils.convert(bo, SupplierAuthorize.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(SupplierAuthorize entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除供应能力查询信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId) {
+        LambdaQueryWrapper<SupplierAuthorize> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SupplierAuthorize::getSupplierId, supplierId);
+        List<SupplierAuthorizeVo> supplierAuthorizeVos = baseMapper.selectVoList(lqw);
+        setSupplierNames(supplierAuthorizeVos);
+        //供应区域(省)
+        Map<Long,List<String>> areaMap = supplierAuthorizeVos.stream().collect(Collectors.toMap(
+            SupplierAuthorizeVo::getId,
+            item -> Arrays.stream(item.getAuthorizedArea().split(",")).toList()
+        ));
+        Map<Long,String> provinceMap =supplyAreaService.queryProvincesorCity(supplierId,areaMap,1);
+        provinceMap.forEach((id,province) -> {
+            supplierAuthorizeVos.stream().filter(item -> item.getId().equals(id)).forEach(item -> item.setProvince(province));
+        });
+
+        //供应区域(市)
+        Map<Long,String> cityMap =supplyAreaService.queryProvincesorCity(supplierId,areaMap,2);
+        cityMap.forEach((id,city) -> {
+            supplierAuthorizeVos.stream().filter(item -> item.getId().equals(id)).forEach(item -> item.setCity(city));
+        });
+        //一级 二级 三级 品目
+        Map<Long,Long> categoryMap = supplierAuthorizeVos.stream().collect(Collectors.toMap(
+            SupplierAuthorizeVo::getId,
+            item ->item.getCategoryId()
+        ));
+
+        Map<Long, Map<String, String>> categorysMap = remoteCategoryService.getallCategoryNameById(categoryMap);
+
+        supplierAuthorizeVos.forEach(item -> {
+            Map<String, String> stringStringMap = categorysMap.get(item.getId());
+            item.setCategorysMap(stringStringMap);
+        });
+
+        return supplierAuthorizeVos;
+    }
+
+
+
+    private void setSupplierNames(List<SupplierAuthorizeVo> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+        // 提取供应商ID列表
+        List<Long> supplierIds = records.stream()
+            .map(SupplierAuthorizeVo::getSupplierId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .collect(Collectors.toList());
+
+        if (!supplierIds.isEmpty()) {
+            // 查询供应商名称
+            List<SupplierInfo> supplierInfos = supplierInfoService.lambdaQuery()
+                .in(SupplierInfo::getId, supplierIds)
+                .select(SupplierInfo::getId, SupplierInfo::getEnterpriseName)
+                .list();
+
+            // 构建映射关系
+            Map<Long, String> supplierNameMap = supplierInfos.stream()
+                .collect(Collectors.toMap(
+                    SupplierInfo::getId,
+                    SupplierInfo::getEnterpriseName
+                ));
+
+            // 设置供应商名称
+            records.forEach(record -> {
+                String supplierName = supplierNameMap.get(record.getSupplierId());
+                record.setSupplierName(supplierName);
+            });
+        }
+    }
+}

+ 144 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierBankServiceImpl.java

@@ -0,0 +1,144 @@
+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.SupplierBankBo;
+import org.dromara.customer.domain.vo.SupplierBankVo;
+import org.dromara.customer.domain.SupplierBank;
+import org.dromara.customer.mapper.SupplierBankMapper;
+import org.dromara.customer.service.ISupplierBankService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 供应商银行账户Service业务层处理
+ *
+ * @author LJY
+ * @date 2026-01-15
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class SupplierBankServiceImpl  extends ServiceImpl<SupplierBankMapper, SupplierBank> implements ISupplierBankService {
+
+    private final SupplierBankMapper baseMapper;
+
+    /**
+     * 查询供应商银行账户
+     *
+     * @param id 主键
+     * @return 供应商银行账户
+     */
+    @Override
+    public SupplierBankVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询供应商银行账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应商银行账户分页列表
+     */
+    @Override
+    public TableDataInfo<SupplierBankVo> queryPageList(SupplierBankBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierBank> lqw = buildQueryWrapper(bo);
+        Page<SupplierBankVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的供应商银行账户列表
+     *
+     * @param bo 查询条件
+     * @return 供应商银行账户列表
+     */
+    @Override
+    public List<SupplierBankVo> queryList(SupplierBankBo bo) {
+        LambdaQueryWrapper<SupplierBank> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<SupplierBank> buildQueryWrapper(SupplierBankBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SupplierBank> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(SupplierBank::getId);
+        lqw.eq(bo.getNum() != null, SupplierBank::getNum, bo.getNum());
+        lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierBank::getSupplierNo, bo.getSupplierNo());
+        lqw.eq(bo.getSupplierId() != null, SupplierBank::getSupplierId, bo.getSupplierId());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankNum()), SupplierBank::getBankNum, bo.getBankNum());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankInfoNo()), SupplierBank::getBankInfoNo, bo.getBankInfoNo());
+        lqw.like(StringUtils.isNotBlank(bo.getBankName()), SupplierBank::getBankName, bo.getBankName());
+        lqw.eq(StringUtils.isNotBlank(bo.getBankNo()), SupplierBank::getBankNo, bo.getBankNo());
+        return lqw;
+    }
+
+    /**
+     * 新增供应商银行账户
+     *
+     * @param bo 供应商银行账户
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(SupplierBankBo bo) {
+        SupplierBank add = MapstructUtils.convert(bo, SupplierBank.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        return flag;
+    }
+
+    /**
+     * 修改供应商银行账户
+     *
+     * @param bo 供应商银行账户
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(SupplierBankBo bo) {
+        SupplierBank update = MapstructUtils.convert(bo, SupplierBank.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(SupplierBank entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除供应商银行账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public SupplierBankVo selectBySupplierId(Long id) {
+        LambdaQueryWrapper<SupplierBank> lqw = Wrappers.lambdaQuery();
+        lqw.eq(SupplierBank::getSupplierId,id);
+        SupplierBankVo supplierBankVo = baseMapper.selectVoOne(lqw);
+        return supplierBankVo;
+    }
+}

+ 56 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContactServiceImpl.java

@@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.customer.controller.SupplierInfoController;
+import org.dromara.customer.domain.SupplierInfo;
+import org.dromara.customer.service.ISupplierInfoService;
 import org.springframework.stereotype.Service;
 import org.dromara.customer.domain.bo.SupplierContactBo;
 import org.dromara.customer.domain.vo.SupplierContactVo;
@@ -20,6 +23,8 @@ import org.dromara.customer.service.ISupplierContactService;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 联系人Service业务层处理
@@ -34,6 +39,8 @@ public class SupplierContactServiceImpl  extends ServiceImpl<SupplierContactMapp
 
     private final SupplierContactMapper baseMapper;
 
+    private final ISupplierInfoService supplierInfoService;
+
     /**
      * 查询联系人
      *
@@ -56,8 +63,52 @@ public class SupplierContactServiceImpl  extends ServiceImpl<SupplierContactMapp
     public TableDataInfo<SupplierContactVo> queryPageList(SupplierContactBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<SupplierContact> lqw = buildQueryWrapper(bo);
         Page<SupplierContactVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        setSupplierNames(result.getRecords());
         return TableDataInfo.build(result);
     }
+    private void setSupplierNames(List<SupplierContactVo> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+
+        // 提取供应商ID列表
+        List<Long> supplierIds = records.stream()
+            .map(SupplierContactVo::getSupplierId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .collect(Collectors.toList());
+
+        if (!supplierIds.isEmpty()) {
+            // 查询供应商名称
+            List<SupplierInfo> supplierInfos = supplierInfoService.lambdaQuery()
+                .in(SupplierInfo::getId, supplierIds)
+                .select(SupplierInfo::getId, SupplierInfo::getEnterpriseName)
+                .list();
+
+            // 构建映射关系
+            Map<Long, String> supplierNameMap = supplierInfos.stream()
+                .collect(Collectors.toMap(
+                    SupplierInfo::getId,
+                    SupplierInfo::getEnterpriseName
+                ));
+
+            // 设置供应商名称
+            records.forEach(record -> {
+                String supplierName = supplierNameMap.get(record.getSupplierId());
+                record.setSupplierName(supplierName);
+            });
+        }
+    }
+
+    @Override
+    public TableDataInfo<SupplierContactVo> queryPageListById(SupplierContactBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierContact> lqw = buildQueryWrapper(bo);
+        lqw.eq(SupplierContact::getSupplierId , bo.getSupplierId());
+        Page<SupplierContactVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        setSupplierNames(result.getRecords());
+        return TableDataInfo.build(result);
+    }
+
 
     /**
      * 查询符合条件的联系人列表
@@ -71,6 +122,8 @@ public class SupplierContactServiceImpl  extends ServiceImpl<SupplierContactMapp
         return baseMapper.selectVoList(lqw);
     }
 
+
+
     private LambdaQueryWrapper<SupplierContact> buildQueryWrapper(SupplierContactBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SupplierContact> lqw = Wrappers.lambdaQuery();
@@ -79,6 +132,7 @@ public class SupplierContactServiceImpl  extends ServiceImpl<SupplierContactMapp
         lqw.like(StringUtils.isNotBlank(bo.getUserName()), SupplierContact::getUserName, bo.getUserName());
         lqw.eq(StringUtils.isNotBlank(bo.getPhone()), SupplierContact::getPhone, bo.getPhone());
         lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SupplierContact::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserNo()),SupplierContact::getUserNo,bo.getUserNo());
         return lqw;
     }
 
@@ -130,4 +184,6 @@ public class SupplierContactServiceImpl  extends ServiceImpl<SupplierContactMapp
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+
 }

+ 84 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContractServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -10,6 +11,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.customer.domain.SupplierInfo;
+import org.dromara.customer.domain.vo.SupplierContactVo;
+import org.dromara.customer.service.ISupplierInfoService;
 import org.springframework.stereotype.Service;
 import org.dromara.customer.domain.bo.SupplierContractBo;
 import org.dromara.customer.domain.vo.SupplierContractVo;
@@ -20,6 +24,8 @@ import org.dromara.customer.service.ISupplierContractService;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 合同管理Service业务层处理
@@ -34,6 +40,8 @@ public class SupplierContractServiceImpl  extends ServiceImpl<SupplierContractMa
 
     private final SupplierContractMapper baseMapper;
 
+    private final ISupplierInfoService supplierInfoService;
+
     /**
      * 查询合同管理
      *
@@ -55,10 +63,81 @@ public class SupplierContractServiceImpl  extends ServiceImpl<SupplierContractMa
     @Override
     public TableDataInfo<SupplierContractVo> queryPageList(SupplierContractBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<SupplierContract> lqw = buildQueryWrapper(bo);
-        Page<SupplierContractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+
+        // 查询所有符合条件的记录
+        List<SupplierContract> allRecords = baseMapper.selectList(lqw);
+
+        List<SupplierContractVo> contractStats = allRecords.stream().collect(Collectors.groupingBy(
+                SupplierContract::getSupplierId,
+                Collectors.counting()
+            ))
+            .entrySet().stream().map(entry -> {
+                SupplierContractVo vo = new SupplierContractVo();
+                vo.setSupplierId(entry.getKey());
+                vo.setContractNum(entry.getValue().toString());
+                SupplierInfo supplier = supplierInfoService.getById(entry.getKey());
+                vo.setSupplierName(supplier.getSupplierName());
+                vo.setSupplierNo(supplier.getSupplierNo());
+                return vo;
+            })
+            .sorted((a,b) ->b.getSupplierNo().compareTo(a.getSupplierNo()))
+            .collect(Collectors.toList());
+
+        int total = contractStats.size();
+        int start = (int)((pageQuery.getPageNum()-1) * pageQuery.getPageSize());
+        int end = Math.min(start + pageQuery.getPageSize(),total);
+        List<SupplierContractVo> pagedResult = contractStats.subList(start, end);
+
+        Page<SupplierContractVo> result = new Page<>();
+        result.setRecords(pagedResult);
+        result.setTotal(total);
+        result.setSize(pageQuery.getPageSize());
+        result.setCurrent(pageQuery.getPageNum());
         return TableDataInfo.build(result);
     }
 
+    @Override
+    public TableDataInfo<SupplierContractVo> queryContractsPageList(SupplierContractBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierContract> lqw = buildQueryWrapper(bo);
+        IPage<SupplierContractVo> supplierContractVoIPage = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        setSupplierNames(supplierContractVoIPage.getRecords());
+        return TableDataInfo.build(supplierContractVoIPage);
+    }
+
+    private void setSupplierNames(List<SupplierContractVo> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+
+        // 提取供应商ID列表
+        List<Long> supplierIds = records.stream()
+            .map(SupplierContractVo::getSupplierId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .collect(Collectors.toList());
+
+        if (!supplierIds.isEmpty()) {
+            // 查询供应商名称
+            List<SupplierInfo> supplierInfos = supplierInfoService.lambdaQuery()
+                .in(SupplierInfo::getId, supplierIds)
+                .select(SupplierInfo::getId, SupplierInfo::getEnterpriseName)
+                .list();
+
+            // 构建映射关系
+            Map<Long, String> supplierNameMap = supplierInfos.stream()
+                .collect(Collectors.toMap(
+                    SupplierInfo::getId,
+                    SupplierInfo::getEnterpriseName
+                ));
+
+            // 设置供应商名称
+            records.forEach(record -> {
+                String supplierName = supplierNameMap.get(record.getSupplierId());
+                record.setSupplierName(supplierName);
+            });
+        }
+    }
+
     /**
      * 查询符合条件的合同管理列表
      *
@@ -74,8 +153,9 @@ public class SupplierContractServiceImpl  extends ServiceImpl<SupplierContractMa
     private LambdaQueryWrapper<SupplierContract> buildQueryWrapper(SupplierContractBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SupplierContract> lqw = Wrappers.lambdaQuery();
-        lqw.orderByAsc(SupplierContract::getId);
+        lqw.orderByDesc(SupplierContract::getSupplierNo);
         lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierContract::getSupplierNo, bo.getSupplierNo());
+        lqw.eq(bo.getSupplierId() != null && !bo.getSupplierId().equals(""),SupplierContract::getSupplierId, bo.getSupplierId());
         return lqw;
     }
 
@@ -130,4 +210,6 @@ public class SupplierContractServiceImpl  extends ServiceImpl<SupplierContractMa
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+
 }

+ 89 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java

@@ -1,6 +1,9 @@
 package org.dromara.customer.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -12,6 +15,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.customer.domain.SupplierProcurement;
 import org.dromara.customer.domain.SupplyArea;
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
 import org.dromara.customer.domain.vo.SupplierInformationVo;
 import org.dromara.customer.service.ISupplierProcurementService;
 import org.dromara.customer.service.ISupplyAreaService;
@@ -53,8 +57,76 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
      * @return 供应商信息
      */
     @Override
-    public SupplierInfoVo queryById(Long id){
-        return baseMapper.selectVoById(id);
+    public SupplierInformationVo queryById(Long id) throws JsonProcessingException {
+        SupplierInfoVo supplierInfoVo = baseMapper.selectVoById(id);
+        SupplierInformationVo supplierInformationVo = handleProcurementInfo(supplierInfoVo);
+
+        ObjectMapper  objectMapper = new ObjectMapper();
+        Map<String, Object> originalMap = objectMapper.readValue(supplierInfoVo.getOtherCustomers(), Map.class);
+        // 2. 转换字段名(大写驼峰 -> 小驼峰)
+        Map<String, Object> convertedMap = convertFieldNames(originalMap);
+
+//        Map<String, Object> result = new HashMap<>();
+//        result.put("otherCustomers", convertedMap);
+        supplierInformationVo.setOtherCustomersMap(convertedMap);
+        return supplierInformationVo;
+    }
+    private SupplierInformationVo handleProcurementInfo(SupplierInfoVo records) {
+        SupplierInformationVo targetVo = new SupplierInformationVo();
+        BeanUtils.copyProperties(records, targetVo, "otherCustomers");
+            // 查询管理人员和采购人员
+            Long id = targetVo.getId();
+            //查询供应地区
+            LambdaQueryWrapper<SupplyArea> supplyProvinceAreaLqw = Wrappers.lambdaQuery();
+            supplyProvinceAreaLqw.eq(SupplyArea::getSupplierId, id)
+                .eq(SupplyArea::getLevel,"1");
+            List<SupplyArea> supplyProvinceArealist = supplyAreaService.list(supplyProvinceAreaLqw);
+
+            LambdaQueryWrapper<SupplyArea> supplyCityAreaLqw = Wrappers.lambdaQuery();
+            supplyCityAreaLqw.eq(SupplyArea::getSupplierId, id)
+                .eq(SupplyArea::getLevel,"2");
+            List<SupplyArea> supplyCityArealist = supplyAreaService.list(supplyCityAreaLqw);
+
+            // 拼接省份名称
+            String provinceNames = supplyProvinceArealist.stream()
+                .map(SupplyArea::getAreaName)
+                .filter(Objects::nonNull)
+                .collect(Collectors.joining(","));
+
+            // 拼接城市名称
+            String cityNames = supplyCityArealist.stream()
+                .map(SupplyArea::getAreaName)
+                .filter(Objects::nonNull)
+                .collect(Collectors.joining(","));
+
+        targetVo.setProvince(provinceNames);
+        targetVo.setCity(cityNames);
+
+        return targetVo;
+    }
+
+    /**
+     * 转换字段名:大写驼峰(如 No、BelongOrg)-> 小驼峰(如 no、belongOrg)
+     */
+    private static Map<String, Object> convertFieldNames(Map<String, Object> originalMap) {
+        Map<String, Object> convertedMap = new HashMap<>();
+        for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
+            String originalKey = entry.getKey();
+            Object value = entry.getValue();
+
+            // 转换字段名:首字母小写,其余保持驼峰
+            String newKey;
+            if (originalKey.length() == 0) {
+                newKey = originalKey;
+            } else if (originalKey.length() == 1) {
+                newKey = originalKey.toLowerCase();
+            } else {
+                newKey = originalKey.substring(0, 1).toLowerCase() + originalKey.substring(1);
+            }
+
+            convertedMap.put(newKey, value);
+        }
+        return convertedMap;
     }
 
     /**
@@ -291,4 +363,19 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    @Override
+    public IPage<SupplierInfo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierInfo> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierInfo::getSupplierNo, bo.getSupplierNo());
+        lqw.eq(StringUtils.isNotBlank(bo.getSupplierName()), SupplierInfo::getSupplierName, bo.getSupplierName());
+        lqw.like(StringUtils.isNotBlank(bo.getSupplyBrand()), SupplierInfo::getOperatingBrand, bo.getSupplyBrand());
+        lqw.orderByDesc(SupplierInfo::getSupplierNo);
+
+        IPage<SupplierInfo> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+
+        IPage<SupplierInfo> resultPage = baseMapper.selectPage(page, lqw);
+
+        return resultPage;
+    }
 }

+ 4 - 4
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierProcurementServiceImpl.java

@@ -131,13 +131,13 @@ public class SupplierProcurementServiceImpl  extends ServiceImpl<SupplierProcure
     }
 
     @Override
-    public Set<Long> selectSupplierId(Long id) {
+    public Map<String,Long> selectSupplierId(Long id) {
         LambdaQueryWrapper<SupplierProcurement> lqw = Wrappers.lambdaQuery();
         lqw.eq(SupplierProcurement::getSupplierId,id);
         SupplierProcurement supplierProcurement = baseMapper.selectOne(lqw);
-        Set<Long> ids = new HashSet<>();
-        ids.add(supplierProcurement.getProductManager());
-        ids.add(supplierProcurement.getPurchaser());
+        Map<String,Long> ids = new HashMap<>();
+        ids.put("productManager",supplierProcurement.getProductManager());
+        ids.put("purchaser",supplierProcurement.getPurchaser());
         return ids;
     }
 }

+ 47 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplyAreaServiceImpl.java

@@ -17,6 +17,7 @@ import org.dromara.customer.domain.SupplyArea;
 import org.dromara.customer.mapper.SupplyAreaMapper;
 import org.dromara.customer.service.ISupplyAreaService;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
@@ -132,4 +133,50 @@ public class SupplyAreaServiceImpl  extends ServiceImpl<SupplyAreaMapper, Supply
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+    @Override
+    public Map<Long, String> queryProvincesorCity(Long supplierId,Map<Long, List<String>> areaMap,int level) {
+
+        //根据supplierID查询 供应地址
+        List<SupplyArea> supplyAreas = baseMapper.selectList(new LambdaQueryWrapper<SupplyArea>()
+            .eq(SupplyArea::getLevel, level)
+            .eq(SupplyArea::getSupplierId, supplierId));
+
+        Map<String, String> codeToNameMap = new HashMap<>();
+        for (SupplyArea area : supplyAreas) {
+            if (area.getAreaCode() != null && area.getAreaName() != null) {
+                codeToNameMap.put(area.getAreaCode(), area.getAreaName());
+            }
+        }
+
+        Map<Long, String> resultMap = new HashMap<>();
+
+        for (Map.Entry<Long, List<String>> entry : areaMap.entrySet()) {
+            Long Id = entry.getKey();
+            List<String> areaCodes = entry.getValue(); // 该商品对应的areaCode集合
+
+            StringBuilder nameBuilder = new StringBuilder();
+
+            if (areaCodes != null && !areaCodes.isEmpty()) {
+                for (String areaCode : areaCodes) {
+                    // 如果能匹配到对应的区域名称,就存入新Map(一个商品只存第一个匹配到的名称,可根据需求调整)
+                    if (codeToNameMap.containsKey(areaCode)) {
+                        String areaName = codeToNameMap.get(areaCode);
+
+                        if (nameBuilder.indexOf(areaName) == -1) {
+                            if (nameBuilder.length() > 0) {
+                                nameBuilder.append(","); // 用中文逗号分隔,也可以用英文逗号","
+                            }
+                            nameBuilder.append(areaName);
+                        }
+
+                    }
+                }
+            }
+            if (nameBuilder.length() > 0) {
+                resultMap.put(Id, nameBuilder.toString());
+            }
+        }
+        return resultMap;
+    }
 }

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SupplierAuthorizeMapper.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.SupplierAuthorizeMapper">
+
+</mapper>

+ 7 - 0
ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SupplierBankMapper.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.SupplierBankMapper">
+
+</mapper>

+ 8 - 3
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProductCategoryController.java

@@ -3,6 +3,7 @@ package org.dromara.product.controller;
 import java.util.List;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
@@ -48,15 +49,19 @@ public class ProductCategoryController extends BaseController {
         return productCategoryService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 供应商获取品目
+     * @return
+     */
     @GetMapping("/getProductCategoryList")
     public R<List<ProductCategoryVo>>getProductCategoryList() {
-        List<ProductCategory> list = productCategoryService.list();
+        LambdaQueryWrapper<ProductCategory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProductCategory::getClassLevel, "1");
+        List<ProductCategory> list = productCategoryService.list(queryWrapper);
         List<ProductCategoryVo> productCategoryVos = BeanUtil.copyToList(list, ProductCategoryVo.class);
         return R.ok(productCategoryVos);
     }
 
-
-
     /**
      * 导出产品分类列表
      */

+ 132 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteCategoryServiceImpl.java

@@ -0,0 +1,132 @@
+package org.dromara.product.dubbo;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.product.api.RemoteCategoryService;
+import org.dromara.product.domain.ProductCategory;
+import org.dromara.product.mapper.ProductCategoryMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * author
+ * 时间:2026/1/16,10:21
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteCategoryServiceImpl implements RemoteCategoryService {
+
+    private final ProductCategoryMapper categoryMapper;
+    @Override
+    public Map<Long, Map<String, String>> getallCategoryNameById(Map<Long, Long> categoryMap) {
+        Map<Long, Map<String, String>> resultMap = new HashMap<>();
+
+        //所有三级品类ID,批量查询
+        Set<Long> threeLevelCategoryIds = new HashSet<>(categoryMap.values());
+        List<ProductCategory> categoryList = categoryMapper.selectList(new LambdaQueryWrapper<ProductCategory>()
+            .in(ProductCategory::getId, threeLevelCategoryIds)
+            .select(ProductCategory::getId, ProductCategory::getCategoryName, ProductCategory::getAncestors));
+
+        // 3. 构建:三级品类ID → 品类对象 的映射
+        Map<Long, ProductCategory> threeLevelCategoryMap = new HashMap<>();
+        // 收集所有需要查询的一/二级品类ID
+        Set<Long> parentCategoryIds = new HashSet<>();
+        for (ProductCategory category : categoryList) {
+            threeLevelCategoryMap.put(category.getId(), category);
+            // 提取一/二级ID
+            String ancestors = category.getAncestors();
+            if (ancestors != null && !ancestors.isEmpty()) {
+                String[] ancestorIds = ancestors.split(",");
+                // 过滤掉0,收集一二级ID
+                for (String idStr : ancestorIds) {
+                    try {
+                        Long id = Long.parseLong(idStr);
+                        if (id > 0) { // 排除顶级0
+                            parentCategoryIds.add(id);
+                        }
+                    } catch (NumberFormatException e) {
+                        continue;
+                    }
+                }
+            }
+        }
+
+        // 4. 批量查询所有一/二级品类
+        Map<Long, String> parentCategoryNameMap = new HashMap<>();
+        if (!parentCategoryIds.isEmpty()) {
+            List<ProductCategory> parentCategories = categoryMapper.selectList(new LambdaQueryWrapper<ProductCategory>()
+                .in(ProductCategory::getId, parentCategoryIds)
+                .select(ProductCategory::getId, ProductCategory::getCategoryName));
+            // 构建:父品类ID → 名称 的映射
+            for (ProductCategory pc : parentCategories) {
+                parentCategoryNameMap.put(pc.getId(), pc.getCategoryName());
+            }
+        }
+
+        // 5. 组装最终结果
+        for (Map.Entry<Long, Long> entry : categoryMap.entrySet()) {
+            Long Id = entry.getKey(); // ID
+            Long threeLevelId = entry.getValue(); // 三级品类ID
+
+            if (threeLevelId == null) {
+                continue;
+            }
+
+            // 获取三级品类对象
+            ProductCategory threeLevelCategory = threeLevelCategoryMap.get(threeLevelId);
+            if (threeLevelCategory == null) {
+                continue;
+            }
+
+            // 构建内层名称Map
+            Map<String, String> categoryNameMap = new HashMap<>(3);
+            // 先存三级名称
+            categoryNameMap.put("threeLevelName", threeLevelCategory.getCategoryName());
+
+            // 解析ancestors,提取一/二级名称
+            String ancestors = threeLevelCategory.getAncestors();
+            if (ancestors != null && !ancestors.isEmpty()) {
+                String[] ancestorIds = ancestors.split(",");
+                if (ancestorIds.length >= 2) { // 至少有0和1(一级)
+                    try {
+                        Long oneLevelId = Long.parseLong(ancestorIds[1]); // 下标1是一级ID
+                        categoryNameMap.put("oneLevelName", parentCategoryNameMap.get(oneLevelId));
+                    } catch (Exception e) {
+                        categoryNameMap.put("oneLevelName", ""); // 兜底空值
+                    }
+                }
+                if (ancestorIds.length >= 3) { // 至少有0,1,2(二级)
+                    try {
+                        Long twoLevelId = Long.parseLong(ancestorIds[2]); // 下标2是二级ID
+                        categoryNameMap.put("twoLevelName", parentCategoryNameMap.get(twoLevelId));
+                    } catch (Exception e) {
+                        categoryNameMap.put("twoLevelName", ""); // 兜底空值
+                    }
+                }
+            }
+
+            resultMap.put(Id, categoryNameMap);
+        }
+
+        return resultMap;
+    }
+
+    @Override
+    public Map<Long, String> getCategoryNamebyIds(Set<Long> ids) {
+        Map<Long, String> categoryIdToNameMap = new HashMap<>();
+
+        List<ProductCategory> categoryList = categoryMapper.selectList(
+            new LambdaQueryWrapper<ProductCategory>()
+                .in(ProductCategory::getId, ids)
+                .select(ProductCategory::getId, ProductCategory::getCategoryName)
+        );
+        categoryIdToNameMap = categoryList.stream()
+            .collect(Collectors.toMap(ProductCategory::getId, ProductCategory::getCategoryName));
+
+        return categoryIdToNameMap;
+    }
+}

+ 21 - 13
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/ComStaffController.java

@@ -1,6 +1,7 @@
 package org.dromara.system.controller.system;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -59,25 +60,32 @@ public class ComStaffController extends BaseController {
         return comStaffService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询人眼信息列表,拼接用户号码和用户名
+     */
+    @GetMapping("/listSplice")
+    public R<Map<Long,String>> listSplice(){
+        List<ComStaff> list = comStaffService.list();
+
+        Map<Long, String> staffMap = list.stream().collect(Collectors.toMap(
+            ComStaff::getStaffId,
+            item -> item.getStaffCode() + "," + item.getStaffName())
+        );
+
+        return R.ok(staffMap);
+    }
+
+
+
     /**
      * 根据供应商ID查询客户经理和采购员
      *
      * @return
      */
     @GetMapping("/informationById")
-    public R<List<ComStaffVo>> informationById(@RequestParam Long supplierId) {
-            Set<Long> staffIds = remoteSupplierProcurementService.selectSupplierProcurementIds(supplierId);
-            List<ComStaff> list = comStaffService.lambdaQuery().in(ComStaff::getStaffId, staffIds).list();
-
-            // 使用Stream流只返回staffCode和staffName字段的VO对象
-            List<ComStaffVo> voList = list.stream().map(staff -> {
-                ComStaffVo vo = new ComStaffVo();
-                vo.setStaffCode(staff.getStaffCode());
-                vo.setStaffName(staff.getStaffName());
-                vo.setStaffId(staff.getStaffId());
-                return vo;
-            }).collect(Collectors.toList());
-            return R.ok(voList);
+    public R<Map<String, Long>> informationById(@RequestParam Long supplierId) {
+            Map<String,Long> staffIds = remoteSupplierProcurementService.selectSupplierProcurementIds(supplierId);
+            return R.ok(staffIds);
     }