修改已出账单,状态没落库

This commit is contained in:
wuweihua
2026-10-21 09:13:50 +08:00
parent dba75c3a77
commit c30c88bbe8
@@ -1305,9 +1305,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
bill.setDestPostcode(request.getDestPostcode()); bill.setDestPostcode(request.getDestPostcode());
bill.setWarehouseCode(request.getWarehouseCode()); bill.setWarehouseCode(request.getWarehouseCode());
bill.setOrderTime(request.getOrderTime()); bill.setOrderTime(request.getOrderTime());
bill.setOrderStatus(request.getOrderStatus()); applyUpstreamOrderStatus(bill, request);
bill.setBlPickup(request.getBlPickup());
bill.setPickupDate(request.getPickupDate());
bill.setOrderRemark(request.getOrderRemark()); bill.setOrderRemark(request.getOrderRemark());
bill.setProductCode(result.getProductCode()); bill.setProductCode(result.getProductCode());
bill.setProductName(result.getProductName()); bill.setProductName(result.getProductName());
@@ -1695,15 +1693,20 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
assertOrderBillEditable(orderBillMapper.selectPrcOrderBillByOrderNo(orderNo.trim())); assertOrderBillEditable(orderBillMapper.selectPrcOrderBillByOrderNo(orderNo.trim()));
} }
private void assertOrderBillEditable(PrcOrderBill existed) private boolean isAlreadyInArBill(PrcOrderBill existed)
{ {
if (existed == null || StringUtils.isEmpty(existed.getBillId())) if (existed == null || StringUtils.isEmpty(existed.getBillId()))
{ {
return; return false;
} }
int billedFreightCount = incomeBillFeeMapper.countByBillIdAndArBillStatusAndFeeType( int billedFreightCount = incomeBillFeeMapper.countByBillIdAndArBillStatusAndFeeType(
existed.getBillId(), ArIncomeBillFeeStatus.BILLED.getCode(), "BASIC_FREIGHT"); existed.getBillId(), ArIncomeBillFeeStatus.BILLED.getCode(), "BASIC_FREIGHT");
if (billedFreightCount > 0) return billedFreightCount > 0;
}
private void assertOrderBillEditable(PrcOrderBill existed)
{
if (isAlreadyInArBill(existed))
{ {
throw new ServiceException(MessageUtils.message("price.bill.alreadyInArBill", existed.getOrderNo())); throw new ServiceException(MessageUtils.message("price.bill.alreadyInArBill", existed.getOrderNo()));
} }
@@ -2424,7 +2427,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
orderNo = orderNo.trim(); orderNo = orderNo.trim();
request.setOrderNo(orderNo); request.setOrderNo(orderNo);
PrcOrderBill existed = orderBillMapper.selectPrcOrderBillByOrderNo(orderNo); PrcOrderBill existed = orderBillMapper.selectPrcOrderBillByOrderNo(orderNo);
assertOrderBillEditable(existed); // Already in AR: still record fail + ORDER_STATUS; do not touch amounts/fees.
if (isAlreadyInArBill(existed))
{
persistFailedSnapshotWhenLocked(existed, request, billingFailStatus, errorMessage);
return;
}
BigDecimal previousIncome = existed == null ? BigDecimal.ZERO : nz(existed.getIncomeTotal()); BigDecimal previousIncome = existed == null ? BigDecimal.ZERO : nz(existed.getIncomeTotal());
PrcOrderBill bill = existed == null ? new PrcOrderBill() : existed; PrcOrderBill bill = existed == null ? new PrcOrderBill() : existed;
if (existed == null) if (existed == null)
@@ -2464,9 +2472,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
bill.setDestPostcode(request.getDestPostcode()); bill.setDestPostcode(request.getDestPostcode());
bill.setWarehouseCode(request.getWarehouseCode()); bill.setWarehouseCode(request.getWarehouseCode());
bill.setOrderTime(request.getOrderTime()); bill.setOrderTime(request.getOrderTime());
bill.setOrderStatus(request.getOrderStatus()); applyUpstreamOrderStatus(bill, request);
bill.setBlPickup(request.getBlPickup());
bill.setPickupDate(request.getPickupDate());
bill.setOrderRemark(request.getOrderRemark()); bill.setOrderRemark(request.getOrderRemark());
bill.setProductCode(request.getProductCode()); bill.setProductCode(request.getProductCode());
bill.setProductName(request.getProductName()); bill.setProductName(request.getProductName());
@@ -2490,14 +2496,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
bill.setSurchargeAmount(BigDecimal.ZERO); bill.setSurchargeAmount(BigDecimal.ZERO);
bill.setIncomeTotal(BigDecimal.ZERO); bill.setIncomeTotal(BigDecimal.ZERO);
bill.setPayTotal(BigDecimal.ZERO); bill.setPayTotal(BigDecimal.ZERO);
bill.setBillingFailStatus(Integer.valueOf(billingFailStatus)); applyBillingFailText(bill, billingFailStatus, errorMessage);
String failText = errorMessage == null ? "" : errorMessage.trim();
if (failText.length() > 1000)
{
failText = failText.substring(0, 1000);
}
bill.setErrorMessage(failText);
bill.setMatchMessage(failText);
if (StringUtils.isEmpty(bill.getRefundStatus())) if (StringUtils.isEmpty(bill.getRefundStatus()))
{ {
bill.setRefundStatus(BillRefundStatus.NONE.getCode()); bill.setRefundStatus(BillRefundStatus.NONE.getCode());
@@ -2523,4 +2522,64 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
} }
persistBillExt(bill, request.getUpstreamRow()); persistBillExt(bill, request.getUpstreamRow());
} }
/**
* Locked by AR bill: write fail status + upstream ORDER_STATUS only.
* Amounts / income fees stay untouched.
*/
private void persistFailedSnapshotWhenLocked(PrcOrderBill bill, TmsPriceBillRequest request,
int billingFailStatus, String errorMessage)
{
applyUpstreamOrderStatus(bill, request);
if (request != null)
{
if (StringUtils.isNotEmpty(request.getTrackingNo()))
{
bill.setTrackingNo(request.getTrackingNo());
}
if (StringUtils.isNotEmpty(request.getTransferNo()))
{
bill.setTransferNo(request.getTransferNo());
}
}
applyBillingFailText(bill, billingFailStatus, errorMessage);
orderBillMapper.updatePrcOrderBill(bill);
if (request != null)
{
persistBillExt(bill, request.getUpstreamRow());
}
}
/** Prefer request status fields; never clear existing order_status with null. */
private static void applyUpstreamOrderStatus(PrcOrderBill bill, TmsPriceBillRequest request)
{
if (bill == null || request == null)
{
return;
}
if (request.getOrderStatus() != null)
{
bill.setOrderStatus(request.getOrderStatus());
}
if (request.getBlPickup() != null)
{
bill.setBlPickup(request.getBlPickup());
}
if (request.getPickupDate() != null)
{
bill.setPickupDate(request.getPickupDate());
}
}
private static void applyBillingFailText(PrcOrderBill bill, int billingFailStatus, String errorMessage)
{
bill.setBillingFailStatus(Integer.valueOf(billingFailStatus));
String failText = errorMessage == null ? "" : errorMessage.trim();
if (failText.length() > 1000)
{
failText = failText.substring(0, 1000);
}
bill.setErrorMessage(failText);
bill.setMatchMessage(failText);
}
} }