PDA上架修改
This commit is contained in:
+3
-3
@@ -1024,10 +1024,10 @@ public class StockReceiptOrderApplicationService {
|
||||
if (firstChildBaseInfoId != null && parentBaseInfoId != null && !firstChildBaseInfoId.equals(parentBaseInfoId)) {
|
||||
return false;
|
||||
}
|
||||
// 6. PDA 未传 materialDetailId/uniqueId 时:getInfoByApp 的 parent_copy 总是 children 第一条,
|
||||
// 真实子项通常会有 materialDetailId,故无 id 时视为 parent_copy 并合并
|
||||
// 6. 子项无 materialDetailId 且无 uniqueId:可能是新创建的子项(同一次收 250+250),不能视为 parent_copy
|
||||
// 收货 getInfoByApp 不添加 parent_copy,parent_copy 必有 materialDetailId 或 uniqueId 与主项相同
|
||||
if (firstChildId == null && firstChildUniqueId == null) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
+171
-34
@@ -337,36 +337,152 @@ public class StockShelfOrderApplicationService {
|
||||
*/
|
||||
public Boolean upShelfByApp(StockShelfOrderDO stockReceiptOrderDO){
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOList = stockReceiptOrderDO.getMaterialDetailList();
|
||||
shelfMaterialDetailDOList.forEach(shelfMaterialDetailDO -> {
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList1 = shelfMaterialDetailDO.getChildren();
|
||||
if (shelfMaterialDetailDOChildrenList1 != null && !shelfMaterialDetailDOChildrenList1.isEmpty() && shelfMaterialDetailDOChildrenList1.size() > 0) {
|
||||
ShelfMaterialDetailDO shelfMaterialDetailDOChildren = null;
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList11 = shelfMaterialDetailDO.getChildren().stream()
|
||||
.filter(p -> p.getLevel() != null && 1 == p.getLevel())
|
||||
.collect(Collectors.toList());
|
||||
if (shelfMaterialDetailDOChildrenList11 != null && !shelfMaterialDetailDOChildrenList11.isEmpty() && shelfMaterialDetailDOChildrenList11.size() > 0) shelfMaterialDetailDOChildren = shelfMaterialDetailDOChildrenList11.get(0);
|
||||
if (shelfMaterialDetailDOChildren != null) {
|
||||
shelfMaterialDetailDO.setMaterialDetailId(shelfMaterialDetailDOChildren.getMaterialDetailId());
|
||||
shelfMaterialDetailDO.setShelvesQuantity(shelfMaterialDetailDOChildren.getShelvesQuantity());
|
||||
shelfMaterialDetailDO.setWarehouseId(shelfMaterialDetailDOChildren.getWarehouseId());
|
||||
shelfMaterialDetailDO.setStorageSectionId(shelfMaterialDetailDOChildren.getStorageSectionId());
|
||||
shelfMaterialDetailDO.setStorageLocationId(shelfMaterialDetailDOChildren.getStorageLocationId());
|
||||
shelfMaterialDetailDO.setContainerId(shelfMaterialDetailDOChildren.getContainerId());
|
||||
shelfMaterialDetailDO.setLevel(shelfMaterialDetailDOChildren.getLevel());
|
||||
shelfMaterialDetailDO.setMaterialDetailSerialNumberList(shelfMaterialDetailDOChildren.getMaterialDetailSerialNumberList());
|
||||
boolean firstItemHadChildrenBefore = !CollectionUtils.isEmpty(shelfMaterialDetailDOList)
|
||||
&& !CollectionUtils.isEmpty(shelfMaterialDetailDOList.get(0).getChildren());
|
||||
// PDA 平铺结构转父子结构(与收货一致)
|
||||
ensureFirstItemAsParentForShelf(stockReceiptOrderDO);
|
||||
if (firstItemHadChildrenBefore) {
|
||||
// 主项子项结构:将 children 第一条(parent_copy)赋值给主项并删除,与收货 assignFirstChildToParentAndRemove 一致
|
||||
assignFirstChildToParentAndRemoveForShelf(stockReceiptOrderDO);
|
||||
} else {
|
||||
// 非 getInfoByApp 结构:取第一个子项赋值给主项,保留其余子项
|
||||
shelfMaterialDetailDOList = stockReceiptOrderDO.getMaterialDetailList();
|
||||
shelfMaterialDetailDOList.forEach(shelfMaterialDetailDO -> {
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList1 = shelfMaterialDetailDO.getChildren();
|
||||
if (shelfMaterialDetailDOChildrenList1 != null && !shelfMaterialDetailDOChildrenList1.isEmpty()) {
|
||||
ShelfMaterialDetailDO firstChild = shelfMaterialDetailDOChildrenList1.get(0);
|
||||
shelfMaterialDetailDO.setMaterialDetailId(firstChild.getMaterialDetailId());
|
||||
shelfMaterialDetailDO.setShelvesQuantity(firstChild.getShelvesQuantity());
|
||||
shelfMaterialDetailDO.setWarehouseId(firstChild.getWarehouseId());
|
||||
shelfMaterialDetailDO.setStorageSectionId(firstChild.getStorageSectionId());
|
||||
shelfMaterialDetailDO.setStorageLocationId(firstChild.getStorageLocationId());
|
||||
shelfMaterialDetailDO.setContainerId(firstChild.getContainerId());
|
||||
shelfMaterialDetailDO.setLevel(firstChild.getLevel());
|
||||
shelfMaterialDetailDO.setMaterialDetailSerialNumberList(firstChild.getMaterialDetailSerialNumberList());
|
||||
// 保留其余子项(从索引1开始),统一设为 level 2
|
||||
List<ShelfMaterialDetailDO> restChildren = new ArrayList<>();
|
||||
for (int i = 1; i < shelfMaterialDetailDOChildrenList1.size(); i++) {
|
||||
ShelfMaterialDetailDO c = shelfMaterialDetailDOChildrenList1.get(i);
|
||||
c.setLevel(2);
|
||||
restChildren.add(c);
|
||||
}
|
||||
shelfMaterialDetailDO.setChildren(restChildren);
|
||||
}
|
||||
//只留二级
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildrenList2 = shelfMaterialDetailDOChildrenList1.stream()
|
||||
.filter(p -> p.getLevel() != null && 2 == p.getLevel())
|
||||
.collect(Collectors.toList());
|
||||
shelfMaterialDetailDO.setChildren(shelfMaterialDetailDOChildrenList2);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
//上架装配参数
|
||||
StockShelfOrderDO assembleStockShelfOrderDO = assembleParamByShelf(stockReceiptOrderDO);
|
||||
return stockShelfOrderDomainService.upShelf(assembleStockShelfOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA 上架回传时,将 materialDetailList 的第一项作为主项(level 1),其余项作为其子项(level 2)
|
||||
* 仅当数据库中第二项为 level 2(真实子项)时才转换,与收货 ensureFirstItemAsParent 逻辑一致
|
||||
*/
|
||||
private void ensureFirstItemAsParentForShelf(StockShelfOrderDO stockShelfOrderDO) {
|
||||
List<ShelfMaterialDetailDO> list = stockShelfOrderDO.getMaterialDetailList();
|
||||
if (CollectionUtils.isEmpty(list) || list.size() <= 1) {
|
||||
return;
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(list.get(0).getChildren())) {
|
||||
return;
|
||||
}
|
||||
StockShelfOrderPO stockShelfOrderPO = stockShelfOrderDomainService.getInfo(stockShelfOrderDO.getShelfOrderId());
|
||||
if (stockShelfOrderPO == null) {
|
||||
return;
|
||||
}
|
||||
ShelfMaterialDetailDO shelfMaterialDetailDOByQuery = new ShelfMaterialDetailDO();
|
||||
shelfMaterialDetailDOByQuery.setShelfOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
|
||||
List<ShelfMaterialDetailPO> shelfMaterialDetailPODbList = shelfMaterialDetailDomainService.queryList(shelfMaterialDetailDOByQuery);
|
||||
Map<Long, ShelfMaterialDetailPO> dbMap = shelfMaterialDetailPODbList.stream()
|
||||
.collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
|
||||
Map<Long, ShelfMaterialDetailPO> dbMapByUniqueId = shelfMaterialDetailPODbList.stream()
|
||||
.filter(po -> po.getUniqueId() != null)
|
||||
.collect(Collectors.toMap(ShelfMaterialDetailPO::getUniqueId, Function.identity()));
|
||||
ShelfMaterialDetailDO first = list.get(0);
|
||||
ShelfMaterialDetailPO firstPO = dbMap.get(first.getMaterialDetailId());
|
||||
if (firstPO == null && first.getUniqueId() != null) {
|
||||
firstPO = dbMapByUniqueId.get(first.getUniqueId());
|
||||
}
|
||||
if (firstPO == null || firstPO.getUniqueId() == null) {
|
||||
return;
|
||||
}
|
||||
ShelfMaterialDetailDO second = list.get(1);
|
||||
if (second != null) {
|
||||
ShelfMaterialDetailPO secondPO = dbMap.get(second.getMaterialDetailId());
|
||||
if (secondPO == null && second.getUniqueId() != null) {
|
||||
secondPO = dbMapByUniqueId.get(second.getUniqueId());
|
||||
}
|
||||
if (secondPO != null && secondPO.getLevel() != null && secondPO.getLevel() == 1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Long parentUniqueId = firstPO.getUniqueId();
|
||||
List<ShelfMaterialDetailDO> children = new ArrayList<>();
|
||||
for (int i = 1; i < list.size(); i++) {
|
||||
ShelfMaterialDetailDO child = list.get(i);
|
||||
child.setLevel(2);
|
||||
child.setParentUniqueId(parentUniqueId);
|
||||
children.add(child);
|
||||
}
|
||||
first.setLevel(1);
|
||||
first.setChildren(children);
|
||||
List<ShelfMaterialDetailDO> newList = new ArrayList<>();
|
||||
newList.add(first);
|
||||
stockShelfOrderDO.setMaterialDetailList(newList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上架时:将 children 中第一条(parent_copy)的值赋给主项,并删除第一条;与收货 assignFirstChildToParentAndRemove 一致。
|
||||
* getInfoByApp 有子项时会将 parent_copy 作为 children 第一条,PDA 提交时需将其值回填主项并移除。
|
||||
*/
|
||||
private void assignFirstChildToParentAndRemoveForShelf(StockShelfOrderDO stockShelfOrderDO) {
|
||||
List<ShelfMaterialDetailDO> list = stockShelfOrderDO.getMaterialDetailList();
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
for (ShelfMaterialDetailDO parent : list) {
|
||||
List<ShelfMaterialDetailDO> children = parent.getChildren();
|
||||
if (CollectionUtils.isEmpty(children)) {
|
||||
continue;
|
||||
}
|
||||
ShelfMaterialDetailDO firstChild = children.get(0);
|
||||
if (!isShelfParentCopy(parent, firstChild)) {
|
||||
continue;
|
||||
}
|
||||
BeanUtils.copyProperties(firstChild, parent, "children", "parentUniqueId", "uniqueId", "materialDetailId");
|
||||
List<ShelfMaterialDetailDO> newChildren = new ArrayList<>();
|
||||
for (int i = 1; i < children.size(); i++) {
|
||||
ShelfMaterialDetailDO c = children.get(i);
|
||||
c.setLevel(2);
|
||||
newChildren.add(c);
|
||||
}
|
||||
parent.setChildren(newChildren);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断第一条子项是否为 parent_copy(主项拷贝)。与主项同 materialDetailId/uniqueId 则为 parent_copy。
|
||||
*/
|
||||
private boolean isShelfParentCopy(ShelfMaterialDetailDO parent, ShelfMaterialDetailDO firstChild) {
|
||||
Long parentId = parent.getMaterialDetailId();
|
||||
Long firstChildId = firstChild.getMaterialDetailId();
|
||||
Long parentUniqueId = parent.getUniqueId();
|
||||
Long firstChildUniqueId = firstChild.getUniqueId();
|
||||
if (parentId != null && parentId.equals(firstChildId)) {
|
||||
return true;
|
||||
}
|
||||
if (parentUniqueId != null && parentUniqueId.equals(firstChildUniqueId)) {
|
||||
return true;
|
||||
}
|
||||
if (firstChildId != null && parentId != null && !firstChildId.equals(parentId)) {
|
||||
return false;
|
||||
}
|
||||
if (firstChildUniqueId != null && parentUniqueId != null && !firstChildUniqueId.equals(parentUniqueId)) {
|
||||
return false;
|
||||
}
|
||||
return firstChildId == null && firstChildUniqueId == null;
|
||||
}
|
||||
|
||||
private MaterialInventory getParam(ShelfMaterialDetailDO shelfMaterialDetailDO, List<String> fieldNames,Long shipperId){
|
||||
MaterialInventory param = new MaterialInventory();
|
||||
@@ -471,13 +587,22 @@ public class StockShelfOrderApplicationService {
|
||||
ShelfMaterialDetailDO shelfMaterialDetailDOByQuery = new ShelfMaterialDetailDO();
|
||||
shelfMaterialDetailDOByQuery.setShelfOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
|
||||
List<ShelfMaterialDetailPO> shelfMaterialDetailPODbList = shelfMaterialDetailDomainService.queryList(shelfMaterialDetailDOByQuery);
|
||||
Map<Long, ShelfMaterialDetailPO> receiptMaterialDetailDbMap = shelfMaterialDetailPODbList.stream().collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
|
||||
Map<Long, ShelfMaterialDetailPO> shelfMaterialDetailDbMap = shelfMaterialDetailPODbList.stream().collect(Collectors.toMap(ShelfMaterialDetailPO::getMaterialDetailId, Function.identity()));
|
||||
Map<Long, ShelfMaterialDetailPO> shelfMaterialDetailDbMapByUniqueId = shelfMaterialDetailPODbList.stream()
|
||||
.filter(po -> po.getUniqueId() != null)
|
||||
.collect(Collectors.toMap(ShelfMaterialDetailPO::getUniqueId, Function.identity()));
|
||||
BigDecimal totalActualQuantity = BigDecimal.ZERO;//上架单当前作业收货数
|
||||
int totalActualShelfMaterialQuantity = 0;//上架单收货物料种数
|
||||
List<ShelfMaterialDetailDO> returnShelfMaterialDetailDOList = new ArrayList<>();
|
||||
for (ShelfMaterialDetailDO shelfMaterialDetailDO : stockShelfOrderDO.getMaterialDetailList()){
|
||||
//设置物料更多属性信息
|
||||
ShelfMaterialDetailPO shelfMaterialDetailPO = receiptMaterialDetailDbMap.get(shelfMaterialDetailDO.getMaterialDetailId());
|
||||
//设置物料更多属性信息:优先用 materialDetailId 查找,若为空则用 uniqueId 查找(兼容 PDA 只传 uniqueId 的场景,与收货一致)
|
||||
ShelfMaterialDetailPO shelfMaterialDetailPO = shelfMaterialDetailDbMap.get(shelfMaterialDetailDO.getMaterialDetailId());
|
||||
if (shelfMaterialDetailPO == null && shelfMaterialDetailDO.getUniqueId() != null) {
|
||||
shelfMaterialDetailPO = shelfMaterialDetailDbMapByUniqueId.get(shelfMaterialDetailDO.getUniqueId());
|
||||
if (shelfMaterialDetailPO != null) {
|
||||
shelfMaterialDetailDO.setMaterialDetailId(shelfMaterialDetailPO.getMaterialDetailId());
|
||||
}
|
||||
}
|
||||
if (shelfMaterialDetailPO == null){
|
||||
throw new ServiceException("物料明细不存在");
|
||||
}
|
||||
@@ -512,32 +637,44 @@ public class StockShelfOrderApplicationService {
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOChildList = shelfMaterialDetailDO.getChildren();
|
||||
if (!CollectionUtils.isEmpty(shelfMaterialDetailDOChildList)){
|
||||
for (ShelfMaterialDetailDO shelfMaterialDetailDOChild : shelfMaterialDetailDOChildList){
|
||||
ShelfMaterialDetailPO shelfMaterialDetailPOChildDb = receiptMaterialDetailDbMap.get(shelfMaterialDetailDOChild.getMaterialDetailId());
|
||||
ShelfMaterialDetailPO shelfMaterialDetailPOChildDb = shelfMaterialDetailDbMap.get(shelfMaterialDetailDOChild.getMaterialDetailId());
|
||||
if (shelfMaterialDetailPOChildDb == null && shelfMaterialDetailDOChild.getUniqueId() != null) {
|
||||
shelfMaterialDetailPOChildDb = shelfMaterialDetailDbMapByUniqueId.get(shelfMaterialDetailDOChild.getUniqueId());
|
||||
if (shelfMaterialDetailPOChildDb != null) {
|
||||
shelfMaterialDetailDOChild.setMaterialDetailId(shelfMaterialDetailPOChildDb.getMaterialDetailId());
|
||||
}
|
||||
}
|
||||
BigDecimal childShelvesQty = shelfMaterialDetailDOChild.getShelvesQuantity() != null ? shelfMaterialDetailDOChild.getShelvesQuantity() : BigDecimal.ZERO;
|
||||
if (shelfMaterialDetailPOChildDb != null){
|
||||
// 子项已存在:累加上架数量,并加入返回列表供 batchShelfUpdate 更新(与收货一致,避免重复提交/漏更新)
|
||||
actualQuantity = actualQuantity.add(childShelvesQty);
|
||||
ShelfMaterialDetailDO returnShelfMaterialDetailDOChild = new ShelfMaterialDetailDO();
|
||||
BeanUtils.copyProperties(shelfMaterialDetailPOChildDb, returnShelfMaterialDetailDOChild);
|
||||
BeanUtils.copyProperties(shelfMaterialDetailDOChild, returnShelfMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(shelfMaterialDetailDOChild));
|
||||
setStorageLocationInfo(returnShelfMaterialDetailDOChild);
|
||||
returnShelfMaterialDetailDOChild.setAllowModify(2);
|
||||
returnShelfMaterialDetailDOChild.setLevel(2);
|
||||
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
|
||||
returnShelfMaterialDetailDOChild.setActualQuantity(childShelvesQty);
|
||||
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
|
||||
continue;
|
||||
}
|
||||
ShelfMaterialDetailDO returnShelfMaterialDetailDOChild = new ShelfMaterialDetailDO();
|
||||
BeanUtils.copyProperties(shelfMaterialDetailPO, returnShelfMaterialDetailDOChild, "materialDetailId","createBy","createByName","createTime",
|
||||
"updateBy","updateByName","updateTime");
|
||||
BeanUtils.copyProperties(shelfMaterialDetailDOChild, returnShelfMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(shelfMaterialDetailDOChild));
|
||||
//设置上架信息
|
||||
setStorageLocationInfo(shelfMaterialDetailDOChild);
|
||||
//设置容器信息
|
||||
// setContainerInfo(returnShelfMaterialDetailDOChild);
|
||||
//上架后 设置该记录不允许被修改
|
||||
returnShelfMaterialDetailDOChild.setAllowModify(2);
|
||||
returnShelfMaterialDetailDOChild.setMaterialDetailSerialNumberList(shelfMaterialDetailDOChild.getMaterialDetailSerialNumberList());
|
||||
returnShelfMaterialDetailDOChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
||||
returnShelfMaterialDetailDOChild.setLevel(2);
|
||||
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
|
||||
//是否开启了序列号管理
|
||||
if (shelfMaterialDetailPO.getSerialNumberManage() == 1){
|
||||
if (CollectionUtils.isEmpty(shelfMaterialDetailPO.getMaterialDetailSerialNumberList())){
|
||||
throw new ServiceException("物料【" + shelfMaterialDetailPO.getMaterialName() + "】开启了序列号管理的序列号不能为空");
|
||||
}
|
||||
}
|
||||
returnShelfMaterialDetailDOChild.setMaterialDetailSerialNumberList(shelfMaterialDetailDO.getMaterialDetailSerialNumberList());
|
||||
//设置子项的实际数量(等于上架数量)
|
||||
returnShelfMaterialDetailDOChild.setActualQuantity(returnShelfMaterialDetailDOChild.getShelvesQuantity());
|
||||
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
|
||||
actualQuantity = actualQuantity.add(returnShelfMaterialDetailDOChild.getShelvesQuantity());
|
||||
|
||||
+93
-9
@@ -20,6 +20,8 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.mapper.ShelfMaterialDet
|
||||
import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailPO;
|
||||
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
|
||||
import com.mhd.wms.domain.stockShelfOrder.repository.todo.StockShelfOrderDO;
|
||||
import com.mhd.common.core.utils.StringUtils;
|
||||
import com.mhd.system.api.domain.BatchDetailFeignPO;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -66,19 +68,19 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
|
||||
public List<ShelfMaterialDetailPO> queryListChildren(ShelfMaterialDetailDO shelfMaterialDetailDO) {
|
||||
List<ShelfMaterialDetailPO> shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO);
|
||||
|
||||
//回显带上更多属性值(批次标签)
|
||||
//回显带上更多属性值(批次标签):根据物料绑定的批次属性动态显示,与收货一致
|
||||
shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> {
|
||||
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
|
||||
materialMoreDetailDO.setMaterialDetailUniqueId(shelfMaterialDetailPO.getUniqueId());
|
||||
List<MaterialMoreDetailPO> materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO);
|
||||
//如果上架单的物料批属性还没存入值,那么需要从批属性表获取
|
||||
AjaxResult ajaxResult = null;
|
||||
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
|
||||
ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
|
||||
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId());
|
||||
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
materialMoreDetailList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), MaterialMoreDetailPO.class);
|
||||
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
|
||||
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
|
||||
}
|
||||
}
|
||||
fillAttributeValueFromShelfMaterialDetail(shelfMaterialDetailPO, materialMoreDetailList);
|
||||
shelfMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
|
||||
});
|
||||
|
||||
@@ -92,14 +94,14 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
|
||||
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());
|
||||
AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId());
|
||||
if (ajaxResult != null && "200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
materialMoreDetailList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), MaterialMoreDetailPO.class);
|
||||
List<BatchDetailFeignPO> batchList = JSON.parseArray(JSONObject.toJSONString(ajaxResult.get("data")), BatchDetailFeignPO.class);
|
||||
materialMoreDetailList = filterAndConvertToMaterialMoreDetail(batchList);
|
||||
}
|
||||
}
|
||||
fillAttributeValueFromShelfMaterialDetail(childrenDetailPO, materialMoreDetailList);
|
||||
childrenDetailPO.setMaterialMoreDetailList(materialMoreDetailList);
|
||||
});
|
||||
materialDetailPO.setChildren(children);
|
||||
@@ -107,6 +109,88 @@ public class ShelfMaterialDetailImpl extends ServiceImpl<ShelfMaterialDetailMapp
|
||||
return receiptMaterialDetailPOParentList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤 isDisplay=1 的批次属性并转换为 MaterialMoreDetailPO,与收货/PC 端一致
|
||||
*/
|
||||
private List<MaterialMoreDetailPO> filterAndConvertToMaterialMoreDetail(List<BatchDetailFeignPO> batchList) {
|
||||
List<MaterialMoreDetailPO> result = new ArrayList<>();
|
||||
if (CollectionUtils.isEmpty(batchList)) {
|
||||
return result;
|
||||
}
|
||||
for (BatchDetailFeignPO po : batchList) {
|
||||
if (po.getIsDisplay() == null || po.getIsDisplay() != 1) {
|
||||
continue;
|
||||
}
|
||||
MaterialMoreDetailPO mpo = new MaterialMoreDetailPO();
|
||||
mpo.setBatchId(po.getBatchId());
|
||||
mpo.setBatchDetailId(po.getBatchDetailId());
|
||||
mpo.setBatchLabels(po.getBatchLabels());
|
||||
mpo.setInputControl(po.getInputControl());
|
||||
mpo.setAttributeFormat(po.getAttributeFormat());
|
||||
mpo.setAttributeOption(po.getAttributeOption());
|
||||
result.add(mpo);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从上架明细中获取收货数量、重量、体积、面积、批次属性值并填充到 materialMoreDetailList 的 attributeValue
|
||||
*/
|
||||
private void fillAttributeValueFromShelfMaterialDetail(ShelfMaterialDetailPO shelfMaterialDetailPO, List<MaterialMoreDetailPO> materialMoreDetailList) {
|
||||
if (CollectionUtils.isEmpty(materialMoreDetailList)) {
|
||||
return;
|
||||
}
|
||||
for (MaterialMoreDetailPO materialMoreDetail : materialMoreDetailList) {
|
||||
String attributeOption = materialMoreDetail.getAttributeOption();
|
||||
String batchLabels = materialMoreDetail.getBatchLabels();
|
||||
if (materialMoreDetail.getAttributeValue() != null && !materialMoreDetail.getAttributeValue().trim().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
String refVal = null;
|
||||
if ("InvoiceNo".equalsIgnoreCase(attributeOption) || "Invoice No".equalsIgnoreCase(batchLabels) || "发票号".equals(batchLabels)) {
|
||||
refVal = shelfMaterialDetailPO.getExtAttr1();
|
||||
} else if ("BatchRefNo".equalsIgnoreCase(attributeOption) || "Batch Ref NO's".equalsIgnoreCase(batchLabels) || "批次参考号".equals(batchLabels)) {
|
||||
refVal = shelfMaterialDetailPO.getBatchRefNo();
|
||||
} else if ("SheetRefNo".equalsIgnoreCase(attributeOption) || "Sheet Ref NO's".equalsIgnoreCase(batchLabels) || "单据参考号".equals(batchLabels)) {
|
||||
refVal = shelfMaterialDetailPO.getSheetRefNo();
|
||||
} else if ("BoxPalletNo".equalsIgnoreCase(attributeOption) || "Box No./Pallet No.".equalsIgnoreCase(batchLabels) || "箱号/卡板号".equals(batchLabels)) {
|
||||
refVal = shelfMaterialDetailPO.getBoxPalletNo();
|
||||
}
|
||||
if (refVal != null) {
|
||||
materialMoreDetail.setAttributeValue(refVal);
|
||||
} else if (StringUtils.isNotBlank(batchLabels)) {
|
||||
String val = null;
|
||||
switch (batchLabels.trim()) {
|
||||
case "总净重":
|
||||
case "净重(KG)":
|
||||
case "净重":
|
||||
val = shelfMaterialDetailPO.getTotalNetWeight() != null ? shelfMaterialDetailPO.getTotalNetWeight().toString() : null;
|
||||
break;
|
||||
case "总毛重":
|
||||
case "毛重(KG)":
|
||||
case "毛重":
|
||||
val = shelfMaterialDetailPO.getTotalGrossWeight() != null ? shelfMaterialDetailPO.getTotalGrossWeight().toString() : null;
|
||||
break;
|
||||
case "总体积":
|
||||
case "体积(CBM)":
|
||||
case "体积":
|
||||
val = shelfMaterialDetailPO.getTotalVolume() != null ? shelfMaterialDetailPO.getTotalVolume().toString() : null;
|
||||
break;
|
||||
case "总面积":
|
||||
case "面积(SQM)":
|
||||
case "面积":
|
||||
val = shelfMaterialDetailPO.getTotalArea() != null ? shelfMaterialDetailPO.getTotalArea().toString() : null;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (val != null) {
|
||||
materialMoreDetail.setAttributeValue(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<ShelfMaterialDetailPO> getChildren(Long parentUniqueId, List<ShelfMaterialDetailPO> shelfMaterialDetailPOList, Integer maxLevel){
|
||||
List<ShelfMaterialDetailPO> childrenCityList = shelfMaterialDetailPOList.stream().filter(materialDetailPO -> parentUniqueId.equals(materialDetailPO.getParentUniqueId())).collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(childrenCityList)){
|
||||
|
||||
+2
-1
@@ -985,7 +985,8 @@ public class StockReceiptOrderDomainService {
|
||||
//获取收货单明细
|
||||
ReceiptMaterialDetailDO receiptMaterialDetailDO = new ReceiptMaterialDetailDO();
|
||||
receiptMaterialDetailDO.setReceiptOrderNumber(stockReceiptOrderPO.getReceiptOrderNumber());
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOS = receiptMaterialDetailService.queryList(receiptMaterialDetailDO);
|
||||
// 使用 queryListChildren 获取父子结构,避免重复添加(只添加 level 1 主项,主项 receiptQuantity 已含子项汇总)
|
||||
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOS = receiptMaterialDetailService.queryListChildren(receiptMaterialDetailDO);
|
||||
//上架单明细集合
|
||||
List<ShelfMaterialDetailDO> shelfMaterialDetailDOList = new ArrayList<>();
|
||||
// 批量查询入库单明细,用于获取净重、毛重、体积、面积等字段
|
||||
|
||||
@@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="receiptTaskNumber" column="receipt_task_number" />
|
||||
<result property="shelfOrderNumber" column="shelf_order_number" />
|
||||
<result property="status" column="status" />
|
||||
<result property="receiptQuantity" column="receipt_quantity" />
|
||||
<result property="shelvesQuantity" column="shelves_quantity" />
|
||||
<result property="abnormal" column="abnormal" />
|
||||
<result property="taskDistribution" column="task_distribution" />
|
||||
|
||||
Reference in New Issue
Block a user