订单、支付、退款、发货、退货等编号自动生成类
在商城网站中,订单编号的自动生成,ERP中各个单据的编号自动生成,都可以按照一下的方式来自动生成。
第一步:定义常量订单编号前缀、订单编号起始数、订单编号步长;
public static final long ORDER_SN_FIRST = 100000L; // 订单编号起始数
public static final long ORDER_SN_STEP = 1L; // 订单编号步长
第二步:定义订单的最后一个编号号码;
第三步:获取数据库中订单号为最后一个的订单编号,并赋值给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;
}
第五步:调用编号生成的方法
个人一些看法,这些单据编号的自动生成,都是在写代码的时候定义好的,以后编号更改形式要是变了呢,是否可以改进,个人觉得应该可以改成配置的形式。
一个完整的类如下,在这里记下,为以后开发用:
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;
}
}
订单、支付、退款、发货、退货等编号自动生成类相关推荐
- SQL server和MySQL编号自动生成
前一段时间,因为项目需求用到编号自动生成和手动输入编号,为了区分编号手动输入必须有一个英文字母,自动生成编号必须是纯数字,mysql判断用到了正则表达式. SQL server 编号自动生成 DECL ...
- JCIM | 用于自动生成类药分子的生成网络复合体(GNC)
作者/编辑 | 王建民 导读 目前的药物发现工作既昂贵又耗时.如何创造出种类繁多的新型化合物,使其不仅具有理想的药理特性,而且低收入人群也能廉价获得,仍然是一项具有挑战性的任务.这项工作中,研究人员开 ...
- idea自动生成类注释和方法注释
一,自动生成类注释 打开Setting,选在Editor,然后是File and Code Templates 最后是Files 中的Class ,点击class后,编辑右边的红色边框,里边是模板,将 ...
- java自动生成类_自动生成优化的Java类专业知识
java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...
- IDEA 自动生成类注释和方法注释
新建类,自动生成类注释的模板配置 File->Settings->Editor->File and Code Templates->Class /** * @Descript ...
- 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...
根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...
- 第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类
之前没有用VS或者在vs中一个源程序写到底,没有使用C++编一个工程 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下面直接开始: 新建一个VC++ win32的程序, 在源 ...
- eclipse中green UML 自动生成类图
2019独角兽企业重金招聘Python工程师标准>>> eclipse中.green UML 自动生成类图 Green UML和AmaterasUML 两种 一.安装方法: 1.都是 ...
- 如何标题编号自动生成_标题编号的自动生成+自动修改的方法步骤
上次说了怎么设置标题格式并应用, 这次就是介绍一下, 怎么在标题前 「自动生成」+「自动修改」 我们需要的编号, 可以是1.2.3 或者 第一章.第二章 或 第1章.第2章等等. 1.视频版 知乎视频 ...
最新文章
- 开元弧焊机器人编程_焊接机器人的技术现状和展望
- java子网划分_子网划分讲解及练习(二)
- TensorFlow教程之完整教程 2.7 字词的向量表示
- CSS问题的撰写准则
- 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
- clickhouse一键登陆
- set、get方法解析
- Java中Integer.parseInt()用法
- 自动化C语言第一次月考试卷,计算机专业第一次月考.doc
- Kubernetes 1.5安装
- Linux(CentOS)系统下设置nginx开机自启动
- 修改docker内mysql配置后无法启动解决方法
- JDBC连接池原理及分析
- 移动前端开发与web前端开发的区别
- 怎么制作证件照电子版?安利下面这三款软件给你
- Excel中如何让第一行、第二行一直显示出来 excel冻结窗格与拆分窗格
- Python 二次开发 SAP2000 定义
- 7、LiveCharts--常用属性介绍(三)
- 安装trinity、解决报错
- PCI DSS安全评估简介
热门文章
- 模块化高扩展性的前端框架 KISSY
- 基于模板匹配的目标跟踪法
- 通过cmd命令,获取当前文件夹下所有的文件的绝对路径,并存储在指定目录的文件夹中
- 【Python爬虫学习】八、股票数据定向爬虫(2020年1月31日成功爬取中财网,百度股市通web版404了)
- C++中当用命令行CTRL+Z+Enter模拟EOF后还想继续输入的探索
- 使用Python Link SDK接入阿里云物联网平台
- 国内的镜像源访问地址
- Lenovo Thinkpad BIOS中开启VT虚拟化后无法生效?
- 合天——SQL注入实验二
- VPython三维仿真(NO.2) 图像操作与基础模型