diff --git a/.data.db b/.data.db new file mode 100644 index 0000000..e69de29 diff --git a/Cargo.lock b/Cargo.lock index f6b558f..bbe8154 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,7 +15,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom", - "once_cell", + "once_cell 1.19.0", "version_check", ] @@ -28,6 +28,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.86" @@ -43,6 +58,21 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.3.0", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + [[package]] name = "bitflags" version = "1.3.2" @@ -55,6 +85,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "byteorder" version = "1.5.0" @@ -88,6 +124,29 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "cmake" version = "0.1.50" @@ -204,7 +263,7 @@ dependencies = [ "bitflags 2.6.0", "crossbeam-channel", "fltk-sys", - "once_cell", + "once_cell 1.19.0", "paste", "ttf-parser", ] @@ -218,6 +277,12 @@ dependencies = [ "cmake", ] +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "getrandom" version = "0.2.15" @@ -253,6 +318,29 @@ dependencies = [ "hashbrown 0.11.2", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "indexmap" version = "2.2.6" @@ -273,6 +361,21 @@ dependencies = [ "mach2", ] +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.155" @@ -310,6 +413,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "lock_api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" +dependencies = [ + "scopeguard 0.3.3", +] + [[package]] name = "log" version = "0.4.22" @@ -325,6 +437,12 @@ dependencies = [ "libc", ] +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + [[package]] name = "memchr" version = "2.7.4" @@ -351,6 +469,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg 1.3.0", +] + [[package]] name = "num_enum" version = "0.7.2" @@ -372,12 +499,44 @@ dependencies = [ "syn", ] +[[package]] +name = "once_cell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37" +dependencies = [ + "parking_lot", +] + [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "parking_lot" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +dependencies = [ + "libc", + "rand", + "rustc_version", + "smallvec 0.6.14", + "winapi", +] + [[package]] name = "paste" version = "1.0.15" @@ -427,6 +586,121 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.8", + "libc", + "rand_chacha", + "rand_core 0.4.2", + "rand_hc", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "regex" version = "1.10.5" @@ -468,15 +742,45 @@ dependencies = [ "hashlink", "libsqlite3-sys", "memchr", - "smallvec", + "smallvec 1.13.2", ] +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "scopeguard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "serde" version = "1.0.203" @@ -511,11 +815,20 @@ dependencies = [ "mach2", "nix", "regex", - "scopeguard", + "scopeguard 1.2.0", "unescaper", "winapi", ] +[[package]] +name = "smallvec" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" +dependencies = [ + "maybe-uninit", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -609,6 +922,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell 1.19.0", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + [[package]] name = "winapi" version = "0.3.9" @@ -631,6 +998,79 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winnow" version = "0.5.40" @@ -646,8 +1086,12 @@ version = "0.1.0" dependencies = [ "anyhow", "calamine", + "chrono", "fltk", + "lazy_static", "libsqlite3-sys", + "log", + "once_cell 0.1.8", "rusqlite", "serialport", ] diff --git a/Cargo.toml b/Cargo.toml index e862984..2431d7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,4 +11,8 @@ fltk = { version = "^1.4", features = ["fltk-bundled"] } calamine="0.25.0" serialport="4.4.0" rusqlite="0.25.4" -libsqlite3-sys = { version = "0.22.2", features = ["bundled"] } \ No newline at end of file +libsqlite3-sys = { version = "0.22.2", features = ["bundled"] } +chrono="0.4.38" +log="0.4.22" +once_cell="0.1.8" +lazy_static="1.5.0" \ No newline at end of file diff --git a/src/models/mod.rs b/src/models/mod.rs index 3b9172e..482ae6f 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1 +1 @@ -pub(crate) mod write_result; \ No newline at end of file +pub(crate) mod work_model; \ No newline at end of file diff --git a/src/models/work_model.rs b/src/models/work_model.rs new file mode 100644 index 0000000..f6198b8 --- /dev/null +++ b/src/models/work_model.rs @@ -0,0 +1,17 @@ + +#[derive(Debug)] +pub struct WorkModel{ + pub imei: String, + pub sn: String, + pub line_number: String, +} + +impl Default for WorkModel{ + fn default() -> Self{ + WorkModel{ + imei: "".to_string(), + sn: "".to_string(), + line_number: "".to_string(), + } + } +} \ No newline at end of file diff --git a/src/models/write_result.rs b/src/models/write_result.rs deleted file mode 100644 index 83b14c4..0000000 --- a/src/models/write_result.rs +++ /dev/null @@ -1,6 +0,0 @@ -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 index e69de29..8de00a0 100644 --- a/src/services/excel_service.rs +++ b/src/services/excel_service.rs @@ -0,0 +1,78 @@ +use std::fs::File; +use std::io::BufReader; +use calamine::{Reader, open_workbook, Xlsx, Data, DataType}; +use anyhow::Result; +use crate::models::work_model::WorkModel; + +pub(crate) struct ExcelService { + current_line: usize, + work_book: Xlsx>, + sheet: calamine::Range, +} + +impl ExcelService { + pub fn new(file_path: &str) -> Result { + let mut work_book: Xlsx<_> = match open_workbook(file_path) { + Ok(work_book) => work_book, + Err(err) => return Err(err.to_string()) + }; + let sheet = match work_book.worksheet_range("Sheet1") { + Ok(sheet) => sheet, + Err(err) => return Err(err.to_string()) + }; + let mut service = ExcelService { + current_line: 0, + work_book, + sheet, + }; + service.current_line = service.find_first_useful_line(); + Ok(service) + } + + pub fn find_first_useful_line(&mut self) -> usize { + //find fist useful line, not contains empty cell and table head + let mut current_line = 0; + for row in self.sheet.rows() { + current_line += 1; + let mut is_useful = false; + for cell in row { + if cell.is_empty() { + continue; + } + is_useful = true; + break; + } + if is_useful { + break; + } + } + current_line + } + + pub fn get_next_work_model(&mut self) -> Result { + let mut work_model = WorkModel::default(); + if let Some(imei) = self.sheet.get((self.current_line, 0)) { + if imei.is_empty() { + return Err("No more data".to_string()); + } + work_model.imei = imei.to_string(); + } + if let Some(sn) = self.sheet.get((self.current_line, 1)){ + work_model.sn = sn.to_string(); + } + if let Some(line_number) = self.sheet.get((self.current_line, 2)){ + work_model.line_number = line_number.to_string(); + } + self.current_line += 1; + Ok(work_model) + } +} + +#[test] +fn open_excel_test() { + let mut service = ExcelService::new("test_excel.xlsx").unwrap(); + let model = service.get_next_work_model().unwrap(); + let model2 = service.get_next_work_model().unwrap(); + println!("{:?}", model); + println!("{:?}", model2); +} \ No newline at end of file diff --git a/src/services/log_service.rs b/src/services/log_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/services/mod.rs b/src/services/mod.rs index 64f4677..587ae72 100644 --- a/src/services/mod.rs +++ b/src/services/mod.rs @@ -1,5 +1,6 @@ mod serial_service; mod sqlite_service; -mod work_service; mod excel_service; -mod ui_service; \ No newline at end of file +mod ui_service; +mod work_service; +mod log_service; \ No newline at end of file diff --git a/src/services/sqlite_service.rs b/src/services/sqlite_service.rs index 841b992..734f800 100644 --- a/src/services/sqlite_service.rs +++ b/src/services/sqlite_service.rs @@ -1,6 +1,7 @@ use anyhow::Result; -use crate::models::write_result::WriteResult; +use crate::models::work_model::*; use rusqlite::{Connection}; +use chrono::Local; pub(crate) struct SqliteService { conn: Connection, @@ -8,12 +9,12 @@ pub(crate) struct SqliteService { 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()) + 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 { @@ -25,6 +26,7 @@ impl SqliteService { self.conn.execute( "CREATE TABLE IF NOT EXISTS write_results ( id INTEGER PRIMARY KEY, + line_number INTEGER NOT NULL, imei TEXT NOT NULL, sn TEXT NOT NULL, write_date TEXT NOT NULL @@ -34,11 +36,12 @@ impl SqliteService { Ok(()) } - pub fn insert(&self, write_result: WriteResult) -> Result<()> { + pub fn insert(&self, work_model: WorkModel) -> Result<()> { + //TODO: How to insert line_number with i32? 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], - )?; + "INSERT INTO write_results (imei, line_number, sn, write_date) VALUES (?1, ?2, ?3, ?4)", + &[&work_model.imei, &work_model.line_number, &work_model.sn, &Local::now().format("%Y-%m-%d %H:%M:%S").to_string()], + )?; Ok(()) } @@ -47,6 +50,11 @@ impl SqliteService { let mut rows = stmt.query(&[&sn])?; Ok(rows.next()?.is_some()) } + pub fn check_imei(&self, imei: &str) -> Result { + let mut stmt = self.conn.prepare("SELECT sn FROM write_results WHERE sn = ?1")?; + let mut rows = stmt.query(&[&imei])?; + Ok(rows.next()?.is_some()) + } } diff --git a/src/services/work_service.rs b/src/services/work_service.rs index 2ea1a88..afdf6c0 100644 --- a/src/services/work_service.rs +++ b/src/services/work_service.rs @@ -1,7 +1,18 @@ -use crate::services::{serial_service::SerialService, sqlite_service::SqliteService}; +use crate::services::{serial_service::SerialService, sqlite_service::SqliteService, excel_service::ExcelService}; pub struct WorkService { serial_service: SerialService, sqlite_service: SqliteService, + excel_service: ExcelService, +} + +impl Default for WorkService { + fn default() -> Self { + WorkService { + serial_service: *SerialService::new("COM3").unwrap(), + sqlite_service: SqliteService::default(), + excel_service: ExcelService::new("a").unwrap() + } + } } \ No newline at end of file diff --git a/test_excel.xlsx b/test_excel.xlsx new file mode 100644 index 0000000..7aee25a Binary files /dev/null and b/test_excel.xlsx differ