美文网首页
JAVA-流水号、日期操作

JAVA-流水号、日期操作

作者: 矢量演说 | 来源:发表于2020-05-15 19:00 被阅读0次
  • 流水号实现

AtomicInteger深入理解
java流水号生成的几种方式
最后发现简单的方法都多少有点纰漏,例如第二个里的方法,如果删除了当天创建若干的数据,就有可能出现编号重复的情况。
第一个链接的比较靠谱,但是非常复杂。

  • 使用Calendar实现设置日期以及加减日期

Java 关于日期加一天(日期往后多一天)
下面的是我自己写的,结合了日期、流水号以及复杂查询,虽然实现了但是流水号有漏洞……

    @Override
    public Results<Customer> save(Customer customer) {
        System.out.println(customer.getEmployee());
        //获取创建的员工作为负责的销售员(这步放在controller中做)
        // 客户固定前缀+YYYYMMDD+四位流水号(从数据库中查询当天已生成的记录数量,结果值+1)
        String province = provinceRepository.findById(customer.getProvince().getId()).get().getNo();
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
        String today = sf.format(date);
        Specification<Customer> spec = new Specification<Customer>() {
            @Override
            public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                // 获取比较的属性
                Path<Object> createTime = root.get("createTime");
                // 构造查询条件
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                calendar.set(Calendar.MINUTE, 0);
                calendar.set(Calendar.SECOND, 0);
                calendar.set(Calendar.MILLISECOND, 0);
                Date today = calendar.getTime();
                calendar.add(calendar.DATE,1);
                Date tomo = calendar.getTime();
                Predicate between = criteriaBuilder.between(createTime.as(Date.class), today, tomo);
                return between;
            }
        };
        Integer count = customerRepository.count(spec) + 1;
        String no = province+today+String.format("%04d", count);
        customer.setNo(no);
        customerRepository.save(customer);
        return Results.success();
    }

相关文章

  • JAVA-流水号、日期操作

    流水号实现 AtomicInteger深入理解java流水号生成的几种方式最后发现简单的方法都多少有点纰漏,例如第...

  • go 实现mysql记录流水号生成

    go 实现mysql记录流水号生成 业务 订单编号的生成:PO+日期+当日流水号;如PO2020120301 实现...

  • 实现数据库表中的流水号

    实现的流水号样式(字符+日期+流水号)如下 一般自己在写小demo的时候,都是使用的纯数字自增(1,2,3……)这...

  • 并发模拟研究

    模拟一个生成流水号的操作 准备工作 z_serial 表 num 字段初始值为 0 ,记录当前流水号。 z_dat...

  • dubbo微服务之间流水号的隐式传递

    做开发的人都知道流水号这个概念,有业务流水号,交易流水号,请求流水号等等,各种流水号。 无论是啥名字的流水号,目的...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • 格式化日期流水号

    Date now=new Date(); SimpleDateFormat dateFormat =new...

  • Java-浅析Object类

    Java-浅析Object类 ++2016.7.19++byside @Java-浅析Object类 ======...

  • JAVA-并发编程(三)

    JAVA-并发编程(三) sschrodinger 2019/5/16 线程 线程是现代操作系统的最小调度单位,也...

  • 日期操作

    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2018年12月31日23时59分59秒,则...

网友评论

      本文标题:JAVA-流水号、日期操作

      本文链接:https://www.haomeiwen.com/subject/azqhohtx.html