合并代码冲突;

This commit is contained in:
王奎兴
2026-04-15 19:30:05 +08:00
parent 22aef1d84d
commit e17216eb7c
3 changed files with 225 additions and 218 deletions
@@ -52,6 +52,7 @@ import org.springframework.stereotype.Service;
import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.StringUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
@@ -90,12 +91,12 @@ public class StockReceiptOrderApplicationService {
private IMaterialBarCodeService materialBarCodeService; private IMaterialBarCodeService materialBarCodeService;
@Autowired @Autowired
private IMaterialGoodsRuleService materialGoodsRuleService; private IMaterialGoodsRuleService materialGoodsRuleService;
@Autowired @Resource
private SystemServiceFeign systemServiceFeign; private SystemServiceFeign systemServiceFeign;
@Autowired @Autowired
private MaterialMoreDetailDomainService materialMoreDetailDomainService; private MaterialMoreDetailDomainService materialMoreDetailDomainService;
@Autowired @Resource
private UserServiceFeign userServiceFeign; private UserServiceFeign userServiceFeign;
@Autowired @Autowired
private IdGenerator idGenerator; private IdGenerator idGenerator;
@@ -300,8 +301,9 @@ public class StockReceiptOrderApplicationService {
stockReceiptOrderPO.setTotalVolume(totalVolume); stockReceiptOrderPO.setTotalVolume(totalVolume);
stockReceiptOrderPO.setTotalArea(totalArea); stockReceiptOrderPO.setTotalArea(totalArea);
// 扁平化明细:将子项收货数据合并到主项(按汇总已收推导状态,见方法内注释) // 扁平化明细:将子项收货数据合并到主项(按汇总已收推导状态,见方法内注释)
flattenMaterialDetailList(receiptMaterialDetailPOList, // flattenMaterialDetailList(receiptMaterialDetailPOList,
stockReceiptOrderPO.getStatus() != null && stockReceiptOrderPO.getStatus() == 3); // stockReceiptOrderPO.getStatus() != null && stockReceiptOrderPO.getStatus() == 3);
flattenMaterialDetailList(receiptMaterialDetailPOList);
// PC 端子项计划数量不展示:递归清空所有子项的 quantity // PC 端子项计划数量不展示:递归清空所有子项的 quantity
clearChildQuantityRecursively(receiptMaterialDetailPOList); clearChildQuantityRecursively(receiptMaterialDetailPOList);
// 计算待收货数量 = 计划数量 - 已收货数量 // 计算待收货数量 = 计划数量 - 已收货数量
@@ -1241,6 +1243,7 @@ public class StockReceiptOrderApplicationService {
* PDA:点击卡片后查询当前计划行下全部分批收货子行(level=2,库表真实数据,不含 getInfoByApp 的 parent_copy)。 * PDA:点击卡片后查询当前计划行下全部分批收货子行(level=2,库表真实数据,不含 getInfoByApp 的 parent_copy)。
*/ */
public List<ReceiptMaterialDetailPO> listLevel2ChildrenByParentForApp(Long receiptOrderId, Long parentMaterialDetailId) { public List<ReceiptMaterialDetailPO> listLevel2ChildrenByParentForApp(Long receiptOrderId, Long parentMaterialDetailId) {
List<ReceiptMaterialDetailPO> receiptMaterialDetailPOS = stockReceiptOrderDomainService.listLevel2ChildrenByParentForApp(receiptOrderId, parentMaterialDetailId);
return stockReceiptOrderDomainService.listLevel2ChildrenByParentForApp(receiptOrderId, parentMaterialDetailId); return stockReceiptOrderDomainService.listLevel2ChildrenByParentForApp(receiptOrderId, parentMaterialDetailId);
} }
@@ -1276,9 +1279,9 @@ public class StockReceiptOrderApplicationService {
/** /**
* PDA:指定计划行(卡片)下分批收货子行列表(level=2),域服务已挂序列号。 * PDA:指定计划行(卡片)下分批收货子行列表(level=2),域服务已挂序列号。
*/ */
public List<ReceiptMaterialDetailPO> listLevel2ChildrenByParentForApp(Long receiptOrderId, Long parentMaterialDetailId) { // public List<ReceiptMaterialDetailPO> listLevel2ChildrenByParentForApp(Long receiptOrderId, Long parentMaterialDetailId) {
return stockReceiptOrderDomainService.listLevel2ChildrenByParentForApp(receiptOrderId, parentMaterialDetailId); // return stockReceiptOrderDomainService.listLevel2ChildrenByParentForApp(receiptOrderId, parentMaterialDetailId);
} // }
/** /**
* PDA 详情:将 total* 覆盖为待收(与 pending* 同值),便于前端仍绑 total* 时展示「计划 − 主项+子项全部已收」。 * PDA 详情:将 total* 覆盖为待收(与 pending* 同值),便于前端仍绑 total* 时展示「计划 − 主项+子项全部已收」。
@@ -1494,9 +1497,9 @@ public class StockReceiptOrderApplicationService {
stockReceiptOrderDO.setPdaSkipInjectBatchChildLine(skipInjectAfterAssign); stockReceiptOrderDO.setPdaSkipInjectBatchChildLine(skipInjectAfterAssign);
stockReceiptOrderDO.setFromPda(true); stockReceiptOrderDO.setFromPda(true);
// assign 后若仍有真实子行,不再 inject(避免与已有子项结构冲突) // assign 后若仍有真实子行,不再 inject(避免与已有子项结构冲突)
boolean skipInjectAfterAssign = firstItemHadChildrenBefore // boolean skipInjectAfterAssign = firstItemHadChildrenBefore
&& !CollectionUtils.isEmpty(stockReceiptOrderDO.getMaterialDetailList()) // && !CollectionUtils.isEmpty(stockReceiptOrderDO.getMaterialDetailList())
&& !CollectionUtils.isEmpty(stockReceiptOrderDO.getMaterialDetailList().get(0).getChildren()); // && !CollectionUtils.isEmpty(stockReceiptOrderDO.getMaterialDetailList().get(0).getChildren());
Map<Long, ReceiptMaterialDetailPO> dbByIdForInject = dbListAll.stream() Map<Long, ReceiptMaterialDetailPO> dbByIdForInject = dbListAll.stream()
.filter(x -> x.getMaterialDetailId() != null) .filter(x -> x.getMaterialDetailId() != null)
.collect(Collectors.toMap(ReceiptMaterialDetailPO::getMaterialDetailId, Function.identity(), (a, b) -> a)); .collect(Collectors.toMap(ReceiptMaterialDetailPO::getMaterialDetailId, Function.identity(), (a, b) -> a));
@@ -1585,27 +1588,27 @@ public class StockReceiptOrderApplicationService {
} }
/** 分批收货:计划数量在 level=1 父行;子行 parent_unique_id 指向父 receipt.unique_id 或 in_unique_id */ /** 分批收货:计划数量在 level=1 父行;子行 parent_unique_id 指向父 receipt.unique_id 或 in_unique_id */
private static ReceiptMaterialDetailPO resolveReceiptPlanParentRow(ReceiptMaterialDetailPO db, // private static ReceiptMaterialDetailPO resolveReceiptPlanParentRow(ReceiptMaterialDetailPO db,
List<ReceiptMaterialDetailPO> dbList) { // List<ReceiptMaterialDetailPO> dbList) {
if (db == null || CollectionUtils.isEmpty(dbList)) { // if (db == null || CollectionUtils.isEmpty(dbList)) {
return db; // return db;
} // }
if (db.getLevel() == null || db.getLevel() == 1) { // if (db.getLevel() == null || db.getLevel() == 1) {
return db; // return db;
} // }
if (db.getLevel() == 2 && db.getParentUniqueId() != null) { // if (db.getLevel() == 2 && db.getParentUniqueId() != null) {
Long puid = db.getParentUniqueId(); // Long puid = db.getParentUniqueId();
for (ReceiptMaterialDetailPO x : dbList) { // for (ReceiptMaterialDetailPO x : dbList) {
if (x == null) { // if (x == null) {
continue; // continue;
} // }
if (puid.equals(x.getUniqueId()) || puid.equals(x.getInUniqueId())) { // if (puid.equals(x.getUniqueId()) || puid.equals(x.getInUniqueId())) {
return x; // return x;
} // }
} // }
} // }
return db; // return db;
} // }
/** 父行自身 + 其下 level=2 子行(parent_unique_id 指向父)的已收数量之和 */ /** 父行自身 + 其下 level=2 子行(parent_unique_id 指向父)的已收数量之和 */
private static BigDecimal sumAlreadyReceiptUnderPlanParent(ReceiptMaterialDetailPO planParent, private static BigDecimal sumAlreadyReceiptUnderPlanParent(ReceiptMaterialDetailPO planParent,
@@ -1635,27 +1638,27 @@ public class StockReceiptOrderApplicationService {
/** /**
* 首笔收货(计划父行及子行累计已收为 0、且尚无 level=2 子行)不拆批;第二笔起再 INSERT 子行。 * 首笔收货(计划父行及子行累计已收为 0、且尚无 level=2 子行)不拆批;第二笔起再 INSERT 子行。
*/ */
private static boolean shouldPdaSplitIntoChildRow(ReceiptMaterialDetailPO dbLine, // private static boolean shouldPdaSplitIntoChildRow(ReceiptMaterialDetailPO dbLine,
List<ReceiptMaterialDetailPO> allDbLines) { // List<ReceiptMaterialDetailPO> allDbLines) {
if (dbLine == null || CollectionUtils.isEmpty(allDbLines)) { // if (dbLine == null || CollectionUtils.isEmpty(allDbLines)) {
return true; // return true;
} // }
ReceiptMaterialDetailPO plan = resolveReceiptPlanParentRow(dbLine, allDbLines); // ReceiptMaterialDetailPO plan = resolveReceiptPlanParentRow(dbLine, allDbLines);
if (plan == null) { // if (plan == null) {
return true; // return true;
} // }
Long uid = plan.getUniqueId(); // Long uid = plan.getUniqueId();
Long inUid = plan.getInUniqueId(); // Long inUid = plan.getInUniqueId();
boolean hasL2 = allDbLines.stream().anyMatch(x -> x != null && x.getLevel() != null && x.getLevel() == 2 // boolean hasL2 = allDbLines.stream().anyMatch(x -> x != null && x.getLevel() != null && x.getLevel() == 2
&& x.getParentUniqueId() != null // && x.getParentUniqueId() != null
&& ((uid != null && uid.equals(x.getParentUniqueId())) // && ((uid != null && uid.equals(x.getParentUniqueId()))
|| (inUid != null && inUid.equals(x.getParentUniqueId())))); // || (inUid != null && inUid.equals(x.getParentUniqueId()))));
if (hasL2) { // if (hasL2) {
return true; // return true;
} // }
BigDecimal sum = sumAlreadyReceiptUnderPlanParent(plan, allDbLines); // BigDecimal sum = sumAlreadyReceiptUnderPlanParent(plan, allDbLines);
return sum.compareTo(BigDecimal.ZERO) > 0; // return sum.compareTo(BigDecimal.ZERO) > 0;
} // }
/** 雪花/长整型 id 相较,避免部分环境下引用类型不一致 */ /** 雪花/长整型 id 相较,避免部分环境下引用类型不一致 */
private static boolean sameLongId(Long a, Long b) { private static boolean sameLongId(Long a, Long b) {
@@ -1720,22 +1723,22 @@ public class StockReceiptOrderApplicationService {
* <p>主行本行必须取传入的 {@code planParent} 上的累计字段,再在列表中只加子行;勿依赖在 {@code dbList} 中再次按 material_detail_id * <p>主行本行必须取传入的 {@code planParent} 上的累计字段,再在列表中只加子行;勿依赖在 {@code dbList} 中再次按 material_detail_id
* 匹配主行,否则 JDBC 类型/映射不一致时会出现「只加子行、主行 100 丢失」。</p> * 匹配主行,否则 JDBC 类型/映射不一致时会出现「只加子行、主行 100 丢失」。</p>
*/ */
private static BigDecimal sumAlreadyReceiptUnderPlanParent(ReceiptMaterialDetailPO planParent, // private static BigDecimal sumAlreadyReceiptUnderPlanParent(ReceiptMaterialDetailPO planParent,
List<ReceiptMaterialDetailPO> dbList) { // List<ReceiptMaterialDetailPO> dbList) {
if (planParent == null || CollectionUtils.isEmpty(dbList)) { // if (planParent == null || CollectionUtils.isEmpty(dbList)) {
return BigDecimal.ZERO; // return BigDecimal.ZERO;
} // }
BigDecimal sum = planParent.getAlreadyReceiptQuantity() != null // BigDecimal sum = planParent.getAlreadyReceiptQuantity() != null
? planParent.getAlreadyReceiptQuantity() : BigDecimal.ZERO; // ? planParent.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
for (ReceiptMaterialDetailPO x : dbList) { // for (ReceiptMaterialDetailPO x : dbList) {
if (x == null || !isLevel2ChildRowUnderPlanParent(planParent, x)) { // if (x == null || !isLevel2ChildRowUnderPlanParent(planParent, x)) {
continue; // continue;
} // }
BigDecimal ar = x.getAlreadyReceiptQuantity() != null ? x.getAlreadyReceiptQuantity() : BigDecimal.ZERO; // BigDecimal ar = x.getAlreadyReceiptQuantity() != null ? x.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
sum = sum.add(ar); // sum = sum.add(ar);
} // }
return sum; // return sum;
} // }
/** 与 {@link #sumAlreadyReceiptUnderPlanParent} 同范围,汇总任意「已收」指标(毛/净重、体积、面积等) */ /** 与 {@link #sumAlreadyReceiptUnderPlanParent} 同范围,汇总任意「已收」指标(毛/净重、体积、面积等) */
private static BigDecimal sumAlreadyMetricUnderPlanParent(ReceiptMaterialDetailPO planParent, private static BigDecimal sumAlreadyMetricUnderPlanParent(ReceiptMaterialDetailPO planParent,
@@ -1779,12 +1782,12 @@ public class StockReceiptOrderApplicationService {
return sum.compareTo(BigDecimal.ZERO) > 0; return sum.compareTo(BigDecimal.ZERO) > 0;
} }
private static boolean isCorruptedStandaloneLineAsLevel2(ReceiptMaterialDetailPO dbLine) { // private static boolean isCorruptedStandaloneLineAsLevel2(ReceiptMaterialDetailPO dbLine) {
if (dbLine == null || dbLine.getLevel() == null || dbLine.getLevel() != 2) { // if (dbLine == null || dbLine.getLevel() == null || dbLine.getLevel() != 2) {
return false; // return false;
} // }
return dbLine.getParentUniqueId() == null || Objects.equals(dbLine.getParentUniqueId(), 0L); // return dbLine.getParentUniqueId() == null || Objects.equals(dbLine.getParentUniqueId(), 0L);
} // }
/** 合成子行挂在计划父行的 uniqueId;误标为 level=2 且无父时,按同物料 level=1 行定位 */ /** 合成子行挂在计划父行的 uniqueId;误标为 level=2 且无父时,按同物料 level=1 行定位 */
private static Long resolveParentUniqueIdForPdaInjectChild(ReceiptMaterialDetailPO dbLine, private static Long resolveParentUniqueIdForPdaInjectChild(ReceiptMaterialDetailPO dbLine,
@@ -1832,140 +1835,140 @@ public class StockReceiptOrderApplicationService {
} }
} }
private static void stripPdaUiParentCopyChildren(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine) { // private static void stripPdaUiParentCopyChildren(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine) {
if (line == null || CollectionUtils.isEmpty(line.getChildren())) { // if (line == null || CollectionUtils.isEmpty(line.getChildren())) {
return; // return;
} // }
Long parentUid = line.getUniqueId() != null ? line.getUniqueId() : (dbLine != null ? dbLine.getUniqueId() : null); // Long parentUid = line.getUniqueId() != null ? line.getUniqueId() : (dbLine != null ? dbLine.getUniqueId() : null);
List<ReceiptMaterialDetailDO> realOnly = new ArrayList<>(); // List<ReceiptMaterialDetailDO> realOnly = new ArrayList<>();
for (ReceiptMaterialDetailDO c : line.getChildren()) { // for (ReceiptMaterialDetailDO c : line.getChildren()) {
if (c == null) { // if (c == null) {
continue; // continue;
} // }
if (parentUid != null && parentUid.equals(c.getUniqueId())) { // if (parentUid != null && parentUid.equals(c.getUniqueId())) {
continue; // continue;
} // }
realOnly.add(c); // realOnly.add(c);
} // }
line.setChildren(realOnly); // line.setChildren(realOnly);
} // }
/** getInfoByApp 挂在 children 里的已落库子行,再次收货时需去掉,否则 inject 误判已有子项 */ /** getInfoByApp 挂在 children 里的已落库子行,再次收货时需去掉,否则 inject 误判已有子项 */
private static void stripPdaExistingDisplayedChildrenForResplit(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine, // private static void stripPdaExistingDisplayedChildrenForResplit(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine,
List<ReceiptMaterialDetailPO> allDbLines) { // List<ReceiptMaterialDetailPO> allDbLines) {
if (line == null || CollectionUtils.isEmpty(line.getChildren()) || dbLine == null || CollectionUtils.isEmpty(allDbLines)) { // if (line == null || CollectionUtils.isEmpty(line.getChildren()) || dbLine == null || CollectionUtils.isEmpty(allDbLines)) {
return; // return;
} // }
Long puid = dbLine.getUniqueId(); // Long puid = dbLine.getUniqueId();
Long pInUid = dbLine.getInUniqueId(); // Long pInUid = dbLine.getInUniqueId();
List<ReceiptMaterialDetailDO> keep = new ArrayList<>(); // List<ReceiptMaterialDetailDO> keep = new ArrayList<>();
for (ReceiptMaterialDetailDO c : line.getChildren()) { // for (ReceiptMaterialDetailDO c : line.getChildren()) {
if (c == null) { // if (c == null) {
continue; // continue;
} // }
Long mid = c.getMaterialDetailId(); // Long mid = c.getMaterialDetailId();
Long cuid = c.getUniqueId(); // Long cuid = c.getUniqueId();
boolean isExistingDbChild = false; // boolean isExistingDbChild = false;
for (ReceiptMaterialDetailPO x : allDbLines) { // for (ReceiptMaterialDetailPO x : allDbLines) {
if (x == null || x.getLevel() == null || x.getLevel() != 2 || x.getParentUniqueId() == null) { // if (x == null || x.getLevel() == null || x.getLevel() != 2 || x.getParentUniqueId() == null) {
continue; // continue;
} // }
boolean parentOk = (puid != null && puid.equals(x.getParentUniqueId())) // boolean parentOk = (puid != null && puid.equals(x.getParentUniqueId()))
|| (pInUid != null && pInUid.equals(x.getParentUniqueId())); // || (pInUid != null && pInUid.equals(x.getParentUniqueId()));
if (!parentOk) { // if (!parentOk) {
continue; // continue;
} // }
if (mid != null && mid.equals(x.getMaterialDetailId())) { // if (mid != null && mid.equals(x.getMaterialDetailId())) {
isExistingDbChild = true; // isExistingDbChild = true;
break; // break;
} // }
if (cuid != null && cuid.equals(x.getUniqueId())) { // if (cuid != null && cuid.equals(x.getUniqueId())) {
isExistingDbChild = true; // isExistingDbChild = true;
break; // break;
} // }
} // }
if (!isExistingDbChild) { // if (!isExistingDbChild) {
keep.add(c); // keep.add(c);
} // }
} // }
line.setChildren(keep); // line.setChildren(keep);
} // }
private static boolean hasPdaInjectMetricIncrement(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine) { // private static boolean hasPdaInjectMetricIncrement(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine) {
if (line == null || dbLine == null) { // if (line == null || dbLine == null) {
return false; // return false;
} // }
BigDecimal dbNet = dbLine.getAlreadyReceiptNetWeight() != null ? dbLine.getAlreadyReceiptNetWeight() : BigDecimal.ZERO; // BigDecimal dbNet = dbLine.getAlreadyReceiptNetWeight() != null ? dbLine.getAlreadyReceiptNetWeight() : BigDecimal.ZERO;
BigDecimal dbGross = dbLine.getAlreadyReceiptGrossWeight() != null ? dbLine.getAlreadyReceiptGrossWeight() : BigDecimal.ZERO; // BigDecimal dbGross = dbLine.getAlreadyReceiptGrossWeight() != null ? dbLine.getAlreadyReceiptGrossWeight() : BigDecimal.ZERO;
BigDecimal dbVol = dbLine.getAlreadyReceiptVolume() != null ? dbLine.getAlreadyReceiptVolume() : BigDecimal.ZERO; // BigDecimal dbVol = dbLine.getAlreadyReceiptVolume() != null ? dbLine.getAlreadyReceiptVolume() : BigDecimal.ZERO;
BigDecimal dbArea = dbLine.getAlreadyReceiptArea() != null ? dbLine.getAlreadyReceiptArea() : BigDecimal.ZERO; // BigDecimal dbArea = dbLine.getAlreadyReceiptArea() != null ? dbLine.getAlreadyReceiptArea() : BigDecimal.ZERO;
return pickThisReceiptMetricIncrement(line.getReceiptNetWeight(), line.getTotalNetWeight(), dbNet).compareTo(BigDecimal.ZERO) > 0 // return pickThisReceiptMetricIncrement(line.getReceiptNetWeight(), line.getTotalNetWeight(), dbNet).compareTo(BigDecimal.ZERO) > 0
|| pickThisReceiptMetricIncrement(line.getReceiptGrossWeight(), line.getTotalGrossWeight(), dbGross).compareTo(BigDecimal.ZERO) > 0 // || pickThisReceiptMetricIncrement(line.getReceiptGrossWeight(), line.getTotalGrossWeight(), dbGross).compareTo(BigDecimal.ZERO) > 0
|| pickThisReceiptMetricIncrement(line.getReceiptVolume(), line.getTotalVolume(), dbVol).compareTo(BigDecimal.ZERO) > 0 // || pickThisReceiptMetricIncrement(line.getReceiptVolume(), line.getTotalVolume(), dbVol).compareTo(BigDecimal.ZERO) > 0
|| pickThisReceiptMetricIncrement(line.getReceiptArea(), line.getTotalArea(), dbArea).compareTo(BigDecimal.ZERO) > 0; // || pickThisReceiptMetricIncrement(line.getReceiptArea(), line.getTotalArea(), dbArea).compareTo(BigDecimal.ZERO) > 0;
} // }
/** /**
* PDA 单次仅传主行(无真实子结构需拆时):按业务可拆成一条 level=2 子行。 * PDA 单次仅传主行(无真实子结构需拆时):按业务可拆成一条 level=2 子行。
* 首笔仅落主行不拆;第二笔起或已有子行再拆。脏主行(误标 level=2)纠正不受「首笔不拆」限制。 * 首笔仅落主行不拆;第二笔起或已有子行再拆。脏主行(误标 level=2)纠正不受「首笔不拆」限制。
*/ */
private void injectPdaFlatReceiptAsSyntheticChild(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine, // private void injectPdaFlatReceiptAsSyntheticChild(ReceiptMaterialDetailDO line, ReceiptMaterialDetailPO dbLine,
List<ReceiptMaterialDetailPO> allDbLines) { // List<ReceiptMaterialDetailPO> allDbLines) {
if (line == null || dbLine == null) { // if (line == null || dbLine == null) {
return; // return;
} // }
stripPdaUiParentCopyChildren(line, dbLine); // stripPdaUiParentCopyChildren(line, dbLine);
stripPdaExistingDisplayedChildrenForResplit(line, dbLine, allDbLines); // stripPdaExistingDisplayedChildrenForResplit(line, dbLine, allDbLines);
if (dbLine.getLevel() != null && dbLine.getLevel() == 2 && !isCorruptedStandaloneLineAsLevel2(dbLine)) { // if (dbLine.getLevel() != null && dbLine.getLevel() == 2 && !isCorruptedStandaloneLineAsLevel2(dbLine)) {
return; // return;
} // }
if (!CollectionUtils.isEmpty(line.getChildren())) { // if (!CollectionUtils.isEmpty(line.getChildren())) {
return; // return;
} // }
if (!shouldPdaSplitIntoChildRow(dbLine, allDbLines) && !isCorruptedStandaloneLineAsLevel2(dbLine)) { // if (!shouldPdaSplitIntoChildRow(dbLine, allDbLines) && !isCorruptedStandaloneLineAsLevel2(dbLine)) {
return; // return;
} // }
BigDecimal rq = line.getReceiptQuantity(); // BigDecimal rq = line.getReceiptQuantity();
boolean hasQty = rq != null && rq.compareTo(BigDecimal.ZERO) > 0; // boolean hasQty = rq != null && rq.compareTo(BigDecimal.ZERO) > 0;
boolean hasMetricBatch = hasPdaInjectMetricIncrement(line, dbLine); // boolean hasMetricBatch = hasPdaInjectMetricIncrement(line, dbLine);
if (!hasQty && !hasMetricBatch) { // if (!hasQty && !hasMetricBatch) {
return; // return;
} // }
ReceiptMaterialDetailDO child = new ReceiptMaterialDetailDO(); // ReceiptMaterialDetailDO child = new ReceiptMaterialDetailDO();
BeanUtils.copyProperties(line, child, "children", "materialDetailId", "uniqueId", "level", "parentUniqueId"); // BeanUtils.copyProperties(line, child, "children", "materialDetailId", "uniqueId", "level", "parentUniqueId");
child.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId)); // child.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
child.setChildren(null); // child.setChildren(null);
child.setLevel(2); // child.setLevel(2);
child.setParentUniqueId(resolveParentUniqueIdForPdaInjectChild(dbLine, allDbLines)); // child.setParentUniqueId(resolveParentUniqueIdForPdaInjectChild(dbLine, allDbLines));
if (hasQty) { // if (hasQty) {
child.setReceiptQuantity(rq); // child.setReceiptQuantity(rq);
} // }
child.setReceiptGrossWeight(line.getReceiptGrossWeight()); // child.setReceiptGrossWeight(line.getReceiptGrossWeight());
child.setReceiptNetWeight(line.getReceiptNetWeight()); // child.setReceiptNetWeight(line.getReceiptNetWeight());
child.setReceiptVolume(line.getReceiptVolume()); // child.setReceiptVolume(line.getReceiptVolume());
child.setReceiptArea(line.getReceiptArea()); // child.setReceiptArea(line.getReceiptArea());
child.setTotalGrossWeight(line.getTotalGrossWeight()); // child.setTotalGrossWeight(line.getTotalGrossWeight());
child.setTotalNetWeight(line.getTotalNetWeight()); // child.setTotalNetWeight(line.getTotalNetWeight());
child.setTotalVolume(line.getTotalVolume()); // child.setTotalVolume(line.getTotalVolume());
child.setTotalArea(line.getTotalArea()); // child.setTotalArea(line.getTotalArea());
child.setAlreadyReceiptQuantity(null); // child.setAlreadyReceiptQuantity(null);
child.setAlreadyReceiptGrossWeight(null); // child.setAlreadyReceiptGrossWeight(null);
child.setAlreadyReceiptNetWeight(null); // child.setAlreadyReceiptNetWeight(null);
child.setAlreadyReceiptVolume(null); // child.setAlreadyReceiptVolume(null);
child.setAlreadyReceiptArea(null); // child.setAlreadyReceiptArea(null);
line.setChildren(Collections.singletonList(child)); // line.setChildren(Collections.singletonList(child));
line.setReceiptQuantity(BigDecimal.ZERO); // line.setReceiptQuantity(BigDecimal.ZERO);
line.setReceiptGrossWeight(null); // line.setReceiptGrossWeight(null);
line.setReceiptNetWeight(null); // line.setReceiptNetWeight(null);
line.setReceiptVolume(null); // line.setReceiptVolume(null);
line.setReceiptArea(null); // line.setReceiptArea(null);
line.setTotalGrossWeight(null); // line.setTotalGrossWeight(null);
line.setTotalNetWeight(null); // line.setTotalNetWeight(null);
line.setTotalVolume(null); // line.setTotalVolume(null);
line.setTotalArea(null); // line.setTotalArea(null);
line.setLevel(1); // line.setLevel(1);
line.setParentUniqueId(null); // line.setParentUniqueId(null);
} // }
/** /**
* 收货时:将 children 中第一条的值赋给主项,并删除第一条。 * 收货时:将 children 中第一条的值赋给主项,并删除第一条。
@@ -424,7 +424,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO)); receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
} }
// 批次号:默认取 Sheet Ref NO'ssheetRefNo),不再自动生成 PC 流水号(逻辑见 generateAndValidateBatchNumber // 批次号:默认取 Sheet Ref NO'ssheetRefNo),不再自动生成 PC 流水号(逻辑见 generateAndValidateBatchNumber
generateAndValidateBatchNumber(receiptMaterialDetailDO, shipperId); //generateAndValidateBatchNumber(receiptMaterialDetailDO, shipperId);
//更多属性 //更多属性
materialMoreDetailList.addAll(genMaterialMoreDetail(receiptMaterialDetailDO)); materialMoreDetailList.addAll(genMaterialMoreDetail(receiptMaterialDetailDO));
//序列号 //序列号
@@ -88,29 +88,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectStockInOrderPo"> <!-- <sql id="selectStockInOrderPo">-->
a.in_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.notice_number, a.in_order_number, a.status, <!-- a.in_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.notice_number, a.in_order_number, a.status,-->
a.audit_status, a.audit_remark, a.audit_by, a.audit_by_name, a.audit_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_code, <!-- a.audit_status, a.audit_remark, a.audit_by, a.audit_by_name, a.audit_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_code,-->
a.shipper_name, a.order_type_code, a.order_type_name, a.supplier_id, a.supplier_code, a.supplier_name, a.expect_time, a.supply_chain_number, <!-- a.shipper_name, a.order_type_code, a.order_type_name, a.supplier_id, a.supplier_code, a.supplier_name, a.expect_time, a.supply_chain_number,-->
a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity, a.quantity,a.billing_json,a.SETTLEMENT_CURRENCY, <!-- a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity, a.quantity,a.billing_json,a.SETTLEMENT_CURRENCY,-->
a.SALESMAN_ID,a.SALESMAN_NAME, <!-- a.SALESMAN_ID,a.SALESMAN_NAME,-->
-- 计划入库数量:入库明细表 in_material_detail 的 quantity 汇总 <!-- &#45;&#45; 计划入库数量:入库明细表 in_material_detail 的 quantity 汇总-->
<!-- 计划入库数量:入库明细主行 quantity 汇总(列表 quantity / plan_in_quantity 均以此为准展示) --> <!-- &lt;!&ndash; 计划入库数量:入库明细主行 quantity 汇总(列表 quantity / plan_in_quantity 均以此为准展示) &ndash;&gt;-->
<sql id="sumPlanInMaterialQuantity">
(select ifnull(sum(imd.quantity), 0) <!-- (select ifnull(sum(imd.quantity), 0)-->
from in_material_detail imd <!-- from in_material_detail imd-->
where imd.in_order_number = a.in_order_number <!-- where imd.in_order_number = a.in_order_number-->
and imd.del_flag = 1 <!-- and imd.del_flag = 1-->
and (imd.level is null or imd.level = 1)) <!-- and (imd.level is null or imd.level = 1))-->
</sql> <!-- </sql>-->
<sql id="selectStockInOrderPo"> <sql id="selectStockInOrderPo">
a.in_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.notice_number, a.in_order_number, a.status, a.in_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.notice_number, a.in_order_number, a.status,
a.audit_status, a.audit_remark, a.audit_by, a.audit_by_name, a.audit_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_code, a.audit_status, a.audit_remark, a.audit_by, a.audit_by_name, a.audit_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id, a.shipper_code,
a.shipper_name, a.order_type_code, a.order_type_name, a.supplier_id, a.supplier_code, a.supplier_name, a.expect_time, a.supply_chain_number, a.shipper_name, a.order_type_code, a.order_type_name, a.supplier_id, a.supplier_code, a.supplier_name, a.expect_time, a.supply_chain_number,
a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity, a.priority_level_code, a.priority_level_name, a.direct_warehouse, a.annex_url, a.material_quantity,
<include refid="sumPlanInMaterialQuantity"/> as quantity, (select ifnull(sum(imd.quantity), 0)
<include refid="sumPlanInMaterialQuantity"/> as plan_in_quantity, from in_material_detail imd
where imd.in_order_number = a.in_order_number
and imd.del_flag = 1
and (imd.level is null or imd.level = 1)) as quantity,
<!-- <include refid="sumPlanInMaterialQuantity"/> as plan_in_quantity,-->
-- 收货数量:收货单表 stock_receipt_order 的 receipt_quantity 汇总 -- 收货数量:收货单表 stock_receipt_order 的 receipt_quantity 汇总
(select ifnull(sum(sro.receipt_quantity), 0) (select ifnull(sum(sro.receipt_quantity), 0)
from stock_receipt_order sro from stock_receipt_order sro