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.
138 lines
5.2 KiB
138 lines
5.2 KiB
using SunlightAggregationTerminal.Class;
|
|
using SunlightAggregationTerminal.Models;
|
|
using System.Collections.ObjectModel;
|
|
using System.Text.Json;
|
|
using TouchSocket.Core;
|
|
|
|
namespace SunlightAggregationTerminal;
|
|
|
|
public partial class QueryDetail : ContentPage
|
|
{
|
|
public static ObservableCollection<DyelotDetailsItem> QueryDetailDyelotDetailsItems { get; set; } = new();
|
|
public QueryDetail(DyelotItem item)
|
|
{
|
|
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());
|
|
}
|
|
|
|
private void Data_()
|
|
{
|
|
var processedList = QueryDetailDyelotDetailsItems
|
|
.GroupBy(item => new
|
|
{
|
|
// ?.Trim() 防止空格和 null 导致的分组偏差
|
|
Dyelot = item.Dyelot?.Trim(),
|
|
Step = item.StepNumber
|
|
})
|
|
.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")
|
|
);
|
|
// 赋值给最终展示的 ProductName
|
|
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 (DateTime.TryParse(item.DispenseEndTime, out DateTime dte))
|
|
{
|
|
item.DispenseEndTime = dte.ToString("yyyy-MM-dd HH:mm:ss");
|
|
if (DateTime.TryParse(item.DispenseStartTime, out DateTime dtr))
|
|
{
|
|
//计算用时
|
|
item.UsageTime = $"{(int)(dte - dtr).TotalMinutes}:{(dte - dtr).Seconds:D2}";
|
|
}
|
|
}
|
|
if (DateTime.TryParse(item.CallTime, out DateTime dtc))
|
|
{
|
|
item.CallTime = dtc.ToString("yyyy-MM-dd HH:mm:ss");
|
|
}
|
|
if (item.ProductType == 1 && item.Process == null) item.Process = "未知";
|
|
if (item.ProductType == 3) item.Tank = item.PowderTargetTank.ToString();
|
|
|
|
//行信息
|
|
QueryDetailDyelotDetailsItems.Add(item);
|
|
}
|
|
|
|
if (data.Count == 0)
|
|
{//如果无信息添加空白行
|
|
QueryDetailDyelotDetailsItems.Add(new DyelotDetailsItem { });
|
|
}
|
|
}
|
|
}
|
|
catch (Exception )
|
|
{
|
|
}
|
|
}
|
|
}
|