From 8639f8787dd1e80d222204bd3b85851ce4a9bc5c Mon Sep 17 00:00:00 2001 From: jie Date: Sun, 7 Jul 2024 01:52:59 +0800 Subject: [PATCH] =?UTF-8?q?sqliteService=E5=AE=9E=E7=8E=B0=EF=BC=8C=20?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E6=9C=8D=E5=8A=A1=E6=96=87=E4=BB=B6=E5=8D=A0?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.lock | 247 +++++++++++---------------------- Cargo.toml | 6 +- lib/sqlite3.lib | Bin 0 -> 62124 bytes src/models/mod.rs | 1 + src/models/write_result.rs | 6 + src/services/excel_service.rs | 0 src/services/mod.rs | 6 +- src/services/serial_service.rs | 3 +- src/services/sqlite_service.rs | 56 ++++++++ src/services/ui_service.rs | 0 src/services/work_service.rs | 7 + 11 files changed, 161 insertions(+), 171 deletions(-) create mode 100644 lib/sqlite3.lib create mode 100644 src/models/write_result.rs create mode 100644 src/services/excel_service.rs create mode 100644 src/services/sqlite_service.rs create mode 100644 src/services/ui_service.rs create mode 100644 src/services/work_service.rs diff --git a/Cargo.lock b/Cargo.lock index ed8cc2e..f6b558f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -125,50 +136,6 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "darling" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - [[package]] name = "derive_arbitrary" version = "1.3.2" @@ -180,39 +147,6 @@ dependencies = [ "syn", ] -[[package]] -name = "diesel" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d6dcd069e7b5fe49a302411f759d4cf1cf2c27fe798ef46fb8baefc053dd2b" -dependencies = [ - "diesel_derives", - "libsqlite3-sys", - "time", -] - -[[package]] -name = "diesel_derives" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59de76a222c2b8059f789cbe07afbfd8deb8c31dd0bc2a21f85e256c1def8259" -dependencies = [ - "diesel_table_macro_syntax", - "dsl_auto_type", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "diesel_table_macro_syntax" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" -dependencies = [ - "syn", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -224,26 +158,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dsl_auto_type" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0892a17df262a24294c382f0d5997571006e7a4348b4327557c4ff1cd4a8bccc" -dependencies = [ - "darling", - "either", - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - [[package]] name = "encoding_rs" version = "0.8.34" @@ -259,6 +173,18 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "flate2" version = "1.0.30" @@ -293,10 +219,24 @@ dependencies = [ ] [[package]] -name = "fnv" -version = "1.0.7" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -305,16 +245,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "heck" -version = "0.5.0" +name = "hashlink" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +dependencies = [ + "hashbrown 0.11.2", +] [[package]] name = "indexmap" @@ -323,7 +260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -336,12 +273,6 @@ dependencies = [ "mach2", ] -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - [[package]] name = "libc" version = "0.2.155" @@ -350,10 +281,11 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libsqlite3-sys" -version = "0.28.0" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" +checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" dependencies = [ + "cc", "pkg-config", "vcpkg", ] @@ -419,12 +351,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num_enum" version = "0.7.2" @@ -464,12 +390,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -536,6 +456,21 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +[[package]] +name = "rusqlite" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4b1eaf239b47034fb450ee9cdedd7d0226571689d8823030c4b6c2cb407152" +dependencies = [ + "bitflags 1.3.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "memchr", + "smallvec", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -582,10 +517,10 @@ dependencies = [ ] [[package]] -name = "strsim" -version = "0.11.1" +name = "smallvec" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" @@ -618,37 +553,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "toml_datetime" version = "0.6.6" @@ -693,6 +597,18 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "winapi" version = "0.3.9" @@ -730,8 +646,9 @@ version = "0.1.0" dependencies = [ "anyhow", "calamine", - "diesel", "fltk", + "libsqlite3-sys", + "rusqlite", "serialport", ] diff --git a/Cargo.toml b/Cargo.toml index 047e3ec..e862984 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,6 @@ edition = "2021" anyhow="^1.0.86" fltk = { version = "^1.4", features = ["fltk-bundled"] } calamine="0.25.0" -diesel = { version = "2.2.1", features = ["sqlite"] } -#serial="0.4" -serialport="4.4.0" \ No newline at end of file +serialport="4.4.0" +rusqlite="0.25.4" +libsqlite3-sys = { version = "0.22.2", features = ["bundled"] } \ No newline at end of file diff --git a/lib/sqlite3.lib b/lib/sqlite3.lib new file mode 100644 index 0000000000000000000000000000000000000000..9e20e15e21ec053fcf8eb18f881b686f94e552f9 GIT binary patch literal 62124 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 literal 0 HcmV?d00001 diff --git a/src/models/mod.rs b/src/models/mod.rs index e69de29..3b9172e 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -0,0 +1 @@ +pub(crate) mod write_result; \ No newline at end of file diff --git a/src/models/write_result.rs b/src/models/write_result.rs new file mode 100644 index 0000000..83b14c4 --- /dev/null +++ b/src/models/write_result.rs @@ -0,0 +1,6 @@ +pub(crate) struct WriteResult{ + pub(crate) id: i32, + pub(crate) imei: String, + pub(crate) sn: String, + pub(crate) write_date: String, +} \ No newline at end of file diff --git a/src/services/excel_service.rs b/src/services/excel_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/services/mod.rs b/src/services/mod.rs index dea22fa..64f4677 100644 --- a/src/services/mod.rs +++ b/src/services/mod.rs @@ -1 +1,5 @@ -mod serial_service; \ No newline at end of file +mod serial_service; +mod sqlite_service; +mod work_service; +mod excel_service; +mod ui_service; \ No newline at end of file diff --git a/src/services/serial_service.rs b/src/services/serial_service.rs index 20604ac..affb9be 100644 --- a/src/services/serial_service.rs +++ b/src/services/serial_service.rs @@ -1,4 +1,3 @@ -use std::fmt::format; use anyhow::Result; use serialport::*; use std::io::prelude::*; @@ -44,7 +43,7 @@ impl SerialService { pub fn send_command_with_target AsRef>(&mut self, command: T, timeout: Option, target: T) -> Result { let target_str = target.as_ref(); - _ = return match self.seand_command(command, timeout) { + _ = return match self.send_command(command, timeout) { Ok(resp) => { Ok(resp.contains(target_str)) }, Err(err) => Err(err) }; diff --git a/src/services/sqlite_service.rs b/src/services/sqlite_service.rs new file mode 100644 index 0000000..841b992 --- /dev/null +++ b/src/services/sqlite_service.rs @@ -0,0 +1,56 @@ +use anyhow::Result; +use crate::models::write_result::WriteResult; +use rusqlite::{Connection}; + +pub(crate) struct SqliteService { + conn: Connection, +} +impl Default for SqliteService { + fn default() -> Self { + //TODO: fix cant use path to create service + return match Self::new(".data.db".to_string()){ + Ok(service) => service, + Err(err) => panic!("{}", err.to_string()) + } +} +} + +impl SqliteService { + pub fn new(conn_str: String) -> Result { + let conn = Connection::open(conn_str)?; + Ok(Self { conn }) + } + + pub fn create_table(&self) -> Result<()> { + self.conn.execute( + "CREATE TABLE IF NOT EXISTS write_results ( + id INTEGER PRIMARY KEY, + imei TEXT NOT NULL, + sn TEXT NOT NULL, + write_date TEXT NOT NULL + )", + [], + )?; + Ok(()) + } + + pub fn insert(&self, write_result: WriteResult) -> Result<()> { + self.conn.execute( + "INSERT INTO write_results (imei, sn, write_date) VALUES (?1, ?2, ?3)", + &[&write_result.imei, &write_result.sn, &write_result.write_date], + )?; + Ok(()) + } + + pub fn check_sn(&self, sn: &str) -> Result { + let mut stmt = self.conn.prepare("SELECT sn FROM write_results WHERE sn = ?1")?; + let mut rows = stmt.query(&[&sn])?; + Ok(rows.next()?.is_some()) + } +} + + +#[test] +fn create_sql_service_test() { + let service = SqliteService::default(); +} diff --git a/src/services/ui_service.rs b/src/services/ui_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/services/work_service.rs b/src/services/work_service.rs new file mode 100644 index 0000000..2ea1a88 --- /dev/null +++ b/src/services/work_service.rs @@ -0,0 +1,7 @@ +use crate::services::{serial_service::SerialService, sqlite_service::SqliteService}; + + +pub struct WorkService { + serial_service: SerialService, + sqlite_service: SqliteService, +} \ No newline at end of file