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