diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index b304fb3a6..d3333ed15 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -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) { // 如果获取仓库信息失败,记录日志但不影响查询(允许查询所有仓库) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java index 370aa48a4..22acbc228 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockShelfOrder/StockShelfOrderApplicationService.java @@ -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) { // 如果获取仓库信息失败,记录日志但不影响查询(允许查询所有仓库) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java index c641472fb..9b61417b0 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockShelfOrder/service/StockShelfOrderDomainService.java @@ -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 detailDOList = stockShelfOrderDO.getMaterialDetailList(); + if (CollectionUtils.isEmpty(detailDOList)) { + return; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // 收集所有需要同步的入库单明细 uniqueId(inUniqueId) + Set 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 shelvesQuantityMap = new HashMap<>(); + Map shelvesStatusMap = new HashMap<>(); + + for (Long inUniqueId : inUniqueIdSet) { + ShelfMaterialDetailDO queryDO = new ShelfMaterialDetailDO(); + queryDO.setInUniqueId(inUniqueId); + queryDO.setLevel(1); // 只查询一级明细 + List 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().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 diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/shelfMaterialDetail/ShelfMaterialDetailDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/shelfMaterialDetail/ShelfMaterialDetailDTO.java index 7c3d7b986..54b6726a8 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/shelfMaterialDetail/ShelfMaterialDetailDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/shelfMaterialDetail/ShelfMaterialDetailDTO.java @@ -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; } \ No newline at end of file diff --git a/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml b/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml index b2a731d32..8cba1db60 100644 --- a/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml +++ b/mhd_wms/src/main/resources/mapper/shelfMaterialDetail/ShelfMaterialDetailMapper.xml @@ -67,7 +67,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select material_detail_id, organization_id, organization_name, top_organization_id, unique_id, shelf_order_number, material_base_info_id, material_code, material_name, bar_code, quantity, already_shelves_quantity, shelves_quantity, shelves_status, pack_id, pack_code, pack_name, pack_detail_id, unit_code, unit_name, unit_number, material_warehouse_control_id, serial_number_manage, quality_inspection_manage, quality_inspection_stage, quality_inspection_rule, quality_inspection_ratio, quality_inspection_term, quality_inspection_results, allow_overcharge, overcharge_ratio, batch_number, material_status_code, material_status_name, distribute_rule_id, distribute_rule_code, distribute_rule_name, container_id, container_code, container_type, container_type_name, warehouse_id, warehouse_code, warehouse_name, storage_section_id, storage_code, storage_name, storage_location_id, storage_location_code, storage_location_name, level, parent_unique_id, in_unique_id, receipt_unique_id, allow_modify, remark, batch_ref_no, sheet_ref_no, box_pallet_no, ext_attr_1, ext_attr_2, production_date, expiry_date, inventory_date, ext_attr_3, ext_attr_4, create_time, create_by, create_by_name, update_time, update_by, update_by_name, del_flag,total_net_weight,total_gross_weight,total_volume,total_area from shelf_material_detail + select material_detail_id, organization_id, organization_name, top_organization_id, unique_id, shelf_order_number, material_base_info_id, material_code, material_name, bar_code, quantity, already_shelves_quantity, shelves_quantity, shelves_status, pack_id, pack_code, pack_name, + CASE + WHEN pack_detail_id IS NULL OR TRIM(pack_detail_id) = '' THEN NULL + ELSE CAST(pack_detail_id AS BIGINT) + END as pack_detail_id, unit_code, unit_name, unit_number, material_warehouse_control_id, serial_number_manage, quality_inspection_manage, quality_inspection_stage, quality_inspection_rule, quality_inspection_ratio, quality_inspection_term, quality_inspection_results, allow_overcharge, overcharge_ratio, batch_number, material_status_code, material_status_name, distribute_rule_id, distribute_rule_code, distribute_rule_name, container_id, container_code, container_type, container_type_name, warehouse_id, warehouse_code, warehouse_name, storage_section_id, storage_code, storage_name, storage_location_id, storage_location_code, storage_location_name, level, parent_unique_id, in_unique_id, receipt_unique_id, allow_modify, remark, batch_ref_no, sheet_ref_no, box_pallet_no, ext_attr_1, ext_attr_2, production_date, expiry_date, inventory_date, ext_attr_3, ext_attr_4, create_time, create_by, create_by_name, update_time, update_by, update_by_name, del_flag,total_net_weight,total_gross_weight,total_volume,total_area from shelf_material_detail