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

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.setWarehouseCode(request.getWarehouseCode());
bill.setOrderTime(request.getOrderTime());
bill.setOrderStatus(request.getOrderStatus());
bill.setBlPickup(request.getBlPickup());
bill.setPickupDate(request.getPickupDate());
applyUpstreamOrderStatus(bill, request);
bill.setOrderRemark(request.getOrderRemark());
bill.setProductCode(result.getProductCode());
bill.setProductName(result.getProductName());
@@ -1695,15 +1693,20 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
assertOrderBillEditable(orderBillMapper.selectPrcOrderBillByOrderNo(orderNo.trim()));
}
private void assertOrderBillEditable(PrcOrderBill existed)
private boolean isAlreadyInArBill(PrcOrderBill existed)
{
if (existed == null || StringUtils.isEmpty(existed.getBillId()))
{
return;
return false;
}
int billedFreightCount = incomeBillFeeMapper.countByBillIdAndArBillStatusAndFeeType(
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()));
}
@@ -2424,7 +2427,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
orderNo = orderNo.trim();
request.setOrderNo(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());
PrcOrderBill bill = existed == null ? new PrcOrderBill() : existed;
if (existed == null)
@@ -2464,9 +2472,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
bill.setDestPostcode(request.getDestPostcode());
bill.setWarehouseCode(request.getWarehouseCode());
bill.setOrderTime(request.getOrderTime());
bill.setOrderStatus(request.getOrderStatus());
bill.setBlPickup(request.getBlPickup());
bill.setPickupDate(request.getPickupDate());
applyUpstreamOrderStatus(bill, request);
bill.setOrderRemark(request.getOrderRemark());
bill.setProductCode(request.getProductCode());
bill.setProductName(request.getProductName());
@@ -2490,14 +2496,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
bill.setSurchargeAmount(BigDecimal.ZERO);
bill.setIncomeTotal(BigDecimal.ZERO);
bill.setPayTotal(BigDecimal.ZERO);
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);
applyBillingFailText(bill, billingFailStatus, errorMessage);
if (StringUtils.isEmpty(bill.getRefundStatus()))
{
bill.setRefundStatus(BillRefundStatus.NONE.getCode());
@@ -2523,4 +2522,64 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
}
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);
}
}