PDABUG修改一轮
This commit is contained in:
+10
-9
@@ -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);
|
||||
}
|
||||
|
||||
+49
-25
@@ -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 一致
|
||||
*/
|
||||
|
||||
+5
@@ -41,6 +41,11 @@ public interface IStockOutTaskOrderService extends IService<StockOutTaskOrder>
|
||||
*/
|
||||
public StockOutTaskOrderPO getInfo(Long outTaskOrderId);
|
||||
|
||||
/**
|
||||
* 查询拣货作业单并加行锁,防止并发重复拣货
|
||||
*/
|
||||
public StockOutTaskOrderPO getInfoForUpdate(Long outTaskOrderId);
|
||||
|
||||
/**
|
||||
* @description 生成拣货作业单
|
||||
* @author ZhouGY
|
||||
|
||||
+15
@@ -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
|
||||
|
||||
+5
-3
@@ -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();
|
||||
}
|
||||
|
||||
+86
-72
@@ -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("不存在需要生成上架单的收货记录!");
|
||||
|
||||
+2
-1
@@ -162,7 +162,8 @@ public class TaskPickingMaterialDetailImpl extends ServiceImpl<TaskPickingMateri
|
||||
}
|
||||
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
|
||||
pickingMaterialDetailDO.setUniqueId(taskPickingMaterialDetailDb.getPickingUniqueId());
|
||||
pickingMaterialDetailDO.setPickingQuantity(taskPickingMaterialDetailDO.getPickingQuantity());
|
||||
// 拣货增量用 actualQuantity,picking_quantity += actualQuantity
|
||||
pickingMaterialDetailDO.setPickingQuantity(taskPickingMaterialDetailDO.getActualQuantity() != null ? taskPickingMaterialDetailDO.getActualQuantity() : BigDecimal.ZERO);
|
||||
pickingMaterialDetailList.add(pickingMaterialDetailDO);
|
||||
totalPickingQuantity = totalPickingQuantity.add(taskPickingMaterialDetailDO.getActualQuantity());
|
||||
}
|
||||
|
||||
+16
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user