入库单明细上架数量,上架修改
This commit is contained in:
+2
-7
@@ -99,15 +99,10 @@ public class StockReceiptOrderApplicationService {
|
||||
try {
|
||||
AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
|
||||
if (associationWarehouseCacheDO != null) {
|
||||
if (associationWarehouseCacheDO.getWarehouseId() != null) {
|
||||
// 如果前端没有传仓库ID,则使用关联仓库ID;前端传了则以前端为准
|
||||
if (stockReceiptOrderDO.getWarehouseId() == null && associationWarehouseCacheDO.getWarehouseId() != null) {
|
||||
stockReceiptOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
|
||||
}
|
||||
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseCode())) {
|
||||
stockReceiptOrderDO.setWarehouseCode(associationWarehouseCacheDO.getWarehouseCode());
|
||||
}
|
||||
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseName())) {
|
||||
stockReceiptOrderDO.setWarehouseName(associationWarehouseCacheDO.getWarehouseName());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果获取仓库信息失败,记录日志但不影响查询(允许查询所有仓库)
|
||||
|
||||
+2
-7
@@ -105,15 +105,10 @@ public class StockShelfOrderApplicationService {
|
||||
try {
|
||||
AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
|
||||
if (associationWarehouseCacheDO != null) {
|
||||
if (associationWarehouseCacheDO.getWarehouseId() != null) {
|
||||
// 如果前端没有传仓库ID,则使用关联仓库ID;前端传了则以前端为准
|
||||
if (stockShelfOrderDO.getWarehouseId() == null && associationWarehouseCacheDO.getWarehouseId() != null) {
|
||||
stockShelfOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
|
||||
}
|
||||
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseCode())) {
|
||||
stockShelfOrderDO.setWarehouseCode(associationWarehouseCacheDO.getWarehouseCode());
|
||||
}
|
||||
if (StringUtils.isNotBlank(associationWarehouseCacheDO.getWarehouseName())) {
|
||||
stockShelfOrderDO.setWarehouseName(associationWarehouseCacheDO.getWarehouseName());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果获取仓库信息失败,记录日志但不影响查询(允许查询所有仓库)
|
||||
|
||||
+90
@@ -22,6 +22,8 @@ import com.mhd.wms.domain.containerUsageRecord.repository.facade.IContainerUsage
|
||||
import com.mhd.wms.domain.containerUsageRecord.repository.todo.ContainerUsageRecordDO;
|
||||
import com.mhd.wms.domain.deliveTask.repository.facade.IDeliveTaskService;
|
||||
import com.mhd.wms.domain.deliveTask.repository.todo.DeliveTaskDO;
|
||||
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
|
||||
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
|
||||
import com.mhd.wms.domain.inMaterialDetailSerialNumber.repository.facade.IInMaterialDetailSerialNumberService;
|
||||
import com.mhd.wms.domain.inMaterialDetailSerialNumber.repository.po.InMaterialDetailSerialNumberPO;
|
||||
import com.mhd.wms.domain.inMaterialDetailSerialNumber.repository.todo.InMaterialDetailSerialNumberDO;
|
||||
@@ -93,6 +95,8 @@ public class StockShelfOrderDomainService {
|
||||
@Autowired
|
||||
private IMaterialBaseInfoService materialBaseInfoService;
|
||||
@Autowired
|
||||
private IInMaterialDetailService inMaterialDetailService;
|
||||
@Autowired
|
||||
private IInMaterialDetailSerialNumberService inMaterialDetailSerialNumberService;
|
||||
@Autowired
|
||||
private IStockInTaskOrderService stockInTaskOrderService;
|
||||
@@ -299,6 +303,8 @@ public class StockShelfOrderDomainService {
|
||||
genContainerUsageRecord(stockShelfOrderDO);
|
||||
//修改物料明细信息
|
||||
shelfMaterialDetailService.batchShelfUpdate(stockShelfOrderDO);
|
||||
//同步更新入库单明细的上架数量/上架状态
|
||||
syncShelvesQuantityToInMaterialDetail(stockShelfOrderDO);
|
||||
//生成 上架作业单
|
||||
genStockShelfTaskOrderByUpShelf(stockShelfOrderDO);
|
||||
//修改入库单状态: 1-已创建 2-已审核 3-收货中 4-上架中 5-已入库
|
||||
@@ -309,6 +315,90 @@ public class StockShelfOrderDomainService {
|
||||
return updateStockShelfOrder(stockShelfOrderDO, stockShelfOrderPO);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 上架数量同步更新到入库单明细中(累计值)
|
||||
* @author Auto
|
||||
* @date 2026/2/11
|
||||
*/
|
||||
private void syncShelvesQuantityToInMaterialDetail(StockShelfOrderDO stockShelfOrderDO) {
|
||||
List<ShelfMaterialDetailDO> detailDOList = stockShelfOrderDO.getMaterialDetailList();
|
||||
if (CollectionUtils.isEmpty(detailDOList)) {
|
||||
return;
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
|
||||
// 收集所有需要同步的入库单明细 uniqueId(inUniqueId)
|
||||
Set<Long> inUniqueIdSet = new HashSet<>();
|
||||
for (ShelfMaterialDetailDO d : detailDOList) {
|
||||
// 只处理一级明细(子级是拆分库位的记录,不作为入库单明细的累计口径)
|
||||
if (d.getLevel() != null && d.getLevel() == 2) {
|
||||
continue;
|
||||
}
|
||||
if (d.getInUniqueId() != null) {
|
||||
inUniqueIdSet.add(d.getInUniqueId());
|
||||
}
|
||||
}
|
||||
if (inUniqueIdSet.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 从数据库查询所有相关的上架明细,按 inUniqueId 汇总本次上架数量(shelvesQuantity)
|
||||
// 这样可以确保即使一个入库单明细对应多个上架明细(多次上架),也能正确同步
|
||||
Map<Long, BigDecimal> shelvesQuantityMap = new HashMap<>();
|
||||
Map<Long, Integer> shelvesStatusMap = new HashMap<>();
|
||||
|
||||
for (Long inUniqueId : inUniqueIdSet) {
|
||||
ShelfMaterialDetailDO queryDO = new ShelfMaterialDetailDO();
|
||||
queryDO.setInUniqueId(inUniqueId);
|
||||
queryDO.setLevel(1); // 只查询一级明细
|
||||
List<ShelfMaterialDetailPO> shelfDetailPOList = shelfMaterialDetailService.queryList(queryDO);
|
||||
|
||||
if (!CollectionUtils.isEmpty(shelfDetailPOList)) {
|
||||
BigDecimal totalShelvesQty = BigDecimal.ZERO;
|
||||
Integer maxShelvesStatus = null;
|
||||
|
||||
for (ShelfMaterialDetailPO po : shelfDetailPOList) {
|
||||
// 汇总本次上架数量(shelvesQuantity)
|
||||
BigDecimal shelvesQty = po.getShelvesQuantity();
|
||||
if (shelvesQty != null && shelvesQty.compareTo(BigDecimal.ZERO) > 0) {
|
||||
totalShelvesQty = totalShelvesQty.add(shelvesQty);
|
||||
}
|
||||
|
||||
// 取最大的上架状态(3-已上架 > 2-上架中 > 1-待上架)
|
||||
Integer status = po.getShelvesStatus();
|
||||
if (status != null) {
|
||||
if (maxShelvesStatus == null || status > maxShelvesStatus) {
|
||||
maxShelvesStatus = status;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
shelvesQuantityMap.put(inUniqueId, totalShelvesQty);
|
||||
if (maxShelvesStatus != null) {
|
||||
shelvesStatusMap.put(inUniqueId, maxShelvesStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新入库单明细的上架数量和上架状态
|
||||
Date now = new Date();
|
||||
for (Long inUniqueId : inUniqueIdSet) {
|
||||
BigDecimal shelvesQty = shelvesQuantityMap.getOrDefault(inUniqueId, BigDecimal.ZERO);
|
||||
Integer shelvesStatus = shelvesStatusMap.get(inUniqueId);
|
||||
|
||||
// 仅更新与上架相关字段
|
||||
inMaterialDetailService.update(null, new UpdateWrapper<InMaterialDetail>().lambda()
|
||||
.set(InMaterialDetail::getShelvesQuantity, shelvesQty)
|
||||
.set(shelvesStatus != null, InMaterialDetail::getShelvesStatus, shelvesStatus)
|
||||
.set(InMaterialDetail::getUpdateBy, loginUser.getUserid())
|
||||
.set(InMaterialDetail::getUpdateByName, loginUser.getUsername())
|
||||
.set(InMaterialDetail::getUpdateTime, now)
|
||||
.eq(InMaterialDetail::getUniqueId, inUniqueId)
|
||||
.eq(StringUtils.isNotBlank(stockShelfOrderDO.getInOrderNumber()), InMaterialDetail::getInOrderNumber, stockShelfOrderDO.getInOrderNumber())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 设置上架单上架需要更新的数据数据
|
||||
* @author ZhouGY
|
||||
|
||||
+16
@@ -313,4 +313,20 @@ public class ShelfMaterialDetailDTO extends BaseVOEntity {
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@Excel(name = "ExtAttr4", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date extAttr4;
|
||||
|
||||
@ApiModelProperty("总净重(KG)")
|
||||
@Excel(name = "总净重(KG)")
|
||||
private BigDecimal totalNetWeight;
|
||||
|
||||
@ApiModelProperty("总毛重(KG)")
|
||||
@Excel(name = "总毛重(KG)")
|
||||
private BigDecimal totalGrossWeight;
|
||||
|
||||
@ApiModelProperty("总体积(CBM)")
|
||||
@Excel(name = "总体积(CBM)")
|
||||
private BigDecimal totalVolume;
|
||||
|
||||
@ApiModelProperty("总面积(SQM)")
|
||||
@Excel(name = "总面积(SQM)")
|
||||
private BigDecimal totalArea;
|
||||
}
|
||||
Reference in New Issue
Block a user