|
- using DTO;
- using HKCardOUT.Helper;
- using HKCardOUT.Logic.Model;
- using HKCardOUT.Logic.Service;
- using NStandard;
- using SqlSugar.DistributedSystem.Snowflake;
- using Stylet;
- using StyletIoC;
- using System;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Windows.Documents;
- using UHFHelper;
- using XExten.Advance.CacheFramework;
- using XExten.Advance.CacheFramework.RunTimeCache;
- using XExten.Advance.LinqFramework;
-
- namespace HKCardOUT.ViewModels
- {
- public class RootViewModel : Conductor<IScreen>
- {
- public delegate void ReadCardFunc(DKoutput? input);
- public event ReadCardFunc ReadFunc;
- private readonly object locker = new object();
- private IContainer Container;
- public RootViewModel(IContainer Container)
- {
- this.Container = Container;
- MainThread();
- }
-
- protected override void OnViewLoaded()
- {
- System.Timers.Timer timer = new System.Timers.Timer(500);
- timer.Enabled = true;
- timer.Elapsed += (s, e) =>
- {
- Result = new ObservableCollection<SaleLog>(this.Container.Get<HKCore>().PullDaySaleLog());
- };
- timer.Start();
- //广告初始化
- var Init = DataBus.StoreInfo?.Devices.Join(DataBus.StoreInfo?.Stalls, t => t.GateId, x => x.Id, (t, x) => new AdDTO
- {
- Ad = x.Remaek,
- IsActive = false,
- Device = t.Name,
- Stalls = x.Name
- }).ToList();
- if (Init != null)
- Ad = new ObservableCollection<AdDTO>(Init);
- }
-
- #region 属性
- ObservableCollection<SaleLog> _Result;
- public ObservableCollection<SaleLog> Result
- {
- get => _Result;
- set => SetAndNotify(ref _Result, value);
- }
- ObservableCollection<AdDTO> _Ad;
- public ObservableCollection<AdDTO> Ad
- {
- get => _Ad;
- set => SetAndNotify(ref _Ad, value);
- }
- #endregion
-
- #region 方法
- private void MainThread()
- {
- ReadFunc -= ReadCard;
- ReadFunc += ReadCard;
- ThreadManage.GetInstance().StartLong(new Action(() =>
- {
- try
- {
- //1.检测网络上下线
- bool network = HKHelpers.GetInstance().GetNetworkState();
- if (network != DataBus.NetWordState)
- {
- if (network) HandyControl.Controls.Growl.InfoGlobal("网络连接成功");
- else HandyControl.Controls.Growl.InfoGlobal("系统已离线,请连接网络!!!");
- DataBus.NetWordState = network;
- }
- Thread.Sleep(3000);
- }
- catch (Exception ex)
- {
- HandyControl.Controls.Growl.InfoGlobal(ex.Message);
- }
- }), "循环状态监测线程", false);
- try
- {
- // 初始化 串口
- UHF_RS485_Helper.GetInstance().Open(new SerialParam
- {
- PortName = DataBus.COM,
- BaudRate = 57600,
- DataBits = 8
- });
- }
- catch (Exception)
- {
- HandyControl.Controls.Growl.WarningGlobal("未接入相应设备");
- }
- if (!UHF_RS485_Helper.GetInstance().GetSerialPortState())
- HandyControl.Controls.Growl.InfoGlobal("串口打开失败");
- DataBus.StoreInfo.Devices.ForEach(item =>
- {
- System.Timers.Timer timer = new System.Timers.Timer(500);
- timer.Enabled = true;
- timer.Elapsed += (sender, eve) =>
- {
- if (!UHF_RS485_Helper.GetInstance().GetSerialPortState())
- return;
- else
- {
- var res = UHF_RS485_Helper.GetInstance().ReadCard(item.Address.AsInt()).Result;
- if (res != null)
- {
- if (!res.ResData.IsMatch(new Regex("0{20}")))
- ReadFunc?.Invoke(res);
- }
- }
- };
- timer.Start();
- });
- }
- #endregion
-
- #region 命令
- /// <summary>
- /// 广告位置
- /// </summary>
- /// <param name="input"></param>
- public void UpdateAction(AdDTO input)
- {
- input.IsActive = !input.IsActive;
- var SC = System.Windows.Forms.Screen.AllScreens.Count();
- if (SC >= 1)
- {
- if (input.IsActive)
- {
- if (!DataBus.AdStatus.ContainsKey(input.Device))
- {
- var win = new Views.AdWindow(input.Ad);
- DataBus.AdStatus.Add(input.Device, win);
- win.Show();
- }
- }
- else
- {
- if (DataBus.AdStatus.ContainsKey(input.Device))
- {
- DataBus.AdStatus[input.Device].Close();
- DataBus.AdStatus.Remove(input.Device);
- }
- }
- }
- }
- public void ReadCard(DKoutput input)
- {
- lock (locker)
- {
- Container.Get<HKCore>().DeviceSale(new SaleLog
- {
- CardNo = input.ResData.Substring(1, input.ResData.Length - 1),
- Location = input.Address.AsInt().ToString()
- });
- }
- }
- #endregion
- }
- }
|