| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023 |
- using CommunityToolkit.Mvvm.ComponentModel;
- using ivf_tl_Entity;
- using ivf_tl_Entity.DebugEntitys;
- using ivf_tl_Entity.DTO;
- using ivf_tl_Entity.GlobalEntitys;
- using ivf_tl_Entity.GlobalEnums;
- using ivf_tl_Operate.Converts;
- using ivf_tl_Services;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Globalization;
- using System.IO;
- using System.Linq;
- using System.Runtime.Intrinsics.X86;
- using System.Security.Claims;
- using System.Security.RightsManagement;
- using System.Speech.AudioFormat;
- using System.Speech.Synthesis;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ivf_tl_Operate.ViewModel
- {
- public partial class MainPageViewModel : ObservableObject
- {
- public MainPageViewModel(string tlsn)
- {
- this.tlsn = tlsn;
- InitExHouse();
- Init();
- StartMqtt();
- StartThread();
- StartSpeaker();
- }
- [ObservableProperty]
- private int alarmCount = 0;
- [ObservableProperty]
- private ExDish exDish1 = new ExDish();
- [ObservableProperty]
- private ExDish exDish2 = new ExDish();
- [ObservableProperty]
- private ExDish exDish3 = new ExDish();
- [ObservableProperty]
- private ExDish exDish4 = new ExDish();
- [ObservableProperty]
- private ExDish exDish5 = new ExDish();
- [ObservableProperty]
- private ExDish exDish6 = new ExDish();
- [ObservableProperty]
- private ExDish exDish7 = new ExDish();
- [ObservableProperty]
- private ExDish exDish8 = new ExDish();
- [ObservableProperty]
- private ExDish exDish9 = new ExDish();
- [ObservableProperty]
- private ExDish exDish10 = new ExDish();
- [ObservableProperty]
- private ExHouse exHouse1 = null;
- [ObservableProperty]
- private ExHouse exHouse2 = null;
- [ObservableProperty]
- private ExHouse exHouse3 = null;
- [ObservableProperty]
- private ExHouse exHouse4 = null;
- [ObservableProperty]
- private ExHouse exHouse5 = null;
- [ObservableProperty]
- private ExHouse exHouse6 = null;
- [ObservableProperty]
- private ExHouse exHouse7 = null;
- [ObservableProperty]
- private ExHouse exHouse8 = null;
- [ObservableProperty]
- private ExHouse exHouse9 = null;
- [ObservableProperty]
- private ExHouse exHouse10 = null;
- [ObservableProperty]
- private ExHouse exHouse11 = null;
- public ExBalance ExBalance1 { get; set; } = null;
- public ExBalance ExBalance2 { get; set; } = null;
- public ExBalance ExBalance3 { get; set; } = null;
- public ExBalance ExBalance4 { get; set; } = null;
- public ExBalance ExBalance5 { get; set; } = null;
- public ExBalance ExBalance6 { get; set; } = null;
- public ExBalance ExBalance7 { get; set; } = null;
- public ExBalance ExBalance8 { get; set; } = null;
- public ExBalance ExBalance9 { get; set; } = null;
- public ExBalance ExBalance10 { get; set; } = null;
- [ObservableProperty]
- private string hepaTimeString = null;
- [ObservableProperty]
- private string maintenanceTimeString = null;
- [ObservableProperty]
- private string runTimeString = null;
- public string tlsn { get; set; }
- private void InitExHouse()
- {
- ExHouse1 = new ExHouse() { tlSn = tlsn, houseSn = 1 };
- ExHouse2 = new ExHouse() { tlSn = tlsn, houseSn = 2 };
- ExHouse3 = new ExHouse() { tlSn = tlsn, houseSn = 3 };
- ExHouse4 = new ExHouse() { tlSn = tlsn, houseSn = 4 };
- ExHouse5 = new ExHouse() { tlSn = tlsn, houseSn = 5 };
- ExHouse6 = new ExHouse() { tlSn = tlsn, houseSn = 6 };
- ExHouse7 = new ExHouse() { tlSn = tlsn, houseSn = 7 };
- ExHouse8 = new ExHouse() { tlSn = tlsn, houseSn = 8 };
- ExHouse9 = new ExHouse() { tlSn = tlsn, houseSn = 9 };
- ExHouse10 = new ExHouse() { tlSn = tlsn, houseSn = 10 };
- ExHouse11 = new ExHouse() { tlSn = tlsn, houseSn = 11 };
- }
- public void Init()
- {
- GetHouseStateData getHouseStateData = AppData.Instance.HttpHelper.GetHouseCultureListApi(tlsn);
- InitDish(getHouseStateData.embryoCultureRecords);
- InitBalance(getHouseStateData.balances);
- InitHouse();
- }
- private void InitHouse()
- {
- ExHouse currentHouse = null;
- ExDish currentDish = null;
- ExBalance currentBalance = null;
- for (int i = 1; i < 11; i++)
- {
- currentHouse = HouseSnToExHouse(i);
- if (currentHouse == null) continue;
- currentDish = HouseSnToDish(i);
- currentBalance = HouseSnToExBalance(i);
- if (currentBalance == null && currentDish == null)
- {
- currentHouse.FaYuTime = "";
- currentHouse.StartTime = "";
- continue;
- }
- if (currentDish != null)
- {
- if (DateTime.TryParse(currentDish.startTime, out DateTime sou))
- {
- currentDish.SouJingTime = sou;
- var span = DateTime.Now.Subtract(sou);
- var allHour = (span.Days * 24) + span.Hours;
- if (allHour >= 168) currentHouse.FaYuTime = $"168h+";
- else currentHouse.FaYuTime = $"{allHour}h:{span.Minutes}m";
- currentHouse.StartTime = sou.ToString("MM-dd HH:mm");
- }
- else
- {
- currentHouse.FaYuTime = "";
- currentHouse.StartTime = "";
- }
- continue;
- }
- if (currentBalance != null)
- {
- if (DateTime.TryParse(currentBalance.startTime, out DateTime sou))
- {
- currentBalance.StartDateTime = sou;
- var span = DateTime.Now.Subtract(sou);
- var allHour = (span.Days * 24) + span.Hours;
- if (allHour >= 168) currentHouse.FaYuTime = $"168h+";
- else currentHouse.FaYuTime = $"{allHour}h:{span.Minutes}m";
- currentHouse.StartTime = sou.ToString("MM-dd HH:mm");
- }
- continue;
- }
- currentHouse.FaYuTime = "";
- currentHouse.StartTime = "";
- }
- }
- private void InitDish(List<ExDish> dishList)
- {
- //ExDish currentDish = null;
- //ExDish newDish = null;
- //for (int i = 1; i < 11; i++)
- //{
- // newDish = dishList.FirstOrDefault(x => x.houseSn == i);
- // currentDish = HouseSnToDish(i);
- // if (currentDish == null) continue;
- // if (newDish == null)
- // {
- // if (currentDish.id > 0) EndDish(i);
- // continue;
- // }
- // currentDish.id = newDish.id;
- // currentDish.state = newDish.state;
- // currentDish.houseSn = newDish.houseSn;
- // currentDish.caseId=newDish.caseId;
- // currentDish.wife = newDish.wife;
- // currentDish.husband = newDish.husband;
- // currentDish.wifeBirth=newDish.wifeBirth;
- // currentDish.husbandBirth = newDish.husbandBirth;
- // currentDish.vip = newDish.vip;
- // currentDish.state = newDish.state;
- // currentDish.startTime = newDish.startTime;
- // currentDish.fertilizationType = newDish.fertilizationType;
- // currentDish.fertilizationTypeId = newDish.fertilizationTypeId;
- // currentDish.embryoList = newDish.embryoList;
- // currentDish.embryoCount = newDish.embryoCount;
- //}
- ExDish1 = dishList.FirstOrDefault(x => x.houseSn == 1);
- ExDish2 = dishList.FirstOrDefault(x => x.houseSn == 2);
- ExDish3 = dishList.FirstOrDefault(x => x.houseSn == 3);
- ExDish4 = dishList.FirstOrDefault(x => x.houseSn == 4);
- ExDish5 = dishList.FirstOrDefault(x => x.houseSn == 5);
- ExDish6 = dishList.FirstOrDefault(x => x.houseSn == 6);
- ExDish7 = dishList.FirstOrDefault(x => x.houseSn == 7);
- ExDish8 = dishList.FirstOrDefault(x => x.houseSn == 8);
- ExDish9 = dishList.FirstOrDefault(x => x.houseSn == 9);
- ExDish10 = dishList.FirstOrDefault(x => x.houseSn == 10);
- //SetSouJingTime(ExDish1);
- //SetSouJingTime(ExDish2);
- //SetSouJingTime(ExDish3);
- //SetSouJingTime(ExDish4);
- //SetSouJingTime(ExDish5);
- //SetSouJingTime(ExDish6);
- //SetSouJingTime(ExDish7);
- //SetSouJingTime(ExDish8);
- //SetSouJingTime(ExDish9);
- //SetSouJingTime(ExDish10);
- }
- private void InitBalance(List<ExBalance> balanceList)
- {
- ExBalance1 = balanceList.FirstOrDefault(x => x.houseSn == 1);
- ExBalance2 = balanceList.FirstOrDefault(x => x.houseSn == 2);
- ExBalance3 = balanceList.FirstOrDefault(x => x.houseSn == 3);
- ExBalance4 = balanceList.FirstOrDefault(x => x.houseSn == 4);
- ExBalance5 = balanceList.FirstOrDefault(x => x.houseSn == 5);
- ExBalance6 = balanceList.FirstOrDefault(x => x.houseSn == 6);
- ExBalance7 = balanceList.FirstOrDefault(x => x.houseSn == 7);
- ExBalance8 = balanceList.FirstOrDefault(x => x.houseSn == 8);
- ExBalance9 = balanceList.FirstOrDefault(x => x.houseSn == 9);
- ExBalance10 = balanceList.FirstOrDefault(x => x.houseSn == 10);
- //SetSouJingTime(ExBalance1);
- //SetSouJingTime(ExBalance2);
- //SetSouJingTime(ExBalance3);
- //SetSouJingTime(ExBalance4);
- //SetSouJingTime(ExBalance5);
- //SetSouJingTime(ExBalance6);
- //SetSouJingTime(ExBalance7);
- //SetSouJingTime(ExBalance8);
- //SetSouJingTime(ExBalance9);
- //SetSouJingTime(ExBalance10);
- }
- /// <summary>
- /// 设置培养记录受精时间
- /// </summary>
- /// <param name="exDish"></param>
- private void SetSouJingTime(ExDish exDish)
- {
- if (exDish == null) return;
- if (DateTime.TryParse(exDish.startTime, out DateTime sou))
- {
- exDish.SouJingTime = sou;
- }
- var exhoue = HouseSnToExHouse(exDish.houseSn);
- if (exhoue == null)
- {
- return;
- }
- if (exDish.SouJingTime.HasValue)
- {
- var endTime = DateTime.Now;
- if (!string.IsNullOrEmpty(exDish.endTime))
- {
- DateTime.TryParse(exDish.endTime, out endTime);
- }
- var span = endTime.Subtract(exDish.SouJingTime.Value);
- exhoue.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
- exhoue.StartTime = exDish.SouJingTime.Value.ToString("MM-dd HH:mm");
- }
- }
- /// <summary>
- /// 设置平衡记录开始时间
- /// </summary>
- /// <param name="exBalance"></param>
- private void SetSouJingTime(ExBalance exBalance)
- {
- if (exBalance == null) return;
- if (DateTime.TryParse(exBalance.startTime, out DateTime sou))
- {
- exBalance.StartDateTime = sou;
- }
- var exhoue = HouseSnToExHouse(exBalance.houseSn);
- if (exhoue == null)
- {
- return;
- }
- if (exBalance.StartDateTime.HasValue)
- {
- var endTime = DateTime.Now;
- if (!string.IsNullOrEmpty(exBalance.endTime))
- {
- DateTime.TryParse(exBalance.endTime, out endTime);
- }
- var span = endTime.Subtract(exBalance.StartDateTime.Value);
- exhoue.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
- exhoue.StartTime = exBalance.StartDateTime.Value.ToString("MM-dd HH:mm");
- }
- }
- /// <summary>
- /// 结束培养
- /// </summary>
- /// <param name="houseSn"></param>
- public void EndDish(int houseSn)
- {
- // M8-G3-1:结束培养——本地清空该舱培养记录与发育/开始时间,属有业务含义的本地操作,埋点(自动计时+异常→失败)。
- Aivfo.OperationLog.OperationLogger.Run("舱室操作", "结束培养", () =>
- {
- switch (houseSn)
- {
- case 1:
- ExDish1 = new ExDish();
- break;
- case 2:
- ExDish2 = new ExDish();
- break;
- case 3:
- ExDish3 = new ExDish();
- break;
- case 4:
- ExDish4 = new ExDish();
- break;
- case 5:
- ExDish5 = new ExDish();
- break;
- case 6:
- ExDish6 = new ExDish();
- break;
- case 7:
- ExDish7 = new ExDish();
- break;
- case 8:
- ExDish8 = new ExDish();
- break;
- case 9:
- ExDish9 = new ExDish();
- break;
- case 10:
- ExDish10 = new ExDish();
- break;
- }
- var exhoue = HouseSnToExHouse(houseSn);
- if (exhoue == null) return;
- exhoue.FaYuTime = "";
- exhoue.StartTime = "";
- }, input: new { houseSn });
- }
- public ExDish HouseSnToDish(int houseSn)
- {
- ExDish exDish = null;
- switch (houseSn)
- {
- case 1:
- exDish = ExDish1;
- break;
- case 2:
- exDish = ExDish2;
- break;
- case 3:
- exDish = ExDish3;
- break;
- case 4:
- exDish = ExDish4;
- break;
- case 5:
- exDish = ExDish5;
- break;
- case 6:
- exDish = ExDish6;
- break;
- case 7:
- exDish = ExDish7;
- break;
- case 8:
- exDish = ExDish8;
- break;
- case 9:
- exDish = ExDish9;
- break;
- case 10:
- exDish = ExDish10;
- break;
- }
- return exDish;
- }
- public ExHouse HouseSnToExHouse(int houseSn)
- {
- ExHouse ExHouse = null;
- switch (houseSn)
- {
- case 1:
- ExHouse = ExHouse1;
- break;
- case 2:
- ExHouse = ExHouse2;
- break;
- case 3:
- ExHouse = ExHouse3;
- break;
- case 4:
- ExHouse = ExHouse4;
- break;
- case 5:
- ExHouse = ExHouse5;
- break;
- case 6:
- ExHouse = ExHouse6;
- break;
- case 7:
- ExHouse = ExHouse7;
- break;
- case 8:
- ExHouse = ExHouse8;
- break;
- case 9:
- ExHouse = ExHouse9;
- break;
- case 10:
- ExHouse = ExHouse10;
- break;
- case 11:
- ExHouse = ExHouse11;
- break;
- }
- return ExHouse;
- }
- public ExBalance HouseSnToExBalance(int houseSn)
- {
- ExBalance exBalance = null;
- switch (houseSn)
- {
- case 1:
- exBalance = ExBalance1;
- break;
- case 2:
- exBalance = ExBalance2;
- break;
- case 3:
- exBalance = ExBalance3;
- break;
- case 4:
- exBalance = ExBalance4;
- break;
- case 5:
- exBalance = ExBalance5;
- break;
- case 6:
- exBalance = ExBalance6;
- break;
- case 7:
- exBalance = ExBalance7;
- break;
- case 8:
- exBalance = ExBalance8;
- break;
- case 9:
- exBalance = ExBalance9;
- break;
- case 10:
- exBalance = ExBalance10;
- break;
- }
- return exBalance;
- }
- /// <summary>
- /// 接受mqtt消息
- /// </summary>
- public void RecMqttMessage(string message)
- {
- try
- {
- List<ExHouse> exHouses = JsonConvert.DeserializeObject<List<ExHouse>>(message);
- //List<ExHouse> exHouses = new List<ExHouse>();
- for (int i = 1; i <= 11; i++)
- {
- ExHouse currentHouse = HouseSnToExHouse(i);
- if (currentHouse == null) continue;
- if (i == 11)
- {
- var exHouse11 = exHouses.FirstOrDefault(x => x.houseSn == i);
- if (exHouse11 == null) continue;
- currentHouse.pressure = exHouse11.pressure;
- //currentHouse.pressureDesc = exHouse11.pressureDesc;
- //currentHouse.houseDesc = exHouse11.houseDesc;
- currentHouse.PressureString = $"{currentHouse.pressure.ToString("f0")}mbar";
- switch (exHouse11.pressureDesc)
- {
- case "未知":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
- break;
- case "待补气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0007");
- break;
- case "补气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0006");
- break;
- case "正常":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0005");
- break;
- case "冲刷":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0301");
- break;
- case "排气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0299");
- break;
- case "排队":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0300");
- break;
- default:
- currentHouse.pressureDesc=exHouse11.pressureDesc;
- break;
- }
- switch (exHouse11.houseDesc)
- {
- case "未知":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
- break;
- case "舱室换气":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0302");
- break;
- case "气压监测":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0282");
- break;
- case "缓冲瓶补气":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0283");
- break;
- case "握手准备":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0009");
- break;
- case "水平电机自检":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0010");
- break;
- case "垂直电机自检":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0012");
- break;
- case "调试状态":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0013");
- break;
- case "空闲监测":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0014");
- break;
- case "温压监测平衡":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0008");
- break;
- case "温压监测":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0015");
- break;
- case "气体交换":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0016");
- break;
- case "气体交换平衡":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0280");
- break;
- default:
- if (exHouse11.houseDesc.Contains("自动对焦"))
- {
- currentHouse.houseDesc = exHouse11.houseDesc.Replace("自动对焦", KeyToStringConvert.GetLanguageStringByKey("C0017"));
- }else if (exHouse11.houseDesc.Contains("胚胎拍照"))
- {
- currentHouse.houseDesc = exHouse11.houseDesc.Replace("胚胎拍照", KeyToStringConvert.GetLanguageStringByKey("C0018"));
- }
- else
- {
- currentHouse.houseDesc = exHouse11.houseDesc;
- }
- break;
- }
- continue;
- }
-
- var exHouse = exHouses.FirstOrDefault(x => x.houseSn == i);
- if (exHouse != null)
- {
- currentHouse.pressureAlarm = exHouse.pressureAlarm;
- currentHouse.temperatureAlarm = exHouse.temperatureAlarm;
- currentHouse.pressure = exHouse.pressure;
- currentHouse.temperature = exHouse.temperature;
- currentHouse.houseDoorState = exHouse.houseDoorState;
- //currentHouse.pressureDesc = exHouse.pressureDesc;
- //currentHouse.houseDesc = exHouse.houseDesc;
- currentHouse.PressureString = $"{currentHouse.pressure.ToString("f0")}mbar";
- currentHouse.TemperatureSring = $"{currentHouse.temperature.ToString("f2")}℃";
- switch (exHouse.pressureDesc)
- {
- case "未知":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
- break;
- case "待补气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0007");
- break;
- case "补气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0006");
- break;
- case "正常":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0005");
- break;
- case "冲刷":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0301");
- break;
- case "排气":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0299");
- break;
- case "排队":
- currentHouse.pressureDesc = KeyToStringConvert.GetLanguageStringByKey("C0300");
- break;
- default:
- currentHouse.pressureDesc = exHouse.pressureDesc;
- break;
- }
- switch (exHouse.houseDesc)
- {
- case "未知":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0281");
- break;
- case "握手准备":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0009");
- break;
- case "水平电机自检":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0010");
- break;
- case "垂直电机自检":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0012");
- break;
- case "调试状态":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0013");
- break;
- case "空闲监测":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0014");
- break;
- case "温压监测平衡":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0008");
- break;
- case "温压监测":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0015");
- break;
- case "气体交换":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0016");
- break;
- case "气体交换平衡":
- currentHouse.houseDesc = KeyToStringConvert.GetLanguageStringByKey("C0280");
- break;
- default:
- if (exHouse.houseDesc.Contains("自动对焦"))
- {
- currentHouse.houseDesc = exHouse.houseDesc.Replace("自动对焦", KeyToStringConvert.GetLanguageStringByKey("C0017"));
- }
- else if (exHouse.houseDesc.Contains("胚胎拍照"))
- {
- currentHouse.houseDesc = exHouse.houseDesc.Replace("胚胎拍照", KeyToStringConvert.GetLanguageStringByKey("C0018"));
- }
- else
- {
- currentHouse.houseDesc = exHouse.houseDesc;
- }
- break;
- }
- }
- continue;
- var currentBalance = HouseSnToExBalance(i);
- if (currentBalance != null && currentBalance.StartDateTime.HasValue)
- {
- var endTime = DateTime.Now;
- if (!string.IsNullOrEmpty(currentBalance.endTime))
- {
- DateTime.TryParse(currentBalance.endTime, out endTime);
- }
- var span = endTime.Subtract(currentBalance.StartDateTime.Value);
- currentHouse.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
- currentHouse.StartTime = currentBalance.StartDateTime.Value.ToString("MM-dd HH:mm");
- }
- var currentDish = HouseSnToDish(i);
- if (currentDish != null && currentDish.SouJingTime.HasValue)
- {
- var endTime = DateTime.Now;
- if (!string.IsNullOrEmpty(currentDish.endTime))
- {
- DateTime.TryParse(currentDish.endTime, out endTime);
- }
- var span = endTime.Subtract(currentDish.SouJingTime.Value);
- currentHouse.FaYuTime = $"{(span.Days * 24) + span.Hours}H:{span.Minutes}M";
- currentHouse.StartTime = currentDish.SouJingTime.Value.ToString("MM-dd HH:mm");
- }
- }
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "解析mqtt消息", LogEnum.RunException);
- }
- }
- public void StartThread()
- {
- Task.Factory.StartNew(async () =>
- {
- string yunxing = KeyToStringConvert.GetLanguageStringByKey("C0001");
- string genghuang = KeyToStringConvert.GetLanguageStringByKey("C0002");
- string baoyang = KeyToStringConvert.GetLanguageStringByKey("C0003");
- string tian = KeyToStringConvert.GetLanguageStringByKey("C0004");
- while (true)
- {
- try
- {
- AlarmCount = AppData.Instance.HttpHelper.SearchAlarmHistoryNumApi(new SearchAlarmResponse { current = 1, selectType = 2, size = 5, tlSn = AppData.Instance.TlSn }).current;
- var a = AppData.Instance.HttpHelper.TlInfoTimeApi(tlsn);
- if (a == null) continue;
- if (a.runTime > 9999) RunTimeString = $"{yunxing}:9999+{tian}";/*RunTimeString = $"运行时间:9999+天";*/
- else RunTimeString = $"{yunxing}:{a.runTime}{tian}";/*RunTimeString = $"运行时间:{a.runTime}天";*/
- if (a.maintenanceTime > 9999) MaintenanceTimeString = $"{baoyang}:9999+{tian}";/*MaintenanceTimeString = $"保养倒计时:9999+天";*/
- else MaintenanceTimeString = $"{baoyang}:{a.maintenanceTime}{tian}";/*MaintenanceTimeString = $"保养倒计时:{a.maintenanceTime}天";*/
- if (a.hepatime > 9999) HepaTimeString = $"{genghuang}:9999+{tian}";/*HepaTimeString = $"更换HEPA时间:9999+天";*/
- else HepaTimeString = $"{genghuang}:{a.hepatime}{tian}";/* HepaTimeString = $"更换HEPA时间:{a.hepatime}天";*/
- // M5-04-4:HTTP 轮询本轮成功,写「最后成功通讯时间」供 control GetMonitorSnapshot 透出、服务监控页上色。
- // a==null 已在上面 continue(失联不更新),故走到这里即视为 HTTP 链路通。try 兜底,绝不因监控埋点影响主轮询。
- try { ivf_tl_Control.AppData.Instance.LastHttpOkAt = DateTime.Now; } catch { }
- Init();
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "定时刷新", LogEnum.RunException);
- }
- finally
- {
- await Task.Delay(1000 * 5);
- }
- }
- }, TaskCreationOptions.LongRunning);
- Task.Factory.StartNew(async () =>
- {
- string newPath = "";
- while (true)
- {
- try
- {
- if(AppData.Instance.TLSettingCommon.cleanSurfaceData != 0)
- {
- newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs";
- DeleteLogDir(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
- newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs\\Log";
- DeleteLogFile(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
- newPath = $"{AppData.Instance.DefeatPan}:\\TLData\\ivf_tl_Operate_logs\\LogError";
- DeleteLogFile(newPath, AppData.Instance.TLSettingCommon.cleanSurfaceData);
- }
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "DeleteLog", LogEnum.RunException);
- }
- finally
- {
- await Task.Delay(1000 * 60 * 60 * 12);
- }
- }
- }, TaskCreationOptions.LongRunning);
- }
- private void DeleteLogDir(string newPath,int day)
- {
- var newDir = Directory.GetDirectories(newPath, "*", SearchOption.TopDirectoryOnly);
- string dirName = "";
- DateTime dirTime = DateTime.Now;
- DateTime nowTime = dirTime;
- foreach (var item in newDir)
- {
- dirName = System.IO.Path.GetFileName(item);
- if (DateTime.TryParse(dirName, out dirTime))
- {
- if (nowTime.Subtract(dirTime).Days >= day)
- {
- try
- {
- Directory.Delete(item, true);
- }
- catch (Exception)
- {
- continue;
- }
- }
- }
- }
- }
- private void DeleteLogFile(string newPath,int day)
- {
- var newDir = Directory.GetFiles(newPath, "*.htm", SearchOption.TopDirectoryOnly);
- string fileName = "";
- DateTime fileTime = DateTime.Now;
- DateTime nowTime = fileTime;
- foreach (var item in newDir)
- {
- fileName = System.IO.Path.GetFileNameWithoutExtension(item);
- if (fileName.Length == 8)
- {
- fileName = fileName.Insert(6, "-");
- fileName = fileName.Insert(4, "-");
- if (DateTime.TryParse(fileName, out fileTime))
- {
- if (nowTime.Subtract(fileTime).Days >= day)
- {
- try
- {
- File.Delete(item);
- }
- catch (Exception)
- {
- continue;
- }
- }
- }
- }
- }
- }
- public void StartMqtt()
- {
- AppData.Instance.MqttHelper.MessEvent -= RecMqttMessage;
- AppData.Instance.MqttHelper.MessEvent += RecMqttMessage;
- AppData.Instance.MqttHelper.StartMqtt();
- }
- List<long> ReadAlarmId = new List<long>();
- Queue<AlarmHistoryEntity> AlarmQueue = new Queue<AlarmHistoryEntity>();
- private object AlarmQueueLock = new object();
- public void StartSpeaker()
- {
- Task.Factory.StartNew(async () =>
- {
- SpeechSynthesizer speech = new SpeechSynthesizer();
- speech.Volume = 100;
- var currentVoiceInfo = speech.GetInstalledVoices(CultureInfo.CurrentCulture).FirstOrDefault();
- if (currentVoiceInfo != null) speech.SelectVoice(currentVoiceInfo.VoiceInfo.Name);
- AlarmHistoryResult alarmHistoryResult = null;
- AlarmHistoryEntity currentAlarm = null;
- string yiqi = KeyToStringConvert.GetLanguageStringByKey("C0230");
- string huanchongp = KeyToStringConvert.GetLanguageStringByKey("C0231");
- string hcs = KeyToStringConvert.GetLanguageStringByKey("C0056");
- int dataCount = 0;
- string houseSnString = null;
- string speakText = "";
- while (true)
- {
- try
- {
- currentAlarm = AlarmDequeue();
- if (currentAlarm != null && currentAlarm.mute == 0)
- {
- if (currentAlarm.houseSn == 0)
- {
- //houseSnString = "时差仪器";
- houseSnString = yiqi;
- }
- else if (currentAlarm.houseSn == 11)
- {
- //houseSnString = "缓冲瓶";
- houseSnString = huanchongp;
- }
- else
- {
- //houseSnString = $"{currentAlarm.houseSn}号舱室";
- houseSnString = $"{currentAlarm.houseSn}{hcs}";
- }
- speakText = $"{houseSnString}{currentAlarm.title}";
- speech.Speak(speakText);
- }
- currentAlarm = null;
- if (!AlarmQueueAny())
- {
- //ReadAlarmId.Clear();
- alarmHistoryResult = AppData.Instance.HttpHelper.SearchAlarmHistoryApi(new SearchAlarmResponse { current = 1, selectType = 2, size = 999, tlSn = AppData.Instance.TlSn });
- if (alarmHistoryResult.IsSuccess)
- {
- dataCount = 0;
- foreach (var item in alarmHistoryResult.records)
- {
- //if (ReadAlarmId.Contains(item.id)) continue;
- //ReadAlarmId.Add(item.id);
- if (item.mute == 0)
- {
- AlarmEnqueue(item);
- dataCount++;
- }
- }
- if (dataCount == 0) await Task.Delay(5000);
- }
- else
- {
- await Task.Delay(5000);
- }
- await Task.Delay(1000);
- }
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, $"语音报警:{speakText}", LogEnum.RunException);
- }
- finally
- {
- await Task.Delay(100);
- }
- }
- }, TaskCreationOptions.LongRunning);
- }
- public void SetAlarmMute(long id, int mute)
- {
- try
- {
- lock (AlarmQueueLock)
- {
- var aa = AlarmQueue.FirstOrDefault(x => x.id == id);
- if (aa != null) aa.mute = mute;
- }
- // M8-G3-1:报警静音/取消静音——本地修改报警队列状态,属有业务含义的本地操作。原方法吞异常,故用兜底 Log 直记成功(不改控制流)。
- Aivfo.OperationLog.OperationLogger.Log("报警操作", "设置报警静音", input: new { id, mute }, result: "成功");
- }
- catch (Exception ex)
- {
- // M8-G3-1:失败兜底直记(沿用原异常吞处理,不重抛)。
- Aivfo.OperationLog.OperationLogger.Log("报警操作", "设置报警静音", input: new { id, mute }, result: "失败", error: ex.GetType().Name + ": " + ex.Message);
- AppData.Instance.LogHelper.ExceptionLog(ex, "SetAlarmMute", LogEnum.RunException);
- }
- }
- private void AlarmEnqueue(AlarmHistoryEntity alarmHistoryEntity)
- {
- try
- {
- lock (AlarmQueueLock)
- {
- AlarmQueue.Enqueue(alarmHistoryEntity);
- }
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmEnqueue", LogEnum.RunException);
- }
- }
- private AlarmHistoryEntity AlarmDequeue()
- {
- try
- {
- lock (AlarmQueueLock)
- {
- if (AlarmQueue.Any()) return AlarmQueue.Dequeue();
- }
- return null;
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmDequeue", LogEnum.RunException);
- return null;
- }
- }
- private bool AlarmQueueAny()
- {
- try
- {
- lock (AlarmQueueLock) return AlarmQueue.Any();
- }
- catch (Exception ex)
- {
- AppData.Instance.LogHelper.ExceptionLog(ex, "AlarmQueueAny", LogEnum.RunException);
- lock (AlarmQueueLock) AlarmQueue.Clear();
- return false;
- }
- }
- }
- }
|