批次号/订单号生成

article/2025/10/5 19:44:07

概述

在系统内部或与其他系统进行对接对编码有一定自定义规则,包括批次号、订单号,比如 PCH20170727152245000001 编码规范 = 开头字母 + 年月日时分秒 + 序号 ,使用存储过程和不使用存储过程两种方式,数据都是存在 mysql 数据库中。

详细

代码下载:http://www.demodashi.com/demo/10742.html



更多个人文章请点击

一、准备工作

1、订单号数据存储在 Mysql 数据库中,需要安装 Mysql 数据库。

2、使用数据库存储过程生成编码和不使用存储过程在代码中生成编码,相同的是编码都是保存在数据库中。

二、程序实现

1、程序截图

1501347344494015101.png


2、实现思路

使用存储过程:在存储过程中进行查询和插入

不使用存储过程:在代码中先查询出来再进行插入

都是在数据库进行查询,然后插入


3、主要代码

存储过程如下:

BEGIN-- 当前日期
DECLAREcurrentDate VARCHAR (15);-- 离现在最近的满足条件的编码
DECLAREoldCode VARCHAR (25) DEFAULT '';-- oldCode的流水号
DECLAREmaxNo INT DEFAULT 0;IF num = 4 THEN-- yyyySELECTDATE_FORMAT(NOW(),'%Y') INTO currentDate;ELSEIF num = 6 THEN-- yyyymmSELECTDATE_FORMAT(NOW(),'%Y%m') INTO currentDate;ELSEIF num = 8 THEN-- yyyymmddSELECTDATE_FORMAT(NOW(),'%Y%m%d') INTO currentDate;ELSEIF num = 12 THEN-- yyyymmddHHiiSELECTDATE_FORMAT(NOW(),'%Y%m%d%H%i') INTO currentDate;ELSEIF num = 14 THEN-- yyyymmddHHiissSELECTDATE_FORMAT(NOW(),'%Y%m%d%H%i%s') INTO currentDate;END
IF;-- 显示最后一条数据
SELECTIFNULL(code,'') INTO oldCode
FROMcode_test
WHERESUBSTRING(code,1,preLen) = pre
AND SUBSTRING(code,(preLen + 1),num) = currentDate
AND LENGTH(code) = preLen + num + noLen
ORDER BYid DESC
LIMIT 1;-- 编码不为''截取编码的最后noLen位
IF oldCode != '' THENSET maxNo = CONVERT(SUBSTRING(oldCode, - noLen),DECIMAL
);END
IF;-- 如果流水号不足noLen位,用0填充左边
SELECTCONCAT(pre,currentDate,LPAD((maxNo + 1), noLen, '0')
) INTO newCode;-- 插入数据
INSERT INTOcode_test (code)
VALUES(newCode);SELECTnewCode;END


入参为:

IN pre VARCHAR(32), IN preLen INT, IN num INT, IN noLen INT, OUT newCode VARCHAR(32)


不使用存储过程代码如下:

    //代码同步,防止高并发private final static ReentrantLock lock;static{lock = new ReentrantLock();}/*** 不使用存储过程*/@Testpublic void codeTest2(){Map<String, Object> map = new HashMap<String, Object>();String pre = "PCH";Integer preLen = 3;Integer num = 4;Integer noLen = 4;Date curr = new Date();SimpleDateFormat formatter = null;switch (num) {case 4:formatter = new SimpleDateFormat("yyyy");break;case 6:formatter = new SimpleDateFormat("yyyyMM");break;case 8:formatter = new SimpleDateFormat("yyyyMMdd");break;case 12:formatter = new SimpleDateFormat("yyyyMMddHHmm");break;case 14:formatter = new SimpleDateFormat("yyyyMMddHHmmss");break;default:break;}String currentDate = formatter.format(curr);map.put("pre", pre);map.put("preLen", preLen);map.put("num", num);map.put("noLen", noLen);map.put("currentDate", currentDate);lock.lock();String newCode = "";String newNo = "";try {String oldCode = codeTestDao.getOldCode(map);if (StringUtils.isEmpty(oldCode)) {newNo = "1";} else {Integer maxNo = Integer.parseInt(oldCode.substring(oldCode.length() - noLen));newNo = String.valueOf(maxNo + 1);}int length = newNo.length();if(length > noLen){System.out.println("新流水号位数超限");}for (int i = 0; i < noLen - length; i++) {newNo = "0".concat(newNo);}newCode = pre + currentDate + newNo;CodeTest codeTest = new CodeTest();codeTest.setCode(newCode);codeTestDao.saveSelective(codeTest);} finally {lock.unlock();}System.out.println("生成的编码为:"+newCode);}

三、运行效果

1、将 db 文件夹下的 test.sql 导入数据库

2、修改 jdbc.properties 文件中 mysql 连接

3、执行 CodeJunitTest 类下的 两个测试方法

1501347916264090866.png



代码下载:http://www.demodashi.com/demo/10742.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权



http://chatgpt.dhexx.cn/article/1NEsu9qY.shtml

相关文章

SAP消耗性物料采购前台操作及后台配置

提示&#xff1a;本人工作之余的学习记录&#xff0c;仅供参考 文章目录 前言 企业里除了库存物料采购外&#xff0c;经常存在非库存物料的采购&#xff0c;由于零星小物件比较多&#xff0c;例如中性笔、文件夹、一次性纸杯、A4纸等办公用品&#xff0c;创建物料&#xff0c;…

一、T100之料件管理

T100之料件管理 一、料件集团数据和据点级数据的区别二、料件基础资料设置2.1 料件分群(先要建好分群&#xff0c;基础资料中要用到)2.2 企业层次参数设置aoos0102.3 据点级数据集团控制设置作业(aooi090)2.4 aooi2502.5 aooi2602.6 aimi010(产品分类码维护作业)2.7 aimi1502.8…

SAP PP 笔记(二)物料

Organizational levels for the material master record and Organization structures&#xff1a;物料主档的组织架构&#xff0c;建立这个料号有哪些层次&#xff0c;比如有集团、工厂、仓位这个层次&#xff0c;也可能有销售区域层次等Material type - industry sector&…

数据库原理与技术 作业及答案 复习用

目录 第一章 绪论 作业第二章 关系数据库 作业第3章 关系数据库标准语言SQL 作业1第3章 关系数据库标准语言SQL 作业2第3章 关系数据库标准语言SQL 作业3⭐第4章 数据库安全性 作业⭐SQL 综合练习⭐第6章 关系数据理论 作业 新⭐第7章 数据库设计 作业 新⭐HBase作业 新 第一章…

金蝶新建生产领料单,单据编号不能自动填写

今天接到分厂电话&#xff0c;生产领料单新建后&#xff0c;单据编号栏为空。过去检查后&#xff0c;确实如此&#xff0c;一番百度后解决&#xff0c;记录如下&#xff1a; 进入K3后&#xff0c;点击系统设置---系统设置---仓储管理---单据类型 &#xff0c;双击打开&#xf…

SAP中客户来料加工流程评测

客户来料加工,即对于加工方来说,生产成品所需要的部分或全部原材料的来源并非自己采购,而是由客户提供。从业务的模式上看,对于加工方有以下几个特点: 1、对于加工方而言,客户提供物料无需做价值管理,只需做数量管理;从现实业务角度可以想象,物料的接收,消耗会增加和…

ERP实施-生产模块-无物料号订单

系统功能&#xff1a;事务代码&#xff1a;CO07-不参考物料代码创建生产订单。 适用场景&#xff1a; 1.返工业务-结算规则对应正常生产订单&#xff1b; 2.工装生产-结算规则对应财务内部订单号或者项目WBS,生产完工后由财务确认是否转固&#xff1b; 3.售后返修-结算到返修销…

Type-C扩展坞常用料号大全|音视频芯片|cc协议芯片|PD芯片|HUB芯片|网口芯片|音频芯片

最近一段时间因为重返职场&#xff0c;把市面上做Type-C 接口相关的常用料号做了整理。自己对CS型号的也更加了解&#xff0c;如何进行方案优化&#xff0c;降低BOM成本。慢慢整理&#xff0c;不断学习&#xff0c;持续更新记录&#xff0c;欢迎大家一起谈论学习。 音视频芯片…

Teamcenter8 更改料号所有者操作

为了取得对某对象的修改权&#xff0c;有时候要更改所有权。 1.选择要更改所有者的对象 2.点击菜单“编辑”->“更改所有权” 3.选择组织、用户 4.点击“确定”&#xff0c;“是” 更改所有权。

SAP 物料成本核算冻结:料号. 不能过账,是否取消?消息 CK167

问题点&#xff1a; CK11N估算单个产品成本时&#xff0c;弹窗提示其下层个别原料核算冻结。 消息号&#xff1a; CK 167 &#xff08;注&#xff1a;这个是点“否”进入核算屏幕-查看日志中的消息号&#xff0c;并不是弹窗的消息号&#xff0c;两个消息提示的是同一个问题&am…

SAP 无料号成本中心采购-物料组对应总帐科目

使用采购单采购费用和外协服务更便于控制,比如可以在SAP系统中设置采购申请和相关审批流程。 长话短说&#xff0c;直入整体&#xff0c;现在还是以费用采购单的使用步骤&#xff1a; &#xfeff;&#xfeff; (1).Tcode:OMSF定义物料组 (2).到配置路径IMG Path:物料管理-&g…

EBS INV:客户料号

Oracle EBS中&#xff0c;标准功能允许ERP物料、客户物料存在1对多和多对1的情况。 可以在系统中这样处理&#xff08;系统标准功能并没有&#xff0c;需要开发&#xff09;&#xff1a; A、 1对多时&#xff0c;录入ERP物料&#xff0c;客户物料置为空&#xff0c;并警告必须手…

抓取微信小程序公众号数据包

自己在工作中遇到过需要测试APP的项目&#xff0c;后来网上搜了一些教程&#xff0c;各种环境搭建最后还是很难绕过放代理机制&#xff0c;所以就把自己踩过坑的绕过给分享一期。 一&#xff0c;下载夜神模拟器&#xff0c;可以在官网上下载 夜神安卓模拟器-安卓模拟器电脑版下…

unicloud生成微信小程序分享码

一&#xff0c;方案 看了官方的文档&#xff0c;获取小程序码有三种&#xff0c;我采用的是第二种&#xff1a;生成数量不受限制的分享码。 对应的官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.…

微信小程序常用api使用

小程序提供了一个简单、高效的应用开发框架和丰富的组件及API&#xff0c;帮助开发者在微信中开发具有原生 APP 体验的服务。本文提及的案例为小程序搭建时常用种类&#xff0c;如需全面了解&#xff0c;可查阅官方文档&#xff08;官网->首页->文档&#xff09;。注意&a…

微信小程序分享功能异步请求

分享一个助力链接给朋友&#xff0c;但在点击分享按钮后需要向后台请求接口再来判断当前是否可分享&#xff0c;也就是说需要在分享按钮那里做一个异步请求&#xff0c;一开始怎么弄都是只要点击分享按钮就会弹出分享弹框&#xff0c;后面发现可以用Promise()进行截断 <but…

java 实现微信小程序接口

使用weixin-java-miniapp实现微信小程序登录接口&#xff0c;我们使用开源的包 maven 依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>3.9.0</version> </d…

微信小程序分享朋友圈API限制问题

在开发微信小程序过程中&#xff0c;需要实现将小程序分享到朋友圈&#xff0c;以扩大宣传范围&#xff0c;吸引流量。 实现也不难&#xff0c;满足【两个条件】即可&#xff1a; 首先&#xff0c;页面需设置允许“发送给朋友”。具体参考 Page.onShareAppMessage 接口文档 满…

微信小程序实现分享海报

实现前的注意事项&#xff1a; 1、使用的是微信小程序官方的canvas组件官方文档地址 2、在canvas中不能绘制网络图片&#xff0c;需要使用wx.getImageInfo({}),文档地址 注意最好在画布绘制之前对图片进行转化&#xff0c;我在绘制画布的过程中转化时获取到的地址一直是空的&am…

uniapp 微信小程序分享功能

微信小程序分享功能、传参、接收参数 1&#xff0c;分享功能 在页面上与methods同级写上onShareAppMessage()函数。 onShareAppMessage() {return{title: "xxx欢迎你",//分享标题path: "/pages/detail/detail",//页面 path &#xff0c;必须是以 / 开头的…