這里提供一個根據(jù)日期+數(shù)據(jù)庫自增實現(xiàn)的一個訂單號生成策略,也可以使用UUID虏肾。
首先建立一個全局的數(shù)據(jù)表,這里只要一個自增的主鍵。
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+"";
}
每次生成訂單號時,只需每次執(zhí)行insert操作
orderIDStrategyDao.save(orderIDStrategy);
orderInfo.setOrderId(StringUtil.getOrderNo(orderIDStrategyDao.findById()))
打完收工纤虽。