已生成应收账单,作废后方可重新计费

This commit is contained in:
wuweihua
2026-09-17 16:26:26 +08:00
parent 78f2da431b
commit 5dcea947a7
3 changed files with 29 additions and 2 deletions
@@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.ar.enums.ArOrderBillStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -71,6 +72,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
throw new ServiceException(MessageUtils.message("price.bill.bizDateRequired"));
}
Date bizDate = resolveBizDate(request.getBizDate());
assertOrderBillEditable(request.getOrderNo());
BigDecimal weight = request.getWeight();
TmsPriceQuoteResult result = tmsPriceQuoteService.calculate(request);
persistBill(request, weight, bizDate, result);
@@ -127,6 +129,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
String orderNo = request.getOrderNo();
String billKey = Md5Utils.hash(orderNo);
PrcOrderBill existed = orderBillMapper.selectPrcOrderBillByOrderNo(orderNo);
assertOrderBillEditable(existed);
BigDecimal previousIncome = existed == null ? BigDecimal.ZERO : nz(existed.getIncomeTotal());
PrcOrderBill bill = existed == null ? new PrcOrderBill() : existed;
if (existed == null)
@@ -204,6 +207,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
result.setFromCache(Boolean.valueOf(existed != null));
if (existed == null)
{
bill.setArBillStatus(ArOrderBillStatus.UNBILLED.getCode());
orderBillMapper.insertPrcOrderBill(bill);
}
else
@@ -310,6 +314,28 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
billSearchStore.save(EsLogType.CREDIT, bill.getOrderNo(), req.toJSONString(), resp.toJSONString(), status, err);
}
/** Block re-bill when order already claimed by an AR bill (BILLED). Void restores UNBILLED. */
private void assertOrderBillEditable(String orderNo)
{
if (StringUtils.isEmpty(orderNo))
{
return;
}
assertOrderBillEditable(orderBillMapper.selectPrcOrderBillByOrderNo(orderNo.trim()));
}
private void assertOrderBillEditable(PrcOrderBill existed)
{
if (existed == null)
{
return;
}
if (ArOrderBillStatus.BILLED.getCode().equals(existed.getArBillStatus()))
{
throw new ServiceException(MessageUtils.message("price.bill.alreadyInArBill", existed.getOrderNo()));
}
}
private static BigDecimal nz(BigDecimal v)
{
return v == null ? BigDecimal.ZERO : v;