|
- using DTO;
- using HKCardOUT.Helper;
- using HKCardOUT.Logic.Model;
- using HKCardOUT.Logic.Service;
- using HKCardOUT.Views;
- using ImTools;
- using NStandard;
- using S7.Net.Types;
- using SqlSugar.DistributedSystem.Snowflake;
- using Stylet;
- using StyletIoC;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Drawing;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Windows;
- using System.Windows.Documents;
- using System.Windows.Forms;
- 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()
- {
- ThreadManage.GetInstance().StartLong(() =>
- {
- Result = new ObservableCollection<SaleLog>(this.Container.Get<HKCore>().PullDaySaleLog());
- Thread.Sleep(500);
- }, "消费记录查询", false);
- //广告初始化
- 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);
- AdOpen();
- }
- }
-
- #region 属性
- public RootView Main { get; set; }
- 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();
- });
- }
-
-
- private void AdOpen()
- {
- try
- {
- var SC = System.Windows.Forms.Screen.AllScreens.Count();
-
- for (int i = 0; i < SC; i++)
- {
- var win = new AdWindow(Ad[i].Ad);
- var rectangle = System.Windows.Forms.Screen.AllScreens[i].WorkingArea;
- win.Height = rectangle.Height;
- win.Width = rectangle.Width;
- win.Top = 0;
- win.Left = rectangle.Left;
- win.Owner = this.Main;
- win.Show();
- }
- }
- catch
- {
- var win = new AdWindow("暂无广告");
- var rectangle = System.Windows.Forms.Screen.AllScreens[0].WorkingArea;
- win.Height = rectangle.Height;
- win.Width = rectangle.Width;
- win.Top = 0;
- win.Left = rectangle.Left;
- win.Owner = this.Main;
- win.Show();
- }
-
- }
-
- #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);
- win.Left = System.Windows.Forms.Screen.AllScreens[1].WorkingArea.Left;
- 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
- }
- }
|