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个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...
随机推荐
- docker 汇总
整理中 ... 一. docker 基础 配置参数最佳实践 二. docker 编排工具 docker swarm mesos kubernetes AWS ECS 三. docker 生态 dock ...
- mysql+keepalived 双主热备高可用
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
- Spring boot 1: 使用IDEA创建Spring boot项目
项目用到的环境: Windows 10 JDK8 IntelliJ IDEA 2017.1.3 Apache Tomcat 8 Maven 3.3.3 使用IDEA新建spring boot项目 新建 ...
- Easyui设置动态表格,动态导出数据实例,附Dome
最近碰到一个需求,需要提供一个弹出页面选择列表页面需要显示的列,页面确认之后需要修改列表页面显示的表格,导出的数据也需要同步变化. 下面直接上代码 1.设置需要显示的列columus为全局对象,用于子 ...
- IT学习网站
网站 网站定位 http://www.51cto.com/ 中国领先的IT技术网站. http://www.iteye.com/ 内容齐全,功能丰富的中文IT技术门户和社区网站. http://www ...
- RabbitMQ windows安装官方文档翻译!
RabbitMQ Windows安装和配置 下载地址 官网windows下载地址: http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/r ...
- HybridApp Exception
HybridApp Exception [创建安卓虚拟机失败]CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1) ...
- css自定义动画在微信中无法执行的原因
这是我去年年底遇到的一个问题, 在这个过程中我发现了一个比较有趣的问题. 我们在做抽奖的时候,微信分享到朋友圈的页面里,安卓机器无法执行页面中的自定义动画(元宝的位移,进入按钮的放大缩小等等).这让我 ...
- 详解react/redux的服务端渲染:页面性能与SEO
亟待解决的疑问 为什么服务端渲染首屏渲染快?(对比客户端首屏渲染) react客户端渲染的一大痛点就是首屏渲染速度慢问题,因为react是一个单页面应用,大多数的资源需要在首次渲染前就加载 ...
- iOS 微信消息拦截插件系列教程-(总目录)
微信iOS消息拦截插件教程 标签: 越狱开发 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 iOS逆向高级开发群:375024882 1 ...