这里提供一个根据日期+数据库自增实现的一个订单号生成策略,也可以使用UUID。
首先建立一个全局的数据表,这里只要一个自增的主键。
package xxx;
import lombok.Data;
import javax.persistence.*;
/**
* @author lqyang
* @Title: ${file_name}
* @date 2018/9/1115:08
*/
@Data
@Entity
@Table(name="erp_order_id_strategy")
public class OrderIDStrategy {
/**
* 订单生成ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Long orderId;
}
建立对应的Dao
package xxx;
import xxx.OrderIDStrategy;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import javax.persistence.Id;
/**
* @author lqyang
* @Title: ${file_name}
* @date 2018/9/1115:13
*/
@Repository
public interface OrderIDStrategyDao extends JpaRepository<OrderIDStrategy,Long>{
@Query(value = "select MAX(a.order_id) from erp_order_id_strategy as a",nativeQuery = true)
Long findById();
}
编写生成订单号工具类
private static String date ;
/**
* 生成订单编号
* @return
*/
public static synchronized String getOrderNo(Long orderNum) {
String str = new SimpleDateFormat("yyMMdd").format(new Date());
if(date==null||!date.equals(str)){
date = str;
}
long orderNo = Long.parseLong((date)) * 10000;
orderNo += orderNum;
return orderNo+"";
}
每次生成订单号时,只需每次执行insert操作
orderIDStrategyDao.save(orderIDStrategy);
orderInfo.setOrderId(StringUtil.getOrderNo(orderIDStrategyDao.findById()))
打完收工。