整合管理器应用端(MAUI跨平台)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.5 KiB

using SunlightAggregationTerminal.Class;
2 months ago
using SunlightAggregationTerminal.Models;
using System.Collections.ObjectModel;
using System.Text.Json;
using TouchSocket.Core;
2 months ago
namespace SunlightAggregationTerminal;
public partial class QueryDetail : ContentPage
{
public static ObservableCollection<DyelotDetailsItem> QueryDetailDyelotDetailsItems { get; set; } = new();
public QueryDetail(DyelotItem item)
{
2 months ago
InitializeComponent();
_Dyelot.Text = item.Dyelot;
_ReDye.Text = item.ReDye?.ToString()??"";
_Machine.Text = item.Machine;
_CreationTime.Text = item.CreationTime;
_FabricName.Text = item.FabricName;
_CustomerName.Text = item.CustomerName;
_ColorName.Text = item.ColorName;
// 如果 item.Color 为 null,则默认为透明色
_Color.Color = item.Color.HasValue ? Color.FromInt(item.Color.Value) : Colors.Gray;
Dictionary<string, object> QueryDictionary = new Dictionary<string, object>();
QueryDictionary.Add("Command", "QueryDetail");
/* QueryDictionary.Add("Field", "[Dyelot],[ReDye],[StepNumber],[ProductCode],[ProductName]," +
"[ProductType],[Grams],[Created],[DispenseStartTime],[DispenseEndTime],[DispenseTime]," +
"[DispenseGrams],[DispenseResult],[Process]");*/
QueryDictionary.Add("Field", "*");
QueryDictionary.Add("Dyelot", item.Dyelot?.ToString() ?? "");
QueryDictionary.Add("ReDye", item.ReDye?.ToString()??"");
Query_Command(QueryDictionary.ToJsonString());
2 months ago
}
private void Data_()
{
var processedList = QueryDetailDyelotDetailsItems
.GroupBy(item => new
{
// ?.Trim() 防止空格和 null 导致的分组偏差
2 months ago
Dyelot = item.Dyelot?.Trim(),
Step = item.StepNumber
2 months ago
})
.Select(g =>
{
var list = g.ToList();
var firstItem = list.First();
// 直接使用 Select 的重载,获取当前元素的索引 i,然后通过 list[i] 访问对应的其他字段
var combinedInfo = string.Join("\n",
list.Select((x, i) => $"原料: {list[i].ProductName} ({list[i].ProductCode})\n" +
$"目标/实际: {list[i].GramsDisplay}g / {list[i].DispenseGramsDisplay}g")
);
2 months ago
// 赋值给最终展示的 ProductName
if (list[0].Process !=null) combinedInfo = combinedInfo + "\n溶解流程:"+ list[0].Process;
2 months ago
firstItem.ProductName = combinedInfo;
return firstItem;
})
.ToList(); // 强制立刻执行查询
// 更新 UI 绑定的 ObservableCollection
QueryDetailDyelotDetailsItems.Clear();
foreach (var item in processedList)
{
QueryDetailDyelotDetailsItems.Add(item);
}
CardCollectionView_data.ItemsSource = QueryDetailDyelotDetailsItems;
}
public async void Query_Command(string dat)
{
LoadingIndicator.IsVisible = true;
QueryDetailDyelotDetailsItems.Clear();
DataReceived.Transmit(dat);
// 创建一个 秒的延时任务
Task delayTask = Task.Delay(10000);
// 创建一个监测任务,不断检查变量
Task monitorTask = Task.Run(async () =>
{
while (QueryDetailDyelotDetailsItems.Count == 0)
{
// 每隔 100 毫秒检查一次,避免 CPU 占用过高
await Task.Delay(1000);
}
});
// 使用 Task.WhenAny 等待任意一个任务完成
await Task.WhenAny(delayTask, monitorTask);
Data_();
LoadingIndicator.IsVisible = false;
}
public static void Query_data(string dat)
{
try
{
var data = JsonSerializer.Deserialize<List<DyelotDetailsItem>>(dat);
if (data != null)
{
//添加入显示信息
foreach (var item in data)
{
if (item.DispenseEndTime != null) item.DispenseEndTime = item.DispenseEndTime.Replace("T", " ");
QueryDetailDyelotDetailsItems.Add(item);
}
if (data.Count == 0)
{//如果无信息添加空白行
QueryDetailDyelotDetailsItems.Add(new DyelotDetailsItem { });
}
}
}
catch (Exception)
{
}
}
2 months ago
}