訂單、支付、退款、發貨、退貨等編號主動生成類
在商城網站中,訂單編號的自動生成,ERP中各個單據的編號自動生成,都可以按照一下的方式來自動生成。
第一步:定義常量訂單編號前綴、訂單編號起始數、訂單編號步長;
public static final String ORDER_SN_PREFIX = "";// 訂單編號前綴 public static final long ORDER_SN_FIRST = 100000L;// 訂單編號起始數 public static final long ORDER_SN_STEP = 1L;// 訂單編號步長
第二步:定義訂單的最后一個編號號碼;
public static Long lastOrderSnNumber; //最后的訂單編號號碼
第三步:獲取數據庫中訂單號為最后一個的訂單編號,並賦值給lastOrderSnNumber
// 訂單編號 OrderService orderService = (OrderService) SpringUtil.getBean("orderServiceImpl"); String lastOrderSn = orderService.getLastOrderSn(); if (StringUtils.isNotEmpty(lastOrderSn)) { lastOrderSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastOrderSn, ORDER_SN_PREFIX)); } else { lastOrderSnNumber = ORDER_SN_FIRST; }
第四步:生成最新的訂單號
/** * 生成訂單編號 * @return 訂單編號 */ public synchronized static String buildOrderSn() { lastOrderSnNumber += ORDER_SN_STEP; return ORDER_SN_PREFIX + lastOrderSnNumber; }
第五步:調用編號生成的方法
order.setOrderSn(SerialNumberUtil.buildOrderSn());
個人一些看法,這些單據編號的自動生成,都是在寫代碼的時候定義好的,以后編號更改形式要是變了呢,是否可以改進,個人覺得應該可以改成配置的形式。
一個完整的類如下,在這里記下,為以后開發用:
package net.shopxx.util; import java.util.UUID; import net.shopxx.service.OrderService; import net.shopxx.service.PaymentService; import net.shopxx.service.RefundService; import net.shopxx.service.ReshipService; import net.shopxx.service.ShippingService; import org.apache.commons.lang3.StringUtils; /** * 工具類 - 編號生成 */ public class SerialNumberUtil { public static final String PRODUCT_SN_PREFIX = "SN_";// 貨號前綴 public static final String ORDER_SN_PREFIX = "";// 訂單編號前綴 public static final long ORDER_SN_FIRST = 100000L;// 訂單編號起始數 public static final long ORDER_SN_STEP = 1L;// 訂單編號步長 public static final String PAYMENT_SN_PREFIX = "";// 支付編號前綴 public static final long PAYMENT_SN_FIRST = 100000L;// 支付編號起始數 public static final long PAYMENT_SN_STEP = 1L;// 支付編號步長 public static final String REFUND_SN_PREFIX = "";// 退款編號前綴 public static final long REFUND_SN_FIRST = 100000L;// 退款編號起始數 public static final long REFUND_SN_STEP = 1L;// 退款編號步長 public static final String SHIPPING_SN_PREFIX = "";// 發貨編號前綴 public static final long SHIPPING_SN_FIRST = 100000L;// 發貨編號起始數 public static final long SHIPPING_SN_STEP = 1L;// 發貨編號步長 public static final String RESHIP_SN_PREFIX = "";// 退貨編號前綴 public static final long RESHIP_SN_FIRST = 100000L;// 退貨編號起始數 public static final long RESHIP_SN_STEP = 1L;// 退貨編號步長 public static Long lastOrderSnNumber; //最后的訂單編號號碼 public static Long lastPaymentSnNumber; public static Long lastRefundSnNumber; public static Long lastShippingSnNumber; public static Long lastReshipSnNumber; public static Long lastTenpayTransactionIdNumber; static { // 訂單編號 OrderService orderService = (OrderService) SpringUtil.getBean("orderServiceImpl"); String lastOrderSn = orderService.getLastOrderSn(); if (StringUtils.isNotEmpty(lastOrderSn)) { lastOrderSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastOrderSn, ORDER_SN_PREFIX)); } else { lastOrderSnNumber = ORDER_SN_FIRST; } // 支付編號 PaymentService paymentService = (PaymentService) SpringUtil.getBean("paymentServiceImpl"); String lastPaymentSn = paymentService.getLastPaymentSn(); if (StringUtils.isNotEmpty(lastPaymentSn)) { lastPaymentSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastPaymentSn, PAYMENT_SN_PREFIX)); } else { lastPaymentSnNumber = PAYMENT_SN_FIRST; } // 退款編號 RefundService refundService = (RefundService) SpringUtil.getBean("refundServiceImpl"); String lastRefundSn = refundService.getLastRefundSn(); if (StringUtils.isNotEmpty(lastRefundSn)) { lastRefundSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastRefundSn, REFUND_SN_PREFIX)); } else { lastRefundSnNumber = REFUND_SN_FIRST; } // 發貨編號 ShippingService shippingService = (ShippingService) SpringUtil.getBean("shippingServiceImpl"); String lastShippingSn = shippingService.getLastShippingSn(); if (StringUtils.isNotEmpty(lastShippingSn)) { lastShippingSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastShippingSn, SHIPPING_SN_PREFIX)); } else { lastShippingSnNumber = SHIPPING_SN_FIRST; } // 退貨編號 ReshipService reshipService = (ReshipService) SpringUtil.getBean("reshipServiceImpl"); String lastReshipSn = reshipService.getLastReshipSn(); if (StringUtils.isNotEmpty(lastReshipSn)) { lastReshipSnNumber = Long.parseLong(StringUtils.removeStartIgnoreCase(lastReshipSn, RESHIP_SN_PREFIX)); } else { lastReshipSnNumber = RESHIP_SN_FIRST; } } /** * 生成貨號 * * @return 貨號 */ public static String buildProductSn() { String uuid = UUID.randomUUID().toString(); return PRODUCT_SN_PREFIX + (uuid.substring(0, 8) + uuid.substring(9, 13)).toUpperCase(); } /** * 生成訂單編號 * @return 訂單編號 */ public synchronized static String buildOrderSn() { lastOrderSnNumber += ORDER_SN_STEP; return ORDER_SN_PREFIX + lastOrderSnNumber; } /** * 生成支付編號 * @return 支付編號 */ public synchronized static String buildPaymentSn() { lastPaymentSnNumber += PAYMENT_SN_STEP; return PAYMENT_SN_PREFIX + lastPaymentSnNumber; } /** * 生成退款編號 * * @return 退款編號 */ public synchronized static String buildRefundSn() { lastRefundSnNumber += REFUND_SN_STEP; return REFUND_SN_PREFIX + lastRefundSnNumber; } /** * 生成發貨編號 * * @return 發貨編號 */ public synchronized static String buildShippingSn() { lastShippingSnNumber += SHIPPING_SN_STEP; return SHIPPING_SN_PREFIX + lastShippingSnNumber; } /** * 生成退貨編號 * * @return 退貨編號 */