合并代码冲突;
This commit is contained in:
+203
-200
@@ -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 中第一条的值赋给主项,并删除第一条。
|
||||
|
||||
+1
-1
@@ -424,7 +424,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
||||
receiptMaterialDetailDO.setMaterialMoreDetailList(buildMaterialMoreDetailFromReceiptFields(receiptMaterialDetailDO));
|
||||
}
|
||||
// 批次号:默认取 Sheet Ref NO's(sheetRefNo),不再自动生成 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,-->
|
||||
<!-- -- 计划入库数量:入库明细表 in_material_detail 的 quantity 汇总-->
|
||||
<!-- <!– 计划入库数量:入库明细主行 quantity 汇总(列表 quantity / 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))-->
|
||||
<!-- </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
|
||||
|
||||
Reference in New Issue
Block a user