tjxt 2 ماه پیش
والد
کامیت
8c4841a34e
38فایلهای تغییر یافته به همراه1755 افزوده شده و 69 حذف شده
  1. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteAddressAreaService.java
  2. 55 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/dto/AddressAreaDTO.java
  3. 2 1
      ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlatformDataScopeInterceptor.java
  4. 18 6
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierAuthorizeController.java
  5. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierContractController.java
  6. 2 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierInfoController.java
  7. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierQualificationController.java
  8. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/QualificationFile.java
  9. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierAuthorize.java
  10. 2 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierContract.java
  11. 96 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/SupplierQualification.java
  12. 3 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/QualificationFileBo.java
  13. 8 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierAuthorizeBo.java
  14. 32 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierContractBo.java
  15. 3 2
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierInfoBo.java
  16. 80 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierQualificationBo.java
  17. 5 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/SupplierapproveBo.java
  18. 2 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/QualificationFileVo.java
  19. 9 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierAuthorizeVo.java
  20. 47 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierContractVo.java
  21. 1 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierInfoVo.java
  22. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplierQualificationVo.java
  23. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/SupplierQualificationMapper.java
  24. 4 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierAuthorizeService.java
  25. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierQualificationService.java
  26. 382 45
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java
  27. 5 7
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java
  28. 141 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierQualificationServiceImpl.java
  29. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/SupplierQualificationMapper.xml
  30. 105 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/AuthorizeTypeLevelController.java
  31. 57 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/AuthorizeTypeLevel.java
  32. 44 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/AuthorizeTypeLevelBo.java
  33. 57 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/AuthorizeTypeLevelVo.java
  34. 41 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteAddressAreaServiceImpl.java
  35. 15 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AuthorizeTypeLevelMapper.java
  36. 70 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IAuthorizeTypeLevelService.java
  37. 135 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/AuthorizeTypeLevelServiceImpl.java
  38. 7 0
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/AuthorizeTypeLevelMapper.xml

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

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

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

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

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

@@ -84,7 +84,8 @@ public class PlatformDataScopeInterceptor implements Interceptor {
         "supplier_contact",
         "address_area",
         "supplier_",
-        "supply_area"
+        "supply_area",
+        "authorize_type_level"
 
 
 

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

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

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

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

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

@@ -127,7 +127,7 @@ public class SupplierInfoController extends BaseController {
     /**
      * 新增供应商信息
      */
-    @SaCheckPermission("customer:info:add")
+    //@SaCheckPermission("customer:info:add")
     @Log(title = "供应商信息", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -138,7 +138,7 @@ public class SupplierInfoController extends BaseController {
     /**
      * 修改供应商信息
      */
-    @SaCheckPermission("customer:info:edit")
+    //@SaCheckPermission("customer:info:edit")
     @Log(title = "供应商信息", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 4 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/ISupplierAuthorizeService.java

@@ -69,9 +69,12 @@ public interface ISupplierAuthorizeService extends IService<SupplierAuthorize>{
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
-    List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId);
+    List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId,PageQuery pageQuery);
+
+    List<SupplierAuthorizeVo> srmgetAuthorizeDetailList(SupplierAuthorizeBo  bo);
 
     TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery);
 
 
+    SupplierAuthorizeVo getBrandAuthorizeDetail(Long id);
 }

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

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

+ 382 - 45
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.customer.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -12,15 +13,19 @@ 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.QualificationFile;
 import org.dromara.customer.domain.SupplierInfo;
 import org.dromara.customer.domain.SupplyArea;
 import org.dromara.customer.domain.vo.SupplierContractVo;
 import org.dromara.customer.domain.vo.SupplyAreaVo;
+import org.dromara.customer.service.IQualificationFileService;
 import org.dromara.customer.service.ISupplierInfoService;
 import org.dromara.customer.service.ISupplyAreaService;
 import org.dromara.product.api.RemoteCategoryService;
 import org.dromara.product.api.RemoteProductService;
 import org.dromara.product.api.domain.RemoteProductBrand;
+import org.dromara.system.api.RemoteAddressAreaService;
+import org.dromara.system.api.domain.dto.AddressAreaDTO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
@@ -29,9 +34,12 @@ 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 org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -53,13 +61,168 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
 
     private final StringRedisTemplate stringRedisTemplate;
 
+    private final IQualificationFileService qualificationFileService;
+
     @DubboReference
     private final RemoteCategoryService remoteCategoryService;
 
     @DubboReference
     private final RemoteProductService remoteProductService;
 
-    private static final String SUPPLY_CAPACITY_KEY = "supply_capacity:";
+    @DubboReference
+    private final RemoteAddressAreaService remoteAddressAreaService;
+
+    // 日期格式化(yyyyMMdd)
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
+    // 序号Key前缀
+    private static final String SEQ_KEY_PREFIX = "supplier:authorize:seq:";
+    // 序号过期时间(1天,避免Redis冗余数据)
+    private static final long EXPIRE_DAYS = 1;
+
+
+    /**
+     * 新增供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否新增成功
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean insertByBo(SupplierAuthorizeBo bo) {
+        // 1. 校验入参
+        if (bo.getCategoryIds() == null || bo.getCategoryIds().isEmpty()) {
+            throw new RuntimeException("品类ID列表不能为空");
+        }
+        if (bo.getQualificationFiles() == null) {
+            throw new RuntimeException("资质文件不能为空");
+        }
+        Date endDate = bo.getQualificationFiles().stream()
+            .filter(file -> file.getEndTime() != null)
+            .map(QualificationFile::getEndTime)
+            .min(Date::compareTo)
+            .orElse(null);
+        // 2. 遍历categoryIds,逐个插入主表
+        List<QualificationFile> allFiles = new ArrayList<>();
+        List<Long> categoryIds = bo.getCategoryIds();
+        for (Long categoryId : categoryIds) {
+            // 核心变更:从Redis生成唯一授权单号(替代数据库查询)
+            String authorizeNo =generateAuthorizeNo();
+
+            // 构建主表数据
+            SupplierAuthorize save = new SupplierAuthorize();
+            BeanUtils.copyProperties(bo, save);
+            save.setAuthorizeNo(authorizeNo);
+            save.setCategoryId(categoryId);
+            save.setAuthorizationEndTime(endDate);
+            save.setAuthorizedStatus("0");
+
+            // 插入主表(MyBatis-Plus自动回填ID)
+            int insert = baseMapper.insert(save);
+            Long approveId = save.getId();
+
+            // 构建关联文件数据
+            for (QualificationFile file : bo.getQualificationFiles()) {
+                QualificationFile saveFile = new QualificationFile();
+                BeanUtils.copyProperties(file, saveFile);
+                saveFile.setAuthorizeId(approveId);
+                saveFile.setAuthorizeNo(authorizeNo);
+                allFiles.add(saveFile);
+            }
+        }
+
+        boolean flag = false;
+        if (!allFiles.isEmpty()) {
+            flag = qualificationFileService.saveBatch(allFiles);
+        }
+
+        return flag;
+    }
+
+    /**
+     * 修改供应能力查询
+     *
+     * @param bo 供应能力查询
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(SupplierAuthorizeBo bo) {
+        Date endDate = bo.getQualificationFiles().stream()
+            .filter(file -> file.getEndTime() != null)
+            .map(QualificationFile::getEndTime)
+            .min(Date::compareTo)
+            .orElse(null);
+
+        // 步骤1:删除该授权单下的旧资质文件(先删后加,避免文件冗余)
+        LambdaQueryWrapper<QualificationFile> fileWrapper = new LambdaQueryWrapper<>();
+        fileWrapper.eq(QualificationFile::getAuthorizeId, bo.getId());
+        qualificationFileService.remove(fileWrapper);
+
+        // 步骤2:更新授权单主表信息
+        SupplierAuthorize update = new SupplierAuthorize();
+        BeanUtils.copyProperties(bo, update);
+        update.setAuthorizationEndTime(endDate);
+        // 如需保留原有授权单号,注释下面这行;如需重新生成,放开
+        // update.setAuthorizeNo(generateAuthorizeNo());
+
+        int updateCount = baseMapper.updateById(update);
+        if (updateCount == 0) {
+            throw new RuntimeException("授权单不存在,修改失败");
+        }
+
+        // 步骤3:插入新的资质文件
+        List<QualificationFile> allFiles = new ArrayList<>();
+        Long approveId = bo.getId();
+        String authorizeNo = bo.getAuthorizeNo(); // 用原有授权单号
+        for (QualificationFile file : bo.getQualificationFiles()) {
+            QualificationFile saveFile = new QualificationFile();
+            BeanUtils.copyProperties(file, saveFile);
+            saveFile.setAuthorizeId(approveId);
+            saveFile.setAuthorizeNo(authorizeNo);
+            allFiles.add(saveFile);
+        }
+
+        // 批量插入新文件
+        boolean flag = false;
+        if (!allFiles.isEmpty()) {
+            flag = qualificationFileService.saveBatch(allFiles);
+        }
+        return flag;
+    }
+
+
+
+    /**
+     * 生成当日自增序号
+     * @return 当日序号(如1、2、3...)
+     */
+    public int generateDailySeq() {
+        // 1. 生成当日Key(如supplier:authorize:seq:20260127)
+        String dateStr = DATE_FORMAT.format(new Date());
+        String seqKey = SEQ_KEY_PREFIX + dateStr;
+
+        // 2. Redis原子自增(不存在则初始化为1)
+        Long seq = stringRedisTemplate.opsForValue().increment(seqKey, 1);
+        int currentSeq = seq.intValue();
+
+        // 3. 首次生成时设置过期时间(仅执行一次)
+        if (currentSeq == 1) {
+            stringRedisTemplate.expire(seqKey, EXPIRE_DAYS, TimeUnit.DAYS);
+        }
+
+        return currentSeq;
+    }
+
+    /**
+     * 生成完整授权单号(日期+5位补零序号)
+     * @return 如2026012700001
+     */
+    public String generateAuthorizeNo() {
+        String dateStr = DATE_FORMAT.format(new Date());
+        int seq = generateDailySeq();
+        // 5位补零(如1→00001,10→00010)
+        String seqStr = String.format("%05d", seq);
+        return dateStr + seqStr;
+    }
 
     /**
      * 查询供应能力查询
@@ -188,8 +351,42 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
         // 设置转换后的Vo列表
         voPage.setRecords(collect);
         return TableDataInfo.build(voPage);
+
+
+    }
+
+    @Override
+    public SupplierAuthorizeVo getBrandAuthorizeDetail(Long id) {
+        SupplierAuthorizeVo supplierAuthorizeVo = baseMapper.selectVoById(id);
+        if (supplierAuthorizeVo == null){
+            throw new RuntimeException("未找到授权信息");
+        }
+
+        setSupplyAreaInfoForSingle(supplierAuthorizeVo);
+
+        // 查询资质文件列表并赋值给VO
+        List<QualificationFile> qualificationFiles = qualificationFileService.list(
+            new LambdaQueryWrapper<QualificationFile>()
+                .eq(QualificationFile::getAuthorizeId, id)
+        );
+        supplierAuthorizeVo.setQualificationFiles(qualificationFiles);
+
+        // 查询一级二级三级产品分类
+        Long categoryId = supplierAuthorizeVo.getCategoryId();
+        if (categoryId != null) {
+            // 调用远程分类服务获取完整的分类信息
+            Map<String, String> categoryMap = remoteCategoryService.getallCategoryNameById(
+                Collections.singletonMap(supplierAuthorizeVo.getId(), categoryId)
+            ).get(supplierAuthorizeVo.getId());
+
+            if (categoryMap != null) {
+                supplierAuthorizeVo.setCategorysMap(categoryMap);
+            }
+        }
+        return supplierAuthorizeVo;
     }
 
+
     private Map<Long, String> supplierBrandMap(List<Long> ids){
         List<SupplierAuthorize> authorizeList = baseMapper.selectList(
             new LambdaQueryWrapper<SupplierAuthorize>()
@@ -309,35 +506,9 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
         return lqw;
     }
 
-    /**
-     * 新增供应能力查询
-     *
-     * @param bo 供应能力查询
-     * @return 是否新增成功
-     */
-    @Override
-    public Boolean insertByBo(SupplierAuthorizeBo bo) {
-        SupplierAuthorize add = MapstructUtils.convert(bo, SupplierAuthorize.class);
-        stringRedisTemplate.opsForValue().set(RedisConstants.SUPPLY_CAPACITY_KEY+add.getId(),add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag){
-            add.setId(add.getId());
-        }
-        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;
-    }
+
+
 
     /**
      * 保存前的数据校验
@@ -362,26 +533,17 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
     }
 
     @Override
-    public List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId) {
+    public List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId,PageQuery pageQuery) {
         LambdaQueryWrapper<SupplierAuthorize> lqw = new LambdaQueryWrapper<>();
         lqw.eq(SupplierAuthorize::getSupplierId, supplierId);
-        List<SupplierAuthorizeVo> supplierAuthorizeVos = baseMapper.selectVoList(lqw);
+        Page<SupplierAuthorize> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+        IPage<SupplierAuthorizeVo> supplierAuthorizePage = baseMapper.selectVoPage(page,lqw);
+        List<SupplierAuthorizeVo> supplierAuthorizeVos = supplierAuthorizePage.getRecords();
         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));
-        });
+        // 使用AddressAreaService查询地区信息
+        setSupplyAreaInfo(supplierAuthorizeVos);
+
         //一级 二级 三级 品目
         Map<Long,Long> categoryMap = supplierAuthorizeVos.stream()
             .filter(item -> item.getId() != null && item.getCategoryId() != null)
@@ -400,7 +562,182 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
         return supplierAuthorizeVos;
     }
 
+    @Override
+    public List<SupplierAuthorizeVo> srmgetAuthorizeDetailList(SupplierAuthorizeBo  bo) {
+        LambdaQueryWrapper<SupplierAuthorize> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SupplierAuthorize::getSupplierId, bo.getSupplierId());
+
+        // 核心:省/市查询条件(合并字段用AND匹配)
+        if (ObjectUtil.isNotEmpty(bo.getProvince()) || ObjectUtil.isNotEmpty(bo.getCity())) {
+            lqw.and(wrapper -> {
+                // 1. 省份查询
+                if (ObjectUtil.isNotEmpty(bo.getProvince())) {
+                    Long provinceId = remoteAddressAreaService.getIdsByName(bo.getProvince());
+                    if (provinceId != null) {
+                        wrapper.like(SupplierAuthorize::getAuthorizedArea, provinceId);
+                    }
+                }
+                // 2. 城市查询(和省份用AND关联,必须同时满足)
+                if (ObjectUtil.isNotEmpty(bo.getCity())) {
+                    Long cityId = remoteAddressAreaService.getIdsByName(bo.getCity());
+                    if (cityId != null) {
+                        wrapper.like(SupplierAuthorize::getAuthorizedArea, cityId);
+                    }
+                }
+            });
+        }
+
+
+        List<SupplierAuthorizeVo> supplierAuthorizeVos = baseMapper.selectVoList(lqw);
+        setSupplierNames(supplierAuthorizeVos);
+
+        // 使用AddressAreaService查询地区信息
+        setSupplyAreaInfo(supplierAuthorizeVos);
+
+        //一级 二级 三级 品目
+        Map<Long,Long> categoryMap = supplierAuthorizeVos.stream()
+            .filter(item -> item.getId() != null && item.getCategoryId() != null)
+            .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;
+    }
+
+    /**
+     * 使用AddressAreaService设置单个供应区域信息(省和市)- 优化版本
+     *
+     * @param supplierAuthorizeVo 授权详情对象
+     */
+    private void setSupplyAreaInfoForSingle(SupplierAuthorizeVo supplierAuthorizeVo) {
+        if (supplierAuthorizeVo == null || StringUtils.isBlank(supplierAuthorizeVo.getAuthorizedArea())) {
+            return;
+        }
+
+        // 解析地区ID字符串
+        String[] areaIds = supplierAuthorizeVo.getAuthorizedArea().split(",");
+
+        // 收集所有有效的地区ID
+        Set<Long> validAreaIds = new HashSet<>();
+        for (String areaIdStr : areaIds) {
+            try {
+                Long areaId = Long.parseLong(areaIdStr.trim());
+                if (areaId != null) {
+                    validAreaIds.add(areaId);
+                }
+            } catch (NumberFormatException e) {
+                // 忽略无效的ID格式
+                continue;
+            }
+        }
+
+        // 如果没有有效的地区ID,直接返回
+        if (validAreaIds.isEmpty()) {
+            supplierAuthorizeVo.setProvince("");
+            supplierAuthorizeVo.setCity("");
+            return;
+        }
+
+        // 批量查询所有地区信息 - 一次性远程调用
+        List<AddressAreaDTO> areas = remoteAddressAreaService.listByIds(validAreaIds);
+
+        // 按地区级别分类存储
+        Set<String> provinces = new HashSet<>();
+        Set<String> cities = new HashSet<>();
+
+        for (AddressAreaDTO area : areas) {
+            if (area != null && area.getLevel() != null) {
+                if (area.getLevel() == 1) { // 省级
+                    provinces.add(area.getAreaName());
+                } else if (area.getLevel() == 2) { // 市级
+                    cities.add(area.getAreaName());
+                }
+            }
+        }
+
+        // 设置省份和城市信息到VO对象
+        supplierAuthorizeVo.setProvince(String.join(",", provinces));
+        supplierAuthorizeVo.setCity(String.join(",", cities));
+    }
+
+    /**
+     * 使用AddressAreaService批量设置供应区域信息(省和市)
+     *
+     * @param supplierAuthorizeVos 授权详情列表
+     */
+    private void setSupplyAreaInfo(List<SupplierAuthorizeVo> supplierAuthorizeVos) {
+        if (supplierAuthorizeVos == null || supplierAuthorizeVos.isEmpty()) {
+            return;
+        }
+        // 收集所有需要查询的地区ID
+        Set<Long> allAreaIds = new HashSet<>();
+        for (SupplierAuthorizeVo item : supplierAuthorizeVos) {
+            if (StringUtils.isNotBlank(item.getAuthorizedArea())) {
+                String[] areaIds = item.getAuthorizedArea().split(",");
+                for (String areaIdStr : areaIds) {
+                    try {
+                        Long areaId = Long.parseLong(areaIdStr.trim());
+                        if (areaId != null) {
+                            allAreaIds.add(areaId);
+                        }
+                    } catch (NumberFormatException e) {
+                        // 忽略无效的ID格式
+                        continue;
+                    }
+                }
+            }
+        }
+        // 如果没有地区ID需要查询,直接返回
+        if (allAreaIds.isEmpty()) {
+            return;
+        }
+
+        // 批量查询地区信息
+        List<AddressAreaDTO> areas = remoteAddressAreaService.listByIds(allAreaIds);
+
+        // 按地区ID建立索引映射,提高查找效率
+        Map<Long, AddressAreaDTO> areaIndexMap = areas.stream()
+            .collect(Collectors.toMap(AddressAreaDTO::getId, area -> area, (existing, replacement) -> existing));
+
+        // 为每个授权项设置地区信息
+        for (SupplierAuthorizeVo item : supplierAuthorizeVos) {
+            if (StringUtils.isNotBlank(item.getAuthorizedArea())) {
+                String[] areaIds = item.getAuthorizedArea().split(",");
+
+                Set<String> provinces = new HashSet<>();
+                Set<String> cities = new HashSet<>();
 
+                for (String areaIdStr : areaIds) {
+                    try {
+                        Long areaId = Long.parseLong(areaIdStr.trim());
+                        if (areaId != null) {
+                            AddressAreaDTO area = areaIndexMap.get(areaId); // O(1) 查找
+                            if (area != null && area.getLevel() != null) {
+                                if (area.getLevel() == 1) { // 省级
+                                    provinces.add(area.getAreaName());
+                                } else if (area.getLevel() == 2) { // 市级
+                                    cities.add(area.getAreaName());
+                                }
+                            }
+                        }
+                    } catch (NumberFormatException e) {
+                        continue;
+                    }
+                }
+
+                item.setProvince(String.join(",", provinces));
+                item.setCity(String.join(",", cities));
+            }
+        }
+    }
 
     private void setSupplierNames(List<SupplierAuthorizeVo> records) {
         if (records == null || records.isEmpty()) {

+ 5 - 7
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java

@@ -450,7 +450,6 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
         supplierInfoVo.setEstablishmentDate(businessInfoVo.getEstablishmentDate());
         supplierInfoVo.setRegistrationStatus(businessInfoVo.getRegistrationStatus());
         supplierInfoVo.setRegistrationAuthority(businessInfoVo.getRegistrationAuthority());
-        supplierInfoVo.setBusinessLicense(businessInfoVo.getBusinessLicense());
         supplierInfoVo.setBusinessAddress(businessInfoVo.getBusinessAddress());
 
     }
@@ -935,10 +934,9 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
 
 
     private SupplierInfoVo handleProcurementInfo(SupplierInfoVo records) {
-        SupplierInfoVo targetVo = new SupplierInfoVo();
-        BeanUtils.copyProperties(records, targetVo, "otherCustomers");
+
             // 查询管理人员和采购人员
-            Long id = targetVo.getId();
+            Long id = records.getId();
             //查询供应地区
             LambdaQueryWrapper<SupplyArea> supplyProvinceAreaLqw = Wrappers.lambdaQuery();
             supplyProvinceAreaLqw.eq(SupplyArea::getSupplierId, id)
@@ -962,11 +960,11 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
                 .filter(Objects::nonNull)
                 .collect(Collectors.joining(","));
 
-        targetVo.setProvince(provinceNames);
-        targetVo.setCity(cityNames);
+        records.setProvince(provinceNames);
+        records.setCity(cityNames);
 
 
-        return targetVo;
+        return records;
     }
 
 

+ 141 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierQualificationServiceImpl.java

@@ -0,0 +1,141 @@
+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.SupplierQualificationBo;
+import org.dromara.customer.domain.vo.SupplierQualificationVo;
+import org.dromara.customer.domain.SupplierQualification;
+import org.dromara.customer.mapper.SupplierQualificationMapper;
+import org.dromara.customer.service.ISupplierQualificationService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 供应商资质信息Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class SupplierQualificationServiceImpl  extends ServiceImpl<SupplierQualificationMapper, SupplierQualification> implements ISupplierQualificationService {
+
+    private final SupplierQualificationMapper baseMapper;
+
+    /**
+     * 查询供应商资质信息
+     *
+     * @param id 主键
+     * @return 供应商资质信息
+     */
+    @Override
+    public SupplierQualificationVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询供应商资质信息列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应商资质信息分页列表
+     */
+    @Override
+    public TableDataInfo<SupplierQualificationVo> queryPageList(SupplierQualificationBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<SupplierQualification> lqw = buildQueryWrapper(bo);
+        Page<SupplierQualificationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的供应商资质信息列表
+     *
+     * @param bo 查询条件
+     * @return 供应商资质信息列表
+     */
+    @Override
+    public List<SupplierQualificationVo> queryList(SupplierQualificationBo bo) {
+        LambdaQueryWrapper<SupplierQualification> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<SupplierQualification> buildQueryWrapper(SupplierQualificationBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<SupplierQualification> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(SupplierQualification::getId);
+        lqw.like(StringUtils.isNotBlank(bo.getQualificationName()), SupplierQualification::getQualificationName, bo.getQualificationName());
+        lqw.eq(StringUtils.isNotBlank(bo.getQualificationLevel()), SupplierQualification::getQualificationLevel, bo.getQualificationLevel());
+        lqw.eq(StringUtils.isNotBlank(bo.getCertificateNo()), SupplierQualification::getCertificateNo, bo.getCertificateNo());
+        lqw.eq(StringUtils.isNotBlank(bo.getIssuingAuthority()), SupplierQualification::getIssuingAuthority, bo.getIssuingAuthority());
+        lqw.eq(bo.getStartDate() != null, SupplierQualification::getStartDate, bo.getStartDate());
+        lqw.eq(bo.getEndDate() != null, SupplierQualification::getEndDate, bo.getEndDate());
+        lqw.eq(bo.getIsLongValid() != null, SupplierQualification::getIsLongValid, bo.getIsLongValid());
+        lqw.eq(StringUtils.isNotBlank(bo.getAttachmentUrl()), SupplierQualification::getAttachmentUrl, bo.getAttachmentUrl());
+        lqw.like(StringUtils.isNotBlank(bo.getAttachmentName()), SupplierQualification::getAttachmentName, bo.getAttachmentName());
+        return lqw;
+    }
+
+    /**
+     * 新增供应商资质信息
+     *
+     * @param bo 供应商资质信息
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(SupplierQualificationBo bo) {
+        SupplierQualification add = MapstructUtils.convert(bo, SupplierQualification.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改供应商资质信息
+     *
+     * @param bo 供应商资质信息
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(SupplierQualificationBo bo) {
+        SupplierQualification update = MapstructUtils.convert(bo, SupplierQualification.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(SupplierQualification 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/SupplierQualificationMapper.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.SupplierQualificationMapper">
+
+</mapper>

+ 105 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/AuthorizeTypeLevelController.java

@@ -0,0 +1,105 @@
+package org.dromara.system.controller.system;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+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.system.domain.vo.AuthorizeTypeLevelVo;
+import org.dromara.system.domain.bo.AuthorizeTypeLevelBo;
+import org.dromara.system.service.IAuthorizeTypeLevelService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 供应商授权等级和授权类型
+ * 前端访问路由地址为:/system/authorizetypeLevel
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/authorizetypeLevel")
+public class AuthorizeTypeLevelController extends BaseController {
+
+    private final IAuthorizeTypeLevelService authorizeTypeLevelService;
+
+    /**
+     * 查询供应商授权等级和授权类型列表
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:list")
+    @GetMapping("/list")
+    public TableDataInfo<AuthorizeTypeLevelVo> list(AuthorizeTypeLevelBo bo, PageQuery pageQuery) {
+        return authorizeTypeLevelService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出供应商授权等级和授权类型列表
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:export")
+    @Log(title = "供应商授权等级和授权类型", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(AuthorizeTypeLevelBo bo, HttpServletResponse response) {
+        List<AuthorizeTypeLevelVo> list = authorizeTypeLevelService.queryList(bo);
+        ExcelUtil.exportExcel(list, "供应商授权等级和授权类型", AuthorizeTypeLevelVo.class, response);
+    }
+
+    /**
+     * 获取供应商授权等级和授权类型详细信息
+     *
+     * @param id 主键
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:query")
+    @GetMapping("/{id}")
+    public R<AuthorizeTypeLevelVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable("id") Long id) {
+        return R.ok(authorizeTypeLevelService.queryById(id));
+    }
+
+    /**
+     * 新增供应商授权等级和授权类型
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:add")
+    @Log(title = "供应商授权等级和授权类型", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody AuthorizeTypeLevelBo bo) {
+        return toAjax(authorizeTypeLevelService.insertByBo(bo));
+    }
+
+    /**
+     * 修改供应商授权等级和授权类型
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:edit")
+    @Log(title = "供应商授权等级和授权类型", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody AuthorizeTypeLevelBo bo) {
+        return toAjax(authorizeTypeLevelService.updateByBo(bo));
+    }
+
+    /**
+     * 删除供应商授权等级和授权类型
+     *
+     * @param ids 主键串
+     */
+    //@SaCheckPermission("system:authorizetypeLevel:remove")
+    @Log(title = "供应商授权等级和授权类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable("ids") Long[] ids) {
+        return toAjax(authorizeTypeLevelService.deleteWithValidByIds(List.of(ids), true));
+    }
+}

+ 57 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/AuthorizeTypeLevel.java

@@ -0,0 +1,57 @@
+package org.dromara.system.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 供应商授权等级和授权类型对象 authorize_type_level
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("authorize_type_level")
+public class AuthorizeTypeLevel extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 授权类型
+     */
+    private String authorizeType;
+
+    /**
+     * 授权等级
+     */
+    private Long authorizeLevel;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 44 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/AuthorizeTypeLevelBo.java

@@ -0,0 +1,44 @@
+package org.dromara.system.domain.bo;
+
+import org.dromara.system.domain.AuthorizeTypeLevel;
+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.*;
+
+/**
+ * 供应商授权等级和授权类型业务对象 authorize_type_level
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AuthorizeTypeLevel.class, reverseConvertGenerate = false)
+public class AuthorizeTypeLevelBo extends BaseEntity {
+
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 授权类型
+     */
+    private String authorizeType;
+
+    /**
+     * 授权等级
+     */
+    private Long authorizeLevel;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+
+}

+ 57 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/AuthorizeTypeLevelVo.java

@@ -0,0 +1,57 @@
+package org.dromara.system.domain.vo;
+
+import org.dromara.system.domain.AuthorizeTypeLevel;
+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;
+
+
+
+/**
+ * 供应商授权等级和授权类型视图对象 authorize_type_level
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = AuthorizeTypeLevel.class)
+public class AuthorizeTypeLevelVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ExcelProperty(value = "ID")
+    private Long id;
+
+    /**
+     * 授权类型
+     */
+    @ExcelProperty(value = "授权类型")
+    private String authorizeType;
+
+    /**
+     * 授权等级
+     */
+    @ExcelProperty(value = "授权等级")
+    private Long authorizeLevel;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+
+}

+ 41 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteAddressAreaServiceImpl.java

@@ -0,0 +1,41 @@
+package org.dromara.system.dubbo;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.system.api.RemoteAddressAreaService;
+import org.dromara.system.api.domain.dto.AddressAreaDTO;
+import org.dromara.system.domain.AddressArea;
+import org.dromara.system.service.IAddressAreaService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * author
+ * 时间:2026/1/27,14:14
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteAddressAreaServiceImpl implements RemoteAddressAreaService {
+
+    private final IAddressAreaService addressAreaService;
+    @Override
+    public List<AddressAreaDTO> listByIds(Set<Long> allAreaIds) {
+        return addressAreaService.listByIds(allAreaIds).stream().map(item -> {
+            AddressAreaDTO addressAreaDTO = new AddressAreaDTO();
+            addressAreaDTO.setId(item.getId());
+            addressAreaDTO.setAreaName(item.getAreaName());
+            addressAreaDTO.setLevel(item.getLevel());
+            addressAreaDTO.setParentCode(item.getParentCode());
+            return addressAreaDTO;
+        }).toList();
+    }
+
+    @Override
+    public Long getIdsByName(String province) {
+        AddressArea one = addressAreaService.lambdaQuery().eq(AddressArea::getAreaName, province).select(AddressArea::getId).one();
+        return one == null ? 0L : one.getId();
+    }
+}

+ 15 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/AuthorizeTypeLevelMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.system.mapper;
+
+import org.dromara.system.domain.AuthorizeTypeLevel;
+import org.dromara.system.domain.vo.AuthorizeTypeLevelVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 供应商授权等级和授权类型Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+public interface AuthorizeTypeLevelMapper extends BaseMapperPlus<AuthorizeTypeLevel, AuthorizeTypeLevelVo> {
+
+}

+ 70 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IAuthorizeTypeLevelService.java

@@ -0,0 +1,70 @@
+package org.dromara.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.dromara.system.domain.AuthorizeTypeLevel;
+import org.dromara.system.domain.vo.AuthorizeTypeLevelVo;
+import org.dromara.system.domain.bo.AuthorizeTypeLevelBo;
+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-27
+ */
+public interface IAuthorizeTypeLevelService extends IService<AuthorizeTypeLevel>{
+
+    /**
+     * 查询供应商授权等级和授权类型
+     *
+     * @param id 主键
+     * @return 供应商授权等级和授权类型
+     */
+    AuthorizeTypeLevelVo queryById(Long id);
+
+    /**
+     * 分页查询供应商授权等级和授权类型列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应商授权等级和授权类型分页列表
+     */
+    TableDataInfo<AuthorizeTypeLevelVo> queryPageList(AuthorizeTypeLevelBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的供应商授权等级和授权类型列表
+     *
+     * @param bo 查询条件
+     * @return 供应商授权等级和授权类型列表
+     */
+    List<AuthorizeTypeLevelVo> queryList(AuthorizeTypeLevelBo bo);
+
+    /**
+     * 新增供应商授权等级和授权类型
+     *
+     * @param bo 供应商授权等级和授权类型
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(AuthorizeTypeLevelBo bo);
+
+    /**
+     * 修改供应商授权等级和授权类型
+     *
+     * @param bo 供应商授权等级和授权类型
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(AuthorizeTypeLevelBo bo);
+
+    /**
+     * 校验并批量删除供应商授权等级和授权类型信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 135 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/AuthorizeTypeLevelServiceImpl.java

@@ -0,0 +1,135 @@
+package org.dromara.system.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.system.domain.bo.AuthorizeTypeLevelBo;
+import org.dromara.system.domain.vo.AuthorizeTypeLevelVo;
+import org.dromara.system.domain.AuthorizeTypeLevel;
+import org.dromara.system.mapper.AuthorizeTypeLevelMapper;
+import org.dromara.system.service.IAuthorizeTypeLevelService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 供应商授权等级和授权类型Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-01-27
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class AuthorizeTypeLevelServiceImpl  extends ServiceImpl<AuthorizeTypeLevelMapper, AuthorizeTypeLevel> implements IAuthorizeTypeLevelService {
+
+    private final AuthorizeTypeLevelMapper baseMapper;
+
+    /**
+     * 查询供应商授权等级和授权类型
+     *
+     * @param id 主键
+     * @return 供应商授权等级和授权类型
+     */
+    @Override
+    public AuthorizeTypeLevelVo queryById(Long id){
+        return baseMapper.selectVoById(id);
+    }
+
+    /**
+     * 分页查询供应商授权等级和授权类型列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 供应商授权等级和授权类型分页列表
+     */
+    @Override
+    public TableDataInfo<AuthorizeTypeLevelVo> queryPageList(AuthorizeTypeLevelBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<AuthorizeTypeLevel> lqw = buildQueryWrapper(bo);
+        Page<AuthorizeTypeLevelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的供应商授权等级和授权类型列表
+     *
+     * @param bo 查询条件
+     * @return 供应商授权等级和授权类型列表
+     */
+    @Override
+    public List<AuthorizeTypeLevelVo> queryList(AuthorizeTypeLevelBo bo) {
+        LambdaQueryWrapper<AuthorizeTypeLevel> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<AuthorizeTypeLevel> buildQueryWrapper(AuthorizeTypeLevelBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<AuthorizeTypeLevel> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(AuthorizeTypeLevel::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getAuthorizeType()), AuthorizeTypeLevel::getAuthorizeType, bo.getAuthorizeType());
+        lqw.eq(bo.getAuthorizeLevel() != null, AuthorizeTypeLevel::getAuthorizeLevel, bo.getAuthorizeLevel());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), AuthorizeTypeLevel::getStatus, bo.getStatus());
+        return lqw;
+    }
+
+    /**
+     * 新增供应商授权等级和授权类型
+     *
+     * @param bo 供应商授权等级和授权类型
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(AuthorizeTypeLevelBo bo) {
+        AuthorizeTypeLevel add = MapstructUtils.convert(bo, AuthorizeTypeLevel.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改供应商授权等级和授权类型
+     *
+     * @param bo 供应商授权等级和授权类型
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(AuthorizeTypeLevelBo bo) {
+        AuthorizeTypeLevel update = MapstructUtils.convert(bo, AuthorizeTypeLevel.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(AuthorizeTypeLevel 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-system/src/main/resources/mapper/system/AuthorizeTypeLevelMapper.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.system.mapper.AuthorizeTypeLevelMapper">
+
+</mapper>