Commit daa2768a authored by xuwencheng's avatar xuwencheng

upgrade

parent eb4c9e5f
...@@ -16,6 +16,20 @@ pub mod tool; ...@@ -16,6 +16,20 @@ pub mod tool;
mod tests { mod tests {
use super::*; use super::*;
#[test]
fn id() {
let id = crate::tool::id::id();
let time = crate::tool::time::hour_millisecond(0).unwrap_or_default();
let gid = crate::tool::id::generate_id(time);
println!("1. {id}, {}", id as u64);
println!("2. {gid}, {}", gid as i64);
println!("3. {}", id - (gid as i64));
}
#[test] #[test]
fn publish() { fn publish() {
let hex = "00059403C201C2003596B26E6F746966792D6F726465722D7374617465B26E6F746966792D6F726465722D7374617465C003CF192EDC28C376A001CD0BCB00000397789CB5585B4F135110FE2B757D6BA8D9B3D776E38321F0C09B4F3E9998C6F6810790289A18420245B016B923120D212037092A8596965E2099F9637EDB4269975E76CBB64DBA6C7B76BE9933DF7C33870929161D8F4AD684F4FACDC8487434F64EB2A497EF6559F43FAB5C069E538632D56FFAED8B2CEE3E457FB47223576FD4A7F55FDEAC18AC5B31F0A872113C4739FE4ED794E624DE795EE41C9DF1027FE552DD423C35FA10182AD2115D7291CABC41593EF6D1347CDDE5046742BCCA2BB07E4879BA78907DD1687F86A780315BC379AC685ECDCB6DCC276987B2B44F059EA55F5468615CAD5C06431D5ECD7DA93EDBD221B901919738613BC4294A5389F72C4556B4906C861439202296AE5A9AF001862EE8F76DDCD6007E3015A19986A6A8AA6AEAF8DBF0239624972947E51A908E1D3722B22AEBBA88C84A44F7903DF75F36CB3336338F42DBB538C5DF2A1596E47950F68AE7A9DC994F4D4D22A28030C3AA6188B022EBAFE4EEEC842302CC3B81631B54E442D5AC6E04BBB3160C060DC5500228F779BA469CCB7CC4ABE4A2E49BC6889DA22BDEF6A3283C72E70B3410EA1870BCDA50DA6659897FB6B199E2324FD3759B15CB908312CF75267F1BE63598147C882D84C8231D7F6D0D8694156DA96FC0ED1C9ED074C713AD970AA76DD7563D16BDB794066C521EA00ED35645D553508602A7D1FBCABEE1BAFCC57DF66ECAA76921B823A670EE823F9973A1363D489CB0751374DEEA4DC67A2A2974CA25F48053B8BFE2941517FA22BA14B259DE43AB596883DAFA61E589594375D7EA40D9353AB0BB5C6BAAB6806E34A38581DD8C62BD95FD043A6089B31D76CDDD8E79434E81E46B3C03493AB199E239577A97B86B983C8BBC05DC25BBF5784435EFC5DBA3C4ACF30FCCA6DBB723BED7DDB99B5ADD13398596EE3C4DB422725B2A37CA6A6F877A0FE161122D82EA50540B7DE64FD0C5C8E7DEFA341D8350591CF70E71FC3BB530A962360C562755CC9C7E62DD166B9637C18F9C856C20BA655EA47F9591F69237C9EEF3EB28674C58FC99F321D51E743B3BD1142F41FB0117FEDFCF51CB832CBA83F38CEC83C932EF22E259F89BBB313B550FC39F90A16BD495E3BF004DA11FE24786CFD01576DA9C29751FC2E5393E877E6731B8EFD025CE972580A5706F4BC6396F388567B4F6AE587951B52FF549B1F887E1D7F1A1986449C28C084D560C4D35744DC587D0B060ECEDF0E8F8D0787CC45E23C238AD2A11D330144508D308ABDA649F34FE712C2E59AA2C2293FF01A734A5A500203041303034303634303030453144393434464330363631444237394533304636"; let hex = "00059403C201C2003596B26E6F746966792D6F726465722D7374617465B26E6F746966792D6F726465722D7374617465C003CF192EDC28C376A001CD0BCB00000397789CB5585B4F135110FE2B757D6BA8D9B3D776E38321F0C09B4F3E9998C6F6810790289A18420245B016B923120D212037092A8596965E2099F9637EDB4269975E76CBB64DBA6C7B76BE9933DF7C33870929161D8F4AD684F4FACDC8487434F64EB2A497EF6559F43FAB5C069E538632D56FFAED8B2CEE3E457FB47223576FD4A7F55FDEAC18AC5B31F0A872113C4739FE4ED794E624DE795EE41C9DF1027FE552DD423C35FA10182AD2115D7291CABC41593EF6D1347CDDE5046742BCCA2BB07E4879BA78907DD1687F86A780315BC379AC685ECDCB6DCC276987B2B44F059EA55F5468615CAD5C06431D5ECD7DA93EDBD221B901919738613BC4294A5389F72C4556B4906C861439202296AE5A9AF001862EE8F76DDCD6007E3015A19986A6A8AA6AEAF8DBF0239624972947E51A908E1D3722B22AEBBA88C84A44F7903DF75F36CB3336338F42DBB538C5DF2A1596E47950F68AE7A9DC994F4D4D22A28030C3AA6188B022EBAFE4EEEC842302CC3B81631B54E442D5AC6E04BBB3160C060DC5500228F779BA469CCB7CC4ABE4A2E49BC6889DA22BDEF6A3283C72E70B3410EA1870BCDA50DA6659897FB6B199E2324FD3759B15CB908312CF75267F1BE63598147C882D84C8231D7F6D0D8694156DA96FC0ED1C9ED074C713AD970AA76DD7563D16BDB794066C521EA00ED35645D553508602A7D1FBCABEE1BAFCC57DF66ECAA76921B823A670EE823F9973A1363D489CB0751374DEEA4DC67A2A2974CA25F48053B8BFE2941517FA22BA14B259DE43AB596883DAFA61E589594375D7EA40D9353AB0BB5C6BAAB6806E34A38581DD8C62BD95FD043A6089B31D76CDDD8E79434E81E46B3C03493AB199E239577A97B86B983C8BBC05DC25BBF5784435EFC5DBA3C4ACF30FCCA6DBB723BED7DDB99B5ADD13398596EE3C4DB422725B2A37CA6A6F877A0FE161122D82EA50540B7DE64FD0C5C8E7DEFA341D8350591CF70E71FC3BB530A962360C562755CC9C7E62DD166B9637C18F9C856C20BA655EA47F9591F69237C9EEF3EB28674C58FC99F321D51E743B3BD1142F41FB0117FEDFCF51CB832CBA83F38CEC83C932EF22E259F89BBB313B550FC39F90A16BD495E3BF004DA11FE24786CFD01576DA9C29751FC2E5393E877E6731B8EFD025CE972580A5706F4BC6396F388567B4F6AE587951B52FF549B1F887E1D7F1A1986449C28C084D560C4D35744DC587D0B060ECEDF0E8F8D0787CC45E23C238AD2A11D330144508D308ABDA649F34FE712C2E59AA2C2293FF01A734A5A500203041303034303634303030453144393434464330363631444237394533304636";
......
use std::collections::hash_map::DefaultHasher; use std::collections::hash_map::DefaultHasher;
use std::time::UNIX_EPOCH;
use std::{ use std::{
any::TypeId, any::TypeId,
hash::{Hash, Hasher}, hash::{Hash, Hasher},
...@@ -9,20 +10,28 @@ use once_cell::sync::Lazy; ...@@ -9,20 +10,28 @@ use once_cell::sync::Lazy;
use snowflake::SnowflakeIdGenerator; use snowflake::SnowflakeIdGenerator;
use uuid::Uuid; use uuid::Uuid;
// 和云端ShardingSphere雪花算法EPOCH保持一致,2016-11-01 00:00:00 UTC
const TWEPOCH: u64 = 1477929600000;
// 使用 Lazy 来惰性初始化 SnowflakeIdGenerator
static mut GENERATOR: Lazy<SnowflakeIdGenerator> = Lazy::new(|| {
let epoch = UNIX_EPOCH + std::time::Duration::from_secs(TWEPOCH / 1000);
SnowflakeIdGenerator::with_epoch(1, 1, epoch)
});
pub fn uuid() -> String { pub fn uuid() -> String {
Uuid::new_v4().as_simple().to_string() Uuid::new_v4().as_simple().to_string()
} }
pub fn id() -> i64 { pub fn id() -> i64 {
static mut GENERATOR: Lazy<SnowflakeIdGenerator> = // 调用生成器生成 ID
Lazy::new(|| SnowflakeIdGenerator::new(1, 1));
unsafe { GENERATOR.generate() } unsafe { GENERATOR.generate() }
} }
// 生成指定日期的雪花ID函数 // 生成指定日期的雪花ID函数
pub fn generate_id(time: u64) -> u64 { pub fn generate_id(time: u64) -> u64 {
// 默认: 2024-06-21 18:25:45 // 默认: 2024-06-21 18:25:45
let last_time_millis = time; let last_time_millis = time - TWEPOCH;
let timestamp_part = last_time_millis << 22; let timestamp_part = last_time_millis << 22;
let node_id_part = (1 as u64) << 17; let node_id_part = (1 as u64) << 17;
let worker_id_part = (1 as u64) << 12; let worker_id_part = (1 as u64) << 12;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment