Просмотр исходного кода

refactor(customer): 重构序列号生成逻辑并优化服务实现

- 在CustomerContactServiceImpl中添加事务注解支持
- 重构联系人编号生成逻辑,使用基于客户编号的独立计数器
- 重构收货地址编号生成逻辑,使用基于客户编号的独立计数器
- 在ProjectInfoServiceImpl中添加项目编号生成功能
- 重构供应商地址编号生成逻辑,使用基于供应商编号的独立计数器
- 重构供应商联系人编号生成逻辑,使用基于供应商编号的独立计数器
- 移除废弃的ServerException导入
- 优化代码结构和注释说明
hurx 2 дней назад
Родитель
Сommit
f38bea6630

+ 10 - 3
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java

@@ -157,6 +157,7 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
      * @return 是否新增成功
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(CustomerContactBo bo) {
         // 1. 获取并校验客户编号
         String customerNo = null;
@@ -195,10 +196,16 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
             throw new ServiceException("创建系统用户失败:" + userId);
         }
 
+        // 3. 生成联系人编号
+        // 1. 构造带客户编号的 Key,实现“每个客户独立计数”
+        String seqKey = "customer_contact:contact_no:" + customerNo;
+
+        // 2. 调用工具类
+        String seqId = SequenceUtils.nextPaddedIdStr(seqKey, Duration.ofDays(3650), 4);
+
+        // 3. 拼接最终结果
+        String contactNo = "1" + customerNo + seqId;
 
-        // 2. 生成联系人编号
-        String seqId = SequenceUtils.nextPaddedIdStr(CONTACT_NO_KEY, Duration.ofDays(3650), 3);
-        String contactNo = customerNo + seqId;
 
         CustomerContact add = MapstructUtils.convert(bo, CustomerContact.class);
         add.setContactNo(contactNo);

+ 8 - 3
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerShippingAddressServiceImpl.java

@@ -23,7 +23,6 @@ import org.dromara.customer.service.ICustomerShippingAddressService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.rmi.ServerException;
 import java.time.Duration;
 import java.util.Collection;
 import java.util.List;
@@ -138,8 +137,14 @@ public class CustomerShippingAddressServiceImpl extends ServiceImpl<CustomerShip
         }
 
         // 2. 生成收货地址编号
-        String seqId = SequenceUtils.nextPaddedIdStr(SHOPPING_ADDRESS_NO_KEY, Duration.ofDays(3650), 3);
-        String shippingAddressNo = customerNo + seqId;
+        // 1. 构造带客户编号的 Key,实现“每个客户独立计数”
+        String seqKey = "customer_shipping_address:shipping_address_no:" + customerNo;
+
+        // 2. 调用工具类
+        String seqId = SequenceUtils.nextPaddedIdStr(seqKey, Duration.ofDays(3650), 4);
+
+        // 3. 拼接最终结果
+        String shippingAddressNo = "2" + customerNo + seqId;
 
         // 3. 对象转换
         CustomerShippingAddress add = MapstructUtils.convert(bo, CustomerShippingAddress.class);

+ 18 - 9
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/ProjectInfoServiceImpl.java

@@ -1,25 +1,27 @@
 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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.SequenceUtils;
+import org.dromara.customer.domain.ProjectInfo;
 import org.dromara.customer.domain.bo.ProjectInfoBo;
 import org.dromara.customer.domain.vo.ProjectInfoVo;
-import org.dromara.customer.domain.ProjectInfo;
 import org.dromara.customer.mapper.ProjectInfoMapper;
 import org.dromara.customer.service.IProjectInfoService;
+import org.springframework.stereotype.Service;
 
+import java.time.Duration;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Collection;
 
 /**
  * 项目信息Service业务层处理
@@ -32,6 +34,8 @@ import java.util.Collection;
 @Service
 public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements IProjectInfoService {
 
+    private static final String PROJECT_NO_KEY = "project_info:project_no:";
+
     private final ProjectInfoMapper baseMapper;
 
     /**
@@ -98,7 +102,12 @@ public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, Proje
      */
     @Override
     public Boolean insertByBo(ProjectInfoBo bo) {
+
+        String nexted = SequenceUtils.nextPaddedIdStr(PROJECT_NO_KEY, Duration.ofDays(3650), 5);
         ProjectInfo add = MapstructUtils.convert(bo, ProjectInfo.class);
+        if (StringUtils.isBlank(add.getProjectNo())) {
+            add.setProjectNo("1" + nexted);
+        }
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

+ 15 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierAddressServiceImpl.java

@@ -13,7 +13,9 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.SequenceUtils;
 import org.dromara.customer.domain.SupplierAddress;
+import org.dromara.customer.domain.SupplierInfo;
 import org.dromara.customer.domain.bo.SupplierAddressBo;
 import org.dromara.customer.domain.vo.SupplierAddressVo;
 import org.dromara.customer.domain.vo.SupplierInfoVo;
@@ -23,6 +25,7 @@ import org.dromara.customer.service.ISupplierAddressService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.Duration;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -137,6 +140,7 @@ public class SupplierAddressServiceImpl extends ServiceImpl<SupplierAddressMappe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(SupplierAddressBo bo) {
+        SupplierInfo supplierInfo = supplierInfoMapper.selectById(bo.getSupplierId());
         SupplierAddress add = MapstructUtils.convert(bo, SupplierAddress.class);
         validEntityBeforeSave(add);
         // 如果设置为自身地址
@@ -149,7 +153,7 @@ public class SupplierAddressServiceImpl extends ServiceImpl<SupplierAddressMappe
 
             baseMapper.update(null, updateWrapper);
         }
-        LambdaQueryWrapper<SupplierAddress> lqw = Wrappers.lambdaQuery();
+     /*   LambdaQueryWrapper<SupplierAddress> lqw = Wrappers.lambdaQuery();
         lqw.select(SupplierAddress::getAddressNo)
             .orderByDesc(SupplierAddress::getAddressNo)
             .last("LIMIT 1");
@@ -157,7 +161,16 @@ public class SupplierAddressServiceImpl extends ServiceImpl<SupplierAddressMappe
         String addressNo = supplierAddress.getAddressNo();
         Long maxNo = Long.parseLong(addressNo);
         String newAddressNo = String.valueOf(maxNo + 1);
-        add.setAddressNo(newAddressNo);
+        add.setAddressNo(newAddressNo);*/
+        // 1. 构造带供应商编号的 Key,实现“每个供应商独立计数”
+        String seqKey = "supplier_address:supplier_address_no:" + supplierInfo.getSupplierNo();
+
+        // 2. 调用工具类
+        String seqId = SequenceUtils.nextPaddedIdStr(seqKey, Duration.ofDays(3650), 4);
+
+        // 3. 拼接最终结果
+        String addressNo = "2" + supplierInfo.getSupplierNo() + seqId;
+        add.setAddressNo(addressNo);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());

+ 16 - 2
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/SupplierContactServiceImpl.java

@@ -16,6 +16,7 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.SequenceUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.customer.domain.SupplierContact;
 import org.dromara.customer.domain.SupplierInfo;
@@ -29,6 +30,7 @@ import org.dromara.system.api.domain.bo.RemoteUserBo;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.Duration;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -167,6 +169,9 @@ public class SupplierContactServiceImpl extends ServiceImpl<SupplierContactMappe
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(SupplierContactBo bo) {
+
+        SupplierInfo supplierInfo = supplierInfoService.getById(bo.getSupplierId());
+
         //首先判断是否是待审核状态
         //1.如果是待审核 得记录联系人 不能登录  user是不能登录的 status = 1 停用
 
@@ -207,7 +212,7 @@ public class SupplierContactServiceImpl extends ServiceImpl<SupplierContactMappe
             throw new ServiceException("供应商角色信息新增失败");
         }
 
-        // 查询最大的用户编号
+/*        // 查询最大的用户编号
         LambdaQueryWrapper<SupplierContact> lqw = Wrappers.lambdaQuery();
         lqw.select(SupplierContact::getUserNo)
             .orderByDesc(SupplierContact::getUserNo)
@@ -215,8 +220,17 @@ public class SupplierContactServiceImpl extends ServiceImpl<SupplierContactMappe
         SupplierContact maxContact = baseMapper.selectOne(lqw);
         String maxUserNo = maxContact.getUserNo();
         long l = Long.parseLong(maxUserNo) + 1;
-        add.setUserNo(String.valueOf(l));
+        add.setUserNo(String.valueOf(l));*/
+        // 1. 构造带供应商编号的 Key,实现“每个供应商独立计数”
+        String seqKey = "supplier_contact:supplier_contact_no:" + supplierInfo.getSupplierNo();
+
+        // 2. 调用工具类
+        String seqId = SequenceUtils.nextPaddedIdStr(seqKey, Duration.ofDays(3650), 4);
+
+        // 3. 拼接最终结果
+        String contactNo = "1" + supplierInfo.getSupplierNo() + seqId;
         add.setUserId(userId);
+        add.setUserNo(contactNo);
         add.setPassword(ObjectUtil.isNotEmpty(bo.getPassword()) ? bo.getPassword() : "123456");
         boolean flag = baseMapper.insert(add) > 0;
         return flag;