feat(product): 添加批次号功能并初始化现有数据

- 新增 ControllerBase 基类用于统一控制器配置
- 修改 ProductModel 实体类的 batchNumber 字段从注释状态变为实际字段,并将类型从 String 改为 Long
- 更新 ProductModelAddRequest 请求类,添加 batchNumber 字段并使用 @JsonIgnore 注解
- 在 ProductModelServiceImpl 中启用 batchNumber 字段的设置逻辑
- 添加 TestController 提供初始化产品型号批次号的功能接口
- 实现批量更新产品型号表中缺失的批次号数据功能
This commit is contained in:
曹鹏飞 2026-01-28 17:53:08 +08:00
parent b9830ab001
commit 254c0d6568
5 changed files with 80 additions and 11 deletions

View File

@ -1,5 +1,7 @@
package com.nflg.mobilebroken.common.pojo.request;
import cn.hutool.core.util.IdUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -27,11 +29,11 @@ public class ProductModelAddRequest {
@NotBlank
private String typeNumber;
// /**
// * 批次号
// */
// @JsonIgnore
// private String batchNumber= IdUtil.getSnowflakeNextIdStr();
/**
* 批次号
*/
@JsonIgnore
private Long batchNumber;
// /**
// * 排序

View File

@ -0,0 +1,9 @@
package com.nflg.mobilebroken.quotation.controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
@Validated
@RestController
public class ControllerBase {
}

View File

@ -0,0 +1,57 @@
package com.nflg.mobilebroken.quotation.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.nflg.mobilebroken.repository.entity.ProductModel;
import com.nflg.mobilebroken.repository.service.IProductModelService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
* 测试
*/
@RestController
@RequestMapping("/test")
public class TestController extends ControllerBase {
@Resource
private IProductModelService productModelService;
/**
* 初始化机型表的BatchNumber字段数据
*/
@GetMapping("initProductModelBatchNumber")
public void initProductModelBatchNumber() {
List<ProductModel> datas1 = productModelService.lambdaQuery()
.select(ProductModel::getId, ProductModel::getNo)
.isNull(ProductModel::getBatchNumber)
.list();
if (CollectionUtil.isEmpty(datas1)) {
return;
}
List<ProductModel> datas2 = productModelService.lambdaQuery()
.select(ProductModel::getNo, ProductModel::getBatchNumber)
.isNotNull(ProductModel::getBatchNumber)
.list();
Map<String, Long> batchNumberMap = new ConcurrentHashMap<>();
datas2.forEach(model2 -> {
batchNumberMap.putIfAbsent(model2.getNo(), model2.getBatchNumber());
});
datas1.forEach(model1 -> {
Long batchNumber = batchNumberMap.get(model1.getNo());
if (Objects.isNull(batchNumber)) {
batchNumber = IdUtil.getSnowflakeNextId();
batchNumberMap.put(model1.getNo(), batchNumber);
}
model1.setBatchNumber(batchNumber);
});
productModelService.updateBatchById(datas1);
}
}

View File

@ -44,10 +44,10 @@ public class ProductModel implements Serializable {
*/
private String typeNumber;
// /**
// * 批次号
// */
// private String batchNumber;
/**
* 批次号
*/
private Long batchNumber;
/**
* 型号

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -64,7 +65,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
.setModuleId(request.getModuleId())
.setSeriesNumber(request.getSeriesNumber())
.setTypeNumber(request.getTypeNumber())
// .setBatchNumber(request.getBatchNumber())
.setBatchNumber(request.getBatchNumber())
.setNo(request.getNo())
.setRecommend(request.getRecommend())
.setRecommendExpireTime(request.getRecommendExpireTime())
@ -86,7 +87,7 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
public Integer update(ProductModelUpdateRequest request) {
ProductModel info = getById(request.getId());
if (Objects.equals(info.getState(), PublishState.Published.getState())) {
// request.setBatchNumber(info.getBatchNumber());
request.setBatchNumber(info.getBatchNumber());
Integer id = add(request);
copyToNew(info.getId(), id);
return id;