| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643 |
- using System;
- using Prism.Mvvm;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using Prism.Commands;
- using System.Diagnostics;
- using System.Globalization;
- using System.Windows.Media;
- using SHJX.Service.Control;
- using SHJX.Service.Model.Dao;
- using System.Threading.Tasks;
- using System.Collections.Generic;
- using SHJX.Service.Model.Control;
- using SHJX.Service.Common.ReadXML;
- using SHJX.Service.Common.Extend;
- using SHJX.Service.Common.UserColor;
- using System.Collections.ObjectModel;
- using SHJX.Service.Model.DiaplayModel;
- using SHJX.Service.Common.ExtendElement;
- using SHJX.Service.Common.UserDelegate;
- using SHJX.Service.Control.ServiceController;
- using SHJX.Service.Common.Logging;
- using Microsoft.Extensions.Logging;
- namespace SHJX.Service.ModelView
- {
- public class MainViewModel : BindableBase
- {
- private static readonly ILogger logger = LogFactory.BuildLogger(typeof(MainViewModel));
- #region Field
- private const string ResourcePath = "/SHJX.Service.Resource;component/Resources/";
- private static ReadConfigUtil _config;
- private readonly MainController _controller;
- public readonly MainController Maincontroller;
- private static List<SampleDetail> _detailArgs;
- #endregion
- #region Property
- public ObservableCollection<DissolveElementArg> DissolvePositions { get; set; }
- public ObservableCollection<SampleDetailElementArg> LeftSampleAreas { get; set; }
- public ObservableCollection<SampleDetailElementArg> RightSampleAreas { get; set; }
- public ObservableCollection<CenterControlElementArg> CenterControls { get; set; }
- /// <summary>
- /// 遮蔽层
- /// </summary>
- private Visibility _hiddenValue;
- public Visibility MainHiddenValue
- {
- get => _hiddenValue;
- set => SetProperty(ref _hiddenValue, value);
- }
- /// <summary>
- /// 是否锁定
- /// </summary>
- private bool? _mainLock;
- public bool? WhetherLockMain
- {
- get => _mainLock;
- set => SetProperty(ref _mainLock, value);
- }
- /// <summary>
- /// 是否开启相机检测
- /// </summary>
- private bool _waterMachine;
- public bool WaterMachineOpen
- {
- get => _waterMachine;
- set => SetProperty(ref _waterMachine, value);
- }
- /// <summary>
- /// 是否润洗
- /// </summary>
- private bool? _wash;
- public bool? WhetherWash
- {
- get => _wash;
- set => SetProperty(ref _wash, value);
- }
- /// <summary>
- /// 润洗图标
- /// </summary>
- private string _washIcon;
- public string WashIcon
- {
- get => _washIcon;
- set => SetProperty(ref _washIcon, value);
- }
- /// <summary>
- /// 暂停按钮
- /// </summary>
- private string _pauseIcon;
- public string PauseIcon
- {
- get => _pauseIcon;
- set => SetProperty(ref _pauseIcon, value);
- }
- /// <summary>
- /// 暂停||继续
- /// </summary>
- private string _pauseText;
- public string PauseText
- {
- get => _pauseText;
- set => SetProperty(ref _pauseText, value);
- }
- /// <summary>
- /// 连接名
- /// </summary>
- private string _clientName;
- public string ClientName
- {
- get => _clientName;
- set => SetProperty(ref _clientName, value);
- }
- /// <summary>
- /// 连接状态
- /// </summary>
- private SolidColorBrush _portClientColor;
- public SolidColorBrush PortClientColor
- {
- get => _portClientColor;
- set
- {
- _portClientColor = value;
- _portClientColor.Freeze();
- RaisePropertyChanged(nameof(PortClientColor));
- }
- }
- private bool _portClientState;
- public bool PortClientState
- {
- get => _portClientState;
- set => SetProperty(ref _portClientState, value);
- }
- /// <summary>
- /// 导出Word图片
- /// </summary>
- private string _exportWordIcon;
- public string ExportWordIcon
- {
- get => _exportWordIcon;
- set => SetProperty(ref _exportWordIcon, value);
- }
- #endregion
- public MainViewModel(ReadConfigUtil config, out int camera)
- {
- _config = config;
- _controller = new MainController(config);
- Maincontroller = _controller;
- _detailArgs = new List<SampleDetail>();
- DissolvePositions = new ObservableCollection<DissolveElementArg>();
- LeftSampleAreas = new ObservableCollection<SampleDetailElementArg>();
- RightSampleAreas = new ObservableCollection<SampleDetailElementArg>();
- CenterControls = new ObservableCollection<CenterControlElementArg>();
- BuilderElement();
- DataCentre.InitBaseData(_config, out int cameraNum);
- camera = cameraNum;
- InitData();
- RegisterMessager();
- PortClient();
- StartPreheat();
- }
- #region InitElement
- private void BuilderElement()
- {
- var areas = _controller.QueryArea();
- var tasks = _controller.GetResidueTask();
- for (int i = 0; i < 24; i++)
- {
- DissolveElementArg dissolve = new()
- {
- Index = i,
- UIName = $"R{i + 1}",
- };
- (from area in areas.Where(item => item.PointName.Equals(dissolve.UIName)).ToList()
- select area.Status).ToList().ForEach(item =>
- {
- if(item==false)
- {
- dissolve.DisplayText = "N";
- }
- });
-
- (from task in tasks.Where(item => item.From.Equals(dissolve.UIName)&& item.To.Equals(dissolve.UIName)).ToList()
- select task.OriginLocalName).ToList().ForEach(item =>
- {
-
- dissolve.DisplayText = item.Replace("A","");
- });
- DissolvePositions.Add(dissolve);
- }
- for (int i = 0; i < 24; i++)
- {
- SampleDetailElementArg detail = new()
- {
- Index = i,
- UIName = $"A{i + 1}",
- TagNo = $"{i + 1}",
- TagColor = "#99CCCC",
- };
- LeftSampleAreas.Add(detail);
- }
- for (int i = 0; i < 24; i++)
- {
- SampleDetailElementArg detail = new()
- {
- Index = i,
- UIName = $"A{i + 25}",
- TagNo = $"{i + 25}",
- TagColor = "#99CCCC",
- };
- RightSampleAreas.Add(detail);
- }
- (string No, string Name)[] centerValues = new (string No, string Name)[]
- {
- ("D1", "滴定1"),
- ("D2", "滴定2"),
- ("J1", "搅拌"),
- ("F1", "废液")
- };
- for (int i = 0; i < 5; i++)
- {
- CenterControlElementArg detail = new()
- {
- Index = i,
- CenterText = string.Empty,
- BackColor = "#99CCCC"
- };
- if (i + 1 <= centerValues.Length)
- {
- detail.UIName = centerValues[i].No;
- detail.TagText = centerValues[i].Name;
- }
- else
- {
- detail.TagText = string.Empty;
- detail.UIName = string.Empty;
- }
- CenterControls.Add(detail);
- }
- }
- #endregion
-
- private int DigestionPositionNumFlag=24;
-
- private void InitData()
- {
- ChangePauseIcon();
- ExportWordIcon = $"{ResourcePath}导出Word.png";
- WhetherWash = false;
- WhetherLockMain = false;
- WaterMachineOpen = false;
- MainHiddenValue = Visibility.Hidden;
- WashIcon = "/SHJX.Service.Resource;component/Resources/clear_unselected.png";
- }
- /// <summary>
- /// 注册消息
- /// </summary>
- private void RegisterMessager()
- {
- try
- {
- Messager.Register("sample", SetSample);
- Messager.Register("TaskOver", TaskOver);
- Messager.Register("BD", AddCupBiaoDingBubei);
- Messager.Register("ringRadius", SetRingRadius);
- Messager.Register("SampleResult", SetSampleResult);
- Messager.Register("changeElement", SetElementValue);
- Messager.Register("getCupError", getCupErrorMessageBox);
- Messager.Register("ExportResultWord", ExportResultWord);
- Messager.Register("UpdateElementStatus", UpdateElementStatus);
- Messager.Register("UpdateResultValue", ManualUpdateResultValue);
- Messager.Register("ReceiveTemplateData", ExecuteReceiveTemplateData);
- Messager.Register("ReceiveTemplateDataFromMain", ExecuteReceiveTemplateDataFromMain);
- Messager.Register("modifyDataByManual", modifyDataByManual);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- #region MessagerMethod
- /// <summary>
- /// 手动设置结果参数
- /// </summary>
- /// <param name="obj"></param>
- private void modifyDataByManual(object obj)
- {
- try
- {
- string[] param = (string[])obj;
- if (Convert.ToInt32(param[0]) > 48)
- return;
- if (Convert.ToInt32(param[0]) < 0)
- return;
- if (Convert.ToInt32(param[0]) > 24)
- {
- RightSampleAreas[Convert.ToInt32(param[0])-25].Volume = param[1];
- RightSampleAreas[Convert.ToInt32(param[0])-25].Result = param[2];
- }
- else
- {
- LeftSampleAreas[Convert.ToInt32(param[0])-1].Volume = param[1];
- LeftSampleAreas[Convert.ToInt32(param[0])-1].Result = param[2];
- }
- EquipmentTask task = new EquipmentTask();
- task.OriginLocalName = "A" + param[0];
- task.Amount = Convert.ToDouble(param[1]);
- task.Result = Convert.ToDouble(param[2]);
- _controller.UpdateTaskState(task); ;
- //var res = obj as Dictionary<string, string>;
- //var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(res?["LocalName"]));
- //if (leftSample is not null)
- //{
- // LeftSampleAreas[leftSample.Index].Volume = res?["Volume"];
- // LeftSampleAreas[leftSample.Index].Result = res?["Result"];
- //}
- //var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(res?["LocalName"]));
- //if (rightSample is not null)
- //{
- // RightSampleAreas[rightSample.Index].Volume = res?["Volume"];
- // RightSampleAreas[rightSample.Index].Result = res?["Result"];
- //}
- }
- catch
- { }
- }
- public void ExecuteReceiveTemplateData(object obj)
- {
- if (obj is List<SampleDetail> list)
- {
- _detailArgs = list;
- }
- foreach (var sampleDetail in _detailArgs)
- {
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(sampleDetail.NodeName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].DetailInfo = sampleDetail.Detail;
- LeftSampleAreas[leftSample.Index].TagColor = sampleDetail.Concentration.Equals("高") ? "#6699CC" : "#99CCFF";
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(sampleDetail.NodeName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].DetailInfo = sampleDetail.Detail;
- RightSampleAreas[rightSample.Index].TagColor = sampleDetail.Concentration.Equals("高") ? "#6699CC" : "#99CCFF";
- }
- }
- }
- public void ExecuteReceiveTemplateDataFromMain(object obj)
- {
- var samples = obj as Action<List<SampleDetail>>;
- samples?.Invoke(_detailArgs);
- }
- /// <summary>
- /// 设置样品值
- /// </summary>
- /// <param name="obj"></param>
- private void SetSample(object obj)
- {
- try
- {
- if (obj is not SampleDetail arg) return;
- var detail = _detailArgs.FirstOrDefault(item => item.NodeName.Equals(arg.NodeName));
- if (detail is not null) _detailArgs.Remove(detail);
- if (arg.WhetherSend!)
- {
- _detailArgs.Add(arg);
-
- }
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(arg.NodeName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].DetailInfo = arg.WhetherSend ? arg.Detail : string.Empty;
- LeftSampleAreas[leftSample.Index].TagColor = arg.WhetherSend ? detail?.TaskSendOk ?? false ? "#ff99cc" :
- arg.Concentration.Equals("高") ? "#6699CC" : "#99CCFF"
- : "#99CCCC";
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(arg.NodeName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].DetailInfo = arg.WhetherSend ? arg.Detail : string.Empty;
- RightSampleAreas[rightSample.Index].TagColor = arg.WhetherSend ? detail?.TaskSendOk ?? false ? "#ff99cc" :
- arg.Concentration.Equals("高") ? "#6699CC" : "#99CCFF"
- : "#99CCCC";
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 任务结束
- /// </summary>
- /// <param name="obj"></param>
- private void TaskOver(object obj)
- {
- try
- {
- _config.UpdateIsAddCupBiaoDingBubei("False");
- Action action = () => UMessageBox.Info("任务已结束");
- List<string> names = new() { "MotorX", "MotorY" };
- names.ForEach(async item =>
- {
- var res = await _controller.StartEquipmentGoBackAsync();
- if (res)
- {
- action = () => UMessageBox.InfoTip($"{item}返回原地成功");
- }
- });
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
-
- private void AddCupBiaoDingBubei(object obj)
- {
- try
- {
- if (_config.IsAddCupBiaoDingBubei)
- {
- List<EquipmentTask> samplesBD = _controller.CheckExistTaskBD((string)obj);
- List<SampleDetail> samples = new List<SampleDetail>();
- foreach (var sample in samplesBD)
- {
-
- SampleDetail detailArgs = new SampleDetail()
- {
- NodeName = sample.OriginLocalName,
- Detail = "补杯",
- HgSO4 = 0,
- SampleType = "补杯",
- Concentration = "低",
- WhetherSend = true,
- };
- samples.Add(detailArgs);
- _detailArgs.Remove(_detailArgs.FirstOrDefault(item => item.NodeName.Equals(sample.OriginLocalName)));
- _detailArgs.Add(detailArgs);
- }
- var resInfo = _controller.SendSampleToControl(samples, (string)obj);
- //标定当补杯显示上的处理
- //for (int i = 0; i < 24; i++)
- //{
- // var leftSample = (from SampleDetail items in samples where items.NodeName == LeftSampleAreas[i].UIName select items).FirstOrDefault();
- // if (leftSample is not null)
- // {
- // LeftSampleAreas[i].DetailInfo = leftSample.Detail + "(补)";
- // LeftSampleAreas[i].TagColor = "#ffcccc";
- // }
-
- // var rightSample = (from SampleDetail items in samples where items.NodeName == RightSampleAreas[i].UIName select items).FirstOrDefault();
- // if (rightSample is not null)
- // {
- // RightSampleAreas[i].DetailInfo = rightSample.Detail + "(补)";
- // RightSampleAreas[i].TagColor = "#ffcccc";
- // }
-
- //}
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 更新进度条
- /// </summary>
- /// <param name="obj"></param>
- private void SetRingRadius(object obj)
- {
- try
- {
- var data = obj as Dictionary<string, object>;
- (data?["value2"] as List<string>)?.ForEach(item =>
- {
- var dissolve = DissolvePositions.FirstOrDefault(arg => arg.UIName.Equals(item));
- if (dissolve is not null)
- {
- DissolvePositions[dissolve.Index].DisplayValue = Convert.ToDouble(data["value1"]) * 100;
- }
- });
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- private void getCupErrorMessageBox(object obj)
- {
- try
- {
- _controller.zBackToPoint();
- EquipmentTask task = (EquipmentTask)obj;
- var strValue = "没有检测到杯子,任务已暂停!\n请点“继续任务”进行下一步骤!";
- _controller.StopHeatingTemperature();
- _config.UpdateTaskRunning(false);
- ChangePauseIcon();
- logger.LogInformation(strValue);
- MessageBox.Show(strValue);
-
- var centerArea = CenterControls.FirstOrDefault(item => item.UIName.Equals(task.From));
- if (centerArea is not null)
- {
- centerArea.BackColor = "#FFCCCC";
- centerArea.CenterText = task.OriginLocalName.Replace("A", string.Empty);
- }
-
- var dissoArea = DissolvePositions.FirstOrDefault(item => item.UIName.Equals(task.From));
- if (dissoArea is not null)
- {
- dissoArea.DisplayText = "N";
- }
- //dissoArea. = "#99CCCC";
- task.To.UpdateAreaPointState();
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#99CCCC";
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].TagColor = "#99CCCC";
- }
- _detailArgs.Remove(_detailArgs.FirstOrDefault(item => item.NodeName.Equals(task.OriginLocalName)));
- CancelCache.Set(task.OriginLocalName, "Cancel");
- _controller.QuerydeledeEmptyCupTask(task.OriginLocalName);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
-
- /// <summary>
- /// 样品结果
- /// </summary>
- /// <param name="obj"></param>
- private void SetSampleResult(object obj)
- {
- try
- {
- var res = obj as Dictionary<string, string>;
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(res?["LocalName"]));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].Volume = res?["Volume"];
- LeftSampleAreas[leftSample.Index].Result = res?["Result"] == "0" ? "NULL" : res?["Result"];
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(res?["LocalName"]));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].Volume = res?["Volume"];
- RightSampleAreas[rightSample.Index].Result = res?["Result"] == "0" ? "NULL" : res?["Result"];
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- /// <summary>
- /// 设置界面元素的值
- /// </summary>
- /// <param name="obj"></param>
- private void SetElementValue(object obj)
- {
- try
- {
- var data = (Dictionary<string, string>)obj;
- switch (data["type"])
- {
- case "IC":
- SetInClearPosition(data);
- break;
- case "OC":
- SetOutCleatPosition(data);
- break;
- case "IS":
- SetInStirPosition(data);
- break;
- case "OS":
- SetOutStirPosition(data);
- break;
- case "IT":
- SetInTitrationPosition(data);
- break;
- case "OT":
- SetOutTitrationPosition(data);
- break;
- case "TtS":
- SetTitrationToSample(data);
- break;
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- /// <summary>
- /// 导出结果
- /// </summary>
- /// <param name="obj"></param>
- private void ExportResultWord(object obj)
- {
- //导出结果
- ExportResultToWord(obj.ToString());
- }
- /// <summary>
- /// 更新结果值
- /// </summary>
- /// <param name="obj"></param>
- private void ManualUpdateResultValue(object obj)
- {
- try
- {
- if (obj is not Dictionary<string, object> value) return;
- var waveKey = value["waveKey"].ToString(); //_controller.GetWavekey();
- var tasks = _controller.GetUpdateValue(waveKey, value["valuetype"].ToString());
- if (!tasks.Any())
- {
- UMessageBox.SingleBtnInfo("未找到对应任务,无法修改!");
- return;
- }
- var bdValue = value["valuetype"].ToString() switch
- {
- "Low" => 0.125 / Convert.ToDouble(value["bd"]),
- "High" => 1.25 / Convert.ToDouble(value["bd"]),
- _ => throw new ArgumentNullException(value["valuetype"].ToString())
- };
- bdValue = Math.Round(bdValue, 5);
- (from kbTaskName in tasks.Where(item => item.TaskType.Equals("水样")).ToList()
- select kbTaskName.OriginLocalName).ToList().ForEach(nodeName =>
- {
- var task = tasks.FirstOrDefault(equipmentTask => equipmentTask.OriginLocalName.Trim().Equals(nodeName));
- //计算参数 C:硫酸亚铁铵浓度
- Debug.Assert(task != null, nameof(task) + " != null");
- var avgValue = ((bdValue * (Convert.ToDouble(value["kb"]) - task.Amount) * 8000) / 10) * task.GetSampleMultiple;
- avgValue = Convert.ToDouble(Math.Round(avgValue, 2));
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(nodeName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].Volume = Math.Round(task.Amount,2).ToString();
- LeftSampleAreas[leftSample.Index].Result = avgValue > 0 ? avgValue.ToString() : "NULL";
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(nodeName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].Volume = Math.Round(task.Amount, 2).ToString();
- RightSampleAreas[rightSample.Index].Result = avgValue > 0 ? avgValue.ToString() : "NULL";
- }
- //EquipmentTask et = new EquipmentTask();
- //et = task;
- task.Result = avgValue > 0 ? avgValue : 0;
- DataCentre._dataManager.Update<EquipmentTask>(task);
- });
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 更新元素状态
- /// </summary>
- /// <param name="obj"></param>
- private void UpdateElementStatus(object obj)
- {
- try
- {
- var area = obj as EquipmentArea;
- Debug.Assert(area != null, nameof(area) + " != null");
- var color = area.Status ? area.PointName.In("Z1", "D1", "D2", "J1", "F1", "H1") ? UColor.DeepSkyBlue : UColor.SteelBlue : UColor.DarkOrange;
- var areas = new List<EquipmentArea>() { area };
- SetDisableElement(areas, color);
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- #endregion
- #region Set ElementValue
- /// <summary>
- /// 进入消解位
- /// </summary>
- /// <param name="data"></param>
- private void SetInClearPosition(Dictionary<string, string> data)
- {
- try
- {
- var dissolve = DissolvePositions.FirstOrDefault(item => item.UIName.Equals(data["to"]));
- if (dissolve is not null)
- {
- DissolvePositions[dissolve.Index].DisplayText = data["localName"];
- //if (data["localName"] == "补杯")
- //{
- // DissolveElement.txt_dissolve_show = 11;
- // //DissolvePositions[dissolve.Index] = "#FFCCCC";
- //}
- }
-
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 离开消解位
- /// </summary>
- /// <param name="data"></param>
- private void SetOutCleatPosition(Dictionary<string, string> data)
- {
- try
- {
- var dissolve = DissolvePositions.FirstOrDefault(item => item.UIName.Equals(data["from"]));
- if (dissolve is not null)
- {
- DissolvePositions[dissolve.Index].DisplayValue = 0;
- DissolvePositions[dissolve.Index].DisplayText = string.Empty;
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 进入搅拌位
- /// </summary>
- /// <param name="data"></param>
- private void SetInStirPosition(Dictionary<string, string> data)
- {
- try
- {
- if (data == null) throw new ArgumentNullException(nameof(data));
- var center = CenterControls.FirstOrDefault(item => item.UIName.Equals(data["to"]));
- if (center is not null)
- {
- CenterControls[center.Index].BackColor = "#FFCCCC";
- CenterControls[center.Index].CenterText = data["localName"];
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 离开搅拌位
- /// </summary>
- /// <param name="data"></param>
- private void SetOutStirPosition(Dictionary<string, string> data)
- {
- try
- {
- if (data == null) throw new ArgumentNullException(nameof(data));
- var center = CenterControls.FirstOrDefault(item => item.UIName.Equals(data["from"]));
- if (center is not null)
- {
- CenterControls[center.Index].BackColor = "#99CCCC";
- CenterControls[center.Index].CenterText = string.Empty;
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 进入滴定位
- /// </summary>
- /// <param name="data"></param>
- private void SetInTitrationPosition(Dictionary<string, string> data)
- {
- try
- {
- if (data == null) throw new ArgumentNullException(nameof(data));
- var center = CenterControls.FirstOrDefault(item => item.UIName.Equals(data["to"]));
- if (center is not null)
- {
- CenterControls[center.Index].BackColor = "#FFCCCC";
- CenterControls[center.Index].CenterText = data["localName"];
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 离开滴定位
- /// </summary>
- /// <param name="data"></param>
- private void SetOutTitrationPosition(Dictionary<string, string> data)
- {
- try
- {
- if (data == null) throw new ArgumentNullException(nameof(data));
- var center = CenterControls.FirstOrDefault(item => item.UIName.Equals(data["from"]));
- if (center is not null)
- {
- CenterControls[center.Index].BackColor = "#99CCCC";
- CenterControls[center.Index].CenterText = string.Empty;
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 滴定位回样品位
- /// </summary>
- /// <param name="data"></param>
- private void SetTitrationToSample(Dictionary<string, string> data)
- {
- try
- {
- if (data == null) throw new ArgumentNullException(nameof(data));
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(data["to"]));
- if (leftSample is not null)
- {
- if (data["level"] == "Low")
- LeftSampleAreas[leftSample.Index].TagColor = "#99CCCC";
- else
- LeftSampleAreas[leftSample.Index].TagColor = "#6699CC";
- if (LeftSampleAreas[leftSample.Index].DetailInfo == "补杯")
- {
- LeftSampleAreas[leftSample.Index].DetailInfo = "";
- }
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(data["to"]));
- if (rightSample is not null)
- {
- if (data["level"] == "Low")
- RightSampleAreas[rightSample.Index].TagColor = "#99CCCC";
- else
- RightSampleAreas[rightSample.Index].TagColor = "#6699CC";
- if (RightSampleAreas[rightSample.Index].DetailInfo == "补杯")
- {
- RightSampleAreas[rightSample.Index].DetailInfo = "";
- }
- }
- _detailArgs.Remove(_detailArgs.FirstOrDefault(item => item.NodeName.Equals(data["to"])));
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- #endregion
-
- #region Extend Method
- /// <summary>
- /// 页面加载
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- public async void MainLoaded(object sender, EventArgs e)
- {
- try
- {
- //询问是否需要返回原点
- if (UMessageBox.Info("设备是否需要返回原点?").Equals(MessageBoxResult.Yes))
- {
- var gobackResult = await _controller.StartEquipmentGoBackAsync();
- UMessageBox.SingleBtnInfo($"返回原点{(gobackResult ? "成功" : "失败")}");
- }
- var washTasks = _controller.GetResidueWashTasks();
- if (washTasks.Any())
- {
- if (UMessageBox.Info("当前还有剩余润洗任务未执行完成,请问是否需要继续执行?").Equals(MessageBoxResult.No))
- {
- _controller.DeleteResidueTask(washTasks);
- }
- }
- //加载的时候需要去检索是否还有正在执行的相应任务
- var tasks = _controller.GetResidueTask();
- foreach (var task in tasks)
- {
- SampleDetail detailArgs = new SampleDetail()
- {
- NodeName = task.OriginLocalName,
- Detail = task.TaskDetailName,
- HgSO4 = task.HgSO4Volume,
- SampleType = task.TaskType,
- Concentration = task.SampleConcentration,
- WhetherSend = true,
- };
- _detailArgs.Add(detailArgs);
- }
- if (tasks.Any())
- {
- if (UMessageBox.Info("当前还有剩余任务未执行完成,请问是否需要继续执行?").Equals(MessageBoxResult.Yes))
- {
- tasks.Where(item => item.Status.Equals(TaskState.New) || item.Status.Equals(TaskState.Doing)).ToList().ForEach(task =>
- {
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#ff99cc";
- LeftSampleAreas[leftSample.Index].DetailInfo = task.TaskDetailName;
- if (task.TaskDetailName == "补杯")
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#ffcccc";
- }
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].TagColor = "#ff99cc";
- RightSampleAreas[rightSample.Index].DetailInfo = task.TaskDetailName;
- if (task.TaskDetailName == "补杯")
- {
- RightSampleAreas[rightSample.Index].TagColor = "#ffcccc";
- }
- }
- });
- tasks.Where(item => item.Status.Equals(TaskState.Finished)).ToList().ForEach(task =>
- {
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#99CCCC";
- LeftSampleAreas[leftSample.Index].DetailInfo = task.TaskDetailName;
- LeftSampleAreas[leftSample.Index].Volume = task.Amount.ToString(CultureInfo.InvariantCulture);
- LeftSampleAreas[leftSample.Index].Result = task.Udf1 ?? string.Empty;
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].TagColor = "#99CCCC";
- RightSampleAreas[rightSample.Index].DetailInfo = task.TaskDetailName;
- RightSampleAreas[rightSample.Index].Volume = task.Amount.ToString(CultureInfo.InvariantCulture);
- RightSampleAreas[rightSample.Index].Result = task.Udf1 ?? string.Empty;
- }
- });
- }
- else
- {
- _detailArgs.Clear();
- _controller.DeleteResidueTask(tasks);
- //询问加热棒状态是否更改
- if (_controller.CheckHeatingIsRunning())
- {
- if (UMessageBox.Info("当前加热状态正在执行,请问是否取消?").Equals(MessageBoxResult.Yes))
- {
- var res = _controller.UpdateHeatingIsRunning();
- UMessageBox.InfoTip($"取消{(res ? "成功" : "失败")}");
- }
- }
- }
- }
- var areas = _controller.QueryArea();
- SetDisableElement(areas, UColor.DarkOrange);
- SetRingBarVisiable();
- DataCentre.GetTimer.Start();
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- private void SetRingBarVisiable()
- {
- try
- {
- var heatTasks = _controller.GetHeatAtPresent();
- heatTasks?.ForEach(task =>
- {
- var dissolve = DissolvePositions.FirstOrDefault(item => item.UIName.Equals(task.Item1));
- if (dissolve is not null)
- {
- DissolvePositions[dissolve.Index].DisplayText = task.Item2;
- }
- });
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- /// <summary>
- /// 启动预热
- /// </summary>
- private async void StartPreheat()
- {
- if (!_config.OpenAppStartHeat) return;
- await Task.Factory.StartNew(() =>
- {
- _controller.WritePreheatTemperature();
- });
- }
- /// <summary>
- /// 导出结果
- /// </summary>
- /// <returns></returns>
- ///
-
- private async void ExportResultToWord(string waveKey, Action action = null)
- {
- try
- {
- ExportWordIcon = string.Concat(ResourcePath, "等待.gif");
- if (await _controller.ConvertWordAsync(waveKey))
- {
- action?.Invoke();
- }
- ExportWordIcon = string.Concat(ResourcePath, "导出Word.png");
-
- }
- catch (Exception ex)
- {
- //UMessageBox.ErrorTip($"导出Word失败,失败原因:{ex.Message}");
- logger.LogError($"导出Word失败,失败原因:{ex}");
- }
- }
- /// <summary>
- /// 不可用控件
- /// </summary>
- private void SetDisableElement(List<EquipmentArea> areas, SolidColorBrush solidColor)
- {
- try
- {
- (from area in areas.Where(item => item.AreaName.Equals("DigestionPosition")).ToList()
- select area.PointName).ToList().ForEach(item =>
- {
- //if (_ringBars.TryGetValue(item, out var ringBar))
- //{
- // ringBar.CenterColor = solidColor;
- //};
- });
- (from area in areas.Where(item => item.AreaName.Equals("DigestionPosition")).ToList()
- select area.PointName).ToList().ForEach(item =>
- {
- var dissolve = DissolvePositions.FirstOrDefault(it => it.UIName.Equals(item));
- if (dissolve is not null && areas[0].Status)
- {
- DissolvePositions[dissolve.Index].DisplayText = "";
- }
- if (dissolve is not null && !areas[0].Status)
- {
- DissolvePositions[dissolve.Index].DisplayText = "N";
- }
- });
- (from area in areas.Where(item => item.AreaName.Equals("TitrationPosition")).ToList()
- select area.PointName).ToList().ForEach(item =>
- {
- if (item.Equals("D1"))
- {
- var Titration = CenterControls.FirstOrDefault(item => item.UIName.Equals("D1"));
- if (Titration is not null && areas.FirstOrDefault(item => item.PointName.Equals("D1")).Status)
- {
- Titration.BackColor = "#99CCCC";
- }
- if (Titration is not null && !areas[0].Status)
- {
- Titration.BackColor = "#FFCCCC";
- }
- }
- if (item.Equals("D2"))
- {
- var Titration = CenterControls.FirstOrDefault(item => item.UIName.Equals("D2"));
- if (Titration is not null && areas.FirstOrDefault(item => item.PointName.Equals("D2")).Status)
- {
- Titration.BackColor = "#99CCCC";
- }
- if (Titration is not null && !areas[0].Status)
- {
- Titration.BackColor = "#FFCCCC";
- }
- }
- });
- (from area in areas.Where(item => item.AreaName.Equals("StirPosition")).ToList()
- select area.PointName).ToList().ForEach(item =>
- {
- var StirData = CenterControls.FirstOrDefault(item => item.UIName.In("J1"));
- if (StirData is not null && areas[0].Status)
- {
- StirData.BackColor = "#99CCCC";
- }
- if (StirData is not null && !areas[0].Status)
- {
- StirData.BackColor = "#FFCCCC";
- }
- });
- (from pos in (from area in areas where area.AreaName.Equals("LiquidWastePosition") select area).ToList()
- select pos.PointName).ToList().ForEach(item =>
- {
- var EffluentData = CenterControls.FirstOrDefault(item => item.UIName.In("F1"));
- if (EffluentData is not null && areas[0].Status)
- {
- EffluentData.BackColor = "#99CCCC";
- }
- if (EffluentData is not null && !areas[0].Status)
- {
- EffluentData.BackColor = "#FFCCCC";
- }
- });
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 按钮样式改变
- /// </summary>
- private void ChangePauseIcon()
- {
- try
- {
- (PauseIcon, PauseText) = _config.TaskRunning ?
- ($"{ResourcePath}暂停.png", "任务暂停") :
- ($"{ResourcePath}继续.png", "任务继续");
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- /// <summary>
- /// 端口连接
- /// </summary>
- private async void PortClient()
- {
- try
- {
- (string portName, bool clientState) = await _controller.ClientOpen();
- ClientName = portName;
- PortClientState = !clientState;
- PortClientColor = clientState ? Brushes.LightGreen : "#FF6666".ConvertToBrush();
- #region 设置电机速度
- if (_config.SpeedWrite && clientState)
- {
- _config.GetSpeed.ForEach(item =>
- {
- var res = _controller.SetSpeed(item);
- var logStr = $"{item.Description}速度设置{(res ? "成功" : "失败")}";
- logger.LogInformation(logStr);
- UMessageBox.InfoTip(logStr);
- });
- }
- #endregion
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- #endregion
- #region Command
- private DelegateCommand _mainCloseCommand;
- public DelegateCommand MainCloseCommand => _mainCloseCommand ??= new DelegateCommand(ExecuteMainCloseCommand);
- public DelegateCommand _lockDestCommand;
- public DelegateCommand LockDestCommand => _lockDestCommand ?? new DelegateCommand(ExecuteLockDestCommand);
- public DelegateCommand _taskStartCommand;
- public DelegateCommand TaskStartCommand => _taskStartCommand ?? new DelegateCommand(ExecuteTaskStartCommand);
- public DelegateCommand _taskPauseCommand;
- public DelegateCommand TaskPauseCommand => _taskPauseCommand ?? new DelegateCommand(ExecuteTaskPauseCommand);
- public DelegateCommand _exportWordCommand;
- public DelegateCommand ExportWordCommand => _exportWordCommand ?? new DelegateCommand(ExecuteExportWordCommand);
- public DelegateCommand _frushClientCommand;
- public DelegateCommand FrushClientCommand => _frushClientCommand ?? new DelegateCommand(ExecuteFrushClientCommand);
-
- public DelegateCommand _clearPipeCommand;
- public DelegateCommand ClearPipeCommand => _clearPipeCommand ?? new DelegateCommand(ExecuteClearPipeCommand);
- private DelegateCommand _washChooseCommand;
- public DelegateCommand WashChooseCommand => _washChooseCommand ?? new DelegateCommand(() =>
- {
- string pathFile = "/SHJX.Service.Resource;component/Resources/";
- WashIcon = $"{pathFile}{((bool)WhetherWash ? "clear_selected.png" : "clear_unselected.png")}";
- });
- public DelegateCommand _manualControlCommand;
- public DelegateCommand ManualControlCommand => _manualControlCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("ShowWindow", "manual");
- });
- public DelegateCommand _settingCommand;
- public DelegateCommand SettingCommand => _settingCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("ShowWindow", "setting");
- });
- public DelegateCommand _aboutSystemCommand;
- public DelegateCommand AboutSystemCommand => _aboutSystemCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("ShowWindow", "about");
- });
- private DelegateCommand _screenCaptureCommand;
- public DelegateCommand ScreenCaptureCommand => _screenCaptureCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("ScreenShot");
- });
- private DelegateCommand _minSizeCommand;
- public DelegateCommand MinSizeCommand => _minSizeCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("SystemMinSize");
- });
- public DelegateCommand _templateCommand;
- public DelegateCommand TemplateCommand => _templateCommand ?? new DelegateCommand(() =>
- {
- Messager.Send("ShowWindow", "template");
- });
- #endregion
- #region Execute Command
- private void ExecuteMainCloseCommand()
- {
- Application.Current.Shutdown();
- }
- private void ExecuteLockDestCommand()
- {
- try
- {
- MainHiddenValue = (bool)WhetherLockMain! ? Visibility.Visible : Visibility.Hidden;
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- private void ADDcup(int kbypCount, int bbCount, int totalCount,int bdCount,int DigestionPositionNumFlag)
- {
-
- if (kbypCount == 0|| DigestionPositionNumFlag ==0)//如果没有水样和空白不需要补杯
- return;
- int addCupNum = 0;
- if (kbypCount > DigestionPositionNumFlag)
- {
- addCupNum= 2*DigestionPositionNumFlag - kbypCount - bbCount- bdCount;
- }
- else
- addCupNum = DigestionPositionNumFlag - kbypCount - bbCount;//补杯数量是总的位置减去水样和空白的个数
- if (addCupNum < 0)
- {
- if (-addCupNum <= bbCount)//需要减杯
- {
- for (int j = 0; j < -addCupNum; j++)
- {
- _controller.deleteTask(_detailArgs.LastOrDefault(item => item.SampleType == "补杯").NodeName);
- _detailArgs.Remove(_detailArgs.LastOrDefault(item => item.SampleType == "补杯"));
- }
- }
- else//第二锅需要加杯
- {
- addCupNum = Math.Abs(DigestionPositionNumFlag + addCupNum - bdCount- 2*bbCount);
- }
- }
- if (addCupNum + bbCount + kbypCount < 2 * DigestionPositionNumFlag && addCupNum + bbCount + kbypCount > DigestionPositionNumFlag)
- {
- _config.UpdateIsAddCupBiaoDingBubei("True");
- }
- else
- _config.UpdateIsAddCupBiaoDingBubei("False");
- if (addCupNum > 0)
- {
- bool left = true;
- for (var i = 0; i < addCupNum; i++)
- {
- string nodeName = null;
- List<string> parm = new List<string>(from SampleDetail item in _detailArgs where item.TaskSendOk is not true select item.NodeName);
- for (int j = 0; j < LeftSampleAreas.Count && left; j++)
- {
- if (parm.Contains(LeftSampleAreas[j].UIName) || LeftSampleAreas[j].DetailInfo != "")
- {
- if (j == LeftSampleAreas.Count - 1)
- {
- left = false;
- }
- continue;
- }
- else
- {
- nodeName = LeftSampleAreas[j].UIName;
- break;
- }
- }
- for (int j = 0; j < RightSampleAreas.Count && !left; j++)
- {
- if (parm.Contains(RightSampleAreas[j].UIName) || RightSampleAreas[j].DetailInfo != "")
- continue;
- else
- {
- nodeName = RightSampleAreas[j].UIName;
- break;
- }
- }
- SampleDetail detailArgs = new SampleDetail()
- {
- NodeName = nodeName,
- Detail = "补杯",
- HgSO4 = 0,
- SampleType = "补杯",
- Concentration = "低",
- WhetherSend = true,
- };
- _detailArgs.Add(detailArgs);
- }
- }
- }
- private void ExecuteTaskStartCommand()
- {
- try
- {
- int kbypCount = 0;
- int bbCount = 0;
- int totalCount = 0;
- int bdCount = 0;
- string[] template = new string[2] { "水样", "空白" };
- foreach (var sample in _detailArgs)
- {
- totalCount++;
- if (template.Contains(sample.SampleType))
- {
- kbypCount++;
- }
- if (sample.SampleType.Equals("补杯"))
- {
- bbCount++;
- }
- if (sample.SampleType.Equals("标定"))
- {
- bdCount++;
- }
- }
- if (totalCount - bdCount > 2 * DigestionPositionNumFlag)
- {
- UMessageBox.Error("数量超过,无法下发!");
- return;
- }
- DigestionPositionNumFlag = DataCentre.getDigestionPositionCount();
- if (_config.IsAddCupFeedBack) //是否补杯
- {
- ADDcup( kbypCount, bbCount, totalCount, bdCount, DigestionPositionNumFlag);
- }
- List<SampleDetail> samplesBB = new List<SampleDetail>();
- var samples = (from SampleDetail item in _detailArgs where item.TaskSendOk is not true select item).ToList();
- samplesBB = (from SampleDetail item in _detailArgs where item.TaskSendOk is not true && item.SampleType == "补杯" select item).ToList();
- if (!samples.Any())
- {
- UMessageBox.Error("未选择样品,无法进行任务下发!");
- return;
- }
- int lowSample = 0;
- int highSample = 0;
- int totalSample = 0;
- foreach (var item in samples)
- {
- totalSample++;
- if (item.Concentration == "低")
- {
- lowSample++;
- }
- else
- highSample++;
- }
- string[] types = new string[] {"Water", "Indicator", "Mercury", "SilverSulfate", "PotassiumDichromate_Low", "PotassiumDichromate_High", "FAS", "FAS2"};
- double[] typeVolumn = new double[] { totalSample * 45, totalSample * 0.2, totalSample * 2, totalSample * 15 , lowSample *5 , highSample * 5 , lowSample * 25 , highSample * 25 };
- for(int i=0; i<8; i++)
- {
- LiquidTotal liquid = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(types[i])).First();
- if (liquid.Total < typeVolumn[i])
- {
- UMessageBox.Info("“" + liquid.Description + "”- 试剂不足,请检查");
- return;
- }
- }
- var sb = new StringBuilder();
- sb.Append($"请检查废液位是否放有空杯!\n\n");
- sb.Append($"当前下发任务数量共计:{samples.Count- samplesBB.Count }条\n\n");
- sb.Append($"共需试剂数量如下:\n");
- sb.Append($"H2SO4/Ag2SO4:{samples.Count * 15}ml\n");
- sb.Append($"HgSO4:{samples.Count * 2}ml\n");
- sb.Append($"K2Cr2O7:{samples.Count * 5}ml\n");
- sb.Append($"(NH4)2FeSO4:{samples.Count * 25}ml\n");
- sb.Append($"H2O:{samples.Count * 45}ml\n\n");
- sb.Append("请确定任务是否下发?");
- var result = UMessageBox.Info(sb.ToString());
- if (result.Equals(MessageBoxResult.No))
- return;
- string waveKey = _controller.GetWavekey();
- if ((bool)WhetherWash! && !_controller.CheckExistTask())
- {
- _controller.SendWashTask("润洗", "");
- }
- var resInfo = _controller.SendSampleToControl(samples, waveKey);
- foreach (var item in resInfo)
- {
- switch (item.Code)
- {
- case 200:
- UMessageBox.SuccessTip(item.Message);
- for (int i = 0; i < 24; i++)
- {
- var leftSample = (from SampleDetail items in _detailArgs where items.NodeName == LeftSampleAreas[i].UIName select items).FirstOrDefault();
- if (leftSample is not null)
- {
- LeftSampleAreas[i].TagColor = "#ff99cc";
- LeftSampleAreas[i].DetailInfo = leftSample.Detail;
- if (leftSample.SampleType == "补杯")
- {
- LeftSampleAreas[i].TagColor = "#ffcccc";
- }
- }
- else
- {
- LeftSampleAreas[i].DetailInfo = "";
- LeftSampleAreas[i].TagColor = "#99CCCC";
- }
- var rightSample = (from SampleDetail items in _detailArgs where items.NodeName == RightSampleAreas[i].UIName select items).FirstOrDefault();
- if (rightSample is not null)
- {
- RightSampleAreas[i].TagColor = "#ff99cc";
- RightSampleAreas[i].DetailInfo = rightSample.Detail;
- if (rightSample.SampleType == "补杯")
- {
- RightSampleAreas[i].TagColor = "#ffcccc";
- }
- }
- else
- {
- RightSampleAreas[i].DetailInfo = "";
- RightSampleAreas[i].TagColor = "#99CCCC";
- }
- //var first = _detailArgs.FirstOrDefault(it => it.NodeName.Equals(task.NodeName));
- //if (first != null) first.TaskSendOk = true;
- }
- break;
- case 404:
- var tasks = _controller.GetResidueTask();
- tasks.Where(item => item.Status.Equals(TaskState.New) || item.Status.Equals(TaskState.Doing)).ToList().ForEach(task =>
- {
- var leftSample = LeftSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (leftSample is not null)
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#ff99cc";
- LeftSampleAreas[leftSample.Index].DetailInfo = task.TaskDetailName;
- if (task.TaskDetailName == "补杯")
- {
- LeftSampleAreas[leftSample.Index].TagColor = "#ffcccc";
- }
- }
- var rightSample = RightSampleAreas.FirstOrDefault(item => item.UIName.Equals(task.OriginLocalName));
- if (rightSample is not null)
- {
- RightSampleAreas[rightSample.Index].TagColor = "#ff99cc";
- RightSampleAreas[rightSample.Index].DetailInfo = task.TaskDetailName;
- if (task.TaskDetailName == "补杯")
- {
- RightSampleAreas[rightSample.Index].TagColor = "#ffcccc";
- }
- }
- });
- UMessageBox.ErrorTip(item.Message);
- break;
- }
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.Message);
- }
- }
- private void ExecuteTaskPauseCommand()
- {
- (var value, var strValue) = _config.TaskRunning ?
- (false, "任务暂停成功!\n如有后续人为操作,请等到机器停止后,再进行相关操作!") :
- (true, "任务继续!\n请确保无人员继续操作机器!");
- _config.UpdateTaskRunning(value);
- ChangePauseIcon();
- logger.LogInformation(strValue);
- UMessageBox.SingleBtnInfo(strValue);
- }
- #if false
- private void ExecuteExportTemplateCommand()
- {
- try
- {
- if (UMessageBox.Info("是否确定导出模板?").Equals(MessageBoxResult.No)) return;
- if (string.IsNullOrWhiteSpace(_config.TemplateFilePath))
- {
- UMessageBox.ErrorTip($"导出模板失败,地址为空!");
- return;
- }
- var dt = new DataTable("Template");
- dt.Columns.Add("节点名称", Type.GetType("System.String")!);
- dt.Columns.Add("详细描述", Type.GetType("System.String")!);
- dt.Columns.Add("样品体积", Type.GetType("System.Double")!);
- dt.Columns.Add("样品倍数", Type.GetType("System.Double")!);
- dt.Columns.Add("硫酸汞", Type.GetType("System.Double")!);
- dt.Columns.Add("样品类型", Type.GetType("System.String")!);
- dt.Columns.Add("样品浓度", Type.GetType("System.String")!);
- dt.Columns.Add("是否下发", Type.GetType("System.Boolean")!);
- _detailArgs.ForEach(item =>
- {
- dt.Rows.Add(item.NodeName, item.Detail, item.SampleVolume, item.Multiple, item.HgSO4, item.SampleType, item.Concentration, item.WhetherSend);
- });
- dt.ConvertToExcel(_config.TemplateFilePath);
- UMessageBox.SuccessTip("模板导出成功!");
- }
- catch (Exception ex)
- {
- UMessageBox.ErrorTip($"导出模板失败,失败原因:{ex.Message}");
- logger.LogError($"导出模板失败,失败原因:{ex.Message}");
- }
- }
- private void ExecuteImportTemplateCommand()
- {
- try
- {
- if (UMessageBox.Info("是否确定导入模板?").Equals(MessageBoxResult.No)) return;
- if (string.IsNullOrWhiteSpace(_config.TemplateFilePath))
- {
- UMessageBox.ErrorTip($"导入模板失败,地址为空!");
- return;
- }
- if (!File.Exists(_config.TemplateFilePath))
- {
- UMessageBox.ErrorTip($"导入模板失败,文件不存在,请检查地址是否有误!");
- return;
- }
- DataTable dt = _config.TemplateFilePath.ReadExcel();
- var args = dt.ConvertToList<SampleDetail>();
- args.ForEach(item => { SetSample(item); });
- UMessageBox.SuccessTip("模板导入成功!");
- }
- catch (Exception ex)
- {
- UMessageBox.ErrorTip($"导入模板失败,失败原因:{ex.Message}");
- logger.LogError($"导入模板失败,失败原因:{ex.Message}");
- }
- }
- #endif
- private void ExecuteExportWordCommand()
- {
- try
- {
-
- string wavekey = _controller.GetWavekeyValue();
- if (string.IsNullOrWhiteSpace(wavekey)) return;
- //if (UMessageBox.Info("是否确定导出结果?").Equals(MessageBoxResult.No)) return;
- //if (_config.ExportTypeByExcel)
- //{
- // //ExportResultToExcel(wavekey, () => UMessageBox.SuccessTip("导出成功"));
- //}
- //else if (_config.ExportTypeByWord)
- //{
- ExportResultToWord(wavekey, () => UMessageBox.SuccessTip("导出成功"));
- //}
-
- }
- catch (Exception ex)
- {
- UMessageBox.ErrorTip($"导出Word失败,失败原因:{ex.Message}");
- logger.LogError($"导出Word失败,失败原因:{ex}");
- }
- }
- private void ExecuteFrushClientCommand()
- {
- PortClient();
- }
- private void ExecuteClearPipeCommand()
- {
- if (UMessageBox.Info("是否下发清洗任务?").Equals(MessageBoxResult.No)) return;
- var res = _controller.SendWashTask("清洗","");
- UMessageBox.InfoTip($"清洗任务下发{(res ? "成功" : "失败")}");
- }
- #endregion
- }
- }
|