diff --git a/DM_Weight/App.config b/DM_Weight/App.config
index 3f0b3a8..480ac08 100644
--- a/DM_Weight/App.config
+++ b/DM_Weight/App.config
@@ -3,7 +3,7 @@
-
+
-
+
@@ -99,7 +99,7 @@
-
+
@@ -108,7 +108,7 @@
-
+
diff --git a/DM_Weight/Port/ModbusHelper.cs b/DM_Weight/Port/ModbusHelper.cs
index 23158bd..e669eb2 100644
--- a/DM_Weight/Port/ModbusHelper.cs
+++ b/DM_Weight/Port/ModbusHelper.cs
@@ -1,6 +1,8 @@
using DM_Weight.Finger;
using DM_Weight.msg;
+using DM_Weight.util;
using DM_Weight.ViewModels;
+using DM_Weight.Views;
using log4net;
using log4net.Repository.Hierarchy;
using Modbus.Device;
@@ -29,17 +31,11 @@ namespace DM_Weight.Port
private Socket socket;
private TcpClient client;
private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
- string ip = ConfigurationManager.AppSettings["modbusIp"].ToString();
- int port = Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
private static object _lock = new object();
public static bool BoxOperate { get; set; }
- private ModbusHelper()
+ public ModbusHelper()
{
- logger.Info("ModbusHelper");
-
- socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port);
-
- //socket = CreateSocket();
+ socket = MakeKeepALiveSocket();
client = new TcpClient();
client.Client = socket;
master = ModbusIpMaster.CreateIp(client);
@@ -51,105 +47,62 @@ namespace DM_Weight.Port
{
if (instance == null)
{
+ //lock (objLock)
+ //{
+ // if (instance == null)
instance = new ModbusHelper();
+ //}
}
+
return instance;
}
}
private void SetModusIpMaster()
{
logger.Info("SetModusIpMaster");
- socket = KeepALiveSocket.MakeKeepALiveSocket(ip, port);
+ socket = MakeKeepALiveSocket();
client = new TcpClient();
client.Client = socket;
master = ModbusIpMaster.CreateIp(client);
}
-
public bool[] GetAllBoxState()
{
- //bool[] bools = Policy.Handle()
- // .Retry(3, (exception, retryCount) =>
- // {
- // this.Dispose();
- // //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
- // logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}");
- // Thread.Sleep(50);
- // this.SetModusIpMaster();
- // BoxOperate = false;
- // // return TimeSpan.FromSeconds (1);
- // }).Execute(() =>
- // {
- // bool[] flags = new bool[18];
- // try
- // {
- // if (master == null)
- // {
- // this.SetModusIpMaster();
- // }
- // var result = master.ReadInputRegisters(1, 0x0033, 2);
- // var r1 = Convert.ToString(((int)result[0] >> 14) | ((int)result[1] << 2), 2).PadLeft(18, '0');
- // var r2 = r1.ToCharArray();
- // logger.Info("r2=>" + string.Join(", ", r2));
- // //var r2=new char[18] { '0','0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' };
- // for (int i = 0; i < 18; i++)
- // {
- // flags[i] = r2[17 - i] == '1' ? true : false;
- // }
- // logger.Info($"获取所有箱子门状态返回:{string.Join(',', flags)};");
- // }
- // catch (Exception)
- // {
- // this.Dispose();
- // //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
- // logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}");
- // Thread.Sleep(50);
- // this.SetModusIpMaster();
- // BoxOperate = false;
- // }
- // return flags;
- // });
lock (_lock)
{
- bool successFlag = true;
- bool[] bools = new bool[18];
- int iCount = 0;
- do
+ bool[] bools = Policy.Handle()
+ .Retry(3, (exception, retryCount) =>
{
- try
+ this.Dispose();
+ //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
+ logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}");
+
+ Thread.Sleep(50);
+ BoxOperate = false;
+ this.SetModusIpMaster();
+ // return TimeSpan.FromSeconds (1);
+ Task.Factory.StartNew(() =>
{
- bool[] flags = new bool[18];
- if (master == null)
- {
- this.SetModusIpMaster();
- }
- var result = master.ReadInputRegisters(1, 0x0033, 2);
- var r1 = Convert.ToString(((int)result[0] >> 14) | ((int)result[1] << 2), 2).PadLeft(18, '0');
- var r2 = r1.ToCharArray();
- logger.Info("r2=>" + string.Join(", ", r2));
- //var r2=new char[18] { '0','0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' };
- for (int i = 0; i < 18; i++)
- {
- bools[i] = r2[17 - i] == '1' ? true : false;
- }
- logger.Info($"获取所有箱子门状态返回:{string.Join(',', bools)};");
- successFlag = true;
- }
- catch (Exception exception)
- {
- if (iCount >= 3)
- break;
- iCount++;
- successFlag = false;
- this.Dispose();
- //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception);
- logger.Info($"获取所有箱子门状态出错,第{iCount}次重试,异常信息{exception}");
- Thread.Sleep(500);
- this.SetModusIpMaster();
- BoxOperate = false;
FingerprintUtil.FingerDisconnect();
+ });
+ }).Execute(() =>
+ {
+ bool[] flags = new bool[18];
+ if (master == null)
+ {
+ this.SetModusIpMaster();
}
- } while (!successFlag);
+ var result = master.ReadInputRegisters(1, 0x0033, 2);
+ var r1 = Convert.ToString(((int)result[0] >> 14) | ((int)result[1] << 2), 2).PadLeft(18, '0');
+ var r2 = r1.ToCharArray();
+ logger.Info("r2=>" + string.Join(", ", r2));
+ for (int i = 0; i < 18; i++)
+ {
+ flags[i] = r2[17 - i] == '1' ? true : false;
+ }
+ logger.Info($"获取所有箱子门状态返回:{string.Join(',', flags)}");
+ return flags;
+ });
return bools;
}
}
@@ -158,10 +111,6 @@ namespace DM_Weight.Port
lock (_lock)
{
BoxOperate = true;
- //if (ConfigurationManager.AppSettings["test"]!=null&& ConfigurationManager.AppSettings["test"].ToString()=="Y")
- //{
- // return true;
- //}
bool bFlag = false;
Thread.Sleep(50);
Policy.Handle().Retry(3, ((exception, retryCount) =>
@@ -169,19 +118,20 @@ namespace DM_Weight.Port
this.Dispose();
//Debug.WriteLine($"打开箱子出错,第{retryCount}次重试", exception);
logger.Info($"打开箱子出错,第{retryCount}次重试,异常信息{exception}");
- //SpeakAsync("药箱连接失败,正在尝试重新打开");
- Thread.Sleep(500);
+ Thread.Sleep(50);
this.SetModusIpMaster();
+ Task.Factory.StartNew(() =>
+ {
+ FingerprintUtil.FingerDisconnect();
+ });
//return TimeSpan.FromSeconds (1);
})).Execute(() =>
{
logger.Info($"正在打开{boxNum}号药箱");
master.WriteSingleRegister(1, (ushort)boxNum, 20);
logger.Info($"开门指令已发送{(ushort)boxNum}");
- SpeakAsync("请及时关闭药箱");
//Console.WriteLine($"开门指令已发送{(ushort)boxNum}");
bFlag = true;
- FingerprintUtil.FingerDisconnect();
});
return bFlag;
}
@@ -193,36 +143,37 @@ namespace DM_Weight.Port
client.Close();
master.Dispose();
}
+ public static Socket MakeKeepALiveSocket()
+ {
+ uint dummy = 0;
+ byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
+ BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);//启用Keep-Alive
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));//在这个时间间隔内没有数据交互,则发送探测包
+ BitConverter.GetBytes((uint)10000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);//发探测包时间间隔
+ //IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.13"), 502);
+ string modbusIp = ConfigurationManager.AppSettings["modbusIp"].ToString();
+ int modbusPort = Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
+ IPEndPoint iep = new IPEndPoint(IPAddress.Parse(modbusIp), modbusPort);
+ Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ _socket = Policy.Handle()
+ .Retry(3, (exception, retryCount) =>
+ {
+ Console.WriteLine($"建立Socket,第{retryCount}次重试", exception);
+ // return TimeSpan.FromSeconds (1);
+ })
+ .Execute(() =>
+ {
+ _socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
+ _socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
+ _socket.Connect(iep);
+ return _socket;
+ });
+ return _socket;
+ }
private static SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
public static void SpeakAsync(string textinfo)
{
- speechSynthesizer.Rate = 2;
speechSynthesizer.SpeakAsync(textinfo);
}
-
-
- private Socket CreateSocket()
- {
- Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- string serverIp = "127.0.0.1"; // 服务器IP地址
- int port = 4002; // 服务器端口
- IPAddress serverAddress = IPAddress.Parse(serverIp);
- IPEndPoint remoteEP = new IPEndPoint(serverAddress, port);
-
- clientSocket.Connect(remoteEP);
-
- if (clientSocket.Connected)
- {
-
- // 发送数据
- //byte[] msg = Encoding.ASCII.GetBytes("This is a test");
- //clientSocket.Send(msg);
-
- // 关闭socket
- //clientSocket.Shutdown(SocketShutdown.Both);
- //clientSocket.Close();
- }
- return clientSocket;
- }
}
}
diff --git a/DM_Weight/Port/MyMinaDecoder.cs b/DM_Weight/Port/MyMinaDecoder.cs
index 9676c88..8909eda 100644
--- a/DM_Weight/Port/MyMinaDecoder.cs
+++ b/DM_Weight/Port/MyMinaDecoder.cs
@@ -28,14 +28,16 @@ namespace DM_Weight.Port
byte functionCode = input.Get(7);
if (functionCode == 4)
{
+
int a = input.Get(length - 2);
int b = input.Get(length - 1);
- Console.WriteLine("a");
- Console.WriteLine(a);
- Console.WriteLine("b");
- Console.WriteLine(b);
- var r = Convert.ToString((a >> 14) | (b << 2), 2).PadLeft(18, '0').ToCharArray();
- bool f = r.Any(c => c == '1');
+ int c = input.Get(length - 3);
+ int d = input.Get(length - 4); logger.Info($"查状态收到返回a:{a};b:{b};c:{c};d:{d}");
+ bool f = false;
+ if (a > 0 || b > 0 || c > 0 || d > 0)
+ {
+ f = true;
+ }
output.Write(f);
}
input.Position = length;
diff --git a/DM_Weight/Port/SocketHelper.cs b/DM_Weight/Port/SocketHelper.cs
index cfce5be..27727d5 100644
--- a/DM_Weight/Port/SocketHelper.cs
+++ b/DM_Weight/Port/SocketHelper.cs
@@ -1,9 +1,14 @@
-using DM_Weight.ViewModels;
+using DM_Weight.Models;
+using DM_Weight.msg;
+using DM_Weight.util;
+using DM_Weight.ViewModels;
+using DM_Weight.Views;
using log4net;
using Mina.Core.Future;
using Mina.Filter.Codec;
using Mina.Filter.Logging;
using Mina.Transport.Socket;
+using Prism.Events;
using System;
using System.Collections.Generic;
using System.Configuration;
@@ -21,11 +26,24 @@ namespace DM_Weight.Port
AsyncSocketConnector acceptor = new AsyncSocketConnector();
IConnectFuture iConnectFuture;
public bool OpenStatus=false;
+ //多线程退出标识
+ public bool IsMultiThread = false;
string ip = ConfigurationManager.AppSettings["modbusIp"].ToString();
int port =Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]);
- public SocketHelper()
+ IEventAggregator _eventAggregator;
+ public SocketHelper(IEventAggregator eventAggregator)
{
- acceptor.ExceptionCaught += (o, e) => logger.Error(e.Exception);
+ _eventAggregator=eventAggregator;
+ acceptor.ExceptionCaught += (o, e) =>
+ {
+ logger.Error($"网口通信超时:{e.Exception}");
+ AlertMsg alertMsg = new AlertMsg
+ {
+ Message = $"网口通信超时,正在重试!",
+ Type = MsgType.ERROR
+ };
+ _eventAggregator.GetEvent().Publish(alertMsg);
+ };
//acceptor.FilterChain.AddLast("logger", new LoggingFilter());
acceptor.FilterChain.AddLast("encoding", new ProtocolCodecFilter(new MyMinaCodecFactory()));
@@ -36,13 +54,24 @@ namespace DM_Weight.Port
{
OpenStatus = (bool)e.Message;
logger.Info("MessageReceived>>>>>>>>>>>>>>>>" + OpenStatus);
+ if(OpenStatus)
+ {
+ HomeWindow.idleTimer.Stop();
+ }
+ else
+ {
+ HomeWindow.idleTimer.AutoReset = true;
+ HomeWindow.idleTimer.Interval = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0") * 1000;
+ HomeWindow.idleTimer.Start();
+
+ }
};
acceptor.SessionClosed += (o, e) =>
{
logger.Info("SessionClosed");
- Task.Delay(50).Wait();
+ //Task.Delay(50).Wait();
SocketConnect();
};
this.SocketConnect();
diff --git a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
index e979a1e..1627041 100644
--- a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs
@@ -11,14 +11,17 @@ using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
+using System.Xml;
namespace DM_Weight.ViewModels
{
@@ -393,7 +396,7 @@ namespace DM_Weight.ViewModels
//TotalCount = totalCount;
PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
- if (Convert.ToDateTime(currentList.EffDate).ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
+ if (currentList != null && currentList.EffDate != null && Convert.ToDateTime(currentList.EffDate).ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
{
switch (DrawerNo)
{
@@ -464,7 +467,7 @@ namespace DM_Weight.ViewModels
for (int i = 0; i < chlList.Count; i++)
{
ChannelList chl = chlList[i];
- if (Convert.ToDateTime(chl.EffDate).ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
+ if (chl != null && chl.EffDate != null)
{
switch (chl.DrawerNo)
{
@@ -828,16 +831,16 @@ namespace DM_Weight.ViewModels
{
//bool[] bools = ModbusHelper.GetInstance().GetAllBoxState();
//bool allFalse = Array.TrueForAll(bools, b => b == false);
- //if (!allFalse)
- //{
- // Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
- // return;
- //}
if (_socketHelper.OpenStatus)
{
ModbusHelper.SpeakAsync("请关闭药箱后再打开");
return;
}
+ //if (_socketHelper.OpenStatus)
+ //{
+ // ModbusHelper.SpeakAsync("请关闭药箱后再打开");
+ // return;
+ //}
DrawerNo = Convert.ToInt32(strDrawerNo);
MachineRecord machineRecord = new MachineRecord();
machineRecord.MachineId = "DM5";
@@ -856,62 +859,99 @@ namespace DM_Weight.ViewModels
ModbusHelper.SpeakAsync($"正在打开{DrawerNo + 1}号药箱");
//记录开药箱日志
SqlSugarHelper.Db.Insertable(machineRecord).ExecuteCommand();
-
- _socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(DrawerNo - 1) });
+ try
+ {
+ _socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(DrawerNo) });
+ }
+ catch (Exception ex)
+ {
+ AlertMsg alertMsg = new AlertMsg
+ {
+ Message = $"网口连接异常,正在重试{ex.Message}",
+ Type = MsgType.ERROR,
+ };
+ _eventAggregator.GetEvent().Publish(alertMsg);
+ }
_socketHelper.OpenStatus = true;
-
+ Thread.Sleep(200);
int i = 10;
new PromiseUtil().taskAsyncLoop(500, 0, async (options, next, stop) =>
{
- i--;
- if (_socketHelper.OpenStatus)
+
+ _socketHelper.IsMultiThread = true;
+ try
{
-
- //bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
- _socketHelper.SendMessage(new MyBaseMessage() { lockNo = 0x33, functionCode = 4, delay = 2 });
-
- //ModbusHelper.SpeakAsync($"i为{i};状态为:{_socketHelper.OpenStatus}");
- //bool state = Array.TrueForAll(boolsl, b => b == false);
+ i--;
if (_socketHelper.OpenStatus)
{
- if (i == 0)
+
+ //bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
+ _socketHelper.SendMessage(new MyBaseMessage() { lockNo = 0x33, functionCode = 4, delay = 2 });
+
+ //ModbusHelper.SpeakAsync($"i为{i};状态为:{_socketHelper.OpenStatus}");
+ //bool state = Array.TrueForAll(boolsl, b => b == false);
+ if (_socketHelper.OpenStatus)
{
- ModbusHelper.SpeakAsync("请及时关闭药箱");
- i = 10;
+ if (i == 0)
+ {
+ ModbusHelper.SpeakAsync("请及时关闭药箱");
+ i = 10;
+ }
+ next();
+ }
+ else
+ {
+ stop();
}
- next();
}
else
{
+ _socketHelper.IsMultiThread = false;
stop();
}
}
- else
+ catch (Exception ex)
{
- stop();
+ _socketHelper.OpenStatus = false;
+ AlertMsg alertMsg = new AlertMsg
+ {
+ Message = $"网口连接异常,正在重试{ex.Message}",
+ Type = MsgType.ERROR,
+ };
+ _eventAggregator.GetEvent().Publish(alertMsg);
}
});
+
//ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo);
- //Task.Factory.StartNew(async () =>
+ //ModbusHelper.BoxOperate = false;
+ //int i = 10;
+ //Task.Factory.StartNew(() =>
//{
- // bool loop = true;
- // while (loop)
+ // while (!ModbusHelper.BoxOperate)
// {
- // await Task.Delay(5000);
- // bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
- // bool state = Array.TrueForAll(boolsl, b => b == false);
- // if (state)
+ // Thread.Sleep(500);
+ // ModbusHelper.BoxOperate = ModbusHelper.GetInstance().GetAllBoxState();
+ // if (!ModbusHelper.BoxOperate)
// {
- // loop = false;
- // ModbusHelper.BoxOperate = false;
+ // if (i == 0)
+ // {
+ // ModbusHelper.SpeakAsync("请及时关闭药箱");
+ // }
// }
- // else
+ // i--;
+ // if (i == 5)
// {
- // ModbusHelper.BoxOperate = true;
- // ModbusHelper.SpeakAsync("药箱已打开,请及时关闭");
+ // i = 0;
// }
// }
//});
+ //管理员开对应药师的药箱后颜色消失
+ ChannelList iList = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == "DM5" && cl.DrawerNo == DrawerNo + 1).First();
+ if (iList != null)
+ {
+ iList.EffDate = null;
+ SqlSugarHelper.Db.Updateable(iList).UpdateColumns(it => new { it.EffDate }).ExecuteCommand();
+ }
}
}
@@ -921,9 +961,9 @@ namespace DM_Weight.ViewModels
List listCls = SqlSugarHelper.Db.Queryable()
.LeftJoin((cl, ul) => ul.UserBarcode == cl.BelongUser)
.Where(cl => cl.MachineId == "DM5")
- .GroupBy(cl=>cl.DrawerNo)
+ .GroupBy(cl => cl.DrawerNo)
.Select((cl, ul) => new ChannelList { DrawerNo = cl.DrawerNo, BelongUserName = ul.Nickname }).ToList();
- if (listCls != null && listCls.Count>0)
+ if (listCls != null && listCls.Count > 0)
{
for (int i = 0; i < listCls.Count; i++)
{
diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs
index 2e9fbb1..1453e1b 100644
--- a/DM_Weight/ViewModels/HomeWindowViewModel.cs
+++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs
@@ -156,83 +156,83 @@ namespace DM_Weight.ViewModels
{
//if (!_portUtil.Operate)
//{
- if (SelectedChildMenu != null)
+ if (SelectedChildMenu != null)
+ {
+ if (SelectedChildMenu.PremissionPath.Equals("TakeRecordWindow"))
{
- if (SelectedChildMenu.PremissionPath.Equals("TakeRecordWindow"))
- {
- //定义传参变量
- NavigationParameters keys = new NavigationParameters();
+ //定义传参变量
+ NavigationParameters keys = new NavigationParameters();
- //添加参数,键值对格式
- keys.Add("Type", 2);
- _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
- }
- else if (SelectedChildMenu.PremissionPath.Equals("AddRecordWindow"))
- {
- //定义传参变量
- NavigationParameters keys = new NavigationParameters();
+ //添加参数,键值对格式
+ keys.Add("Type", 2);
+ _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
+ }
+ else if (SelectedChildMenu.PremissionPath.Equals("AddRecordWindow"))
+ {
+ //定义传参变量
+ NavigationParameters keys = new NavigationParameters();
- //添加参数,键值对格式
- keys.Add("Type", 1);
- _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
- }
- else if (SelectedChildMenu.PremissionPath.Equals("ReturnRecordWindow"))
- {
- //定义传参变量
- NavigationParameters keys = new NavigationParameters();
+ //添加参数,键值对格式
+ keys.Add("Type", 1);
+ _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
+ }
+ else if (SelectedChildMenu.PremissionPath.Equals("ReturnRecordWindow"))
+ {
+ //定义传参变量
+ NavigationParameters keys = new NavigationParameters();
- //添加参数,键值对格式
- keys.Add("Type", 3);
- _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
- }
- else if (SelectedChildMenu.PremissionPath.Equals("RetrunEmptyRecordWindow"))
- {
- //定义传参变量
- NavigationParameters keys = new NavigationParameters();
+ //添加参数,键值对格式
+ keys.Add("Type", 3);
+ _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
+ }
+ else if (SelectedChildMenu.PremissionPath.Equals("RetrunEmptyRecordWindow"))
+ {
+ //定义传参变量
+ NavigationParameters keys = new NavigationParameters();
- //添加参数,键值对格式
- keys.Add("Type", 3);
- _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath, keys);
- }
- else if (SelectedChildMenu.PremissionPath.Equals("CheckRecordWindow"))
- {
- //定义传参变量
- NavigationParameters keys = new NavigationParameters();
+ //添加参数,键值对格式
+ keys.Add("Type", 3);
+ _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath, keys);
+ }
+ else if (SelectedChildMenu.PremissionPath.Equals("CheckRecordWindow"))
+ {
+ //定义传参变量
+ NavigationParameters keys = new NavigationParameters();
- //添加参数,键值对格式
- keys.Add("Type", 4);
- _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
- }
- else
+ //添加参数,键值对格式
+ keys.Add("Type", 4);
+ _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
+ }
+ else
+ {
+ if (SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow") || SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow2"))
{
- if (SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow") || SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow2"))
+ if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
{
- if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
- {
- _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
- }
- else
- {
- _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
- }
- }
- else if (SelectedChildMenu.PremissionPath.Equals("SettingMainWindow") || SelectedChildMenu.PremissionPath.Equals("SettingWindow"))
- {
- if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 0)
- {
- _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
- }
- else
- {
- _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
- }
+ _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
}
else
{
- _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath);
+ _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
}
}
+ else if (SelectedChildMenu.PremissionPath.Equals("SettingMainWindow") || SelectedChildMenu.PremissionPath.Equals("SettingWindow"))
+ {
+ if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 0)
+ {
+ _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
+ }
+ else
+ {
+ _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
+ }
+ }
+ else
+ {
+ _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath);
+ }
}
+ }
//}
}
@@ -291,6 +291,7 @@ namespace DM_Weight.ViewModels
//bool allTrue = Array.TrueForAll(boolArrs, b => b);
//false是关着,true是开着
if (!_socketHelper.OpenStatus)
+ //if (ModbusHelper.BoxOperate)
{
logger.Info($"用户【{Operator?.Nickname}】退出登录");
Operator = null;
@@ -300,7 +301,7 @@ namespace DM_Weight.ViewModels
else
{
//还有药箱开着不能退出
- _portUtil.SpeakAsync("请关闭药箱后再退出");
+ ModbusHelper.SpeakAsync("请关闭药箱后再退出");
SelectedMenu = _premissionDmList[0];
}
}
@@ -311,7 +312,7 @@ namespace DM_Weight.ViewModels
//SelectedChildMenu = SelectedMenu.Children[0];
//if (!_portUtil.Operate)
//{
- _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath);
+ _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath);
//}
}
}
@@ -685,10 +686,29 @@ namespace DM_Weight.ViewModels
//_chkFunction.HIKStopDVRRecord();
Operator = null;
Reviewer = null;
- //Application.Current.Dispatcher.Invoke(() =>
- //{
- _regionManager.RequestNavigate("MainRegion", "LoginWindow");
- //});
+ try
+ {
+ if (_socketHelper.IsMultiThread)
+ {
+ Application.Current.Dispatcher.BeginInvoke(() =>
+ {
+ _regionManager.RequestNavigate("MainRegion", "LoginWindow");
+ });
+ }
+ else
+ {
+
+
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ _regionManager.RequestNavigate("MainRegion", "LoginWindow");
+ });
+ }
+ }
+ catch (Exception ex)
+ {
+ logger.Info($"自动退出异常:{ex.Message}");
+ }
}
}
diff --git a/DM_Weight/ViewModels/MainWindowViewModel.cs b/DM_Weight/ViewModels/MainWindowViewModel.cs
index c49e6cd..460b9a6 100644
--- a/DM_Weight/ViewModels/MainWindowViewModel.cs
+++ b/DM_Weight/ViewModels/MainWindowViewModel.cs
@@ -18,6 +18,7 @@ using Unity;
using DM_Weight.HIKVISION;
using log4net.Repository.Hierarchy;
using log4net;
+using System.Windows;
namespace DM_Weight.ViewModels
{
@@ -67,7 +68,8 @@ namespace DM_Weight.ViewModels
IUnityContainer _container;
//private CHKFunction _cHKFunction;
private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
- public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil)
+ SocketHelper _socketHelper;
+ public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, SocketHelper socketHelper)
{
//_portUtil = portUtil;
this.eventAggregator = eventAggregator;
@@ -80,8 +82,9 @@ namespace DM_Weight.ViewModels
//System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
//{
- _container.RegisterType