feat(product): 添加批量更新钢卷itemId功能,由于只是一次性接口暂时不考虑速度

- 在IWmsProductService接口中添加batchUpdateCoilItemId方法定义
- 在WmsProductController中添加batchUpdateCoilItem REST端点
- 在WmsProductServiceImpl中实现批量更新逻辑
- 添加对WmsMaterialCoil和WmsRawMaterial实体的操作支持
- 实现根据逻辑库区ID查询并按itemType分类处理的功能
- 添加事务管理和异常回滚机制
- 返回产品和原料的数量统计结果
This commit is contained in:
2026-04-14 10:06:59 +08:00
parent 9f3d402174
commit fea3c78c4f
3 changed files with 126 additions and 0 deletions

View File

@@ -19,6 +19,8 @@ import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import java.util.Map;
import com.klp.domain.vo.WmsProductVo;
import com.klp.domain.bo.WmsProductBo;
import com.klp.service.IWmsProductService;
@@ -125,4 +127,14 @@ public class WmsProductController extends BaseController {
public R<Void> addWithBom(@Validated(AddGroup.class) @RequestBody WmsProductBo bo) {
return toAjax(iWmsProductService.insertByBo(bo));
}
/**
* 批量更新钢卷的itemId
* 根据逻辑库区ID查询所有钢卷,然后根据itemType分别去产品表或原料表新增记录
*/
@Log(title = "批量更新钢卷itemId", businessType = BusinessType.UPDATE)
@PostMapping("/batchUpdateCoilItem")
public R<Map<String, Integer>> batchUpdateCoilItem(@RequestParam Long warehouseId, @RequestParam String newName) {
return R.ok(iWmsProductService.batchUpdateCoilItemId(warehouseId, newName));
}
}

View File

@@ -9,6 +9,7 @@ import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 产品Service接口
@@ -54,4 +55,13 @@ public interface IWmsProductService {
TableDataInfo<WmsProductVo> queryPageListWithBom(WmsProductBo bo, PageQuery pageQuery);
DashboardOverviewVO getDashboardOverview();
/**
* 批量更新钢卷的itemId
* 根据逻辑库区ID查询所有钢卷,然后根据itemType分别去产品表或原料表新增记录
* @param warehouseId 逻辑库区ID
* @param newName 新名称
* @return 更新结果(产品数量,原料数量)
*/
Map<String, Integer> batchUpdateCoilItemId(Long warehouseId, String newName);
}

View File

@@ -15,7 +15,11 @@ import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsProductBo;
import com.klp.domain.vo.WmsProductVo;
import com.klp.domain.WmsProduct;
import com.klp.domain.WmsMaterialCoil;
import com.klp.domain.WmsRawMaterial;
import com.klp.mapper.WmsProductMapper;
import com.klp.mapper.WmsMaterialCoilMapper;
import com.klp.mapper.WmsRawMaterialMapper;
import com.klp.service.IWmsProductService;
import com.klp.domain.vo.PerformanceAreaVO;
import com.klp.domain.vo.CurrentSituationAreaVO;
@@ -45,6 +49,8 @@ public class WmsProductServiceImpl implements IWmsProductService {
private final WmsProductMapper baseMapper;
private final IWmsBomService wmsBomService;
private final IWmsBomItemService wmsBomItemService;
private final WmsMaterialCoilMapper coilMapper;
private final WmsRawMaterialMapper rawMaterialMapper;
/**
* 查询产品
@@ -321,4 +327,102 @@ public class WmsProductServiceImpl implements IWmsProductService {
return vo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, Integer> batchUpdateCoilItemId(Long warehouseId, String newName) {
LambdaQueryWrapper<WmsMaterialCoil> coilWrapper = Wrappers.lambdaQuery();
coilWrapper.eq(WmsMaterialCoil::getWarehouseId, warehouseId);
coilWrapper.eq(WmsMaterialCoil::getDelFlag, 0);
List<WmsMaterialCoil> coils = coilMapper.selectList(coilWrapper);
Map<String, Integer> result = new java.util.HashMap<>();
result.put("productUpdateCount", 0);
result.put("rawMaterialUpdateCount", 0);
if (coils == null || coils.isEmpty()) {
return result;
}
List<Long> productItemIds = coils.stream()
.filter(c -> "product".equals(c.getItemType()) && c.getItemId() != null)
.map(WmsMaterialCoil::getItemId)
.distinct()
.collect(java.util.stream.Collectors.toList());
List<Long> rawMaterialItemIds = coils.stream()
.filter(c -> "raw_material".equals(c.getItemType()) && c.getItemId() != null)
.map(WmsMaterialCoil::getItemId)
.distinct()
.collect(java.util.stream.Collectors.toList());
Map<Long, WmsProduct> productMap = new java.util.HashMap<>();
if (!productItemIds.isEmpty()) {
List<WmsProduct> products = baseMapper.selectBatchIds(productItemIds);
for (WmsProduct p : products) {
productMap.put(p.getProductId(), p);
}
}
Map<Long, WmsRawMaterial> rawMaterialMap = new java.util.HashMap<>();
if (!rawMaterialItemIds.isEmpty()) {
List<WmsRawMaterial> rawMaterials = rawMaterialMapper.selectBatchIds(rawMaterialItemIds);
for (WmsRawMaterial r : rawMaterials) {
rawMaterialMap.put(r.getRawMaterialId(), r);
}
}
int productUpdateCount = 0;
int rawMaterialUpdateCount = 0;
for (WmsMaterialCoil coil : coils) {
Long itemId = coil.getItemId();
String itemType = coil.getItemType();
if (itemId == null || StringUtils.isBlank(itemType)) {
continue;
}
Long newItemId = null;
if ("product".equals(itemType)) {
WmsProduct originalProduct = productMap.get(itemId);
if (originalProduct == null) {
continue;
}
WmsProduct newProduct = BeanUtil.toBean(originalProduct, WmsProduct.class);
newProduct.setProductId(null);
newProduct.setProductName(newName);
newProduct.setProductCode(null);
baseMapper.insert(newProduct);
newItemId = newProduct.getProductId();
productUpdateCount++;
} else if ("raw_material".equals(itemType)) {
WmsRawMaterial originalRawMaterial = rawMaterialMap.get(itemId);
if (originalRawMaterial == null) {
continue;
}
WmsRawMaterial newRawMaterial = BeanUtil.toBean(originalRawMaterial, WmsRawMaterial.class);
newRawMaterial.setRawMaterialId(null);
newRawMaterial.setRawMaterialName(newName);
newRawMaterial.setRawMaterialCode(null);
rawMaterialMapper.insert(newRawMaterial);
newItemId = newRawMaterial.getRawMaterialId();
rawMaterialUpdateCount++;
}
if (newItemId != null) {
coil.setItemId(newItemId);
coilMapper.updateById(coil);
}
}
result.put("productUpdateCount", productUpdateCount);
result.put("rawMaterialUpdateCount", rawMaterialUpdateCount);
return result;
}
}