自动生成固定规则的订单号(前缀+采购日期+6位流水号)

2023-10-10 12:20

本文主要是介绍自动生成固定规则的订单号(前缀+采购日期+6位流水号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

任务:进货信息增加一个属性,采购单据号,要求按采购日期+6位流水号,自动生成该单据号,格式:CGD-yyyyMMdd-XXXXXX。

以下内容,仅为上述需求进行的操作,你们可以根据自己的需求进行生成订单规则的修改。

数据库操作

首先当然是在自己的数据库进行修改,因为要求我们使用生成固定规则订单号,且添加在原有数据中。所以需要自己的原有表中添加一个【订单号】的字段。

考虑到该字段内容形成,我们可以单独创建一个表purchase_serialnum,专门用来生成和存储固定规则的订单号。(记得写一个测试字段,如下图的第一个内容)

字段内容根据自己的需要创建(越简单越好),但是如上图的前三个字段必须要有,方便接下来使用。

两个表中我定义的是主键id自增,方便新增订单时生成订单号的位置是相同的。

如果你在测试的时候两个不同表中产生了主键id自增的序号不一致的问题,可以通过SQL语句来改变。(如NAvicat中运行一下)

ALTER TABLE tableName AUTO_INCREMENT 3;“tableName”指的是表名,“3”指的是你需要改变自增id成哪个数字开始

然后新的表当然就要创建对应的实体类、xml文件,dao层,service层等等,以下内容仅展示部分。

PurchaseSerialnum

@Data
//    getter/setter用@Data替代,不知道怎么使用的搜索lombok查找依赖和用法
public class PurchaseSerialnum implements Serializable {private Integer serialnumberid;private String serialnumber;private Integer serialcount;private Date cereattime;private String prefix;private static final long serialVersionUID = 1L;
}

PurchaseSerialnumMapper.xml

  <select id="selectMax" resultMap="BaseResultMap">SELECT*FROMpurchase_serialnumWHEREserialNumberId = (SELECTMax( serialNumberId )FROMpurchase_serialnum)</select>

PurchaseSerialnumMapper

PurchaseSerialnum selectMax();

PurchaseSerialnumService

    PurchaseSerialnum selectMax();

PurchaseSerialnumService

    @Autowiredprivate PurchaseSerialnumMapper purchaseSerialnumMapper;@Overridepublic PurchaseSerialnum selectMax(){return purchaseSerialnumMapper.selectMax();}

接下来我们返回到之前Purchase表的Controller中,进行内容修改。

@RequestMapping("/purchase")
public class PurchaseController {@Autowiredprivate PurchaseService purchaseService;@Autowiredprivate PurchaseSerialnumService purchaseSerialnumService;public PurchaseSerialnum getSerialnum(){//定义需要返回的流水号String serialnumber = null;int serialcount;//查询当前最大id值,以便知道当前日期是否有创建订单号//1.通过tableName表名查询唯一对象PurchaseSerialnum serialnum =  purchaseSerialnumService.selectMax();//2. 获取对象的前缀String prefix = serialnum.getPrefix();//3. 获取对象的默认单号String serial = serialnum.getSerialnumber();//4. 通过当前系统时间和默认单号时间对比//4.1 获取当前时间 格式:yyyyMMddSimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");String nowDate = sdf.format(new Date());//4.2 获取单号时间(4,12)表示从第4个开始到第11位,也就是获取日期,根据自己需要修改位置String oldDate = serial.substring(4, 12);//4.3 日期相等,说明今天已经生成订单号if(nowDate.equals(oldDate)){//拿到自增id,拼接生成单号serialcount = serialnum.getSerialcount();serialcount=serialcount+1;//返回结果,前缀+时间日期+6位流水}else{//4.4日期不相等serialcount=1;}serialnumber=prefix+ "-" + new SimpleDateFormat("yyyyMMdd").format(new Date())+ "-" + String.format("%06d",serialcount);PurchaseSerialnum purchaseSerialnum = new PurchaseSerialnum();purchaseSerialnum.setPrefix(prefix);purchaseSerialnum.setSerialnumber(serialnumber);purchaseSerialnum.setSerialcount(serialcount);return purchaseSerialnum;}//新增-get@GetMapping("/add")public String add(Model model) {Purchase entity = new Purchase();model.addAttribute("item",entity);return "/purchase/add";}//新增-post@PostMapping("/add")@ResponseBodypublic String add(Purchase entity){try {//这里是为了获取上面getSerialnum()方法的内容PurchaseSerialnum purchaseSerialnum = getSerialnum();//将自动生成的订单号传到Purchase表的serialNum列中entity.setSerial_id(purchaseSerialnum.getSerialnumber());//新增订单表的信息purchaseSerialnumService.insert(purchaseSerialnum);//新增进货信息purchaseService.insert(entity);return "ok";}catch (Exception e) {return e.getMessage();}}

运行结果

有任何问题欢迎在评论区提问,会以最快的速度回复大家😀😀😀

这篇关于自动生成固定规则的订单号(前缀+采购日期+6位流水号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180395

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

springboot日期格式化全局LocalDateTime详解

《springboot日期格式化全局LocalDateTime详解》文章主要分析了SpringBoot中ObjectMapper对象的序列化和反序列化过程,并具体探讨了日期格式化问题,通过分析Spri... 目录分析ObjectMapper与jsonSerializer结论自定义日期格式(全局)扩展利用配置

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti