MainWindow.xaml.cs 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.IO;
  6. using System.Windows.Input;
  7. using MahApps.Metro.Controls;
  8. using MahApps.Metro.Controls.Dialogs;
  9. using System.Data;
  10. using WpfTest1.SQLite;
  11. using WpfTest1.Toolkits;
  12. using LitJson;
  13. using System.ComponentModel;
  14. namespace WpfTest1
  15. {
  16. /// <summary>
  17. /// MainWindow.xaml 的交互逻辑
  18. /// </summary>
  19. public partial class MainWindow : MetroWindow
  20. {
  21. #region 系统基本参数
  22. System.Data.SQLite.SQLiteDataAdapter daHistoryRecord; //选择记录页面查询记录条目的数据集容器
  23. public doctor loginDoctor = null; //所登陆的医师
  24. DataSet ds; //其他界面的DataSet
  25. System.Data.SQLite.SQLiteDataAdapter da; //其他界面的DataAdapter
  26. //double highBp; //BP界面高压
  27. //double lowBp; //BP界面低压
  28. DateTime lastSettingLogin; //上一次在系统设置界面登陆的时间
  29. public Toolkits.Config cfg; //从数据库取配置的类
  30. DogOperator dop = new DogOperator(Constants.registerPid, Constants.registerUid);
  31. Patient filterPatient;
  32. Patient evaluationPatient;
  33. Patient historyPatient;
  34. Record filterReportForEvaluation;
  35. bool flagEvaluationWithoutFilter = true;
  36. List<QuestionAnswerPair> filterQuestionaire = new List<QuestionAnswerPair>();
  37. List<QuestionAnswerPair> evaluationQuestionaire = new List<QuestionAnswerPair>();
  38. List<UserSelection> filterUserSelection = new List<UserSelection>();
  39. List<UserSelection> evaluationUserSelection = new List<UserSelection>();
  40. string resultsFilter;
  41. string resultsEvaluation;
  42. int currentFilterCount = 0;
  43. int currentEvaluationCount = 0;
  44. List<Record> recordsFromOnePatient;
  45. BindingList<Record> bindingRecords;
  46. Dictionary<string, int> mapKeyToDigit = new Dictionary<string, int>();
  47. #endregion
  48. public MainWindow()
  49. {
  50. InitializeComponent();
  51. //加载配置
  52. cfg = new Toolkits.Config();
  53. //绑定三个selectUser的父类
  54. //selectUserMeasure.setMainWindow(this);
  55. selectUserPatientManagent.setMainWindow(this);
  56. selectUserfilter.setMainWindow(this);
  57. selectUserevaluation.setMainWindow(this);
  58. selectUserHistory.setMainWindow(this);
  59. textBoxOrganizationName.Text = cfg.organization_name;
  60. }
  61. #region 初始化与系统调用部分
  62. //初始化全部组件后需要先输入医生密码才能进入
  63. private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
  64. {
  65. //之后测试登陆
  66. SmallDialogs.LoginWindow lw = new SmallDialogs.LoginWindow(this);
  67. lw.ShowDialog();
  68. if(loginDoctor == null)
  69. {
  70. this.Close();
  71. }
  72. bool registerFlag = dop.checkSoftwareRegister();
  73. if (!registerFlag && Constants.productionEnvironment)
  74. {
  75. MessageBox.Show("未找到硬件授权Key,请确认插入后重试", "错误");
  76. this.Close();
  77. }
  78. //显示医生姓名
  79. if (loginDoctor != null)
  80. {
  81. loginedDoctorName.Content = "欢迎您, " + loginDoctor.name;
  82. return;
  83. }
  84. loadQuestionaire(filterQuestionaire, "filter");
  85. loadQuestionaire(evaluationQuestionaire, "evaluation");
  86. labelHomepageCversion.Content = "编译日期:" + Toolkits.Constants.compileDate;
  87. labelSoftwareName.Content = String.Format("欢迎使用{0}", Constants.softwareName);
  88. }
  89. private void loadQuestionaire(List<QuestionAnswerPair> oneQuestionaire, string type = "filter")
  90. {
  91. oneQuestionaire.Clear();
  92. List<Question> questions = SQLite.SQLiteModel.getQuestions(type);
  93. foreach (Question oneQuestion in questions)
  94. {
  95. List<Answer> answers = SQLite.SQLiteModel.getAnswersByQid(oneQuestion.q_id);
  96. QuestionAnswerPair temp = new QuestionAnswerPair(oneQuestion, answers);
  97. oneQuestionaire.Add(temp);
  98. }
  99. }
  100. /// <summary>
  101. /// 筛查或评估流程页面识别快捷键的操作
  102. /// </summary>
  103. /// <param name="sender">默认</param>
  104. /// <param name="e">默认</param>
  105. private void processGrid_KeyDown(object sender, KeyEventArgs e)
  106. {
  107. //System.Console.WriteLine(String.Format("KeyDown detected. {0} is detected.", e.Key.ToString()));
  108. if (tabControlGeneral.SelectedIndex == 2 && tabFilter.SelectedIndex == 1)
  109. {
  110. //筛查流程中
  111. if (e.Key == Key.N && buttonFilterNext.IsEnabled)
  112. {
  113. buttonFilterNext_Click(sender, (RoutedEventArgs)e);
  114. return;
  115. }
  116. if (e.Key == Key.P && buttonFilterPrevious.IsEnabled)
  117. {
  118. buttonFilterPrevious_Click(sender, (RoutedEventArgs)e);
  119. return;
  120. }
  121. if (e.Key == Key.E)
  122. {
  123. buttonAbortFilter_Click(sender, (RoutedEventArgs)e);
  124. return;
  125. }
  126. if(e.Key == Key.S && buttonSubmitFilter.IsEnabled)
  127. {
  128. buttonSubmitFilter_Click(sender, (RoutedEventArgs)e);
  129. return;
  130. }
  131. if (Constants.keyboardToDigit.ContainsKey(e.Key.ToString()))
  132. {
  133. int numInput = Constants.keyboardToDigit[e.Key.ToString()];
  134. try
  135. {
  136. RadioButton rbTemp = (RadioButton)gridFilterSelection.Children[numInput - 1];
  137. rbTemp.IsChecked = true;
  138. radioButtonFilter_Checked(rbTemp, e);
  139. }
  140. catch (Exception)
  141. {
  142. return;
  143. }
  144. return;
  145. }
  146. }
  147. else if(tabControlGeneral.SelectedIndex == 3 && tabEvaluation.SelectedIndex == 1)
  148. {
  149. //评估流程中
  150. if (e.Key == Key.N && buttonEvaluationNext.IsEnabled)
  151. {
  152. buttonEvaluationNext_Click(sender, (RoutedEventArgs)e);
  153. return;
  154. }
  155. if (e.Key == Key.E)
  156. {
  157. buttonAbortEvaluation_Click(sender, (RoutedEventArgs)e);
  158. return;
  159. }
  160. if (e.Key == Key.S && buttonSubmitEvaluation.IsEnabled)
  161. {
  162. buttonSubmitEvaluation_Click(sender, (RoutedEventArgs)e);
  163. return;
  164. }
  165. if (Constants.keyboardToDigit.ContainsKey(e.Key.ToString()))
  166. {
  167. int numInput = Constants.keyboardToDigit[e.Key.ToString()];
  168. try
  169. {
  170. RadioButton rbTemp = (RadioButton)gridEvaluationSelection.Children[numInput - 1];
  171. rbTemp.IsChecked = true;
  172. radioButtonEvaluation_Checked(rbTemp, e);
  173. }
  174. catch (Exception)
  175. {
  176. return;
  177. }
  178. }
  179. }
  180. else
  181. {
  182. return;
  183. }
  184. }
  185. #endregion
  186. #region 首页功能
  187. //标题栏快速添加病例的接口
  188. private void Fast_Add_Patient_Button_Click(object sender, RoutedEventArgs e)
  189. {
  190. buttonAddPatient_Click(this, e);
  191. }
  192. //首页--新建用户
  193. private void buttonHomePageAddPatient_Click(object sender, RoutedEventArgs e)
  194. {
  195. buttonAddPatient_Click(this, e);
  196. }
  197. //首页--用户管理
  198. private void buttonHomePagePatientManagent_Click(object sender, RoutedEventArgs e)
  199. {
  200. tabControlGeneral.SelectedIndex = 1;
  201. }
  202. private void buttonHomePageFilterFunction_Click(object sender, RoutedEventArgs e)
  203. {
  204. tabControlGeneral.SelectedIndex = 2;
  205. }
  206. private void buttonHomePageEvaluationFunction_Click(object sender, RoutedEventArgs e)
  207. {
  208. tabControlGeneral.SelectedIndex = 3;
  209. }
  210. //首页--检测报告
  211. private void buttonHomeHistoryRecords_Click(object sender, RoutedEventArgs e)
  212. {
  213. tabControlGeneral.SelectedIndex = 4;
  214. }
  215. //首页--系统设置
  216. private void buttonHomePageSystemSettings_Click(object sender, RoutedEventArgs e)
  217. {
  218. tabControlGeneral.SelectedIndex = 5;
  219. }
  220. //关于程序
  221. private void buttonHomePageDataTransfer_Click(object sender, RoutedEventArgs e)
  222. {
  223. SmallDialogs.AboutBox ab = new SmallDialogs.AboutBox();
  224. ab.Show();
  225. }
  226. //首页--操作帮助
  227. private void buttonHomePageHelp_Click(object sender, RoutedEventArgs e)
  228. {
  229. System.Diagnostics.Process.Start("https://www.baidu.com");
  230. }
  231. #endregion
  232. #region 病例管理
  233. //病例管理
  234. //病例管理--病例管理
  235. #region 病例管理--添加病例
  236. //添加病例
  237. private void buttonAddPatient_Click(object sender, RoutedEventArgs e)
  238. {
  239. AddPatient a_new_one = new AddPatient(this);
  240. a_new_one.Show();
  241. //selectUserPatientManagent.LoadDataGrid();
  242. }
  243. #endregion
  244. #region 病例管理--修改病例
  245. //修改病例
  246. public void buttonModifyPatient_Click(object sender, RoutedEventArgs e)
  247. {
  248. try
  249. {
  250. var target = (DataRowView)this.selectUserPatientManagent.dataGrid.SelectedItem;
  251. //MessageBox.Show(target["id"].ToString());
  252. ModifyUser modify_one = new ModifyUser(this, target["p_id"].ToString());
  253. modify_one.Show();
  254. }
  255. catch(Exception err)
  256. {
  257. //this.ShowMessageAsync("警告","请选择一个病例进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace );
  258. MessageBox.Show("请选择一个病例进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace,"警告");
  259. }
  260. }
  261. #endregion
  262. #region 病例管理--删除病例
  263. //删除病例
  264. private void buttonDeletePatient_Click(object sender, RoutedEventArgs e)
  265. {
  266. try
  267. {
  268. var target = (DataRowView)this.selectUserPatientManagent.dataGrid.SelectedItem;
  269. if(target == null)
  270. {
  271. MessageBox.Show("请选择一个病例进行删除", "提示");
  272. return;
  273. }
  274. MessageBoxResult clickresult = MessageBox.Show("确认删除该病例?", "提示", MessageBoxButton.OKCancel);
  275. if (clickresult == MessageBoxResult.OK)
  276. {
  277. int status = SQLite.SQLiteModel.DeletePatientItem(target["p_id"].ToString());
  278. if (status > 0)
  279. {
  280. MessageBox.Show("删除成功","提示");
  281. }
  282. else
  283. {
  284. MessageBox.Show("已删除", "提示");
  285. }
  286. }
  287. else if (clickresult == MessageBoxResult.Cancel)
  288. {
  289. return;
  290. }
  291. }
  292. catch (Exception err)
  293. {
  294. MessageBox.Show("数据库故障\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  295. }
  296. selectUserPatientManagent.LoadDataGrid();
  297. }
  298. #endregion
  299. #endregion
  300. #region 筛查功能
  301. /// <summary>
  302. /// 点击开始筛查后触发的事件
  303. /// </summary>
  304. /// <param name="sender">默认</param>
  305. /// <param name="e">默认</param>
  306. public void buttonFilterSelectPatient_Click(object sender, RoutedEventArgs e)
  307. {
  308. try
  309. {
  310. var target = (DataRowView)this.selectUserfilter.dataGrid.SelectedItem;
  311. filterPatient = SQLite.SQLiteModel.getPatientById(target["p_id"].ToString());
  312. }
  313. catch (Exception err)
  314. {
  315. MessageBox.Show("请选择一个病例进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "警告");
  316. return;
  317. }
  318. if(filterPatient == null)
  319. {
  320. MessageBox.Show("数据库加载异常", "错误");
  321. return;
  322. }
  323. try
  324. {
  325. loadQuestionaire(filterQuestionaire, "filter");
  326. filterUserSelection.Clear();
  327. foreach(QuestionAnswerPair qa in filterQuestionaire)
  328. {
  329. filterUserSelection.Add(new UserSelection(qa.question.q_id, 0));
  330. }
  331. }
  332. catch (Exception err)
  333. {
  334. MessageBox.Show("筛查题目加载失败\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  335. return;
  336. }
  337. if(filterQuestionaire.Count == 0)
  338. {
  339. MessageBox.Show("筛查题目加载失败\r\n数据库中无有效问卷", "错误");
  340. return;
  341. }
  342. currentFilterCount = 1;
  343. loadQuestionViewFilter(currentFilterCount);
  344. tabFilter.SelectedIndex += 1;
  345. }
  346. /// <summary>
  347. /// 点击中止筛查后触发的事件
  348. /// </summary>
  349. /// <param name="sender">默认</param>
  350. /// <param name="e">默认</param>
  351. private void buttonAbortFilter_Click(object sender, RoutedEventArgs e)
  352. {
  353. filterUserSelection.Clear();
  354. filterPatient = null;
  355. resultsFilter = "";
  356. currentFilterCount = 0;
  357. buttonFilterPrevious.IsEnabled = false;
  358. buttonFilterNext.IsEnabled = false;
  359. buttonSubmitFilter.IsEnabled = false;
  360. tabFilter.SelectedIndex = 0;
  361. }
  362. /// <summary>
  363. /// 点击筛查上一步后触发的事件
  364. /// </summary>
  365. /// <param name="sender">默认</param>
  366. /// <param name="e">默认</param>
  367. private void buttonFilterPrevious_Click(object sender, RoutedEventArgs e)
  368. {
  369. currentFilterCount -= 1;
  370. loadQuestionViewFilter(currentFilterCount);
  371. checkFilterButtonStatues();
  372. }
  373. /// <summary>
  374. /// 点击筛查下一步后触发的事件
  375. /// </summary>
  376. /// <param name="sender">默认</param>
  377. /// <param name="e">默认</param>
  378. private void buttonFilterNext_Click(object sender, RoutedEventArgs e)
  379. {
  380. currentFilterCount += 1;
  381. loadQuestionViewFilter(currentFilterCount);
  382. checkFilterButtonStatues();
  383. }
  384. /// <summary>
  385. /// 确认筛查阶段各个按钮应当处于的状态
  386. /// </summary>
  387. private void checkFilterButtonStatues()
  388. {
  389. bool radioCheckFlag = false;
  390. foreach(RadioButton rb in gridFilterSelection.Children){
  391. if(rb.IsChecked == true)
  392. {
  393. radioCheckFlag = true;
  394. }
  395. }
  396. if (radioCheckFlag && currentFilterCount < filterQuestionaire.Count)
  397. buttonFilterNext.IsEnabled = true;
  398. else
  399. buttonFilterNext.IsEnabled = false;
  400. if (currentFilterCount > 1)
  401. buttonFilterPrevious.IsEnabled = true;
  402. else
  403. buttonFilterPrevious.IsEnabled = false;
  404. bool allFilledFlag = true;
  405. foreach (UserSelection us in filterUserSelection)
  406. {
  407. if (us.a_id == 0)
  408. allFilledFlag = false;
  409. }
  410. if (allFilledFlag)
  411. buttonSubmitFilter.IsEnabled = true;
  412. else
  413. buttonSubmitFilter.IsEnabled = false;
  414. }
  415. /// <summary>
  416. /// 加载题目和选项界面
  417. /// </summary>
  418. private void loadQuestionViewFilter(int currentIndex)
  419. {
  420. labelFilterNumberofTotalQuestions.Content = filterQuestionaire.Count.ToString();
  421. labelFilterNumberofCurrentQuestion.Content = currentIndex.ToString();
  422. labelFilterQuestionTitle.Content = filterQuestionaire[currentIndex - 1].question.q_title;
  423. textBlockFilterQuetionContent.Text = filterQuestionaire[currentIndex - 1].question.q_content;
  424. int countOptions = filterQuestionaire[currentIndex - 1].answers.Count;
  425. gridFilterSelection.Children.Clear();
  426. for (int i = 0; i< countOptions; ++i)
  427. {
  428. RadioButton oneOption = new RadioButton();
  429. oneOption.Height = 30;
  430. oneOption.HorizontalAlignment = HorizontalAlignment.Left;
  431. oneOption.VerticalAlignment = VerticalAlignment.Top;
  432. oneOption.Margin = new Thickness(i/5*200, i%5*40, 0, 0);
  433. if(filterUserSelection[currentIndex-1].a_id == filterQuestionaire[currentIndex - 1].answers[i].a_id)
  434. oneOption.IsChecked = true;
  435. else
  436. oneOption.IsChecked = false;
  437. oneOption.Content = String.Format("[选项{0}]:{1}", i+1, filterQuestionaire[currentIndex - 1].answers[i].a_content) ;
  438. oneOption.Checked += radioButtonFilter_Checked;
  439. oneOption.GroupName = "filterOption";
  440. oneOption.FontSize = 18;
  441. oneOption.Name = "rbf" + filterQuestionaire[currentIndex - 1].answers[i].a_id.ToString();
  442. gridFilterSelection.Children.Add(oneOption);
  443. }
  444. }
  445. private void radioButtonFilter_Checked(object sender, RoutedEventArgs e)
  446. {
  447. //首先,记录该选择
  448. RadioButton oneSelection = (RadioButton)sender;
  449. filterUserSelection[currentFilterCount - 1].a_id = Convert.ToInt32(oneSelection.Name.Substring(3));
  450. //MessageBox.Show(filterUserSelection[currentFilterCount - 1].a_id.ToString());
  451. //然后,确认各个按钮状态
  452. checkFilterButtonStatues();
  453. }
  454. /// <summary>
  455. /// 点击筛查提交后触发的事件
  456. /// </summary>
  457. /// <param name="sender">默认</param>
  458. /// <param name="e">默认</param>
  459. private void buttonSubmitFilter_Click(object sender, RoutedEventArgs e)
  460. {
  461. int[] timesLimit = dop.getTimesCount();
  462. if(Constants.productionEnvironment && timesLimit[1] > timesLimit[0])
  463. {
  464. MessageBox.Show("此功能已超过Key授权次数,请使用一个新的Key进行操作。", "提示");
  465. return;
  466. }
  467. int inserted_r_id;
  468. resultsFilter = JsonMapper.ToJson(filterUserSelection);
  469. //MessageBox.Show(results);
  470. try
  471. {
  472. inserted_r_id = SQLiteModel.insertRecord(1, filterPatient.p_id, loginDoctor.id, 0, DateTime.Now, 0, resultsFilter);
  473. SQLiteModel.UpdatePatientDataWithLastDate(filterPatient.p_id, "p_last_filter_time", DateTime.Now);
  474. }
  475. catch (Exception err)
  476. {
  477. MessageBox.Show("储存筛查报告错误\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  478. return;
  479. }
  480. dop.addOneCount();
  481. MessageBoxResult dr = MessageBox.Show("保存筛查结果成功,是否生成报告?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  482. if (dr == MessageBoxResult.OK)
  483. {
  484. try
  485. {
  486. Record targetRecord = SQLiteModel.getRecordByID(inserted_r_id);
  487. ReportGenerater.generateReport(1, filterPatient, loginDoctor, targetRecord, cfg.organization_name);
  488. SQLiteModel.plusOneCountOnRecordByRid(inserted_r_id);
  489. }
  490. catch (Exception err)
  491. {
  492. MessageBox.Show("报告生成异常,可能是这份报告当前已被打开无法写入,请尝试关闭该报告后重试。\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  493. return;
  494. }
  495. tabFilter.SelectedIndex = 2;
  496. }
  497. else
  498. {
  499. buttonAbortFilter_Click(sender, e);
  500. }
  501. return;
  502. }
  503. /// <summary>
  504. /// 返回至选择用户页
  505. /// </summary>
  506. /// <param name="sender">默认</param>
  507. /// <param name="e">默认</param>
  508. private void buttonFilterBackToSelectUser_Click(object sender, RoutedEventArgs e)
  509. {
  510. buttonAbortFilter_Click(sender, e);
  511. }
  512. /// <summary>
  513. /// 返回至选择首页
  514. /// </summary>
  515. /// <param name="sender">默认</param>
  516. /// <param name="e">默认</param>
  517. private void buttonFilterBackToHome_Click(object sender, RoutedEventArgs e)
  518. {
  519. buttonAbortFilter_Click(sender, e);
  520. tabControlGeneral.SelectedIndex = 0;
  521. }
  522. #endregion
  523. #region 评估功能
  524. /// <summary>
  525. /// 点击开始评估后触发的事件
  526. /// </summary>
  527. /// <param name="sender">默认</param>
  528. /// <param name="e">默认</param>
  529. public void buttonEvaluationSelectPatient_Click(object sender, RoutedEventArgs e)
  530. {
  531. //基本逻辑如下:先找七天内与病例相匹配的筛查记录,如果有,那么要取出结果一题一题比对
  532. //如果没有,那么应当把筛查题进行加载处理
  533. try
  534. {
  535. var target = (DataRowView)this.selectUserevaluation.dataGrid.SelectedItem;
  536. evaluationPatient = SQLite.SQLiteModel.getPatientById(target["p_id"].ToString());
  537. }
  538. catch (Exception err)
  539. {
  540. MessageBox.Show("请选择一个病例进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "警告");
  541. return;
  542. }
  543. if (evaluationPatient == null)
  544. {
  545. MessageBox.Show("数据库加载异常", "错误");
  546. return;
  547. }
  548. try
  549. {
  550. loadQuestionaire(filterQuestionaire, "filter");
  551. evaluationQuestionaire.Clear();
  552. filterUserSelection.Clear();
  553. evaluationUserSelection.Clear();
  554. //这里尝试加载用户的筛查记录
  555. filterReportForEvaluation = SQLiteModel.getLatestXTypeRecordInYDays(evaluationPatient.p_id, 1, 7);
  556. if(filterReportForEvaluation == null)
  557. {
  558. flagEvaluationWithoutFilter = true;
  559. foreach (QuestionAnswerPair qa in filterQuestionaire)
  560. {
  561. filterUserSelection.Add(new UserSelection(qa.question.q_id, 0));
  562. }
  563. }
  564. else
  565. {
  566. var jsonUserSelections = filterReportForEvaluation.r_selection;
  567. filterUserSelection = JsonMapper.ToObject<List<UserSelection>>(jsonUserSelections);
  568. flagEvaluationWithoutFilter = false;
  569. }
  570. }
  571. catch (Exception err)
  572. {
  573. MessageBox.Show("筛查题目加载失败\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  574. return;
  575. }
  576. if (filterQuestionaire.Count == 0)
  577. {
  578. MessageBox.Show("筛查题目加载失败\r\n数据库中无有效问卷", "错误");
  579. return;
  580. }
  581. if (flagEvaluationWithoutFilter)
  582. {
  583. MessageBox.Show("发现该病例一周内未进行初筛,评估过程中将自动进行初筛。","提示");
  584. }
  585. else
  586. {
  587. MessageBox.Show("发现该病例于"+ filterReportForEvaluation.r_time.ToString("yyyy-MM-dd HH:mm:ss") +"进行过初筛,评估过程中将使用此初筛结果。", "提示");
  588. }
  589. currentFilterCount = 1;
  590. currentEvaluationCount = 1;
  591. evaluationQuestionaire.Add(filterQuestionaire[currentFilterCount - 1]);
  592. evaluationUserSelection.Add(filterUserSelection[currentFilterCount - 1]);
  593. tabEvaluation.SelectedIndex += 1;
  594. checkStatusEvaluation();
  595. }
  596. /// <summary>
  597. /// 加载currentIndex的评估题目功能
  598. /// </summary>
  599. /// <param name="currentIndex">需要显示题目的题号</param>
  600. private void loadQuestionViewEvaluation(int currentIndex)
  601. {
  602. labelQuestionNumberofCurrentQuestion.Content = currentIndex.ToString();
  603. labelEvaluationQuestionTitle.Content = evaluationQuestionaire[currentIndex - 1].question.q_title;
  604. textBlockEvaluationQuetionContent.Text = evaluationQuestionaire[currentIndex - 1].question.q_content;
  605. int countOptions = evaluationQuestionaire[currentIndex - 1].answers.Count;
  606. gridEvaluationSelection.Children.Clear();
  607. for (int i = 0; i < countOptions; ++i)
  608. {
  609. RadioButton oneOption = new RadioButton();
  610. oneOption.Height = 30;
  611. oneOption.HorizontalAlignment = HorizontalAlignment.Left;
  612. oneOption.VerticalAlignment = VerticalAlignment.Top;
  613. oneOption.Margin = new Thickness(i / 5 * 200, i % 5 * 40, 0, 0);
  614. if (evaluationUserSelection[currentIndex - 1].a_id == evaluationQuestionaire[currentIndex - 1].answers[i].a_id)
  615. oneOption.IsChecked = true;
  616. else
  617. oneOption.IsChecked = false;
  618. oneOption.Content = String.Format("[选项{0}]:{1}", i + 1, evaluationQuestionaire[currentIndex - 1].answers[i].a_content);
  619. oneOption.Checked += radioButtonEvaluation_Checked;
  620. oneOption.GroupName = "evaluationOption";
  621. oneOption.FontSize = 18;
  622. oneOption.Name = "rbe" + evaluationQuestionaire[currentIndex - 1].answers[i].a_id.ToString();
  623. gridEvaluationSelection.Children.Add(oneOption);
  624. }
  625. }
  626. /// <summary>
  627. /// 检查当前答题状态,判断是否需要跳过该题和控制加载题目的功能,能够维护userselection和questionaire
  628. /// </summary>
  629. private void checkStatusEvaluation()
  630. {
  631. if(!flagEvaluationWithoutFilter && evaluationQuestionaire[currentEvaluationCount-1].question.q_type == 1)
  632. {
  633. //有预加载的筛查报告且当前问题是一道筛查题
  634. Answer aTemp = SQLiteModel.getAnswerById(filterUserSelection[currentFilterCount - 1].a_id);
  635. if (aTemp == null || aTemp.next_q_id == 0)
  636. {
  637. if(currentFilterCount == filterQuestionaire.Count)
  638. {
  639. //当前所有题目都已经做完了
  640. buttonEvaluationNext.IsEnabled = false;
  641. bool allQuestionAreSeleceted = true;
  642. foreach (UserSelection us in evaluationUserSelection)
  643. {
  644. if (us.a_id == 0)
  645. allQuestionAreSeleceted = false;
  646. }
  647. //经过检查可以提交
  648. buttonSubmitEvaluation.IsEnabled = allQuestionAreSeleceted;
  649. }
  650. else
  651. {
  652. //还有剩下的筛选题没有过
  653. QuestionAnswerPair qaPairEvaluation = filterQuestionaire[currentFilterCount];
  654. //当前元素后面的题目和选项都清空
  655. for (int i = evaluationQuestionaire.Count - 1; i > currentEvaluationCount - 1; --i)
  656. {
  657. evaluationQuestionaire.RemoveAt(i);
  658. evaluationUserSelection.RemoveAt(i);
  659. }
  660. evaluationQuestionaire.Add(qaPairEvaluation);
  661. evaluationUserSelection.Add(filterUserSelection[currentFilterCount]);
  662. //再刷新一次
  663. ++currentFilterCount;
  664. ++currentEvaluationCount;
  665. checkStatusEvaluation();
  666. }
  667. }
  668. else
  669. {
  670. //否则还有评估题没做
  671. Question aEvaluationQuestion = SQLiteModel.getQuestionById(aTemp.next_q_id);
  672. List<Answer> answersToTheEvaluation = SQLiteModel.getAnswersByQid(aEvaluationQuestion.q_id);
  673. QuestionAnswerPair qaPairEvaluation = new QuestionAnswerPair(aEvaluationQuestion, answersToTheEvaluation);
  674. //当前元素后面的题目和选项都清空
  675. for(int i= evaluationQuestionaire.Count - 1; i > currentEvaluationCount - 1; --i)
  676. {
  677. evaluationQuestionaire.RemoveAt(i);
  678. evaluationUserSelection.RemoveAt(i);
  679. }
  680. evaluationQuestionaire.Add(qaPairEvaluation);
  681. evaluationUserSelection.Add(new UserSelection(aEvaluationQuestion.q_id, 0));
  682. //再刷新一次
  683. ++currentEvaluationCount;
  684. checkStatusEvaluation();
  685. }
  686. }
  687. else
  688. {
  689. //其他情况:没有预加载的筛选题或者有预加载的筛选题但是是一道评估题
  690. loadQuestionViewEvaluation(currentEvaluationCount);
  691. buttonEvaluationNext.IsEnabled = false;
  692. buttonSubmitEvaluation.IsEnabled = false;
  693. }
  694. }
  695. /// <summary>
  696. /// 评估单选选项被选中的触发事件,主要是修改内存中的选择和判断下一题及提交按钮是否可用
  697. /// </summary>
  698. /// <param name="sender">默认</param>
  699. /// <param name="e">默认</param>
  700. private void radioButtonEvaluation_Checked(object sender, RoutedEventArgs e)
  701. {
  702. //首先,记录该选择
  703. RadioButton oneSelection = (RadioButton)sender;
  704. evaluationUserSelection[currentEvaluationCount - 1].a_id = Convert.ToInt32(oneSelection.Name.Substring(3));
  705. if (flagEvaluationWithoutFilter && evaluationQuestionaire[currentEvaluationCount-1].question.q_type ==1)
  706. {
  707. filterUserSelection[currentFilterCount - 1].a_id = Convert.ToInt32(oneSelection.Name.Substring(3));
  708. }
  709. //MessageBox.Show(filterUserSelection[currentFilterCount - 1].a_id.ToString());
  710. Answer oneAnswer = SQLiteModel.getAnswerById(evaluationUserSelection[currentEvaluationCount - 1].a_id);
  711. if(currentFilterCount == filterQuestionaire.Count && oneAnswer.next_q_id == 0)
  712. {
  713. //后面没有题目了,可以提交
  714. buttonEvaluationNext.IsEnabled = false;
  715. bool allQuestionAreSeleceted = true;
  716. foreach (UserSelection us in evaluationUserSelection)
  717. {
  718. if (us.a_id == 0)
  719. allQuestionAreSeleceted = false;
  720. }
  721. //经过检查可以提交
  722. buttonSubmitEvaluation.IsEnabled = allQuestionAreSeleceted;
  723. }
  724. else
  725. {
  726. //否则可以做下一题
  727. buttonEvaluationNext.IsEnabled = true;
  728. buttonSubmitEvaluation.IsEnabled = false;
  729. }
  730. }
  731. /// <summary>
  732. /// (未实现)评估过程中点击上一题的触发事件
  733. /// </summary>
  734. /// <param name="sender">默认</param>
  735. /// <param name="e">默认</param>
  736. private void buttonEvaluationPrevious_Click(object sender, RoutedEventArgs e)
  737. {
  738. }
  739. /// <summary>
  740. /// 点击评估页下一题后触发的事件,主要是判断接下来加载哪一题
  741. /// </summary>
  742. /// <param name="sender">默认</param>
  743. /// <param name="e">默认</param>
  744. private void buttonEvaluationNext_Click(object sender, RoutedEventArgs e)
  745. {
  746. //先看看后面有没有进退阶题目了
  747. Answer oneAnswer = SQLiteModel.getAnswerById(evaluationUserSelection[currentEvaluationCount - 1].a_id);
  748. if(oneAnswer.next_q_id!= 0)
  749. {
  750. //还有后续题目
  751. Question aEvaluationQuestion = SQLiteModel.getQuestionById(oneAnswer.next_q_id);
  752. List<Answer> answersToTheEvaluation = SQLiteModel.getAnswersByQid(aEvaluationQuestion.q_id);
  753. QuestionAnswerPair qaPairEvaluation = new QuestionAnswerPair(aEvaluationQuestion, answersToTheEvaluation);
  754. //当前元素后面的题目和选项都清空
  755. for (int i = evaluationQuestionaire.Count - 1; i > currentEvaluationCount - 1; --i)
  756. {
  757. evaluationQuestionaire.RemoveAt(i);
  758. evaluationUserSelection.RemoveAt(i);
  759. }
  760. evaluationQuestionaire.Add(qaPairEvaluation);
  761. evaluationUserSelection.Add(new UserSelection(aEvaluationQuestion.q_id, 0));
  762. //再刷新一次
  763. ++currentEvaluationCount;
  764. checkStatusEvaluation();
  765. }
  766. else
  767. {
  768. //否则跳到下一个筛选题上面
  769. QuestionAnswerPair qaPairEvaluation = filterQuestionaire[currentFilterCount];
  770. //当前元素后面的题目和选项都清空
  771. for (int i = evaluationQuestionaire.Count - 1; i > currentEvaluationCount - 1; --i)
  772. {
  773. evaluationQuestionaire.RemoveAt(i);
  774. evaluationUserSelection.RemoveAt(i);
  775. }
  776. evaluationQuestionaire.Add(qaPairEvaluation);
  777. evaluationUserSelection.Add(filterUserSelection[currentFilterCount]);
  778. //再刷新一次
  779. ++currentFilterCount;
  780. ++currentEvaluationCount;
  781. checkStatusEvaluation();
  782. }
  783. }
  784. /// <summary>
  785. /// 点击评估页提交后触发的事件
  786. /// </summary>
  787. /// <param name="sender">默认</param>
  788. /// <param name="e">默认</param>
  789. private void buttonSubmitEvaluation_Click(object sender, RoutedEventArgs e)
  790. {
  791. int[] timesLimit = dop.getTimesCount();
  792. if (Constants.productionEnvironment && timesLimit[1] > timesLimit[0])
  793. {
  794. MessageBox.Show("此功能已超过Key授权次数,请使用一个新的Key进行操作。", "提示");
  795. return;
  796. }
  797. int inserted_r_id;
  798. resultsFilter = JsonMapper.ToJson(filterUserSelection);
  799. resultsEvaluation = JsonMapper.ToJson(evaluationUserSelection);
  800. try
  801. {
  802. int tempRId;
  803. if (flagEvaluationWithoutFilter)
  804. {
  805. tempRId = SQLiteModel.insertRecord(1, evaluationPatient.p_id, loginDoctor.id, 0, DateTime.Now, 0, resultsFilter);
  806. SQLiteModel.UpdatePatientDataWithLastDate(evaluationPatient.p_id, "p_last_filter_time", DateTime.Now);
  807. }
  808. else
  809. {
  810. tempRId = filterReportForEvaluation.r_id;
  811. }
  812. inserted_r_id = SQLiteModel.insertRecord(2, evaluationPatient.p_id, loginDoctor.id, tempRId, DateTime.Now, 0, resultsEvaluation);
  813. SQLiteModel.UpdatePatientDataWithLastDate(evaluationPatient.p_id, "p_last_evaluation_time", DateTime.Now);
  814. }
  815. catch (Exception err)
  816. {
  817. MessageBox.Show("储存筛查报告错误\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  818. return;
  819. }
  820. dop.addOneCount();
  821. MessageBoxResult dr = MessageBox.Show("保存成功,是否生成报告?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  822. if (dr == MessageBoxResult.OK)
  823. {
  824. try
  825. {
  826. Record targetRecord = SQLiteModel.getRecordByID(inserted_r_id);
  827. SQLiteModel.plusOneCountOnRecordByRid(inserted_r_id);
  828. ReportGenerater.generateReport(2, evaluationPatient, loginDoctor, targetRecord, cfg.organization_name);
  829. }
  830. catch (Exception err)
  831. {
  832. MessageBox.Show("报告生成异常,可能是这份报告当前已被打开无法写入,请尝试关闭该报告后重试。\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "错误");
  833. return;
  834. }
  835. tabEvaluation.SelectedIndex = 2;
  836. }
  837. else
  838. {
  839. buttonAbortEvaluation_Click(sender, e);
  840. }
  841. return;
  842. }
  843. /// <summary>
  844. /// 点击评估页中止评估后触发的事件
  845. /// </summary>
  846. /// <param name="sender">默认</param>
  847. /// <param name="e">默认</param>
  848. private void buttonAbortEvaluation_Click(object sender, RoutedEventArgs e)
  849. {
  850. //清理相关变量
  851. filterQuestionaire.Clear();
  852. filterUserSelection.Clear();
  853. evaluationQuestionaire.Clear();
  854. evaluationUserSelection.Clear();
  855. flagEvaluationWithoutFilter = true;
  856. filterReportForEvaluation = null;
  857. evaluationPatient = null;
  858. resultsFilter = "";
  859. resultsEvaluation = "";
  860. currentFilterCount = 0;
  861. currentEvaluationCount = 0;
  862. //buttonFilterPrevious.IsEnabled = false;
  863. buttonEvaluationNext.IsEnabled = false;
  864. buttonSubmitEvaluation.IsEnabled = false;
  865. tabEvaluation.SelectedIndex = 0;
  866. }
  867. /// <summary>
  868. /// 返回至选择用户页
  869. /// </summary>
  870. /// <param name="sender">默认</param>
  871. /// <param name="e">默认</param>
  872. private void buttonEvaluationBackToSelectUser_Click(object sender, RoutedEventArgs e)
  873. {
  874. buttonAbortEvaluation_Click(sender, e);
  875. }
  876. /// <summary>
  877. /// 返回至选择首页
  878. /// </summary>
  879. /// <param name="sender">默认</param>
  880. /// <param name="e">默认</param>
  881. private void buttonEvaluationBackToHome_Click(object sender, RoutedEventArgs e)
  882. {
  883. buttonAbortEvaluation_Click(sender, e);
  884. tabControlGeneral.SelectedIndex = 0;
  885. }
  886. #endregion
  887. #region 历史记录
  888. /// <summary>
  889. /// 点击选择病例查看其历史记录后触发的事件
  890. /// </summary>
  891. /// <param name="sender">默认</param>
  892. /// <param name="e">默认</param>
  893. public void buttonHistorySelectPatient_Click(object sender, RoutedEventArgs e)
  894. {
  895. try
  896. {
  897. var target = (DataRowView)this.selectUserHistory.dataGrid.SelectedItem;
  898. historyPatient = SQLiteModel.getPatientById(Convert.ToString(target["p_id"]));
  899. recordsFromOnePatient = SQLiteModel.getRecordsByPid(Convert.ToInt32(target["p_id"]));
  900. }
  901. catch (Exception err)
  902. {
  903. MessageBox.Show("请选择一个病例进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace, "警告");
  904. return;
  905. }
  906. if (recordsFromOnePatient == null || historyPatient == null)
  907. {
  908. MessageBox.Show("数据库加载异常", "错误");
  909. return;
  910. }
  911. try
  912. {
  913. bindingRecords = new BindingList<Record>(recordsFromOnePatient);
  914. dataGridRecords.ItemsSource = bindingRecords;
  915. }
  916. catch(Exception err)
  917. {
  918. MessageBox.Show("数据库加载异常\r\n调试信息:\r\n"+err.StackTrace, "错误");
  919. return;
  920. }
  921. tabHistoryRecords.SelectedIndex = 1;
  922. }
  923. /// <summary>
  924. /// 在选择记录页面,点击返回上一级触发的事件
  925. /// </summary>
  926. /// <param name="sender">默认</param>
  927. /// <param name="e">默认</param>
  928. private void buttonHistoryBackToSelectUser_Click(object sender, RoutedEventArgs e)
  929. {
  930. recordsFromOnePatient.Clear();
  931. tabHistoryRecords.SelectedIndex = 0;
  932. }
  933. /// <summary>
  934. /// 由历史记录相关页面返回至首页的事件
  935. /// </summary>
  936. /// <param name="sender">默认</param>
  937. /// <param name="e">默认</param>
  938. private void buttonHistoryBackToHome_Click(object sender, RoutedEventArgs e)
  939. {
  940. recordsFromOnePatient.Clear();
  941. tabHistoryRecords.SelectedIndex = 0;
  942. tabControlGeneral.SelectedIndex = 0;
  943. }
  944. /// <summary>
  945. /// 点击生成报告的页面
  946. /// </summary>
  947. /// <param name="sender">默认</param>
  948. /// <param name="e">默认</param>
  949. private void buttonRegenerateReport_Click(object sender, RoutedEventArgs e)
  950. {
  951. Record targetRecord;
  952. try
  953. {
  954. var target = this.dataGridRecords.SelectedItem as Record;
  955. targetRecord = SQLiteModel.getRecordByID(Convert.ToInt32(target.r_id));
  956. }
  957. catch (Exception err)
  958. {
  959. MessageBox.Show("请选择一个记录进行生成\r\n" + err.StackTrace, "提示");
  960. return;
  961. }
  962. if (targetRecord == null)
  963. {
  964. MessageBox.Show("数据库加载异常", "错误");
  965. return;
  966. }
  967. try
  968. {
  969. ReportGenerater.generateReport(targetRecord.r_type, historyPatient, loginDoctor, targetRecord, cfg.organization_name);
  970. SQLiteModel.plusOneCountOnRecordByRid(targetRecord.r_id);
  971. }
  972. catch(Exception err)
  973. {
  974. MessageBox.Show("报告生成异常,可能是这份报告当前已被打开无法写入,请尝试关闭该报告后重试。\r\n调试信息:\r\n" + err.StackTrace, "错误");
  975. return;
  976. }
  977. tabHistoryRecords.SelectedIndex = 2;
  978. }
  979. /// <summary>
  980. /// 从报告生成页点击返回上一页的事件
  981. /// </summary>
  982. /// <param name="sender">默认</param>
  983. /// <param name="e">默认</param>
  984. private void buttonHistoryBackToSelectRecord_Click(object sender, RoutedEventArgs e)
  985. {
  986. tabHistoryRecords.SelectedIndex = 1;
  987. }
  988. /// <summary>
  989. /// 双击报告也要生成报告的功能
  990. /// </summary>
  991. /// <param name="sender">默认</param>
  992. /// <param name="e">默认</param>
  993. private void dataGridRecords_MouseDoubleClick(object sender, MouseButtonEventArgs e)
  994. {
  995. buttonRegenerateReport_Click(sender, e);
  996. }
  997. #endregion
  998. #region 系统设置
  999. //系统设置
  1000. //进入系统设置前主任级别用户的身份验证
  1001. async private void tabControlGeneral_SelectionChanged(object sender, SelectionChangedEventArgs e)
  1002. {
  1003. //System.Console.WriteLine(Convert.ToString(tabControlGeneral.SelectedIndex));
  1004. if (e.Source is TabControl)
  1005. {
  1006. //系统设置页验证
  1007. if (tabitemDoctorSetting.IsSelected)
  1008. {
  1009. DateTime now = DateTime.Now;
  1010. if (lastSettingLogin != null && (now - lastSettingLogin).Minutes <= 10)
  1011. {
  1012. //如果上次有登陆而且登陆时间在10分钟以内,则免登陆
  1013. return;
  1014. }
  1015. bool dialogLoop = true;
  1016. bool wrongPassword = false;
  1017. string description;
  1018. int x = 1;
  1019. while (dialogLoop)
  1020. {
  1021. x++;
  1022. if (wrongPassword)
  1023. {
  1024. description = "用户名或密码不正确,请重新输入账号和密码进入系统设置";
  1025. }
  1026. else
  1027. {
  1028. description = "请输入账号和密码进入系统设置";
  1029. }
  1030. LoginDialogData loginDialogData;
  1031. loginDialogData = await this.ShowLoginAsync
  1032. (
  1033. "输入科室主任级别账号密码以继续..." + Convert.ToString(x),
  1034. description,
  1035. new LoginDialogSettings
  1036. {
  1037. ColorScheme = MetroDialogColorScheme.Accented,
  1038. UsernameWatermark = "用户名",
  1039. PasswordWatermark = "密码",
  1040. NegativeButtonVisibility = Visibility.Visible
  1041. }
  1042. );
  1043. if (loginDialogData == null)
  1044. {
  1045. dialogLoop = false;
  1046. tabControlGeneral.SelectedIndex = 0;
  1047. return;
  1048. //break;
  1049. }
  1050. //调用数据库验证
  1051. string doctorName = loginDialogData.Username;
  1052. string doctorPassword = loginDialogData.Password;
  1053. string doctorPWD = Toolkits.ComputeHash.GetMD5(doctorPassword);
  1054. doctor loginDirector = SQLiteModel.directorLogin(doctorName, doctorPWD);
  1055. if (loginDirector == null)
  1056. {
  1057. //MessageBox.Show("admin");
  1058. wrongPassword = true;
  1059. dialogLoop = true;
  1060. }
  1061. else
  1062. {
  1063. lastSettingLogin = DateTime.Now;
  1064. dialogLoop = false;
  1065. return;
  1066. //break;
  1067. }
  1068. }
  1069. }
  1070. //高级系统设置验证页
  1071. //if (tabitemOEMSetting.IsSelected)
  1072. }
  1073. }
  1074. private void tabControlSystemSetting_SelectionChanged(object sender, SelectionChangedEventArgs e)
  1075. {
  1076. lastSettingLogin = DateTime.Now;
  1077. }
  1078. #region 医师管理
  1079. //系统设置--医师管理
  1080. private void LoadDoctorDataGrid(object sender, RoutedEventArgs e)
  1081. {
  1082. LoadDoctorDataGrid();
  1083. }
  1084. public void LoadDoctorDataGrid()
  1085. {
  1086. //连接字符串
  1087. string Connstr = Toolkits.Constants.Connstr;
  1088. //连接对象
  1089. System.Data.SQLite.SQLiteConnection con = new System.Data.SQLite.SQLiteConnection(Connstr);
  1090. //Sql语句
  1091. string selectCmd = "SELECT * FROM Doctor WHERE delete_flag=0 AND name != '" + Constants.adminUsername + "' LIMIT 100";
  1092. con.Open();
  1093. da = new System.Data.SQLite.SQLiteDataAdapter(selectCmd, con);
  1094. ds = new DataSet();
  1095. da.Fill(ds);
  1096. dataGridDoctor.ItemsSource = ds.Tables[0].DefaultView;
  1097. con.Close();
  1098. }
  1099. //新增医师
  1100. private void buttonAddDoctor_Click(object sender, RoutedEventArgs e)
  1101. {
  1102. AddDoctor a_new_doctor = new AddDoctor(this);
  1103. a_new_doctor.Show();
  1104. }
  1105. //修改医师
  1106. private void buttonChangeDoctor_Click(object sender, RoutedEventArgs e)
  1107. {
  1108. try
  1109. {
  1110. var target = (DataRowView)this.dataGridDoctor.SelectedItem;
  1111. //MessageBox.Show(target["id"].ToString());
  1112. ModifyDoctor modify_one = new ModifyDoctor(this, target["id"].ToString());
  1113. modify_one.Show();
  1114. }
  1115. catch (Exception err)
  1116. {
  1117. this.ShowMessageAsync("警告", "请选择一个医生进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace);
  1118. }
  1119. }
  1120. //双击表格触发修改医师的方法
  1121. private void dataGridDoctor_MouseDoubleClick(object sender, MouseButtonEventArgs e)
  1122. {
  1123. buttonChangeDoctor_Click(this, e);
  1124. }
  1125. //修改医师密码
  1126. private void buttonChangeDoctorPWD_Click(object sender, RoutedEventArgs e)
  1127. {
  1128. try
  1129. {
  1130. var target = (DataRowView)this.dataGridDoctor.SelectedItem;
  1131. //MessageBox.Show(target["id"].ToString());
  1132. ModifyDoctorPWD modify_one = new ModifyDoctorPWD(this, target["id"].ToString());
  1133. modify_one.Show();
  1134. }
  1135. catch (Exception err)
  1136. {
  1137. this.ShowMessageAsync("警告", "请选择一个医生进行修改\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace);
  1138. }
  1139. }
  1140. //删除医师
  1141. private async void buttonDeleteDoctor_Click(object sender, RoutedEventArgs e)
  1142. {
  1143. try
  1144. {
  1145. var target = (DataRowView)this.dataGridDoctor.SelectedItem;
  1146. if (target == null)
  1147. {
  1148. await this.ShowMessageAsync("提示", "请选择一个医生进行删除");
  1149. return;
  1150. }
  1151. MessageDialogResult clickresult = await this.ShowMessageAsync("提示", "确认删除该医生信息吗?", MessageDialogStyle.AffirmativeAndNegative);
  1152. if (clickresult == MessageDialogResult.Affirmative)//确认
  1153. {
  1154. int status = SQLite.SQLiteModel.DeleteDoctorItem(target["id"].ToString());
  1155. if (status > 0)
  1156. {
  1157. await this.ShowMessageAsync("提示", "删除成功!");
  1158. }
  1159. else
  1160. {
  1161. await this.ShowMessageAsync("警告", "目标已被删除");
  1162. }
  1163. }
  1164. else//取消
  1165. {
  1166. return;
  1167. }
  1168. }
  1169. catch (Exception err)
  1170. {
  1171. await this.ShowMessageAsync("警告", "请选择一个医生进行删除!\r\n调试信息:" + err.Message + "\r\n" + err.StackTrace);
  1172. }
  1173. LoadDoctorDataGrid();
  1174. }
  1175. //筛选医师
  1176. private void buttonFindDoctor_Click(object sender, RoutedEventArgs e)
  1177. {
  1178. try
  1179. {
  1180. //连接字符串
  1181. string Connstr = "Data Source=" + System.Environment.CurrentDirectory + "\\Junde.db3"; ;
  1182. //连接对象
  1183. System.Data.SQLite.SQLiteConnection con = new System.Data.SQLite.SQLiteConnection(Connstr);
  1184. string namelike = textBoxFindDoctor.Text;
  1185. //MessageBox.Show(namelike);
  1186. //Sql语句
  1187. string selectCmd = "SELECT * FROM Doctor WHERE NAME LIKE \'%" + namelike + "%\' AND delete_flag=0 LIMIT 100";
  1188. con.Open();
  1189. System.Data.SQLite.SQLiteDataAdapter da_1 = new System.Data.SQLite.SQLiteDataAdapter(selectCmd, con);
  1190. DataSet ds_1 = new DataSet();
  1191. da_1.Fill(ds_1);
  1192. dataGridDoctor.ItemsSource = ds_1.Tables[0].DefaultView;
  1193. con.Close();
  1194. }
  1195. catch (Exception err)
  1196. {
  1197. MessageBox.Show("数据库错误.\r\n调试信息:" + err.Message, "错误");
  1198. }
  1199. }
  1200. #endregion
  1201. #region 其他设置
  1202. /// <summary>
  1203. /// 更换医疗机构名称
  1204. /// </summary>
  1205. /// <param name="sender">默认</param>
  1206. /// <param name="e">默认</param>
  1207. private void buttonModifyRegisterInfo_Click(object sender, RoutedEventArgs e)
  1208. {
  1209. try
  1210. {
  1211. SQLiteModel.UpdateOrganizationName(Toolkits.FilterDangerousCharacter.filter(textBoxOrganizationName.Text));
  1212. }
  1213. catch (Exception)
  1214. {
  1215. MessageBox.Show("更新失败!", "错误");
  1216. }
  1217. MessageBox.Show("更新成功", "提示");
  1218. }
  1219. /// <summary>
  1220. /// buttonOptmizeDatabase_Click:点击优化数据库的方法,把已经被删除的数据进行彻底清除
  1221. /// </summary>
  1222. /// <param name="sender">默认</param>
  1223. /// <param name="e">默认</param>
  1224. private void buttonOptmizeDatabase_Click(object sender, RoutedEventArgs e)
  1225. {
  1226. try
  1227. {
  1228. //获取标记为删除的病人记录
  1229. List<int> ids_to_be_deleted = SQLite.SQLiteModel.getDeletedPatients();
  1230. //确实删除这些病人记录
  1231. SQLite.SQLiteModel.realDeleteRecords();
  1232. //确实删除这些病人所含有的检查记录
  1233. foreach(int each_line in ids_to_be_deleted)
  1234. {
  1235. SQLite.SQLiteModel.deleteRecordByPid(each_line);
  1236. }
  1237. //SQLiteModel.optmizeDatabase();
  1238. MessageBox.Show("操作完成", "信息");
  1239. }
  1240. catch (Exception err)
  1241. {
  1242. MessageBox.Show("数据库异常\r\b"+err.Message+"\r\b"+err.StackTrace, "错误");
  1243. }
  1244. }
  1245. /// <summary>
  1246. /// buttonDeleteAllPdfReport_Click:点击删除某一目录下所有文件的方法
  1247. /// </summary>
  1248. /// <param name="sender">默认</param>
  1249. /// <param name="e">默认</param>
  1250. private void buttonDeleteFiles_Click(object sender, RoutedEventArgs e)
  1251. {
  1252. string target_path = "";
  1253. if (((Button)sender).Equals(buttonDeleteAllPdfReport))
  1254. {
  1255. target_path = Constants.reportPath;
  1256. }
  1257. try
  1258. {
  1259. DirectoryInfo dir = new DirectoryInfo(target_path);
  1260. FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
  1261. foreach (FileSystemInfo i in fileinfo)
  1262. {
  1263. if (i is DirectoryInfo) //判断是否文件夹
  1264. {
  1265. DirectoryInfo subdir = new DirectoryInfo(i.FullName);
  1266. subdir.Delete(true); //删除子目录和文件
  1267. }
  1268. else
  1269. {
  1270. File.Delete(i.FullName); //删除指定文件
  1271. }
  1272. }
  1273. MessageBox.Show("操作完成", "信息");
  1274. }
  1275. catch (Exception)
  1276. {
  1277. MessageBox.Show("文件系统异常", "错误");
  1278. }
  1279. }
  1280. #endregion
  1281. #endregion
  1282. }
  1283. }