diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/PrcOrderBillExt.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/PrcOrderBillExt.java new file mode 100644 index 00000000..ef2673c1 --- /dev/null +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/PrcOrderBillExt.java @@ -0,0 +1,24 @@ +package com.ruoyi.price.domain; + +import java.io.Serializable; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +/** Extension of prc_order_bill: upstream sync payload snapshot. */ +@Data +public class PrcOrderBillExt implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** prc_order_bill.bill_id */ + private String billId; + /** business order no */ + private String orderNo; + /** upstream request JSON after prc_order_bill persist success */ + private String syncJson; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; +} diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/vo/TmsPriceQuoteResult.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/vo/TmsPriceQuoteResult.java index d3b4b1dc..715d8bba 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/vo/TmsPriceQuoteResult.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/domain/vo/TmsPriceQuoteResult.java @@ -90,7 +90,7 @@ public class TmsPriceQuoteResult implements Serializable private String orderRemark; /** true=hit stored quote */ private Boolean fromCache; - /** original TMS sync request JSON from Elasticsearch */ + /** original TMS sync request JSON from prc_order_bill_ext */ private String requestJson; /** original billing response JSON from Elasticsearch */ private String responseJson; diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/mapper/PrcOrderBillExtMapper.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/mapper/PrcOrderBillExtMapper.java new file mode 100644 index 00000000..ea90e8a2 --- /dev/null +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/mapper/PrcOrderBillExtMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.price.mapper; + +import com.ruoyi.price.domain.PrcOrderBillExt; + +/** prc_order_bill_ext mapper */ +public interface PrcOrderBillExtMapper +{ + public PrcOrderBillExt selectByBillId(String billId); + + public PrcOrderBillExt selectByOrderNo(String orderNo); + + public int insertPrcOrderBillExt(PrcOrderBillExt ext); + + public int upsertPrcOrderBillExt(PrcOrderBillExt ext); +} diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/service/impl/PrcOrderBillServiceImpl.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/service/impl/PrcOrderBillServiceImpl.java index dfb66106..75742683 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/service/impl/PrcOrderBillServiceImpl.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/price/service/impl/PrcOrderBillServiceImpl.java @@ -22,11 +22,13 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.price.domain.PrcIncomeBillFee; import com.ruoyi.price.domain.PrcOrderBill; +import com.ruoyi.price.domain.PrcOrderBillExt; import com.ruoyi.price.domain.PrcPayBillFee; import com.ruoyi.price.domain.vo.TmsPriceBillRequest; import com.ruoyi.price.domain.vo.TmsPriceQuoteFeeLine; import com.ruoyi.price.domain.vo.TmsPriceQuoteResult; import com.ruoyi.price.mapper.PrcIncomeBillFeeMapper; +import com.ruoyi.price.mapper.PrcOrderBillExtMapper; import com.ruoyi.price.mapper.PrcOrderBillMapper; import com.ruoyi.price.mapper.PrcPayBillFeeMapper; import com.ruoyi.price.search.EsBizLogSupport; @@ -47,6 +49,9 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService @Autowired private PrcOrderBillMapper orderBillMapper; + @Autowired + private PrcOrderBillExtMapper orderBillExtMapper; + @Autowired private PrcIncomeBillFeeMapper incomeBillFeeMapper; @@ -255,8 +260,11 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService { incomeBillFeeMapper.insertBatch(fees); } + String syncJson = toRequestJson(request); + persistBillExt(bill, syncJson); + result.setRequestJson(syncJson); syncOrderCredit(bill, previousIncome); - billSearchStore.save(EsLogType.BILL, orderNo, toRequestJson(request), toResponseJson(result)); + billSearchStore.save(EsLogType.BILL, orderNo, syncJson, toResponseJson(result)); } /** @@ -443,9 +451,37 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService r.setBizDate(bill.getBizDate()); r.setFeeDetails(toIncomeFeeLines(incomeFees)); r.setPayFeeDetails(toPayFeeLines(payFees)); + fillSyncJson(r, bill.getBillId()); return r; } + /** Persist upstream request JSON after prc_order_bill insert/update succeeds. */ + private void persistBillExt(PrcOrderBill bill, String syncJson) + { + if (bill == null || StringUtils.isEmpty(bill.getBillId()) || StringUtils.isEmpty(syncJson)) + { + return; + } + PrcOrderBillExt ext = new PrcOrderBillExt(); + ext.setBillId(bill.getBillId()); + ext.setOrderNo(bill.getOrderNo()); + ext.setSyncJson(syncJson); + orderBillExtMapper.upsertPrcOrderBillExt(ext); + } + + private void fillSyncJson(TmsPriceQuoteResult result, String billId) + { + if (result == null || StringUtils.isEmpty(billId)) + { + return; + } + PrcOrderBillExt ext = orderBillExtMapper.selectByBillId(billId); + if (ext != null) + { + result.setRequestJson(ext.getSyncJson()); + } + } + private List toIncomeFeeLines(List fees) { List lines = new ArrayList(); diff --git a/bms-back/ruoyi-system/src/main/resources/mapper/price/PrcOrderBillExtMapper.xml b/bms-back/ruoyi-system/src/main/resources/mapper/price/PrcOrderBillExtMapper.xml new file mode 100644 index 00000000..846e4367 --- /dev/null +++ b/bms-back/ruoyi-system/src/main/resources/mapper/price/PrcOrderBillExtMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + select bill_id, order_no, sync_json, create_time, update_time + from prc_order_bill_ext + + + + + + + + insert into prc_order_bill_ext ( + bill_id, order_no, sync_json, create_time, update_time + ) values ( + #{billId}, #{orderNo}, #{syncJson}, sysdate(), sysdate() + ) + + + + insert into prc_order_bill_ext ( + bill_id, order_no, sync_json, create_time, update_time + ) values ( + #{billId}, #{orderNo}, #{syncJson}, sysdate(), sysdate() + ) + on duplicate key update + order_no = values(order_no), + sync_json = values(sync_json), + update_time = sysdate() + + + diff --git a/bms-back/sql/price/order_bill_ext.sql b/bms-back/sql/price/order_bill_ext.sql new file mode 100644 index 00000000..3bb9c4d3 --- /dev/null +++ b/bms-back/sql/price/order_bill_ext.sql @@ -0,0 +1,13 @@ +-- prc_order_bill_ext: snapshot of upstream sync payload after prc_order_bill persist success +SET NAMES utf8mb4; + +CREATE TABLE IF NOT EXISTS prc_order_bill_ext ( + bill_id VARCHAR(36) NOT NULL COMMENT '计费订单ID,对应 prc_order_bill.bill_id', + order_no VARCHAR(64) NOT NULL COMMENT '订单号', + sync_json LONGTEXT NOT NULL COMMENT '上游同步成功写入 prc_order_bill 时的请求JSON', + create_time DATETIME NOT NULL COMMENT '创建时间', + update_time DATETIME DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (bill_id), + UNIQUE KEY uk_order_bill_ext_order (order_no), + CONSTRAINT fk_order_bill_ext_bill FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单计费扩展表';