入库管理修改bug1
This commit is contained in:
+73
-3
@@ -14,6 +14,9 @@ import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryQuery
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO;
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryParentDO;
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryQueryListDO;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoService;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO;
|
||||
import com.mhd.wms.domain.statementStatistics.po.ImmediateInventoryPO;
|
||||
import com.mhd.wms.domain.statementStatistics.todo.ImmediateInventoryDO;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -24,6 +27,7 @@ import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 物料库存Service业务层处理
|
||||
@@ -35,6 +39,8 @@ import java.util.*;
|
||||
public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper, MaterialInventory> implements IMaterialInventoryService{
|
||||
@Autowired
|
||||
private MaterialInventoryMapper materialInventoryMapper;
|
||||
@Autowired
|
||||
private IMaterialBaseInfoService materialBaseInfoService;
|
||||
|
||||
/**
|
||||
* 查询物料库存列表
|
||||
@@ -136,16 +142,80 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
||||
List<MaterialInventory> materialInventoryList = new ArrayList<>();
|
||||
List<MaterialInventoryDO> materialInventoryDOListByUpdate = new ArrayList<>();
|
||||
Map<String, MaterialInventory> materialInventoryAddNowMap = new HashMap<>();
|
||||
|
||||
// 批量获取物料基础信息,以获取货主ID(用于查询和key生成)
|
||||
Map<Long, Long> materialBaseInfoIdToShipperIdMap = new HashMap<>();
|
||||
if (!CollectionUtils.isEmpty(materialInventoryDOList)) {
|
||||
Set<Long> materialBaseInfoIds = new HashSet<>();
|
||||
for (MaterialInventoryDO materialInventoryDO : materialInventoryDOList) {
|
||||
if (materialInventoryDO.getMaterialBaseInfoId() != null) {
|
||||
materialBaseInfoIds.add(materialInventoryDO.getMaterialBaseInfoId());
|
||||
}
|
||||
}
|
||||
// 批量查询物料基础信息,获取货主ID
|
||||
for (Long materialBaseInfoId : materialBaseInfoIds) {
|
||||
try {
|
||||
MaterialBaseInfoDO materialBaseInfoDO = new MaterialBaseInfoDO();
|
||||
materialBaseInfoDO.setMaterialBaseInfoId(materialBaseInfoId);
|
||||
List<MaterialBaseInfoPO> materialBaseInfoList = materialBaseInfoService.queryList(materialBaseInfoDO);
|
||||
if (!CollectionUtils.isEmpty(materialBaseInfoList)) {
|
||||
MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoList.get(0);
|
||||
if (materialBaseInfoPO.getShipperId() != null) {
|
||||
materialBaseInfoIdToShipperIdMap.put(materialBaseInfoId, materialBaseInfoPO.getShipperId());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果查询失败,记录日志但继续处理
|
||||
// log.warn("查询物料基础信息失败,物料基础信息ID:{},错误:{}", materialBaseInfoId, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (MaterialInventoryDO materialInventoryDO : materialInventoryDOList) {
|
||||
// 获取货主ID(优先使用materialInventoryDO中的,如果没有则从物料基础信息中获取)
|
||||
Long shipperId = materialInventoryDO.getShipperId();
|
||||
if (shipperId == null && materialInventoryDO.getMaterialBaseInfoId() != null) {
|
||||
shipperId = materialBaseInfoIdToShipperIdMap.get(materialInventoryDO.getMaterialBaseInfoId());
|
||||
}
|
||||
|
||||
//TODO 若数据量升级 后期优化
|
||||
// 查询现有库存时,需要通过关联查询包含货主ID条件
|
||||
// 由于MaterialInventory实体没有shipperId字段,我们需要通过materialBaseInfoId来间接查询
|
||||
// 如果materialInventoryDO中有shipperId,我们需要确保查询到的库存记录的物料基础信息对应的货主ID匹配
|
||||
MaterialInventory materialInventoryDb = materialInventoryMapper.selectOne(new QueryWrapper<MaterialInventory>().lambda()
|
||||
.eq(MaterialInventory::getStorageSectionId, materialInventoryDO.getStorageSectionId())
|
||||
.eq(MaterialInventory::getMaterialBaseInfoId, materialInventoryDO.getMaterialBaseInfoId())
|
||||
.eq(MaterialInventory::getBatchNumber, materialInventoryDO.getBatchNumber())
|
||||
.eq(MaterialInventory::getContainerId, materialInventoryDO.getContainerId()));
|
||||
.eq(MaterialInventory::getContainerId, materialInventoryDO.getContainerId())
|
||||
.eq(MaterialInventory::getDelFlag, 1));
|
||||
|
||||
// 如果查询到了库存记录,需要验证货主ID是否匹配
|
||||
if (ObjectUtil.isNotNull(materialInventoryDb) && shipperId != null) {
|
||||
// 验证查询到的库存记录对应的物料基础信息的货主ID是否匹配
|
||||
try {
|
||||
MaterialBaseInfoDO materialBaseInfoDO = new MaterialBaseInfoDO();
|
||||
materialBaseInfoDO.setMaterialBaseInfoId(materialInventoryDb.getMaterialBaseInfoId());
|
||||
List<MaterialBaseInfoPO> materialBaseInfoList = materialBaseInfoService.queryList(materialBaseInfoDO);
|
||||
if (!CollectionUtils.isEmpty(materialBaseInfoList)) {
|
||||
MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoList.get(0);
|
||||
// 如果货主ID不匹配,说明这是不同货主的库存,应该创建新记录
|
||||
if (materialBaseInfoPO.getShipperId() == null || !materialBaseInfoPO.getShipperId().equals(shipperId)) {
|
||||
materialInventoryDb = null; // 设置为null,后续会创建新记录
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果验证失败,记录日志但继续处理(创建新记录)
|
||||
// log.warn("验证库存记录货主ID失败,物料基础信息ID:{},错误:{}", materialInventoryDb.getMaterialBaseInfoId(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNull(materialInventoryDb)){
|
||||
String key = materialInventoryDO.getStorageLocationId() + "_" + materialInventoryDO.getMaterialBaseInfoId()
|
||||
+ "_" + materialInventoryDO.getBatchNumber() + "_" + materialInventoryDO.getMaterialStatusCode();
|
||||
// 生成key时包含货主ID,确保不同货主的库存不会合并
|
||||
String key = (shipperId != null ? shipperId : "null") + "_"
|
||||
+ materialInventoryDO.getStorageLocationId() + "_"
|
||||
+ materialInventoryDO.getMaterialBaseInfoId()
|
||||
+ "_" + materialInventoryDO.getBatchNumber() + "_"
|
||||
+ materialInventoryDO.getMaterialStatusCode();
|
||||
if (ObjectUtil.isNotNull(materialInventoryDO.getContainerId())){
|
||||
key = key + "_" + materialInventoryDO.getContainerId();
|
||||
}
|
||||
|
||||
+67
-3
@@ -29,6 +29,7 @@ import com.mhd.wms.domain.inOrderAbnormal.repository.facade.IInOrderAbnormalServ
|
||||
import com.mhd.wms.domain.inOrderAbnormal.repository.todo.InOrderAbnormalBaseDO;
|
||||
import com.mhd.wms.domain.inventoryStandingDetail.repository.facade.IInventoryStandingDetailService;
|
||||
import com.mhd.wms.domain.inventoryStandingDetail.repository.todo.InventoryStandingDetailDO;
|
||||
import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoService;
|
||||
import com.mhd.wms.domain.materialInventory.entity.MaterialInventory;
|
||||
import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventoryService;
|
||||
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO;
|
||||
@@ -80,6 +81,8 @@ public class StockShelfOrderDomainService {
|
||||
@Autowired
|
||||
private IMaterialInventoryService materialInventoryService;
|
||||
@Autowired
|
||||
private IMaterialBaseInfoService materialBaseInfoService;
|
||||
@Autowired
|
||||
private IInMaterialDetailSerialNumberService inMaterialDetailSerialNumberService;
|
||||
@Autowired
|
||||
private IStockInTaskOrderService stockInTaskOrderService;
|
||||
@@ -372,8 +375,8 @@ public class StockShelfOrderDomainService {
|
||||
updateStockInOrder(stockShelfOrderPO, 5);
|
||||
//上架修改物料库存
|
||||
List<ShelfMaterialDetail> shelfMaterialDetailList = shelfMaterialDetailService.list(new QueryWrapper<ShelfMaterialDetail>().lambda().eq(ShelfMaterialDetail::getShelfOrderNumber, stockShelfOrderPO.getShelfOrderNumber()));
|
||||
//组装上架修改库存参数
|
||||
shelfAddMaterialInventory(shelfMaterialDetailList);
|
||||
//组装上架修改库存参数(传入上架单信息,用于获取货主信息)
|
||||
shelfAddMaterialInventory(shelfMaterialDetailList, stockShelfOrderPO);
|
||||
//修改上架对应的序列号的库存信息
|
||||
updateSerialNumberforInventory(shelfMaterialDetailList);
|
||||
//生成上架追溯记录
|
||||
@@ -408,9 +411,58 @@ public class StockShelfOrderDomainService {
|
||||
* @author ZhouGY
|
||||
* @date 2024/6/19 10:07
|
||||
* @param shelfMaterialDetailList
|
||||
* @param stockShelfOrderPO 上架单信息,用于获取货主信息
|
||||
* @return Boolean
|
||||
*/
|
||||
public void shelfAddMaterialInventory(List<ShelfMaterialDetail> shelfMaterialDetailList){
|
||||
public void shelfAddMaterialInventory(List<ShelfMaterialDetail> shelfMaterialDetailList, StockShelfOrderPO stockShelfOrderPO){
|
||||
// 根据入库单号获取入库单信息,以获取货主信息
|
||||
Long shipperId = null;
|
||||
String shipperCode = null;
|
||||
String shipperName = null;
|
||||
|
||||
if (stockShelfOrderPO != null && StringUtils.isNotBlank(stockShelfOrderPO.getInOrderNumber())) {
|
||||
try {
|
||||
// 根据入库单号查询入库单
|
||||
com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO stockInOrderDO = new com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO();
|
||||
stockInOrderDO.setInOrderNumber(stockShelfOrderPO.getInOrderNumber());
|
||||
List<com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO> stockInOrderList = stockInOrderService.queryList(stockInOrderDO);
|
||||
if (!CollectionUtils.isEmpty(stockInOrderList)) {
|
||||
com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO stockInOrderPO = stockInOrderList.get(0);
|
||||
shipperId = stockInOrderPO.getShipperId();
|
||||
shipperCode = stockInOrderPO.getShipperCode();
|
||||
shipperName = stockInOrderPO.getShipperName();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("根据入库单号获取货主信息失败,入库单号:{},错误:{}", stockShelfOrderPO.getInOrderNumber(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果从入库单获取不到货主信息,尝试从物料基础信息获取
|
||||
if (shipperId == null && !CollectionUtils.isEmpty(shelfMaterialDetailList)) {
|
||||
ShelfMaterialDetail firstDetail = shelfMaterialDetailList.get(0);
|
||||
if (firstDetail.getMaterialBaseInfoId() != null) {
|
||||
try {
|
||||
com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO materialBaseInfoDO = new com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO();
|
||||
materialBaseInfoDO.setMaterialBaseInfoId(firstDetail.getMaterialBaseInfoId());
|
||||
List<com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO> materialBaseInfoList = materialBaseInfoService.queryList(materialBaseInfoDO);
|
||||
if (!CollectionUtils.isEmpty(materialBaseInfoList)) {
|
||||
com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoList.get(0);
|
||||
shipperId = materialBaseInfoPO.getShipperId();
|
||||
shipperCode = materialBaseInfoPO.getShipperCode();
|
||||
shipperName = materialBaseInfoPO.getShipperName();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("根据物料基础信息获取货主信息失败,物料基础信息ID:{},错误:{}", firstDetail.getMaterialBaseInfoId(), e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (shipperId == null) {
|
||||
log.warn("上架时无法获取货主信息,上架单号:{},入库单号:{},将跳过货主信息设置",
|
||||
stockShelfOrderPO != null ? stockShelfOrderPO.getShelfOrderNumber() : null,
|
||||
stockShelfOrderPO != null ? stockShelfOrderPO.getInOrderNumber() : null);
|
||||
}
|
||||
|
||||
List<MaterialInventoryDO> materialInventoryDOList = new ArrayList<>();
|
||||
for (ShelfMaterialDetail shelfMaterialDetail : shelfMaterialDetailList){
|
||||
// 使用shelvesQuantity(本次上架数量)来增加库存
|
||||
@@ -430,6 +482,18 @@ public class StockShelfOrderDomainService {
|
||||
BeanUtils.copyProperties(shelfMaterialDetail, materialInventoryDO);
|
||||
materialInventoryDO.setInventoryQuantity(shelvesQuantity);
|
||||
materialInventoryDO.setAllocationQuantity(shelvesQuantity);
|
||||
|
||||
// 设置货主信息(从入库单或物料基础信息获取)
|
||||
if (shipperId != null) {
|
||||
materialInventoryDO.setShipperId(shipperId);
|
||||
if (StringUtils.isNotBlank(shipperCode)) {
|
||||
materialInventoryDO.setShipperCode(shipperCode);
|
||||
}
|
||||
if (StringUtils.isNotBlank(shipperName)) {
|
||||
materialInventoryDO.setShipperName(shipperName);
|
||||
}
|
||||
}
|
||||
|
||||
materialInventoryDOList.add(materialInventoryDO);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(materialInventoryDOList)) {
|
||||
|
||||
Reference in New Issue
Block a user