在商城网站中,订单编号的自动生成,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 退货编号
  */
  public  synchronized  static  String buildReshipSn() {
  lastReshipSnNumber += RESHIP_SN_STEP;
   return RESHIP_SN_PREFIX + lastReshipSnNumber;
 }
}

订单、支付、退款、发货、退货等编号自动生成类相关推荐

  1. SQL server和MySQL编号自动生成

    前一段时间,因为项目需求用到编号自动生成和手动输入编号,为了区分编号手动输入必须有一个英文字母,自动生成编号必须是纯数字,mysql判断用到了正则表达式. SQL server 编号自动生成 DECL ...

  2. JCIM | 用于自动生成类药分子的生成网络复合体(GNC)

    作者/编辑 | 王建民 导读 目前的药物发现工作既昂贵又耗时.如何创造出种类繁多的新型化合物,使其不仅具有理想的药理特性,而且低收入人群也能廉价获得,仍然是一项具有挑战性的任务.这项工作中,研究人员开 ...

  3. idea自动生成类注释和方法注释

    一,自动生成类注释 打开Setting,选在Editor,然后是File and Code Templates 最后是Files 中的Class ,点击class后,编辑右边的红色边框,里边是模板,将 ...

  4. java自动生成类_自动生成优化的Java类专业知识

    java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...

  5. IDEA 自动生成类注释和方法注释

    新建类,自动生成类注释的模板配置  File->Settings->Editor->File and Code Templates->Class /** * @Descript ...

  6. 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...

    根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...

  7. 第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类

    之前没有用VS或者在vs中一个源程序写到底,没有使用C++编一个工程 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下面直接开始: 新建一个VC++ win32的程序, 在源 ...

  8. eclipse中green UML 自动生成类图

    2019独角兽企业重金招聘Python工程师标准>>> eclipse中.green UML 自动生成类图 Green UML和AmaterasUML 两种 一.安装方法: 1.都是 ...

  9. 如何标题编号自动生成_标题编号的自动生成+自动修改的方法步骤

    上次说了怎么设置标题格式并应用, 这次就是介绍一下, 怎么在标题前 「自动生成」+「自动修改」 我们需要的编号, 可以是1.2.3 或者 第一章.第二章 或 第1章.第2章等等. 1.视频版 知乎视频 ...

最新文章

  1. 开元弧焊机器人编程_焊接机器人的技术现状和展望
  2. java子网划分_子网划分讲解及练习(二)
  3. TensorFlow教程之完整教程 2.7 字词的向量表示
  4. CSS问题的撰写准则
  5. 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
  6. clickhouse一键登陆
  7. set、get方法解析
  8. Java中Integer.parseInt()用法
  9. 自动化C语言第一次月考试卷,计算机专业第一次月考.doc
  10. Kubernetes 1.5安装
  11. Linux(CentOS)系统下设置nginx开机自启动
  12. 修改docker内mysql配置后无法启动解决方法
  13. JDBC连接池原理及分析
  14. 移动前端开发与web前端开发的区别
  15. 怎么制作证件照电子版?安利下面这三款软件给你
  16. Excel中如何让第一行、第二行一直显示出来 excel冻结窗格与拆分窗格
  17. Python 二次开发 SAP2000 定义
  18. 7、LiveCharts--常用属性介绍(三)
  19. 安装trinity、解决报错
  20. PCI DSS安全评估简介

热门文章

  1. 模块化高扩展性的前端框架 KISSY
  2. 基于模板匹配的目标跟踪法
  3. 通过cmd命令,获取当前文件夹下所有的文件的绝对路径,并存储在指定目录的文件夹中
  4. 【Python爬虫学习】八、股票数据定向爬虫(2020年1月31日成功爬取中财网,百度股市通web版404了)
  5. C++中当用命令行CTRL+Z+Enter模拟EOF后还想继续输入的探索
  6. 使用Python Link SDK接入阿里云物联网平台
  7. 国内的镜像源访问地址
  8. Lenovo Thinkpad BIOS中开启VT虚拟化后无法生效?
  9. 合天——SQL注入实验二
  10. VPython三维仿真(NO.2) 图像操作与基础模型