MainPageViewModel.cs 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using ivf_tl_Entity;
  3. using ivf_tl_Entity.DebugEntitys;
  4. using ivf_tl_Entity.DTO;
  5. using ivf_tl_Entity.GlobalEntitys;
  6. using ivf_tl_Entity.GlobalEnums;
  7. using ivf_tl_Operate.Converts;
  8. using ivf_tl_Services;
  9. using Newtonsoft.Json;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.Globalization;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Runtime.Intrinsics.X86;
  17. using System.Security.Claims;
  18. using System.Security.RightsManagement;
  19. using System.Speech.AudioFormat;
  20. using System.Speech.Synthesis;
  21. using System.Text;
  22. using System.Threading;
  23. using System.Threading.Tasks;
  24. namespace ivf_tl_Operate.ViewModel
  25. {
  26. public partial class MainPageViewModel : ObservableObject
  27. {
  28. public MainPageViewModel(string tlsn)
  29. {
  30. this.tlsn = tlsn;
  31. InitExHouse();
  32. Init();
  33. StartMqtt();
  34. StartThread();
  35. StartSpeaker();
  36. }
  37. [ObservableProperty]
  38. private int alarmCount = 0;
  39. [ObservableProperty]
  40. private ExDish exDish1 = new ExDish();
  41. [ObservableProperty]
  42. private ExDish exDish2 = new ExDish();
  43. [ObservableProperty]
  44. private ExDish exDish3 = new ExDish();
  45. [ObservableProperty]
  46. private ExDish exDish4 = new ExDish();
  47. [ObservableProperty]
  48. private ExDish exDish5 = new ExDish();
  49. [ObservableProperty]
  50. private ExDish exDish6 = new ExDish();
  51. [ObservableProperty]
  52. private ExDish exDish7 = new ExDish();
  53. [ObservableProperty]
  54. private ExDish exDish8 = new ExDish();
  55. [ObservableProperty]
  56. private ExDish exDish9 = new ExDish();
  57. [ObservableProperty]
  58. private ExDish exDish10 = new ExDish();
  59. [ObservableProperty]
  60. private ExHouse exHouse1 = null;
  61. [ObservableProperty]
  62. private ExHouse exHouse2 = null;
  63. [ObservableProperty]
  64. private ExHouse exHouse3 = null;
  65. [ObservableProperty]
  66. private ExHouse exHouse4 = null;
  67. [ObservableProperty]
  68. private ExHouse exHouse5 = null;
  69. [ObservableProperty]
  70. private ExHouse exHouse6 = null;
  71. [ObservableProperty]
  72. private ExHouse exHouse7 = null;
  73. [ObservableProperty]
  74. private ExHouse exHouse8 = null;
  75. [ObservableProperty]
  76. private ExHouse exHouse9 = null;
  77. [ObservableProperty]
  78. private ExHouse exHouse10 = null;
  79. [ObservableProperty]
  80. private ExHouse exHouse11 = null;
  81. public ExBalance ExBalance1 { get; set; } = null;
  82. public ExBalance ExBalance2 { get; set; } = null;
  83. public ExBalance ExBalance3 { get; set; } = null;
  84. public ExBalance ExBalance4 { get; set; } = null;
  85. public ExBalance ExBalance5 { get; set; } = null;
  86. public ExBalance ExBalance6 { get; set; } = null;
  87. public ExBalance ExBalance7 { get; set; } = null;
  88. public ExBalance ExBalance8 { get; set; } = null;
  89. public ExBalance ExBalance9 { get; set; } = null;
  90. public ExBalance ExBalance10 { get; set; } = null;
  91. [ObservableProperty]
  92. private string hepaTimeString = null;
  93. [ObservableProperty]
  94. private string maintenanceTimeString = null;
  95. [ObservableProperty]
  96. private string runTimeString = null;
  97. public string tlsn { get; set; }
  98. private void InitExHouse()
  99. {
  100. ExHouse1 = new ExHouse() { tlSn = tlsn, houseSn = 1 };
  101. ExHouse2 = new ExHouse() { tlSn = tlsn, houseSn = 2 };
  102. ExHouse3 = new ExHouse() { tlSn = tlsn, houseSn = 3 };
  103. ExHouse4 = new ExHouse() { tlSn = tlsn, houseSn = 4 };
  104. ExHouse5 = new ExHouse() { tlSn = tlsn, houseSn = 5 };
  105. ExHouse6 = new ExHouse() { tlSn = tlsn, houseSn = 6 };
  106. ExHouse7 = new ExHouse() { tlSn = tlsn, houseSn = 7 };
  107. ExHouse8 = new ExHouse() { tlSn = tlsn, houseSn = 8 };
  108. ExHouse9 = new ExHouse() { tlSn = tlsn, houseSn = 9 };
  109. ExHouse10 = new ExHouse() { tlSn = tlsn, houseSn = 10 };
  110. ExHouse11 = new ExHouse() { tlSn = tlsn, houseSn = 11 };
  111. }
  112. public void Init()
  113. {
  114. GetHouseStateData getHouseStateData = AppData.Instance.HttpHelper.GetHouseCultureListApi(tlsn);
  115. InitDish(getHouseStateData.embryoCultureRecords);
  116. InitBalance(getHouseStateData.balances);
  117. InitHouse();
  118. }
  119. private void InitHouse()
  120. {
  121. ExHouse currentHouse = null;
  122. ExDish currentDish = null;
  123. ExBalance currentBalance = null;
  124. for (int i = 1; i < 11; i++)
  125. {
  126. currentHouse = HouseSnToExHouse(i);
  127. if (currentHouse == null) continue;
  128. currentDish = HouseSnToDish(i);
  129. currentBalance = HouseSnToExBalance(i);
  130. if (currentBalance == null && currentDish == null)
  131. {
  132. currentHouse.FaYuTime = "";
  133. currentHouse.StartTime = "";
  134. continue;
  135. }
  136. if (currentDish != null)
  137. {
  138. if (DateTime.TryParse(currentDish.startTime, out DateTime sou))
  139. {
  140. currentDish.SouJingTime = sou;
  141. var span = DateTime.Now.Subtract(sou);
  142. var allHour = (span.Days * 24) + span.Hours;
  143. if (allHour >= 168) currentHouse.FaYuTime = $"168h+";
  144. else currentHouse.FaYuTime = $"{allHour}h:{span.Minutes}m";
  145. currentHouse.StartTime = sou.ToString("MM-dd HH:mm");
  146. }
  147. else
  148. {
  149. currentHouse.FaYuTime = "";
  150. currentHouse.StartTime = "";
  151. }
  152. continue;
  153. }
  154. if (currentBalance != null)
  155. {
  156. if (DateTime.TryParse(currentBalance.startTime, out DateTime sou))
  157. {
  158. currentBalance.StartDateTime = sou;
  159. var span = DateTime.Now.Subtract(sou);
  160. var allHour = (span.Days * 24) + span.Hours;
  161. if (allHour >= 168) currentHouse.FaYuTime = $"168h+";
  162. else currentHouse.FaYuTime = $"{allHour}h:{span.Minutes}m";
  163. currentHouse.StartTime = sou.ToString("MM-dd HH:mm");
  164. }
  165. continue;
  166. }
  167. currentHouse.FaYuTime = "";
  168. currentHouse.StartTime = "";
  169. }
  170. }
  171. private void InitDish(List<ExDish> dishList)
  172. {
  173. //ExDish currentDish = null;
  174. //ExDish newDish = null;
  175. //for (int i = 1; i < 11; i++)
  176. //{
  177. // newDish = dishList.FirstOrDefault(x => x.houseSn == i);
  178. // currentDish = HouseSnToDish(i);
  179. // if (currentDish == null) continue;
  180. // if (newDish == null)
  181. // {
  182. // if (currentDish.id > 0) EndDish(i);
  183. // continue;
  184. // }
  185. // currentDish.id = newDish.id;
  186. // currentDish.state = newDish.state;
  187. // currentDish.houseSn = newDish.houseSn;
  188. // currentDish.caseId=newDish.caseId;
  189. // currentDish.wife = newDish.wife;
  190. // currentDish.husband = newDish.husband;
  191. // currentDish.wifeBirth=newDish.wifeBirth;
  192. // currentDish.husbandBirth = newDish.husbandBirth;
  193. // currentDish.vip = newDish.vip;
  194. // currentDish.state = newDish.state;
  195. // currentDish.startTime = newDish.startTime;
  196. // currentDish.fertilizationType = newDish.fertilizationType;
  197. // currentDish.fertilizationTypeId = newDish.fertilizationTypeId;
  198. // currentDish.embryoList = newDish.embryoList;
  199. // currentDish.embryoCount = newDish.embryoCount;
  200. //}
  201. ExDish1 = dishList.FirstOrDefault(x => x.houseSn == 1);
  202. ExDish2 = dishList.FirstOrDefault(x => x.houseSn == 2);
  203. ExDish3 = dishList.FirstOrDefault(x => x.houseSn == 3);
  204. ExDish4 = dishList.FirstOrDefault(x => x.houseSn == 4);
  205. ExDish5 = dishList.FirstOrDefault(x => x.houseSn == 5);
  206. ExDish6 = dishList.FirstOrDefault(x => x.houseSn == 6);
  207. ExDish7 = dishList.FirstOrDefault(x => x.houseSn == 7);
  208. ExDish8 = dishList.FirstOrDefault(x => x.houseSn == 8);
  209. ExDish9 = dishList.FirstOrDefault(x => x.houseSn == 9);
  210. ExDish10 = dishList.FirstOrDefault(x => x.houseSn == 10);
  211. //SetSouJingTime(ExDish1);
  212. //SetSouJingTime(ExDish2);
  213. //SetSouJingTime(ExDish3);
  214. //SetSouJingTime(ExDish4);
  215. //SetSouJingTime(ExDish5);
  216. //SetSouJingTime(ExDish6);
  217. //SetSouJingTime(ExDish7);
  218. //SetSouJingTime(ExDish8);
  219. //SetSouJingTime(ExDish9);
  220. //SetSouJingTime(ExDish10);
  221. }
  222. private void InitBalance(List<ExBalance> balanceList)
  223. {
  224. ExBalance1 = balanceList.FirstOrDefault(x => x.houseSn == 1);
  225. ExBalance2 = balanceList.FirstOrDefault(x => x.houseSn == 2);
  226. ExBalance3 = balanceList.FirstOrDefault(x => x.houseSn == 3);
  227. ExBalance4 = balanceList.FirstOrDefault(x => x.houseSn == 4);
  228. ExBalance5 = balanceList.FirstOrDefault(x => x.houseSn == 5);
  229. ExBalance6 = balanceList.FirstOrDefault(x => x.houseSn == 6);
  230. ExBalance7 = balanceList.FirstOrDefault(x => x.houseSn == 7);
  231. ExBalance8 = balanceList.FirstOrDefault(x => x.houseSn == 8);
  232. ExBalance9 = balanceList.FirstOrDefault(x => x.houseSn == 9);
  233. ExBalance10 = balanceList.FirstOrDefault(x => x.houseSn == 10);
  234. //SetSouJingTime(ExBalance1);
  235. //SetSouJingTime(ExBalance2);
  236. //SetSouJingTime(ExBalance3);
  237. //SetSouJingTime(ExBalance4);
  238. //SetSouJingTime(ExBalance5);
  239. //SetSouJingTime(ExBalance6);
  240. //SetSouJingTime(ExBalance7);
  241. //SetSouJingTime(ExBalance8);
  242. //SetSouJingTime(ExBalance9);
  243. //SetSouJingTime(ExBalance10);
  244. }
  245. /// <summary>
  246. /// 设置培养记录受精时间
  247. /// </summary>
  248. /// <param name="exDish"></param>
  249. private void SetSouJingTime(ExDish exDish)
  250. {
  251. if (exDish == null) return;
  252. if (DateTime.TryParse(exDish.startTime, out DateTime sou))
  253. {
  254. exDish.SouJingTime = sou;
  255. }
  256. var exhoue = HouseSnToExHouse(exDish.houseSn);
  257. if (exhoue == null)
  258. {
  259. return;
  260. }
  261. if (exDish.SouJingTime.HasValue)
  262. {
  263. var endTime = DateTime.Now;
  264. if (!string.IsNullOrEmpty(exDish.endTime))
  265. {
  266. DateTime.TryParse(exDish.endTime, out endTime);
  267. }
  268. var span = endTime.Subtract(exDish.SouJingTime.Value);
  269. exhoue.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
  270. exhoue.StartTime = exDish.SouJingTime.Value.ToString("MM-dd HH:mm");
  271. }
  272. }
  273. /// <summary>
  274. /// 设置平衡记录开始时间
  275. /// </summary>
  276. /// <param name="exBalance"></param>
  277. private void SetSouJingTime(ExBalance exBalance)
  278. {
  279. if (exBalance == null) return;
  280. if (DateTime.TryParse(exBalance.startTime, out DateTime sou))
  281. {
  282. exBalance.StartDateTime = sou;
  283. }
  284. var exhoue = HouseSnToExHouse(exBalance.houseSn);
  285. if (exhoue == null)
  286. {
  287. return;
  288. }
  289. if (exBalance.StartDateTime.HasValue)
  290. {
  291. var endTime = DateTime.Now;
  292. if (!string.IsNullOrEmpty(exBalance.endTime))
  293. {
  294. DateTime.TryParse(exBalance.endTime, out endTime);
  295. }
  296. var span = endTime.Subtract(exBalance.StartDateTime.Value);
  297. exhoue.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
  298. exhoue.StartTime = exBalance.StartDateTime.Value.ToString("MM-dd HH:mm");
  299. }
  300. }
  301. /// <summary>
  302. /// 结束培养
  303. /// </summary>
  304. /// <param name="houseSn"></param>
  305. public void EndDish(int houseSn)
  306. {
  307. switch (houseSn)
  308. {
  309. case 1:
  310. ExDish1 = new ExDish();
  311. break;
  312. case 2:
  313. ExDish2 = new ExDish();
  314. break;
  315. case 3:
  316. ExDish3 = new ExDish();
  317. break;
  318. case 4:
  319. ExDish4 = new ExDish();
  320. break;
  321. case 5:
  322. ExDish5 = new ExDish();
  323. break;
  324. case 6:
  325. ExDish6 = new ExDish();
  326. break;
  327. case 7:
  328. ExDish7 = new ExDish();
  329. break;
  330. case 8:
  331. ExDish8 = new ExDish();
  332. break;
  333. case 9:
  334. ExDish9 = new ExDish();
  335. break;
  336. case 10:
  337. ExDish10 = new ExDish();
  338. break;
  339. }
  340. var exhoue = HouseSnToExHouse(houseSn);
  341. if (exhoue == null) return;
  342. exhoue.FaYuTime = "";
  343. exhoue.StartTime = "";
  344. }
  345. public ExDish HouseSnToDish(int houseSn)
  346. {
  347. ExDish exDish = null;
  348. switch (houseSn)
  349. {
  350. case 1:
  351. exDish = ExDish1;
  352. break;
  353. case 2:
  354. exDish = ExDish2;
  355. break;
  356. case 3:
  357. exDish = ExDish3;
  358. break;
  359. case 4:
  360. exDish = ExDish4;
  361. break;
  362. case 5:
  363. exDish = ExDish5;
  364. break;
  365. case 6:
  366. exDish = ExDish6;
  367. break;
  368. case 7:
  369. exDish = ExDish7;
  370. break;
  371. case 8:
  372. exDish = ExDish8;
  373. break;
  374. case 9:
  375. exDish = ExDish9;
  376. break;
  377. case 10:
  378. exDish = ExDish10;
  379. break;
  380. }
  381. return exDish;
  382. }
  383. public ExHouse HouseSnToExHouse(int houseSn)
  384. {
  385. ExHouse ExHouse = null;
  386. switch (houseSn)
  387. {
  388. case 1:
  389. ExHouse = ExHouse1;
  390. break;
  391. case 2:
  392. ExHouse = ExHouse2;
  393. break;
  394. case 3:
  395. ExHouse = ExHouse3;
  396. break;
  397. case 4:
  398. ExHouse = ExHouse4;
  399. break;
  400. case 5:
  401. ExHouse = ExHouse5;
  402. break;
  403. case 6:
  404. ExHouse = ExHouse6;
  405. break;
  406. case 7:
  407. ExHouse = ExHouse7;
  408. break;
  409. case 8:
  410. ExHouse = ExHouse8;
  411. break;
  412. case 9:
  413. ExHouse = ExHouse9;
  414. break;
  415. case 10:
  416. ExHouse = ExHouse10;
  417. break;
  418. case 11:
  419. ExHouse = ExHouse11;
  420. break;
  421. }
  422. return ExHouse;
  423. }
  424. public ExBalance HouseSnToExBalance(int houseSn)
  425. {
  426. ExBalance exBalance = null;
  427. switch (houseSn)
  428. {
  429. case 1:
  430. exBalance = ExBalance1;
  431. break;
  432. case 2:
  433. exBalance = ExBalance2;
  434. break;
  435. case 3:
  436. exBalance = ExBalance3;
  437. break;
  438. case 4:
  439. exBalance = ExBalance4;
  440. break;
  441. case 5:
  442. exBalance = ExBalance5;
  443. break;
  444. case 6:
  445. exBalance = ExBalance6;
  446. break;
  447. case 7:
  448. exBalance = ExBalance7;
  449. break;
  450. case 8:
  451. exBalance = ExBalance8;
  452. break;
  453. case 9:
  454. exBalance = ExBalance9;
  455. break;
  456. case 10:
  457. exBalance = ExBalance10;
  458. break;
  459. }
  460. return exBalance;
  461. }
  462. /// <summary>
  463. /// 接受mqtt消息
  464. /// </summary>
  465. public void RecMqttMessage(string message)
  466. {
  467. try
  468. {
  469. List<ExHouse> exHouses = JsonConvert.DeserializeObject<List<ExHouse>>(message);
  470. //List<ExHouse> exHouses = new List<ExHouse>();
  471. for (int i = 1; i <= 11; i++)
  472. {
  473. ExHouse currentHouse = HouseSnToExHouse(i);
  474. if (currentHouse == null) continue;
  475. if (i == 11)
  476. {
  477. var exHouse11 = exHouses.FirstOrDefault(x => x.houseSn == i);
  478. if (exHouse11 == null) continue;
  479. currentHouse.pressure = exHouse11.pressure;
  480. //currentHouse.pressureDesc = exHouse11.pressureDesc;
  481. //currentHouse.houseDesc = exHouse11.houseDesc;
  482. currentHouse.PressureString = $"{currentHouse.pressure.ToString("f0")}mbar";
  483. switch (exHouse11.pressureDesc)
  484. {
  485. case "未知":
  486. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
  487. break;
  488. case "待补气":
  489. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0007");
  490. break;
  491. case "补气":
  492. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0006");
  493. break;
  494. case "正常":
  495. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0005");
  496. break;
  497. case "冲刷":
  498. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0301");
  499. break;
  500. case "排气":
  501. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0299");
  502. break;
  503. case "排队":
  504. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0300");
  505. break;
  506. default:
  507. currentHouse.pressureDesc=exHouse11.pressureDesc;
  508. break;
  509. }
  510. switch (exHouse11.houseDesc)
  511. {
  512. case "未知":
  513. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
  514. break;
  515. case "舱室换气":
  516. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0302");
  517. break;
  518. case "气压监测":
  519. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0282");
  520. break;
  521. case "缓冲瓶补气":
  522. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0283");
  523. break;
  524. case "握手准备":
  525. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0009");
  526. break;
  527. case "水平电机自检":
  528. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0010");
  529. break;
  530. case "垂直电机自检":
  531. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0012");
  532. break;
  533. case "调试状态":
  534. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0013");
  535. break;
  536. case "空闲监测":
  537. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0014");
  538. break;
  539. case "温压监测平衡":
  540. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0008");
  541. break;
  542. case "温压监测":
  543. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0015");
  544. break;
  545. case "气体交换":
  546. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0016");
  547. break;
  548. case "气体交换平衡":
  549. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0280");
  550. break;
  551. default:
  552. if (exHouse11.houseDesc.Contains("自动对焦"))
  553. {
  554. currentHouse.houseDesc = exHouse11.houseDesc.Replace("自动对焦", KeyToStringConvert.GetLanguageStringByKey("C0017"));
  555. }else if (exHouse11.houseDesc.Contains("胚胎拍照"))
  556. {
  557. currentHouse.houseDesc = exHouse11.houseDesc.Replace("胚胎拍照", KeyToStringConvert.GetLanguageStringByKey("C0018"));
  558. }
  559. else
  560. {
  561. currentHouse.houseDesc = exHouse11.houseDesc;
  562. }
  563. break;
  564. }
  565. continue;
  566. }
  567. var exHouse = exHouses.FirstOrDefault(x => x.houseSn == i);
  568. if (exHouse != null)
  569. {
  570. currentHouse.pressureAlarm = exHouse.pressureAlarm;
  571. currentHouse.temperatureAlarm = exHouse.temperatureAlarm;
  572. currentHouse.pressure = exHouse.pressure;
  573. currentHouse.temperature = exHouse.temperature;
  574. currentHouse.houseDoorState = exHouse.houseDoorState;
  575. //currentHouse.pressureDesc = exHouse.pressureDesc;
  576. //currentHouse.houseDesc = exHouse.houseDesc;
  577. currentHouse.PressureString = $"{currentHouse.pressure.ToString("f0")}mbar";
  578. currentHouse.TemperatureSring = $"{currentHouse.temperature.ToString("f2")}℃";
  579. switch (exHouse.pressureDesc)
  580. {
  581. case "未知":
  582. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
  583. break;
  584. case "待补气":
  585. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0007");
  586. break;
  587. case "补气":
  588. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0006");
  589. break;
  590. case "正常":
  591. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0005");
  592. break;
  593. case "冲刷":
  594. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0301");
  595. break;
  596. case "排气":
  597. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0299");
  598. break;
  599. case "排队":
  600. currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0300");
  601. break;
  602. default:
  603. currentHouse.pressureDesc = exHouse.pressureDesc;
  604. break;
  605. }
  606. switch (exHouse.houseDesc)
  607. {
  608. case "未知":
  609. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
  610. break;
  611. case "握手准备":
  612. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0009");
  613. break;
  614. case "水平电机自检":
  615. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0010");
  616. break;
  617. case "垂直电机自检":
  618. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0012");
  619. break;
  620. case "调试状态":
  621. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0013");
  622. break;
  623. case "空闲监测":
  624. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0014");
  625. break;
  626. case "温压监测平衡":
  627. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0008");
  628. break;
  629. case "温压监测":
  630. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0015");
  631. break;
  632. case "气体交换":
  633. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0016");
  634. break;
  635. case "气体交换平衡":
  636. currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0280");
  637. break;
  638. default:
  639. if (exHouse.houseDesc.Contains("自动对焦"))
  640. {
  641. currentHouse.houseDesc = exHouse.houseDesc.Replace("自动对焦", KeyToStringConvert.GetLanguageStringByKey("C0017"));
  642. }
  643. else if (exHouse.houseDesc.Contains("胚胎拍照"))
  644. {
  645. currentHouse.houseDesc = exHouse.houseDesc.Replace("胚胎拍照", KeyToStringConvert.GetLanguageStringByKey("C0018"));
  646. }
  647. else
  648. {
  649. currentHouse.houseDesc = exHouse.houseDesc;
  650. }
  651. break;
  652. }
  653. }
  654. continue;
  655. var currentBalance = HouseSnToExBalance(i);
  656. if (currentBalance != null && currentBalance.StartDateTime.HasValue)
  657. {
  658. var endTime = DateTime.Now;
  659. if (!string.IsNullOrEmpty(currentBalance.endTime))
  660. {
  661. DateTime.TryParse(currentBalance.endTime, out endTime);
  662. }
  663. var span = endTime.Subtract(currentBalance.StartDateTime.Value);
  664. currentHouse.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
  665. currentHouse.StartTime = currentBalance.StartDateTime.Value.ToString("MM-dd HH:mm");
  666. }
  667. var currentDish = HouseSnToDish(i);
  668. if (currentDish != null && currentDish.SouJingTime.HasValue)
  669. {
  670. var endTime = DateTime.Now;
  671. if (!string.IsNullOrEmpty(currentDish.endTime))
  672. {
  673. DateTime.TryParse(currentDish.endTime, out endTime);
  674. }
  675. var span = endTime.Subtract(currentDish.SouJingTime.Value);
  676. currentHouse.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
  677. currentHouse.StartTime = currentDish.SouJingTime.Value.ToString("MM-dd HH:mm");
  678. }
  679. }
  680. }
  681. catch (Exception ex)
  682. {
  683. AppData.Instance.LogHelper.ExceptionLog(ex, "解析mqtt消息", LogEnum.RunException);
  684. }
  685. }
  686. public void StartThread()
  687. {
  688. Task.Factory.StartNew(async () =>
  689. {
  690. string yunxing = KeyToStringConvert.GetLanguageStringByKey("C0001");
  691. string genghuang = KeyToStringConvert.GetLanguageStringByKey("C0002");
  692. string baoyang = KeyToStringConvert.GetLanguageStringByKey("C0003");
  693. string tian = KeyToStringConvert.GetLanguageStringByKey("C0004");
  694. while (true)
  695. {
  696. try
  697. {
  698. AlarmCount = AppData.Instance.HttpHelper.SearchAlarmHistoryNumApi(new SearchAlarmResponse { current = 1, selectType = 2, size = 5, tlSn = AppData.Instance.TlSn }).current;
  699. var a = AppData.Instance.HttpHelper.TlInfoTimeApi(tlsn);
  700. if (a == null) continue;
  701. if (a.runTime > 9999) RunTimeString = $"{yunxing}:9999+{tian}";/*RunTimeString = $"运行时间:9999+天";*/
  702. else RunTimeString = $"{yunxing}:{a.runTime}{tian}";/*RunTimeString = $"运行时间:{a.runTime}天";*/
  703. if (a.maintenanceTime > 9999) MaintenanceTimeString = $"{baoyang}:9999+{tian}";/*MaintenanceTimeString = $"保养倒计时:9999+天";*/
  704. else MaintenanceTimeString = $"{baoyang}:{a.maintenanceTime}{tian}";/*MaintenanceTimeString = $"保养倒计时:{a.maintenanceTime}天";*/
  705. if (a.hepatime > 9999) HepaTimeString = $"{genghuang}:9999+{tian}";/*HepaTimeString = $"更换HEPA时间:9999+天";*/
  706. else HepaTimeString = $"{genghuang}:{a.hepatime}{tian}";/* HepaTimeString = $"更换HEPA时间:{a.hepatime}天";*/
  707. Init();
  708. }
  709. catch (Exception ex)
  710. {
  711. AppData.Instance.LogHelper.ExceptionLog(ex, "定时刷新", LogEnum.RunException);
  712. }
  713. finally
  714. {
  715. await Task.Delay(1000 * 5);
  716. }
  717. }
  718. }, TaskCreationOptions.LongRunning);
  719. Task.Factory.StartNew(async () =>
  720. {
  721. string newPath = "";
  722. while (true)
  723. {
  724. try
  725. {
  726. if(AppData.Instance.TLSettingCommon.cleanSurfaceData != 0)
  727. {
  728. newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs";
  729. DeleteLogDir(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
  730. newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs\\Log";
  731. DeleteLogFile(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
  732. newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs\\LogError";
  733. DeleteLogFile(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
  734. }
  735. }
  736. catch (Exception ex)
  737. {
  738. AppData.Instance.LogHelper.ExceptionLog(ex, "DeleteLog", LogEnum.RunException);
  739. }
  740. finally
  741. {
  742. await Task.Delay(1000 * 60 * 60 * 12);
  743. }
  744. }
  745. }, TaskCreationOptions.LongRunning);
  746. }
  747. private void DeleteLogDir(string newPath,int day)
  748. {
  749. var newDir = Directory.GetDirectories(newPath, "*", SearchOption.TopDirectoryOnly);
  750. string dirName = "";
  751. DateTime dirTime = DateTime.Now;
  752. DateTime nowTime = dirTime;
  753. foreach (var item in newDir)
  754. {
  755. dirName = System.IO.Path.GetFileName(item);
  756. if (DateTime.TryParse(dirName, out dirTime))
  757. {
  758. if (nowTime.Subtract(dirTime).Days >= day)
  759. {
  760. try
  761. {
  762. Directory.Delete(item, true);
  763. }
  764. catch (Exception)
  765. {
  766. continue;
  767. }
  768. }
  769. }
  770. }
  771. }
  772. private void DeleteLogFile(string newPath,int day)
  773. {
  774. var newDir = Directory.GetFiles(newPath, "*.htm", SearchOption.TopDirectoryOnly);
  775. string fileName = "";
  776. DateTime fileTime = DateTime.Now;
  777. DateTime nowTime = fileTime;
  778. foreach (var item in newDir)
  779. {
  780. fileName = System.IO.Path.GetFileNameWithoutExtension(item);
  781. if (fileName.Length == 8)
  782. {
  783. fileName = fileName.Insert(6, "-");
  784. fileName = fileName.Insert(4, "-");
  785. if (DateTime.TryParse(fileName, out fileTime))
  786. {
  787. if (nowTime.Subtract(fileTime).Days >= day)
  788. {
  789. try
  790. {
  791. File.Delete(item);
  792. }
  793. catch (Exception)
  794. {
  795. continue;
  796. }
  797. }
  798. }
  799. }
  800. }
  801. }
  802. public void StartMqtt()
  803. {
  804. AppData.Instance.MqttHelper.MessEvent -= RecMqttMessage;
  805. AppData.Instance.MqttHelper.MessEvent += RecMqttMessage;
  806. AppData.Instance.MqttHelper.StartMqtt();
  807. }
  808. List<long> ReadAlarmId = new List<long>();
  809. Queue<AlarmHistoryEntity> AlarmQueue = new Queue<AlarmHistoryEntity>();
  810. private object AlarmQueueLock = new object();
  811. public void StartSpeaker()
  812. {
  813. Task.Factory.StartNew(async () =>
  814. {
  815. SpeechSynthesizer speech = new SpeechSynthesizer();
  816. speech.Volume = 100;
  817. var currentVoiceInfo = speech.GetInstalledVoices(CultureInfo.CurrentCulture).FirstOrDefault();
  818. if (currentVoiceInfo != null) speech.SelectVoice(currentVoiceInfo.VoiceInfo.Name);
  819. AlarmHistoryResult alarmHistoryResult = null;
  820. AlarmHistoryEntity currentAlarm = null;
  821. string yiqi = KeyToStringConvert.GetLanguageStringByKey("C0230");
  822. string huanchongp = KeyToStringConvert.GetLanguageStringByKey("C0231");
  823. string hcs = KeyToStringConvert.GetLanguageStringByKey("C0056");
  824. int dataCount = 0;
  825. string houseSnString = null;
  826. string speakText = "";
  827. while (true)
  828. {
  829. try
  830. {
  831. currentAlarm = AlarmDequeue();
  832. if (currentAlarm != null && currentAlarm.mute == 0)
  833. {
  834. if (currentAlarm.houseSn == 0)
  835. {
  836. //houseSnString = "时差仪器";
  837. houseSnString = yiqi;
  838. }
  839. else if (currentAlarm.houseSn == 11)
  840. {
  841. //houseSnString = "缓冲瓶";
  842. houseSnString = huanchongp;
  843. }
  844. else
  845. {
  846. //houseSnString = $"{currentAlarm.houseSn}号舱室";
  847. houseSnString = $"{currentAlarm.houseSn}{hcs}";
  848. }
  849. speakText = $"{houseSnString}{currentAlarm.title}";
  850. speech.Speak(speakText);
  851. }
  852. currentAlarm = null;
  853. if (!AlarmQueueAny())
  854. {
  855. //ReadAlarmId.Clear();
  856. alarmHistoryResult = AppData.Instance.HttpHelper.SearchAlarmHistoryApi(new SearchAlarmResponse { current = 1, selectType = 2, size = 999, tlSn = AppData.Instance.TlSn });
  857. if (alarmHistoryResult.IsSuccess)
  858. {
  859. dataCount = 0;
  860. foreach (var item in alarmHistoryResult.records)
  861. {
  862. //if (ReadAlarmId.Contains(item.id)) continue;
  863. //ReadAlarmId.Add(item.id);
  864. if (item.mute == 0)
  865. {
  866. AlarmEnqueue(item);
  867. dataCount++;
  868. }
  869. }
  870. if (dataCount == 0) await Task.Delay(5000);
  871. }
  872. else
  873. {
  874. await Task.Delay(5000);
  875. }
  876. await Task.Delay(1000);
  877. }
  878. }
  879. catch (Exception ex)
  880. {
  881. AppData.Instance.LogHelper.ExceptionLog(ex, $"语音报警:{speakText}", LogEnum.RunException);
  882. }
  883. finally
  884. {
  885. await Task.Delay(100);
  886. }
  887. }
  888. }, TaskCreationOptions.LongRunning);
  889. }
  890. public void SetAlarmMute(long id, int mute)
  891. {
  892. try
  893. {
  894. lock (AlarmQueueLock)
  895. {
  896. var aa = AlarmQueue.FirstOrDefault(x => x.id == id);
  897. if (aa != null) aa.mute = mute;
  898. }
  899. }
  900. catch (Exception ex)
  901. {
  902. AppData.Instance.LogHelper.ExceptionLog(ex, "SetAlarmMute", LogEnum.RunException);
  903. }
  904. }
  905. private void AlarmEnqueue(AlarmHistoryEntity alarmHistoryEntity)
  906. {
  907. try
  908. {
  909. lock (AlarmQueueLock)
  910. {
  911. AlarmQueue.Enqueue(alarmHistoryEntity);
  912. }
  913. }
  914. catch (Exception ex)
  915. {
  916. AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmEnqueue", LogEnum.RunException);
  917. }
  918. }
  919. private AlarmHistoryEntity AlarmDequeue()
  920. {
  921. try
  922. {
  923. lock (AlarmQueueLock)
  924. {
  925. if (AlarmQueue.Any()) return AlarmQueue.Dequeue();
  926. }
  927. return null;
  928. }
  929. catch (Exception ex)
  930. {
  931. AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmDequeue", LogEnum.RunException);
  932. return null;
  933. }
  934. }
  935. private bool AlarmQueueAny()
  936. {
  937. try
  938. {
  939. lock (AlarmQueueLock) return AlarmQueue.Any();
  940. }
  941. catch (Exception ex)
  942. {
  943. AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmQueueAny", LogEnum.RunException);
  944. lock (AlarmQueueLock) AlarmQueue.Clear();
  945. return false;
  946. }
  947. }
  948. }
  949. }