SQLiteModel.cs 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.SQLite;
  7. namespace WpfTest1.SQLite
  8. {
  9. public class SQLiteModel
  10. {
  11. public static string dbPath = Toolkits.Constants.dbPath;
  12. #region 各类建表操作
  13. //Patient表的创建
  14. //Patient表的创建
  15. public static void CreatePatientTable()
  16. {
  17. //如果不存在改数据库文件,则创建该数据库文件
  18. if (!System.IO.File.Exists(dbPath))
  19. {
  20. SQLiteHelper.CreateDB(dbPath);
  21. //Console.WriteLine("OK");
  22. }
  23. SQLiteHelper db = new SQLiteHelper(dbPath);
  24. string sql = @"CREATE TABLE Patient(
  25. id integer primary key autoincrement not null,
  26. record_id varchar(100),
  27. idNum varchar(20),
  28. name varchar(20),
  29. height float,
  30. weight float,
  31. base_heartrate integer,
  32. pregnancy_times integer,
  33. birth_times integer,
  34. pregnancy_date Date,
  35. mobile varchar(20),
  36. profession varchar(40),
  37. address varchar(140),
  38. category varchar(40),
  39. group_1 varchar(40),
  40. firstLetterPY varchar(10),
  41. description varchar(200),
  42. lastRecordDate datetime,
  43. delete_flag boolean
  44. )";
  45. db.ExecuteNonQuery(sql, null);
  46. string sql_1 = "CREATE INDEX Patient_idNum on Patient(idNum)";
  47. db.ExecuteNonQuery(sql_1, null);
  48. }
  49. //创建记录表
  50. public static void CreateRecordTable()
  51. {
  52. //如果不存在改数据库文件,则创建该数据库文件
  53. if (!System.IO.File.Exists(dbPath))
  54. {
  55. SQLiteHelper.CreateDB(dbPath);
  56. }
  57. SQLiteHelper db = new SQLiteHelper(dbPath);
  58. string sql = @"CREATE TABLE Record(
  59. id integer primary key autoincrement not null ,
  60. patientId integer,
  61. recordTime datetime ,
  62. dataLeft blob,
  63. dataRight blob,
  64. dataWrist blob,
  65. topBP integer,
  66. bottomBP integer,
  67. heartRate integer,
  68. eigenValueSaved integer ,
  69. comments varchar(200)
  70. )";
  71. db.ExecuteNonQuery(sql, null);
  72. }
  73. //创建医生表
  74. public static void CreateDoctorTable()
  75. {
  76. //如果不存在改数据库文件,则创建该数据库文件
  77. if (!System.IO.File.Exists(dbPath))
  78. {
  79. SQLiteHelper.CreateDB(dbPath);
  80. }
  81. SQLiteHelper db = new SQLiteHelper(dbPath);
  82. string sql = @"CREATE TABLE Doctor(
  83. id integer primary key autoincrement not null ,
  84. name varchar(20),
  85. pwd_hash varchar(32),
  86. phone_number varchar(20),
  87. director_flag boolean,
  88. delete_flag boolean)";
  89. db.ExecuteNonQuery(sql, null);
  90. }
  91. //创建CommonWords表
  92. public static void CreateCommonWordsTable()
  93. {
  94. //如果不存在改数据库文件,则创建该数据库文件
  95. if (!System.IO.File.Exists(dbPath))
  96. {
  97. SQLiteHelper.CreateDB(dbPath);
  98. }
  99. SQLiteHelper db = new SQLiteHelper(dbPath);
  100. string sql = @"CREATE TABLE CommonWords(
  101. id integer primary key autoincrement not null ,
  102. content varchar(200),
  103. describe varchar(20))";
  104. db.ExecuteNonQuery(sql, null);
  105. }
  106. //创建表达式表
  107. public static void CreateExpressionTable()
  108. {
  109. //如果不存在改数据库文件,则创建该数据库文件
  110. if (!System.IO.File.Exists(dbPath))
  111. {
  112. SQLiteHelper.CreateDB(dbPath);
  113. }
  114. SQLiteHelper db = new SQLiteHelper(dbPath);
  115. string sql = @"CREATE TABLE Expression(
  116. id integer primary key autoincrement not null ,
  117. expression_content varchar(500),
  118. expression_description varchar(500)
  119. )";
  120. db.ExecuteNonQuery(sql, null);
  121. }
  122. //创建配置表
  123. public static void CreateConfigTable()
  124. {
  125. //如果不存在改数据库文件,则创建该数据库文件
  126. if (!System.IO.File.Exists(dbPath))
  127. {
  128. SQLiteHelper.CreateDB(dbPath);
  129. }
  130. SQLiteHelper db = new SQLiteHelper(dbPath);
  131. string sql = @"CREATE TABLE Config(
  132. key varchar(100) primary key not null ,
  133. value varchar(500)
  134. )";
  135. db.ExecuteNonQuery(sql, null);
  136. }
  137. #endregion
  138. #region 数据库整体操作
  139. /// <summary>
  140. /// optmizeDatabase:从数据库中清空空闲列表
  141. /// </summary>
  142. public static int optmizeDatabase()
  143. {
  144. string sql = "vacuum";
  145. SQLiteHelper db = new SQLiteHelper(dbPath);
  146. SQLiteParameter[] parameters = new SQLiteParameter[] { };
  147. return db.ExecuteNonQuery(sql, parameters);
  148. }
  149. #endregion
  150. #region Patient表各类操作
  151. //Patient表的插入
  152. public static void InsertPatientData(string record_id,string name, string gender, double height, double weight,int pregnancy_times,DateTime birth_date,string phone,string address,string history,string diagnosis, string name_py)
  153. {
  154. string sql = "INSERT INTO Patient(p_record_id,p_name,p_gender,p_height,p_weight,p_pregnancy_time,p_birthdate,p_phone,p_address,p_history,p_diagnosis, p_name_py)"+
  155. "values(@record_id,@name,@gender,@height,@weight,@pregnancy_times,@birthdate,@phone,@address,@history,@diagnosis,@name_py)";
  156. SQLiteHelper db = new SQLiteHelper(dbPath);
  157. SQLiteParameter[] parameters = new SQLiteParameter[]{
  158. new SQLiteParameter("@record_id",record_id),
  159. new SQLiteParameter("@name",name),
  160. new SQLiteParameter("@gender",gender),
  161. new SQLiteParameter("@height",height),
  162. new SQLiteParameter("@weight",weight),
  163. new SQLiteParameter("@pregnancy_times",pregnancy_times),
  164. new SQLiteParameter("@birthdate",birth_date),
  165. new SQLiteParameter("@phone",phone),
  166. new SQLiteParameter("@address",address),
  167. new SQLiteParameter("@history",history),
  168. new SQLiteParameter("@diagnosis",diagnosis),
  169. new SQLiteParameter("@name_py",name_py),
  170. };
  171. db.ExecuteNonQuery(sql, parameters);
  172. }
  173. //Patient表的更新
  174. public static void UpdatePatientData(string id, string record_id, string name, string gender, double height, double weight, int pregnancy_times, DateTime birth_date, string phone, string address, string history, string diagnosis, string name_py)
  175. {
  176. //Boolean a = false;
  177. string sql = "UPDATE Patient SET p_record_id=@record_id,p_name=@name,p_gender=@gender,p_height=@height,p_weight=@weight,p_pregnancy_time=@pregnancy_times,p_birthdate=@birth_date,p_phone=@phone,p_address=@address,p_history=@history,p_diagnosis=@diagnosis,p_name_py=@name_py WHERE p_id=@id";
  178. SQLiteHelper db = new SQLiteHelper(dbPath);
  179. SQLiteParameter[] parameters = new SQLiteParameter[]{
  180. new SQLiteParameter("@record_id",record_id),
  181. new SQLiteParameter("@name",name),
  182. new SQLiteParameter("@gender",gender),
  183. new SQLiteParameter("@height",height),
  184. new SQLiteParameter("@weight",weight),
  185. new SQLiteParameter("@pregnancy_times",pregnancy_times),
  186. new SQLiteParameter("@birth_date",birth_date),
  187. new SQLiteParameter("@phone",phone),
  188. new SQLiteParameter("@address",address),
  189. new SQLiteParameter("@history",history),
  190. new SQLiteParameter("@diagnosis",diagnosis),
  191. new SQLiteParameter("@name_py",name_py),
  192. new SQLiteParameter("@id",id),
  193. };
  194. //System.Console.WriteLine(sql);
  195. db.ExecuteNonQuery(sql, parameters);
  196. }
  197. //Patient表的仅更新最后XX时间的方法
  198. //type 为 filter 或 evaluation
  199. public static void UpdatePatientDataWithLastDate(int id, string type, DateTime lastRecordDate)
  200. {
  201. string colum_select = "p_last_filter_time";
  202. if(type == "evaluation")
  203. colum_select = "p_last_evaluation_time";
  204. string sql = "UPDATE Patient SET " + colum_select + "=@lastRecordDate WHERE p_id=@id";
  205. SQLiteHelper db = new SQLiteHelper(dbPath);
  206. SQLiteParameter[] parameters = new SQLiteParameter[]{
  207. new SQLiteParameter("@lastRecordDate",lastRecordDate),
  208. new SQLiteParameter("@id",id)
  209. };
  210. db.ExecuteNonQuery(sql, parameters);
  211. }
  212. //Patient表记录的删除
  213. public static int DeletePatientItem(string id)
  214. {
  215. string sql = "UPDATE Patient SET p_delete_flag=1 WHERE p_id=@id";
  216. SQLiteHelper db = new SQLiteHelper(dbPath);
  217. SQLiteParameter[] parameters = new SQLiteParameter[]{
  218. new SQLiteParameter("@id",id)
  219. };
  220. return db.ExecuteNonQuery(sql, parameters);
  221. }
  222. /// <summary>
  223. /// getDeletedPatients:从Patient表中获取所有已被标记为删除的数据的id
  224. /// </summary>
  225. public static List<string> getDeletedPatients()
  226. {
  227. string sql = "SELECT p_id FROM Patient WHERE p_delete_flag = 1";
  228. SQLiteHelper db = new SQLiteHelper(dbPath);
  229. SQLiteParameter[] parameters = new SQLiteParameter[] { };
  230. List<string> result = new List<string>();
  231. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  232. {
  233. while (reader.Read())
  234. {
  235. string id = reader.IsDBNull(0) ? "" : reader.GetString(0);
  236. result.Add(id);
  237. }
  238. }
  239. return result;
  240. }
  241. /// <summary>
  242. /// realDeleteRecords:从Patient表中真实删除记录
  243. /// </summary>
  244. public static int realDeleteRecords()
  245. {
  246. string sql = "DELETE from Patient WHERE p_delete_flag=1";
  247. SQLiteHelper db = new SQLiteHelper(dbPath);
  248. SQLiteParameter[] parameters = new SQLiteParameter[]{ };
  249. return db.ExecuteNonQuery(sql, parameters);
  250. }
  251. //检查Patient表是否重复,条件提病例号.重复返回true,否则返回false
  252. public static bool checkRepeatPatient(string record_id)
  253. {
  254. string sql = "SELECT * FROM Patient WHERE p_record_id = @record_id AND p_delete_flag = 0";
  255. SQLiteHelper db = new SQLiteHelper(dbPath);
  256. SQLiteParameter[] parameters = new SQLiteParameter[]{
  257. new SQLiteParameter("@record_id",record_id)
  258. };
  259. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  260. {
  261. while (reader.Read())
  262. {
  263. reader.Close();
  264. return true;
  265. }
  266. }
  267. return false;
  268. }
  269. //通过id主键查找Patient
  270. public static Patient getPatientById(string id)
  271. {
  272. string sql = "SELECT * FROM Patient WHERE p_id = @id AND p_delete_flag = 0 LIMIT 1";
  273. SQLiteHelper db = new SQLiteHelper(dbPath);
  274. SQLiteParameter[] parameters = new SQLiteParameter[]{
  275. new SQLiteParameter("@id",id),
  276. };
  277. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  278. {
  279. while (reader.Read())
  280. {
  281. Patient temp = new Patient();
  282. temp.p_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  283. temp.p_name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  284. temp.p_name_py = reader.IsDBNull(2) ? "" : reader.GetString(2);
  285. temp.p_record_id = reader.IsDBNull(3) ? "" : reader.GetString(3);
  286. temp.p_gender = reader.IsDBNull(4) ? "" : reader.GetString(4);
  287. temp.p_birthdate = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  288. temp.p_height = reader.IsDBNull(6) ? 0 : reader.GetDouble(6);
  289. temp.p_weight = reader.IsDBNull(7) ? 0 : reader.GetDouble(7);
  290. temp.p_pregnancy_time = reader.IsDBNull(8) ? 0 : reader.GetInt32(8);
  291. temp.p_phone = reader.IsDBNull(9) ? "" : reader.GetString(9);
  292. temp.p_address = reader.IsDBNull(10) ? "" : reader.GetString(10);
  293. temp.p_history = reader.IsDBNull(11) ? "" : reader.GetString(11);
  294. temp.p_diagnosis = reader.IsDBNull(12) ? "" : reader.GetString(12);
  295. temp.doc_id = reader.IsDBNull(13) ? 0 : reader.GetInt32(13);
  296. temp.p_last_filter_time = reader.IsDBNull(14) ? DateTime.MinValue : reader.GetDateTime(14);
  297. temp.p_last_evaluation_time = reader.IsDBNull(15) ? DateTime.MinValue : reader.GetDateTime(15);
  298. temp.p_delete_flag = reader.IsDBNull(16) ? false : reader.GetBoolean(16); ;
  299. return temp;
  300. }
  301. }
  302. return null;
  303. }
  304. #endregion
  305. #region Question_template表的相关操作
  306. public static List<Question> getQuestions(string type = "filter")
  307. {
  308. List<Question> questions = new List<Question>();
  309. string condition = "q_type = 1";
  310. if(type == "evaluation")
  311. {
  312. condition = "q_type = 2";
  313. }
  314. string sql = "SELECT * FROM Question_template WHERE " + condition + " order by q_number asc";
  315. SQLiteHelper db = new SQLiteHelper(dbPath);
  316. SQLiteParameter[] parameters = new SQLiteParameter[]{};
  317. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  318. {
  319. while (reader.Read())
  320. {
  321. Question temp = new Question();
  322. temp.q_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  323. temp.q_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  324. temp.q_number = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  325. temp.q_title = reader.IsDBNull(3) ? "" : reader.GetString(3);
  326. temp.q_content = reader.IsDBNull(4) ? "" : reader.GetString(4);
  327. temp.prior_a_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  328. questions.Add(temp);
  329. }
  330. }
  331. return questions;
  332. }
  333. public static Question getQuestionById(int qid)
  334. {
  335. string sql = "SELECT * FROM Question_template WHERE q_id=@qid LIMIT 1";
  336. SQLiteHelper db = new SQLiteHelper(dbPath);
  337. SQLiteParameter[] parameters = new SQLiteParameter[]{
  338. new SQLiteParameter("@qid",qid),
  339. };
  340. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  341. {
  342. while (reader.Read())
  343. {
  344. Question temp = new Question();
  345. temp.q_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  346. temp.q_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  347. temp.q_number = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  348. temp.q_title = reader.IsDBNull(3) ? "" : reader.GetString(3);
  349. temp.q_content = reader.IsDBNull(4) ? "" : reader.GetString(4);
  350. temp.prior_a_id = reader.IsDBNull(5) ? 0 : reader.GetInt32(5);
  351. return temp;
  352. }
  353. }
  354. return null;
  355. }
  356. #endregion
  357. #region Answer_template表相关操作
  358. public static List<Answer> getAnswersByQid(int qid)
  359. {
  360. List<Answer> questions = new List<Answer>();
  361. string sql = "SELECT * FROM Answer_template WHERE q_id=@qid order by a_id asc";
  362. SQLiteHelper db = new SQLiteHelper(dbPath);
  363. SQLiteParameter[] parameters = new SQLiteParameter[]{
  364. new SQLiteParameter("@qid",qid),
  365. };
  366. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  367. {
  368. while (reader.Read())
  369. {
  370. Answer temp = new Answer();
  371. temp.a_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  372. temp.q_id = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  373. temp.a_content = reader.IsDBNull(2) ? "" : reader.GetString(2);
  374. temp.a_value = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  375. temp.next_q_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  376. temp.a_description_text = reader.IsDBNull(5) ? "" : reader.GetString(5);
  377. temp.a_description_img = reader.IsDBNull(6) ? "" : reader.GetString(6);
  378. temp.a_suggestion_text = reader.IsDBNull(7) ? "" : reader.GetString(7);
  379. temp.a_suggestion_img = reader.IsDBNull(8) ? "" : reader.GetString(8);
  380. questions.Add(temp);
  381. }
  382. }
  383. return questions;
  384. }
  385. public static Answer getAnswerById(int aid)
  386. {
  387. string sql = "SELECT * FROM Answer_template WHERE a_id=@aid LIMIT 1";
  388. SQLiteHelper db = new SQLiteHelper(dbPath);
  389. SQLiteParameter[] parameters = new SQLiteParameter[]{
  390. new SQLiteParameter("@aid",aid),
  391. };
  392. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  393. {
  394. while (reader.Read())
  395. {
  396. Answer temp = new Answer();
  397. temp.a_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  398. temp.q_id = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  399. temp.a_content = reader.IsDBNull(2) ? "" : reader.GetString(2);
  400. temp.a_value = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  401. temp.next_q_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  402. temp.a_description_text = reader.IsDBNull(5) ? "" : reader.GetString(5);
  403. temp.a_description_img = reader.IsDBNull(6) ? "" : reader.GetString(6);
  404. temp.a_suggestion_text = reader.IsDBNull(7) ? "" : reader.GetString(7);
  405. temp.a_suggestion_img = reader.IsDBNull(8) ? "" : reader.GetString(8);
  406. return temp;
  407. }
  408. }
  409. return null;
  410. }
  411. #endregion
  412. #region Record表相关操作
  413. /// <summary>
  414. /// 插入报告一份,并返回报告的ID
  415. /// </summary>
  416. /// <param name="r_type">1-筛查,2-评估</param>
  417. /// <param name="p_id">病例ID</param>
  418. /// <param name="d_id">医生ID</param>
  419. /// <param name="filter_id">如是评估报告,那么其遵顼的筛查记录ID</param>
  420. /// <param name="r_time">报告时间</param>
  421. /// <param name="r_count">报告计数</param>
  422. /// <param name="r_selection">报告内容</param>
  423. public static int insertRecord(int r_type, int p_id, int d_id, int filter_id, DateTime r_time, int r_count, string r_selection)
  424. {
  425. string sql = "INSERT INTO Record(r_type,p_id,d_id,filter_id,r_time,r_count,r_selection)" +
  426. "values(@r_type,@p_id,@d_id,@filter_id,@r_time,@r_count,@r_selection)";
  427. SQLiteHelper db = new SQLiteHelper(dbPath);
  428. SQLiteParameter[] parameters = new SQLiteParameter[]{
  429. new SQLiteParameter("@r_type",r_type),
  430. new SQLiteParameter("@p_id",p_id),
  431. new SQLiteParameter("@d_id",d_id),
  432. new SQLiteParameter("@filter_id",filter_id),
  433. new SQLiteParameter("@r_time",r_time),
  434. new SQLiteParameter("@r_count",r_count),
  435. new SQLiteParameter("@r_selection",r_selection)
  436. };
  437. db.ExecuteNonQuery(sql, parameters);
  438. //返回所插入的r_id
  439. sql = "SELECT MAX(r_id) FROM Record;";
  440. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  441. {
  442. while (reader.Read())
  443. {
  444. int max_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  445. return max_id;
  446. }
  447. }
  448. return 0;
  449. }
  450. /// <summary>
  451. /// 根据ID返回一份报告记录
  452. /// </summary>
  453. /// <param name="r_id">记录ID</param>
  454. public static Record getRecordByID(int r_id)
  455. {
  456. string sql = "SELECT * FROM Record WHERE r_id=@r_id LIMIT 1";
  457. SQLiteHelper db = new SQLiteHelper(dbPath);
  458. SQLiteParameter[] parameters = new SQLiteParameter[]{
  459. new SQLiteParameter("@r_id",r_id),
  460. };
  461. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  462. {
  463. while (reader.Read())
  464. {
  465. Record temp = new Record();
  466. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  467. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  468. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  469. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  470. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  471. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  472. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  473. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  474. return temp;
  475. }
  476. }
  477. return null;
  478. }
  479. /// <summary>
  480. /// 根据ID返回一份报告记录
  481. /// </summary>
  482. /// <param name="r_id">记录ID</param>
  483. public static List<Record> getRecordsByPid(int p_id)
  484. {
  485. string sql = "SELECT * FROM Record WHERE p_id=@p_id";
  486. SQLiteHelper db = new SQLiteHelper(dbPath);
  487. SQLiteParameter[] parameters = new SQLiteParameter[]{
  488. new SQLiteParameter("@p_id",p_id),
  489. };
  490. List<Record> results = new List<Record>();
  491. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  492. {
  493. while (reader.Read())
  494. {
  495. Record temp = new Record();
  496. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  497. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  498. if (temp.r_type == 2)
  499. temp.r_type_d = "评估报告";
  500. else
  501. temp.r_type_d = "筛查报告";
  502. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  503. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  504. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  505. temp.r_time = reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  506. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  507. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  508. results.Add(temp);
  509. }
  510. }
  511. return results;
  512. }
  513. /// <summary>
  514. /// 选取近days里某一病例的type类报告一份
  515. /// </summary>
  516. /// <param name="p_id">病例ID</param>
  517. /// <param name="r_type">1-筛查,2-评估</param>
  518. /// <param name="days">前多少天内有效</param>
  519. public static Record getLatestXTypeRecordInYDays(int p_id, int r_type, int days)
  520. {
  521. DateTime dt = DateTime.Now;
  522. string sql = "SELECT * FROM Record WHERE p_id=@p_id and r_time >=@r_time and r_type=@r_type LIMIT 1";
  523. SQLiteHelper db = new SQLiteHelper(dbPath);
  524. SQLiteParameter[] parameters = new SQLiteParameter[]{
  525. new SQLiteParameter("@p_id",p_id),
  526. new SQLiteParameter("@r_type",r_type),
  527. new SQLiteParameter("@r_time",dt.AddDays(-days)),
  528. };
  529. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  530. {
  531. while (reader.Read())
  532. {
  533. Record temp = new Record();
  534. temp.r_id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  535. temp.r_type = reader.IsDBNull(1) ? 0 : reader.GetInt32(1);
  536. temp.p_id = reader.IsDBNull(2) ? 0 : reader.GetInt32(2);
  537. temp.d_id = reader.IsDBNull(3) ? 0 : reader.GetInt32(3);
  538. temp.filter_id = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  539. temp.r_time =reader.IsDBNull(5) ? DateTime.MinValue : reader.GetDateTime(5);
  540. temp.r_count = reader.IsDBNull(6) ? 0 : reader.GetInt32(6);
  541. temp.r_selection = reader.IsDBNull(7) ? "" : reader.GetString(7);
  542. return temp;
  543. }
  544. }
  545. return null;
  546. }
  547. /// <summary>
  548. /// 将r_id对应的记录生成计数+1
  549. /// </summary>
  550. /// <param name="r_id">记录ID</param>
  551. public static int plusOneCountOnRecordByRid(int r_id)
  552. {
  553. string sql = "UPDATE Record SET r_count=r_count+1 WHERE r_id=@r_id";
  554. SQLiteHelper db = new SQLiteHelper(dbPath);
  555. SQLiteParameter[] parameters = new SQLiteParameter[]{
  556. new SQLiteParameter("@r_id",r_id)
  557. };
  558. return db.ExecuteNonQuery(sql, parameters);
  559. }
  560. #endregion
  561. #region doctor表相关的操作
  562. //医生登录操作
  563. public static doctor doctorLogin(string name,string passwordHash)
  564. {
  565. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag =0 LIMIT 1";
  566. SQLiteHelper db = new SQLiteHelper(dbPath);
  567. SQLiteParameter[] parameters = new SQLiteParameter[]{
  568. new SQLiteParameter("@name",name),
  569. new SQLiteParameter("@passwordHash",passwordHash),
  570. };
  571. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  572. {
  573. while (reader.Read())
  574. {
  575. doctor oneDoctor = new doctor();
  576. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  577. oneDoctor.name = name;
  578. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  579. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  580. oneDoctor.privilege_flag = reader.IsDBNull(6) ? -1 : reader.GetInt32(6);
  581. return oneDoctor;
  582. }
  583. }
  584. return null;
  585. }
  586. //主任登录操作
  587. public static doctor directorLogin(string name, string passwordHash)
  588. {
  589. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and director_flag = 1 LIMIT 1";
  590. SQLiteHelper db = new SQLiteHelper(dbPath);
  591. SQLiteParameter[] parameters = new SQLiteParameter[]{
  592. new SQLiteParameter("@name",name),
  593. new SQLiteParameter("@passwordHash",passwordHash),
  594. };
  595. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  596. {
  597. while (reader.Read())
  598. {
  599. doctor oneDoctor = new doctor();
  600. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  601. oneDoctor.name = name;
  602. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  603. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  604. return oneDoctor;
  605. }
  606. }
  607. return null;
  608. }
  609. //厂商登录操作
  610. public static doctor OEMLogin(string name, string passwordHash)
  611. {
  612. string sql = "SELECT * FROM Doctor WHERE name = @name and pwd_hash=@passwordHash and delete_flag = 0 and privilege_flag = 1 LIMIT 1";
  613. SQLiteHelper db = new SQLiteHelper(dbPath);
  614. SQLiteParameter[] parameters = new SQLiteParameter[]{
  615. new SQLiteParameter("@name",name),
  616. new SQLiteParameter("@passwordHash",passwordHash),
  617. };
  618. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  619. {
  620. while (reader.Read())
  621. {
  622. doctor oneDoctor = new doctor();
  623. oneDoctor.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  624. oneDoctor.name = name;
  625. oneDoctor.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  626. oneDoctor.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  627. return oneDoctor;
  628. }
  629. }
  630. return null;
  631. }
  632. //查询医生用户名是否存在 存在返回true
  633. public static bool checkRepeatDoctor(string name)
  634. {
  635. string sql = "SELECT * FROM Doctor WHERE name = @name AND delete_flag = 0";
  636. SQLiteHelper db = new SQLiteHelper(dbPath);
  637. SQLiteParameter[] parameters = new SQLiteParameter[]{
  638. new SQLiteParameter("@name",name)
  639. };
  640. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  641. {
  642. while (reader.Read())
  643. {
  644. reader.Close();
  645. return true;
  646. }
  647. }
  648. return false;
  649. }
  650. //通过id主键查找Doctor
  651. public static doctor getDoctorById(string id)
  652. {
  653. string sql = "SELECT * FROM Doctor WHERE id = @id AND delete_flag = 0 LIMIT 1";
  654. SQLiteHelper db = new SQLiteHelper(dbPath);
  655. SQLiteParameter[] parameters = new SQLiteParameter[]{
  656. new SQLiteParameter("@id",id),
  657. };
  658. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  659. {
  660. while (reader.Read())
  661. {
  662. doctor temp = new doctor();
  663. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  664. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  665. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  666. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  667. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  668. return temp;
  669. }
  670. }
  671. return null;
  672. }
  673. //查找Doctor 返回目前还使用的医生id
  674. public static int getDoctorIdByNoDelete()
  675. {
  676. string sql = "SELECT * FROM Doctor WHERE delete_flag = 0 LIMIT 1";
  677. SQLiteHelper db = new SQLiteHelper(dbPath);
  678. SQLiteParameter[] parameters = new SQLiteParameter[]{};
  679. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  680. {
  681. while (reader.Read())
  682. {
  683. doctor temp = new doctor();
  684. temp.id = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
  685. temp.name = reader.IsDBNull(1) ? "" : reader.GetString(1);
  686. temp.pwd_hash = reader.IsDBNull(2) ? "" : reader.GetString(2);
  687. temp.phone_number = reader.IsDBNull(3) ? "" : reader.GetString(3);
  688. temp.director_flag = reader.IsDBNull(4) ? 0 : reader.GetInt32(4);
  689. return temp.id;
  690. }
  691. }
  692. return -1;
  693. }
  694. //Doctort表的插入
  695. public static void InsertDoctorData(string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  696. {
  697. string sql = "INSERT INTO Doctor(name,pwd_hash,phone_number,director_flag,delete_flag)values(@name,@pwd_hash,@phone_number,@director_flag,@delete_flag)";
  698. SQLiteHelper db = new SQLiteHelper(dbPath);
  699. SQLiteParameter[] parameters = new SQLiteParameter[]{
  700. new SQLiteParameter("@name",name),
  701. new SQLiteParameter("@pwd_hash",pwd_hash),
  702. new SQLiteParameter("@phone_number",phone_number),
  703. new SQLiteParameter("@director_flag",director_flag),
  704. new SQLiteParameter("@delete_flag",delete_flag)
  705. };
  706. db.ExecuteNonQuery(sql, parameters);
  707. }
  708. //Doctor表的更新
  709. public static void UpdateDoctorData(string id, string name, string pwd_hash, string phone_number, Boolean director_flag = false, Boolean delete_flag = false)
  710. {
  711. //Boolean a = false;
  712. string sql = "UPDATE Doctor SET name=@name,pwd_hash=@pwd_hash,phone_number=@phone_number,director_flag=@director_flag,delete_flag=@delete_flag WHERE id=@id";
  713. SQLiteHelper db = new SQLiteHelper(dbPath);
  714. SQLiteParameter[] parameters = new SQLiteParameter[]{
  715. new SQLiteParameter("@name",name),
  716. new SQLiteParameter("@pwd_hash",pwd_hash),
  717. new SQLiteParameter("@phone_number",phone_number),
  718. new SQLiteParameter("@director_flag",director_flag),
  719. new SQLiteParameter("@delete_flag",delete_flag),
  720. new SQLiteParameter("@id",id)
  721. };
  722. db.ExecuteNonQuery(sql, parameters);
  723. }
  724. //Doctor表记录的删除
  725. public static int DeleteDoctorItem(string id)
  726. {
  727. string sql = "UPDATE Doctor SET delete_flag=1 WHERE id=@id";
  728. SQLiteHelper db = new SQLiteHelper(dbPath);
  729. SQLiteParameter[] parameters = new SQLiteParameter[]{
  730. new SQLiteParameter("@id",id)
  731. };
  732. return db.ExecuteNonQuery(sql, parameters);
  733. }
  734. #endregion
  735. #region 配置表Config的相关操作
  736. //查找所有的expression的content列
  737. public static void GetAllConfigContent(Dictionary<string, string> target)
  738. {
  739. target.Clear();
  740. string sql = "SELECT key,value FROM Config WHERE 1";
  741. SQLiteHelper db = new SQLiteHelper(dbPath);
  742. SQLiteParameter[] parameters = new SQLiteParameter[]{
  743. };
  744. using (SQLiteDataReader reader = db.ExecuteReader(sql, parameters))
  745. {
  746. while (reader.Read())
  747. {
  748. string tempKey = reader.IsDBNull(0) ? "" : reader.GetString(0);
  749. string tempValue = reader.IsDBNull(1) ? "" : reader.GetString(1);
  750. if (tempKey == "")
  751. {
  752. break;
  753. }
  754. //KeyValuePair<string, double> temp = new KeyValuePair<string, double>(tempKey,0);
  755. target.Add(tempKey, tempValue);
  756. }
  757. }
  758. }
  759. //更新激活码信息
  760. public static void UpdateRegisterCode(string name, string pw, string code)
  761. {
  762. //Boolean a = false;
  763. string sql = "UPDATE Config SET value=@name WHERE key='organization_name'";
  764. SQLiteHelper db = new SQLiteHelper(dbPath);
  765. SQLiteParameter[] parameters = new SQLiteParameter[]{
  766. new SQLiteParameter("@name",name)
  767. };
  768. db.ExecuteNonQuery(sql, parameters);
  769. sql = "UPDATE Config SET value=@pw WHERE key='organization_pw'";
  770. db = new SQLiteHelper(dbPath);
  771. parameters = new SQLiteParameter[]{
  772. new SQLiteParameter("@pw",pw)
  773. };
  774. db.ExecuteNonQuery(sql, parameters);
  775. sql = "UPDATE Config SET value=@code WHERE key='organization_active_code'";
  776. db = new SQLiteHelper(dbPath);
  777. parameters = new SQLiteParameter[]{
  778. new SQLiteParameter("@code",code)
  779. };
  780. db.ExecuteNonQuery(sql, parameters);
  781. }
  782. //更新血压单位显示hhmg或者kpa,如果为1则是hhmg
  783. public static void UpdateDocSetting(string value)
  784. {
  785. //Boolean a = false;
  786. string sql = "UPDATE Config SET value=@value WHERE key='bp_unit_mmhg'";
  787. SQLiteHelper db = new SQLiteHelper(dbPath);
  788. SQLiteParameter[] parameters = new SQLiteParameter[]{
  789. new SQLiteParameter("@value",value)
  790. };
  791. db.ExecuteNonQuery(sql, parameters);
  792. }
  793. //更新平滑参数
  794. public static void UpdateSmoothPara(int ori_pts, int ori_times, int dri_pts, int dri_times, int filter_when_saving)
  795. {
  796. //Boolean a = false;
  797. string sql = "UPDATE Config SET value=@ori_pts WHERE key='original_smooth_points'";
  798. SQLiteHelper db = new SQLiteHelper(dbPath);
  799. SQLiteParameter[] parameters = new SQLiteParameter[]{
  800. new SQLiteParameter("@ori_pts",ori_pts)
  801. };
  802. db.ExecuteNonQuery(sql, parameters);
  803. sql = "UPDATE Config SET value=@ori_times WHERE key='original_smooth_times'";
  804. db = new SQLiteHelper(dbPath);
  805. parameters = new SQLiteParameter[]{
  806. new SQLiteParameter("@ori_times",ori_times)
  807. };
  808. db.ExecuteNonQuery(sql, parameters);
  809. sql = "UPDATE Config SET value=@dri_pts WHERE key='derive_smooth_points'";
  810. db = new SQLiteHelper(dbPath);
  811. parameters = new SQLiteParameter[]{
  812. new SQLiteParameter("@dri_pts",dri_pts)
  813. };
  814. db.ExecuteNonQuery(sql, parameters);
  815. sql = "UPDATE Config SET value=@dri_times WHERE key='derive_smooth_times'";
  816. db = new SQLiteHelper(dbPath);
  817. parameters = new SQLiteParameter[]{
  818. new SQLiteParameter("@dri_times",dri_times)
  819. };
  820. db.ExecuteNonQuery(sql, parameters);
  821. sql = "UPDATE Config SET value=@filter_when_saving WHERE key='filter_when_saving'";
  822. db = new SQLiteHelper(dbPath);
  823. parameters = new SQLiteParameter[]{
  824. new SQLiteParameter("@filter_when_saving",filter_when_saving)
  825. };
  826. db.ExecuteNonQuery(sql, parameters);
  827. }
  828. //只更新特征值数列的平滑参数
  829. public static void UpdateEigenSmoothPara(int egi_pts, int egi_times)
  830. {
  831. //Boolean a = false;
  832. string sql = "UPDATE Config SET value=@egi_pts WHERE key='eigen_smooth_points'";
  833. SQLiteHelper db = new SQLiteHelper(dbPath);
  834. SQLiteParameter[] parameters = new SQLiteParameter[]{
  835. new SQLiteParameter("@egi_pts",egi_pts)
  836. };
  837. db.ExecuteNonQuery(sql, parameters);
  838. sql = "UPDATE Config SET value=@egi_times WHERE key='eigen_smooth_times'";
  839. db = new SQLiteHelper(dbPath);
  840. parameters = new SQLiteParameter[]{
  841. new SQLiteParameter("@egi_times",egi_times)
  842. };
  843. db.ExecuteNonQuery(sql, parameters);
  844. }
  845. //更新报告中report_figure_name
  846. public static void UpdateReportFigureName(string new_name)
  847. {
  848. string sql = "UPDATE Config SET value=@new_name WHERE key='report_figure_name'";
  849. SQLiteHelper db = new SQLiteHelper(dbPath);
  850. SQLiteParameter[] parameters = new SQLiteParameter[]{
  851. new SQLiteParameter("@new_name",new_name)
  852. };
  853. db.ExecuteNonQuery(sql, parameters);
  854. }
  855. //更新主公式等参数
  856. public static void UpdateGeneralExpression(string new_segment_name, string segement_threhold, string new_expression)
  857. {
  858. string sql = "UPDATE Config SET value=@new_segment_name WHERE key='segement_name'";
  859. SQLiteHelper db = new SQLiteHelper(dbPath);
  860. SQLiteParameter[] parameters = new SQLiteParameter[]{
  861. new SQLiteParameter("@new_segment_name",new_segment_name)
  862. };
  863. db.ExecuteNonQuery(sql, parameters);
  864. sql = "UPDATE Config SET value=@segement_threhold WHERE key='segement_threhold'";
  865. db = new SQLiteHelper(dbPath);
  866. parameters = new SQLiteParameter[]{
  867. new SQLiteParameter("@segement_threhold",segement_threhold)
  868. };
  869. db.ExecuteNonQuery(sql, parameters);
  870. sql = "UPDATE Config SET value=@new_expression WHERE key='general_expression'";
  871. db = new SQLiteHelper(dbPath);
  872. parameters = new SQLiteParameter[]{
  873. new SQLiteParameter("@new_expression",new_expression)
  874. };
  875. db.ExecuteNonQuery(sql, parameters);
  876. }
  877. #endregion
  878. #region 以下是测试功能,请在生产环境之前删除这些功能
  879. public static byte[] getRecordData()
  880. {
  881. string dbPathTest = @"D:\\sourceCode\\github\\Junde_New\bin\\Debug\\data\\data.db";
  882. string sql = "SELECT Data FROM Record WHERE id = 22";
  883. SQLiteHelper db = new SQLiteHelper(dbPathTest);
  884. Console.WriteLine("database ok!");
  885. using (SQLiteDataReader reader = db.ExecuteReader(sql, null))
  886. {
  887. byte[] buffer = null;
  888. if (reader.HasRows)
  889. {
  890. reader.Read();
  891. long len = reader.GetBytes(reader.GetOrdinal("Data"), 0, null, 0, 0);
  892. Console.WriteLine("len is :" + len.ToString());
  893. buffer = new byte[len];
  894. len = reader.GetBytes(reader.GetOrdinal("Data"), 0, buffer, 0, (int)len);
  895. for(int i =0;i<100;i++)
  896. {
  897. Console.WriteLine(buffer[i]);
  898. }
  899. return buffer;
  900. //System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
  901. //System.Drawing.Image iamge = System.Drawing.Image.FromStream(ms);
  902. //pictureBox1.Image = iamge;
  903. }
  904. }
  905. return null;
  906. }
  907. #endregion
  908. }
  909. }