From d582bba6c069b0ff9a5f1a2bdac5765ba07e6e02 Mon Sep 17 00:00:00 2001 From: maqiao <625215135@qq.com> Date: Thu, 14 Nov 2024 10:02:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9order=5Finfo=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=AD=97=E6=AE=B5doctor=5FCode=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=86=B0=E7=AE=B1=E5=82=A8=E7=89=A9=E7=AE=B1?= =?UTF-8?q?=E7=AD=89=E7=9B=B8=E5=85=B3=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DM_Weight/App.config | 2 +- DM_Weight/DM_Weight.csproj | 2 +- DM_Weight/Models/OrderInfo.cs | 2 +- DM_Weight/Port/ModbusHelper.cs | 17 +- DM_Weight/Port/PortUtil.cs | 90 +++++----- .../CheckOrderNewWindowViewModel.cs | 154 +++++++++--------- DM_Weight/ViewModels/HomeWindowViewModel.cs | 148 ++++++++++------- DM_Weight/Views/HomeWindow.xaml | 6 +- DM_Weight/Views/OpenBoxNewWindow.xaml | 2 +- DM_Weight/util/CheckComputerFreeState.cs | 17 ++ 10 files changed, 250 insertions(+), 190 deletions(-) diff --git a/DM_Weight/App.config b/DM_Weight/App.config index 27b072d..26cbf26 100644 --- a/DM_Weight/App.config +++ b/DM_Weight/App.config @@ -37,7 +37,7 @@ - + diff --git a/DM_Weight/DM_Weight.csproj b/DM_Weight/DM_Weight.csproj index aa44d2f..30703a6 100644 --- a/DM_Weight/DM_Weight.csproj +++ b/DM_Weight/DM_Weight.csproj @@ -1,7 +1,7 @@  - WinExe + Exe net6.0-windows enable true diff --git a/DM_Weight/Models/OrderInfo.cs b/DM_Weight/Models/OrderInfo.cs index c71bd19..3684e95 100644 --- a/DM_Weight/Models/OrderInfo.cs +++ b/DM_Weight/Models/OrderInfo.cs @@ -252,7 +252,7 @@ namespace DM_Weight.Models //麻醉师工号 - [SugarColumn(ColumnName = "doctorCode")] + [SugarColumn(ColumnName = "doctor_Code")] public string DoctorCode { get; set; } } } \ No newline at end of file diff --git a/DM_Weight/Port/ModbusHelper.cs b/DM_Weight/Port/ModbusHelper.cs index 98d5294..5b4fdb2 100644 --- a/DM_Weight/Port/ModbusHelper.cs +++ b/DM_Weight/Port/ModbusHelper.cs @@ -1,4 +1,7 @@ -using Modbus.Device; +using DM_Weight.ViewModels; +using log4net; +using log4net.Repository.Hierarchy; +using Modbus.Device; using Polly; using System; using System.Collections.Generic; @@ -20,6 +23,7 @@ namespace DM_Weight.Port private TcpClient client; private static ModbusHelper instance; private static readonly object objLock = new object(); + private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel)); public ModbusHelper() { socket = MakeKeepALiveSocket(); @@ -56,7 +60,8 @@ namespace DM_Weight.Port .Retry(3, (exception, retryCount) => { this.Dispose(); - Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception); + //Debug.WriteLine($"获取所有箱子门状态出错,第{retryCount}次重试", exception); + logger.Info($"获取所有箱子门状态出错,第{retryCount}次重试, 异常信息{exception}"); this.SetModusIpMaster(); // return TimeSpan.FromSeconds (1); }).Execute(() => @@ -70,6 +75,7 @@ namespace DM_Weight.Port { flags[i] = r2[17 - i] == '1' ? true : false; } + logger.Info($"获取所有箱子门状态返回:{string.Join(',',flags)}"); return flags; }); return bools; @@ -80,13 +86,16 @@ namespace DM_Weight.Port Policy.Handle().Retry(3, ((exception, retryCount) => { this.Dispose(); - Debug.WriteLine($"打开箱子出错,第{retryCount}次重试", exception); + //Debug.WriteLine($"打开箱子出错,第{retryCount}次重试", exception); + logger.Info($"打开箱子出错,第{retryCount}次重试,异常信息{exception}"); this.SetModusIpMaster(); //return TimeSpan.FromSeconds (1); })).Execute(() => { + logger.Info($"正在打开{boxNum}号药箱"); master.WriteSingleRegister(1, (ushort)boxNum, 14); - Console.WriteLine($"开门指令已发送{(ushort)boxNum}"); + logger.Info($"开门指令已发送{(ushort)boxNum}"); + //Console.WriteLine($"开门指令已发送{(ushort)boxNum}"); bFlag = true; }); return bFlag; diff --git a/DM_Weight/Port/PortUtil.cs b/DM_Weight/Port/PortUtil.cs index 5b38b1b..d055ab9 100644 --- a/DM_Weight/Port/PortUtil.cs +++ b/DM_Weight/Port/PortUtil.cs @@ -687,52 +687,52 @@ namespace DM_Weight.Port public PortUtil(IEventAggregator eventAggregator, CHKFunction chkFunction) { _eventAggregator = eventAggregator; - try - { - string DrawerPortPath = ConfigurationManager.AppSettings["DrawerPortPath"]; - logger.Info($"打开抽屉串口【{DrawerPortPath}】"); - drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8); - drawerSerial.Open(); - logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】"); - } - catch (Exception e) - { - logger.Error("抽屉串口打开错误" + e.Message); - } + //try + //{ + // string DrawerPortPath = ConfigurationManager.AppSettings["DrawerPortPath"]; + // logger.Info($"打开抽屉串口【{DrawerPortPath}】"); + // drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8); + // drawerSerial.Open(); + // logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】"); + //} + //catch (Exception e) + //{ + // logger.Error("抽屉串口打开错误" + e.Message); + //} - try - { - string ScanCodePortPath = ConfigurationManager.AppSettings["ScanCodePortPath"]; - logger.Info($"打开条码枪串口【{ScanCodePortPath}】"); - scanCodeSerial = new SerialPort(ScanCodePortPath, 9600, Parity.None, 8); - scanCodeSerial.DataReceived += (object sender, System.IO.Ports.SerialDataReceivedEventArgs e) => - { - string code = scanCodeSerial.ReadExisting(); - _eventAggregator.GetEvent().Publish(new util.DeviceMsg() - { - EventType = util.EventType.CODESCAN, - Code = code, - }); - }; - scanCodeSerial.Open(); - logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】"); - } - catch (Exception e) - { - logger.Error("条码枪串口打开错误" + e.Message); - } - try - { - string FridgePortPath = ConfigurationManager.AppSettings["FridgePortPath"]; - logger.Info($"打开冰箱串口【{FridgePortPath}】"); - fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8); - fridgeSerial.Open(); - logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】"); - } - catch (Exception e) - { - logger.Error("冰箱串口打开错误" + e.Message); - } + //try + //{ + // string ScanCodePortPath = ConfigurationManager.AppSettings["ScanCodePortPath"]; + // logger.Info($"打开条码枪串口【{ScanCodePortPath}】"); + // scanCodeSerial = new SerialPort(ScanCodePortPath, 9600, Parity.None, 8); + // scanCodeSerial.DataReceived += (object sender, System.IO.Ports.SerialDataReceivedEventArgs e) => + // { + // string code = scanCodeSerial.ReadExisting(); + // _eventAggregator.GetEvent().Publish(new util.DeviceMsg() + // { + // EventType = util.EventType.CODESCAN, + // Code = code, + // }); + // }; + // scanCodeSerial.Open(); + // logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】"); + //} + //catch (Exception e) + //{ + // logger.Error("条码枪串口打开错误" + e.Message); + //} + //try + //{ + // string FridgePortPath = ConfigurationManager.AppSettings["FridgePortPath"]; + // logger.Info($"打开冰箱串口【{FridgePortPath}】"); + // fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8); + // fridgeSerial.Open(); + // logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】"); + //} + //catch (Exception e) + //{ + // logger.Error("冰箱串口打开错误" + e.Message); + //} if (_canBusExsit) { try diff --git a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs index 12ce6c0..2cf3762 100644 --- a/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs +++ b/DM_Weight/ViewModels/CheckOrderNewWindowViewModel.cs @@ -502,7 +502,7 @@ namespace DM_Weight.ViewModels for (int j = 0; j < oi.OrderDetailList.Count; j++) { oi._OrderDetail = oi.OrderDetailList[j]; - int drawerNo= DrawerNo+1; + int drawerNo = DrawerNo + 1; ChannelStock cs = SqlSugarHelper.Db.Queryable() .Where(cs => cs.DrugId == oi._OrderDetail.DrugId && cs.ManuNo == oi._OrderDetail.SetManuNo @@ -541,12 +541,12 @@ namespace DM_Weight.ViewModels #region 记录 注射剂使用与交接记录报表 //查询发药时间 //MachineRecord SendMachineRecord = SqlSugarHelper.Db.Queryable().Where(mr => mr.DrawerNo == cs.DrawerNo && mr.Type == 2) - //.OrderByDescending(mr => mr.OperationTime) - //.First(); + //.OrderByDescending(mr => mr.OperationTime) + //.First(); //string retUser = SqlSugarHelper.Db.Queryable().Where(cl => cl.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM5") && cl.DrawerNo == cs.DrawerNo) //.Select(cl => cl.BelongUser).First(); - RejectionReport rejectionReport = SqlSugarHelper.Db.Queryable().Where(rp => rp.DrugId == cs.DrugId && rp.DrawerNo == cs.DrawerNo).OrderByDescending(rp=>rp.SendDate).First(); + RejectionReport rejectionReport = SqlSugarHelper.Db.Queryable().Where(rp => rp.DrugId == cs.DrugId && rp.DrawerNo == cs.DrawerNo).OrderByDescending(rp => rp.SendDate).First(); //发药信息 //RejectionReport rejectionReport = new RejectionReport(); @@ -719,22 +719,24 @@ namespace DM_Weight.ViewModels public async void OpenBoxAction(string strDrawerNo) { DrawerNo = Convert.ToInt32(strDrawerNo); + MachineRecord machineRecord = new MachineRecord(); + machineRecord.MachineId = "DM5"; + machineRecord.DrawerNo = DrawerNo; + machineRecord.Operator = HomeWindowViewModel.Operator?.Id; + machineRecord.OperationTime = DateTime.Now; + machineRecord.Type = 55; + machineRecord.InvoiceId = $"打开{DrawerNo + 1}号药箱"; + + if (DrawerNo > 0) { DrawerNo -= 1; RequestData(); Status = 1; _portUtil.SpeakAsync($"正在打开{DrawerNo + 1}号药箱"); + logger.Info($"正在打开{DrawerNo + 1}号药箱"); //记录开药箱日志 - SqlSugarHelper.Db.Insertable(new MachineRecord() - { - MachineId = "DM5", - DrawerNo = DrawerNo, - Operator = HomeWindowViewModel.Operator?.Id, - OperationTime = DateTime.Now, - Type = 55, - InvoiceId = $"打开{DrawerNo + 1}号药箱", - }).ExecuteCommand(); + SqlSugarHelper.Db.Insertable(machineRecord).ExecuteCommand(); ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo); } } @@ -755,72 +757,72 @@ namespace DM_Weight.ViewModels // 取消消息订阅 //_eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent); } - void DoMyPrismEvent(DeviceMsg msg) - { - switch (msg.EventType) - { - // 药箱打开 - case EventType.DRAWEROPEN: - if (Status == 1) - { - Status = 2; - } - //记录开药箱日志 - SqlSugarHelper.Db.Insertable(new MachineRecord() - { - MachineId = "DM5", - DrawerNo = _portUtil.DrawerNo, - Operator = HomeWindowViewModel.Operator?.Id, - OperationTime = DateTime.Now, - Type = 55, - InvoiceId = $"打开{DrawerNo}号药箱", - }).ExecuteCommand(); - _portUtil.GetBoxStatus(); - break; - // 药箱关闭 - case EventType.DRAWERCLOSE: - //记录药箱操作日志 - SqlSugarHelper.Db.Insertable(new MachineRecord() - { - MachineId = "DM5", - DrawerNo = _portUtil.DrawerNo, - Operator = HomeWindowViewModel.Operator?.Id, - OperationTime = DateTime.Now, - Type = 55, - InvoiceId = "药箱关闭", - }).ExecuteCommand(); + //void DoMyPrismEvent(DeviceMsg msg) + //{ + // switch (msg.EventType) + // { + // // 药箱打开 + // case EventType.DRAWEROPEN: + // if (Status == 1) + // { + // Status = 2; + // } + // //记录开药箱日志 + // SqlSugarHelper.Db.Insertable(new MachineRecord() + // { + // MachineId = "DM5", + // DrawerNo = _portUtil.DrawerNo, + // Operator = HomeWindowViewModel.Operator?.Id, + // OperationTime = DateTime.Now, + // Type = 55, + // InvoiceId = $"打开{DrawerNo}号药箱", + // }).ExecuteCommand(); + // _portUtil.GetBoxStatus(); + // break; + // // 药箱关闭 + // case EventType.DRAWERCLOSE: + // //记录药箱操作日志 + // SqlSugarHelper.Db.Insertable(new MachineRecord() + // { + // MachineId = "DM5", + // DrawerNo = _portUtil.DrawerNo, + // Operator = HomeWindowViewModel.Operator?.Id, + // OperationTime = DateTime.Now, + // Type = 55, + // InvoiceId = "药箱关闭", + // }).ExecuteCommand(); - if (Status == 2) - { - Status = 3; - } - _portUtil.Operate = false; - break; - // 打开失败 - case EventType.OPENERROR: - AlertMsg alertMsg = new AlertMsg - { - Message = msg.Message, - Type = MsgType.ERROR - }; - _eventAggregator.GetEvent().Publish(alertMsg); + // if (Status == 2) + // { + // Status = 3; + // } + // _portUtil.Operate = false; + // break; + // // 打开失败 + // case EventType.OPENERROR: + // AlertMsg alertMsg = new AlertMsg + // { + // Message = msg.Message, + // Type = MsgType.ERROR + // }; + // _eventAggregator.GetEvent().Publish(alertMsg); - Status = 0; + // Status = 0; - //记录药箱操作日志 - SqlSugarHelper.Db.Insertable(new MachineRecord() - { - MachineId = "DM5", - DrawerNo = _portUtil.DrawerNo, - Operator = HomeWindowViewModel.Operator?.Id, - OperationTime = DateTime.Now, - Type = 55, - InvoiceId = "药箱打开失败", - }).ExecuteCommand(); - _portUtil.Operate = false; - break; - } - } + // //记录药箱操作日志 + // SqlSugarHelper.Db.Insertable(new MachineRecord() + // { + // MachineId = "DM5", + // DrawerNo = _portUtil.DrawerNo, + // Operator = HomeWindowViewModel.Operator?.Id, + // OperationTime = DateTime.Now, + // Type = 55, + // InvoiceId = "药箱打开失败", + // }).ExecuteCommand(); + // _portUtil.Operate = false; + // break; + // } + //} } public class TotalDrug { diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs index 1e79d85..346e971 100644 --- a/DM_Weight/ViewModels/HomeWindowViewModel.cs +++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs @@ -24,6 +24,7 @@ using Newtonsoft.Json.Linq; using DM_Weight.msg; using DM_Weight.HIKVISION; using System.Threading; +using System.Diagnostics; namespace DM_Weight.ViewModels { @@ -286,10 +287,26 @@ namespace DM_Weight.ViewModels //} if (SelectedMenu != null && SelectedMenu.PremissionName == "退出") { - logger.Info($"用户【{Operator?.Nickname}】退出登录"); - Operator = null; - Reviewer = null; - _regionManager.RequestNavigate("MainRegion", "LoginWindow"); + bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState(); + bool allTrue = Array.TrueForAll(boolArrs, b => b); + //false是关着,true是开着 + if (!allTrue) + { + logger.Info($"用户【{Operator?.Nickname}】退出登录"); + Operator = null; + Reviewer = null; + _regionManager.RequestNavigate("MainRegion", "LoginWindow"); + } + else + { + //还有药箱开着不能退出 + AlertMsg alertMsg = new AlertMsg + { + Message = "请关闭药箱后再退出系统", + Type = MsgType.ERROR + }; + _eventAggregator.GetEvent().Publish(alertMsg); + } } else { @@ -349,24 +366,24 @@ namespace DM_Weight.ViewModels }); } - public DelegateCommand OpenRecoverCommand - { - get => new DelegateCommand(async () => - { - try - { - _portUtil.WindowName = "HomeWindow"; - _portUtil.Operate = true; - await _portUtil.OpenStorage(); - _portUtil.ResetData(); + //public DelegateCommand OpenRecoverCommand + //{ + // get => new DelegateCommand(async () => + // { + // try + // { + // _portUtil.WindowName = "HomeWindow"; + // _portUtil.Operate = true; + // await _portUtil.OpenStorage(); + // _portUtil.ResetData(); - } - catch (Exception ex) - { - logger.Info($"OpenRecoverCommand异常{ex.Message}"); - } - }); - } + // } + // catch (Exception ex) + // { + // logger.Info($"OpenRecoverCommand异常{ex.Message}"); + // } + // }); + //} public DelegateCommand OpenEditPasswordDialog { @@ -406,35 +423,35 @@ namespace DM_Weight.ViewModels /// /// 获取温度信息 /// - private async void GetWD(object sender, ElapsedEventArgs e) - { - if (!_portUtil.FridgeOperate) - { - string retStr = string.Empty; - byte[] data = null; - float retT = await _portUtil.GetFridgeTemperature(1); - Thread.Sleep(80); - WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT - 1.5), 2)}℃"; - } - } + //private async void GetWD(object sender, ElapsedEventArgs e) + //{ + // if (!_portUtil.FridgeOperate) + // { + // string retStr = string.Empty; + // byte[] data = null; + // float retT = await _portUtil.GetFridgeTemperature(1); + // Thread.Sleep(80); + // WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT - 1.5), 2)}℃"; + // } + //} - private async void GetWD() - { - if (!_portUtil.FridgeOperate) - { - string retStr = string.Empty; - byte[] data = null; - float retT = await _portUtil.GetFridgeTemperature(1); - Thread.Sleep(80); - WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT - 1.5), 2)}℃;"; - if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1) - { - float retTemp = await _portUtil.GetFridgeTemperature(2); - Thread.Sleep(80); - WD += $"{retTemp}℃"; - } - } - } + //private async void GetWD() + //{ + // if (!_portUtil.FridgeOperate) + // { + // string retStr = string.Empty; + // byte[] data = null; + // float retT = await _portUtil.GetFridgeTemperature(1); + // Thread.Sleep(80); + // WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT - 1.5), 2)}℃;"; + // if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1) + // { + // float retTemp = await _portUtil.GetFridgeTemperature(2); + // Thread.Sleep(80); + // WD += $"{retTemp}℃"; + // } + // } + //} //保存温湿度信息 private async void GetWSD(object sender, ElapsedEventArgs e) { @@ -494,11 +511,11 @@ namespace DM_Weight.ViewModels /// /// 查看冰箱温度 /// - public DelegateCommand CheckWDCommand { get => new DelegateCommand(CheckAction); } - private void CheckAction() - { - GetWD(); - } + //public DelegateCommand CheckWDCommand { get => new DelegateCommand(CheckAction); } + //private void CheckAction() + //{ + // GetWD(); + //} //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作 @@ -552,16 +569,31 @@ namespace DM_Weight.ViewModels if (autoExit > 0) { System.Timers.Timer timer = new System.Timers.Timer(); - timer.Interval = 1000; + timer.Interval = 100; timer.Elapsed += (sender, e) => { // 串口无人操作 - if (!_portUtil.Operate) + bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState(); + bool allTrue = Array.TrueForAll(boolArrs, b => b==false); + logger.Info($"进入自动退出定时方法{allTrue}"); + //false是关着,true是开着 + if (allTrue) { + //PerformanceCounter pc = new PerformanceCounter("System", "% Idle Time", true); + //float systemIdleTime = pc.NextValue(); + //Console.WriteLine($"systemIdleTime:{systemIdleTime}"); + + //// 获取系统空闲时间 + //TimeSpan idleTime = SystemInformation.IdleTime; + //// 打印空闲时间 + //Console.WriteLine("系统空闲时间: " + idleTime.ToString()); + long lTime = CheckComputerFreeState.GetLastInputTime(); + logger.Info($"自动退出时间{lTime}"); // 30秒内无人操作鼠标键盘 - if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit) + //if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit) + if (lTime > autoExit) { - logger.Info($"设备30秒内无人操作,用户【{Operator?.Nickname}】自动退出登录"); + logger.Info($"设备{autoExit}秒内无人操作,用户【{Operator?.Nickname}】自动退出登录"); _chkFunction.HIKStopDVRRecord(); Operator = null; Reviewer = null; diff --git a/DM_Weight/Views/HomeWindow.xaml b/DM_Weight/Views/HomeWindow.xaml index 2b2bda4..40d17df 100644 --- a/DM_Weight/Views/HomeWindow.xaml +++ b/DM_Weight/Views/HomeWindow.xaml @@ -120,13 +120,13 @@ Header="修改密码" /> - + + --> diff --git a/DM_Weight/Views/OpenBoxNewWindow.xaml b/DM_Weight/Views/OpenBoxNewWindow.xaml index 239a837..d41b5d6 100644 --- a/DM_Weight/Views/OpenBoxNewWindow.xaml +++ b/DM_Weight/Views/OpenBoxNewWindow.xaml @@ -86,7 +86,7 @@ -