feat(product): 添加批量更新钢卷itemId功能,由于只是一次性接口暂时不考虑速度
- 在IWmsProductService接口中添加batchUpdateCoilItemId方法定义 - 在WmsProductController中添加batchUpdateCoilItem REST端点 - 在WmsProductServiceImpl中实现批量更新逻辑 - 添加对WmsMaterialCoil和WmsRawMaterial实体的操作支持 - 实现根据逻辑库区ID查询并按itemType分类处理的功能 - 添加事务管理和异常回滚机制 - 返回产品和原料的数量统计结果
This commit is contained in:
@@ -19,6 +19,8 @@ import com.klp.common.core.validate.AddGroup;
|
|||||||
import com.klp.common.core.validate.EditGroup;
|
import com.klp.common.core.validate.EditGroup;
|
||||||
import com.klp.common.enums.BusinessType;
|
import com.klp.common.enums.BusinessType;
|
||||||
import com.klp.common.utils.poi.ExcelUtil;
|
import com.klp.common.utils.poi.ExcelUtil;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.klp.domain.vo.WmsProductVo;
|
import com.klp.domain.vo.WmsProductVo;
|
||||||
import com.klp.domain.bo.WmsProductBo;
|
import com.klp.domain.bo.WmsProductBo;
|
||||||
import com.klp.service.IWmsProductService;
|
import com.klp.service.IWmsProductService;
|
||||||
@@ -125,4 +127,14 @@ public class WmsProductController extends BaseController {
|
|||||||
public R<Void> addWithBom(@Validated(AddGroup.class) @RequestBody WmsProductBo bo) {
|
public R<Void> addWithBom(@Validated(AddGroup.class) @RequestBody WmsProductBo bo) {
|
||||||
return toAjax(iWmsProductService.insertByBo(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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.klp.common.core.domain.PageQuery;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品Service接口
|
* 产品Service接口
|
||||||
@@ -54,4 +55,13 @@ public interface IWmsProductService {
|
|||||||
TableDataInfo<WmsProductVo> queryPageListWithBom(WmsProductBo bo, PageQuery pageQuery);
|
TableDataInfo<WmsProductVo> queryPageListWithBom(WmsProductBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
DashboardOverviewVO getDashboardOverview();
|
DashboardOverviewVO getDashboardOverview();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新钢卷的itemId
|
||||||
|
* 根据逻辑库区ID查询所有钢卷,然后根据itemType分别去产品表或原料表新增记录
|
||||||
|
* @param warehouseId 逻辑库区ID
|
||||||
|
* @param newName 新名称
|
||||||
|
* @return 更新结果(产品数量,原料数量)
|
||||||
|
*/
|
||||||
|
Map<String, Integer> batchUpdateCoilItemId(Long warehouseId, String newName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,11 @@ import org.springframework.stereotype.Service;
|
|||||||
import com.klp.domain.bo.WmsProductBo;
|
import com.klp.domain.bo.WmsProductBo;
|
||||||
import com.klp.domain.vo.WmsProductVo;
|
import com.klp.domain.vo.WmsProductVo;
|
||||||
import com.klp.domain.WmsProduct;
|
import com.klp.domain.WmsProduct;
|
||||||
|
import com.klp.domain.WmsMaterialCoil;
|
||||||
|
import com.klp.domain.WmsRawMaterial;
|
||||||
import com.klp.mapper.WmsProductMapper;
|
import com.klp.mapper.WmsProductMapper;
|
||||||
|
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||||
|
import com.klp.mapper.WmsRawMaterialMapper;
|
||||||
import com.klp.service.IWmsProductService;
|
import com.klp.service.IWmsProductService;
|
||||||
import com.klp.domain.vo.PerformanceAreaVO;
|
import com.klp.domain.vo.PerformanceAreaVO;
|
||||||
import com.klp.domain.vo.CurrentSituationAreaVO;
|
import com.klp.domain.vo.CurrentSituationAreaVO;
|
||||||
@@ -45,6 +49,8 @@ public class WmsProductServiceImpl implements IWmsProductService {
|
|||||||
private final WmsProductMapper baseMapper;
|
private final WmsProductMapper baseMapper;
|
||||||
private final IWmsBomService wmsBomService;
|
private final IWmsBomService wmsBomService;
|
||||||
private final IWmsBomItemService wmsBomItemService;
|
private final IWmsBomItemService wmsBomItemService;
|
||||||
|
private final WmsMaterialCoilMapper coilMapper;
|
||||||
|
private final WmsRawMaterialMapper rawMaterialMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询产品
|
* 查询产品
|
||||||
@@ -321,4 +327,102 @@ public class WmsProductServiceImpl implements IWmsProductService {
|
|||||||
|
|
||||||
return vo;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user