Quellcode durchsuchen

feat(customer): 添加伙伴商地址管理功能

- 创建伙伴商地址实体类、业务对象和视图对象
- 实现伙伴商地址的增删改查和分页查询功能
- 添加伙伴商地址控制器提供REST API接口
- 实现地址类型的枚举转换和字典格式化
- 集成Redis自增生成地址编码功能
- 优化供应商信息更新逻辑和事务处理
- 统一异常处理使用ServiceException替换RuntimeException
Lijingyang vor 1 Monat
Ursprung
Commit
b207893714
17 geänderte Dateien mit 1100 neuen und 36 gelöschten Zeilen
  1. 1 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  2. 106 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/PartnerAddressController.java
  3. 0 5
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplierInfoController.java
  4. 0 3
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/SupplyAreaController.java
  5. 117 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerAddress.java
  6. 109 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerAddressBo.java
  7. 140 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerAddressVo.java
  8. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/SupplyAreaJsonVo.java
  9. 9 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/enums/SupplierStatusEnum.java
  10. 15 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/mapper/PartnerAddressMapper.java
  11. 70 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/IPartnerAddressService.java
  12. 242 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerAddressServiceImpl.java
  13. 1 1
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAuthorizeServiceImpl.java
  14. 266 15
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java
  15. 14 8
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplyAreaServiceImpl.java
  16. 7 0
      ruoyi-modules/ruoyi-customer/src/main/resources/mapper/customer/PartnerAddressMapper.xml
  17. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

+ 1 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -192,7 +192,7 @@ public interface RemoteUserService {
     /**
      * 新增用户
      */
-    Long addUser(RemoteUserBo remoteUserBo);
+    Long addUser(RemoteUserBo remoteUserBo) throws ServiceException;
 
     /**
     * 编辑用户

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

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

@@ -154,11 +154,6 @@ public class SupplierInfoController extends BaseController {
         return R.ok(supplierInfoService.querySrmById(id));
     }
 
-
-
-
-
-
     /**
      * 新增供应商信息
      */

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

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

+ 117 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/PartnerAddress.java

@@ -0,0 +1,117 @@
+package org.dromara.customer.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 伙伴商地址对象 partner_address
+ *
+ * @author LionLi
+ * @date 2026-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("partner_address")
+public class PartnerAddress extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 伙伴商编号
+     */
+    private String partnerNo;
+
+    /**
+     * 伙伴商ID
+     */
+    private Long partnerId;
+
+    /**
+     * 配送公司名称
+     */
+    private String shippingCompany;
+
+    /**
+     * 发货人姓名
+     */
+    private String shipperName;
+
+    /**
+     * 发货人电话
+     */
+    private String shipperPhone;
+
+    /**
+     * 邮政编码
+     */
+    private String shippingPostCode;
+
+    /**
+     * 省
+     */
+    private String shippingProvincial;
+
+    /**
+     * 市
+     */
+    private String shippingCity;
+
+    /**
+     * 区/县
+     */
+    private String shippingCounty;
+
+    /**
+     * 详细地址
+     */
+    private String shippingAddress;
+
+    /**
+     * 推送状态(例如:0-未推送, 1-已推送, 16-推送失败)
+     */
+    private String pushStatus;
+
+    /**
+     * 是否为自身地址(1-是, 0-否)
+     */
+    private String isSelf;
+
+    /**
+     * 地址类型(1-注册地址, 2-经营地址, 3-发货地址)
+     */
+    private String type;
+
+    /**
+     * 地址编码
+     */
+    private String addressNo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 109 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/bo/PartnerAddressBo.java

@@ -0,0 +1,109 @@
+package org.dromara.customer.domain.bo;
+
+import org.dromara.customer.domain.PartnerAddress;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 伙伴商地址业务对象 partner_address
+ *
+ * @author LionLi
+ * @date 2026-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PartnerAddress.class, reverseConvertGenerate = false)
+public class PartnerAddressBo extends BaseEntity {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 伙伴商编号
+     */
+    private String partnerNo;
+
+    /**
+     * 伙伴商ID
+     */
+    private Long partnerId;
+
+    /**
+     * 配送公司名称
+     */
+    private String shippingCompany;
+
+    /**
+     * 发货人姓名
+     */
+    private String shipperName;
+
+    /**
+     * 发货人电话
+     */
+    private String shipperPhone;
+
+    /**
+     * 邮政编码
+     */
+    private String shippingPostCode;
+
+    /**
+     * 省
+     */
+    private String shippingProvincial;
+
+    /**
+     * 市
+     */
+    private String shippingCity;
+
+    /**
+     * 区/县
+     */
+    private String shippingCounty;
+
+    /**
+     * 详细地址
+     */
+    private String shippingAddress;
+
+    /**
+     * 推送状态(例如:0-未推送, 1-已推送, 16-推送失败)
+     */
+    private String pushStatus;
+
+    /**
+     * 是否为自身地址(1-是, 0-否)
+     */
+    private String isSelf;
+
+    /**
+     * 地址类型(1-注册地址, 2-经营地址, 3-发货地址)
+     */
+    private String type;
+
+    /**
+     * 地址编码
+     */
+    private String addressNo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 140 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/domain/vo/PartnerAddressVo.java

@@ -0,0 +1,140 @@
+package org.dromara.customer.domain.vo;
+
+import org.dromara.customer.domain.PartnerAddress;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 伙伴商地址视图对象 partner_address
+ *
+ * @author LionLi
+ * @date 2026-03-10
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PartnerAddress.class)
+public class PartnerAddressVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 伙伴商编号
+     */
+    @ExcelProperty(value = "伙伴商编号")
+    private String partnerNo;
+
+    /**
+     * 伙伴商ID
+     */
+    @ExcelProperty(value = "伙伴商ID")
+    private Long partnerId;
+
+    /**
+     * 配送公司名称
+     */
+    @ExcelProperty(value = "配送公司名称")
+    private String shippingCompany;
+
+    /**
+     * 发货人姓名
+     */
+    @ExcelProperty(value = "发货人姓名")
+    private String shipperName;
+
+    /**
+     * 发货人电话
+     */
+    @ExcelProperty(value = "发货人电话")
+    private String shipperPhone;
+
+    /**
+     * 邮政编码
+     */
+    @ExcelProperty(value = "邮政编码")
+    private String shippingPostCode;
+
+    /**
+     * 省
+     */
+    @ExcelProperty(value = "省")
+    private String shippingProvincial;
+
+    /**
+     * 市
+     */
+    @ExcelProperty(value = "市")
+    private String shippingCity;
+
+    /**
+     * 区/县
+     */
+    @ExcelProperty(value = "区/县")
+    private String shippingCounty;
+
+    /**
+     * 详细地址
+     */
+    @ExcelProperty(value = "详细地址")
+    private String shippingAddress;
+
+    /**
+     * 推送状态(例如:0-未推送, 1-已推送, 16-推送失败)
+     */
+    @ExcelProperty(value = "推送状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "例=如:0-未推送,,1=-已推送,,1=6-推送失败")
+    private String pushStatus;
+
+    /**
+     * 是否为自身地址(1-是, 0-否)
+     */
+    @ExcelProperty(value = "是否为自身地址", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1=-是,,0=-否")
+    private String isSelf;
+
+    /**
+     * 地址类型(1-注册地址, 2-经营地址, 3-发货地址)
+     */
+    @ExcelProperty(value = "地址类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "1=-注册地址,,2=-经营地址,,3=-发货地址")
+    private String type;
+
+    /**
+     * 地址编码
+     */
+    @ExcelProperty(value = "地址编码")
+    private String addressNo;
+
+    /**
+     * 状态(0正常 1停用)
+     */
+    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=正常,1=停用")
+    private String status;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    private String partnerName;
+
+
+}

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

@@ -14,7 +14,7 @@ public class SupplyAreaJsonVo {
     // 供应商ID
     private Long supplierId;
     // 区域编码
-    private String areaId;
+    private Long areaId;
     // 区域名称
     private String areaName;
     // 父级编码

+ 9 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/enums/SupplierStatusEnum.java

@@ -51,6 +51,15 @@ public enum SupplierStatusEnum {
         return "未知状态";
     }
 
+    public static SupplierStatusEnum getByCode(Long code) {
+        for (SupplierStatusEnum status : values()) {
+            if (status.getCode().equals(code)) {
+                return status;
+            }
+        }
+        return null;
+    }
+
     // getter方法
     public Long getCode() {
         return code;

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

@@ -0,0 +1,15 @@
+package org.dromara.customer.mapper;
+
+import org.dromara.customer.domain.PartnerAddress;
+import org.dromara.customer.domain.vo.PartnerAddressVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 伙伴商地址Mapper接口
+ *
+ * @author LionLi
+ * @date 2026-03-10
+ */
+public interface PartnerAddressMapper extends BaseMapperPlus<PartnerAddress, PartnerAddressVo> {
+
+}

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

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

+ 242 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/PartnerAddressServiceImpl.java

@@ -0,0 +1,242 @@
+package org.dromara.customer.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.dromara.customer.domain.SupplierAddress;
+import org.dromara.customer.domain.vo.PartnerInfoVo;
+import org.dromara.customer.mapper.PartnerInfoMapper;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import org.dromara.customer.domain.vo.PartnerAddressVo;
+import org.dromara.customer.domain.PartnerAddress;
+import org.dromara.customer.mapper.PartnerAddressMapper;
+import org.dromara.customer.service.IPartnerAddressService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.dromara.customer.domain.PartnerInfo;
+import org.dromara.customer.domain.bo.PartnerAddressBo;
+
+/**
+ * 伙伴商地址Service业务层处理
+ *
+ * @author LionLi
+ * @date 2026-03-10
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class PartnerAddressServiceImpl  extends ServiceImpl<PartnerAddressMapper, PartnerAddress> implements IPartnerAddressService {
+
+    private final PartnerAddressMapper baseMapper;
+
+    private final PartnerInfoMapper partnerInfoMapper;
+
+    private final StringRedisTemplate stringRedisTemplate;
+
+    /**
+     * 查询伙伴商地址
+     *
+     * @param id 主键
+     * @return 伙伴商地址
+     */
+    @Override
+    public PartnerAddressVo queryById(Long id){
+        PartnerAddressVo partnerAddressVo = baseMapper.selectVoById(id);
+       if (partnerAddressVo != null && partnerAddressVo.getPartnerId() != null) {
+            // 根据 partnerId 查询伙伴商名称
+            PartnerInfoVo partnerInfoVo = partnerInfoMapper.selectVoById(partnerAddressVo.getPartnerId());
+           if (partnerInfoVo != null) {
+                partnerAddressVo.setPartnerName(partnerInfoVo.getPartnerName());
+            }
+        }
+        return partnerAddressVo;
+    }
+
+    /**
+     * 分页查询伙伴商地址列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 伙伴商地址分页列表
+     */
+    @Override
+    public TableDataInfo<PartnerAddressVo> queryPageList(PartnerAddressBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PartnerAddress> lqw = buildQueryWrapper(bo);
+        Page<PartnerAddressVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<PartnerAddressVo> records = result.getRecords();
+        // 批量处理伙伴商名称
+        batchSetPartnerName(records);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的伙伴商地址列表
+     *
+     * @param bo 查询条件
+     * @return 伙伴商地址列表
+     */
+    @Override
+    public List<PartnerAddressVo> queryList(PartnerAddressBo bo) {
+        LambdaQueryWrapper<PartnerAddress> lqw = buildQueryWrapper(bo);
+        List<PartnerAddressVo> records = baseMapper.selectVoList(lqw);
+
+        // 批量处理伙伴商名称
+        batchSetPartnerName(records);
+
+        return records;
+    }
+
+    private LambdaQueryWrapper<PartnerAddress> buildQueryWrapper(PartnerAddressBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PartnerAddress> lqw = Wrappers.lambdaQuery();
+        lqw.orderByAsc(PartnerAddress::getId);
+        lqw.eq(StringUtils.isNotBlank(bo.getPartnerNo()), PartnerAddress::getPartnerNo, bo.getPartnerNo());
+        return lqw;
+    }
+
+    /**
+     * 新增伙伴商地址
+     *
+     * @param bo 伙伴商地址
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PartnerAddressBo bo) {
+        PartnerAddress add = MapstructUtils.convert(bo, PartnerAddress.class);
+        validEntityBeforeSave(add);
+        // 如果设置为自身地址
+        if ("1".equals(add.getIsSelf())) {
+            // 把该供应商下其他地址全部改为0
+            LambdaUpdateWrapper<PartnerAddress> updateWrapper = Wrappers.lambdaUpdate();
+            updateWrapper.eq(PartnerAddress::getPartnerId, add.getPartnerId())
+                .set(PartnerAddress::getIsSelf, "0");
+            baseMapper.update(null, updateWrapper);
+        }
+        add.setAddressNo(generateAddressNo());
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setId(add.getId());
+        }
+        return flag;
+    }
+
+    private String generateAddressNo() {
+
+        String key = "partner:address:no:";
+
+        // Redis自增
+        Long num = stringRedisTemplate.opsForValue().increment(key);
+
+        // 从1开始
+        if (num == null) {
+            num = 1L;
+        }
+
+        // 格式化 000 001 002
+        return String.format("%03d", num);
+    }
+
+    /**
+     * 修改伙伴商地址
+     *
+     * @param bo 伙伴商地址
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PartnerAddressBo bo) {
+        PartnerAddress update = MapstructUtils.convert(bo, PartnerAddress.class);
+        validEntityBeforeSave(update);
+        if ("1".equals(update.getIsSelf())) {
+
+            LambdaUpdateWrapper<PartnerAddress> updateWrapper = Wrappers.lambdaUpdate();
+            updateWrapper.eq(PartnerAddress::getPartnerId, update.getPartnerId())
+                .ne(PartnerAddress::getId, update.getId()) // 排除自己
+                .set(PartnerAddress::getIsSelf, "0");
+
+            baseMapper.update(null, updateWrapper);
+        }
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PartnerAddress entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除伙伴商地址信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+       if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    /**
+     * 批量设置伙伴商名称
+     *
+     * @param records 伙伴商地址列表
+     */
+    private void batchSetPartnerName(List<PartnerAddressVo> records) {
+       if (records == null || records.isEmpty()) {
+            return;
+        }
+
+        // 1. 收集所有有效的 partnerId
+        Set<Long> partnerIds = records.stream()
+            .map(PartnerAddressVo::getPartnerId)
+            .filter(id -> id != null)
+            .collect(Collectors.toSet());
+
+       if (partnerIds.isEmpty()) {
+            return;
+        }
+
+        // 2. 批量查询伙伴商信息
+        LambdaQueryWrapper<PartnerInfo> wrapper = Wrappers.lambdaQuery();
+        wrapper.in(PartnerInfo::getId, partnerIds)
+            .select(PartnerInfo::getId, PartnerInfo::getPartnerName, PartnerInfo::getPartnerNo);
+        List<PartnerInfo> partnerInfos = partnerInfoMapper.selectList(wrapper);
+
+        // 3. 构建 partnerId -> partnerName 映射
+        Map<Long, String> partnerIdToNameMap = partnerInfos.stream()
+            .collect(Collectors.toMap(
+                PartnerInfo::getId,
+                PartnerInfo::getPartnerName,
+                (existing, replacement) -> existing
+            ));
+
+        // 4. 赋值
+        for (PartnerAddressVo record : records) {
+            Long partnerId = record.getPartnerId();
+           if (partnerId != null) {
+               String partnerName = partnerIdToNameMap.get(partnerId);
+                record.setPartnerName(partnerName != null ? partnerName : "");
+            } else {
+                record.setPartnerName("");
+            }
+        }
+    }
+}

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

@@ -94,7 +94,7 @@ public class SupplierAuthorizeServiceImpl  extends ServiceImpl<SupplierAuthorize
         if (bo.getCategoryIds() == null || bo.getCategoryIds().isEmpty()) {
             throw new ServiceException("品类ID列表不能为空");
         }
-        if (bo.getQualificationFiles() == null) {
+        if (bo.getQualificationFiles() == null || bo.getQualificationFiles().isEmpty()) {
             throw new ServiceException("资质文件不能为空");
         }
         Date endDate = bo.getQualificationFiles().stream()

+ 266 - 15
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierInfoServiceImpl.java

@@ -53,6 +53,7 @@ import org.dromara.customer.domain.bo.SupplierInfoBo;
 import org.dromara.customer.domain.vo.SupplierInfoVo;
 import org.dromara.customer.domain.SupplierInfo;
 import org.dromara.customer.mapper.SupplierInfoMapper;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
@@ -352,15 +353,23 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
         return baseMapper.updateById(update) > 0;
     }
 
-    @Override
+    /*@Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean srmUpdateByBo(SupplierInfoBo bo) throws JsonProcessingException {
         Long id = bo.getId();
         SupplierInfo supplierInfo = baseMapper.selectById(id);
         //如果是待审核和审核不通过 随便改
-        if (bo.getSupplyStatus() == SupplierStatusEnum.PENDING_REVIEW.getCode() || bo.getSupplyStatus() == SupplierStatusEnum.REVIEW_FAILED.getCode()){
+        if (supplierInfo.getSupplyStatus() == SupplierStatusEnum.PENDING_REVIEW.getCode()){
             SupplierInfo update = MapstructUtils.convert(bo, SupplierInfo.class);
             return baseMapper.updateById(update) > 0;
         }
+        //如果是待审核和审核不通过 随便改
+        if (supplierInfo.getSupplyStatus() == SupplierStatusEnum.REVIEW_FAILED.getCode()){
+            SupplierInfo update = MapstructUtils.convert(bo, SupplierInfo.class);
+            update.setSupplyStatus(SupplierStatusEnum.PENDING_REVIEW.getCode());
+            return baseMapper.updateById(update) > 0;
+        }
+
         //如果是启用状态,就变成待修改审核状态
         if (supplierInfo.getSupplyStatus() == SupplierStatusEnum.OFFICIAL_SUPPLIER.getCode()){
             SupplierInfoTemporary supplierInfoTemporary = supplierInfoTemporaryService.querBySupplierId(id);
@@ -379,32 +388,84 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
                 supplierInfoTemporary.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
                 boolean save = supplierInfoTemporaryService.save(supplierInfoTemporary);
                 if (save == false){
-                    throw new RuntimeException("保存供应商待审核数据失败");
+                    throw new ServiceException("保存供应商待审核数据失败");
                 }
-
             }
             //一共三个地方
             boolean flag =false;
             //1.简称
             if (bo.getShortName() != null && StringUtils.isNotBlank(bo.getShortName())){
                 supplierInfoTemporary.setShortName(bo.getShortName());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             }
+            //工商地址
+            if (ObjectUtil.isNotEmpty(bo.getBusinessName())){
+                supplierInfoTemporary.setBusinessName(bo.getBusinessName());
+            }
+            //企业规模
+            if (ObjectUtil.isNotEmpty(bo.getMembershipSize())){
+                supplierInfoTemporary.setMembershipSize(bo.getMembershipSize());
+            }
+            //固定电话
+            if (ObjectUtil.isNotEmpty(bo.getFixedPhone())){
+                supplierInfoTemporary.setFixedPhone(bo.getFixedPhone());
+            }
+            //传真
+            if (ObjectUtil.isNotEmpty(bo.getFax())){
+                supplierInfoTemporary.setFax(bo.getFax());
+            }
+            //企业邮箱
+            if (ObjectUtil.isNotEmpty(bo.getMailbox())){
+                supplierInfoTemporary.setMailbox(bo.getMailbox());
+            }
+            //邮政编码
+            if (ObjectUtil.isNotEmpty(bo.getPostCode())){
+                supplierInfoTemporary.setPostCode(bo.getPostCode());
+            }
+            //网址
+            if (ObjectUtil.isNotEmpty(bo.getUrl())){
+                supplierInfoTemporary.setUrl(bo.getUrl());
+            }
+            //详细地址
+            if (ObjectUtil.isNotEmpty(bo.getOfficeProvince())){
+                supplierInfoTemporary.setOfficeProvince(bo.getOfficeProvince());
+            }
+
+            if (ObjectUtil.isNotEmpty(bo.getOfficeCity())){
+                supplierInfoTemporary.setOfficeCity(bo.getOfficeCity());
+            }
+
+            if (ObjectUtil.isNotEmpty(bo.getOfficeCounty())){
+                supplierInfoTemporary.setOfficeCounty(bo.getOfficeCounty());
+            }
+            if (ObjectUtil.isNotEmpty(bo.getOfficeAddress())){
+                supplierInfoTemporary.setOfficeAddress(bo.getOfficeAddress());
+            }
+
+            //营业执照
+            if (ObjectUtil.isNotEmpty(bo.getBusinessLicense())){
+                supplierInfoTemporary.setBusinessLicense(bo.getBusinessLicense());
+            }
+
+            //法人身份证
+            if (ObjectUtil.isNotEmpty(bo.getPersonImage())){
+                supplierInfoTemporary.setPersonImage(bo.getPersonImage());
+            }
+
             //2.供货品牌
             if (bo.getOperatingBrand() != null && StringUtils.isNotBlank(bo.getOperatingBrand())){
                 supplierInfoTemporary.setOperatingBrand(bo.getOperatingBrand());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             }
             //3.供货类目
             if (bo.getOperatingCategory() != null && StringUtils.isNotBlank(bo.getOperatingCategory())){
                 supplierInfoTemporary.setOperatingCategory(bo.getOperatingCategory());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             }
-
+            flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             supplierInfo.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
             boolean update =baseMapper.updateById(supplierInfo) > 0;
             return update && flag;
         }
+
+
         //如果是待审核状态,依旧是待修改审核状态
         if (supplierInfo.getSupplyStatus() == SupplierStatusEnum.REVIEW_UPDATED.getCode()){
             SupplierInfoTemporary supplierInfoTemporary = supplierInfoTemporaryService.querBySupplierId(id);
@@ -413,25 +474,218 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
             //1.简称
             if (bo.getShortName() != null && StringUtils.isNotBlank(bo.getShortName())){
                 supplierInfoTemporary.setShortName(bo.getShortName());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
+            }
+
+            //工商地址
+            if (ObjectUtil.isNotEmpty(bo.getBusinessName())){
+                supplierInfoTemporary.setBusinessName(bo.getBusinessName());
+            }
+            //企业规模
+            if (ObjectUtil.isNotEmpty(bo.getMembershipSize())){
+                supplierInfoTemporary.setMembershipSize(bo.getMembershipSize());
+            }
+            //固定电话
+            if (ObjectUtil.isNotEmpty(bo.getFixedPhone())){
+                supplierInfoTemporary.setFixedPhone(bo.getFixedPhone());
+            }
+            //传真
+            if (ObjectUtil.isNotEmpty(bo.getFax())){
+                supplierInfoTemporary.setFax(bo.getFax());
+            }
+            //企业邮箱
+            if (ObjectUtil.isNotEmpty(bo.getMailbox())){
+                supplierInfoTemporary.setMailbox(bo.getMailbox());
+            }
+            //邮政编码
+            if (ObjectUtil.isNotEmpty(bo.getPostCode())){
+                supplierInfoTemporary.setPostCode(bo.getPostCode());
+            }
+            //网址
+            if (ObjectUtil.isNotEmpty(bo.getUrl())){
+                supplierInfoTemporary.setUrl(bo.getUrl());
+            }
+            //详细地址
+            if (ObjectUtil.isNotEmpty(bo.getOfficeProvince())){
+                supplierInfoTemporary.setOfficeProvince(bo.getOfficeProvince());
+            }
+
+            if (ObjectUtil.isNotEmpty(bo.getOfficeCity())){
+                supplierInfoTemporary.setOfficeCity(bo.getOfficeCity());
+            }
+
+            if (ObjectUtil.isNotEmpty(bo.getOfficeCounty())){
+                supplierInfoTemporary.setOfficeCounty(bo.getOfficeCounty());
+            }
+            if (ObjectUtil.isNotEmpty(bo.getOfficeAddress())){
+                supplierInfoTemporary.setOfficeAddress(bo.getOfficeAddress());
+            }
+
+            //营业执照
+            if (ObjectUtil.isNotEmpty(bo.getBusinessLicense())){
+                supplierInfoTemporary.setBusinessLicense(bo.getBusinessLicense());
+            }
+
+            //法人身份证
+            if (ObjectUtil.isNotEmpty(bo.getPersonImage())){
+                supplierInfoTemporary.setPersonImage(bo.getPersonImage());
             }
             //2.供货品牌
             if (bo.getOperatingBrand() != null && StringUtils.isNotBlank(bo.getOperatingBrand())){
                 supplierInfoTemporary.setOperatingBrand(bo.getOperatingBrand());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             }
             //3.供货类目
             if (bo.getOperatingCategory() != null && StringUtils.isNotBlank(bo.getOperatingCategory())){
                 supplierInfoTemporary.setOperatingCategory(bo.getOperatingCategory());
-                flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             }
+            flag = supplierInfoTemporaryService.updateById(supplierInfoTemporary);
             return flag;
         }
         // 停用呢  不能修改了
         if (supplierInfo.getSupplyStatus() == SupplierStatusEnum.DISABLED.getCode()){
-            throw new RuntimeException("供应商已停用,不能修改");
+            throw new ServiceException("供应商已停用,不能修改");
         }
         return false;
+    }*/
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean srmUpdateByBo(SupplierInfoBo bo) throws JsonProcessingException {
+
+        SupplierInfo supplier = baseMapper.selectById(bo.getId());
+        SupplierStatusEnum status = SupplierStatusEnum.getByCode(supplier.getSupplyStatus());
+
+        switch (status) {
+
+            // 待审核
+            case PENDING_REVIEW:
+                return updateSupplier(bo);
+
+            // 审核失败 -> 重新待审核
+            case REVIEW_FAILED:
+                SupplierInfo update = MapstructUtils.convert(bo, SupplierInfo.class);
+                update.setSupplyStatus(SupplierStatusEnum.PENDING_REVIEW.getCode());
+                return baseMapper.updateById(update) > 0;
+
+            // 正式供应商 -> 进入修改审核
+            case OFFICIAL_SUPPLIER:
+                return handleOfficialSupplierUpdate(bo, supplier);
+
+            // 修改审核中
+            case REVIEW_UPDATED:
+                SupplierInfoTemporary temp = supplierInfoTemporaryService.querBySupplierId(bo.getId());
+                updateTemporaryFields(temp, bo);
+                return supplierInfoTemporaryService.updateById(temp);
+
+            // 停用
+            case DISABLED:
+                throw new ServiceException("供应商已停用,不能修改");
+
+            default:
+                return false;
+        }
+    }
+
+    private boolean updateSupplier(SupplierInfoBo bo) {
+        SupplierInfo update = MapstructUtils.convert(bo, SupplierInfo.class);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    private boolean handleOfficialSupplierUpdate(SupplierInfoBo bo, SupplierInfo supplier) throws JsonProcessingException {
+
+        Long supplierId = supplier.getId();
+        SupplierInfoTemporary temp = supplierInfoTemporaryService.querBySupplierId(supplierId);
+
+        // 如果临时表不存在则创建
+        if (temp == null) {
+            temp = buildTemporarySupplier(supplier, bo);
+            supplierInfoTemporaryService.save(temp);
+        }
+
+        // 更新字段
+        updateTemporaryFields(temp, bo);
+
+        boolean tempUpdate = supplierInfoTemporaryService.updateById(temp);
+
+        // 修改主表状态
+        supplier.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
+        boolean mainUpdate = baseMapper.updateById(supplier) > 0;
+
+        return tempUpdate && mainUpdate;
+    }
+
+    private SupplierInfoTemporary buildTemporarySupplier(SupplierInfo supplier, SupplierInfoBo bo)
+        throws JsonProcessingException {
+
+        SupplierInfoTemporary temp = new SupplierInfoTemporary();
+
+        BeanUtils.copyProperties(supplier, temp, "id");
+
+        temp.setSupplierId(supplier.getId());
+        temp.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
+
+        // 查询供应区域
+        SupplyAreaBo areaBo = new SupplyAreaBo();
+        areaBo.setSupplierId(bo.getId());
+
+        TableDataInfo<SupplyAreaVo> table =
+            supplyAreaService.queryPageList(areaBo, new PageQuery());
+
+        String areaListJson = objectMapper.writeValueAsString(table);
+        temp.setAreaListJson(areaListJson);
+
+        return temp;
+    }
+
+    private void updateTemporaryFields(SupplierInfoTemporary temp, SupplierInfoBo bo) {
+
+        if (StringUtils.isNotBlank(bo.getShortName()))
+            temp.setShortName(bo.getShortName());
+
+        if (ObjectUtil.isNotEmpty(bo.getBusinessName()))
+            temp.setBusinessName(bo.getBusinessName());
+
+        if (ObjectUtil.isNotEmpty(bo.getMembershipSize()))
+            temp.setMembershipSize(bo.getMembershipSize());
+
+        if (ObjectUtil.isNotEmpty(bo.getFixedPhone()))
+            temp.setFixedPhone(bo.getFixedPhone());
+
+        if (ObjectUtil.isNotEmpty(bo.getFax()))
+            temp.setFax(bo.getFax());
+
+        if (ObjectUtil.isNotEmpty(bo.getMailbox()))
+            temp.setMailbox(bo.getMailbox());
+
+        if (ObjectUtil.isNotEmpty(bo.getPostCode()))
+            temp.setPostCode(bo.getPostCode());
+
+        if (ObjectUtil.isNotEmpty(bo.getUrl()))
+            temp.setUrl(bo.getUrl());
+
+        if (ObjectUtil.isNotEmpty(bo.getOfficeProvince()))
+            temp.setOfficeProvince(bo.getOfficeProvince());
+
+        if (ObjectUtil.isNotEmpty(bo.getOfficeCity()))
+            temp.setOfficeCity(bo.getOfficeCity());
+
+        if (ObjectUtil.isNotEmpty(bo.getOfficeCounty()))
+            temp.setOfficeCounty(bo.getOfficeCounty());
+
+        if (ObjectUtil.isNotEmpty(bo.getOfficeAddress()))
+            temp.setOfficeAddress(bo.getOfficeAddress());
+
+        if (ObjectUtil.isNotEmpty(bo.getBusinessLicense()))
+            temp.setBusinessLicense(bo.getBusinessLicense());
+
+        if (ObjectUtil.isNotEmpty(bo.getPersonImage()))
+            temp.setPersonImage(bo.getPersonImage());
+
+        if (StringUtils.isNotBlank(bo.getOperatingBrand()))
+            temp.setOperatingBrand(bo.getOperatingBrand());
+
+        if (StringUtils.isNotBlank(bo.getOperatingCategory()))
+            temp.setOperatingCategory(bo.getOperatingCategory());
     }
 
     /**
@@ -474,7 +728,6 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
             // 将工商信息复制到供应商信息对象中
             copyBusinessInfoToSupplierInfoVo(supplierBusinessInfoVo, supplierInformationVo);
         }
-
         return supplierInformationVo;
     }
 
@@ -874,7 +1127,6 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
     @Override
     public SupplierInfoVo querySrmById(Long id) {
         SupplierInfoVo supplierInfoVo = baseMapper.selectVoById(id);
-
         SupplierInfoVo supplierInformationVo = handleProcurementInfo(supplierInfoVo);
         //返回工商信息
         SupplierBusinessInfoVo supplierBusinessInfoVo = supplierBusinessInfoMapper
@@ -1423,7 +1675,6 @@ public class SupplierInfoServiceImpl  extends ServiceImpl<SupplierInfoMapper, Su
 
 
     private SupplierInfoVo handleProcurementInfo(SupplierInfoVo records) {
-
         // 查询管理人员和采购人员
         Long id = records.getId();
         //查询供应地区

+ 14 - 8
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplyAreaServiceImpl.java

@@ -239,8 +239,6 @@ public class SupplyAreaServiceImpl  extends ServiceImpl<SupplyAreaMapper, Supply
 
             }
         }
-
-
         LambdaQueryWrapper<SupplyArea> lqw = buildQueryWrapper(bo);
         Page<SupplyAreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
         return TableDataInfo.build(result);
@@ -292,11 +290,8 @@ public class SupplyAreaServiceImpl  extends ServiceImpl<SupplyAreaMapper, Supply
 
         // 步骤2:提取供应商核心关联数据,保证后续数据完整性
         String supplyNo = bo.getSupplyNo();
-
         Long REVIEW_UPDATED = SupplierStatusEnum.REVIEW_UPDATED.getCode(); // 固定状态4
-
         Long supplyStatus = bo.getSupplyStatus();
-
         if (REVIEW_UPDATED.equals(supplyStatus)) {
             // 步骤3:将 SupplyAreaBo 列表转换为 SupplyArea 列表(与示例 JSON 结构对齐)
             List<SupplyAreaJsonVo> supplyAreaList = new ArrayList<>();
@@ -311,6 +306,7 @@ public class SupplyAreaServiceImpl  extends ServiceImpl<SupplyAreaMapper, Supply
                 supplyArea.setId(IdWorker.getId());
                 supplyArea.setSupplierId(supplierId);
                 supplyArea.setSupplyNo(supplyNo);
+                supplyArea.setAreaId(areaBo.getAreaId());
                 supplyAreaList.add(supplyArea);
             }
 
@@ -350,18 +346,28 @@ public class SupplyAreaServiceImpl  extends ServiceImpl<SupplyAreaMapper, Supply
             );
 
             SupplierInfo supplierInfo = supplierInfoMapper.selectById(supplierId);
+            Long supplyStatus1 = supplierInfo.getSupplyStatus();
             // 6.2 临时表记录不存在:新建记录,补全核心业务字段
             if (tempSupplier == null) {
                 tempSupplier = new SupplierInfoTemporary();
                 BeanUtils.copyProperties(supplierInfo, tempSupplier,"id");
                 tempSupplier.setSupplierId(supplierId);
-                // 默认为「修改待审核」状态(REVIEW_UPDATED = 4),符合业务流程
-                tempSupplier.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
+                if (supplyStatus1.equals(SupplierStatusEnum.OFFICIAL_SUPPLIER.getCode())) {
+                    tempSupplier.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
+                }else if (supplyStatus1.equals(SupplierStatusEnum.PENDING_REVIEW.getCode())){
+                    tempSupplier.setSupplyStatus(SupplierStatusEnum.PENDING_REVIEW.getCode());
+                }else if (supplyStatus1.equals(SupplierStatusEnum.REVIEW_FAILED.getCode())){
+                    tempSupplier.setSupplyStatus(SupplierStatusEnum.PENDING_REVIEW.getCode());
+                }else if (supplyStatus1.equals(SupplierStatusEnum.REVIEW_UPDATED.getCode())){
+                    tempSupplier.setSupplyStatus(SupplierStatusEnum.REVIEW_UPDATED.getCode());
+                }else if (supplyStatus1.equals(SupplierStatusEnum.DISABLED.getCode())){
+                    tempSupplier.setSupplyStatus(SupplierStatusEnum.DISABLED.getCode());
+                }
             }
 
             // 6.3 无论新建/更新,均设置 areaListJson 字段(核心操作)
             int update = supplierInfoMapper.update(new LambdaUpdateWrapper<SupplierInfo>()
-                .set(SupplierInfo::getSupplyStatus, SupplierStatusEnum.REVIEW_UPDATED.getCode())
+                .set(SupplierInfo::getSupplyStatus, tempSupplier.getSupplyStatus())
                 .eq(SupplierInfo::getId, supplierId));
 
             tempSupplier.setAreaListJson(areaListJson);

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

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -480,14 +480,14 @@ public class RemoteUserServiceImpl implements RemoteUserService {
      * @param remoteUserBo
      */
     @Override
-    public Long addUser(RemoteUserBo remoteUserBo) {
+    public Long addUser(RemoteUserBo remoteUserBo) throws ServiceException {
 
         SysUserBo sysUserBo = MapstructUtils.convert(remoteUserBo, SysUserBo.class);
         String username = sysUserBo.getUserName();
         boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>()
             .eq(SysUser::getUserName, sysUserBo.getUserName()));
         if (exist) {
-            throw new RuntimeException("账号已经存在:"+ username);
+            throw new ServiceException("账号已经存在:"+ username);
         }
         userService.insertUser(sysUserBo);
         return sysUserBo.getUserId();