统一修改ruoyi->bms

This commit is contained in:
caojia
2026-09-28 10:02:38 +08:00
parent 341afc4111
commit 0408b6c35e
639 changed files with 2776 additions and 2807 deletions
@@ -0,0 +1,42 @@
package com.bms.price.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** BMS产品主表 bms_product */
@Data
@EqualsAndHashCode(callSuper = true)
public class BmsProduct extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long productId;
private String productCode;
private String productName;
private String serviceLevel;
private String cargoAttr;
private String destRegion;
private String updateNote;
/** TAX_INCLUDED / TAX_EXCLUDED */
private String taxMode;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expireDate;
/** 0 pending, 1 active, 2 expired */
public static final String STATUS_PENDING = "0";
public static final String STATUS_ACTIVE = "1";
public static final String STATUS_EXPIRED = "2";
private String status;
private String sourceSheet;
private Long tmsId;
private Integer countryCount;
private Integer surchargeCount;
private List<BmsProductCountry> countries;
/** query alias of status (0/1/2) */
private String effectStatus;
}
@@ -0,0 +1,49 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 产品国家服务明细 bms_product_country */
@Data
public class BmsProductCountry implements Serializable
{
private static final long serialVersionUID = 1L;
private Long detailId;
/** FK to bms_product.product_id (one country version belongs to one product row) */
private Long productId;
private String productCode;
private String countryName;
private String countryCode;
/** prc_zone.zone_id; null when product country has no zone */
private Long zoneId;
/** e.g. Z1; null when no zone */
private String zoneCode;
/** e.g. Australia(Z1); null when no zone */
private String zoneName;
private BigDecimal weightMin;
private BigDecimal weightMax;
private BigDecimal freightPrice;
private BigDecimal registrationFee;
private String sizeLimit;
private String lastMile;
private String leadTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
/** null=open; closed to next import effective_date */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expireDate;
/** 0 pending, 1 active, 2 expired */
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** query only: true = expire_date is null */
private Boolean openOnly;
/** query alias of status (0/1/2) */
private String effectStatus;
}
@@ -0,0 +1,29 @@
package com.bms.price.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** Billing task row prc_billing_task */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcBillingTask extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long taskId;
private String transferNo;
private String trackingNo;
private String orderNo;
/** PENDING / REBILL / REFUND */
private String billType;
/** WAITING / SUCCESS / FAILED */
private String successStatus;
/** Billing time from mobile (not Oracle order time; not overwritten on writeback) */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date billTime;
private String billId;
private String errorMessage;
}
@@ -0,0 +1,28 @@
package com.bms.price.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** 客户套餐 prc_customer_price_set */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcCustomerPriceSet extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long customerPricesetId;
private Long priceSetId;
private Long customerId;
private String customerCode;
private String customerName;
/** 数字越小越优先 */
private Integer bindPriority;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date prBegindate;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date prEnddate;
private String priceSetNote;
}
@@ -0,0 +1,43 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 应收主表 prc_income_bill(与 prc_order_bill 一对一) */
@Data
public class PrcIncomeBill implements Serializable
{
private static final long serialVersionUID = 1L;
/** 应收主表ID */
private String incomeBillId;
/** 计费订单ID */
private String billId;
/** 币种 */
private String currency;
/** 产品价合计 */
private BigDecimal productAmount;
/** 红线价合计 */
private BigDecimal redlineAmount;
/** 销售价合计(当前计费结果) */
private BigDecimal salesAmount;
/** 应收合计(当前等于销售价) */
private BigDecimal incomeTotal;
/** 业务员/销售员 */
private String belongSaler;
/** 销售员编码 */
private String belongSalerCode;
/** 结算员 */
private String settlementMan;
/** 结算员编码 */
private String settlementManCode;
private String createBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String updateBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,32 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 应收费用明细 prc_income_bill_fee */
@Data
public class PrcIncomeBillFee implements Serializable
{
private static final long serialVersionUID = 1L;
private String feeId;
private String billId;
/** 应收主表ID */
private String incomeBillId;
private String feeType;
private String feeName;
private Long scId;
private BigDecimal amount;
private String currency;
private String roundMode;
private String remark;
/** 是否生成账单状态:UNBILLED未生成/BILLED已生成 */
private String arBillStatus;
/** 是否手动增加:0否 1是 */
private String manualFlag;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
@@ -0,0 +1,110 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** order info header prc_order_bill */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcOrderBill extends BaseEntity
{
private static final long serialVersionUID = 1L;
private String billId;
private String billKey;
private String orderNo;
/** 批量查询:多个订单号精确匹配(仅查询用,非表字段) */
private List<String> orderNos;
private String trackingNo;
/** 批量查询:多个运单号精确匹配(仅查询用,非表字段) */
private List<String> trackingNos;
/** transfer order no */
private String transferNo;
/** 批量查询:多个转单号精确匹配(仅查询用,非表字段) */
private List<String> transferNos;
/** 所属销售员 */
private String belongSaler;
/** 销售员编码 */
private String belongSalerCode;
/** 结算员 */
private String settlementMan;
/** 结算员编码 */
private String settlementManCode;
/** 客服员 */
private String serviceMan;
private Long customerId;
private String customerCode;
private String customerName;
/** 批量查询:多个客户代码精确匹配(仅查询用,非表字段) */
private List<String> customerCodes;
private Integer pieces;
private BigDecimal actualWeight;
private BigDecimal volume;
private BigDecimal volumeWeight;
private BigDecimal pkgLength;
private BigDecimal pkgWidth;
private BigDecimal pkgHeight;
private String shipperName;
private String consigneeName;
private String destPostcode;
private String warehouseCode;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date orderTime;
private String orderRemark;
private String productCode;
private String productName;
/** 批量查询:多个产品代码精确匹配(仅查询用,非表字段) */
private List<String> productCodes;
private String countryCode;
private String countryName;
private BigDecimal weight;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date bizDate;
private Long tmsId;
private String matchSource;
private String matchMessage;
private Long priceSetId;
private String priceSetCode;
private String priceSetName;
private String setType;
private Integer bindPriority;
private Long customerPricesetId;
/** 套餐版本ID(prc_price_set_version.psv_id) */
private Long psvId;
/** 套餐明细ID(prc_price_set_detail.psd_id) */
private Long psdId;
private Long productCountryId;
private BigDecimal weightMin;
private BigDecimal weightMax;
private String weightLabel;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
private BigDecimal chargeWeight;
private BigDecimal freightRate;
private BigDecimal baseFreightRate;
private BigDecimal discountPercent;
private BigDecimal registrationFee;
private BigDecimal freightAmount;
private BigDecimal surchargeAmount;
/** receivable total */
private BigDecimal incomeTotal;
/** payable total */
private BigDecimal payTotal;
private String currency;
/** 应收账单状态:UNBILLED未出账/PARTIAL部分出账/BILLED已出账。 */
private String arBillStatus;
/** ACTIVE / MISSING / DISABLED */
private String customerActiveStatus;
/** NORMAL / ARREARS */
private String creditArrearsStatus;
private String roundMode;
private List<PrcIncomeBillFee> incomeFees;
private List<PrcPayBillFee> payFees;
}
@@ -0,0 +1,218 @@
package com.bms.price.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/** 计费订单扩展表:TAB_ORDER 剩余字段 + 同步请求快照 */
@Data
public class PrcOrderBillExt implements Serializable
{
private static final long serialVersionUID = 1L;
private String billId;
private String orderNo;
private String upstreamId;
private String lineNo;
private Integer packageNum;
private BigDecimal actualVolume;
private Integer cpType;
private String consigneeMobile;
private String orderReturnsign;
private String tradeType;
private String dutyType;
private String batteryType;
private String consigneeCompanyname;
private String consigneeAddress;
private String consigneeTelephone;
private String consigneeState;
private String consigneeCity;
private String consigneeSuburb;
private String consigneePassportno;
private String consigneeEmail;
private String consigneeTaxno;
private String consigneeTaxnotype;
private String consigneeTaxnocountry;
private String consigneeStreetno;
private String consigneeDoorno;
private String shipperTaxnotype;
private String shipperTaxno;
private String shipperTaxnocountry;
private String customerId;
private String productImagepath;
private String orderTransactionurl;
private BigDecimal orderCargoamount;
private String cargoType;
private String shipperCompanyname;
private String shipperAddress1;
private String shipperAddress2;
private String shipperAddress3;
private String shipperCity;
private String shipperState;
private String shipperPostcode;
private String shipperCountry;
private String shipperTelephone;
private String shipperSuburb;
private String shipperEmail;
private String shipperPassportno;
private String importCode;
private String importName;
private String importCompanyname;
private String importAddress;
private String importAddress2;
private String importAddress3;
private String importTelephone;
private String importEmail;
private String importPostcode;
private String importCity;
private String importState;
private String importCountry;
private String buyerid;
private Integer orderStatus;
private String createAt;
private Integer payType;
private String lineCode;
private String lineName;
private String productType;
private String lineType;
private String cargoName;
private String productFloorCode;
private BigDecimal orderInsurance;
private BigDecimal productSumPrice;
private BigDecimal productSum;
private String shipperDoorno;
private String tariffPaymentAccount;
private BigDecimal topayment;
private String productFloor;
private String latestTrajectory;
private String wayBill;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date pickupDate;
private Integer blBaging;
private Integer blPickup;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date bagDate;
private Integer orgOrderStatus;
private String statusDescription;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date zzDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date shippingDate;
private BigDecimal orderType;
private String receivingPhoto;
private BigDecimal freight;
private Integer isReceivable;
private Integer isMeet;
private String billNoReceivable;
private String billNoMeet;
private String countryEingthName;
private Integer isReceivableFee;
private BigDecimal settlementFee;
private String productId;
private BigDecimal serviceFreight;
private Integer isPayFee;
private Integer hasAddedSurcharge;
private BigDecimal yfFee;
private BigDecimal yfTotailFee;
private Integer trajectoryStatus;
private String cargoTypeName;
private String serviceCode;
private String threeCode;
private BigDecimal volumeHeightOld;
private BigDecimal volumeLengthOld;
private BigDecimal volumeWidthOld;
private String registerManOld;
private String bagNoOld;
private String airNoOld;
private String boxSiziOld;
private String bagingManOld;
private String retrievalManOld;
private String invoiceAmountOld;
private String invoiceTitleOld;
private String invoiceWeightOld;
private String skuOld;
private String hsCodeOld;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date registerDateOld;
private String invoiceCurrencyOld;
private Integer trajectorySubState;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date signInTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date warehouseTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date declarationTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date releaseTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date stationTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date takeoffTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date landingTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date clearanceAndDeliveryTime;
private String supplierName;
private String creditCode;
private String otherId;
private String platformCode;
private Integer syncShipmentStatus;
private BigDecimal updateWeight;
private String otherBagNo;
private Integer bagFlag;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date onlineTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date outboundTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date airConfirmDate;
private String shipmentType;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date trackQueryTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date airConfirmTime;
private Integer packageType;
private BigDecimal dimensionalWeightFactor;
private String updateBy;
private String customerPickupSite;
private String barcodeNumber;
private String trackingReflectStatus;
private Integer remotePostcode;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date clearanceTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date arriveStockTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date departureTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date firstDeliverTime;
private BigDecimal hsCodeTaxCount;
private BigDecimal hsCodeTaxAmount;
private String hsCodeTaxCurrency;
private String invoiceUrl;
private String clearanceNo;
private BigDecimal pushWeight;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date internalCheckTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date airDelayTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date firstLandingTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date secondTakeoffTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date desPortCheckTime;
private String stayRemark;
private String missBoxRemark;
private String productChannelId;
private String customerTrackId;
private String registerSite;
private Integer packageTypeFinancial;
private String mrn;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,43 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 应付主表 prc_pay_bill(与 prc_order_bill 一对一) */
@Data
public class PrcPayBill implements Serializable
{
private static final long serialVersionUID = 1L;
/** 应付主表ID */
private String payBillId;
/** 计费订单ID */
private String billId;
/** 币种 */
private String currency;
/** 产品价合计 */
private BigDecimal productAmount;
/** 红线价合计 */
private BigDecimal redlineAmount;
/** 成本价合计(当前计费结果) */
private BigDecimal costAmount;
/** 应付合计(当前等于成本价) */
private BigDecimal payTotal;
/** 业务员/销售员 */
private String belongSaler;
/** 销售员编码 */
private String belongSalerCode;
/** 结算员 */
private String settlementMan;
/** 结算员编码 */
private String settlementManCode;
private String createBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String updateBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,28 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 应付费用明细 prc_pay_bill_fee */
@Data
public class PrcPayBillFee implements Serializable
{
private static final long serialVersionUID = 1L;
private String feeId;
private String billId;
/** 应付主表ID */
private String payBillId;
private String feeType;
private String feeName;
private Long scId;
private BigDecimal amount;
private String currency;
private String roundMode;
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
@@ -0,0 +1,51 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** 价格套餐 prc_price_set */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcPriceSet extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long priceSetId;
private String priceSetCode;
private String priceSetName;
private String priceSetNote;
/** FIXED / DISCOUNT */
private String setType;
private BigDecimal defaultDiscount;
private String defaultType;
private String calculateSign;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expireDate;
/** D/A/E/R/S */
private String status;
private Long tmsId;
private Integer productCount;
private Integer customerCount;
private Boolean expired;
private String keyword;
private String submitFlag;
/** current version on create/edit save */
private PrcPriceSetVersion version;
private List<PrcPriceSetDetail> details;
private List<PrcPriceSetVersion> versions;
private List<PrcCustomerPriceSet> customers;
/** async save task id (not persisted) */
private String saveTaskId;
/** Y: backend joins product library into details (skip front pull) */
private String pullFromLibrary;
/** Y: even if version already has details, delete+re-pull from library */
private String forcePullLibrary;
}
@@ -0,0 +1,17 @@
package com.bms.price.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/** 套餐校验项 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PrcPriceSetCheckItem
{
private String item;
/** PASS / WARN / FAIL / INFO */
private String result;
private String message;
}
@@ -0,0 +1,62 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 价格套餐明细 prc_price_set_detail */
@Data
public class PrcPriceSetDetail implements Serializable
{
private static final long serialVersionUID = 1L;
private Long psdId;
private Long priceSetId;
/** prc_price_set_version.psv_id */
private Long psvId;
private String productCode;
private String productName;
private String countryCode;
private String countryName;
/** prc_zone.zone_id; null when country has no zone */
private Long zoneId;
/** e.g. Z1; null when no zone */
private String zoneCode;
/** zone display name; null when no zone */
private String zoneName;
private Long zdId;
private Long wsdId;
private String weightLabel;
/** KG inclusive, same as bms_product_country */
private BigDecimal weightMin;
private BigDecimal weightMax;
/** bms_product_country.detail_id */
private Long productCountryId;
private BigDecimal fvValue;
private BigDecimal fvRegistrationFee;
private BigDecimal discountValue;
/** UP / DOWN / HALF_UP */
private String roundMode;
private Integer prId;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
/** null = open */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expireDate;
private List<PrcPriceSetVersionSurcharge> surcharges;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** query only: product/country/zone/weight keyword */
private String keyword;
/** query only: product code/name like */
private String productKeyword;
/** query only: country code/name like */
private String countryKeyword;
/** query only: zone code/name like */
private String zoneKeyword;
}
@@ -0,0 +1,83 @@
package com.bms.price.domain;
import java.io.Serializable;
/**
* Async save progress for price set (Redis).
*/
public class PrcPriceSetSaveTask implements Serializable
{
private static final long serialVersionUID = 1L;
public static final String STATUS_PENDING = "PENDING";
public static final String STATUS_RUNNING = "RUNNING";
public static final String STATUS_SUCCESS = "SUCCESS";
public static final String STATUS_FAIL = "FAIL";
private String taskId;
private String status;
private int percent;
private String message;
private Long priceSetId;
private String error;
public String getTaskId()
{
return taskId;
}
public void setTaskId(String taskId)
{
this.taskId = taskId;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public int getPercent()
{
return percent;
}
public void setPercent(int percent)
{
this.percent = percent;
}
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
public Long getPriceSetId()
{
return priceSetId;
}
public void setPriceSetId(Long priceSetId)
{
this.priceSetId = priceSetId;
}
public String getError()
{
return error;
}
public void setError(String error)
{
this.error = error;
}
}
@@ -0,0 +1,32 @@
package com.bms.price.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** Price set version prc_price_set_version */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcPriceSetVersion extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long psvId;
private Long priceSetId;
/** V1 / V2 */
private String versionNo;
private Integer versionSeq;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date effectiveTime;
/** null = open; set to next version effective_time when that version starts */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date expireTime;
/** 0 draft / 3 pending / 1 active / 2 expired */
private String status;
private List<PrcPriceSetDetail> details;
private List<PrcPriceSetVersionSurcharge> surcharges;
}
@@ -0,0 +1,32 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** Price set version surcharge snapshot prc_price_set_version_surcharge */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcPriceSetVersionSurcharge extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long psvsId;
private Long psvId;
/** source prc_surcharge.sc_id */
private Long scId;
/** prc_price_set_detail.psd_id */
private Long psdId;
/** copied from detail */
private String productCode;
private String scName;
private String feeType;
/** FIXED / WEIGHT / RATE */
private String chargeType;
private BigDecimal chargeValue;
private String currency;
private String roundMode;
private String countryCode;
private String scNote;
}
@@ -0,0 +1,59 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** billing quote header prc_quote */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcQuote extends BaseEntity
{
private static final long serialVersionUID = 1L;
private String quoteId;
private String quoteKey;
private Long customerId;
/** ctr_customer.customer_code */
private String customerCode;
private String productCode;
private String productName;
private String countryCode;
private String countryName;
private String destPostcode;
private BigDecimal weight;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date bizDate;
private Long tmsId;
private String matchSource;
private String matchMessage;
private Long priceSetId;
private String priceSetCode;
private String priceSetName;
private String setType;
private Integer bindPriority;
private Long customerPricesetId;
private Long productCountryId;
private BigDecimal weightMin;
private BigDecimal weightMax;
private String weightLabel;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
private BigDecimal chargeWeight;
private BigDecimal freightRate;
private BigDecimal baseFreightRate;
private BigDecimal discountPercent;
private BigDecimal registrationFee;
private BigDecimal freightAmount;
private BigDecimal surchargeAmount;
private BigDecimal payableTotal;
private String currency;
private String roundMode;
private List<PrcQuoteFee> fees;
}
@@ -0,0 +1,28 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** billing quote fee detail prc_quote_fee, one row per bms_fee_type */
@Data
public class PrcQuoteFee implements Serializable
{
private static final long serialVersionUID = 1L;
private String feeId;
private String quoteId;
/** bms_fee_type: BASIC_FREIGHT / REGISTRATION_FEE / SURCHARGE */
private String feeType;
private String feeName;
/** prc_surcharge.sc_id, 0 for freight/registration */
private Long scId;
private BigDecimal amount;
private String currency;
private String roundMode;
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
@@ -0,0 +1,30 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** 附加费配置 prc_surcharge */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcSurcharge extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long scId;
private String scName;
/** 字典 bms_fee_type */
private String feeType;
/** FIXED / WEIGHT / RATE */
private String chargeType;
private BigDecimal chargeValue;
private String currency;
/** 字典 bms_round_mode:UP / DOWN / HALF_UP */
private String roundMode;
/** on / of */
private String ssCode;
private String countryCode;
private String scNote;
private Long tmsId;
}
@@ -0,0 +1,44 @@
package com.bms.price.domain;
import java.math.BigDecimal;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 附加费与产品/明细关联 prc_surcharge_rel
* 同时携带附加费展示字段(JOIN prc_surcharge)与明细展示字段(LEFT JOIN bms_product_country),
* 便于产品列表抽屉直接渲染。
*
* 语义:
* detail_id 为空 = 产品级附加费(作用于该产品全部明细)
* detail_id 有值 = 明细级附加费(作用于该产品某个 国家×重量段 明细)
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcSurchargeRel extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long relId;
private Long scId;
private Long productId;
private String productCode;
private Long detailId;
/** 附加费冗余展示字段 */
private String scName;
private String feeType;
private String chargeType;
private BigDecimal chargeValue;
private String currency;
private String roundMode;
private String ssCode;
private String countryCode;
private String scNote;
/** 明细展示字段 */
private String countryName;
private BigDecimal weightMin;
private BigDecimal weightMax;
}
@@ -0,0 +1,30 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** 重量段明细 prc_weight_section_detail */
@Data
public class PrcWeightSectionDetail implements Serializable
{
private static final long serialVersionUID = 1L;
private Long wsdId;
private Long wstId;
private String wlTitle;
private BigDecimal wlStartweight;
private BigDecimal wlEndweight;
private String weightBillingCode;
private BigDecimal fvUnitweight;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expireDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,26 @@
package com.bms.price.domain;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** 重量段模板 prc_weight_section_template */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcWeightSectionTemplate extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long wstId;
private String wstName;
/** on / off */
private String ssCode;
private String pgCode;
private Long snId;
private String ctCode;
private String pmCode;
private String wstNote;
private Long tmsId;
/** 列表展示,非表字段 */
private Integer detailCount;
}
@@ -0,0 +1,30 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** Zone under bms_region: prc_zone */
@Data
public class PrcZone implements Serializable
{
private static final long serialVersionUID = 1L;
private Long zoneId;
private Long regionId;
/** ISO2 country code stored on prc_zone */
private String countryCode;
private String zoneCode;
private String zoneName;
private Integer zoneSort;
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** list display, not a table column */
private Integer detailCount;
/** list display from bms_region */
private String countryNameCn;
}
@@ -0,0 +1,21 @@
package com.bms.price.domain;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/** Zone postcode detail prc_zone_detail */
@Data
public class PrcZoneDetail implements Serializable
{
private static final long serialVersionUID = 1L;
private Long detailId;
private Long zoneId;
private String postcode;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,21 @@
package com.bms.price.domain;
import java.io.Serializable;
import lombok.Data;
/**
* Zone country list row: bms_region + zone aggregates (not a table)
*/
@Data
public class PrcZoneRegion implements Serializable
{
private static final long serialVersionUID = 1L;
private Long regionId;
private String countryNameCn;
private String countryNameEn;
private String countryCode2;
private String status;
private Integer zoneCount;
private Integer detailCount;
}
@@ -0,0 +1,32 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.math.BigDecimal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/** Manual add receivable fee line on billing detail. */
@Data
public class AddIncomeBillFeeRequest implements Serializable
{
private static final long serialVersionUID = 1L;
@NotBlank(message = "billId required")
private String billId;
/** Surcharge config id (prc_surcharge.sc_id). */
@NotNull(message = "scId required")
private Long scId;
/** Dict bms_fee_type; empty = use surcharge.feeType. */
private String feeType;
/** Empty = calculate from surcharge chargeType. */
private BigDecimal amount;
/** Default CNY. */
private String currency;
private String remark;
}
@@ -0,0 +1,28 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* Warehouse inbound request: create billing task then MQ consume.
* Provide at least one of transferNo / trackingNo / orderNo.
* billTime is billing time from mobile (stored in prc_billing_task.bill_time).
*/
@Data
public class BillingTaskSubmitRequest implements Serializable
{
private static final long serialVersionUID = 1L;
private String transferNo;
private String trackingNo;
private String orderNo;
/** Billing time from mobile; persisted to prc_billing_task.bill_time */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date billTime;
/** Optional: PENDING / REBILL / REFUND. Empty = auto PENDING or REBILL. */
private String billType;
/** Optional body apiCode when header X-Api-Code missing */
private String apiCode;
}
@@ -0,0 +1,52 @@
package com.bms.price.domain.vo;
import lombok.Data;
/**
* TMS 查询订单计费状态的业务结果。
*
* <p>该结果不直接返回完整订单计费数据,只返回订单匹配结果和相关状态事实。</p>
*/
@Data
public class TmsOrderBillStatusResult {
/**
* 是否查询到计费订单。
*/
private boolean found;
/**
* 匹配到的记录数,最多返回 2 条用于判断是否存在歧义。
*/
private int matchedCount;
/**
* 命中类型:NOT_FOUND/ORDER_NO/TRACKING_NO/TRANSFER_NO/MULTIPLE。
*/
private String matchType;
/**
* 计费订单标识,仅在唯一命中时返回。
*/
private String billId;
private String orderNo;
private String trackingNo;
private String transferNo;
private Long customerId;
private String customerCode;
/**
* 订单关联的当前客户是否存在;订单未找到或匹配到多条时为 null。
*/
private Boolean customerFound;
/**
* 客户生效状态:ACTIVE/MISSING/DISABLED。
*/
private String customerActiveStatus;
/**
* 额度欠费状态:NORMAL/ARREARS。
*/
private String creditArrearsStatus;
}
@@ -0,0 +1,60 @@
package com.bms.price.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.AssertTrue;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** Sync order -> receivable bill. Quote fields plus order snapshot. */
@Data
@EqualsAndHashCode(callSuper = true)
public class TmsPriceBillRequest extends TmsPriceQuoteRequest
{
private static final long serialVersionUID = 1L;
@NotBlank(message = "orderNo is required")
private String orderNo;
private String trackingNo;
/** transfer order no */
private String transferNo;
/** 所属销售员 */
private String belongSaler;
/** 销售员编码 */
private String belongSalerCode;
/** 结算员 */
private String settlementMan;
/** 结算员编码 */
private String settlementManCode;
/** 客服员 */
private String serviceMan;
private String customerName;
private Integer pieces;
private BigDecimal actualWeight;
private BigDecimal volume;
private BigDecimal volumeWeight;
private BigDecimal pkgLength;
private BigDecimal pkgWidth;
private BigDecimal pkgHeight;
private String shipperName;
private String consigneeName;
private String warehouseCode;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date orderTime;
private String orderRemark;
/** 上游 TAB_ORDER 整行,用于写入 prc_order_bill_ext 扩展字段 */
private Map<String, Object> upstreamRow;
@JsonIgnore
@AssertTrue(message = "bizDate is required")
public boolean isBizDatePresent()
{
String bizDate = getBizDate();
return bizDate != null && !bizDate.trim().isEmpty();
}
}
@@ -0,0 +1,26 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
/** quote fee line keyed by bms_fee_type */
@Data
public class TmsPriceQuoteFeeLine implements Serializable
{
private static final long serialVersionUID = 1L;
private String feeId;
private String feeType;
private String feeName;
/** surcharge config id, 0 for freight/registration */
private Long scId;
private BigDecimal amount;
private String currency;
private String roundMode;
private String remark;
/** UNBILLED / BILLED */
private String arBillStatus;
/** 0=system 1=manual */
private String manualFlag;
}
@@ -0,0 +1,40 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.math.BigDecimal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/** TMS freight quote request */
@Data
public class TmsPriceQuoteRequest implements Serializable
{
private static final long serialVersionUID = 1L;
private Long customerId;
/** Required. Maps to ctr_customer.customer_code; used in quote unique key. */
@NotBlank(message = "customerCode is required")
private String customerCode;
@NotBlank(message = "productCode is required")
private String productCode;
/** ISO2; countryName alternative */
private String countryCode;
/** country display name; countryCode alternative */
private String countryName;
/** Dest postcode; required when product-country has zones */
private String destPostcode;
@NotNull(message = "weight is required")
private BigDecimal weight;
/** yyyy-MM-dd,默认今天 */
private String bizDate;
private Integer tmsId;
/** Header X-Api-Code 优先;Body 兜底 */
private String apiCode;
}
@@ -0,0 +1,113 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import lombok.Data;
/**
* TMS freight quote response.
* matchSource: PACKAGE_FIXED / PACKAGE_DISCOUNT / PRODUCT_DEFAULT
*/
@Data
public class TmsPriceQuoteResult implements Serializable
{
private static final long serialVersionUID = 1L;
private String matchSource;
private String matchMessage;
private Long customerId;
private Long priceSetId;
private String priceSetCode;
private String priceSetName;
private String setType;
private Integer bindPriority;
private Long customerPricesetId;
/** Hit package version id (prc_price_set_version.psv_id) */
private Long psvId;
/** Hit package version no (e.g. V1) */
private String versionNo;
/** Hit package detail id when package version detail matched */
private Long psdId;
private String productCode;
private String productName;
private String countryCode;
private String countryName;
private Long zoneId;
private String zoneCode;
private String zoneName;
private Long productCountryId;
private BigDecimal weightMin;
private BigDecimal weightMax;
private String weightLabel;
private Date bizDate;
/** bms_product_country.effective_date */
private Date effectiveDate;
private BigDecimal weight;
private BigDecimal chargeWeight;
private BigDecimal freightRate;
private BigDecimal baseFreightRate;
private BigDecimal discountPercent;
private BigDecimal registrationFee;
private BigDecimal freightAmount;
/** 附加费合计(按产品关联命中后汇总) */
private BigDecimal surchargeAmount;
/** receivable total (order bill) */
private BigDecimal incomeTotal;
/** payable total (order bill); also quote payable */
private BigDecimal payTotal;
/** quote / legacy field; same as incomeTotal for bill sync */
private BigDecimal payableTotal;
private String currency = "CNY";
/** UP / DOWN / HALF_UP */
private String roundMode;
/** 应收费用明细(兼容旧字段 feeDetails) */
private List<TmsPriceQuoteFeeLine> feeDetails;
/** 应付费用明细 */
private List<TmsPriceQuoteFeeLine> payFeeDetails;
private String quoteId;
private String billId;
private String orderNo;
private String trackingNo;
/** transfer order no */
private String transferNo;
/** 所属销售员 */
private String belongSaler;
/** 销售员编码 */
private String belongSalerCode;
/** 结算员 */
private String settlementMan;
/** 结算员编码 */
private String settlementManCode;
/** 客服员 */
private String serviceMan;
private String customerCode;
private String customerName;
/** ACTIVE / MISSING / DISABLED */
private String customerActiveStatus;
/** NORMAL / ARREARS */
private String creditArrearsStatus;
private Integer pieces;
private BigDecimal actualWeight;
private BigDecimal volume;
private BigDecimal volumeWeight;
private BigDecimal pkgLength;
private BigDecimal pkgWidth;
private BigDecimal pkgHeight;
private String shipperName;
private String consigneeName;
private String destPostcode;
private String warehouseCode;
private Date orderTime;
private String orderRemark;
/** true=hit stored quote */
private Boolean fromCache;
/** 计费请求 JSON(当次响应/日志用,不落库) */
private String requestJson;
/** original billing response JSON from Elasticsearch */
private String responseJson;
}
@@ -0,0 +1,28 @@
package com.bms.price.domain.vo;
import java.io.Serializable;
import java.math.BigDecimal;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/** Update manual receivable fee line on billing detail. */
@Data
public class UpdateIncomeBillFeeRequest implements Serializable
{
private static final long serialVersionUID = 1L;
@NotBlank(message = "feeId required")
private String feeId;
/** Optional: change surcharge config. */
private Long scId;
/** Dict bms_fee_type. */
private String feeType;
private BigDecimal amount;
private String currency;
private String remark;
}