Java 编程 订单、支付、退款、发货、退货等编号主动生成类
订单、支付、退款、发货、退货等编号主动生成类
在商城网站中,订单编号的自动生成,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 编程 订单、支付、退款、发货、退货等编号主动生成类的更多相关文章
- Java 编程的动态性, 第4部分: 用 Javassist 进行类转换--转载
讲过了 Java 类格式和利用反射进行的运行时访问后,本系列到了进入更高级主题的时候了.本月我将开始本系列的第二部分,在这里 Java 类信息只不过是由应用程序操纵的另一种形式的数据结构而已.我将这个 ...
- 《JAVA编程那点事儿》读书笔记(二)——类和对象
方法: 1. 基本的main方法: public static void main(String[] args) 2.静态方法内部调用非静态方法:重新声明一个类,通过这个类来调用非静态方法 publi ...
- 注解的基本盘点 -- 《Java编程思想》
注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在之后的某一个时刻非常方便地使用这些数据. ---<Java编程思想> 其实注解可以理解为一个工具类,只要使用了这个工 ...
- PowerDesigner导入java类生成类图
1;打开PowerDesigner 2;file—>Reverse Engineer—>Object Language... 3;弹出一个对话框,在General模块下Model Name ...
- java实现支付宝支付及退款(二)
紧跟上篇博客,本篇将书写具体的代码实现 开发环境:SSM.maven.JDK8.0 1.Maven坐标 <!--阿里支付--> <dependency> <groupId ...
- Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)
上次分享了支付宝订单退款的代码,今天分享一下支付宝转账的操作. 现在是有一个余额提现的功能,本来是打算做提现到银行卡的,但是客户嫌麻烦不想注册银联的开放平台账户,就说先提现到支付宝就行,二期再做银行 ...
- APP支付 + 退款(JAVA实现)
首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档! https://pay.weixin.qq ...
- java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式
1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 <!-- https://mvnrepository.com/ ...
- JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)
写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...
随机推荐
- curl的使用
curl -v -0 -T 123.wav "127.0.0.1:80/saveSound?filename=18696770041_1379903830_xxx.wav&du ...
- JAVA基础——面向对象三大特性:封装、继承、多态
JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...
- CSS 基础
CSS Cascading Style Sheet 层叠样式表 Css创建: 1.外部样式表(样式表应该以 .css 扩展名进行保存) <head> <link rel=" ...
- Linux系统安全配置基线
一:共享账号检查 配置名称:用户账号分配检查,避免共享账号存在 配置要求:1.系统需按照实际用户分配账号: 2.避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享. 操作指南:参考配置操 ...
- [图形学] 结束 [Unity Shader] 开始
历时4个月,终于把<计算机图形学 with OpenGL>啃完了.如果边上班边看,即使一年应该都看不完. 虽然书里用到的GLUT库应该已经废弃,但并不影响用它去理解图形学的内容,我只把它当 ...
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- echarts的部署和使用
echarts是百度开发的一款商业级.开源免费的前端图表组件,具体可访问其主页:http://echarts.baidu.com/ echarts目前已经发布了2.0版本,使用起来非常的方便,并且效果 ...
- 2238"回文字串"报告
题目描述: 回文串,就是从前往后和从后往前看都是一样的字符串.那么现在给你一个字符串,请你找出该字符串中,长度最大的一个回文子串. 输入描述: 有且仅有一个仅包含小写字母的字符串,保证其长度不超过50 ...
- Hadoop启动方式
启动方式 1.逐一启动 hdfs hadoop-daemon.sh start|stop namenode|datanode|secondrynamenode yarn yarn-daemon.sh ...
- 推荐系统那点事 —— 基于Spark MLlib的特征选择
在机器学习中,一般都会按照下面几个步骤:特征提取.数据预处理.特征选择.模型训练.检验优化.那么特征的选择就很关键了,一般模型最后效果的好坏往往都是跟特征的选择有关系的,因为模型本身的参数并没有太多优 ...