订单、支付、退款、发货、退货等编号主动生成类

在商城网站中,订单编号的自动生成,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;
}
}

Java 编程 订单、支付、退款、发货、退货等编号主动生成类的更多相关文章

  1. Java 编程的动态性, 第4部分: 用 Javassist 进行类转换--转载

    讲过了 Java 类格式和利用反射进行的运行时访问后,本系列到了进入更高级主题的时候了.本月我将开始本系列的第二部分,在这里 Java 类信息只不过是由应用程序操纵的另一种形式的数据结构而已.我将这个 ...

  2. 《JAVA编程那点事儿》读书笔记(二)——类和对象

    方法: 1. 基本的main方法: public static void main(String[] args) 2.静态方法内部调用非静态方法:重新声明一个类,通过这个类来调用非静态方法 publi ...

  3. 注解的基本盘点 -- 《Java编程思想》

    注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在之后的某一个时刻非常方便地使用这些数据. ---<Java编程思想> 其实注解可以理解为一个工具类,只要使用了这个工 ...

  4. PowerDesigner导入java类生成类图

    1;打开PowerDesigner 2;file—>Reverse Engineer—>Object Language... 3;弹出一个对话框,在General模块下Model Name ...

  5. java实现支付宝支付及退款(二)

    紧跟上篇博客,本篇将书写具体的代码实现 开发环境:SSM.maven.JDK8.0 1.Maven坐标 <!--阿里支付--> <dependency> <groupId ...

  6. Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)

    上次分享了支付宝订单退款的代码,今天分享一下支付宝转账的操作.  现在是有一个余额提现的功能,本来是打算做提现到银行卡的,但是客户嫌麻烦不想注册银联的开放平台账户,就说先提现到支付宝就行,二期再做银行 ...

  7. APP支付 + 退款(JAVA实现)

    首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档!  https://pay.weixin.qq ...

  8. java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式

    1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 <!-- https://mvnrepository.com/ ...

  9. JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)

    写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...

随机推荐

  1. 将数据库从服务器移到浏览器--indexedDB基本操作封装

    数据库是属于服务器的,这是天经地义的事,但是有时候数据也许并非需要存储在服务器,但是这些数据也是一条一条的记录,怎么办?今天来带领你领略一下H5的一个新特性--indexedDB的风骚.你会情不自禁的 ...

  2. 【解决】VS2013 + Qt 5.7(5.6适用)使用QSqlDatabase出现“无法解析的外部符号"错误

    原始日期: 2016-08-03 22:09  错误如下: error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscal ...

  3. 用 Google 挖掘赚钱思路

    为程序员,如果学了一堆技术却没有用武之地,实在可惜,如何把自己积累的技术利用起来?通俗一点,程序员有哪些赚钱的门路? 比较常见的一种方式是接私活,不过私活的复杂度不一,沟通成本会非常高,另一方面,私活 ...

  4. WCF学习——构建第二个WCF应用程序(四)

    一.WCF服务端应用程序 1.创建WCF服务端应用程序项目 打开Visual Studio 2013,在菜单上点击文件->新建->项目->WCF服务应用程序.在弹出界面的" ...

  5. VMware-VCSA-6.5安装过程

    1.新建虚拟机 2.选择从OVF或OVA文件导入 3.给虚拟机命名,并选择OVF文件. 4.选择虚拟机的存储位置.这里没有配置共享存储宿,这里选择的宿主机的存储. 5.许可协议同意就OK了. 6.部署 ...

  6. 解决Jenkins performance-plugin 解析jmeter jtl报告NumberFormatException "timeStamp"

    报错日志: Performance: Failed to parse file '/var/lib/jenkins/jobs/Jmeter/jobs/jmeter-test/builds/14/per ...

  7. Intellij IDEA查看方法的调用栈

    在IDEA中,先双击选定要查看的方法,使用快捷键Ctrl+Alt+h,在右侧就会显示该方法的详细信息,再双击右侧的方法,就定位到方法的代码区.如下图:

  8. 转载: C++ 获取文件夹下的所有文件名

    最近需要得到某个文件夹下所有文件名,于是就上网上查了查,得到如下的解决方案最多: 而且查到的最早的版本是这个:http://blog.csdn.net/cxf7394373/article/detai ...

  9. js的DOM操作

    ID选择器:document.getElementById("").innerHTML="" class选择器:var divc= document.getEl ...

  10. 【总算解决了】A network-related or instance-specific error occurred while establishing a connection to SQL Server

    给别人做的网站莫名其妙连接不上数据库.百度了好多,总算知道自己的错在哪了. 报 "A network-related or instance-specific error occurred  ...