修改order_info表中的字段doctor_Code,去掉冰箱储物箱等相关提示信息

This commit is contained in:
maqiao 2024-11-14 10:02:51 +08:00
parent a4a745e7b8
commit d582bba6c0
10 changed files with 250 additions and 190 deletions

View File

@ -37,7 +37,7 @@
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="2" />
<!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="0"/>
<add key="autoExit" value="3"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="180"/>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>

View File

@ -252,7 +252,7 @@ namespace DM_Weight.Models
//麻醉师工号
[SugarColumn(ColumnName = "doctorCode")]
[SugarColumn(ColumnName = "doctor_Code")]
public string DoctorCode { get; set; }
}
}

View File

@ -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<bool[]>(() =>
@ -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<Exception>().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;

View File

@ -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<PortUtilEvent>().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<PortUtilEvent>().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

View File

@ -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<PortUtilEvent>().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<SnackbarEvent>().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<SnackbarEvent>().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
{

View File

@ -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
{
@ -285,6 +286,11 @@ namespace DM_Weight.ViewModels
// }
//}
if (SelectedMenu != null && SelectedMenu.PremissionName == "退出")
{
bool[] boolArrs = ModbusHelper.GetInstance().GetAllBoxState();
bool allTrue = Array.TrueForAll(boolArrs, b => b);
//false是关着,true是开着
if (!allTrue)
{
logger.Info($"用户【{Operator?.Nickname}】退出登录");
Operator = null;
@ -292,6 +298,17 @@ namespace DM_Weight.ViewModels
_regionManager.RequestNavigate("MainRegion", "LoginWindow");
}
else
{
//还有药箱开着不能退出
AlertMsg alertMsg = new AlertMsg
{
Message = "请关闭药箱后再退出系统",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
else
{
//SelectedMenu.Children = SelectedMenu.Children;
//SelectedChildMenu = SelectedMenu.Children[0];
@ -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<string> OpenEditPasswordDialog
{
@ -406,35 +423,35 @@ namespace DM_Weight.ViewModels
/// <summary>
/// 获取温度信息
/// </summary>
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
/// <summary>
/// 查看冰箱温度
/// </summary>
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;

View File

@ -120,13 +120,13 @@
Header="修改密码" />
</MenuItem>
</Menu>
<Grid Grid.Column="2">
<!--<Grid Grid.Column="2">
<StackPanel Margin="6" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="储物箱" Command="{Binding OpenRecoverCommand}" Visibility="{Binding Is16Drawer, Converter={StaticResource BooleanToVisibilityConverter}}" Style="{StaticResource MaterialDesignFlatSecondaryLightButton}" />
<!--<TextBlock Margin="0,10,10,0" Text="{Binding WD}" Foreground="White" FontWeight="Bold" FontSize="14"/>-->
--><!--<TextBlock Margin="0,10,10,0" Text="{Binding WD}" Foreground="White" FontWeight="Bold" FontSize="14"/>--><!--
<Button Content="查看冰箱温度" Visibility="{Binding HasFridge}" Command="{Binding CheckWDCommand}" Style="{StaticResource MaterialDesignFlatSecondaryLightButton}"/>
</StackPanel>
</Grid>
</Grid>-->
</Grid>

View File

@ -86,7 +86,7 @@
<materialDesign:Card Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8">
<Button Width="120" Content="{Binding SelfContent}" Command="{Binding OpenBoxDelegate}" CommandParameter="0"
<Button Width="180" Height="70" Content="{Binding SelfContent}" Command="{Binding OpenBoxDelegate}" CommandParameter="0" FontSize="30" Foreground="Red"
IsEnabled="{Binding SelfEnable}"
materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding SelfStatus, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
materialDesign:ButtonProgressAssist.IsIndeterminate="{Binding SelfStatus, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
@ -49,5 +50,21 @@ namespace DM_Weight.util
return icount;
}
}
public static ulong GetSystemIdleTime()
{
ulong idleTime = 0;
ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOS_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
idleTime = (ulong)mo.Properties["IdleTime"].Value;
break;
}
Console.WriteLine(idleTime);
return idleTime;
}
}
}