feat(serial-number): 添加乐观锁支持及初始化报价代码接口

- 在AdminBaseSerialNumber实体中添加@Version注解实现乐观锁
- 在MybatisPlus配置中加入OptimisticLockerInnerInterceptor支持乐观锁插件
- 修正AdminBaseSerialNumberServiceImpl中序列号生成逻辑,避免逻辑遗漏
- TestController新增接口initAdminUserQuotationCode,批量初始化内部用户报价代码字段
- 新增日志记录生成的报价代码,确保数据初始化过程可追踪
- 引入相关服务依赖,完善测试控制器注入与调用逻辑
This commit is contained in:
曹鹏飞 2026-05-13 10:07:34 +08:00
parent 9cceef75bb
commit b8ca2a9905
4 changed files with 42 additions and 6 deletions

View File

@ -5,13 +5,14 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.AdminUser;
import com.nflg.mobilebroken.repository.entity.ProductModel;
import com.nflg.mobilebroken.repository.entity.TBaseArea;
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
import com.nflg.mobilebroken.repository.service.IProductModelService;
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
import com.nflg.mobilebroken.repository.service.ITBaseCustomerService;
import com.nflg.mobilebroken.repository.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -26,6 +27,7 @@ import java.util.stream.Collectors;
/**
* 测试
*/
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController extends ControllerBase {
@ -39,6 +41,12 @@ public class TestController extends ControllerBase {
@Resource
ITBaseAreaService areaService;
@Resource
private IAdminUserService adminUserService;
@Resource
private IAdminBaseSerialNumberService serialNumberService;
/**
* 初始化机型表的BatchNumber字段数据
*/
@ -121,4 +129,25 @@ public class TestController extends ControllerBase {
return ApiResult.success();
}
/**
* 初始化内部用户报价代码字段数据
*/
@PostMapping("initAdminUserQuotationCode")
public ApiResult<Void> initAdminUserQuotationCode(){
List<AdminUser> adminUsers=adminUserService.lambdaQuery()
.isNull(AdminUser::getQuotationCode)
.orderByAsc(AdminUser::getId)
.list();
if (CollectionUtil.isNotEmpty(adminUsers)) {
adminUsers.forEach(adminUser -> {
String quotationCode = serialNumberService.generateSerialNumber(0, "NF", "", false, 6);
log.info("生成报价代码【{}】:{}", adminUser.getUserName(), quotationCode);
adminUser.setQuotationCode(quotationCode);
});
adminUserService.updateBatchById(adminUsers);
return ApiResult.success();
}
return ApiResult.success();
}
}

View File

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@ -45,6 +47,7 @@ public class AdminBaseSerialNumber implements Serializable {
/**
* 乐观锁版本号
*/
@Version
private Integer version;
/**

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.repository.entity.AdminBaseSerialNumber;
import com.nflg.mobilebroken.repository.mapper.AdminBaseSerialNumberMapper;
import com.nflg.mobilebroken.repository.service.IAdminBaseSerialNumberService;
@ -14,9 +15,8 @@ import java.util.Objects;
/**
* <p>
* 服务实现类
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2026
*/
@ -34,7 +34,7 @@ public class AdminBaseSerialNumberServiceImpl extends ServiceImpl<AdminBaseSeria
public String generateSerialNumber(Integer businessType, String prefixNumber, String specialNumber,
boolean hasTimeStr, Integer serialLength) {
String currentDate = "";
String serialNo ;
String serialNo;
AdminBaseSerialNumber serialNumber = this.lambdaQuery()
.eq(AdminBaseSerialNumber::getBusinessType, businessType)
.one();
@ -59,6 +59,8 @@ public class AdminBaseSerialNumberServiceImpl extends ServiceImpl<AdminBaseSeria
if (serialNumber.getCurrentDateStr().equals(currentDate)) {
startSerial = serialNumber.getMaxSerial() + 1;
}
} else {
startSerial = serialNumber.getMaxSerial() + 1;
}
serialNumber.setSerialLength(serialLength);
serialNumber.setMaxSerial(startSerial);

View File

@ -4,6 +4,7 @@ import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.nflg.mobilebroken.starter.handler.UTCLocalDateTimeTypeHandler;
@ -104,6 +105,7 @@ public class MysqlDataSourceConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}