PDABUG修改一轮

This commit is contained in:
秦鸿展
2026-03-11 16:06:39 +08:00
parent 90136fc654
commit e408266f75
14 changed files with 636 additions and 203 deletions
@@ -311,15 +311,16 @@ public class HandoverTaskOrderDomainService {
inventoryAdjustmentRecord.setFreezeAfterQuantity(newFreezeQuantity);
inventoryAdjustmentRecord.setInventoryBeforeQuantity(oldInventoryQuantity);
inventoryAdjustmentRecord.setInventoryAfterQuantity(newInventoryQuantity);
inventoryAdjustmentRecord.setNetWeight(outMaterialDetail.getTotalNetWeight() == null ? BigDecimal.ZERO : outMaterialDetail.getTotalNetWeight());
inventoryAdjustmentRecord.setGrossWeight(outMaterialDetail.getTotalGrossWeight() == null ? BigDecimal.ZERO : outMaterialDetail.getTotalGrossWeight());
inventoryAdjustmentRecord.setVolume(outMaterialDetail.getTotalVolume() == null ? BigDecimal.ZERO : outMaterialDetail.getTotalVolume());
inventoryAdjustmentRecord.setArea(outMaterialDetail.getTotalArea() == null ? BigDecimal.ZERO : outMaterialDetail.getTotalArea());
inventoryAdjustmentRecord.setAdjustedNetWeight(materialInventoryPO.getNetWeight());
inventoryAdjustmentRecord.setAdjustedGrossWeight(materialInventoryPO.getGrossWeight());
inventoryAdjustmentRecord.setAdjustedVolume(materialInventoryPO.getVolume() );
inventoryAdjustmentRecord.setAdjustedArea(materialInventoryPO.getArea() );
// 调整前:库存数量(净重、毛重、体积、面积)
inventoryAdjustmentRecord.setNetWeight(oldNetWeight);
inventoryAdjustmentRecord.setGrossWeight(oldGrossWeight);
inventoryAdjustmentRecord.setVolume(oldVolume);
inventoryAdjustmentRecord.setArea(oldArea);
// 调整后:库存数量 - 复核时填写的数量
inventoryAdjustmentRecord.setAdjustedNetWeight(newNetWeight);
inventoryAdjustmentRecord.setAdjustedGrossWeight(newGrossWeight);
inventoryAdjustmentRecord.setAdjustedVolume(newVolume);
inventoryAdjustmentRecord.setAdjustedArea(newArea);
inventoryAdjustmentRecordMapper.insert(inventoryAdjustmentRecord);
}
@@ -103,20 +103,9 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
{
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList = receiptMaterialDetailMapper.queryList(receiptMaterialDetailDO);
//回显带上更多属性值
//回显带上更多属性值:始终以物料绑定的批次属性为结构,合并 material_more_detail 中已填写的值
receiptMaterialDetailPOList.forEach(receiptMaterialDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(receiptMaterialDetailPO.getUniqueId());
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
//如果收货单的物料批属性还没存入值,那么需要从批属性表获取
AjaxResult ajaxResult = null;
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(receiptMaterialDetailPO.getMaterialBaseInfoId());
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
}
}
List<MaterialMoreDetailPO> materialMoreDetailList = buildMaterialMoreDetailListByMaterialBinding(receiptMaterialDetailPO);
// 从入库单明细表中获取InvoiceNo、BatchRefNo、SheetRefNo、BoxPalletNo字段的值
fillAttributeValueFromInMaterialDetail(receiptMaterialDetailPO, materialMoreDetailList);
receiptMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
@@ -137,18 +126,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
for(ReceiptMaterialDetailPO materialDetailPO :receiptMaterialDetailPOParentList){
List<ReceiptMaterialDetailPO> children = getChildren(materialDetailPO.getUniqueId(), materialDetailPO.getInUniqueId(), receiptMaterialDetailPOList, 2);
children.forEach(childrenDetailPO -> {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(childrenDetailPO.getUniqueId());
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
//如果收货单的物料批属性还没存入值,那么需要从批属性表获取
AjaxResult ajaxResult = null;
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
}
}
List<MaterialMoreDetailPO> materialMoreDetailList = buildMaterialMoreDetailListByMaterialBinding(childrenDetailPO);
// 从入库单明细表中获取InvoiceNo、BatchRefNo、SheetRefNo、BoxPalletNo字段的值
fillAttributeValueFromInMaterialDetail(childrenDetailPO, materialMoreDetailList);
childrenDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
@@ -176,6 +154,52 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
}
}
/**
* 根据物料绑定的批次属性构建更多属性列表,并合并 material_more_detail 中已填写的值
* 始终以物料绑定为准,确保收货查询时批次属性按物料绑定显示
*/
private List<MaterialMoreDetailPO> buildMaterialMoreDetailListByMaterialBinding(ReceiptMaterialDetailPO receiptMaterialDetailPO) {
List<MaterialMoreDetailPO> result = new ArrayList<>();
Long materialBaseInfoId = receiptMaterialDetailPO != null ? receiptMaterialDetailPO.getMaterialBaseInfoId() : null;
if (materialBaseInfoId == null) {
return result;
}
try {
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(materialBaseInfoId);
if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
return result;
}
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
result = filterAndConvertToMaterialMoreDetail(batchList);
if (CollectionUtils.isEmpty(result)) {
return result;
}
// 合并 material_more_detail 中已填写的 attributeValue(按 batchDetailId 匹配)
Long uniqueId = receiptMaterialDetailPO.getUniqueId();
if (uniqueId != null) {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setMaterialDetailUniqueId(uniqueId);
List<MaterialMoreDetailPO> savedList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
if (!CollectionUtils.isEmpty(savedList)) {
Map<Long, String> batchDetailIdToValue = new HashMap<>();
for (MaterialMoreDetailPO saved : savedList) {
if (saved.getBatchDetailId() != null && StringUtils.isNotBlank(saved.getAttributeValue())) {
batchDetailIdToValue.put(saved.getBatchDetailId(), saved.getAttributeValue());
}
}
for (MaterialMoreDetailPO mpo : result) {
if (mpo.getBatchDetailId() != null && batchDetailIdToValue.containsKey(mpo.getBatchDetailId())) {
mpo.setAttributeValue(batchDetailIdToValue.get(mpo.getBatchDetailId()));
}
}
}
}
} catch (Exception e) {
log.warn("构建物料批次属性失败,materialBaseInfoId{},错误:{}", materialBaseInfoId, e.getMessage());
}
return result;
}
/**
* 过滤 isDisplay=1 的批次属性并转换为 MaterialMoreDetailPO,与 PC 端 getInfo 一致
*/
@@ -41,6 +41,11 @@ public interface IStockOutTaskOrderService extends IService<StockOutTaskOrder>
*/
public StockOutTaskOrderPO getInfo(Long outTaskOrderId);
/**
* 查询拣货作业单并加行锁,防止并发重复拣货
*/
public StockOutTaskOrderPO getInfoForUpdate(Long outTaskOrderId);
/**
* @description 生成拣货作业单
* @author ZhouGY
@@ -1,5 +1,6 @@
package com.mhd.wms.domain.stockOutTaskOrder.repository.persistence;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.common.core.constant.SnowFlakeConstants;
@@ -94,6 +95,20 @@ public class StockOutTaskOrderImpl extends ServiceImpl<StockOutTaskOrderMapper,
return stockOutTaskOrderPO;
}
@Override
public StockOutTaskOrderPO getInfoForUpdate(Long outTaskOrderId) {
StockOutTaskOrder stockOutTaskOrder = this.getOne(new QueryWrapper<StockOutTaskOrder>()
.eq("out_task_order_id", outTaskOrderId)
.eq("del_flag", 1)
.last("FOR UPDATE"));
if (stockOutTaskOrder == null) {
return null;
}
StockOutTaskOrderPO stockOutTaskOrderPO = new StockOutTaskOrderPO();
BeanUtils.copyProperties(stockOutTaskOrder, stockOutTaskOrderPO);
return stockOutTaskOrderPO;
}
/**
* @description 生成拣货作业单
* @author ZhouGY
@@ -269,7 +269,8 @@ public class StockOutTaskOrderDomainService {
if (ObjectUtil.isNull(stockOutTaskOrderDO.getUpdateTime())){
throw new ServiceException("拣货单修改时间不能为空");
}
StockOutTaskOrderPO stockOutTaskOrderPODb = stockOutTaskOrderService.getInfo(stockOutTaskOrderDO.getOutTaskOrderId());
// 加行锁防止并发重复拣货
StockOutTaskOrderPO stockOutTaskOrderPODb = stockOutTaskOrderService.getInfoForUpdate(stockOutTaskOrderDO.getOutTaskOrderId());
if (stockOutTaskOrderPODb == null){
throw new ServiceException("拣货单不存在");
}
@@ -377,8 +378,9 @@ public class StockOutTaskOrderDomainService {
if (ObjectUtil.isNull(stockOutTaskOrderPO)){
throw new ServiceException("部分拣货拣货数量不能为空");
}
pickingQuantity = stockOutTaskOrderPO.getPickingQuantity().add(stockOutTaskOrderPO.getPickingQuantity());
pickingMaterialQuantity = stockOutTaskOrderPO.getPickingMaterialQuantity() + stockOutTaskOrderPO.getPickingMaterialQuantity();
// 本批次增量 + 原已拣货数量,避免重复累加导致拣货数量翻倍
pickingQuantity = (stockOutTaskOrderPODb.getPickingQuantity() != null ? stockOutTaskOrderPODb.getPickingQuantity() : BigDecimal.ZERO).add(stockOutTaskOrderPO.getPickingQuantity() != null ? stockOutTaskOrderPO.getPickingQuantity() : BigDecimal.ZERO);
pickingMaterialQuantity = (stockOutTaskOrderPODb.getPickingMaterialQuantity() != null ? stockOutTaskOrderPODb.getPickingMaterialQuantity() : 0) + (stockOutTaskOrderPO.getPickingMaterialQuantity() != null ? stockOutTaskOrderPO.getPickingMaterialQuantity() : 0);
actualPickingQuantity = stockOutTaskOrderPO.getPickingQuantity();
actualPickingMaterialQuantity = stockOutTaskOrderPO.getPickingMaterialQuantity();
}
@@ -209,11 +209,6 @@ public class StockReceiptOrderDomainService {
List<InMaterialDetailSerialNumberPO> inMaterialDetailSerialNumberPOList = inMaterialDetailSerialNumberService.queryList(inMaterialDetailSerialNumberDO);
Map<Long, List<InMaterialDetailSerialNumberPO>> inMaterialDetailSerialNumberMap = inMaterialDetailSerialNumberPOList.stream()
.collect(Collectors.groupingBy(InMaterialDetailSerialNumberPO::getMaterialDetailUniqueId));
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setOrderNumber(stockReceiptOrderPO.getReceiptOrderNumber());
List<MaterialMoreDetailPO> materialMoreDetailPOList = iMaterialMoreDetailService.queryList(materialMoreDetailDO);
Map<Long, List<MaterialMoreDetailPO>> materialMoreDetailMap = materialMoreDetailPOList.stream()
.collect(Collectors.groupingBy(MaterialMoreDetailPO::getMaterialDetailUniqueId));
receiptMaterialDetailPOList.forEach(receiptMaterialDetailPO -> {
//子集(level 2 的真实子项),PDA 端不添加 parent_copy,与 PC 端一致,避免主项重复展示
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOChildrenList = receiptMaterialDetailPO.getChildren();
@@ -225,14 +220,12 @@ public class StockReceiptOrderDomainService {
} else {
receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(new ArrayList<>());
}
List<MaterialMoreDetailPO> materialMoreDetailChildrenList = materialMoreDetailMap.get(receiptMaterialDetailPOChildren.getUniqueId());
if (!CollectionUtils.isEmpty(materialMoreDetailChildrenList)) {
receiptMaterialDetailPOChildren.setMaterialMoreDetailList(materialMoreDetailChildrenList);
} else if (CollectionUtils.isEmpty(receiptMaterialDetailPOChildren.getMaterialMoreDetailList())) {
// material_more_detail 表无记录时,queryListChildren 已填充 attributeValue;仅当子项本身无批次属性时才从物料获取
// queryListChildren 已按物料绑定构建批次属性并合并 material_more_detail 的值,不再用 materialMoreDetailMap 覆盖,避免批次属性与物料绑定不一致
if (CollectionUtils.isEmpty(receiptMaterialDetailPOChildren.getMaterialMoreDetailList())) {
receiptMaterialDetailPOChildren.setMaterialMoreDetailList(getMaterialMoreDetail(receiptMaterialDetailPOChildren));
}
// 否则保留 queryListChildren 已填充的 materialMoreDetailList(含 BatchRefNo、SheetRefNo、BoxPalletNo 等 attributeValue
// 子行计划数量不需要显示
receiptMaterialDetailPOChildren.setQuantity(null);
});
} else {
// 主项无子项时(点击分批收货前):确保主项也有批次属性,否则 PDA 不显示
@@ -868,57 +861,57 @@ public class StockReceiptOrderDomainService {
stockShelfOrderDO.setStatus(1);
List<ShelfMaterialDetailDO> shelfMaterialDetailDOList = new ArrayList<>();
stockReceiptOrderDO.getMaterialDetailList().forEach(receiptMaterialDetailDO -> {
// 如果已收货数量为0,跳过该明细,不生成上架单明细任务
if (receiptMaterialDetailDO.getReceiptQuantity() == null ||
receiptMaterialDetailDO.getReceiptQuantity().compareTo(BigDecimal.ZERO) <= 0) {
boolean parentHasReceipt = receiptMaterialDetailDO.getReceiptQuantity() != null
&& receiptMaterialDetailDO.getReceiptQuantity().compareTo(BigDecimal.ZERO) > 0;
boolean hasChildrenWithReceipt = receiptMaterialDetailDO.getChildren() != null
&& !receiptMaterialDetailDO.getChildren().isEmpty()
&& receiptMaterialDetailDO.getChildren().stream().anyMatch(c ->
c.getReceiptQuantity() != null && c.getReceiptQuantity().compareTo(BigDecimal.ZERO) > 0);
// 主项和子项均无收货数量时跳过
if (!parentHasReceipt && !hasChildrenWithReceipt) {
return;
}
ShelfMaterialDetailDO shelfMaterialDetailDO = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(receiptMaterialDetailDO, shelfMaterialDetailDO);
shelfMaterialDetailDO.setQuantity(receiptMaterialDetailDO.getReceiptQuantity());
shelfMaterialDetailDO.setInUniqueId(receiptMaterialDetailDO.getInUniqueId());
shelfMaterialDetailDO.setReceiptUniqueId(receiptMaterialDetailDO.getUniqueId());
// 传递生产日期、过期日期、存货日期、Batch Ref NO's、Sheet Ref NO's、箱号/卡板号、扩展属性1-4
shelfMaterialDetailDO.setProductionDate(receiptMaterialDetailDO.getProductionDate());
shelfMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getTotalArea());
shelfMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getTotalVolume());
shelfMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getTotalNetWeight());
shelfMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getTotalGrossWeight());
shelfMaterialDetailDO.setExpiryDate(receiptMaterialDetailDO.getExpiryDate());
shelfMaterialDetailDO.setInventoryDate(receiptMaterialDetailDO.getInventoryDate());
shelfMaterialDetailDO.setBatchRefNo(receiptMaterialDetailDO.getBatchRefNo());
shelfMaterialDetailDO.setSheetRefNo(receiptMaterialDetailDO.getSheetRefNo());
shelfMaterialDetailDO.setBoxPalletNo(receiptMaterialDetailDO.getBoxPalletNo());
shelfMaterialDetailDO.setExtAttr1(receiptMaterialDetailDO.getExtAttr1());
shelfMaterialDetailDO.setExtAttr2(receiptMaterialDetailDO.getExtAttr2());
// extAttr3和extAttr4在ReceiptMaterialDetailDO中是String类型,在ShelfMaterialDetailDO中是Date类型,需要转换
if (receiptMaterialDetailDO.getExtAttr3() != null && !receiptMaterialDetailDO.getExtAttr3().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDO.setExtAttr3(sdf.parse(receiptMaterialDetailDO.getExtAttr3()));
} catch (Exception e) {
// 如果转换失败,不设置该字段
// 主项有收货数量时,生成一条上架明细
if (parentHasReceipt) {
ShelfMaterialDetailDO shelfMaterialDetailDO = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(receiptMaterialDetailDO, shelfMaterialDetailDO);
shelfMaterialDetailDO.setQuantity(receiptMaterialDetailDO.getReceiptQuantity());
shelfMaterialDetailDO.setInUniqueId(receiptMaterialDetailDO.getInUniqueId());
shelfMaterialDetailDO.setReceiptUniqueId(receiptMaterialDetailDO.getUniqueId());
shelfMaterialDetailDO.setProductionDate(receiptMaterialDetailDO.getProductionDate());
shelfMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getTotalArea());
shelfMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getTotalVolume());
shelfMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getTotalNetWeight());
shelfMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getTotalGrossWeight());
shelfMaterialDetailDO.setExpiryDate(receiptMaterialDetailDO.getExpiryDate());
shelfMaterialDetailDO.setInventoryDate(receiptMaterialDetailDO.getInventoryDate());
shelfMaterialDetailDO.setBatchRefNo(receiptMaterialDetailDO.getBatchRefNo());
shelfMaterialDetailDO.setSheetRefNo(receiptMaterialDetailDO.getSheetRefNo());
shelfMaterialDetailDO.setBoxPalletNo(receiptMaterialDetailDO.getBoxPalletNo());
shelfMaterialDetailDO.setExtAttr1(receiptMaterialDetailDO.getExtAttr1());
shelfMaterialDetailDO.setExtAttr2(receiptMaterialDetailDO.getExtAttr2());
if (receiptMaterialDetailDO.getExtAttr3() != null && !receiptMaterialDetailDO.getExtAttr3().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDO.setExtAttr3(sdf.parse(receiptMaterialDetailDO.getExtAttr3()));
} catch (Exception e) { }
}
}
if (receiptMaterialDetailDO.getExtAttr4() != null && !receiptMaterialDetailDO.getExtAttr4().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDO.setExtAttr4(sdf.parse(receiptMaterialDetailDO.getExtAttr4()));
} catch (Exception e) {
// 如果转换失败,不设置该字段
if (receiptMaterialDetailDO.getExtAttr4() != null && !receiptMaterialDetailDO.getExtAttr4().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDO.setExtAttr4(sdf.parse(receiptMaterialDetailDO.getExtAttr4()));
} catch (Exception e) { }
}
shelfMaterialDetailDOList.add(shelfMaterialDetailDO);
}
// 处理子项:如果子项的已收货数量为0,跳过该子项
if (receiptMaterialDetailDO.getChildren() != null && !receiptMaterialDetailDO.getChildren().isEmpty()) {
// 子项有收货数量时,每个子项生成一条上架明细(一明细两子项 → 两条上架明细)
if (hasChildrenWithReceipt && receiptMaterialDetailDO.getChildren() != null) {
receiptMaterialDetailDO.getChildren().forEach(receiptMaterialDetailDOChildren -> {
// 如果子项的已收货数量为0,跳过该子项,不生成上架单明细任务
if (receiptMaterialDetailDOChildren.getReceiptQuantity() == null ||
receiptMaterialDetailDOChildren.getReceiptQuantity().compareTo(BigDecimal.ZERO) <= 0) {
return;
}
ShelfMaterialDetailDO shelfMaterialDetailDOChildren = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(receiptMaterialDetailDOChildren, shelfMaterialDetailDOChildren);
shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity());
@@ -928,7 +921,6 @@ public class StockReceiptOrderDomainService {
shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailDOChildren.getTotalVolume());
shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailDOChildren.getTotalNetWeight());
shelfMaterialDetailDOChildren.setTotalGrossWeight(receiptMaterialDetailDOChildren.getTotalGrossWeight());
// 传递生产日期、过期日期、存货日期、Batch Ref NO's、Sheet Ref NO's、箱号/卡板号、扩展属性1-4
shelfMaterialDetailDOChildren.setProductionDate(receiptMaterialDetailDOChildren.getProductionDate());
shelfMaterialDetailDOChildren.setExpiryDate(receiptMaterialDetailDOChildren.getExpiryDate());
shelfMaterialDetailDOChildren.setInventoryDate(receiptMaterialDetailDOChildren.getInventoryDate());
@@ -937,27 +929,21 @@ public class StockReceiptOrderDomainService {
shelfMaterialDetailDOChildren.setBoxPalletNo(receiptMaterialDetailDOChildren.getBoxPalletNo());
shelfMaterialDetailDOChildren.setExtAttr1(receiptMaterialDetailDOChildren.getExtAttr1());
shelfMaterialDetailDOChildren.setExtAttr2(receiptMaterialDetailDOChildren.getExtAttr2());
// extAttr3和extAttr4在ReceiptMaterialDetailDO中是String类型,在ShelfMaterialDetailDO中是Date类型,需要转换
if (receiptMaterialDetailDOChildren.getExtAttr3() != null && !receiptMaterialDetailDOChildren.getExtAttr3().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDOChildren.setExtAttr3(sdf.parse(receiptMaterialDetailDOChildren.getExtAttr3()));
} catch (Exception e) {
// 如果转换失败,不设置该字段
}
} catch (Exception e) { }
}
if (receiptMaterialDetailDOChildren.getExtAttr4() != null && !receiptMaterialDetailDOChildren.getExtAttr4().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDOChildren.setExtAttr4(sdf.parse(receiptMaterialDetailDOChildren.getExtAttr4()));
} catch (Exception e) {
// 如果转换失败,不设置该字段
}
} catch (Exception e) { }
}
shelfMaterialDetailDOList.add(shelfMaterialDetailDOChildren);
});
}
shelfMaterialDetailDOList.add(shelfMaterialDetailDO);
});
stockShelfOrderDO.setMaterialDetailList(shelfMaterialDetailDOList);
stockShelfOrderDO.setMaterialQuantity(shelfMaterialDetailDOList.size());
@@ -1055,18 +1041,46 @@ public class StockReceiptOrderDomainService {
shelfMaterialDetailDOList.add(shelfMaterialDetailDO);
receiptQuantity = receiptQuantity.add(receiptMaterialDetailPO.getReceiptQuantity());
}
//
// for (ReceiptMaterialDetailPO receiptMaterialDetailPOChildren : receiptMaterialDetailPO.getChildren()) {
// if (2 == receiptMaterialDetailPO.getGenStockShelf()) {
// ShelfMaterialDetailDO shelfMaterialDetailDOChildren = new ShelfMaterialDetailDO();
// BeanUtils.copyProperties(receiptMaterialDetailPOChildren, shelfMaterialDetailDOChildren);
// shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailPOChildren.getReceiptQuantity());
// shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPOChildren.getInUniqueId());
// shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPOChildren.getUniqueId());
// shelfMaterialDetailDOList.add(shelfMaterialDetailDOChildren);
// receiptQuantity = receiptQuantity.add(receiptMaterialDetailPO.getReceiptQuantity());
// }
// }
// 子项有收货数量时,每个子项生成一条上架明细(一明细两子项 → 两条上架明细)
if (2 == receiptMaterialDetailPO.getGenStockShelf() && !CollectionUtils.isEmpty(receiptMaterialDetailPO.getChildren())) {
for (ReceiptMaterialDetailPO receiptMaterialDetailPOChildren : receiptMaterialDetailPO.getChildren()) {
if (receiptMaterialDetailPOChildren.getReceiptQuantity() == null ||
receiptMaterialDetailPOChildren.getReceiptQuantity().compareTo(BigDecimal.ZERO) <= 0) {
continue;
}
ShelfMaterialDetailDO shelfMaterialDetailDOChildren = new ShelfMaterialDetailDO();
BeanUtils.copyProperties(receiptMaterialDetailPOChildren, shelfMaterialDetailDOChildren);
shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailPOChildren.getReceiptQuantity());
shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPO.getInUniqueId());
shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPO.getUniqueId());
shelfMaterialDetailDOChildren.setTotalArea(receiptMaterialDetailPOChildren.getTotalArea());
shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailPOChildren.getTotalVolume());
shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailPOChildren.getTotalNetWeight());
shelfMaterialDetailDOChildren.setTotalGrossWeight(receiptMaterialDetailPOChildren.getTotalGrossWeight());
shelfMaterialDetailDOChildren.setProductionDate(receiptMaterialDetailPOChildren.getProductionDate());
shelfMaterialDetailDOChildren.setExpiryDate(receiptMaterialDetailPOChildren.getExpiryDate());
shelfMaterialDetailDOChildren.setInventoryDate(receiptMaterialDetailPOChildren.getInventoryDate());
shelfMaterialDetailDOChildren.setBatchRefNo(receiptMaterialDetailPOChildren.getBatchRefNo());
shelfMaterialDetailDOChildren.setSheetRefNo(receiptMaterialDetailPOChildren.getSheetRefNo());
shelfMaterialDetailDOChildren.setBoxPalletNo(receiptMaterialDetailPOChildren.getBoxPalletNo());
shelfMaterialDetailDOChildren.setExtAttr1(receiptMaterialDetailPOChildren.getExtAttr1());
shelfMaterialDetailDOChildren.setExtAttr2(receiptMaterialDetailPOChildren.getExtAttr2());
if (receiptMaterialDetailPOChildren.getExtAttr3() != null && !receiptMaterialDetailPOChildren.getExtAttr3().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDOChildren.setExtAttr3(sdf.parse(receiptMaterialDetailPOChildren.getExtAttr3()));
} catch (Exception e) { }
}
if (receiptMaterialDetailPOChildren.getExtAttr4() != null && !receiptMaterialDetailPOChildren.getExtAttr4().isEmpty()) {
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
shelfMaterialDetailDOChildren.setExtAttr4(sdf.parse(receiptMaterialDetailPOChildren.getExtAttr4()));
} catch (Exception e) { }
}
shelfMaterialDetailDOList.add(shelfMaterialDetailDOChildren);
receiptQuantity = receiptQuantity.add(receiptMaterialDetailPOChildren.getReceiptQuantity());
}
}
}
if(shelfMaterialDetailDOList.isEmpty()){
throw new ServiceException("不存在需要生成上架单的收货记录!");
@@ -162,7 +162,8 @@ public class TaskPickingMaterialDetailImpl extends ServiceImpl<TaskPickingMateri
}
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
pickingMaterialDetailDO.setUniqueId(taskPickingMaterialDetailDb.getPickingUniqueId());
pickingMaterialDetailDO.setPickingQuantity(taskPickingMaterialDetailDO.getPickingQuantity());
// 拣货增量用 actualQuantitypicking_quantity += actualQuantity
pickingMaterialDetailDO.setPickingQuantity(taskPickingMaterialDetailDO.getActualQuantity() != null ? taskPickingMaterialDetailDO.getActualQuantity() : BigDecimal.ZERO);
pickingMaterialDetailList.add(pickingMaterialDetailDO);
totalPickingQuantity = totalPickingQuantity.add(taskPickingMaterialDetailDO.getActualQuantity());
}
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import com.mhd.wms.domain.materialMoreDetail.repository.po.MaterialMoreDetailPO;
import com.mhd.wms.domain.outMaterialDetailSerialNumber.repository.po.OutMaterialDetailSerialNumberPO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -204,4 +205,19 @@ public class TaskPickingMaterialDetailPO extends BaseVOEntity {
@ApiModelProperty("序列号")
private List<OutMaterialDetailSerialNumberPO> materialDetailSerialNumberList;
@ApiModelProperty("更多属性(批次属性,按物料绑定动态显示)")
private List<MaterialMoreDetailPO> materialMoreDetailList;
@ApiModelProperty("总净重(KG)")
private BigDecimal totalNetWeight;
@ApiModelProperty("总毛重(KG)")
private BigDecimal totalGrossWeight;
@ApiModelProperty("总体积(CBM)")
private BigDecimal totalVolume;
@ApiModelProperty("总面积(SQM)")
private BigDecimal totalArea;
}