using Cowain.Bake.BLL; using Cowain.Bake.Common.Core; using Cowain.Bake.Common.Enums; using Cowain.Bake.Model; using Cowain.Bake.Model.Models; using Newtonsoft.Json; using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Linq; using System.Windows; using Unity; namespace Cowain.Bake.Main.ViewModels { internal class MoistureValueViewMode: BindableBase//, Prism.Services.Dialogs.IDialogAware { private readonly IUnityContainer _unityContainer; private float? septumwaterJudge; private float? cathodewaterJudge; private float? anodewaterJudge ; //public string WaterValueModel; List waterModels = null; public CavityDtlViewModel thatParent = null; //public string Title => "输入水含量值"; //// 弹窗打开时触发:读取传递的参数 //public void OnDialogOpened(IDialogParameters parameters) //{ // thatParent = parameters.GetValue("this"); // WaterValueModel = thatParent.WaterValueModel ?? ""; //} //// 允许关闭弹窗(返回true即可) //public bool CanCloseDialog() => true; //// 弹窗关闭后清理资源(可选) //public void OnDialogClosed() { } //// Prism 8中用于触发弹窗关闭的事件 //public event Action RequestClose; //public DelegateCommand CloseCommand => // new DelegateCommand(() => // RequestClose?.Invoke(new DialogResult(ButtonResult.OK))); public MoistureValueViewMode(IUnityContainer unityContainer) { _unityContainer = unityContainer; } public float? SeptumWaterJudge //隔离膜水分 { get => septumwaterJudge; set => SetProperty(ref septumwaterJudge, value); } public float? AnodeWaterJudge //正极水分 { get => anodewaterJudge; set => SetProperty(ref anodewaterJudge, value); } public float? CathodeWaterJudge //负极水分 { get => cathodewaterJudge; set => SetProperty(ref cathodewaterJudge, value); } public DelegateCommand Judge => new DelegateCommand((x) => { int septumwaterTargetValue = int.Parse(_unityContainer.Resolve().GetValueByParaID(ESysSetup.SeptumwaterTargetJudge.ToString())); int cathodewaterTargetValue = int.Parse(_unityContainer.Resolve().GetValueByParaID(ESysSetup.CathodewaterTargetJudge.ToString())); int anodewaterTargetValue = int.Parse(_unityContainer.Resolve().GetValueByParaID(ESysSetup.AnodewaterTargetJudge.ToString())); //MessageBoxResult result = HandyControl.Controls.MessageBox.Ask($@"是否确定为手动输入的水含量值?", "操作提示"); //if (result == System.Windows.MessageBoxResult.Cancel) //{ // return; //} LogHelper.Instance.Warn($"开始测水含量0!"); if (!septumwaterJudge.HasValue || !anodewaterJudge.HasValue || !cathodewaterJudge.HasValue ) { HandyControl.Controls.MessageBox.Warning("数值为空, 请人工输入!"); return; } var WaterModel = new WaterModel(); WaterModel.AnodeWaterValue = anodewaterJudge.ToString(); WaterModel.CathodeWaterValue = cathodewaterJudge.ToString(); WaterModel.SeptumWaterValue = septumwaterJudge.ToString(); int palletStatus = (int)EPalletStatus.TestOK; if (septumwaterJudge >= septumwaterTargetValue || cathodewaterJudge >= cathodewaterTargetValue || anodewaterJudge >= anodewaterTargetValue) { palletStatus = (int)EPalletStatus.TestNG; MessageBoxResult judgeResult = HandyControl.Controls.MessageBox.Ask($@"本次判定水含量值为NG,请确认!", "判定提示"); if (judgeResult == System.Windows.MessageBoxResult.Cancel) { return; } } //WaterValueModel,在这个界面点【判定】,会刷新这个值。也就是这个判断结果会累加,但在【工站明细】中不会 waterModels = JsonConvert.DeserializeObject>(thatParent.WaterValueModel??""); //WaterValueModel:数据库中的水含量数据 WaterModel.BatteryCode = GetBatteryCode(waterModels); if (null == waterModels) { waterModels = new List(); } else { WaterModel.Id = waterModels.Max(w => w.Id) + 1; } waterModels.Add(WaterModel); thatParent.MoistureRuturn(palletStatus, JsonConvert.SerializeObject(waterModels)); HandyControl.Controls.MessageBox.Info("设置测试水含量成功"); }); string GetBatteryCode(List waterList) { var dummys = _unityContainer.Resolve().GetWaterBatteryCode(thatParent.VirtualId); if (0 == dummys.Count) { return ""; } if (waterList == null || 0 == waterList.Count) { return dummys[0].BatteryCode; } List dummyCodes = dummys.Select(x => x.BatteryCode).ToList(); List waterCodes = waterList.Select(x => x.BatteryCode).ToList(); // 查找 list1 中不在 list2 中的字符串 var notInList2 = list1.Except(list2); var batteryCode = dummyCodes.Except(waterCodes); if (0 ==batteryCode.Count()) { return waterList.OrderByDescending(x => x.Id).FirstOrDefault().BatteryCode;//最后一次的假电芯码 } return batteryCode.First(); } } }