PC收货修改

This commit is contained in:
秦鸿展
2026-04-01 13:46:05 +08:00
parent 11196e7cf5
commit 2fe868bc51
3 changed files with 219 additions and 61 deletions
@@ -1,12 +1,19 @@
package com.mhd.wms.interfaces.assember.stockReceiptOrder;
import cn.hutool.json.JSONUtil;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.wms.domain.materialMoreDetail.repository.todo.MaterialMoreDetailDO;
import com.mhd.wms.domain.receiptMaterialDetail.repository.todo.ReceiptMaterialDetailDO;
import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO;
import com.mhd.wms.interfaces.dto.materialMoreDetail.MaterialMoreDetailDTO;
import com.mhd.wms.interfaces.dto.receiptMaterialDetail.ReceiptMaterialDetailDTO;
import com.mhd.wms.interfaces.dto.stockReceiptOrder.StockReceiptOrderDTO;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 收货单Assembler
*
@@ -30,11 +37,68 @@ public class StockReceiptOrderAssembler {
}
/**
* 转换实体
*/
* 编辑/收货提交:DTO → DO。
* Jackson/Hutool 对嵌套 {@code materialDetailList[].children} 与 {@code MaterialMoreDetailDTO}→DO 的中转易丢子行,
* 导致子项 {@code receiptQuantity} 为 null、不生成收货明细。此处显式递归拷贝,保证子树完整。
*/
public StockReceiptOrderDO toDOByEdit(StockReceiptOrderDTO stockReceiptOrderDTO) {
// 拷贝
return JSONUtil.toBean(JSONUtil.toJsonStr(stockReceiptOrderDTO), StockReceiptOrderDO.class);
StockReceiptOrderDO target = new StockReceiptOrderDO();
String[] topIgnore = appendIgnores(IgnoreNullUtil.getNullPropertyNames(stockReceiptOrderDTO), "materialDetailList");
BeanUtils.copyProperties(stockReceiptOrderDTO, target, topIgnore);
target.setMaterialDetailList(convertMaterialDetailRows(stockReceiptOrderDTO.getMaterialDetailList()));
return target;
}
private static String[] appendIgnores(String[] base, String... extra) {
if (extra == null || extra.length == 0) {
return base;
}
String[] out = Arrays.copyOf(base, base.length + extra.length);
System.arraycopy(extra, 0, out, base.length, extra.length);
return out;
}
private static List<ReceiptMaterialDetailDO> convertMaterialDetailRows(List<ReceiptMaterialDetailDTO> src) {
if (src == null) {
return null;
}
List<ReceiptMaterialDetailDO> list = new ArrayList<>(src.size());
for (ReceiptMaterialDetailDTO row : src) {
list.add(convertOneMaterialDetail(row));
}
return list;
}
private static ReceiptMaterialDetailDO convertOneMaterialDetail(ReceiptMaterialDetailDTO src) {
if (src == null) {
return null;
}
ReceiptMaterialDetailDO t = new ReceiptMaterialDetailDO();
String[] ignore = appendIgnores(IgnoreNullUtil.getNullPropertyNames(src),
"children", "materialMoreDetailList");
BeanUtils.copyProperties(src, t, ignore);
t.setMaterialMoreDetailList(convertMoreDetailList(src.getMaterialMoreDetailList()));
t.setChildren(convertMaterialDetailRows(src.getChildren()));
if (src.getMaterialDetailSerialNumberList() != null) {
t.setMaterialDetailSerialNumberList(new ArrayList<>(src.getMaterialDetailSerialNumberList()));
}
return t;
}
private static List<MaterialMoreDetailDO> convertMoreDetailList(List<MaterialMoreDetailDTO> src) {
if (src == null) {
return null;
}
List<MaterialMoreDetailDO> list = new ArrayList<>(src.size());
for (MaterialMoreDetailDTO m : src) {
if (m == null) {
continue;
}
MaterialMoreDetailDO d = new MaterialMoreDetailDO();
BeanUtils.copyProperties(m, d, IgnoreNullUtil.getNullPropertyNames(m));
list.add(d);
}
return list;
}
}