-
流水号实现
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();
}
网友评论