@@ -21,6 +21,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HKLib", "HKLib\HKLib.csproj | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HKCardManager", "HKCardManager\HKCardManager.csproj", "{96C17249-7F4A-4D25-B658-507A8E876582}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HKCardManager", "HKCardManager\HKCardManager.csproj", "{96C17249-7F4A-4D25-B658-507A8E876582}" | ||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfTest", "WpfTest\WpfTest.csproj", "{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}" | |||||
EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
@@ -101,6 +103,14 @@ Global | |||||
{96C17249-7F4A-4D25-B658-507A8E876582}.Release|Any CPU.Build.0 = Release|Any CPU | {96C17249-7F4A-4D25-B658-507A8E876582}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{96C17249-7F4A-4D25-B658-507A8E876582}.Release|x86.ActiveCfg = Release|Any CPU | {96C17249-7F4A-4D25-B658-507A8E876582}.Release|x86.ActiveCfg = Release|Any CPU | ||||
{96C17249-7F4A-4D25-B658-507A8E876582}.Release|x86.Build.0 = Release|Any CPU | {96C17249-7F4A-4D25-B658-507A8E876582}.Release|x86.Build.0 = Release|Any CPU | ||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{8312F839-6DA5-4BF0-8BB3-D1505E194AB5}.Release|x86.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -77,6 +77,7 @@ namespace HKCardOUT | |||||
DataBus.StartDevice = configer["StartDevice"].AsBool(); | DataBus.StartDevice = configer["StartDevice"].AsBool(); | ||||
DataBus.Cancel = configer["Cancel"].AsBool(); | DataBus.Cancel = configer["Cancel"].AsBool(); | ||||
DataBus.Count = configer["Count"].AsInt(); | DataBus.Count = configer["Count"].AsInt(); | ||||
DataBus.MQTT = configer["MQTT"].ToString(); | |||||
DataBus.Admin = configer.GetSection("Admin").GetChildren().Select(t => t.Value).ToList(); | DataBus.Admin = configer.GetSection("Admin").GetChildren().Select(t => t.Value).ToList(); | ||||
HKLib.Configer.SaasRoute = DataBus.SaasRoute; | HKLib.Configer.SaasRoute = DataBus.SaasRoute; | ||||
RemoteService.PullShopInfo(); | RemoteService.PullShopInfo(); | ||||
@@ -94,6 +95,7 @@ namespace HKCardOUT | |||||
DataBus.saleLogDtos = new System.Collections.Concurrent.ConcurrentQueue<DTO.SaleLogDto>(); | DataBus.saleLogDtos = new System.Collections.Concurrent.ConcurrentQueue<DTO.SaleLogDto>(); | ||||
RemoteService.GetFoodMenus(); | RemoteService.GetFoodMenus(); | ||||
RemoteService.GetRangeCtrl(); | RemoteService.GetRangeCtrl(); | ||||
MQTTCon.Connection(); | |||||
base.Configure(); | base.Configure(); | ||||
} | } | ||||
@@ -14,9 +14,9 @@ | |||||
<AssemblyVersion>1.0.0.0</AssemblyVersion> | <AssemblyVersion>1.0.0.0</AssemblyVersion> | ||||
<Platforms>AnyCPU;x86</Platforms> | <Platforms>AnyCPU;x86</Platforms> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup> | |||||
<!--<PropertyGroup> | |||||
<ApplicationManifest>App.manifest</ApplicationManifest> | <ApplicationManifest>App.manifest</ApplicationManifest> | ||||
</PropertyGroup> | |||||
</PropertyGroup>--> | |||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> | ||||
<DefineConstants>TRACE;Core</DefineConstants> | <DefineConstants>TRACE;Core</DefineConstants> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
@@ -33,7 +33,9 @@ | |||||
<None Remove="HKResouces\背景.jpg" /> | <None Remove="HKResouces\背景.jpg" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.25" /> | |||||
<PackageReference Include="BPA.Communication" Version="1.0.42" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.28" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.78" /> | |||||
<PackageReference Include="CalcBinding" Version="2.5.2" /> | <PackageReference Include="CalcBinding" Version="2.5.2" /> | ||||
<PackageReference Include="HandyControls" Version="3.4.1" /> | <PackageReference Include="HandyControls" Version="3.4.1" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | ||||
@@ -0,0 +1,226 @@ | |||||
using BPA.Communication; | |||||
using BPA.Helper; | |||||
using BPA.Message; | |||||
using BPASmartClient.CustomResource.Pages.Model; | |||||
using BPASmartClient.Model; | |||||
using DTO; | |||||
using HKCardOUT.Helper; | |||||
using HKCardOUT.Logic.Service; | |||||
using HKControl; | |||||
using HKLib.Dto; | |||||
using ImTools; | |||||
using Newtonsoft.Json; | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading; | |||||
namespace Helper.BigScreen | |||||
{ | |||||
public class DataCenter | |||||
{ | |||||
public static List<string> S1 { get; set; } = new List<string>(2); | |||||
public static List<string> S2 { get; set; } = new List<string>(2); | |||||
public static List<string> S3 { get; set; } = new List<string>(2); | |||||
public static List<string> S4 { get; set; } = new List<string>(2); | |||||
public static List<string> S5 { get; set; } = new List<string>(2); | |||||
public static List<string> S6 { get; set; } = new List<string>(2); | |||||
public static void CreateData() | |||||
{ | |||||
var sender = new ScreenModelSplitMeals(); | |||||
sender.Alarm = new List<AlarmModel>(); | |||||
AlarmHelper<DataModel>.AddAction = new Action<string>((param) => | |||||
{ | |||||
sender.Alarm.Add(new AlarmModel | |||||
{ | |||||
AlarmMs = param, | |||||
AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") | |||||
}); | |||||
}); | |||||
ThreadManage.GetInstance().StartLong(() => | |||||
{ | |||||
var model = new HKCore().GetDayData(); | |||||
sender.IsRun = IsRun.运行; | |||||
if (!Main.GetInstance.GetIsConnect(6) || !Main.GetInstance.GetIsConnect(5)) | |||||
sender.RobotStatu1 = WorkStatus.停止; | |||||
if (!Main.GetInstance.GetIsConnect(4) || !Main.GetInstance.GetIsConnect(3)) | |||||
sender.RobotStatu2 = WorkStatus.停止; | |||||
if (!Main.GetInstance.GetIsConnect(2) || !Main.GetInstance.GetIsConnect(1)) | |||||
sender.RobotStatu3 = WorkStatus.停止; | |||||
sender.WorkStatus_1 = Main.GetInstance.GetIsSwipe(6) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.WorkStatus_2 = Main.GetInstance.GetIsSwipe(5) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.WorkStatus_3 = Main.GetInstance.GetIsSwipe(4) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.WorkStatus_4 = Main.GetInstance.GetIsSwipe(3) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.WorkStatus_5 = Main.GetInstance.GetIsSwipe(2) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.WorkStatus_6 = Main.GetInstance.GetIsSwipe(1) ? WorkStatus.工作 : WorkStatus.待机; | |||||
sender.SplitMeals_CreditCardCount_1 = model["6"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("6")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["6"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["6"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S1.Count >= 2) | |||||
{ | |||||
S1.RemoveAt(0); | |||||
S1.Add(Name); | |||||
} | |||||
else | |||||
S1.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_1 = S1[0]; | |||||
sender.SplitMeals_CreditCardName_1 = S1.Count >= 2 ? S1[1] : S1[0]; | |||||
} | |||||
} | |||||
} | |||||
var GateId = DataBus.StoreInfo.Devices.Where(t => t.Address == $"05" || t.Address == $"06").Select(t => t.GateId).FirstOrDefault(); | |||||
var res = DataBus.Menu.GateFood.Where(t => t.GateId == GateId)?.Select(t => t.Foods)?.FirstOrDefault(); | |||||
sender.SplitMeals_CookType_1 = res; | |||||
sender.SplitMeals_CreditCardCount_2 = model["5"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("5")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["5"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["5"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S2.Count >= 2) | |||||
{ | |||||
S2.RemoveAt(0); | |||||
S2.Add(Name); | |||||
} | |||||
else | |||||
S2.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_2 = S2[0]; | |||||
sender.SplitMeals_CreditCardName_2 = S2.Count >= 2 ? S2[1] : S2[0]; | |||||
} | |||||
} | |||||
} | |||||
sender.SplitMeals_CookType_2 = res; | |||||
sender.SplitMeals_CreditCardCount_3 = model["4"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("4")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["4"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["4"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S3.Count >= 2) | |||||
{ | |||||
S3.RemoveAt(0); | |||||
S3.Add(Name); | |||||
} | |||||
else | |||||
S3.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_3 = S3[0]; | |||||
sender.SplitMeals_CreditCardName_3 = S3.Count >= 2 ? S3[1] : S3[0]; | |||||
} | |||||
} | |||||
} | |||||
sender.SplitMeals_CookType_3 = res; | |||||
sender.SplitMeals_CreditCardCount_4 = model["3"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("3")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["3"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["3"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S4.Count >= 2) | |||||
{ | |||||
S4.RemoveAt(0); | |||||
S4.Add(Name); | |||||
} | |||||
else | |||||
S4.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_4 = S4[0]; | |||||
sender.SplitMeals_CreditCardName_4 = S4.Count >= 2 ? S4[1] : S4[0]; | |||||
} | |||||
} | |||||
} | |||||
sender.SplitMeals_CookType_4 = res; | |||||
sender.SplitMeals_CreditCardCount_5 = model["2"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("2")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["2"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["2"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S5.Count >= 2) | |||||
{ | |||||
S5.RemoveAt(0); | |||||
S5.Add(Name); | |||||
} | |||||
else | |||||
S5.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_5 = S5[0]; | |||||
sender.SplitMeals_CreditCardName_5 = S5.Count >= 2 ? S5[1] : S5[0]; | |||||
} | |||||
} | |||||
} | |||||
sender.SplitMeals_CookType_5 = res; | |||||
sender.SplitMeals_CreditCardCount_6 = model["1"]; | |||||
if (DataBus.SaleLogDtoList.ContainsKey("1")) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["1"].Count > 0) | |||||
{ | |||||
if (DataBus.SaleLogDtoList["1"].TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
var Name = DataBus.UserListDto.Where(t => t.Cards.Select(x => x.CardNum).Contains(info.CardNo)).Select(x => x.Name).FirstOrDefault(); | |||||
if (S6.Count >= 2) | |||||
{ | |||||
S6.RemoveAt(0); | |||||
S6.Add(Name); | |||||
} | |||||
else | |||||
S6.Add(Name); | |||||
sender.SplitMeals_CreditCardNameBefore_6 = S6[0]; | |||||
sender.SplitMeals_CreditCardName_6 = S6.Count >= 2 ? S6[1] : S6[0]; | |||||
} | |||||
} | |||||
} | |||||
sender.SplitMeals_CookType_6 = res; | |||||
sender.StatsCount = new List<StatsModel> { | |||||
new StatsModel { } | |||||
}; | |||||
MQTTCon.Send(sender); | |||||
Thread.Sleep(10); | |||||
}, $"屏幕刷卡信息", true); | |||||
} | |||||
public static void InitQueeue() | |||||
{ | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | |||||
{ | |||||
if (DataBus.saleLogDtos.Count > 0) | |||||
{ | |||||
if (DataBus.saleLogDtos.TryDequeue(out SaleLogDto info)) | |||||
{ | |||||
if (!DataBus.SaleLogDtoList.ContainsKey(info.Location)) | |||||
DataBus.SaleLogDtoList.TryAdd(info.Location, new ConcurrentQueue<SaleLogDto>()); | |||||
DataBus.SaleLogDtoList[info.Location].Enqueue(info); | |||||
} | |||||
} | |||||
Thread.Sleep(100); | |||||
}), "刷卡队列分配"); | |||||
} | |||||
} | |||||
} |
@@ -1,8 +1,13 @@ | |||||
using DTO; | |||||
using BPA.Communication; | |||||
using BPA.Helper; | |||||
using BPA.Message.Enum; | |||||
using BPA.Message; | |||||
using DTO; | |||||
using HKCardOUT.Logic.Model; | using HKCardOUT.Logic.Model; | ||||
using HKCardOUT.Views; | using HKCardOUT.Views; | ||||
using HKLib.Dto; | using HKLib.Dto; | ||||
using Logic.RemoteModel; | using Logic.RemoteModel; | ||||
using Newtonsoft.Json; | |||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -12,7 +17,9 @@ using System.Linq; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Windows.Data; | using System.Windows.Data; | ||||
using System.Xml.Linq; | |||||
using XExten.Advance.StaticFramework; | using XExten.Advance.StaticFramework; | ||||
using static System.Net.Mime.MediaTypeNames; | |||||
namespace HKCardOUT.Helper | namespace HKCardOUT.Helper | ||||
{ | { | ||||
@@ -38,6 +45,7 @@ namespace HKCardOUT.Helper | |||||
public static string SaasRoute { get; set; } | public static string SaasRoute { get; set; } | ||||
public static int Span { get; set; } | public static int Span { get; set; } | ||||
public static int Count { get; set; } | public static int Count { get; set; } | ||||
public static string MQTT { get; set; } | |||||
public static List<string> Admin { get; set; } | public static List<string> Admin { get; set; } | ||||
public static TimeSpilte Times { get; set; } | public static TimeSpilte Times { get; set; } | ||||
public static StoreInfoResponse StoreInfo { get; set; } | public static StoreInfoResponse StoreInfo { get; set; } | ||||
@@ -92,8 +100,108 @@ namespace HKCardOUT.Helper | |||||
} | } | ||||
} | } | ||||
public class MemoryBus | public class MemoryBus | ||||
{ | |||||
{ | |||||
public static List<CardStutas> CardStatus { get; set; } = new List<CardStutas>(); | public static List<CardStutas> CardStatus { get; set; } = new List<CardStutas>(); | ||||
public static List<SaleLog> CardRecord { get; set; } = new List<SaleLog>(); | public static List<SaleLog> CardRecord { get; set; } = new List<SaleLog>(); | ||||
} | } | ||||
public static class MQTTCon | |||||
{ | |||||
static MqttHelper mqttHelper; | |||||
static MQTTCon() | |||||
{ | |||||
mqttHelper = new MqttHelper(); | |||||
} | |||||
/// <summary> | |||||
/// Mqtt是否运行 | |||||
/// </summary> | |||||
static bool IsRunningMqtt = false; | |||||
public static void Connection() | |||||
{ | |||||
try | |||||
{ | |||||
//2.Mqtt连接 | |||||
if (!string.IsNullOrEmpty(DataBus.MQTT) && DataBus.MQTT.Contains(',')) | |||||
{ | |||||
string[] mqttcom = DataBus.MQTT.Split(','); | |||||
if (mqttcom != null && mqttcom.Count() == 4) | |||||
{ | |||||
mqttHelper.Connect(mqttcom[2], mqttcom[3], mqttcom[0], int.Parse(mqttcom[1]), $"分餐机{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); | |||||
} | |||||
} | |||||
mqttHelper.Disconnect = new Action(() => | |||||
{ | |||||
IsRunningMqtt = false; | |||||
MessageLog.GetInstance.ShowEx($"分餐机MQTT异常断开...."); | |||||
}); | |||||
mqttHelper.ConnectOk = new Action(() => | |||||
{ | |||||
IsRunningMqtt = true;//连接成功 | |||||
}); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
MessageLog.GetInstance.ShowEx($"分餐机初始化连接 MQTT,原因:{ex.Message}"); | |||||
} | |||||
} | |||||
public static void Send(ScreenModelSplitMeals screenModel) | |||||
{ | |||||
SendScreenDataModel sendScreenData = new SendScreenDataModel(); | |||||
sendScreenData.Name = ScreenDeviceType.分餐机; | |||||
sendScreenData.Value = screenModel; | |||||
//new ScreenModelSplitMeals | |||||
//{ | |||||
// IsRun = k2 == 0 ? IsRun.运行 : IsRun.停止, | |||||
// WorkStatus = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
// RobotStatu = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
// Alarm = new List<AlarmModel> { | |||||
// new AlarmModel { AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(2).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// }, | |||||
// FailuresCount = 0, | |||||
// StatsCount = new List<StatsModel> { | |||||
// new StatsModel { Name = name_s[0], Count = new Random().Next(0, 100) }, | |||||
// new StatsModel { Name = name_s[1], Count = new Random().Next(0, 100) }, | |||||
// new StatsModel { Name = name_s[2], Count = new Random().Next(0, 100) }, | |||||
// new StatsModel { Name = name_s[3], Count = new Random().Next(0, 100) }, | |||||
// new StatsModel { Name = name_s[4], Count = new Random().Next(0, 100) }, | |||||
// }, | |||||
// SplitMeals_CreditCardCount_1 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_1 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_1 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_1 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
// SplitMeals_CreditCardCount_2 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_2 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_2 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_2 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
// SplitMeals_CreditCardCount_3 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_3 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_3 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_3 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
// SplitMeals_CreditCardCount_4 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_4 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_4 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_4 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
// SplitMeals_CreditCardCount_5 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_5 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_5 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_5 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
// SplitMeals_CreditCardCount_6 = new Random().Next(0, 100), | |||||
// SplitMeals_CreditCardNameBefore_6 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CreditCardName_6 = name_XM[new Random().Next(0, 5)], | |||||
// SplitMeals_CookType_6 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
//}; | |||||
string message = JsonConvert.SerializeObject(sendScreenData); | |||||
mqttHelper.Publish(ScreenTOPIC.GetInstance.GetTopic(ScreenDeviceType.分餐机), message); | |||||
} | |||||
} | |||||
} | } |
@@ -292,6 +292,16 @@ namespace HKCardOUT.Logic.Service | |||||
.WhereIF(screen.Length == 2, t => t.Location == a || t.Location == b).Select(t => t.Location).ToList(); | .WhereIF(screen.Length == 2, t => t.Location == a || t.Location == b).Select(t => t.Location).ToList(); | ||||
return count.GroupBy(t => t).ToDictionary(t => t.Key, t => t.Count()); | return count.GroupBy(t => t).ToDictionary(t => t.Key, t => t.Count()); | ||||
} | } | ||||
/// <summary> | |||||
/// 获取当天的刷卡 | |||||
/// </summary> | |||||
/// <returns></returns> | |||||
public Dictionary<string, int> GetDayData() | |||||
{ | |||||
var today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); | |||||
var count = DbContext.Context.Queryable<SaleLog>().Select(t => t.Location).ToList(); | |||||
return count.GroupBy(t => t).ToDictionary(t => t.Key, t => t.Count()); | |||||
} | |||||
public void WriteData() | public void WriteData() | ||||
{ | { | ||||
@@ -1,5 +1,6 @@ | |||||
using BPA.Helper; | using BPA.Helper; | ||||
using DTO; | using DTO; | ||||
using Helper.BigScreen; | |||||
using HKCardOUT.Helper; | using HKCardOUT.Helper; | ||||
using HKCardOUT.Logic.Model; | using HKCardOUT.Logic.Model; | ||||
using HKCardOUT.Logic.Service; | using HKCardOUT.Logic.Service; | ||||
@@ -39,6 +40,8 @@ namespace HKCardOUT.ViewModels | |||||
serv.GetAllCardStatus(); | serv.GetAllCardStatus(); | ||||
ProcessCard(); | ProcessCard(); | ||||
InsertData(); | InsertData(); | ||||
DataCenter.InitQueeue(); | |||||
DataCenter.CreateData(); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -133,7 +136,7 @@ namespace HKCardOUT.ViewModels | |||||
Device = t.Name, | Device = t.Name, | ||||
Stalls = x.Name | Stalls = x.Name | ||||
}).ToList(); | }).ToList(); | ||||
if (Init != null) | |||||
/* if (Init != null) | |||||
{ | { | ||||
Ad = new ObservableCollection<AdDTO>(Init); | Ad = new ObservableCollection<AdDTO>(Init); | ||||
var route = SyncStatic.CreateFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AD.txt")); | var route = SyncStatic.CreateFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AD.txt")); | ||||
@@ -145,7 +148,7 @@ namespace HKCardOUT.ViewModels | |||||
var jsons = SyncStatic.Decompress(SyncStatic.ReadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AD.txt")), SecurityType.Base64); | var jsons = SyncStatic.Decompress(SyncStatic.ReadFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AD.txt")), SecurityType.Base64); | ||||
Ad = new ObservableCollection<AdDTO>(jsons.ToModel<List<AdDTO>>()); | Ad = new ObservableCollection<AdDTO>(jsons.ToModel<List<AdDTO>>()); | ||||
AdOpen(); | AdOpen(); | ||||
} | |||||
}*/ | |||||
})); | })); | ||||
} | } | ||||
@@ -24,8 +24,10 @@ | |||||
//"MQ": "host=10.2.1.21:5672;username=guest;password=guest" | //"MQ": "host=10.2.1.21:5672;username=guest;password=guest" | ||||
//MQ正式地址 | //MQ正式地址 | ||||
"MQ": "host=47.108.65.220;username=root;password=pwd", | "MQ": "host=47.108.65.220;username=root;password=pwd", | ||||
//MQTT | |||||
"MQTT": "10.2.1.254,1883,admin,public", | |||||
//超级卡 | //超级卡 | ||||
"Admin": [6666666666666666666,8888888888888888888,9999999999999999999,1590198360768385024,1590198442460844032], | |||||
"Admin": [ 6666666666666666666, 8888888888888888888, 9999999999999999999, 1590198360768385024, 1590198442460844032 ], | |||||
//刷卡间隔 | //刷卡间隔 | ||||
"Span": 5 | "Span": 5 | ||||
} | } |
@@ -0,0 +1,61 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.ComponentModel.DataAnnotations; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.Model | |||||
{ | |||||
public class Alarm | |||||
{ | |||||
/// <summary> | |||||
/// ID | |||||
/// </summary> | |||||
[Key] | |||||
public int Id | |||||
{ | |||||
get { return _mId; } | |||||
set { _mId = value; } | |||||
} | |||||
private int _mId; | |||||
/// <summary> | |||||
/// 编号ID | |||||
/// </summary> | |||||
public int NumId { get { return _mNumId; } set { _mNumId = value; } } | |||||
private int _mNumId; | |||||
/// <summary> | |||||
/// 日期 | |||||
/// </summary> | |||||
public string Date { get { return _mDate; } set { _mDate = value; } } | |||||
private string _mDate; | |||||
/// <summary> | |||||
/// 时间 | |||||
/// </summary> | |||||
public string Time { get { return _mTime; } set { _mTime = value; } } | |||||
private string _mTime; | |||||
/// <summary> | |||||
/// 报警信息 | |||||
/// </summary> | |||||
public string Info { get { return _mInfo; } set { _mInfo = value; } } | |||||
private string _mInfo; | |||||
/// <summary> | |||||
/// 报警值 | |||||
/// </summary> | |||||
public string Value { get { return _mValue; } set { _mValue = value; } } | |||||
private string _mValue; | |||||
/// <summary> | |||||
/// 报警等级 | |||||
/// </summary> | |||||
public string Grade { get { return _mGrade; } set { _mGrade = value; } } | |||||
private string _mGrade; | |||||
} | |||||
} |
@@ -0,0 +1,34 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.CustomResource.Pages.Model | |||||
{ | |||||
[AttributeUsage(AttributeTargets.Property)] | |||||
public class AlarmAttribute : Attribute | |||||
{ | |||||
public AlarmAttribute(string Info, AlarmTriggerType alarmTriggerType = AlarmTriggerType.Rising, AlarmLevel alarmLevel = AlarmLevel.一般报警) | |||||
{ | |||||
AlarmInfo = Info; | |||||
AlarmType = alarmTriggerType; | |||||
@AlarmLevel = alarmLevel; | |||||
} | |||||
/// <summary> | |||||
/// 报警信息 | |||||
/// </summary> | |||||
public string AlarmInfo { get; set; } | |||||
/// <summary> | |||||
/// 告警类型 | |||||
/// </summary> | |||||
public AlarmTriggerType AlarmType { get; set; } | |||||
/// <summary> | |||||
/// 告警级别 | |||||
/// </summary> | |||||
public AlarmLevel @AlarmLevel { get; set; } | |||||
} | |||||
} |
@@ -0,0 +1,272 @@ | |||||
using BPA.Helper; | |||||
using BPASmartClient.Model; | |||||
using System; | |||||
using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | |||||
using System.Collections.ObjectModel; | |||||
using System.Linq; | |||||
using System.Reflection; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
namespace BPASmartClient.CustomResource.Pages.Model | |||||
{ | |||||
public class AlarmHelper<AlarmT> where AlarmT : class, new() | |||||
{ | |||||
private volatile static ConcurrentDictionary<string, AlarmT> _Instance; | |||||
private static readonly object Obj_Lock = new object(); | |||||
public static AlarmT GetInstance(string name = "") | |||||
{ | |||||
lock (Obj_Lock) | |||||
{ | |||||
if (string.IsNullOrEmpty(name)) name = typeof(AlarmT).Name; | |||||
if (_Instance == null) _Instance = new ConcurrentDictionary<string, AlarmT>(); | |||||
if (!_Instance.ContainsKey(name)) _Instance.TryAdd(name, new AlarmT()); | |||||
return _Instance[name]; | |||||
} | |||||
} | |||||
private AlarmHelper() { } | |||||
public static List<Alarm> Alarms { get; set; } = new List<Alarm>(); | |||||
public static List<Alarm> HistoryAlarms { get; set; } = new List<Alarm>(); | |||||
static ConcurrentDictionary<string, bool> flagbit = new ConcurrentDictionary<string, bool>(); | |||||
static ConcurrentDictionary<string, Delay> delays = new ConcurrentDictionary<string, Delay>(); | |||||
public static Action<string> AddAction { get; set; } | |||||
public static Action<string> RemoveAction { get; set; } | |||||
public static Action ChangeAction { get; set; } | |||||
//public static AlarmT Alarm { get; set; } = new AlarmT(); | |||||
public static void Init() | |||||
{ | |||||
//AlarmViewModel.AlarmInfos = Alarms; | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | |||||
{ | |||||
if (_Instance != null) | |||||
{ | |||||
foreach (var temp in _Instance) | |||||
{ | |||||
foreach (var item in temp.Value.GetType().GetProperties()) | |||||
{ | |||||
if (item.CustomAttributes.Count() > 0) | |||||
{ | |||||
var AlarmModel = item.GetCustomAttribute<AlarmAttribute>(); | |||||
if (AlarmModel != null) | |||||
{ | |||||
bool value = Convert.ToBoolean(_Instance[temp.Key].GetType().GetProperty(item.Name)?.GetValue(_Instance[temp.Key])); | |||||
string text = typeof(AlarmT).Name == temp.Key ? AlarmModel.AlarmInfo : $"{temp.Key}:{AlarmModel.AlarmInfo}"; | |||||
EdgeAlarm(value, text, 1, AlarmModel.AlarmLevel, AlarmModel.AlarmType); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
Thread.Sleep(100); | |||||
}), $"{typeof(AlarmT).Name},报警通用模块监听"); | |||||
} | |||||
/// <summary> | |||||
/// 沿报警检测 | |||||
/// </summary> | |||||
/// <param name="Trigger">触发变量</param> | |||||
/// <param name="text">报警信息</param> | |||||
/// <param name="edgeType">触发类型,上升沿 或 下降沿</param> | |||||
private static void EdgeAlarm(bool Trigger, string text, int delay = 2, AlarmLevel alarmLevel = AlarmLevel.一般报警, AlarmTriggerType edgeType = AlarmTriggerType.Rising) | |||||
{ | |||||
if (!flagbit.ContainsKey(text)) flagbit.TryAdd(text, false); | |||||
if (!delays.ContainsKey(text)) delays.TryAdd(text, Delay.GetInstance(text)); | |||||
if (edgeType == AlarmTriggerType.Rising ? delays[text].Start(Trigger, delay) : delays[text].Start(!Trigger, delay)) | |||||
{ | |||||
if (edgeType == AlarmTriggerType.Rising ? !flagbit[text] : flagbit[text]) | |||||
{ | |||||
AddAlarm(Trigger, text, alarmLevel); | |||||
flagbit[text] = edgeType == AlarmTriggerType.Rising ? true : false; | |||||
} | |||||
} | |||||
else RemoveAlarm(text); | |||||
if (edgeType == AlarmTriggerType.Rising ? flagbit[text] : !flagbit[text]) flagbit[text] = Trigger; | |||||
} | |||||
/// <summary> | |||||
/// 添加报警信息 | |||||
/// </summary> | |||||
/// <param name="AlarmInfo">报警信息</param> | |||||
private static void AddAlarm(object value, string AlarmInfo, AlarmLevel alarmLevel) | |||||
{ | |||||
Alarm tempAlarm = new Alarm() | |||||
{ | |||||
NumId = Alarms.Count + 1, | |||||
Date = DateTime.Now.ToString("yyyy/MM/dd"), | |||||
Grade = alarmLevel.ToString(), | |||||
Info = AlarmInfo, | |||||
Value = value.ToString(), | |||||
Time = DateTime.Now.ToString("HH:mm:ss"), | |||||
}; | |||||
var res = Sqlite<Alarm>.GetInstance.Base.Add(tempAlarm); | |||||
Sqlite<Alarm>.GetInstance.Save(); | |||||
if (Alarms.FirstOrDefault(p => p.Info == AlarmInfo) == null) | |||||
{ | |||||
Alarms.Insert(0, tempAlarm); | |||||
for (int i = 0; i < Alarms.Count; i++) { Alarms.ElementAt(i).NumId = i + 1; } | |||||
AddAction?.Invoke(AlarmInfo);//添加报警通知 | |||||
ChangeAction?.Invoke();//更改报警通知 | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 移除报警信息 | |||||
/// </summary> | |||||
/// <param name="AlarmInfo">报警信息</param> | |||||
private static void RemoveAlarm(string AlarmInfo) | |||||
{ | |||||
var result = Alarms.FirstOrDefault(p => p.Info == AlarmInfo); | |||||
if (result != null) | |||||
{ | |||||
Alarms.Remove(result); | |||||
for (int i = 0; i < Alarms.Count; i++) { Alarms.ElementAt(i).NumId = i + 1; } | |||||
if (RemoveAction != null) RemoveAction(AlarmInfo); | |||||
if (ChangeAction != null) ChangeAction(); | |||||
} | |||||
} | |||||
} | |||||
//public class AlarmHelper<AlarmT> where AlarmT : class, new() | |||||
//{ | |||||
// //private volatile static ConcurrentDictionary<string, AlarmT> _Instance; | |||||
// //public static AlarmT GetInstance(string name) | |||||
// //{ | |||||
// // if (_Instance == null) _Instance = new ConcurrentDictionary<string, AlarmT>(); | |||||
// // if (!_Instance.ContainsKey(name)) _Instance.TryAdd(name, new AlarmT()); | |||||
// // return _Instance[name]; | |||||
// //} | |||||
// //private AlarmHelper() { } | |||||
// public static ObservableCollection<Alarm> Alarms { get; set; } = new ObservableCollection<Alarm>(); | |||||
// public static List<Alarm> HistoryAlarms { get; set; } = new List<Alarm>(); | |||||
// static ConcurrentDictionary<string, bool> flagbit = new ConcurrentDictionary<string, bool>(); | |||||
// static ConcurrentDictionary<string, Delay> delays = new ConcurrentDictionary<string, Delay>(); | |||||
// public static Action<string> AddAction { get; set; } | |||||
// public static Action<string> RemoveAction { get; set; } | |||||
// public static Action ChangeAction { get; set; } | |||||
// public static AlarmT Alarm { get; set; } = new AlarmT(); | |||||
// public static void Init() | |||||
// { | |||||
// AlarmViewModel.AlarmInfos = Alarms; | |||||
// ThreadManage.GetInstance().StartLong(new Action(() => | |||||
// { | |||||
// foreach (var item in Alarm.GetType().GetProperties()) | |||||
// { | |||||
// if (item.CustomAttributes.Count() > 0) | |||||
// { | |||||
// var AlarmModel = item.GetCustomAttribute<AlarmAttribute>(); | |||||
// if (AlarmModel != null) | |||||
// { | |||||
// bool value = Convert.ToBoolean(Alarm.GetType().GetProperty(item.Name)?.GetValue(Alarm)); | |||||
// EdgeAlarm(value, AlarmModel.AlarmInfo, 1, AlarmModel.AlarmLevel, AlarmModel.AlarmType); | |||||
// } | |||||
// } | |||||
// } | |||||
// Thread.Sleep(100); | |||||
// }), $"{typeof(AlarmT).Name},报警通用模块监听"); | |||||
// } | |||||
// //public static void AnalogAlarm(dynamic Trigger, string info, dynamic HH = null, dynamic H = 0, dynamic L = 0, dynamic LL = 0) | |||||
// //{ | |||||
// //} | |||||
// /// <summary> | |||||
// /// 沿报警检测 | |||||
// /// </summary> | |||||
// /// <param name="Trigger">触发变量</param> | |||||
// /// <param name="text">报警信息</param> | |||||
// /// <param name="edgeType">触发类型,上升沿 或 下降沿</param> | |||||
// private static void EdgeAlarm(bool Trigger, string text, int delay = 2, AlarmLevel alarmLevel = AlarmLevel.一般报警, AlarmTriggerType edgeType = AlarmTriggerType.Rising) | |||||
// { | |||||
// if (!flagbit.ContainsKey(text)) flagbit.TryAdd(text, false); | |||||
// if (!delays.ContainsKey(text)) delays.TryAdd(text, Delay.GetInstance(text)); | |||||
// if (edgeType == AlarmTriggerType.Rising ? delays[text].Start(Trigger, delay) : delays[text].Start(!Trigger, delay)) | |||||
// { | |||||
// if (edgeType == AlarmTriggerType.Rising ? !flagbit[text] : flagbit[text]) | |||||
// { | |||||
// AddAlarm(Trigger, text, alarmLevel); | |||||
// flagbit[text] = edgeType == AlarmTriggerType.Rising ? true : false; | |||||
// } | |||||
// } | |||||
// else RemoveAlarm(text); | |||||
// if (edgeType == AlarmTriggerType.Rising ? flagbit[text] : !flagbit[text]) flagbit[text] = Trigger; | |||||
// } | |||||
// /// <summary> | |||||
// /// 添加报警信息 | |||||
// /// </summary> | |||||
// /// <param name="AlarmInfo">报警信息</param> | |||||
// private static void AddAlarm(object value, string AlarmInfo, AlarmLevel alarmLevel) | |||||
// { | |||||
// Alarm tempAlarm = new Alarm() | |||||
// { | |||||
// NumId = Alarms.Count + 1, | |||||
// Date = DateTime.Now.ToString("yyyy/MM/dd"), | |||||
// Grade = alarmLevel.ToString(), | |||||
// Info = AlarmInfo, | |||||
// Value = value.ToString(), | |||||
// Time = DateTime.Now.ToString("HH:mm:ss"), | |||||
// }; | |||||
// var res = Sqlite<Alarm>.GetInstance.Base.Add(tempAlarm); | |||||
// Sqlite<Alarm>.GetInstance.Save(); | |||||
// if (Alarms.FirstOrDefault(p => p.Info == AlarmInfo) == null) | |||||
// { | |||||
// Application.Current.Dispatcher.Invoke(new Action(() => | |||||
// { | |||||
// Alarms.Insert(0, tempAlarm); | |||||
// for (int i = 0; i < Alarms.Count; i++) { Alarms.ElementAt(i).NumId = i + 1; } | |||||
// })); | |||||
// AddAction?.Invoke(AlarmInfo);//添加报警通知 | |||||
// ChangeAction?.Invoke();//更改报警通知 | |||||
// } | |||||
// } | |||||
// /// <summary> | |||||
// /// 移除报警信息 | |||||
// /// </summary> | |||||
// /// <param name="AlarmInfo">报警信息</param> | |||||
// private static void RemoveAlarm(string AlarmInfo) | |||||
// { | |||||
// var result = Alarms.FirstOrDefault(p => p.Info == AlarmInfo); | |||||
// if (result != null) | |||||
// { | |||||
// Application.Current.Dispatcher.Invoke(new Action(() => | |||||
// { | |||||
// Alarms.Remove(result); | |||||
// for (int i = 0; i < Alarms.Count; i++) { Alarms.ElementAt(i).NumId = i + 1; } | |||||
// })); | |||||
// if (RemoveAction != null) RemoveAction(AlarmInfo); | |||||
// if (ChangeAction != null) ChangeAction(); | |||||
// } | |||||
// } | |||||
//} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.CustomResource.Pages.Model | |||||
{ | |||||
public enum AlarmLevel | |||||
{ | |||||
一般报警, | |||||
严重报警 | |||||
} | |||||
} |
@@ -0,0 +1,20 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.CustomResource.Pages.Model | |||||
{ | |||||
public enum AlarmTriggerType | |||||
{ | |||||
/// <summary> | |||||
/// 上升沿 | |||||
/// </summary> | |||||
Rising, | |||||
/// <summary> | |||||
/// 下降沿 | |||||
/// </summary> | |||||
Falling | |||||
} | |||||
} |
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using BPASmartClient.CustomResource.Pages.Model; | |||||
using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
@@ -6,7 +7,7 @@ using System.Threading.Tasks; | |||||
namespace HKControl | namespace HKControl | ||||
{ | { | ||||
internal class DataModel | |||||
public class DataModel | |||||
{ | { | ||||
public WindowDataModel LeftWindowData { get; set; } = new WindowDataModel(); | public WindowDataModel LeftWindowData { get; set; } = new WindowDataModel(); | ||||
public WindowDataModel RightWindowData { get; set; } = new WindowDataModel(); | public WindowDataModel RightWindowData { get; set; } = new WindowDataModel(); | ||||
@@ -33,5 +34,45 @@ namespace HKControl | |||||
/// 刷卡机编号 | /// 刷卡机编号 | ||||
/// </summary> | /// </summary> | ||||
public string CarNum { get; set; } | public string CarNum { get; set; } | ||||
[Alarm("警告左侧机构餐盘无盘")] | |||||
public bool L1 { get; set; } | |||||
[Alarm("警告左侧升降气缸下降不到位")] | |||||
public bool L2 { get; set; } | |||||
[Alarm("警告左侧升降气缸中间不到位")] | |||||
public bool L3 { get; set; } | |||||
[Alarm("警告左侧升降气缸上升不到位")] | |||||
public bool L4 { get; set; } | |||||
[Alarm("警告左侧升降气缸上升不到位")] | |||||
public bool L5 { get; set; } | |||||
[Alarm("警告左侧机构推空餐盘不到位")] | |||||
public bool L6 { get; set; } | |||||
[Alarm("警告左侧出餐推不到位")] | |||||
public bool L7 { get; set; } | |||||
[Alarm("警告左侧出餐回退不到位")] | |||||
public bool L8 { get; set; } | |||||
[Alarm("警告左餐盘掉落位置有餐盘")] | |||||
public bool L9 { get; set; } | |||||
[Alarm("警告右侧机构餐盘无盘")] | |||||
public bool R1 { get; set; } | |||||
[Alarm("警告右侧升降气缸下降不到位")] | |||||
public bool R2 { get; set; } | |||||
[Alarm("警告右侧升降气缸中间不到位")] | |||||
public bool R3 { get; set; } | |||||
[Alarm("警告右侧升降气缸上升不到位")] | |||||
public bool R4 { get; set; } | |||||
[Alarm("警告右侧升降气缸上升不到位")] | |||||
public bool R5 { get; set; } | |||||
[Alarm("警告右侧机构推空餐盘不到位")] | |||||
public bool R6 { get; set; } | |||||
[Alarm("警告右侧出餐推不到位")] | |||||
public bool R7 { get; set; } | |||||
[Alarm("警告右侧出餐回退不到位")] | |||||
public bool R8 { get; set; } | |||||
[Alarm("警告右餐盘掉落位置有餐盘")] | |||||
public bool R9 { get; set; } | |||||
} | } | ||||
} | } |
@@ -1,6 +1,7 @@ | |||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using BPA.Helper; | using BPA.Helper; | ||||
using BPASmartClient.CustomResource.Pages.Model; | |||||
using S7.Net; | using S7.Net; | ||||
namespace HKControl | namespace HKControl | ||||
@@ -131,12 +132,39 @@ namespace HKControl | |||||
{ | { | ||||
SiemensDicitonary[item.DeviceNum].ConnectOk = new Action(() => | SiemensDicitonary[item.DeviceNum].ConnectOk = new Action(() => | ||||
{ | { | ||||
AlarmHelper<DataModel>.GetInstance($"{item.DeviceNum}号档口"); | |||||
AlarmHelper<DataModel>.Init(); | |||||
HKLog.HKLogImport.WriteInfo($"{item.DeviceNum}:连接成功"); | HKLog.HKLogImport.WriteInfo($"{item.DeviceNum}:连接成功"); | ||||
ThreadManage.GetInstance().StartLong(new Action(() => | ThreadManage.GetInstance().StartLong(new Action(() => | ||||
{ | { | ||||
try | try | ||||
{ | { | ||||
var md = AlarmHelper<DataModel>.GetInstance($"{item.DeviceNum}号档口"); | |||||
var res = SiemensDicitonary[item.DeviceNum].Read<byte>("MB7"); | var res = SiemensDicitonary[item.DeviceNum].Read<byte>("MB7"); | ||||
var res1 = SiemensDicitonary[item.DeviceNum].Read<byte>("MB10"); | |||||
var res2 = SiemensDicitonary[item.DeviceNum].Read<byte>("MB11"); | |||||
md.LeftWindowData.L1 = Get8bitValue(res1, 2); | |||||
md.LeftWindowData.L2 = Get8bitValue(res1, 3); | |||||
md.LeftWindowData.L3 = Get8bitValue(res1, 4); | |||||
md.LeftWindowData.L4 = Get8bitValue(res1, 5); | |||||
md.LeftWindowData.L5 = Get8bitValue(res1, 6); | |||||
md.LeftWindowData.L6 = Get8bitValue(res1, 7); | |||||
md.LeftWindowData.L7 = Get8bitValue(res1, 8); | |||||
md.LeftWindowData.L8 = Get8bitValue(res2, 1); | |||||
md.LeftWindowData.L9 = Get8bitValue(res2, 2); | |||||
var res3 = SiemensDicitonary[item.DeviceNum].Read<byte>("MB12"); | |||||
var res4 = SiemensDicitonary[item.DeviceNum].Read<byte>("MB13"); | |||||
md.RightWindowData.R1 = Get8bitValue(res3, 2); | |||||
md.RightWindowData.R2 = Get8bitValue(res3, 3); | |||||
md.RightWindowData.R3 = Get8bitValue(res3, 4); | |||||
md.RightWindowData.R4 = Get8bitValue(res3, 5); | |||||
md.RightWindowData.R5 = Get8bitValue(res3, 6); | |||||
md.RightWindowData.R6 = Get8bitValue(res3, 7); | |||||
md.RightWindowData.R7 = Get8bitValue(res3, 8); | |||||
md.RightWindowData.R8 = Get8bitValue(res4, 1); | |||||
md.RightWindowData.R9 = Get8bitValue(res4, 2); | |||||
DataModels[item.DeviceNum].LeftWindowData.IsSwipe = Get8bitValue(res, 1); | DataModels[item.DeviceNum].LeftWindowData.IsSwipe = Get8bitValue(res, 1); | ||||
DataModels[item.DeviceNum].LeftWindowData.Complete = Get8bitValue(res, 2); | DataModels[item.DeviceNum].LeftWindowData.Complete = Get8bitValue(res, 2); | ||||
@@ -0,0 +1,9 @@ | |||||
<Application x:Class="WpfTest.App" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:local="clr-namespace:WpfTest" | |||||
StartupUri="MainWindow.xaml"> | |||||
<Application.Resources> | |||||
</Application.Resources> | |||||
</Application> |
@@ -0,0 +1,17 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Configuration; | |||||
using System.Data; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
namespace WpfTest | |||||
{ | |||||
/// <summary> | |||||
/// Interaction logic for App.xaml | |||||
/// </summary> | |||||
public partial class App : Application | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,10 @@ | |||||
using System.Windows; | |||||
[assembly: ThemeInfo( | |||||
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located | |||||
//(used if a resource is not found in the page, | |||||
// or application resource dictionaries) | |||||
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located | |||||
//(used if a resource is not found in the page, | |||||
// app, or any theme specific resource dictionaries) | |||||
)] |
@@ -0,0 +1,13 @@ | |||||
<Window x:Class="WpfTest.MainWindow" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
xmlns:local="clr-namespace:WpfTest" | |||||
mc:Ignorable="d" | |||||
Title="MainWindow" Height="450" Width="800"> | |||||
<Grid> | |||||
<TextBox x:Name="textwb" Background="Black" Foreground="#FFC000FB" TextWrapping="Wrap" AcceptsReturn="True" ></TextBox> | |||||
<Button Width="100" Height="100" Click="Button_Click" Visibility="Collapsed"></Button> | |||||
</Grid> | |||||
</Window> |
@@ -0,0 +1,382 @@ | |||||
using BPA.Communication; | |||||
using BPA.Helper; | |||||
using BPA.Message; | |||||
using BPA.Message.Enum; | |||||
using Newtonsoft.Json; | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
using System.Windows.Controls; | |||||
using System.Windows.Data; | |||||
using System.Windows.Documents; | |||||
using System.Windows.Input; | |||||
using System.Windows.Media; | |||||
using System.Windows.Media.Imaging; | |||||
using System.Windows.Navigation; | |||||
using System.Windows.Shapes; | |||||
namespace WpfTest | |||||
{ | |||||
/// <summary> | |||||
/// Interaction logic for MainWindow.xaml | |||||
/// </summary> | |||||
public partial class MainWindow : Window | |||||
{ | |||||
/// <summary> | |||||
/// MQTT连接信息 | |||||
/// </summary> | |||||
public string MQTTConnection { get; set; } = "10.2.1.254,1883,admin,public"; | |||||
/// <summary> | |||||
/// Mqtt是否运行 | |||||
/// </summary> | |||||
public bool IsRunningMqtt = false; | |||||
/// <summary> | |||||
/// Mqtt | |||||
/// </summary> | |||||
public MqttHelper mqttHelper = new MqttHelper(); | |||||
public MainWindow() | |||||
{ | |||||
InitializeComponent(); | |||||
Connection(); | |||||
ThreadServer(); | |||||
//Button_Click(null, null); | |||||
} | |||||
public void ThreadServer() | |||||
{ | |||||
ThreadManage.GetInstance().StartLong(new Action(() => | |||||
{ | |||||
try | |||||
{ | |||||
if (IsRunningMqtt) | |||||
{ | |||||
Send(ScreenDeviceType.大炒); | |||||
Thread.Sleep(1000); | |||||
Send(ScreenDeviceType.小炒); Thread.Sleep(1000); | |||||
Send(ScreenDeviceType.煮面机); Thread.Sleep(1000); | |||||
Send(ScreenDeviceType.分餐机); Thread.Sleep(1000); | |||||
} | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
MessageLog.GetInstance.ShowEx($"{Name}:线程服务异常,原因:{ex.Message}"); | |||||
} | |||||
Thread.Sleep(100); | |||||
}), $"{Name},线程服务"); | |||||
} | |||||
/// <summary> | |||||
/// 初始化连接Redis MQTT | |||||
/// </summary> | |||||
public void Connection() | |||||
{ | |||||
try | |||||
{ | |||||
//2.Mqtt连接 | |||||
if (!string.IsNullOrEmpty(this.MQTTConnection) && this.MQTTConnection.Contains(',')) | |||||
{ | |||||
string[] mqttcom = this.MQTTConnection.Split(','); | |||||
if (mqttcom != null && mqttcom.Count() == 4) | |||||
{ | |||||
mqttHelper.Connect(mqttcom[2], mqttcom[3], mqttcom[0], int.Parse(mqttcom[1]), $"{Name}:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"); | |||||
} | |||||
} | |||||
mqttHelper.Disconnect = new Action(() => | |||||
{ | |||||
IsRunningMqtt = false; | |||||
MessageLog.GetInstance.ShowEx($"{Name}:MQTT异常断开...."); | |||||
}); | |||||
mqttHelper.ConnectOk = new Action(() => | |||||
{ | |||||
IsRunningMqtt = true;//连接成功 | |||||
}); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
MessageLog.GetInstance.ShowEx($"{Name}:初始化连接 MQTT,原因:{ex.Message}"); | |||||
} | |||||
} | |||||
public void Send(ScreenDeviceType screen) | |||||
{ | |||||
int k2 =new Random().Next(0, 2); | |||||
SendScreenDataModel sendScreenData = new SendScreenDataModel(); | |||||
List<ORDER_STATUS> oRDER_STATUS = new List<ORDER_STATUS>() { ORDER_STATUS.WAIT, ORDER_STATUS.COOKING, ORDER_STATUS.COMPLETED_COOK, ORDER_STATUS.COMPLETED_TAKE, ORDER_STATUS.ERR_NOT_REPLY_WHEN_COOKING }; | |||||
List<string> name_s = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花", "尖椒鸡杂", "回锅肉" }; | |||||
List<string> name_s_zm = new List<string>() { "清汤面", "鸡蛋面", "火鸡面", "回锅肉面", "鸡杂面" }; | |||||
List<string> name_XM = new List<string>() { "王权贵", "张哲", "李青古", "龙西", "李富贵" }; | |||||
int k = new Random().Next(0, 5); | |||||
int M = new Random().Next(0, 5); | |||||
if (screen == ScreenDeviceType.大炒) | |||||
{ | |||||
sendScreenData.Name = screen; | |||||
sendScreenData.Value = new ScreenModelMaxWok | |||||
{ | |||||
IsRun = k2 == 0 ? IsRun.运行 : IsRun.停止, | |||||
WorkStatus_1 = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
WorkStatus_2 = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
RobotStatu = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
// Alarm = new List<AlarmModel> { | |||||
// new AlarmModel { AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(2).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//}, | |||||
FailuresCount = 0, | |||||
StatsCount = new List<StatsModel> { | |||||
new StatsModel{Name= name_s[0],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[1],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[2],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[3],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[4],Count=new Random().Next(0, 100)}, | |||||
}, | |||||
MaxWok_Dishes_1 = "回锅肉", | |||||
MaxWok_Task_1 = "炒菜中", | |||||
MaxWok_Process_1 = new List<ProcessModel> { | |||||
new ProcessModel{ Id=0,Name= "清洗", Status=(M==0) ? ProcessStatus.正在执行:((M>0)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=1,Name= "到菜", Status=(M==1) ? ProcessStatus.正在执行:((M>1)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=2,Name= "翻炒", Status=(M==2) ? ProcessStatus.正在执行:((M>2)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=3,Name= "调料", Status=(M==3) ? ProcessStatus.正在执行:((M>3)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=4,Name= "完成", Status=(M==4) ? ProcessStatus.正在执行:((M>4)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
}, | |||||
MaxWok_HeatGear_1 = "1", | |||||
MaxWok_StirGear_1 = "2", | |||||
MaxWok_FlipSpeed_1 = "30", | |||||
MaxWok_Temp_1 = "102", | |||||
MaxWok_OrderCount_1 = new Random().Next(0, 100), | |||||
MaxWok_ErrorOrderCount_1 = new Random().Next(0, 100), | |||||
MaxWok_Dishes_2 = "烂肉豇豆", | |||||
MaxWok_Task_2 = "炒菜中", | |||||
MaxWok_Process_2 = new List<ProcessModel> { | |||||
new ProcessModel{ Id=0,Name= "清洗", Status=(k==0) ? ProcessStatus.正在执行:((k>0)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=1,Name= "到菜", Status=(k==1) ? ProcessStatus.正在执行:((k>1)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=2,Name= "翻炒", Status=(k==2) ? ProcessStatus.正在执行:((k>2)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=3,Name= "调料", Status=(k==3) ? ProcessStatus.正在执行:((k>3)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=4,Name= "完成", Status=(k==4) ? ProcessStatus.正在执行:((k>4)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
}, | |||||
MaxWok_HeatGear_2 = "2", | |||||
MaxWok_StirGear_2 = "3", | |||||
MaxWok_FlipSpeed_2 = "32", | |||||
MaxWok_Temp_2 = "132", | |||||
MaxWok_OrderCount_2 = new Random().Next(0, 100), | |||||
MaxWok_ErrorOrderCount_2 = new Random().Next(0, 100), | |||||
}; | |||||
} | |||||
else if (screen == ScreenDeviceType.小炒) | |||||
{ | |||||
sendScreenData.Name = screen; | |||||
sendScreenData.Value = new ScreenModelMinWok | |||||
{ | |||||
IsRun = k2 == 0 ? IsRun.运行 : IsRun.停止, | |||||
WorkStatus_1 = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
WorkStatus_2 = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
RobotStatu = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
// Alarm = new List<AlarmModel> { | |||||
// new AlarmModel { AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
// new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(2).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//}, | |||||
FailuresCount = 0, | |||||
StatsCount = new List<StatsModel> { | |||||
new StatsModel{Name= name_s[0],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[1],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[2],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[3],Count=new Random().Next(0, 100)}, | |||||
new StatsModel{Name= name_s[4],Count=new Random().Next(0, 100)}, | |||||
}, | |||||
MinWok_Dishes_1 = "回锅肉", | |||||
MinWok_Task_1 = "炒菜中", | |||||
MinWok_Process_1 = new List<ProcessModel> { | |||||
new ProcessModel{ Id=0,Name= "清洗", Status=(M==0) ? ProcessStatus.正在执行:((M>0)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=1,Name= "到菜", Status=(M==1) ? ProcessStatus.正在执行:((M>1)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=2,Name= "翻炒", Status=(M==2) ? ProcessStatus.正在执行:((M>2)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=3,Name= "调料", Status=(M==3) ? ProcessStatus.正在执行:((M>3)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=4,Name= "完成", Status=(M==4) ? ProcessStatus.正在执行:((M>4)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
}, | |||||
MinWok_HeatGear_1 = "1", | |||||
MinWok_StirGear_1 = "2", | |||||
MinWok_FlipSpeed_1 = "30", | |||||
MinWok_Temp_1 = "102", | |||||
MinWok_OrderCount_1 = new Random().Next(0, 100), | |||||
MinWok_ErrorOrderCount_1 = new Random().Next(0, 100), | |||||
MinWok_Dishes_2 = "烂肉豇豆", | |||||
MinWok_Task_2 = "炒菜中", | |||||
MinWok_Process_2 = new List<ProcessModel> { | |||||
new ProcessModel{ Id=0,Name= "清洗", Status=(k==0) ? ProcessStatus.正在执行:((k>0)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=1,Name= "到菜", Status=(k==1) ? ProcessStatus.正在执行:((k>1)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=2,Name= "翻炒", Status=(k==2) ? ProcessStatus.正在执行:((k>2)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=3,Name= "调料", Status=(k==3) ? ProcessStatus.正在执行:((k>3)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
new ProcessModel{ Id=4,Name= "完成", Status=(k==4) ? ProcessStatus.正在执行:((k>4)?ProcessStatus.执行完成:ProcessStatus.未执行)}, | |||||
}, | |||||
MinWok_HeatGear_2 = "2", | |||||
MinWok_StirGear_2 = "3", | |||||
MinWok_FlipSpeed_2 = "32", | |||||
MinWok_Temp_2 = "132", | |||||
MinWok_OrderCount_2 = new Random().Next(0, 100), | |||||
MinWok_ErrorOrderCount_2 = new Random().Next(0, 100), | |||||
}; | |||||
} | |||||
else if (screen == ScreenDeviceType.煮面机) | |||||
{ | |||||
sendScreenData.Name = screen; | |||||
sendScreenData.Value = new ScreenModelMorkS | |||||
{ | |||||
IsRun = k2 == 0 ? IsRun.运行 : IsRun.停止, | |||||
WorkStatus = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
RobotStatu = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
Alarm = new List<AlarmModel> { | |||||
new AlarmModel { AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "煮面机警告,水温过低!!!!" }, | |||||
//new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(2).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
}, | |||||
FailuresCount = 0, | |||||
StatsCount = new List<StatsModel> { | |||||
new StatsModel { Name = name_s_zm[0], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s_zm[1], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s_zm[2], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s_zm[3], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s_zm[4], Count = new Random().Next(0, 100) }, | |||||
}, | |||||
MorkS_OrderCount = new Random().Next(0, 100), | |||||
MorkS_ErrorOrderCount = new Random().Next(0, 100), | |||||
MorkS_NoodleUpOrDown_1 = k2 == 0 ? "true" : "false", | |||||
MorkS_NoodleUpOrDown_2 = k2 == 0 ? "true" : "false", | |||||
MorkS_NoodleUpOrDown_3 = k2 == 0 ? "true" : "false", | |||||
MorkS_NoodleUpOrDown_4 = k2 == 0 ? "true" : "false", | |||||
MorkS_NoodleUpOrDown_5 = k2 == 0 ? "true" : "false", | |||||
MorkS_NoodleUpOrDown_6 = k2 == 0 ? "true" : "false", | |||||
MorkS_Temp = "false",// k2 == 0 ? "true" : "false", | |||||
MorkS_BinLocation = new Random().Next(0, 6).ToString(), | |||||
MorkS_SiloMeas = k2 == 0 ? "true" : "false", | |||||
MorkS_NoBowMeas = k2 == 0 ? "true" : "false", | |||||
MakeOrder = new List<OrderMakeModel> { | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.WAIT, SortNum="007".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.WAIT, SortNum="008".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.WAIT, SortNum="009".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.WAIT, SortNum="010".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.WAIT, SortNum="011".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_COOK, SortNum="006".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_TAKE, SortNum="005".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_TAKE, SortNum="004".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_TAKE, SortNum="003".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_TAKE, SortNum="002".ToString()}, | |||||
new OrderMakeModel { GoodName= name_s_zm[new Random().Next(0, 5)], StartTime=DateTime.Now.ToString("HH:mm:ss"), Status=ORDER_STATUS.COMPLETED_TAKE, SortNum="001".ToString()}, | |||||
}, | |||||
}; | |||||
} | |||||
else if (screen == ScreenDeviceType.分餐机) | |||||
{ | |||||
sendScreenData.Name = screen; | |||||
sendScreenData.Value = new ScreenModelSplitMeals | |||||
{ | |||||
IsRun = k2 == 0 ? IsRun.运行 : IsRun.停止, | |||||
WorkStatus = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
RobotStatu = k2 == 0 ? WorkStatus.工作 : WorkStatus.待机, | |||||
//Alarm = new List<AlarmModel> { | |||||
// new AlarmModel { AlarmTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//new AlarmModel { AlarmTime = DateTime.Now.AddSeconds(2).ToString("yyyy-MM-dd HH:mm:ss"), AlarmMs = "XXXX机构出现故障!!!!" }, | |||||
//}, | |||||
FailuresCount = 0, | |||||
StatsCount = new List<StatsModel> { | |||||
new StatsModel { Name = name_s[0], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s[1], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s[2], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s[3], Count = new Random().Next(0, 100) }, | |||||
new StatsModel { Name = name_s[4], Count = new Random().Next(0, 100) }, | |||||
}, | |||||
SplitMeals_CreditCardCount_1 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_1 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_1 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_1 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
SplitMeals_CreditCardCount_2 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_2 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_2 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_2 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
SplitMeals_CreditCardCount_3 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_3 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_3 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_3 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
SplitMeals_CreditCardCount_4 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_4 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_4 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_4 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
SplitMeals_CreditCardCount_5 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_5 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_5 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_5 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
SplitMeals_CreditCardCount_6 = new Random().Next(0, 100), | |||||
SplitMeals_CreditCardNameBefore_6 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CreditCardName_6 = name_XM[new Random().Next(0, 5)], | |||||
SplitMeals_CookType_6 = new List<string>() { "回锅肉", "烂肉豇豆", "火爆腰花" }, | |||||
}; | |||||
} | |||||
string message = JsonConvert.SerializeObject(sendScreenData); | |||||
mqttHelper.Publish(ScreenTOPIC.GetInstance.GetTopic(screen), message); | |||||
System.Windows.Application.Current?.Dispatcher.Invoke((Action)(() => | |||||
{ | |||||
if (textwb.Text.Length > 100000) | |||||
{ | |||||
textwb.Text = ""; | |||||
} | |||||
string text = $"{ScreenTOPIC.GetInstance.GetTopic(screen)} {message}\n"; | |||||
textwb.Text += text; | |||||
})); | |||||
} | |||||
private void Button_Click(object sender, RoutedEventArgs e) | |||||
{ | |||||
int i = 0; | |||||
Window1 window1 = new Window1(); | |||||
foreach (System.Windows.Forms.Screen scr in System.Windows.Forms.Screen.AllScreens) | |||||
{ | |||||
//if (!scr.Primary) | |||||
{ | |||||
if (i == 1) | |||||
{ | |||||
window1.WindowStartupLocation = WindowStartupLocation.Manual; | |||||
window1.Left = scr.WorkingArea.Left; | |||||
window1.Top = scr.WorkingArea.Top; | |||||
window1.Width = scr.Bounds.Width; | |||||
window1.Height = scr.Bounds.Height; | |||||
window1.WindowState = WindowState.Maximized; | |||||
window1.ResizeMode = ResizeMode.NoResize; | |||||
window1.WindowStyle = WindowStyle.None; | |||||
window1.WindowState = WindowState.Normal; | |||||
window1.ShowInTaskbar = false; | |||||
window1.Show(); | |||||
} | |||||
else if (i == 2) | |||||
{ | |||||
} | |||||
i++; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
<Window x:Class="WpfTest.Window1" | |||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||||
xmlns:local="clr-namespace:WpfTest" | |||||
mc:Ignorable="d" | |||||
Title="Window1" Height="450" Width="800"> | |||||
<Grid> | |||||
</Grid> | |||||
</Window> |
@@ -0,0 +1,27 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using System.Windows; | |||||
using System.Windows.Controls; | |||||
using System.Windows.Data; | |||||
using System.Windows.Documents; | |||||
using System.Windows.Input; | |||||
using System.Windows.Media; | |||||
using System.Windows.Media.Imaging; | |||||
using System.Windows.Shapes; | |||||
namespace WpfTest | |||||
{ | |||||
/// <summary> | |||||
/// Window1.xaml 的交互逻辑 | |||||
/// </summary> | |||||
public partial class Window1 : Window | |||||
{ | |||||
public Window1() | |||||
{ | |||||
InitializeComponent(); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<PropertyGroup> | |||||
<OutputType>WinExe</OutputType> | |||||
<TargetFramework>net6.0-windows</TargetFramework> | |||||
<Nullable>enable</Nullable> | |||||
<UseWPF>true</UseWPF> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="BPA.CustomResource" Version="1.0.14" /> | |||||
</ItemGroup> | |||||
</Project> |