diff --git a/IMEI_SN_INDEX.xlsx b/IMEI_SN_INDEX.xlsx new file mode 100644 index 0000000..feb1ed8 Binary files /dev/null and b/IMEI_SN_INDEX.xlsx differ diff --git a/src/services/config_service.rs b/src/services/config_service.rs index 1d647d4..0ac9747 100644 --- a/src/services/config_service.rs +++ b/src/services/config_service.rs @@ -1,13 +1,19 @@ +use std::fs; use anyhow::Result; use crate::models::config_model::ConfigModel; pub(crate) struct ConfigService; impl ConfigService { - pub fn save_config(model: ConfigModel) -> Result<()> { - todo!() + pub fn save_config(model: ConfigModel) ->Result<()> { + let json = serde_json::to_string(&model)?; + fs::write("config.json", json)?; + Ok(()) } + pub fn load_config() -> Result { - todo!() + let json = fs::read_to_string("config.json")?; + let model: ConfigModel = serde_json::from_str(&json)?; + Ok(model) } } \ No newline at end of file diff --git a/src/services/ui_service.rs b/src/services/ui_service.rs index 91e87fa..752c49b 100644 --- a/src/services/ui_service.rs +++ b/src/services/ui_service.rs @@ -1,4 +1,5 @@ use std::cell::RefCell; +use std::process; use std::rc::Rc; use std::sync::{Arc, Mutex}; use fltk::prelude::{DisplayExt, InputExt, WidgetBase, WidgetExt}; @@ -17,8 +18,36 @@ pub(crate) struct UiService { impl UiService { pub(crate) fn new() -> Self { + // Create the Rc> instances let ui = Rc::new(RefCell::new(main_ui::UserInterface::make_window())); - UiService { ui, work_service: Rc::new(RefCell::new(WorkService::new())), current_com: "".to_string() } + let work_service_rc = Rc::new(RefCell::new(WorkService::new())); + + // Clone the Rc> to avoid moving them + let work_service_clone = Rc::clone(&work_service_rc); + let current_com; + let should_current_line; + + { + let mut work_service = work_service_clone.borrow_mut(); + current_com = work_service.config_model.last_com.clone(); + should_current_line = work_service.config_model.current_line; + } + + if work_service_rc.borrow().config_model.excel_path != "" { + ui.borrow_mut().excel_file_textbox.set_value(&work_service_rc.borrow().config_model.excel_path); + ui.borrow_mut().current_line_textbox.set_value(&work_service_rc.borrow().config_model.current_line.to_string()); + ui.borrow_mut().com_textbox.set_value(&*current_com.clone()); + + work_service_rc.borrow_mut().excel_service.as_mut().unwrap().set_current_line(should_current_line).unwrap(); + } + + let ui_service = UiService { + ui, + work_service: work_service_rc, + current_com + }; + + ui_service } pub(crate) fn init_components(&mut self) { @@ -26,14 +55,17 @@ impl UiService { self.init_start_btn(); self.init_set_line_btn(); self.init_log(); + self.init_exit_callback() } fn init_exit_callback(&mut self){ let ui_rc = Rc::clone(&self.ui); + let ui_rc_clone = Rc::clone(&ui_rc); let work_service_rc = Rc::clone(&self.work_service); ui_rc.borrow_mut().main_window.set_callback(move |_|{ let mut work_service = work_service_rc.borrow_mut(); work_service.save_config(); + process::exit(0); }); } @@ -123,8 +155,10 @@ impl UiService { dialog.show(); let binding = dialog.filename(); let path = binding.to_str().unwrap(); - let current_line = &work_service.get_current_line().to_string(); work_service.init_excel_service(path.to_string()).unwrap(); + let current_line = &work_service.get_current_line().to_string(); + work_service.config_model.excel_path = path.to_string(); + work_service.config_model.current_line = current_line.parse::().unwrap(); ui.excel_file_textbox.set_value(path); ui.current_line_textbox.set_value(current_line); }); diff --git a/src/services/work_service.rs b/src/services/work_service.rs index b1bf5fa..d7c31f4 100644 --- a/src/services/work_service.rs +++ b/src/services/work_service.rs @@ -45,14 +45,21 @@ impl WorkService { pub fn write_and_check(&mut self, model: WorkModel) -> Result { let msg = &format!("{}:{}:{}", model.imei, model.sn, model.line_number); log::info!("Write Start"); - log::info!("Check Imei From DB"); match self.sqlite_service.check_imei_has_insert(&model.imei) { Ok(true) => { - log::error!("Imei Exist"); + log::error!("Imei Exist: {}", model.imei); self.serial_service = None; return Err("Imei Exist".to_string()); } - _ => {} + _ => {log::info!("Check Imei From Db Pass")} + } + match self.sqlite_service.check_sn_has_insert(&model.sn) { + Ok(true) => { + log::error!("Imei Exist: {}", model.sn); + self.serial_service = None; + return Err("Imei Exist".to_string()); + } + _ => {log::info!("Check Sn From Db Pass")} } if let Err(msg) = self.write_imei(model.imei.clone()) { log::error!("Write Imei Error:{}", msg); @@ -63,6 +70,7 @@ impl WorkService { log::error!("Write Sn Error:{}", msg); return Err(msg); } + log::info!("Write Imei:{}", model.sn); log::info!("Write End"); log::info!("Check Start"); if let Err(msg) = self.check_imei(&model.imei) { @@ -74,6 +82,7 @@ impl WorkService { log::error!("Check Sn Error:{}", msg); return Err(msg); } + log::info!("Check Sn:{}", model.sn); log::info!("Check End"); self.serial_service = None; match self.sqlite_service.insert(model) {