using CommunityToolkit.Mvvm.ComponentModel; using SunlightAggregationTerminal.Class; using SunlightAggregationTerminal.Models; using System.Collections.ObjectModel; using System.Reflection.PortableExecutable; using System.Text.Json; using TouchSocket.Core; namespace SunlightAggregationTerminal; public class InfoMachineItem { public string? inf { get; set; } }public partial class InfoDetail : ContentPage { public static ObservableCollection InfoProbuctItems { get; set; } = new(); public static ObservableCollection InfoDyelotHistoryItems { get; set; } = new(); public static ObservableCollection InfoMachineItems { get; set; } = new(); public static InfoItem infoItem=new(); private DateTime _lastRefreshTime = DateTime.MinValue; public InfoDetail(InfoItem item) { InitializeComponent(); this.BindingContext = item; infoItem = item; myCardCollectionView_.Refreshing += (sender, e) => { // 防抖判断:如果距离上次刷新不足5秒,直接取消本次操作 if ((DateTime.Now - _lastRefreshTime).TotalSeconds < 1) { myCardCollectionView_.IsRefreshing = false; return; } try { // 更新刷新时间 _lastRefreshTime = DateTime.Now; InfoMachine(); myCardCollectionView_.IsRefreshing = false; } catch (Exception) { } }; } private void ContentPage_Loaded(object sender, EventArgs e) { InfoMachine(); InfoMachineItems.Clear(); InfoProbuctItems.Clear(); InfoDyelotHistoryItems.Clear(); CardCollectionView_inf.ItemsSource = InfoMachineItems; CardCollectionView_machine.ItemsSource = InfoProbuctItems; CardCollectionView_history.ItemsSource = InfoDyelotHistoryItems; } //查询 private void InfoMachine() { Dictionary data_ = new Dictionary(); data_.Add("Command", "InfoMachine"); if (infoItem.Model == "252") { data_.Add("Type", "10"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "252-2T") { data_.Add("Type", "10"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "252RB") { data_.Add("Type", "10"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "252RDRM") { data_.Add("Type", "12"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "242W") { data_.Add("Type", "10"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "302") { data_.Add("Type", "20"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "303") { data_.Add("Type", "20"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } else if (infoItem.Model == "303PDW") { data_.Add("Type", "20"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_Command(data_.ToJsonString()); } } //设备信息 private void Button_real(object sender, EventArgs e) { _real.IsVisible = true; _machine.IsVisible = false; _history.IsVisible = false; _control.IsVisible = false; } //设备内容 private async void Button_machine(object sender, EventArgs e) { _real.IsVisible = false; _machine.IsVisible = true; _history.IsVisible = false; _control.IsVisible = false; if (infoItem.Model == "252" || infoItem.Model == "252-2T" || infoItem.Model == "252RB" || infoItem.Model == "242W" || infoItem.Model == "252RDRM") { await DisplayAlertAsync("限制", "当前功能暂不可用", "是"); return; } if (InfoProbuctItems.Count == 0) { Dictionary data_ = new Dictionary(); data_.Add("Command", "InfoMachinePipes"); data_.Add("MachinName", infoItem.Machine!); Query_Probuct(data_.ToJsonString()); } } //历史 private void Button_history(object sender, EventArgs e) { _real.IsVisible = false; _machine.IsVisible = false; _history.IsVisible = true; _control.IsVisible = false; if (InfoDyelotHistoryItems.Count == 0) { Dictionary data_ = new Dictionary(); data_.Add("Command", "InfoMachineHistory"); if (infoItem.Model == "252") { data_.Add("Type", "80"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "252-2T") { data_.Add("Type", "80"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "252RB") { data_.Add("Type", "80"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "252RDRM") { data_.Add("Type", "82"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "242W") { data_.Add("Type", "80"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "302") { data_.Add("Type", "90"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "303") { data_.Add("Type", "90"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } else if (infoItem.Model == "303PDW") { data_.Add("Type", "90"); data_.Add("Field", "*"); data_.Add("MachinName", infoItem.Machine!); Query_History(data_.ToJsonString()); } } } //远程 private async void Button_control(object sender, EventArgs e) { _real.IsVisible = false; _machine.IsVisible = false; _history.IsVisible = false; _control.IsVisible = true; await DisplayAlertAsync("限制", "当前功能暂不可用", "是"); } //发送请求 public async void Query_Command(string dat) { LoadingIndicator.IsVisible = true; InfoMachineItems.Clear(); DataReceived.Transmit(dat); // 创建一个 秒的延时任务 Task delayTask = Task.Delay(10000); // 创建一个监测任务,不断检查变量 Task monitorTask = Task.Run(async () => { while (InfoMachineItems.Count == 0) { // 每隔 100 毫秒检查一次,避免 CPU 占用过高 await Task.Delay(1000); } }); // 使用 Task.WhenAny 等待任意一个任务完成 await Task.WhenAny(delayTask, monitorTask); LoadingIndicator.IsVisible = false; } public async void Query_Probuct(string dat) { LoadingIndicator.IsVisible = true; InfoProbuctItems.Clear(); DataReceived.Transmit(dat); // 创建一个 秒的延时任务 Task delayTask = Task.Delay(10000); // 创建一个监测任务,不断检查变量 Task monitorTask = Task.Run(async () => { while (InfoProbuctItems.Count == 0) { // 每隔 100 毫秒检查一次,避免 CPU 占用过高 await Task.Delay(1000); } }); // 使用 Task.WhenAny 等待任意一个任务完成 await Task.WhenAny(delayTask, monitorTask); LoadingIndicator.IsVisible = false; } public async void Query_History(string dat) { LoadingIndicator.IsVisible = true; InfoDyelotHistoryItems.Clear(); DataReceived.Transmit(dat); // 创建一个 秒的延时任务 Task delayTask = Task.Delay(10000); // 创建一个监测任务,不断检查变量 Task monitorTask = Task.Run(async () => { while (InfoDyelotHistoryItems.Count == 0) { // 每隔 100 毫秒检查一次,避免 CPU 占用过高 await Task.Delay(1000); } }); // 使用 Task.WhenAny 等待任意一个任务完成 await Task.WhenAny(delayTask, monitorTask); LoadingIndicator.IsVisible = false; } public static void Info_data(string dat, string id) { var data = JsonSerializer.Deserialize>>(dat)!; //助剂原料查询 if (id == "00") { foreach (var item in data!) { ProbuctItem probuctItem = new ProbuctItem(); probuctItem.ProductCode = item.GetValue("ProductCode").ToString()!; probuctItem.ProductName = item.GetValue("ProductName").ToString()!; if (item.GetValue("Enabled").ToString()! == "1") { probuctItem.ProductState = "启用"; } else { probuctItem.ProductState = "停用"; } if (item!.TryGetValue("No", out var _No) && _No != null) { probuctItem.ProductInf = "管路: " + _No + "\n"; } if (item!.TryGetValue("MinLimit", out var _MinLimit) && _MinLimit != null) { probuctItem.ProductInf = probuctItem.ProductInf+"最少量: " + _MinLimit + "g\n"; } if (item!.TryGetValue("MaxLimit", out var _MaxLimit) && _MaxLimit != null) { probuctItem.ProductInf = probuctItem.ProductInf + "最大量: " + _MinLimit + "g\n"; } if (item!.TryGetValue("Conc", out var _Conc) && _Conc != null) { probuctItem.ProductInf = probuctItem.ProductInf + "浓度: " + _Conc + "\n"; } if (item!.TryGetValue("Enabled", out var _Gravity) && _Gravity != null) { probuctItem.ProductInf = probuctItem.ProductInf + "比重: " + _Gravity; } InfoProbuctItems.Add(probuctItem); } if (InfoProbuctItems.Count == 0) InfoProbuctItems.Add(new ProbuctItem()); } //染料查询 else if (id == "10") { foreach (var item in data!) { string inf_ = "染机: " + item.GetValue("Machine").ToString()! + "\n"; inf_ = inf_ + "料单: " + item.GetValue("Dyelot").ToString()!; inf_ = inf_ + "@" + item.GetValue("ReDye").ToString()! + "\n"; inf_ = inf_ + "步骤: " + item.GetValue("StepNumber").ToString()! + "\n"; inf_ = inf_ + "流程: " + item.GetValue("Process").ToString()! + "\n"; inf_ = inf_ + "化料桶: " + item.GetValue("TankNO").ToString()! + "\n"; inf_ = inf_ + "染料桶数: " + item.GetValue("TotalNumber").ToString()!; if (item!.TryGetValue("BarrelState", out var _Type) && _Type != null) { string temp = _Type?.ToString() ?? ""; // 转换 _Type = temp switch { "301" => "就绪", "309" => "未准备", _ => "无信息" }; inf_ = inf_ + _Type; } inf_ = inf_ + "状态: " + item.GetValue("State").ToString()! + "\n"; InfoMachineItem infoMachineItem = new InfoMachineItem(); infoMachineItem.inf = inf_; InfoMachineItems.Add(infoMachineItem); } if (InfoMachineItems.Count == 0) InfoMachineItems.Add(new InfoMachineItem()); } //染料查询化料货架 else if (id == "12") { foreach (var item in data!) { string inf_ = "位置: " + item.GetValue("position").ToString()! + "\n"; inf_ = inf_ + "料单: " + item.GetValue("Dyelot").ToString()!; inf_ = inf_ + "@" + item.GetValue("ReDye").ToString()! + "\n"; inf_ = inf_ + "步骤: " + item.GetValue("StepNumber").ToString()! + "\n"; if (item!.TryGetValue("BarrelType", out var _Type) && _Type != null) { string temp = _Type?.ToString() ?? ""; // 转换 _Type = temp switch { "1" => "空桶", "2" => "染料桶", _ => "无桶" }; inf_ = inf_ + "类型:" + _Type; } if (item!.TryGetValue("BarrelState", out var _BarrelState) && _BarrelState != null) { string temp = _BarrelState?.ToString() ?? ""; _BarrelState = temp switch { "201" => "[分桶]", _ => "" }; inf_ = inf_ + _BarrelState; } inf_ = inf_ + "[" + item.GetValue("Barrelserialnumber").ToString()! + "]\n"; inf_ = inf_ + "上架时间: " + DateTime.Parse(item.GetValue("createtime").ToString() ?? "") .ToString("yyyy-MM-dd HH:mm:ss") + "\n"; inf_ = inf_ + "状态 [" + item.GetValue("State").ToString()! + "]"; InfoMachineItem infoMachineItem = new InfoMachineItem(); infoMachineItem.inf = inf_; InfoMachineItems.Add(infoMachineItem); } if (InfoMachineItems.Count == 0) InfoMachineItems.Add(new InfoMachineItem()); } //助剂查询 else if (id == "20") { foreach (var item in data!) { string inf_ = "染机: " + item.GetValue("Machine").ToString()! + "\n"; inf_ = inf_ + "料单: " + item.GetValue("Dyelot").ToString()!; inf_ = inf_ + "@" + item.GetValue("ReDye").ToString()! + "\n"; inf_ = inf_ + "步骤: " + item.GetValue("StepNumber").ToString()! + "\n"; inf_ = inf_ + "总浴量: " + item.GetValue("Volume").ToString()! + "\n"; inf_ = inf_ + "计量模组: " + item.GetValue("DispenseModule").ToString()! + "\n"; if (item!.TryGetValue("TankNo", out var _TankNo) && _TankNo != null) { inf_ = inf_ + "目标位置: " + item.GetValue("TankNo").ToString()! + "\n"; } else { inf_ = inf_ + "目标位置: 未指定\n" ; } inf_ = inf_ + "开始时间: " + DateTime.Parse(item.GetValue("DispenseStartTime").ToString() ?? "") .ToString("yyyy-MM-dd HH:mm:ss") + "\n"; if (item!.TryGetValue("State", out var _Type) && _Type != null) { string temp = _Type?.ToString() ?? ""; // 转换 _Type = temp switch { "102" => "计量中", "301" => "完成", "309" => "异常", _ => "无信息" }; inf_ = inf_ + "状态: " + _Type; } InfoMachineItem infoMachineItem = new InfoMachineItem(); infoMachineItem.inf = inf_; if (!InfoMachineItems.Any(x => x.inf == inf_)) { InfoMachineItems.Add(infoMachineItem); } } if (InfoMachineItems.Count==0) InfoMachineItems.Add(new InfoMachineItem()); } //化料历史信息查询 else if (id == "80") { foreach (var item in data!) { DyelotDetailsItem dyelotDetailsItem = new DyelotDetailsItem(); dyelotDetailsItem.Dyelot = item.GetValue("Dyelot").ToString()!; dyelotDetailsItem.ReDye =int.Parse( item.GetValue("ReDye").ToString()!); dyelotDetailsItem.StepNumber = int.Parse(item.GetValue("StepNumber").ToString()!); dyelotDetailsItem.Notes = "染机: " + item.GetValue("Machine").ToString()!+"\n"; dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "流程: " + item.GetValue("Process").ToString()!+"\n"; if (item!.TryGetValue("State", out var _State) && _State != null) { string temp = _State?.ToString() ?? ""; // 转换 _State = temp switch { "301" => "完成", "309" => "异常", _ => "无信息" }; dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "状态: " + _State ; } if (item!.TryGetValue("TankNo", out var _TankNo) && _TankNo != null) { dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + " [化料桶T" + _TankNo + "]"; } if (item!.TryGetValue("TotalNumber", out var _TotalNumber) && _TotalNumber != null) { dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + " [" + _TotalNumber+"桶]"; } dyelotDetailsItem.DispenseStartTime = item.GetValue("DispenseStartTime").ToString()!.Replace("T", " "); dyelotDetailsItem.DispenseEndTime = item.GetValue("DispenseEndTime").ToString()!.Replace("T", " "); dyelotDetailsItem.UsageTime = item.GetValue("CallTime").ToString()!.Replace("T", " "); InfoDyelotHistoryItems.Add(dyelotDetailsItem); } if (InfoDyelotHistoryItems.Count == 0) InfoDyelotHistoryItems.Add(new DyelotDetailsItem()); } //化料货架历史信息查询 else if (id == "82") { foreach (var item in data!) { DyelotDetailsItem dyelotDetailsItem = new DyelotDetailsItem(); dyelotDetailsItem.Dyelot = item.GetValue("Dyelot").ToString()!; dyelotDetailsItem.ReDye = int.Parse(item.GetValue("ReDye").ToString()!); dyelotDetailsItem.StepNumber = int.Parse(item.GetValue("StepNumber").ToString()!); dyelotDetailsItem.Notes = "位置: " + item.GetValue("Position").ToString()! + "\n"; if (item!.TryGetValue("BarrelType", out var _Type) && _Type != null) { string temp = _Type?.ToString() ?? ""; // 转换 _Type = temp switch { "1" => "空桶", "2" => "染料桶", _ => "无桶" }; dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "类型: " + _Type; } if (item!.TryGetValue("BarrelState", out var _BarrelState) && _BarrelState != null) { string temp = _BarrelState?.ToString() ?? ""; _BarrelState = temp switch { "201" => "[分桶]", _ => "" }; dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + _BarrelState; } dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "[" + item.GetValue("Barrelserialnumber").ToString()! + "]\n"; if (item!.TryGetValue("State", out var _State) && _State != null) { dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "状态: " + _State; } dyelotDetailsItem.DispenseStartTime = ""; dyelotDetailsItem.DispenseEndTime = ""; dyelotDetailsItem.UsageTime = item.GetValue("Createtime").ToString()!.Replace("T", " "); InfoDyelotHistoryItems.Add(dyelotDetailsItem); } if (InfoDyelotHistoryItems.Count == 0) InfoDyelotHistoryItems.Add(new DyelotDetailsItem()); } //助剂历史信息查询 else if (id == "90") { foreach (var item in data!) { DyelotDetailsItem dyelotDetailsItem = new DyelotDetailsItem(); dyelotDetailsItem.Dyelot = item.GetValue("Dyelot").ToString()!; dyelotDetailsItem.ReDye = int.Parse(item.GetValue("ReDye").ToString()!); dyelotDetailsItem.StepNumber = int.Parse(item.GetValue("StepNumber").ToString()!); dyelotDetailsItem.Notes = "染机: " + item.GetValue("Machine").ToString()! + "\n"; if (item!.TryGetValue("State", out var _State) && _State != null) { string temp = _State?.ToString() ?? ""; // 转换 _State = temp switch { "301" => "完成", "309" => "异常", _ => "无信息" }; dyelotDetailsItem.Notes = dyelotDetailsItem.Notes + "状态: " + _State; } dyelotDetailsItem.DispenseStartTime = item.GetValue("DispenseStartTime").ToString()!.Replace("T", " "); dyelotDetailsItem.DispenseEndTime = item.GetValue("DispenseEndTime").ToString()!.Replace("T", " "); dyelotDetailsItem.UsageTime = item.GetValue("CallTime").ToString()!.Replace("T", " "); InfoDyelotHistoryItems.Add(dyelotDetailsItem); } if (InfoDyelotHistoryItems.Count == 0) InfoDyelotHistoryItems.Add(new DyelotDetailsItem()); } } }