合并代码冲突;

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