From e79cdae0da13e51c85d7c8bb30655a834256d3df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E5=B7=A7?= <625215135@qq.com>
Date: Thu, 10 Jul 2025 11:53:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BD=95=E5=B1=8F=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8F=AF=E5=A4=9A=E6=AC=A1?=
=?UTF-8?q?=E5=8A=A0=E8=8D=AF=EF=BC=8C=E6=AF=92=E9=BA=BB=E6=9F=9C=E6=97=A0?=
=?UTF-8?q?=E8=8D=AF=E5=88=99=E6=98=BE=E7=A4=BA=E6=97=A0=E5=BA=93=E5=AD=98?=
=?UTF-8?q?=E6=88=96=E6=9C=AA=E7=BB=91=E5=AE=9A=EF=BC=8C=E5=AF=B9=E5=BA=94?=
=?UTF-8?q?=E7=9A=84=E8=8D=AF=E5=93=81=E5=85=88=E4=B8=8D=E8=A1=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DM_Weight/DM_Weight.csproj | 1 +
.../ViewModels/AdditionWindowViewModel.cs | 29 +++--
.../BindBoxPackageWindowViewModel.cs | 1 +
.../CheckSelfOrderWindowViewModel.cs | 2 +-
.../ViewModels/CheckStockWindowViewModel.cs | 13 +-
DM_Weight/ViewModels/LoginWindowViewModel.cs | 16 ++-
DM_Weight/ViewModels/MainWindowViewModel.cs | 120 ++++++++++++++++--
DM_Weight/Views/AdditionWindow.xaml | 18 ++-
DM_Weight/Views/MainWindow.xaml.cs | 21 ++-
DM_Weight/msg/PrintScreenEvent.cs | 13 ++
10 files changed, 189 insertions(+), 45 deletions(-)
create mode 100644 DM_Weight/msg/PrintScreenEvent.cs
diff --git a/DM_Weight/DM_Weight.csproj b/DM_Weight/DM_Weight.csproj
index e965709..fed40ab 100644
--- a/DM_Weight/DM_Weight.csproj
+++ b/DM_Weight/DM_Weight.csproj
@@ -74,6 +74,7 @@
+
diff --git a/DM_Weight/ViewModels/AdditionWindowViewModel.cs b/DM_Weight/ViewModels/AdditionWindowViewModel.cs
index ff5a2cb..6583fc0 100644
--- a/DM_Weight/ViewModels/AdditionWindowViewModel.cs
+++ b/DM_Weight/ViewModels/AdditionWindowViewModel.cs
@@ -116,11 +116,11 @@ namespace DM_Weight.ViewModels
channelList.channelStocks = new List();
}
channelList.channelStocks.AddRange(ChannelStocks.Where(cs => cs.DrawerNo == DrawerNoList[i]).ToList());
- if (channelList != null)
- {
- channelList.State = 1;//统一将所有的状态设置为已取药待入库
- channelLists.Add(channelList);
- }
+ //if (channelList != null)
+ //{
+ // channelList.State = 1;//统一将所有的状态设置为已取药待入库
+ channelLists.Add(channelList);
+ //}
}
_ChannelLists = channelLists;
}
@@ -149,7 +149,7 @@ namespace DM_Weight.ViewModels
selectedStock = _ChannelList.channelStocks.ToList();
if (selectedStock != null && selectedStock.Count > 0)
{
- selectedStock.ForEach(cs => cs.ChannelLst.State = 2);
+ //selectedStock.ForEach(cs => cs.ChannelLst.State = 2);
int drawerNo = -1;
for (int i = 0; i < selectedStock.Count; i++)
@@ -308,17 +308,22 @@ namespace DM_Weight.ViewModels
selectedStock.ForEach(cs =>
{
cs.Quantity = cs.Quantity + cs.AddToJJNum;
- cs.NeedNum = 0;
+ //cs.NeedNum = 0;
cs.AddToJJNum = 0;
+ //cs.State = 0;
});
SqlSugarHelper.Db.Updateable(selectedStock).ExecuteCommand();
// 更新交接柜状态为 已取药未入库
- SqlSugarHelper.Db.Updateable(new ChannelList()
- {
- State = 0
- }).UpdateColumns(it => it.State).Where(it => it.DrawerNo == _ChannelList.DrawerNo).ExecuteCommand();
+ //SqlSugarHelper.Db.Updateable(new ChannelList()
+ //{
+ // State = 0
+ //}).UpdateColumns(it => it.State).Where(it => it.DrawerNo == _ChannelList.DrawerNo).ExecuteCommand();
for (int i = 0; i < selectedStock.Count; i++)
{
+ int iUpdateResult = SqlSugarHelper.Db.Updateable()
+ .SetColumns(cs => new ChannelStock() { State = 0 })
+ .Where(cs => cs.DrawerNo == selectedStock[i].DrawerNo && cs.DrugId == selectedStock[i].DrugId && cs.MachineId == selectedStock[i].MachineId)
+ .ExecuteCommand();
string InvoiceId = "AddJiaoJieFromDM_" + CurrentTimeMillis();
// 保存记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
@@ -392,7 +397,7 @@ namespace DM_Weight.ViewModels
{
if (channelStock != null)
{
- if (channelStock.ChannelLst.State == 1)
+ if (channelStock.State == 1)
{
channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
}
diff --git a/DM_Weight/ViewModels/BindBoxPackageWindowViewModel.cs b/DM_Weight/ViewModels/BindBoxPackageWindowViewModel.cs
index 7724093..d51c756 100644
--- a/DM_Weight/ViewModels/BindBoxPackageWindowViewModel.cs
+++ b/DM_Weight/ViewModels/BindBoxPackageWindowViewModel.cs
@@ -316,6 +316,7 @@ namespace DM_Weight.ViewModels
MachineId = "DM5",
AddToJJNum = 0,
NeedNum = baseQuantity,
+ State=0
//ManuNo=DrugManuNo.ManuNo
}).ExecuteCommand();
// 保存数据 入库记录
diff --git a/DM_Weight/ViewModels/CheckSelfOrderWindowViewModel.cs b/DM_Weight/ViewModels/CheckSelfOrderWindowViewModel.cs
index ddf933e..a74b1bf 100644
--- a/DM_Weight/ViewModels/CheckSelfOrderWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckSelfOrderWindowViewModel.cs
@@ -1074,7 +1074,7 @@ namespace DM_Weight.ViewModels
{
AlertMsg alertMsg = new AlertMsg
{
- Message = $"处方{oi.OrderNo}应药品批次{oi._OrderDetail.SetManuNo}无库存,无法确认",
+ Message = $"处方{oi.OrderNo}因药品批次{oi._OrderDetail.SetManuNo}无库存,无法确认",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent().Publish(alertMsg);
diff --git a/DM_Weight/ViewModels/CheckStockWindowViewModel.cs b/DM_Weight/ViewModels/CheckStockWindowViewModel.cs
index 5618b24..01ed36b 100644
--- a/DM_Weight/ViewModels/CheckStockWindowViewModel.cs
+++ b/DM_Weight/ViewModels/CheckStockWindowViewModel.cs
@@ -182,14 +182,15 @@ namespace DM_Weight.ViewModels
EffDate = it.EffDate,
Id = it.Id,
NeedNum = 0,
- AddToJJNum = 0
+ AddToJJNum = 0,
+ State = 0,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate, it.NeedNum, it.AddToJJNum }).ExecuteCommand();
- SqlSugarHelper.Db.Updateable(new ChannelList()
- {
- State = 0,
- Id = it.Chnguid
- }).UpdateColumns(cl => new { cl.State }).ExecuteCommand();
+ //SqlSugarHelper.Db.Updateable(new ChannelList()
+ //{
+ // State = 0,
+ // Id = it.Chnguid
+ //}).UpdateColumns(cl => new { cl.State }).ExecuteCommand();
// 保存数据 盘点记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
diff --git a/DM_Weight/ViewModels/LoginWindowViewModel.cs b/DM_Weight/ViewModels/LoginWindowViewModel.cs
index fccd615..8b3ba4d 100644
--- a/DM_Weight/ViewModels/LoginWindowViewModel.cs
+++ b/DM_Weight/ViewModels/LoginWindowViewModel.cs
@@ -127,16 +127,16 @@ namespace DM_Weight.ViewModels
// _eventAggregator = eventAggregator;
//}
- public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, FingerprintUtil fingerprintUtil,SocketHelper socketHelper)
+ public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, FingerprintUtil fingerprintUtil, SocketHelper socketHelper)
{
_fingerprintUtil = fingerprintUtil;
_portUtil = portUtil;
//_chkFunction= chcFunction;
_regionManager = regionManager;
_eventAggregator = eventAggregator;
- _socketHelper= socketHelper;
+ _socketHelper = socketHelper;
FingerMsg = !_fingerprintUtil.bIsConnected;
- NetMsg=!_socketHelper.ConnectedStatus;
+ NetMsg = !_socketHelper.ConnectedStatus;
_eventAggregator.GetEvent().Subscribe(LoginEvent);
}
private DelegateCommand? _loginCommand;
@@ -277,7 +277,7 @@ _exitCommand ??= new DelegateCommand(Exit);
keys.Add("operator", user);
//System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
//{
- _regionManager.RequestNavigate("MainRegion", "HomeWindow", keys);
+ _regionManager.RequestNavigate("MainRegion", "HomeWindow", keys);
//}));
}
// 双人登录模式
@@ -377,6 +377,8 @@ _exitCommand ??= new DelegateCommand(Exit);
void Exit()
{
//_chkFunction.HIKLoginOut();
+ //清录屏进程
+ _eventAggregator.GetEvent().Publish(2);
_socketHelper.SocketDisConnect();
Process.GetCurrentProcess().Kill();
Environment.Exit(0);
@@ -465,6 +467,8 @@ _exitCommand ??= new DelegateCommand(Exit);
{
//FingerMsg = !_fingerprintUtil.bIsConnected;
//_eventAggregator.GetEvent().Subscribe(LoginEvent);
+ //结束录屏
+ _eventAggregator.GetEvent().Publish(0);
}
@@ -478,6 +482,10 @@ _exitCommand ??= new DelegateCommand(Exit);
public void OnNavigatedFrom(NavigationContext navigationContext)
{
_eventAggregator.GetEvent().Unsubscribe(LoginEvent);
+ #region 录屏
+ //登录进来后开始录屏
+ _eventAggregator.GetEvent().Publish(1);
+ #endregion
}
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
public string ReadAppSetting(string key)
diff --git a/DM_Weight/ViewModels/MainWindowViewModel.cs b/DM_Weight/ViewModels/MainWindowViewModel.cs
index ae79b7b..5c12129 100644
--- a/DM_Weight/ViewModels/MainWindowViewModel.cs
+++ b/DM_Weight/ViewModels/MainWindowViewModel.cs
@@ -1,30 +1,40 @@
-using MaterialDesignThemes.Wpf;
+using DM_Weight.Finger;
+using DM_Weight.HIKVISION;
+using DM_Weight.Models;
+using DM_Weight.msg;
+using DM_Weight.Port;
+using DM_Weight.util;
+using DM_Weight.Views;
+using log4net;
+using log4net.Repository.Hierarchy;
+using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
+using ScreenRecorderLib;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.Windows.Media;
-using DM_Weight.msg;
-using DM_Weight.Port;
-using DM_Weight.util;
-using DM_Weight.Finger;
-using DM_Weight.Views;
-using Unity;
-using DM_Weight.HIKVISION;
-using log4net.Repository.Hierarchy;
-using log4net;
-using DM_Weight.Models;
using System.Windows;
+using System.Windows.Media;
+using Unity;
namespace DM_Weight.ViewModels
{
internal class MainWindowViewModel : BindableBase
{
+
+ #region 录屏相关
+ public Recorder _recorder;
+ private string _outputFolder;
+ private string _outputFilePath;
+ public static MainWindowViewModel vm;
+ #endregion
+
private string _title = "Prism App"; //标题
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
@@ -74,9 +84,11 @@ namespace DM_Weight.ViewModels
private PortUtil _portUtil;
public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, SocketHelper socketHelper, PortUtil portUtil)
{
+ vm = this;
_portUtil = portUtil;
this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent().Subscribe(doMyPrismEvent2);
+ this.eventAggregator.GetEvent().Subscribe(PrintScreen);
_fingerprintUtil = fingerprintUtil;
_regionManager = regionManager;
_container = container;
@@ -146,6 +158,90 @@ namespace DM_Weight.ViewModels
SnackbarMessageQueue.Enqueue(msg.Message);
}));
}
+ #region 录屏
+ ///
+ /// 录屏事件
+ ///
+ /// 0停止录屏;1开始录屏;2退出软件清进程
+ void PrintScreen(int type)
+ {
+ if (type == 0)
+ {
+ StopPrintScreen();
+ //删除7天前的录屏文件
+ if (Directory.Exists(_outputFolder))
+ {
+ var files = Directory.GetFiles(_outputFolder);
+ foreach (var file in files)
+ {
+ var fileInfo = new FileInfo(file);
+ if (fileInfo.CreationTime < DateTime.Now.AddDays(-7))
+ {
+ try
+ {
+ fileInfo.Delete();
+ }
+ catch (Exception ex)
+ {
+ logger.Error($"删除录屏文件失败: {ex.Message}");
+ }
+ }
+ }
+ }
+ }
+ else if (type == 1)
+ {
+ StartPrintScreen();
+ }
+ else if (type == 2)
+ {
+ _recorder?.Dispose();
+ }
+ }
+ #endregion
+ void StopPrintScreen()
+ {
+
+ //退出登录结束录屏
+ _recorder?.Stop();
+ }
+ //录屏
+ void StartPrintScreen()
+ {
+
+ // 创建输出目录
+ _outputFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Log", "ScreenRecordings");
+ if (!Directory.Exists(_outputFolder))
+ {
+ Directory.CreateDirectory(_outputFolder);
+ }
+ // 生成输出文件名
+ string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
+ _outputFilePath = Path.Combine(_outputFolder, $"{timestamp}.mp4");
+
+ // 设置录制选项
+ var options = new RecorderOptions();
+
+ // 创建录制器实例
+ _recorder = Recorder.CreateRecorder(options);
+
+ // 设置事件处理
+ _recorder.OnRecordingComplete += Recorder_OnRecordingComplete;
+ _recorder.OnRecordingFailed += Recorder_OnRecordingFailed;
+
+ // 开始录制
+ _recorder.Record(_outputFilePath);
+ }
+ //录制失败
+ private void Recorder_OnRecordingFailed(object sender, RecordingFailedEventArgs e)
+ {
+ logger.Info($"录制失败: {e.Error}");
+ }
+ //录制完成
+ private void Recorder_OnRecordingComplete(object sender, RecordingCompleteEventArgs e)
+ {
+ logger.Info($"录制完成: {e.FilePath}");
+ }
}
}
diff --git a/DM_Weight/Views/AdditionWindow.xaml b/DM_Weight/Views/AdditionWindow.xaml
index 36da0f9..7e63f7e 100644
--- a/DM_Weight/Views/AdditionWindow.xaml
+++ b/DM_Weight/Views/AdditionWindow.xaml
@@ -240,9 +240,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DM_Weight/Views/MainWindow.xaml.cs b/DM_Weight/Views/MainWindow.xaml.cs
index b4157d4..d811dc4 100644
--- a/DM_Weight/Views/MainWindow.xaml.cs
+++ b/DM_Weight/Views/MainWindow.xaml.cs
@@ -1,4 +1,10 @@
-using Prism.Events;
+using DM_Weight.msg;
+using DM_Weight.Port;
+using DM_Weight.util;
+using DM_Weight.ViewModels;
+using log4net;
+using log4net.Repository.Hierarchy;
+using Prism.Events;
using Prism.Ioc;
using Prism.Regions;
using System;
@@ -16,11 +22,6 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Unity;
using Unity.Lifetime;
-using DM_Weight.msg;
-using DM_Weight.util;
-using log4net.Repository.Hierarchy;
-using DM_Weight.Port;
-using log4net;
namespace DM_Weight.Views
{
@@ -31,10 +32,12 @@ namespace DM_Weight.Views
{
//IRegionManager _regionManager;
//IUnityContainer _container;
+ MainWindowViewModel vms;
private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
public MainWindow()
{
InitializeComponent();
+ vms = MainWindowViewModel.vm;
//_regionManager = regionManager;
//_container = container;
//System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
@@ -46,6 +49,10 @@ namespace DM_Weight.Views
//}));
}
-
+ protected override void OnClosed(EventArgs e)
+ {
+ vms._recorder?.Dispose();
+ base.OnClosed(e);
+ }
}
}
diff --git a/DM_Weight/msg/PrintScreenEvent.cs b/DM_Weight/msg/PrintScreenEvent.cs
new file mode 100644
index 0000000..720e81c
--- /dev/null
+++ b/DM_Weight/msg/PrintScreenEvent.cs
@@ -0,0 +1,13 @@
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DM_Weight.msg
+{
+ internal class PrintScreenEvent : PubSubEvent
+ {
+ }
+}