PDA收货调整修改
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
-- ALREADY_RECEIPT_GROSS_WEIGHT
|
||||||
|
ALTER TABLE "RECEIPT_MATERIAL_DETAIL"
|
||||||
|
ADD "ALREADY_RECEIPT_GROSS_WEIGHT" DECIMAL(20, 8) NULL;
|
||||||
|
COMMENT ON COLUMN "RECEIPT_MATERIAL_DETAIL"."ALREADY_RECEIPT_GROSS_WEIGHT" IS '累计已收货毛重(KG),称重实绩';
|
||||||
|
|
||||||
|
-- ALREADY_RECEIPT_NET_WEIGHT
|
||||||
|
ALTER TABLE RECEIPT_MATERIAL_DETAIL
|
||||||
|
ADD ALREADY_RECEIPT_NET_WEIGHT DECIMAL(20, 8) NULL;
|
||||||
|
COMMENT ON COLUMN RECEIPT_MATERIAL_DETAIL.ALREADY_RECEIPT_NET_WEIGHT IS '累计已收货净重(KG)';
|
||||||
|
|
||||||
|
-- ALREADY_RECEIPT_VOLUME
|
||||||
|
ALTER TABLE RECEIPT_MATERIAL_DETAIL
|
||||||
|
ADD ALREADY_RECEIPT_VOLUME DECIMAL(20, 8) NULL;
|
||||||
|
COMMENT ON COLUMN RECEIPT_MATERIAL_DETAIL.ALREADY_RECEIPT_VOLUME IS '累计已收货体积(CBM)';
|
||||||
|
|
||||||
|
-- ALREADY_RECEIPT_AREA
|
||||||
|
ALTER TABLE RECEIPT_MATERIAL_DETAIL
|
||||||
|
ADD ALREADY_RECEIPT_AREA DECIMAL(20, 8) NULL;
|
||||||
|
COMMENT ON COLUMN RECEIPT_MATERIAL_DETAIL.ALREADY_RECEIPT_AREA IS '累计已收货面积(SQM)';
|
||||||
+301
-32
@@ -287,6 +287,7 @@ public class StockReceiptOrderApplicationService {
|
|||||||
clearChildQuantityRecursively(receiptMaterialDetailPOList);
|
clearChildQuantityRecursively(receiptMaterialDetailPOList);
|
||||||
// 计算待收货数量 = 计划数量 - 已收货数量
|
// 计算待收货数量 = 计划数量 - 已收货数量
|
||||||
fillPendingReceiptQuantityRecursively(receiptMaterialDetailPOList);
|
fillPendingReceiptQuantityRecursively(receiptMaterialDetailPOList);
|
||||||
|
fillPlanAndPendingMetricsRecursively(receiptMaterialDetailPOList);
|
||||||
stockReceiptOrderPO.setMaterialDetailList(receiptMaterialDetailPOList);
|
stockReceiptOrderPO.setMaterialDetailList(receiptMaterialDetailPOList);
|
||||||
log.info("返回收货单信息,receiptOrderId={}, materialDetailList大小={}, totalNetWeight={}, totalGrossWeight={}, totalVolume={}, totalArea={}",
|
log.info("返回收货单信息,receiptOrderId={}, materialDetailList大小={}, totalNetWeight={}, totalGrossWeight={}, totalVolume={}, totalArea={}",
|
||||||
stockReceiptOrderPO.getReceiptOrderId(),
|
stockReceiptOrderPO.getReceiptOrderId(),
|
||||||
@@ -429,6 +430,7 @@ public class StockReceiptOrderApplicationService {
|
|||||||
child.setQuantity(null);
|
child.setQuantity(null);
|
||||||
}
|
}
|
||||||
parent.setAlreadyReceiptQuantity(alreadyReceiptQuantitySum);
|
parent.setAlreadyReceiptQuantity(alreadyReceiptQuantitySum);
|
||||||
|
// 累计已称毛重不按子行汇总到主行:多批/多子行各自一条计划毛重,汇总会大于主行计划,导致 计划−已称=0 且界面显示 0E-8;待收毛重按本行 already_receipt_gross_weight 与 total_gross_weight 计算即可
|
||||||
if (maxReceiptStatus != null) {
|
if (maxReceiptStatus != null) {
|
||||||
parent.setReceiptStatus(maxReceiptStatus);
|
parent.setReceiptStatus(maxReceiptStatus);
|
||||||
}
|
}
|
||||||
@@ -462,10 +464,12 @@ public class StockReceiptOrderApplicationService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
||||||
|
if (!isPdaReceiptDetailFullyReceived(detail)) {
|
||||||
BigDecimal quantity = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
BigDecimal quantity = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
||||||
BigDecimal alreadyReceiptQuantity = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
BigDecimal alreadyReceiptQuantity = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
BigDecimal pending = quantity.subtract(alreadyReceiptQuantity);
|
BigDecimal pending = quantity.subtract(alreadyReceiptQuantity);
|
||||||
detail.setPendingReceiptQuantity(pending.compareTo(BigDecimal.ZERO) > 0 ? pending : BigDecimal.ZERO);
|
detail.setPendingReceiptQuantity(pending.compareTo(BigDecimal.ZERO) > 0 ? pending : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
||||||
if (!CollectionUtils.isEmpty(children)) {
|
if (!CollectionUtils.isEmpty(children)) {
|
||||||
fillPendingReceiptQuantityRecursively(children);
|
fillPendingReceiptQuantityRecursively(children);
|
||||||
@@ -474,13 +478,45 @@ public class StockReceiptOrderApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PDA详情展示:按“计划-已收”计算待收字段
|
* PDA 详情:收货数量展示为「累计已收货」= 库表 already_receipt_quantity。
|
||||||
|
* 库表 receipt_quantity 仅为本次收货量,多次提交会覆盖;与「已有 + 本次」口径一致时应使用累计字段。
|
||||||
|
* 仅在 getInfoByApp 非「待收/收货中」筛选分支中调用,避免影响 PC 端 getInfo。
|
||||||
|
*/
|
||||||
|
private void syncReceiptQuantityCumulativeDisplayRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
||||||
|
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
||||||
|
BigDecimal already = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal plan = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal display = already;
|
||||||
|
if (plan.compareTo(BigDecimal.ZERO) > 0 && display.compareTo(plan) > 0) {
|
||||||
|
display = plan;
|
||||||
|
}
|
||||||
|
detail.setReceiptQuantity(display);
|
||||||
|
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
||||||
|
if (!CollectionUtils.isEmpty(children)) {
|
||||||
|
syncReceiptQuantityCumulativeDisplayRecursively(children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PDA详情展示:按“计划-已收”计算待收字段(已收货明细行不算待收、不改 total*)
|
||||||
*/
|
*/
|
||||||
private void fillPendingDisplayFieldsRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
private void fillPendingDisplayFieldsRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
||||||
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
||||||
|
if (isPdaReceiptDetailFullyReceived(detail)) {
|
||||||
|
applyCumulativeReceiptQuantityDisplayOnly(detail);
|
||||||
|
List<ReceiptMaterialDetailPO> doneChildren = detail.getChildren();
|
||||||
|
if (!CollectionUtils.isEmpty(doneChildren)) {
|
||||||
|
fillPendingDisplayFieldsRecursively(doneChildren);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
BigDecimal quantity = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
BigDecimal quantity = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
||||||
BigDecimal alreadyReceiptQuantity = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
BigDecimal alreadyReceiptQuantity = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
BigDecimal pendingQuantity = quantity.subtract(alreadyReceiptQuantity);
|
BigDecimal pendingQuantity = quantity.subtract(alreadyReceiptQuantity);
|
||||||
@@ -488,14 +524,16 @@ public class StockReceiptOrderApplicationService {
|
|||||||
pendingQuantity = BigDecimal.ZERO;
|
pendingQuantity = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
detail.setPendingReceiptQuantity(pendingQuantity);
|
detail.setPendingReceiptQuantity(pendingQuantity);
|
||||||
// 按需求:收货数量展示为待收数量
|
// 收货数量展示为累计已收货(已有 + 各次本次),与库表 receipt_quantity(仅本次)区分
|
||||||
detail.setReceiptQuantity(pendingQuantity);
|
BigDecimal already = alreadyReceiptQuantity;
|
||||||
|
BigDecimal displayQty = already;
|
||||||
|
if (quantity.compareTo(BigDecimal.ZERO) > 0 && displayQty.compareTo(quantity) > 0) {
|
||||||
|
displayQty = quantity;
|
||||||
|
}
|
||||||
|
detail.setReceiptQuantity(displayQty);
|
||||||
|
|
||||||
// 计划值 - 已收值;已收值按数量比例折算
|
// 毛重/净重/体积/面积:未完成=待收(计划−累计);已收完=展示累计实绩(无则退回计划)
|
||||||
detail.setTotalGrossWeight(calcPendingMetric(detail.getTotalGrossWeight(), quantity, alreadyReceiptQuantity));
|
applyDisplayWeightVolumeAndAreaForDetail(detail);
|
||||||
detail.setTotalNetWeight(calcPendingMetric(detail.getTotalNetWeight(), quantity, alreadyReceiptQuantity));
|
|
||||||
detail.setTotalVolume(calcPendingMetric(detail.getTotalVolume(), quantity, alreadyReceiptQuantity));
|
|
||||||
detail.setTotalArea(calcPendingMetric(detail.getTotalArea(), quantity, alreadyReceiptQuantity));
|
|
||||||
|
|
||||||
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
List<ReceiptMaterialDetailPO> children = detail.getChildren();
|
||||||
if (!CollectionUtils.isEmpty(children)) {
|
if (!CollectionUtils.isEmpty(children)) {
|
||||||
@@ -505,36 +543,100 @@ public class StockReceiptOrderApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 详情展示:仅回填待收毛重/净重/体积/面积,避免影响数量字段口径
|
* 详情展示:仅回填待收毛重/净重/体积/面积,避免影响数量字段口径(已收货行保持库表 total*)
|
||||||
*/
|
*/
|
||||||
private void fillPendingMetricsOnlyRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
private void fillPendingMetricsOnlyRecursively(List<ReceiptMaterialDetailPO> receiptMaterialDetailPOList) {
|
||||||
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
if (CollectionUtils.isEmpty(receiptMaterialDetailPOList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
for (ReceiptMaterialDetailPO detail : receiptMaterialDetailPOList) {
|
||||||
BigDecimal quantity = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
if (!isPdaReceiptDetailFullyReceived(detail)) {
|
||||||
BigDecimal alreadyReceiptQuantity = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
applyDisplayWeightVolumeAndAreaForDetail(detail);
|
||||||
detail.setTotalGrossWeight(calcPendingMetric(detail.getTotalGrossWeight(), quantity, alreadyReceiptQuantity));
|
}
|
||||||
detail.setTotalNetWeight(calcPendingMetric(detail.getTotalNetWeight(), quantity, alreadyReceiptQuantity));
|
|
||||||
detail.setTotalVolume(calcPendingMetric(detail.getTotalVolume(), quantity, alreadyReceiptQuantity));
|
|
||||||
detail.setTotalArea(calcPendingMetric(detail.getTotalArea(), quantity, alreadyReceiptQuantity));
|
|
||||||
if (!CollectionUtils.isEmpty(detail.getChildren())) {
|
if (!CollectionUtils.isEmpty(detail.getChildren())) {
|
||||||
fillPendingMetricsOnlyRecursively(detail.getChildren());
|
fillPendingMetricsOnlyRecursively(detail.getChildren());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal calcPendingMetric(BigDecimal planMetric, BigDecimal quantity, BigDecimal alreadyReceiptQuantity) {
|
/**
|
||||||
if (planMetric == null) {
|
* 详情中 total*:累计称重/体积/面积实绩(同 already_receipt_*)。
|
||||||
|
* 计划/待收见 plan*、pending*(fillPlanAndPendingMetricsRecursively)。
|
||||||
|
*/
|
||||||
|
private void applyDisplayWeightVolumeAndAreaForDetail(ReceiptMaterialDetailPO detail) {
|
||||||
|
BigDecimal planGross = detail.getPlanGrossWeight() != null
|
||||||
|
? detail.getPlanGrossWeight() : detail.getTotalGrossWeight();
|
||||||
|
BigDecimal planNet = detail.getPlanNetWeight() != null
|
||||||
|
? detail.getPlanNetWeight() : detail.getTotalNetWeight();
|
||||||
|
BigDecimal planVol = detail.getPlanVolume() != null
|
||||||
|
? detail.getPlanVolume() : detail.getTotalVolume();
|
||||||
|
BigDecimal planArea = detail.getPlanArea() != null
|
||||||
|
? detail.getPlanArea() : detail.getTotalArea();
|
||||||
|
detail.setTotalGrossWeight(displayCompleteMetric(detail.getAlreadyReceiptGrossWeight(), planGross));
|
||||||
|
detail.setTotalNetWeight(displayCompleteMetric(detail.getAlreadyReceiptNetWeight(), planNet));
|
||||||
|
detail.setTotalVolume(displayCompleteMetric(detail.getAlreadyReceiptVolume(), planVol));
|
||||||
|
detail.setTotalArea(displayCompleteMetric(detail.getAlreadyReceiptArea(), planArea));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划/待收:plan* 来自入库单联表(与首次创建时 total 同源);pending* = plan − 累计已收,仅接口计算不落库。
|
||||||
|
*/
|
||||||
|
private void fillPlanAndPendingMetricsRecursively(List<ReceiptMaterialDetailPO> list) {
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (ReceiptMaterialDetailPO d : list) {
|
||||||
|
if (d == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!isPdaReceiptDetailFullyReceived(d)) {
|
||||||
|
d.setPendingNetWeight(calcPendingMetric(d.getPlanNetWeight(), d.getAlreadyReceiptNetWeight()));
|
||||||
|
d.setPendingGrossWeight(calcPendingMetric(d.getPlanGrossWeight(), d.getAlreadyReceiptGrossWeight()));
|
||||||
|
d.setPendingVolume(calcPendingMetric(d.getPlanVolume(), d.getAlreadyReceiptVolume()));
|
||||||
|
d.setPendingArea(calcPendingMetric(d.getPlanArea(), d.getAlreadyReceiptArea()));
|
||||||
|
}
|
||||||
|
fillPlanAndPendingMetricsRecursively(d.getChildren());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 待收 = max(0, 计划 − 累计已收货) */
|
||||||
|
private static BigDecimal calcPendingMetric(BigDecimal plan, BigDecimal alreadyReceipt) {
|
||||||
|
if (plan == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) {
|
BigDecimal already = alreadyReceipt != null ? alreadyReceipt : BigDecimal.ZERO;
|
||||||
return planMetric;
|
BigDecimal pending = plan.subtract(already);
|
||||||
|
if (pending.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
BigDecimal alreadyRatio = (alreadyReceiptQuantity == null ? BigDecimal.ZERO : alreadyReceiptQuantity)
|
return normalizeDecimalForApi(pending);
|
||||||
.divide(quantity, 8, java.math.RoundingMode.HALF_UP);
|
}
|
||||||
BigDecimal pendingMetric = planMetric.subtract(planMetric.multiply(alreadyRatio));
|
|
||||||
return pendingMetric.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : pendingMetric;
|
/** 已收完展示:优先累计实绩;未维护累计时退回计划值 */
|
||||||
|
private static BigDecimal displayCompleteMetric(BigDecimal accumulated, BigDecimal planFallback) {
|
||||||
|
if (accumulated != null) {
|
||||||
|
return normalizeDecimalForApi(accumulated);
|
||||||
|
}
|
||||||
|
if (planFallback == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return normalizeDecimalForApi(planFallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一待收数值的标度,避免 JSON 出现 0E-8 / 1.1E+3:
|
||||||
|
* stripTrailingZeros 后 scale 可能为负,BigDecimal.toString 会变成科学计数法,序列化到前端同效。
|
||||||
|
* 使用 toPlainString 再构造,保证输出为普通十进制形式。
|
||||||
|
*/
|
||||||
|
private static BigDecimal normalizeDecimalForApi(BigDecimal v) {
|
||||||
|
if (v == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (v.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
BigDecimal stripped = v.stripTrailingZeros();
|
||||||
|
return new BigDecimal(stripped.toPlainString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1026,7 +1128,7 @@ public class StockReceiptOrderApplicationService {
|
|||||||
}
|
}
|
||||||
List<ReceiptMaterialDetailPO> materialDetailList = stockReceiptOrderPO.getMaterialDetailList();
|
List<ReceiptMaterialDetailPO> materialDetailList = stockReceiptOrderPO.getMaterialDetailList();
|
||||||
if (!CollectionUtils.isEmpty(materialDetailList)) {
|
if (!CollectionUtils.isEmpty(materialDetailList)) {
|
||||||
// PDA 详情按明细收货状态过滤:1=待收货/收货中(明细状态1、2),3=已收货(明细状态3)
|
// PDA 详情筛选:receiptStatus=1 仅 1 待收货、2 收货中;receiptStatus=3 为 3 已收货、4 少收、5 超收(不含 1、2)
|
||||||
if (receiptStatus != null) {
|
if (receiptStatus != null) {
|
||||||
materialDetailList = filterMaterialDetailsByReceiptStatus(materialDetailList, receiptStatus);
|
materialDetailList = filterMaterialDetailsByReceiptStatus(materialDetailList, receiptStatus);
|
||||||
stockReceiptOrderPO.setMaterialDetailList(materialDetailList);
|
stockReceiptOrderPO.setMaterialDetailList(materialDetailList);
|
||||||
@@ -1076,21 +1178,70 @@ public class StockReceiptOrderApplicationService {
|
|||||||
fillFirstReceiptQuantityDefault(materialDetailList);
|
fillFirstReceiptQuantityDefault(materialDetailList);
|
||||||
// PDA 端与 PC 端一致:主行收货数量取第一条子项,已收货数量汇总所有子项
|
// PDA 端与 PC 端一致:主行收货数量取第一条子项,已收货数量汇总所有子项
|
||||||
flattenMaterialDetailList(materialDetailList);
|
flattenMaterialDetailList(materialDetailList);
|
||||||
clearChildQuantityRecursively(materialDetailList);
|
// 须先算待收指标再清空子项 quantity;已收尾明细(3/4/5)不按「计划−待收」计算,见 isPdaReceiptDetailFullyReceived
|
||||||
// 收货详情:总毛重/净重/体积/面积按“计划-已收”展示
|
|
||||||
fillPendingMetricsOnlyRecursively(materialDetailList);
|
|
||||||
// 仅在 PDA 详情筛选“待收/收货中”时,按待收口径回填展示字段
|
|
||||||
if (receiptStatus != null && receiptStatus == 1) {
|
if (receiptStatus != null && receiptStatus == 1) {
|
||||||
// 按“计划-已收”回填待收展示字段(数量/毛净重/体积/面积)
|
|
||||||
fillPendingDisplayFieldsRecursively(materialDetailList);
|
fillPendingDisplayFieldsRecursively(materialDetailList);
|
||||||
} else {
|
} else {
|
||||||
// 其他场景保持原始详情口径,仅补充待收数量字段
|
fillPendingMetricsOnlyRecursively(materialDetailList);
|
||||||
fillPendingReceiptQuantityRecursively(materialDetailList);
|
fillPendingReceiptQuantityRecursively(materialDetailList);
|
||||||
|
syncReceiptQuantityCumulativeDisplayRecursively(materialDetailList);
|
||||||
}
|
}
|
||||||
|
fillPlanAndPendingMetricsRecursively(materialDetailList);
|
||||||
|
// PDA 绑定 total* 展示「待收」= plan − 已收;已收货行不覆盖
|
||||||
|
overwriteTotalWithPendingForPdaDisplayRecursively(materialDetailList);
|
||||||
|
clearChildQuantityRecursively(materialDetailList);
|
||||||
}
|
}
|
||||||
return stockReceiptOrderPO;
|
return stockReceiptOrderPO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PDA 界面「总净重/总毛重/体积/面积」绑定 total*:有计划时展示待收(pending*);无计划联表时保留原 total*(累计实绩)。
|
||||||
|
*/
|
||||||
|
private void overwriteTotalWithPendingForPdaDisplayRecursively(List<ReceiptMaterialDetailPO> list) {
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (ReceiptMaterialDetailPO d : list) {
|
||||||
|
if (d == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!isPdaReceiptDetailFullyReceived(d)) {
|
||||||
|
if (d.getPlanNetWeight() != null) {
|
||||||
|
d.setTotalNetWeight(d.getPendingNetWeight() != null ? d.getPendingNetWeight() : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
if (d.getPlanGrossWeight() != null) {
|
||||||
|
d.setTotalGrossWeight(d.getPendingGrossWeight() != null ? d.getPendingGrossWeight() : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
if (d.getPlanVolume() != null) {
|
||||||
|
d.setTotalVolume(d.getPendingVolume() != null ? d.getPendingVolume() : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
if (d.getPlanArea() != null) {
|
||||||
|
d.setTotalArea(d.getPendingArea() != null ? d.getPendingArea() : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
overwriteTotalWithPendingForPdaDisplayRecursively(d.getChildren());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 明细已收尾(3/4/5),不参与「计划−待收」口径;与已收货 tab 一致 */
|
||||||
|
private static boolean isPdaReceiptDetailFullyReceived(ReceiptMaterialDetailPO d) {
|
||||||
|
return d != null && isPdaTerminalReceiptDetailStatus(d.getReceiptStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 与 syncReceiptQuantityCumulativeDisplayRecursively 单节点口径一致:收货数量展示为累计实绩(封顶计划) */
|
||||||
|
private static void applyCumulativeReceiptQuantityDisplayOnly(ReceiptMaterialDetailPO detail) {
|
||||||
|
if (detail == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BigDecimal already = detail.getAlreadyReceiptQuantity() != null ? detail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal plan = detail.getQuantity() != null ? detail.getQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal display = already;
|
||||||
|
if (plan.compareTo(BigDecimal.ZERO) > 0 && display.compareTo(plan) > 0) {
|
||||||
|
display = plan;
|
||||||
|
}
|
||||||
|
detail.setReceiptQuantity(display);
|
||||||
|
}
|
||||||
|
|
||||||
private List<ReceiptMaterialDetailPO> filterMaterialDetailsByReceiptStatus(List<ReceiptMaterialDetailPO> source, Integer receiptStatus) {
|
private List<ReceiptMaterialDetailPO> filterMaterialDetailsByReceiptStatus(List<ReceiptMaterialDetailPO> source, Integer receiptStatus) {
|
||||||
if (CollectionUtils.isEmpty(source) || receiptStatus == null) {
|
if (CollectionUtils.isEmpty(source) || receiptStatus == null) {
|
||||||
return source;
|
return source;
|
||||||
@@ -1111,6 +1262,9 @@ public class StockReceiptOrderApplicationService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param receiptStatus 请求筛选:1=待收货 tab(仅明细 1、2);3=已收货 tab(仅 3 已收货、4 少收、5 超收)
|
||||||
|
*/
|
||||||
private boolean matchReceiptStatus(Integer detailStatus, Integer receiptStatus) {
|
private boolean matchReceiptStatus(Integer detailStatus, Integer receiptStatus) {
|
||||||
if (detailStatus == null || receiptStatus == null) {
|
if (detailStatus == null || receiptStatus == null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -1119,11 +1273,16 @@ public class StockReceiptOrderApplicationService {
|
|||||||
return detailStatus == 1 || detailStatus == 2;
|
return detailStatus == 1 || detailStatus == 2;
|
||||||
}
|
}
|
||||||
if (receiptStatus == 3) {
|
if (receiptStatus == 3) {
|
||||||
return detailStatus == 3;
|
return isPdaTerminalReceiptDetailStatus(detailStatus);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 明细节点属于「已收货」tab:3 已收货、4 少收、5 超收(与待收货 1、2 互斥) */
|
||||||
|
private static boolean isPdaTerminalReceiptDetailStatus(Integer detailStatus) {
|
||||||
|
return detailStatus != null && (detailStatus == 3 || detailStatus == 4 || detailStatus == 5);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归收集明细树中所有物料基础信息ID
|
* 递归收集明细树中所有物料基础信息ID
|
||||||
*/
|
*/
|
||||||
@@ -1503,6 +1662,30 @@ public class StockReceiptOrderApplicationService {
|
|||||||
stockReceiptOrderDO.setOperatorsName(userPo.getUserName());
|
stockReceiptOrderDO.setOperatorsName(userPo.getUserName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本次收货的毛/净重、体积、面积增量:优先 receipt*;否则 total*。
|
||||||
|
* total* 与 PC 回显对齐后可能为「累计实绩」:若 total > 本单收货前累计则增量=差;相等则 0;小于累计则视为「本次增量」原值。
|
||||||
|
*/
|
||||||
|
private static BigDecimal pickThisReceiptMetricIncrement(BigDecimal receiptField, BigDecimal totalField,
|
||||||
|
BigDecimal dbAlreadyBeforeThisReceipt) {
|
||||||
|
if (receiptField != null) {
|
||||||
|
return receiptField;
|
||||||
|
}
|
||||||
|
if (totalField == null) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
if (dbAlreadyBeforeThisReceipt == null) {
|
||||||
|
return totalField;
|
||||||
|
}
|
||||||
|
if (totalField.compareTo(dbAlreadyBeforeThisReceipt) == 0) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
if (totalField.compareTo(dbAlreadyBeforeThisReceipt) > 0) {
|
||||||
|
return totalField.subtract(dbAlreadyBeforeThisReceipt);
|
||||||
|
}
|
||||||
|
return totalField;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 收货装配参数
|
* @description 收货装配参数
|
||||||
* @author ZhouGY
|
* @author ZhouGY
|
||||||
@@ -1581,6 +1764,14 @@ public class StockReceiptOrderApplicationService {
|
|||||||
// 统一口径:PDA 上传的 receiptQuantity 视为“本次收货量”,不再按累计值覆盖
|
// 统一口径:PDA 上传的 receiptQuantity 视为“本次收货量”,不再按累计值覆盖
|
||||||
BigDecimal newChildrenTotalQuantity = BigDecimal.ZERO;
|
BigDecimal newChildrenTotalQuantity = BigDecimal.ZERO;
|
||||||
BigDecimal existingChildrenIncrement = BigDecimal.ZERO;
|
BigDecimal existingChildrenIncrement = BigDecimal.ZERO;
|
||||||
|
BigDecimal newChildrenGrossTotal = BigDecimal.ZERO;
|
||||||
|
BigDecimal existingChildrenGrossIncrement = BigDecimal.ZERO;
|
||||||
|
BigDecimal newChildrenNetTotal = BigDecimal.ZERO;
|
||||||
|
BigDecimal existingChildrenNetIncrement = BigDecimal.ZERO;
|
||||||
|
BigDecimal newChildrenVolTotal = BigDecimal.ZERO;
|
||||||
|
BigDecimal existingChildrenVolIncrement = BigDecimal.ZERO;
|
||||||
|
BigDecimal newChildrenAreaTotal = BigDecimal.ZERO;
|
||||||
|
BigDecimal existingChildrenAreaIncrement = BigDecimal.ZERO;
|
||||||
List<ReceiptMaterialDetailDO> receiptMaterialDetailDOChildList = receiptMaterialDetailDO.getChildren();
|
List<ReceiptMaterialDetailDO> receiptMaterialDetailDOChildList = receiptMaterialDetailDO.getChildren();
|
||||||
if (!CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)){
|
if (!CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)){
|
||||||
for (ReceiptMaterialDetailDO receiptMaterialDetailDOChild : receiptMaterialDetailDOChildList){
|
for (ReceiptMaterialDetailDO receiptMaterialDetailDOChild : receiptMaterialDetailDOChildList){
|
||||||
@@ -1588,15 +1779,35 @@ public class StockReceiptOrderApplicationService {
|
|||||||
if (receiptMaterialDetailPOChildDb == null && receiptMaterialDetailDOChild.getUniqueId() != null) {
|
if (receiptMaterialDetailPOChildDb == null && receiptMaterialDetailDOChild.getUniqueId() != null) {
|
||||||
receiptMaterialDetailPOChildDb = receiptMaterialDetailDbMapByUniqueId.get(receiptMaterialDetailDOChild.getUniqueId());
|
receiptMaterialDetailPOChildDb = receiptMaterialDetailDbMapByUniqueId.get(receiptMaterialDetailDOChild.getUniqueId());
|
||||||
}
|
}
|
||||||
BigDecimal childQty = receiptMaterialDetailDOChild.getReceiptQuantity() != null ? receiptMaterialDetailDOChild.getReceiptQuantity() : BigDecimal.ZERO;
|
|
||||||
BigDecimal childDbAlready = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptQuantity() != null
|
BigDecimal childDbAlready = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptQuantity() != null
|
||||||
? receiptMaterialDetailPOChildDb.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
? receiptMaterialDetailPOChildDb.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childDbAlreadyGross = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptGrossWeight() != null
|
||||||
|
? receiptMaterialDetailPOChildDb.getAlreadyReceiptGrossWeight() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childDbAlreadyNet = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptNetWeight() != null
|
||||||
|
? receiptMaterialDetailPOChildDb.getAlreadyReceiptNetWeight() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childDbAlreadyVol = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptVolume() != null
|
||||||
|
? receiptMaterialDetailPOChildDb.getAlreadyReceiptVolume() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childDbAlreadyArea = receiptMaterialDetailPOChildDb != null && receiptMaterialDetailPOChildDb.getAlreadyReceiptArea() != null
|
||||||
|
? receiptMaterialDetailPOChildDb.getAlreadyReceiptArea() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childQty = receiptMaterialDetailDOChild.getReceiptQuantity() != null ? receiptMaterialDetailDOChild.getReceiptQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal childGross = pickThisReceiptMetricIncrement(receiptMaterialDetailDOChild.getReceiptGrossWeight(), receiptMaterialDetailDOChild.getTotalGrossWeight(), childDbAlreadyGross);
|
||||||
|
BigDecimal childNet = pickThisReceiptMetricIncrement(receiptMaterialDetailDOChild.getReceiptNetWeight(), receiptMaterialDetailDOChild.getTotalNetWeight(), childDbAlreadyNet);
|
||||||
|
BigDecimal childVol = pickThisReceiptMetricIncrement(receiptMaterialDetailDOChild.getReceiptVolume(), receiptMaterialDetailDOChild.getTotalVolume(), childDbAlreadyVol);
|
||||||
|
BigDecimal childArea = pickThisReceiptMetricIncrement(receiptMaterialDetailDOChild.getReceiptArea(), receiptMaterialDetailDOChild.getTotalArea(), childDbAlreadyArea);
|
||||||
if (receiptMaterialDetailPOChildDb == null) {
|
if (receiptMaterialDetailPOChildDb == null) {
|
||||||
// 新子项:累加其本次收货量
|
// 新子项:累加其本次收货量
|
||||||
newChildrenTotalQuantity = newChildrenTotalQuantity.add(childQty);
|
newChildrenTotalQuantity = newChildrenTotalQuantity.add(childQty);
|
||||||
|
newChildrenGrossTotal = newChildrenGrossTotal.add(childGross);
|
||||||
|
newChildrenNetTotal = newChildrenNetTotal.add(childNet);
|
||||||
|
newChildrenVolTotal = newChildrenVolTotal.add(childVol);
|
||||||
|
newChildrenAreaTotal = newChildrenAreaTotal.add(childArea);
|
||||||
} else {
|
} else {
|
||||||
// 已存在子项:累加其本次收货量
|
// 已存在子项:累加其本次收货量
|
||||||
existingChildrenIncrement = existingChildrenIncrement.add(childQty);
|
existingChildrenIncrement = existingChildrenIncrement.add(childQty);
|
||||||
|
existingChildrenGrossIncrement = existingChildrenGrossIncrement.add(childGross);
|
||||||
|
existingChildrenNetIncrement = existingChildrenNetIncrement.add(childNet);
|
||||||
|
existingChildrenVolIncrement = existingChildrenVolIncrement.add(childVol);
|
||||||
|
existingChildrenAreaIncrement = existingChildrenAreaIncrement.add(childArea);
|
||||||
}
|
}
|
||||||
BigDecimal childReceiptQty = receiptMaterialDetailDOChild.getReceiptQuantity() != null ? receiptMaterialDetailDOChild.getReceiptQuantity() : BigDecimal.ZERO;
|
BigDecimal childReceiptQty = receiptMaterialDetailDOChild.getReceiptQuantity() != null ? receiptMaterialDetailDOChild.getReceiptQuantity() : BigDecimal.ZERO;
|
||||||
ReceiptMaterialDetailDO returnReceiptMaterialDetailDOChild = new ReceiptMaterialDetailDO();
|
ReceiptMaterialDetailDO returnReceiptMaterialDetailDOChild = new ReceiptMaterialDetailDO();
|
||||||
@@ -1606,6 +1817,10 @@ public class StockReceiptOrderApplicationService {
|
|||||||
BeanUtils.copyProperties(receiptMaterialDetailDOChild, returnReceiptMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDOChild));
|
BeanUtils.copyProperties(receiptMaterialDetailDOChild, returnReceiptMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDOChild));
|
||||||
// 子项统一按“本次收货量”累加
|
// 子项统一按“本次收货量”累加
|
||||||
returnReceiptMaterialDetailDOChild.setAlreadyReceiptQuantity(childDbAlready.add(childQty));
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptQuantity(childDbAlready.add(childQty));
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptGrossWeight(childDbAlreadyGross.add(childGross));
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptNetWeight(childDbAlreadyNet.add(childNet));
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptVolume(childDbAlreadyVol.add(childVol));
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptArea(childDbAlreadyArea.add(childArea));
|
||||||
returnReceiptMaterialDetailDOChild.setAllowModify(2);
|
returnReceiptMaterialDetailDOChild.setAllowModify(2);
|
||||||
returnReceiptMaterialDetailDOChild.setLevel(2);
|
returnReceiptMaterialDetailDOChild.setLevel(2);
|
||||||
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
|
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
|
||||||
@@ -1623,7 +1838,16 @@ public class StockReceiptOrderApplicationService {
|
|||||||
returnReceiptMaterialDetailDOChild.setLevel(2);
|
returnReceiptMaterialDetailDOChild.setLevel(2);
|
||||||
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
|
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
|
||||||
setMaterialMoreDetailInfo(returnReceiptMaterialDetailDOChild);
|
setMaterialMoreDetailInfo(returnReceiptMaterialDetailDOChild);
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptGrossWeight(childGross);
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptNetWeight(childNet);
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptVolume(childVol);
|
||||||
|
returnReceiptMaterialDetailDOChild.setAlreadyReceiptArea(childArea);
|
||||||
}
|
}
|
||||||
|
// PC 端读 total*:与累计实绩一致(与 already_receipt_* 同步)
|
||||||
|
returnReceiptMaterialDetailDOChild.setTotalNetWeight(returnReceiptMaterialDetailDOChild.getAlreadyReceiptNetWeight());
|
||||||
|
returnReceiptMaterialDetailDOChild.setTotalGrossWeight(returnReceiptMaterialDetailDOChild.getAlreadyReceiptGrossWeight());
|
||||||
|
returnReceiptMaterialDetailDOChild.setTotalVolume(returnReceiptMaterialDetailDOChild.getAlreadyReceiptVolume());
|
||||||
|
returnReceiptMaterialDetailDOChild.setTotalArea(returnReceiptMaterialDetailDOChild.getAlreadyReceiptArea());
|
||||||
//是否开启了序列号管理
|
//是否开启了序列号管理
|
||||||
if (receiptMaterialDetailPO.getSerialNumberManage() == 1){
|
if (receiptMaterialDetailPO.getSerialNumberManage() == 1){
|
||||||
if (CollectionUtils.isEmpty(receiptMaterialDetailDOChild.getMaterialDetailSerialNumberList())){
|
if (CollectionUtils.isEmpty(receiptMaterialDetailDOChild.getMaterialDetailSerialNumberList())){
|
||||||
@@ -1642,8 +1866,45 @@ public class StockReceiptOrderApplicationService {
|
|||||||
mainItemActualQuantity = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
mainItemActualQuantity = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
||||||
? receiptQuantity
|
? receiptQuantity
|
||||||
: receiptQuantity.add(childrenTotalIncrement);
|
: receiptQuantity.add(childrenTotalIncrement);
|
||||||
|
BigDecimal dbParentBeforeGross = receiptMaterialDetailPO.getAlreadyReceiptGrossWeight() != null ? receiptMaterialDetailPO.getAlreadyReceiptGrossWeight() : BigDecimal.ZERO;
|
||||||
|
BigDecimal dbParentBeforeNet = receiptMaterialDetailPO.getAlreadyReceiptNetWeight() != null ? receiptMaterialDetailPO.getAlreadyReceiptNetWeight() : BigDecimal.ZERO;
|
||||||
|
BigDecimal dbParentBeforeVol = receiptMaterialDetailPO.getAlreadyReceiptVolume() != null ? receiptMaterialDetailPO.getAlreadyReceiptVolume() : BigDecimal.ZERO;
|
||||||
|
BigDecimal dbParentBeforeArea = receiptMaterialDetailPO.getAlreadyReceiptArea() != null ? receiptMaterialDetailPO.getAlreadyReceiptArea() : BigDecimal.ZERO;
|
||||||
|
BigDecimal parentReceiptGross = pickThisReceiptMetricIncrement(receiptMaterialDetailDO.getReceiptGrossWeight(), receiptMaterialDetailDO.getTotalGrossWeight(), dbParentBeforeGross);
|
||||||
|
BigDecimal parentReceiptNet = pickThisReceiptMetricIncrement(receiptMaterialDetailDO.getReceiptNetWeight(), receiptMaterialDetailDO.getTotalNetWeight(), dbParentBeforeNet);
|
||||||
|
BigDecimal parentReceiptVol = pickThisReceiptMetricIncrement(receiptMaterialDetailDO.getReceiptVolume(), receiptMaterialDetailDO.getTotalVolume(), dbParentBeforeVol);
|
||||||
|
BigDecimal parentReceiptArea = pickThisReceiptMetricIncrement(receiptMaterialDetailDO.getReceiptArea(), receiptMaterialDetailDO.getTotalArea(), dbParentBeforeArea);
|
||||||
|
BigDecimal childrenGrossIncrement = newChildrenGrossTotal.add(existingChildrenGrossIncrement);
|
||||||
|
BigDecimal childrenNetIncrement = newChildrenNetTotal.add(existingChildrenNetIncrement);
|
||||||
|
BigDecimal childrenVolIncrement = newChildrenVolTotal.add(existingChildrenVolIncrement);
|
||||||
|
BigDecimal childrenAreaIncrement = newChildrenAreaTotal.add(existingChildrenAreaIncrement);
|
||||||
|
BigDecimal mainGrossIncrement = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
||||||
|
? parentReceiptGross
|
||||||
|
: parentReceiptGross.add(childrenGrossIncrement);
|
||||||
|
BigDecimal mainNetIncrement = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
||||||
|
? parentReceiptNet
|
||||||
|
: parentReceiptNet.add(childrenNetIncrement);
|
||||||
|
BigDecimal mainVolIncrement = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
||||||
|
? parentReceiptVol
|
||||||
|
: parentReceiptVol.add(childrenVolIncrement);
|
||||||
|
BigDecimal mainAreaIncrement = CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)
|
||||||
|
? parentReceiptArea
|
||||||
|
: parentReceiptArea.add(childrenAreaIncrement);
|
||||||
//主项已收货数量 = 原有 + 主项本次收货增量
|
//主项已收货数量 = 原有 + 主项本次收货增量
|
||||||
receiptMaterialDetailDO.setAlreadyReceiptQuantity(receiptMaterialDetailPO.getAlreadyReceiptQuantity().add(mainItemActualQuantity));
|
receiptMaterialDetailDO.setAlreadyReceiptQuantity(receiptMaterialDetailPO.getAlreadyReceiptQuantity().add(mainItemActualQuantity));
|
||||||
|
BigDecimal dbParentAlreadyGross = receiptMaterialDetailPO.getAlreadyReceiptGrossWeight() != null ? receiptMaterialDetailPO.getAlreadyReceiptGrossWeight() : BigDecimal.ZERO;
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptGrossWeight(dbParentAlreadyGross.add(mainGrossIncrement));
|
||||||
|
BigDecimal dbParentAlreadyNet = receiptMaterialDetailPO.getAlreadyReceiptNetWeight() != null ? receiptMaterialDetailPO.getAlreadyReceiptNetWeight() : BigDecimal.ZERO;
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptNetWeight(dbParentAlreadyNet.add(mainNetIncrement));
|
||||||
|
BigDecimal dbParentAlreadyVol = receiptMaterialDetailPO.getAlreadyReceiptVolume() != null ? receiptMaterialDetailPO.getAlreadyReceiptVolume() : BigDecimal.ZERO;
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptVolume(dbParentAlreadyVol.add(mainVolIncrement));
|
||||||
|
BigDecimal dbParentAlreadyArea = receiptMaterialDetailPO.getAlreadyReceiptArea() != null ? receiptMaterialDetailPO.getAlreadyReceiptArea() : BigDecimal.ZERO;
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptArea(dbParentAlreadyArea.add(mainAreaIncrement));
|
||||||
|
// PC 端读 total*:与累计称重/体积/面积实绩一致(不改 PC 即可回显)
|
||||||
|
receiptMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getAlreadyReceiptNetWeight());
|
||||||
|
receiptMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getAlreadyReceiptGrossWeight());
|
||||||
|
receiptMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getAlreadyReceiptVolume());
|
||||||
|
receiptMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getAlreadyReceiptArea());
|
||||||
//记录本次收货单收货总数(主项+子项合计,用于收货单级统计)
|
//记录本次收货单收货总数(主项+子项合计,用于收货单级统计)
|
||||||
orderLevelQuantity = mainItemActualQuantity;
|
orderLevelQuantity = mainItemActualQuantity;
|
||||||
totalActualQuantity = totalActualQuantity.add(orderLevelQuantity);
|
totalActualQuantity = totalActualQuantity.add(orderLevelQuantity);
|
||||||
@@ -1656,11 +1917,19 @@ public class StockReceiptOrderApplicationService {
|
|||||||
} else {
|
} else {
|
||||||
// 收货为 0 的明细:保持已收货数量和状态不变,仍加入列表以保持明细完整
|
// 收货为 0 的明细:保持已收货数量和状态不变,仍加入列表以保持明细完整
|
||||||
receiptMaterialDetailDO.setAlreadyReceiptQuantity(receiptMaterialDetailPO.getAlreadyReceiptQuantity());
|
receiptMaterialDetailDO.setAlreadyReceiptQuantity(receiptMaterialDetailPO.getAlreadyReceiptQuantity());
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptGrossWeight(receiptMaterialDetailPO.getAlreadyReceiptGrossWeight());
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptNetWeight(receiptMaterialDetailPO.getAlreadyReceiptNetWeight());
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptVolume(receiptMaterialDetailPO.getAlreadyReceiptVolume());
|
||||||
|
receiptMaterialDetailDO.setAlreadyReceiptArea(receiptMaterialDetailPO.getAlreadyReceiptArea());
|
||||||
receiptMaterialDetailDO.setReceiptStatus(receiptMaterialDetailPO.getReceiptStatus() != null ? receiptMaterialDetailPO.getReceiptStatus() : 1);
|
receiptMaterialDetailDO.setReceiptStatus(receiptMaterialDetailPO.getReceiptStatus() != null ? receiptMaterialDetailPO.getReceiptStatus() : 1);
|
||||||
}
|
}
|
||||||
ReceiptMaterialDetailDO returnReceiptMaterialDetailDO = new ReceiptMaterialDetailDO();
|
ReceiptMaterialDetailDO returnReceiptMaterialDetailDO = new ReceiptMaterialDetailDO();
|
||||||
BeanUtils.copyProperties(receiptMaterialDetailPO, returnReceiptMaterialDetailDO);
|
BeanUtils.copyProperties(receiptMaterialDetailPO, returnReceiptMaterialDetailDO);
|
||||||
BeanUtils.copyProperties(receiptMaterialDetailDO, returnReceiptMaterialDetailDO, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDO));
|
BeanUtils.copyProperties(receiptMaterialDetailDO, returnReceiptMaterialDetailDO, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDO));
|
||||||
|
returnReceiptMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getTotalNetWeight());
|
||||||
|
returnReceiptMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getTotalGrossWeight());
|
||||||
|
returnReceiptMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getTotalVolume());
|
||||||
|
returnReceiptMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getTotalArea());
|
||||||
if (receiptMaterialDetailPO.getReceiptStatus() == 1){
|
if (receiptMaterialDetailPO.getReceiptStatus() == 1){
|
||||||
//一级列表 首次收货
|
//一级列表 首次收货
|
||||||
//是否开启了序列号管理
|
//是否开启了序列号管理
|
||||||
|
|||||||
+16
@@ -75,6 +75,22 @@ public class ReceiptMaterialDetail extends BaseVOEntity {
|
|||||||
@Excel(name = "已收货数量")
|
@Excel(name = "已收货数量")
|
||||||
private BigDecimal alreadyReceiptQuantity;
|
private BigDecimal alreadyReceiptQuantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货毛重(KG),称重实绩")
|
||||||
|
@TableField("already_receipt_gross_weight")
|
||||||
|
private BigDecimal alreadyReceiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货净重(KG),与毛重同口径累加本次净重")
|
||||||
|
@TableField("already_receipt_net_weight")
|
||||||
|
private BigDecimal alreadyReceiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货体积(CBM)")
|
||||||
|
@TableField("already_receipt_volume")
|
||||||
|
private BigDecimal alreadyReceiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货面积(SQM)")
|
||||||
|
@TableField("already_receipt_area")
|
||||||
|
private BigDecimal alreadyReceiptArea;
|
||||||
|
|
||||||
@ApiModelProperty("收货数量")
|
@ApiModelProperty("收货数量")
|
||||||
@Excel(name = "收货数量")
|
@Excel(name = "收货数量")
|
||||||
private BigDecimal receiptQuantity;
|
private BigDecimal receiptQuantity;
|
||||||
|
|||||||
+16
@@ -359,6 +359,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
|||||||
extractBatchAttributesToReceiptDetail(receiptMaterialDetailDOChild);
|
extractBatchAttributesToReceiptDetail(receiptMaterialDetailDOChild);
|
||||||
ReceiptMaterialDetail receiptMaterialDetailChild = new ReceiptMaterialDetail();
|
ReceiptMaterialDetail receiptMaterialDetailChild = new ReceiptMaterialDetail();
|
||||||
BeanUtils.copyProperties(receiptMaterialDetailDOChild, receiptMaterialDetailChild);
|
BeanUtils.copyProperties(receiptMaterialDetailDOChild, receiptMaterialDetailChild);
|
||||||
|
alignPersistedReceiptQuantityToCumulative(receiptMaterialDetailDOChild, receiptMaterialDetailChild);
|
||||||
receiptMaterialDetailChild.setCreateBy(loginUser.getUserid());
|
receiptMaterialDetailChild.setCreateBy(loginUser.getUserid());
|
||||||
receiptMaterialDetailChild.setCreateByName(loginUser.getUsername());
|
receiptMaterialDetailChild.setCreateByName(loginUser.getUsername());
|
||||||
receiptMaterialDetailChild.setCreateTime(new Date());
|
receiptMaterialDetailChild.setCreateTime(new Date());
|
||||||
@@ -376,6 +377,7 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
|||||||
}
|
}
|
||||||
ReceiptMaterialDetail receiptMaterialDetail = new ReceiptMaterialDetail();
|
ReceiptMaterialDetail receiptMaterialDetail = new ReceiptMaterialDetail();
|
||||||
BeanUtils.copyProperties(receiptMaterialDetailDO, receiptMaterialDetail);
|
BeanUtils.copyProperties(receiptMaterialDetailDO, receiptMaterialDetail);
|
||||||
|
alignPersistedReceiptQuantityToCumulative(receiptMaterialDetailDO, receiptMaterialDetail);
|
||||||
receiptMaterialDetail.setUpdateBy(loginUser.getUserid());
|
receiptMaterialDetail.setUpdateBy(loginUser.getUserid());
|
||||||
receiptMaterialDetail.setUpdateByName(loginUser.getUsername());
|
receiptMaterialDetail.setUpdateByName(loginUser.getUsername());
|
||||||
receiptMaterialDetail.setUpdateTime(new Date());
|
receiptMaterialDetail.setUpdateTime(new Date());
|
||||||
@@ -412,6 +414,20 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl<ReceiptMaterialDetail
|
|||||||
updateInMaterialDetailFromAttributeOption(receiptMaterialDetailDOList);
|
updateInMaterialDetailFromAttributeOption(receiptMaterialDetailDOList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PDA 上传的 receiptQuantity 为「本次收货量」;落库时与累计已收货 already_receipt_quantity 对齐,
|
||||||
|
* 否则多次收货会把 receipt_quantity 覆盖成仅最后一次本次量(如先 1000 再 100 却存成 100)。
|
||||||
|
*/
|
||||||
|
private static void alignPersistedReceiptQuantityToCumulative(ReceiptMaterialDetailDO detailDO,
|
||||||
|
ReceiptMaterialDetail entity) {
|
||||||
|
if (detailDO == null || entity == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (detailDO.getAlreadyReceiptQuantity() != null) {
|
||||||
|
entity.setReceiptQuantity(detailDO.getAlreadyReceiptQuantity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 从materialMoreDetailList中根据attributeOption提取字段值并更新入库单明细
|
* @description 从materialMoreDetailList中根据attributeOption提取字段值并更新入库单明细
|
||||||
* @author Auto
|
* @author Auto
|
||||||
|
|||||||
+34
@@ -80,6 +80,20 @@ public class ReceiptMaterialDetailPO extends BaseVOEntity {
|
|||||||
@Excel(name = "已收货数量")
|
@Excel(name = "已收货数量")
|
||||||
private BigDecimal alreadyReceiptQuantity;
|
private BigDecimal alreadyReceiptQuantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货毛重(KG),称重实绩")
|
||||||
|
@Excel(name = "累计已收货毛重(KG)")
|
||||||
|
private BigDecimal alreadyReceiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货净重(KG)")
|
||||||
|
@Excel(name = "累计已收货净重(KG)")
|
||||||
|
private BigDecimal alreadyReceiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货体积(CBM)")
|
||||||
|
private BigDecimal alreadyReceiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货面积(SQM)")
|
||||||
|
private BigDecimal alreadyReceiptArea;
|
||||||
|
|
||||||
@ApiModelProperty("待收货数量")
|
@ApiModelProperty("待收货数量")
|
||||||
@Excel(name = "待收货数量")
|
@Excel(name = "待收货数量")
|
||||||
private BigDecimal pendingReceiptQuantity;
|
private BigDecimal pendingReceiptQuantity;
|
||||||
@@ -242,6 +256,26 @@ public class ReceiptMaterialDetailPO extends BaseVOEntity {
|
|||||||
@Excel(name = "总面积(SQM)")
|
@Excel(name = "总面积(SQM)")
|
||||||
private BigDecimal totalArea;
|
private BigDecimal totalArea;
|
||||||
|
|
||||||
|
/** 计划净重:入库单明细 total(联表 b),与收货单行首次创建时计划 total 同源;不落库,仅查询带出 */
|
||||||
|
@ApiModelProperty("计划净重(KG),入库单口径,不落库")
|
||||||
|
private BigDecimal planNetWeight;
|
||||||
|
@ApiModelProperty("计划毛重(KG),入库单口径,不落库")
|
||||||
|
private BigDecimal planGrossWeight;
|
||||||
|
@ApiModelProperty("计划体积(CBM),入库单口径,不落库")
|
||||||
|
private BigDecimal planVolume;
|
||||||
|
@ApiModelProperty("计划面积(SQM),入库单口径,不落库")
|
||||||
|
private BigDecimal planArea;
|
||||||
|
|
||||||
|
/** 待收 = 计划 − 累计已收货,仅接口计算不落库 */
|
||||||
|
@ApiModelProperty("待收净重=计划净重-累计已收货净重,仅计算不落库")
|
||||||
|
private BigDecimal pendingNetWeight;
|
||||||
|
@ApiModelProperty("待收毛重=计划毛重-累计已收货毛重,仅计算不落库")
|
||||||
|
private BigDecimal pendingGrossWeight;
|
||||||
|
@ApiModelProperty("待收体积=计划体积-累计已收货体积,仅计算不落库")
|
||||||
|
private BigDecimal pendingVolume;
|
||||||
|
@ApiModelProperty("待收面积=计划面积-累计已收货面积,仅计算不落库")
|
||||||
|
private BigDecimal pendingArea;
|
||||||
|
|
||||||
@ApiModelProperty("Invoice No.")
|
@ApiModelProperty("Invoice No.")
|
||||||
@Excel(name = "Invoice No.")
|
@Excel(name = "Invoice No.")
|
||||||
private String invoiceNo;
|
private String invoiceNo;
|
||||||
|
|||||||
+24
@@ -78,6 +78,30 @@ public class ReceiptMaterialDetailDO extends BaseVOEntity {
|
|||||||
@Excel(name = "已收货数量")
|
@Excel(name = "已收货数量")
|
||||||
private BigDecimal alreadyReceiptQuantity;
|
private BigDecimal alreadyReceiptQuantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货毛重(KG),称重实绩")
|
||||||
|
private BigDecimal alreadyReceiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货净重(KG)")
|
||||||
|
private BigDecimal alreadyReceiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次称重毛重(KG),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次净重(KG),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货体积(CBM)")
|
||||||
|
private BigDecimal alreadyReceiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货面积(SQM)")
|
||||||
|
private BigDecimal alreadyReceiptArea;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次体积(CBM),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次面积(SQM),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptArea;
|
||||||
|
|
||||||
@ApiModelProperty("收货数量")
|
@ApiModelProperty("收货数量")
|
||||||
@Excel(name = "收货数量")
|
@Excel(name = "收货数量")
|
||||||
private BigDecimal receiptQuantity;
|
private BigDecimal receiptQuantity;
|
||||||
|
|||||||
+30
-30
@@ -259,7 +259,7 @@ public class StockInOrderDomainService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 填充入库单明细的收货数量、上架数量,以及更新毛重、净重、面积、体积
|
// 填充入库单明细的收货数量、上架数量;入库单明细 total* 保持计划值不因收货覆盖(原按收货汇总 total* 已注释保留)
|
||||||
for (InMaterialDetailPO inMaterialDetail : inMaterialDetailPOList) {
|
for (InMaterialDetailPO inMaterialDetail : inMaterialDetailPOList) {
|
||||||
Long materialDetailId = inMaterialDetail.getMaterialDetailId();
|
Long materialDetailId = inMaterialDetail.getMaterialDetailId();
|
||||||
if (materialDetailId != null) {
|
if (materialDetailId != null) {
|
||||||
@@ -273,18 +273,18 @@ public class StockInOrderDomainService {
|
|||||||
|
|
||||||
// 更新毛重、净重、面积、体积(根据收货时所填的明细行数据更新到入库单明细中)
|
// 更新毛重、净重、面积、体积(根据收货时所填的明细行数据更新到入库单明细中)
|
||||||
// 将收货单明细中填写的数据汇总后更新到入库单明细
|
// 将收货单明细中填写的数据汇总后更新到入库单明细
|
||||||
if (receiptDetail.getTotalGrossWeight() != null) {
|
// if (receiptDetail.getTotalGrossWeight() != null) {
|
||||||
inMaterialDetail.setTotalGrossWeight(receiptDetail.getTotalGrossWeight());
|
// inMaterialDetail.setTotalGrossWeight(receiptDetail.getTotalGrossWeight());
|
||||||
}
|
// }
|
||||||
if (receiptDetail.getTotalNetWeight() != null) {
|
// if (receiptDetail.getTotalNetWeight() != null) {
|
||||||
inMaterialDetail.setTotalNetWeight(receiptDetail.getTotalNetWeight());
|
// inMaterialDetail.setTotalNetWeight(receiptDetail.getTotalNetWeight());
|
||||||
}
|
// }
|
||||||
if (receiptDetail.getTotalArea() != null) {
|
// if (receiptDetail.getTotalArea() != null) {
|
||||||
inMaterialDetail.setTotalArea(receiptDetail.getTotalArea());
|
// inMaterialDetail.setTotalArea(receiptDetail.getTotalArea());
|
||||||
}
|
// }
|
||||||
if (receiptDetail.getTotalVolume() != null) {
|
// if (receiptDetail.getTotalVolume() != null) {
|
||||||
inMaterialDetail.setTotalVolume(receiptDetail.getTotalVolume());
|
// inMaterialDetail.setTotalVolume(receiptDetail.getTotalVolume());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// 填充上架数量(入库单对应的上架单实际上架数量)
|
// 填充上架数量(入库单对应的上架单实际上架数量)
|
||||||
@@ -301,7 +301,7 @@ public class StockInOrderDomainService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归处理收货单明细,汇总毛重、净重、面积、体积
|
* 递归处理收货单明细,汇总收货数量;毛重/净重/面积/体积汇总已注释(入库单明细 total* 不因收货覆盖)
|
||||||
* @param receiptDetail 收货单明细
|
* @param receiptDetail 收货单明细
|
||||||
* @param receiptDetailMap 收货单明细汇总Map
|
* @param receiptDetailMap 收货单明细汇总Map
|
||||||
*/
|
*/
|
||||||
@@ -323,23 +323,23 @@ public class StockInOrderDomainService {
|
|||||||
BigDecimal newReceiptQuantity = receiptDetail.getReceiptQuantity() != null ? receiptDetail.getReceiptQuantity() : BigDecimal.ZERO;
|
BigDecimal newReceiptQuantity = receiptDetail.getReceiptQuantity() != null ? receiptDetail.getReceiptQuantity() : BigDecimal.ZERO;
|
||||||
existing.setReceiptQuantity(receiptQuantity.add(newReceiptQuantity));
|
existing.setReceiptQuantity(receiptQuantity.add(newReceiptQuantity));
|
||||||
|
|
||||||
// 汇总毛重、净重、面积、体积(根据收货时填写的数据)
|
// 汇总毛重、净重、面积、体积(根据收货时填写的数据)— 入库单明细 total* 不因收货覆盖,已注释保留
|
||||||
// 累加所有收货单明细的毛重、净重、面积、体积
|
// 累加所有收货单明细的毛重、净重、面积、体积
|
||||||
BigDecimal existingGrossWeight = existing.getTotalGrossWeight() != null ? existing.getTotalGrossWeight() : BigDecimal.ZERO;
|
// BigDecimal existingGrossWeight = existing.getTotalGrossWeight() != null ? existing.getTotalGrossWeight() : BigDecimal.ZERO;
|
||||||
BigDecimal newGrossWeight = receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO;
|
// BigDecimal newGrossWeight = receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO;
|
||||||
existing.setTotalGrossWeight(existingGrossWeight.add(newGrossWeight));
|
// existing.setTotalGrossWeight(existingGrossWeight.add(newGrossWeight));
|
||||||
|
//
|
||||||
BigDecimal existingNetWeight = existing.getTotalNetWeight() != null ? existing.getTotalNetWeight() : BigDecimal.ZERO;
|
// BigDecimal existingNetWeight = existing.getTotalNetWeight() != null ? existing.getTotalNetWeight() : BigDecimal.ZERO;
|
||||||
BigDecimal newNetWeight = receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO;
|
// BigDecimal newNetWeight = receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO;
|
||||||
existing.setTotalNetWeight(existingNetWeight.add(newNetWeight));
|
// existing.setTotalNetWeight(existingNetWeight.add(newNetWeight));
|
||||||
|
//
|
||||||
BigDecimal existingArea = existing.getTotalArea() != null ? existing.getTotalArea() : BigDecimal.ZERO;
|
// BigDecimal existingArea = existing.getTotalArea() != null ? existing.getTotalArea() : BigDecimal.ZERO;
|
||||||
BigDecimal newArea = receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO;
|
// BigDecimal newArea = receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO;
|
||||||
existing.setTotalArea(existingArea.add(newArea));
|
// existing.setTotalArea(existingArea.add(newArea));
|
||||||
|
//
|
||||||
BigDecimal existingVolume = existing.getTotalVolume() != null ? existing.getTotalVolume() : BigDecimal.ZERO;
|
// BigDecimal existingVolume = existing.getTotalVolume() != null ? existing.getTotalVolume() : BigDecimal.ZERO;
|
||||||
BigDecimal newVolume = receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO;
|
// BigDecimal newVolume = receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO;
|
||||||
existing.setTotalVolume(existingVolume.add(newVolume));
|
// existing.setTotalVolume(existingVolume.add(newVolume));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 递归处理子明细
|
// 递归处理子明细
|
||||||
|
|||||||
+94
-54
@@ -404,7 +404,7 @@ public class StockReceiptOrderDomainService {
|
|||||||
genInventoryStandingReport(stockReceiptOrderPO, stockReceiptOrderDO);
|
genInventoryStandingReport(stockReceiptOrderPO, stockReceiptOrderDO);
|
||||||
//修改物料明细信息
|
//修改物料明细信息
|
||||||
receiptMaterialDetailService.batchReceiptUpdate(stockReceiptOrderDO);
|
receiptMaterialDetailService.batchReceiptUpdate(stockReceiptOrderDO);
|
||||||
//同步更新入库单明细的收货数量、总毛重、总净重、总面积、总体积
|
// 同步更新入库单明细的收货数量(入库单 totalNetWeight/totalGrossWeight/totalVolume/totalArea 不因收货改库,见 sync 内注释)
|
||||||
syncUpdateInMaterialDetailFromReceipt(stockReceiptOrderDO, stockReceiptOrderPO);
|
syncUpdateInMaterialDetailFromReceipt(stockReceiptOrderDO, stockReceiptOrderPO);
|
||||||
//生成 收货作业单
|
//生成 收货作业单
|
||||||
genStockReceiptTaskOrderByReceivingGoods(stockReceiptOrderPO,stockReceiptOrderDO);
|
genStockReceiptTaskOrderByReceivingGoods(stockReceiptOrderPO,stockReceiptOrderDO);
|
||||||
@@ -419,7 +419,7 @@ public class StockReceiptOrderDomainService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步更新入库单明细的收货数量、总毛重、总净重、总面积、总体积
|
* 同步更新入库单明细的收货数量(总毛重/总净重/总面积/总体积不再写入入库单明细,逻辑已注释保留)
|
||||||
* 根据收货单明细中填写的数据,按 materialDetailId 分组汇总后更新到入库单明细
|
* 根据收货单明细中填写的数据,按 materialDetailId 分组汇总后更新到入库单明细
|
||||||
* @param stockReceiptOrderDO 收货单DO
|
* @param stockReceiptOrderDO 收货单DO
|
||||||
* @param stockReceiptOrderPO 收货单PO(可选,如果为null则从DO中获取)
|
* @param stockReceiptOrderPO 收货单PO(可选,如果为null则从DO中获取)
|
||||||
@@ -511,29 +511,26 @@ public class StockReceiptOrderDomainService {
|
|||||||
hasUpdate = true;
|
hasUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新总毛重
|
// 更新总毛重/总净重/总面积/总体积:入库单明细保持计划值,收货实绩仅在收货单侧,此处不再改库(原逻辑保留如下)
|
||||||
if (summary.containsKey("totalGrossWeight") && summary.get("totalGrossWeight") != null) {
|
// if (summary.containsKey("totalGrossWeight") && summary.get("totalGrossWeight") != null) {
|
||||||
updateWrapper.set("total_gross_weight", summary.get("totalGrossWeight"));
|
// updateWrapper.set("total_gross_weight", summary.get("totalGrossWeight"));
|
||||||
hasUpdate = true;
|
// hasUpdate = true;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 更新总净重
|
// if (summary.containsKey("totalNetWeight") && summary.get("totalNetWeight") != null) {
|
||||||
if (summary.containsKey("totalNetWeight") && summary.get("totalNetWeight") != null) {
|
// updateWrapper.set("total_net_weight", summary.get("totalNetWeight"));
|
||||||
updateWrapper.set("total_net_weight", summary.get("totalNetWeight"));
|
// hasUpdate = true;
|
||||||
hasUpdate = true;
|
// }
|
||||||
}
|
//
|
||||||
|
// if (summary.containsKey("totalArea") && summary.get("totalArea") != null) {
|
||||||
// 更新总面积
|
// updateWrapper.set("total_area", summary.get("totalArea"));
|
||||||
if (summary.containsKey("totalArea") && summary.get("totalArea") != null) {
|
// hasUpdate = true;
|
||||||
updateWrapper.set("total_area", summary.get("totalArea"));
|
// }
|
||||||
hasUpdate = true;
|
//
|
||||||
}
|
// if (summary.containsKey("totalVolume") && summary.get("totalVolume") != null) {
|
||||||
|
// updateWrapper.set("total_volume", summary.get("totalVolume"));
|
||||||
// 更新总体积
|
// hasUpdate = true;
|
||||||
if (summary.containsKey("totalVolume") && summary.get("totalVolume") != null) {
|
// }
|
||||||
updateWrapper.set("total_volume", summary.get("totalVolume"));
|
|
||||||
hasUpdate = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasUpdate) {
|
if (hasUpdate) {
|
||||||
updateWrapper.set("update_by", loginUser.getUserid());
|
updateWrapper.set("update_by", loginUser.getUserid());
|
||||||
@@ -541,13 +538,9 @@ public class StockReceiptOrderDomainService {
|
|||||||
updateWrapper.set("update_time", updateTime);
|
updateWrapper.set("update_time", updateTime);
|
||||||
boolean updateResult = iInMaterialDetailService.update(updateWrapper);
|
boolean updateResult = iInMaterialDetailService.update(updateWrapper);
|
||||||
if (updateResult) {
|
if (updateResult) {
|
||||||
log.info("成功更新入库单明细,uniqueId: {}, 收货数量: {}, 总毛重: {}, 总净重: {}, 总面积: {}, 总体积: {}",
|
log.info("成功更新入库单明细,uniqueId: {}, 收货数量: {}(入库单 total* 不再随收货同步)",
|
||||||
uniqueId,
|
uniqueId,
|
||||||
summary.get("receiptQuantity"),
|
summary.get("receiptQuantity"));
|
||||||
summary.get("totalGrossWeight"),
|
|
||||||
summary.get("totalNetWeight"),
|
|
||||||
summary.get("totalArea"),
|
|
||||||
summary.get("totalVolume"));
|
|
||||||
} else {
|
} else {
|
||||||
log.warn("更新入库单明细失败,uniqueId: {}, inOrderNumber: {}", uniqueId, inOrderNumber);
|
log.warn("更新入库单明细失败,uniqueId: {}, inOrderNumber: {}", uniqueId, inOrderNumber);
|
||||||
}
|
}
|
||||||
@@ -562,7 +555,7 @@ public class StockReceiptOrderDomainService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归处理收货单明细,汇总收货数量、总毛重、总净重、总面积、总体积
|
* 递归处理收货单明细,汇总收货数量(总毛重/净重/面积/体积的汇总已注释,不再写入入库单)
|
||||||
* @param receiptDetail 收货单明细PO
|
* @param receiptDetail 收货单明细PO
|
||||||
* @param uniqueIdSummaryMap 汇总Map,key为入库单明细的unique_id(即收货单明细的in_unique_id),value为字段汇总Map
|
* @param uniqueIdSummaryMap 汇总Map,key为入库单明细的unique_id(即收货单明细的in_unique_id),value为字段汇总Map
|
||||||
*/
|
*/
|
||||||
@@ -576,30 +569,36 @@ public class StockReceiptOrderDomainService {
|
|||||||
Long uniqueId = receiptDetail.getInUniqueId();
|
Long uniqueId = receiptDetail.getInUniqueId();
|
||||||
Map<String, BigDecimal> summary = uniqueIdSummaryMap.computeIfAbsent(uniqueId, k -> new HashMap<>());
|
Map<String, BigDecimal> summary = uniqueIdSummaryMap.computeIfAbsent(uniqueId, k -> new HashMap<>());
|
||||||
|
|
||||||
// 汇总收货数量
|
// 汇总收货数量:必须按「累计已收货」汇总。receipt_quantity 字段存的是本次收货量,多次收货会覆盖为最后一次;
|
||||||
|
// 同步入库单明细应使用 already_receipt_quantity,否则会误把最后一次的本次量写入 in_material_detail。
|
||||||
BigDecimal receiptQuantity = summary.getOrDefault("receiptQuantity", BigDecimal.ZERO);
|
BigDecimal receiptQuantity = summary.getOrDefault("receiptQuantity", BigDecimal.ZERO);
|
||||||
BigDecimal newReceiptQuantity = receiptDetail.getReceiptQuantity() != null ? receiptDetail.getReceiptQuantity() : BigDecimal.ZERO;
|
BigDecimal alreadyReceipt = receiptDetail.getAlreadyReceiptQuantity() != null ? receiptDetail.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
|
||||||
summary.put("receiptQuantity", receiptQuantity.add(newReceiptQuantity));
|
summary.put("receiptQuantity", receiptQuantity.add(alreadyReceipt));
|
||||||
|
|
||||||
// 汇总总毛重
|
// 汇总总毛重/净重/面积/体积:曾用于同步写入入库单明细,现已不再改入库单 total*,汇总逻辑注释保留
|
||||||
BigDecimal totalGrossWeight = summary.getOrDefault("totalGrossWeight", BigDecimal.ZERO);
|
// BigDecimal totalGrossWeight = summary.getOrDefault("totalGrossWeight", BigDecimal.ZERO);
|
||||||
BigDecimal newGrossWeight = receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO;
|
// BigDecimal newGrossWeight = receiptDetail.getAlreadyReceiptGrossWeight() != null
|
||||||
summary.put("totalGrossWeight", totalGrossWeight.add(newGrossWeight));
|
// ? receiptDetail.getAlreadyReceiptGrossWeight()
|
||||||
|
// : (receiptDetail.getTotalGrossWeight() != null ? receiptDetail.getTotalGrossWeight() : BigDecimal.ZERO);
|
||||||
// 汇总总净重
|
// summary.put("totalGrossWeight", totalGrossWeight.add(newGrossWeight));
|
||||||
BigDecimal totalNetWeight = summary.getOrDefault("totalNetWeight", BigDecimal.ZERO);
|
//
|
||||||
BigDecimal newNetWeight = receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO;
|
// BigDecimal totalNetWeight = summary.getOrDefault("totalNetWeight", BigDecimal.ZERO);
|
||||||
summary.put("totalNetWeight", totalNetWeight.add(newNetWeight));
|
// BigDecimal newNetWeight = receiptDetail.getAlreadyReceiptNetWeight() != null
|
||||||
|
// ? receiptDetail.getAlreadyReceiptNetWeight()
|
||||||
// 汇总总面积
|
// : (receiptDetail.getTotalNetWeight() != null ? receiptDetail.getTotalNetWeight() : BigDecimal.ZERO);
|
||||||
BigDecimal totalArea = summary.getOrDefault("totalArea", BigDecimal.ZERO);
|
// summary.put("totalNetWeight", totalNetWeight.add(newNetWeight));
|
||||||
BigDecimal newArea = receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO;
|
//
|
||||||
summary.put("totalArea", totalArea.add(newArea));
|
// BigDecimal totalArea = summary.getOrDefault("totalArea", BigDecimal.ZERO);
|
||||||
|
// BigDecimal newArea = receiptDetail.getAlreadyReceiptArea() != null
|
||||||
// 汇总总体积
|
// ? receiptDetail.getAlreadyReceiptArea()
|
||||||
BigDecimal totalVolume = summary.getOrDefault("totalVolume", BigDecimal.ZERO);
|
// : (receiptDetail.getTotalArea() != null ? receiptDetail.getTotalArea() : BigDecimal.ZERO);
|
||||||
BigDecimal newVolume = receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO;
|
// summary.put("totalArea", totalArea.add(newArea));
|
||||||
summary.put("totalVolume", totalVolume.add(newVolume));
|
//
|
||||||
|
// BigDecimal totalVolume = summary.getOrDefault("totalVolume", BigDecimal.ZERO);
|
||||||
|
// BigDecimal newVolume = receiptDetail.getAlreadyReceiptVolume() != null
|
||||||
|
// ? receiptDetail.getAlreadyReceiptVolume()
|
||||||
|
// : (receiptDetail.getTotalVolume() != null ? receiptDetail.getTotalVolume() : BigDecimal.ZERO);
|
||||||
|
// summary.put("totalVolume", totalVolume.add(newVolume));
|
||||||
|
|
||||||
// 递归处理子明细
|
// 递归处理子明细
|
||||||
if (!CollectionUtils.isEmpty(receiptDetail.getChildren())) {
|
if (!CollectionUtils.isEmpty(receiptDetail.getChildren())) {
|
||||||
@@ -712,6 +711,8 @@ public class StockReceiptOrderDomainService {
|
|||||||
if (abnormal == 1){
|
if (abnormal == 1){
|
||||||
genInOrderAbnormal(stockReceiptOrderPO);
|
genInOrderAbnormal(stockReceiptOrderPO);
|
||||||
}
|
}
|
||||||
|
// 完成收货:同步更新本单全部明细收货状态(与整单收货 entireReceipt 一致,否则 PDA/列表仍显示收货中)
|
||||||
|
updateReceiptMaterialDetailReceiptStatusWhenOrderCompleted(stockReceiptOrderPO, loginUser, userRealName);
|
||||||
return stockReceiptOrderService.update(null, new UpdateWrapper<StockReceiptOrder>().lambda()
|
return stockReceiptOrderService.update(null, new UpdateWrapper<StockReceiptOrder>().lambda()
|
||||||
.set(StockReceiptOrder::getStatus, 3)
|
.set(StockReceiptOrder::getStatus, 3)
|
||||||
.set(StockReceiptOrder::getAbnormal, abnormal)
|
.set(StockReceiptOrder::getAbnormal, abnormal)
|
||||||
@@ -721,6 +722,45 @@ public class StockReceiptOrderDomainService {
|
|||||||
.eq(StockReceiptOrder::getReceiptOrderId, receiptOrderId));
|
.eq(StockReceiptOrder::getReceiptOrderId, receiptOrderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收货单完成时:按累计已收与计划数量比较,更新明细 receipt_status(3 正常收完 / 4 少收 / 5 超收)
|
||||||
|
*/
|
||||||
|
private void updateReceiptMaterialDetailReceiptStatusWhenOrderCompleted(StockReceiptOrderPO stockReceiptOrderPO,
|
||||||
|
LoginUser loginUser, String userRealName) {
|
||||||
|
if (stockReceiptOrderPO == null || StringUtils.isBlank(stockReceiptOrderPO.getReceiptOrderNumber())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Date updateTime = new Date();
|
||||||
|
List<ReceiptMaterialDetail> details = receiptMaterialDetailService.list(
|
||||||
|
new QueryWrapper<ReceiptMaterialDetail>().lambda()
|
||||||
|
.eq(ReceiptMaterialDetail::getReceiptOrderNumber, stockReceiptOrderPO.getReceiptOrderNumber())
|
||||||
|
.eq(ReceiptMaterialDetail::getDelFlag, 1));
|
||||||
|
if (CollectionUtils.isEmpty(details)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (ReceiptMaterialDetail d : details) {
|
||||||
|
d.setReceiptStatus(resolveReceiptDetailStatusOnOrderComplete(d.getAlreadyReceiptQuantity(), d.getQuantity()));
|
||||||
|
d.setUpdateBy(loginUser.getUserid());
|
||||||
|
d.setUpdateByName(userRealName);
|
||||||
|
d.setUpdateTime(updateTime);
|
||||||
|
}
|
||||||
|
receiptMaterialDetailService.updateBatchById(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 3=已收足 4=少收 5=超收 */
|
||||||
|
private static Integer resolveReceiptDetailStatusOnOrderComplete(BigDecimal alreadyReceiptQuantity, BigDecimal quantity) {
|
||||||
|
BigDecimal already = alreadyReceiptQuantity != null ? alreadyReceiptQuantity : BigDecimal.ZERO;
|
||||||
|
BigDecimal plan = quantity != null ? quantity : BigDecimal.ZERO;
|
||||||
|
int cmp = already.compareTo(plan);
|
||||||
|
if (cmp > 0) {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
if (cmp < 0) {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param receiptOrderId
|
* @param receiptOrderId
|
||||||
* @return Boolean
|
* @return Boolean
|
||||||
|
|||||||
+24
@@ -73,6 +73,30 @@ public class ReceiptMaterialDetailDTO extends BaseVOEntity {
|
|||||||
@Excel(name = "已收货数量")
|
@Excel(name = "已收货数量")
|
||||||
private BigDecimal alreadyReceiptQuantity;
|
private BigDecimal alreadyReceiptQuantity;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货毛重(KG),称重实绩")
|
||||||
|
private BigDecimal alreadyReceiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货净重(KG)")
|
||||||
|
private BigDecimal alreadyReceiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次称重毛重(KG),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptGrossWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次净重(KG),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptNetWeight;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货体积(CBM)")
|
||||||
|
private BigDecimal alreadyReceiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("累计已收货面积(SQM)")
|
||||||
|
private BigDecimal alreadyReceiptArea;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次体积(CBM),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptVolume;
|
||||||
|
|
||||||
|
@ApiModelProperty("本次面积(SQM),仅提交请求使用,不落库")
|
||||||
|
private BigDecimal receiptArea;
|
||||||
|
|
||||||
@ApiModelProperty("收货数量")
|
@ApiModelProperty("收货数量")
|
||||||
@Excel(name = "收货数量")
|
@Excel(name = "收货数量")
|
||||||
private BigDecimal receiptQuantity;
|
private BigDecimal receiptQuantity;
|
||||||
|
|||||||
+11
-4
@@ -1,6 +1,6 @@
|
|||||||
package com.mhd.wms.interfaces.facadeApp.stockReceiptOrder;
|
package com.mhd.wms.interfaces.facadeApp.stockReceiptOrder;
|
||||||
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.mhd.common.core.web.controller.BaseController;
|
import com.mhd.common.core.web.controller.BaseController;
|
||||||
import com.mhd.common.core.web.domain.AjaxResult;
|
import com.mhd.common.core.web.domain.AjaxResult;
|
||||||
import com.mhd.common.core.web.page.TableDataInfoApi;
|
import com.mhd.common.core.web.page.TableDataInfoApi;
|
||||||
@@ -11,6 +11,7 @@ import com.mhd.wms.domain.stockReceiptOrder.repository.todo.StockReceiptOrderDO;
|
|||||||
import com.mhd.wms.interfaces.assember.stockReceiptOrder.StockReceiptOrderAssembler;
|
import com.mhd.wms.interfaces.assember.stockReceiptOrder.StockReceiptOrderAssembler;
|
||||||
import com.mhd.wms.interfaces.dto.stockReceiptOrder.StockReceiptOrderDTO;
|
import com.mhd.wms.interfaces.dto.stockReceiptOrder.StockReceiptOrderDTO;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@@ -32,6 +33,9 @@ public class StockReceiptOrderAppApi extends BaseController {
|
|||||||
@Resource
|
@Resource
|
||||||
private StockReceiptOrderAssembler stockReceiptOrderAssembler;
|
private StockReceiptOrderAssembler stockReceiptOrderAssembler;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询收货单列表
|
* 分页查询收货单列表
|
||||||
*/
|
*/
|
||||||
@@ -51,7 +55,9 @@ public class StockReceiptOrderAppApi extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@ApiOperation("获取收货单详细信息")
|
@ApiOperation("获取收货单详细信息")
|
||||||
@GetMapping(value = "/getInfoByApp")
|
@GetMapping(value = "/getInfoByApp")
|
||||||
public AjaxResult getInfoByApp(@RequestParam Long receiptOrderId,
|
public AjaxResult getInfoByApp(
|
||||||
|
@ApiParam(value = "收货单ID", required = true) @RequestParam Long receiptOrderId,
|
||||||
|
@ApiParam(value = "明细筛选:1=待收货(仅状态1待收货、2收货中);3=已收货(仅3已收货、4少收、5超收)")
|
||||||
@RequestParam(required = false) Integer receiptStatus) {
|
@RequestParam(required = false) Integer receiptStatus) {
|
||||||
return AjaxResult.success(stockReceiptOrderApplicationService.getInfoByApp(receiptOrderId, receiptStatus));
|
return AjaxResult.success(stockReceiptOrderApplicationService.getInfoByApp(receiptOrderId, receiptStatus));
|
||||||
}
|
}
|
||||||
@@ -62,7 +68,8 @@ public class StockReceiptOrderAppApi extends BaseController {
|
|||||||
@ApiOperation("收货")
|
@ApiOperation("收货")
|
||||||
@PostMapping("/receivingGoods")
|
@PostMapping("/receivingGoods")
|
||||||
public AjaxResult receivingGoods(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) {
|
public AjaxResult receivingGoods(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) {
|
||||||
StockReceiptOrderDO stockReceiptOrderDO = JSONUtil.toBean(JSONUtil.toJsonStr(stockReceiptOrderDTO), StockReceiptOrderDO.class);
|
// 勿用 Hutool JSON 往返转 DO:嵌套 children、receiptGrossWeight/receiptNetWeight/receiptVolume/receiptArea 等会丢失或类型不对,导致累计未落库
|
||||||
|
StockReceiptOrderDO stockReceiptOrderDO = objectMapper.convertValue(stockReceiptOrderDTO, StockReceiptOrderDO.class);
|
||||||
return toAjax(stockReceiptOrderApplicationService.receivingGoodsByApp(stockReceiptOrderDO));
|
return toAjax(stockReceiptOrderApplicationService.receivingGoodsByApp(stockReceiptOrderDO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +94,7 @@ public class StockReceiptOrderAppApi extends BaseController {
|
|||||||
@ApiOperation("无单收货")
|
@ApiOperation("无单收货")
|
||||||
@PostMapping("/noOrderReceipt")
|
@PostMapping("/noOrderReceipt")
|
||||||
public AjaxResult noOrderReceipt(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) {
|
public AjaxResult noOrderReceipt(@RequestBody StockReceiptOrderDTO stockReceiptOrderDTO) {
|
||||||
StockReceiptOrderDO stockReceiptOrderDO = JSONUtil.toBean(JSONUtil.toJsonStr(stockReceiptOrderDTO), StockReceiptOrderDO.class);
|
StockReceiptOrderDO stockReceiptOrderDO = objectMapper.convertValue(stockReceiptOrderDTO, StockReceiptOrderDO.class);
|
||||||
return toAjax(stockReceiptOrderApplicationService.noOrderReceipt(stockReceiptOrderDO));
|
return toAjax(stockReceiptOrderApplicationService.noOrderReceipt(stockReceiptOrderDO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-1
@@ -17,6 +17,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="barCode" column="bar_code" />
|
<result property="barCode" column="bar_code" />
|
||||||
<result property="specificationModel" column="specification_model" />
|
<result property="specificationModel" column="specification_model" />
|
||||||
<result property="quantity" column="quantity" />
|
<result property="quantity" column="quantity" />
|
||||||
|
<result property="alreadyReceiptGrossWeight" column="already_receipt_gross_weight" />
|
||||||
|
<result property="alreadyReceiptNetWeight" column="already_receipt_net_weight" />
|
||||||
|
<result property="alreadyReceiptVolume" column="already_receipt_volume" />
|
||||||
|
<result property="alreadyReceiptArea" column="already_receipt_area" />
|
||||||
<result property="receiptQuantity" column="receipt_quantity" />
|
<result property="receiptQuantity" column="receipt_quantity" />
|
||||||
<result property="receiptStatus" column="receipt_status" />
|
<result property="receiptStatus" column="receipt_status" />
|
||||||
<result property="packId" column="pack_id" />
|
<result property="packId" column="pack_id" />
|
||||||
@@ -62,6 +66,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="totalGrossWeight" column="total_gross_weight" />
|
<result property="totalGrossWeight" column="total_gross_weight" />
|
||||||
<result property="totalVolume" column="total_volume" />
|
<result property="totalVolume" column="total_volume" />
|
||||||
<result property="totalArea" column="total_area" />
|
<result property="totalArea" column="total_area" />
|
||||||
|
<result property="planNetWeight" column="PLAN_NET_WEIGHT" />
|
||||||
|
<result property="planGrossWeight" column="PLAN_GROSS_WEIGHT" />
|
||||||
|
<result property="planVolume" column="PLAN_VOLUME" />
|
||||||
|
<result property="planArea" column="PLAN_AREA" />
|
||||||
<result property="invoiceNo" column="INVOICE_NO" />
|
<result property="invoiceNo" column="INVOICE_NO" />
|
||||||
<result property="batchRefNo" column="BATCH_REF_NO" />
|
<result property="batchRefNo" column="BATCH_REF_NO" />
|
||||||
<result property="sheetRefNo" column="SHEET_REF_NO" />
|
<result property="sheetRefNo" column="SHEET_REF_NO" />
|
||||||
@@ -82,11 +90,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
ifnull(a.MATERIAL_NAME, c.MATERIAL_NAME) MATERIAL_NAME,
|
ifnull(a.MATERIAL_NAME, c.MATERIAL_NAME) MATERIAL_NAME,
|
||||||
a.BAR_CODE,
|
a.BAR_CODE,
|
||||||
c.SPECIFICATION_MODEL,
|
c.SPECIFICATION_MODEL,
|
||||||
a.QUANTITY, a.ALREADY_RECEIPT_QUANTITY, a.RECEIPT_QUANTITY, a.RECEIPT_STATUS, a.PACK_ID, a.PACK_CODE, a.PACK_NAME, a.PACK_DETAIL_ID, ifnull(a.UNIT_CODE, b.UNIT_CODE) UNIT_CODE, ifnull(a.UNIT_NAME, b.UNIT_NAME) UNIT_NAME, a.UNIT_NUMBER, a.MATERIAL_WAREHOUSE_CONTROL_ID, a.SERIAL_NUMBER_MANAGE, a.QUALITY_INSPECTION_MANAGE, a.QUALITY_INSPECTION_STAGE, a.QUALITY_INSPECTION_RULE, a.QUALITY_INSPECTION_RATIO, a.QUALITY_INSPECTION_TERM, a.QUALITY_INSPECTION_RESULTS, a.ALLOW_OVERCHARGE, a.OVERCHARGE_RATIO, a.BATCH_NUMBER, a.MATERIAL_STATUS_CODE, a.MATERIAL_STATUS_NAME, a.DISTRIBUTE_RULE_ID, a.DISTRIBUTE_RULE_CODE, a.DISTRIBUTE_RULE_NAME, a.CONTAINER_ID, a.CONTAINER_CODE, a.CONTAINER_TYPE, a.CONTAINER_TYPE_NAME, a.LEVEL, a.PARENT_UNIQUE_ID, a.IN_UNIQUE_ID, a.ALLOW_MODIFY, a.REMARK, a.CREATE_TIME, a.CREATE_BY, a.CREATE_BY_NAME, a.UPDATE_TIME, a.UPDATE_BY, a.UPDATE_BY_NAME, a.GEN_STOCK_SHELF, a.DEL_FLAG,
|
a.QUANTITY, a.ALREADY_RECEIPT_QUANTITY, a.ALREADY_RECEIPT_GROSS_WEIGHT, a.ALREADY_RECEIPT_NET_WEIGHT, a.ALREADY_RECEIPT_VOLUME, a.ALREADY_RECEIPT_AREA, a.RECEIPT_QUANTITY, a.RECEIPT_STATUS, a.PACK_ID, a.PACK_CODE, a.PACK_NAME, a.PACK_DETAIL_ID, ifnull(a.UNIT_CODE, b.UNIT_CODE) UNIT_CODE, ifnull(a.UNIT_NAME, b.UNIT_NAME) UNIT_NAME, a.UNIT_NUMBER, a.MATERIAL_WAREHOUSE_CONTROL_ID, a.SERIAL_NUMBER_MANAGE, a.QUALITY_INSPECTION_MANAGE, a.QUALITY_INSPECTION_STAGE, a.QUALITY_INSPECTION_RULE, a.QUALITY_INSPECTION_RATIO, a.QUALITY_INSPECTION_TERM, a.QUALITY_INSPECTION_RESULTS, a.ALLOW_OVERCHARGE, a.OVERCHARGE_RATIO, a.BATCH_NUMBER, a.MATERIAL_STATUS_CODE, a.MATERIAL_STATUS_NAME, a.DISTRIBUTE_RULE_ID, a.DISTRIBUTE_RULE_CODE, a.DISTRIBUTE_RULE_NAME, a.CONTAINER_ID, a.CONTAINER_CODE, a.CONTAINER_TYPE, a.CONTAINER_TYPE_NAME, a.LEVEL, a.PARENT_UNIQUE_ID, a.IN_UNIQUE_ID, a.ALLOW_MODIFY, a.REMARK, a.CREATE_TIME, a.CREATE_BY, a.CREATE_BY_NAME, a.UPDATE_TIME, a.UPDATE_BY, a.UPDATE_BY_NAME, a.GEN_STOCK_SHELF, a.DEL_FLAG,
|
||||||
ifnull(a.TOTAL_NET_WEIGHT, b.TOTAL_NET_WEIGHT) TOTAL_NET_WEIGHT,
|
ifnull(a.TOTAL_NET_WEIGHT, b.TOTAL_NET_WEIGHT) TOTAL_NET_WEIGHT,
|
||||||
ifnull(a.TOTAL_GROSS_WEIGHT, b.TOTAL_GROSS_WEIGHT) TOTAL_GROSS_WEIGHT,
|
ifnull(a.TOTAL_GROSS_WEIGHT, b.TOTAL_GROSS_WEIGHT) TOTAL_GROSS_WEIGHT,
|
||||||
ifnull(a.TOTAL_VOLUME, b.TOTAL_VOLUME) TOTAL_VOLUME,
|
ifnull(a.TOTAL_VOLUME, b.TOTAL_VOLUME) TOTAL_VOLUME,
|
||||||
ifnull(a.TOTAL_AREA, b.TOTAL_AREA) TOTAL_AREA,
|
ifnull(a.TOTAL_AREA, b.TOTAL_AREA) TOTAL_AREA,
|
||||||
|
b.TOTAL_NET_WEIGHT AS PLAN_NET_WEIGHT,
|
||||||
|
b.TOTAL_GROSS_WEIGHT AS PLAN_GROSS_WEIGHT,
|
||||||
|
b.TOTAL_VOLUME AS PLAN_VOLUME,
|
||||||
|
b.TOTAL_AREA AS PLAN_AREA,
|
||||||
ifnull(a.INVOICE_NO, b.INVOICE_NO) INVOICE_NO,
|
ifnull(a.INVOICE_NO, b.INVOICE_NO) INVOICE_NO,
|
||||||
ifnull(a.BATCH_REF_NO, b.BATCH_REF_NO) BATCH_REF_NO,
|
ifnull(a.BATCH_REF_NO, b.BATCH_REF_NO) BATCH_REF_NO,
|
||||||
ifnull(a.SHEET_REF_NO, b.SHEET_REF_NO) SHEET_REF_NO,
|
ifnull(a.SHEET_REF_NO, b.SHEET_REF_NO) SHEET_REF_NO,
|
||||||
|
|||||||
Reference in New Issue
Block a user