在项目开发的过程中,如果一个系统存在多种不同类型的单据,单号生成就比较难以处理,为此,创造出一个单号生成的工具类就很有必要。直接上代码:

实体类:(数据库字段同下)

public class SerialNumber {@TableId(type = IdType.AUTO)@Excel(name = "序号", cellType = Excel.ColumnType.NUMERIC)private Long id;@Excel(name = "单据类型")private Integer orderType;@Excel(name = "订单日期")private LocalDate orderDate;@Excel(name = "订单量")private Integer orderNum;}

Mybatis Mapper:就是简简单单的添加,还有查询当前不同种类单据的数量

<select id="selNum" resultType="java.lang.Integer">select max(order_num) from data_serial_number where order_type = #{orderType}and order_date = #{orderDate}
</select>
<insert id="insNum">insert into data_serial_number (order_type, order_date, order_num)values (#{orderType},#{orderDate},#{orderNum})
</insert>

Mapper:

public interface SerialNumberMapper extends BaseMapper<SerialNumber> {/*** 获取当前流水号* @param serialNumber* @return*/Integer selNum (@Param("orderType") Integer orderType, @Param("orderDate") LocalDate orderDate);/*** 保存时添加一条* @param serialNumber* @return*/Boolean insNum(@Param("serialNumber")SerialNumber serialNumber);}

接口类:

public interface ISerialNumberService extends IService<SerialNumber> {/*** 生成多种单号* @param* @return*/String OrderCode(Integer type);/*** 保存时添加一条* @param type* @return*/Boolean insNum(@Param("serialNumber")Integer type);}

实现接口:

public class SerialNumberServiceImpl extends ServiceImpl<SerialNumberMapper, SerialNumber> implements ISerialNumberService {/*** 生成多种单号单号** @param* @return*/@Overridepublic String OrderCode(Integer type) {SerialNumber serialNumber = SerialNumber.builder().build();String orderType=null;switch (type){case 1: orderType="RK";break;case 2:orderType="CK";break;case 3:orderType="TK";break;case 4:orderType="JC";break;case 5:orderType="GH";break;case 6:orderType="SL";break;case 7:orderType="XH";break;case 8:orderType="PD";break;}serialNumber.setOrderType(type);serialNumber.getOrderType();serialNumber.setOrderDate(LocalDate.now());Integer integer = this.baseMapper.selNum(type, LocalDate.now());if (integer == null){integer=0;}serialNumber.setOrderNum(integer+1);DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");String todayStr = dateTimeFormatter.format(serialNumber.getOrderDate());String serial_number = String.format("%03d", serialNumber.getOrderNum());return orderType+todayStr+serial_number;}/*** 保存时添加一条** @param type* @return*/@Overridepublic Boolean insNum(Integer type) {SerialNumber serialNumber= SerialNumber.builder().build();serialNumber.setOrderType(type);serialNumber.setOrderDate(LocalDate.now());Boolean isExist = true;Integer integer = this.baseMapper.selNum(type, LocalDate.now());if(integer == null){integer = 0;isExist = false;}serialNumber.setOrderNum(integer+1);//更新数据库里的流水号int flag = 0;if(isExist){QueryWrapper<SerialNumber> queryWrapper = new QueryWrapper<>();queryWrapper.eq("order_type",type);queryWrapper.eq("order_date",LocalDate.now());flag = this.baseMapper.update(serialNumber,queryWrapper);}else {flag = this.baseMapper.insert(serialNumber);}if (flag>0){return true;}return false;}}

Java实现一个单号生成工具类相关推荐

  1. Java:二维码生成工具类

    java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...

  2. JAVA 雪花算法 唯一ID生成工具类

    package com.gblfy;/*** @Author:JCccc* @Description:* @Date: created in 15:31 2019/6/12*/ public clas ...

  3. 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。

    查看本章节 查看作业目录 需求说明: 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62"开头,如图所示. 实现思路: (1)创建 J ...

  4. 银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

    编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以"62" ...

  5. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  6. mongodb java 单例_JAVA单例MongoDB工具类详解

    shasha 2018年09月07日 681 0 JAVA单例MongoDB工具类 JAVA驱动版本: org.mongodb mongo-java-driver 3.0.2 工具类代码如下: pac ...

  7. java 手机号脱敏,身份证号脱敏 工具类

    java 手机号脱敏,身份证号脱敏 工具类 import org.apache.commons.lang3.StringUtils;/*** * @title: 脱敏工具类* @author: wll ...

  8. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  9. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

最新文章

  1. 人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性
  2. Puppet exec资源介绍(二十六)
  3. Xamarin效果第十八篇之GIS中复合型Mark
  4. leetcode64. 最小路径和(dp)
  5. 408数据结构:1.顺序表的定义
  6. 机器学习入门笔记(二):线性模型
  7. Nginx篇--解读nginx配置
  8. Linux操作系统下6个应急处理小常识
  9. WSS3 Elevation of Privilege 替代 用户身份模拟Impersonate 进行权限提升
  10. windows bat 命令之%~dp0
  11. 算法与数据结构1800题 图
  12. 计算机网络释疑与解答第六版 pdf,计算机网络释疑与习题解答第5版.pdf
  13. 解决WebStorme点击谷歌浏览器图标无反应问题
  14. 计算机和小学科课题,《小学信息技术课堂有效教学的探索》课题研究方案
  15. 【多源融合】自适应卡尔曼滤波的多种形式:遗忘卡尔曼滤波、渐消记忆卡尔曼滤波和自适应卡尔曼滤波
  16. Visual Studio 11开发指南(5)Visual Studio 11 IDE增强
  17. HRBUST1313-火影忍者之~静音
  18. Promise基础知识
  19. 无法连接到mysql数据库_无法连接到数据库服务器(mysql workbench)
  20. 程序员简历优化指南-安晓辉-专题视频课程

热门文章

  1. catkin_make问题: The build space at ‘/home/lufeng/Documents/test/catkin_ws/build’ was previously built
  2. PLC数据采集与远程监控方案
  3. 英语日常口语对话(3)
  4. 我这两年提升技术的经历和感受(舒适区危机篇)
  5. 隐藏通知内容什么意思_隐藏通知内容
  6. 【原创】怎样关联多个 Excel 档工作表(Sheet)中的数据
  7. FastDFS为什么要用Nginx做代理
  8. rk3288之CPU定频实现(手动、内核)
  9. 【计算几何】atan2函数
  10. 字符串 Z 字形变换(Java)