提交第三方接口订单同步功能

This commit is contained in:
wuweihua
2026-09-10 15:53:23 +08:00
parent 4f5ba43d28
commit e69a6845f5
22 changed files with 1258 additions and 4 deletions
@@ -2,10 +2,13 @@ package com.ruoyi.web.controller.api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
@@ -13,8 +16,10 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.config.properties.TmsApiProperties;
import com.ruoyi.price.domain.vo.TmsPriceBillRequest;
import com.ruoyi.price.domain.vo.TmsPriceQuoteRequest;
import com.ruoyi.price.domain.vo.TmsPriceQuoteResult;
import com.ruoyi.price.service.IPrcBillService;
import com.ruoyi.price.service.ITmsPriceQuoteService;
/**
@@ -35,6 +40,9 @@ public class TmsPriceController extends BaseController
@Autowired
private ITmsPriceQuoteService tmsPriceQuoteService;
@Autowired
private IPrcBillService prcBillService;
@Autowired
private TmsApiProperties tmsApiProperties;
@@ -52,6 +60,33 @@ public class TmsPriceController extends BaseController
return success(result);
}
/**
* Sync order and persist receivable bill (prc_bill / prc_bill_fee).
* Same price match as quote. Same orderNo upserts.
*/
@PostMapping("/bill")
public AjaxResult bill(
@RequestHeader(value = HEADER_API_CODE, required = false) String headerApiCode,
@Validated @RequestBody TmsPriceBillRequest request)
{
assertApiCode(headerApiCode, request == null ? null : request.getApiCode());
TmsPriceQuoteResult result = prcBillService.bill(request);
return success(result);
}
/**
* Query receivable bill by orderNo after sync.
*/
@GetMapping("/bill/by-order/{orderNo}")
public AjaxResult getBillByOrder(
@RequestHeader(value = HEADER_API_CODE, required = false) String headerApiCode,
@PathVariable("orderNo") String orderNo,
@RequestParam(value = "apiCode", required = false) String apiCode)
{
assertApiCode(headerApiCode, apiCode);
return success(prcBillService.getBillByOrderNo(orderNo));
}
private void assertApiCode(String headerApiCode, String bodyApiCode)
{
String expected = tmsApiProperties.getApiCode();
@@ -13,9 +13,12 @@ import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.price.domain.PrcBill;
import com.ruoyi.price.domain.PrcQuote;
import com.ruoyi.price.domain.vo.TmsPriceBillRequest;
import com.ruoyi.price.domain.vo.TmsPriceQuoteRequest;
import com.ruoyi.price.domain.vo.TmsPriceQuoteResult;
import com.ruoyi.price.service.IPrcBillService;
import com.ruoyi.price.service.ITmsPriceQuoteService;
/**
@@ -30,6 +33,9 @@ public class BillingController extends BaseController
@Autowired
private ITmsPriceQuoteService tmsPriceQuoteService;
@Autowired
private IPrcBillService prcBillService;
/**
* Historical quote list.
*/
@@ -62,4 +68,28 @@ public class BillingController extends BaseController
TmsPriceQuoteResult result = tmsPriceQuoteService.quote(request);
return success(result);
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@GetMapping("/bill/list")
public TableDataInfo billList(PrcBill query)
{
startPage();
List<PrcBill> list = prcBillService.selectBillList(query);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@GetMapping("/bill/{billId}")
public AjaxResult getBill(@PathVariable String billId)
{
return success(prcBillService.getBill(billId));
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@PostMapping("/bill")
public AjaxResult bill(@Validated @RequestBody TmsPriceBillRequest request)
{
TmsPriceQuoteResult result = prcBillService.bill(request);
return success(result);
}
}
@@ -150,4 +150,4 @@ xss:
bms:
tms:
# Agreed API identification code for TMS callers
api-code: BMS.TMS._Q2WnPXiXwGW2Dl-iSGNzLfrhUgQogNo
api-code: BMS.TMS.ZYaOvlQzpcfau8TUaCFfO3Hp8ieHIqGw
@@ -77,6 +77,7 @@ price.set.customer.customerId.empty=客户ID不能为空
price.set.customer.beginDate.empty=客户绑定生效日期不能为空
price.set.customer.date.invalid=客户绑定生效日期不能晚于失效日期
price.set.customer.alreadyBound=该客户已绑定套餐,一个客户只能绑定一个套餐
price.set.customer.masterNotFound=客户主数据不存在
price.set.customer.priority.invalid=优先级必须大于等于 1
# 重量段 PrcWeight
price.weight.range.empty=起始重量和结束重量不能为空
@@ -118,4 +119,9 @@ price.quote.quoteIdRequired=报价ID为空
price.quote.hitCustomerFixedPackageDetail=命中客户套餐固定价格明细
# ---- 状态自动刷新 ----
price.status.refresh.success=状态刷新完成:bms_product 更新 {0} 行,bms_product_country 更新 {1} 行
price.status.refresh.success=状态刷新完成:bms_product 更新 {0} 行,bms_product_country 更新 {1} 行
# receivable bill
price.bill.orderNoRequired=订单号为空
price.bill.billIdRequired=计费ID为空
price.bill.notFound=计费记录不存在
price.bill.bizDateRequired=业务日期为空