From 991581280848b10c9c76ca47502194f99f8063da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E5=B7=A7?= <625215135@qq.com>
Date: Mon, 21 Jul 2025 15:24:38 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BD=95=E5=B1=8F=E6=96=B9?=
=?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DM_Weight/App.config | 4 +-
DM_Weight/App.xaml.cs | 2 +
DM_Weight/DM_Weight.csproj | 1 -
DM_Weight/Models/ChannelStock.cs | 2 +-
DM_Weight/Models/DrugInfo.cs | 4 +-
.../ViewModels/AddToJiaoJieDialogViewModel.cs | 200 ++++++++-------
.../AddToJiaoJieNewWindowViewModel.cs | 241 ++++++++++++++++++
.../ViewModels/AddToJiaoJieWindowViewModel.cs | 10 +-
DM_Weight/ViewModels/HomeWindowViewModel.cs | 2 +
DM_Weight/ViewModels/LoginWindowViewModel.cs | 5 +-
DM_Weight/ViewModels/MainWindowViewModel.cs | 147 ++++++-----
DM_Weight/Views/AddToJiaoJieNewWindow.xaml | 165 ++++++++++++
DM_Weight/Views/AddToJiaoJieNewWindow.xaml.cs | 28 ++
DM_Weight/Views/AddToJiaoJieWindow.xaml | 2 +-
.../Views/Dialog/AddToJiaoJieDialog.xaml | 88 ++++---
DM_Weight/Views/MainWindow.xaml.cs | 15 +-
DM_Weight/util/FFmpegHelper.cs | 79 ++++++
DM_Weight/util/OpenCVScreenRecord.cs | 13 +
18 files changed, 784 insertions(+), 224 deletions(-)
create mode 100644 DM_Weight/ViewModels/AddToJiaoJieNewWindowViewModel.cs
create mode 100644 DM_Weight/Views/AddToJiaoJieNewWindow.xaml
create mode 100644 DM_Weight/Views/AddToJiaoJieNewWindow.xaml.cs
create mode 100644 DM_Weight/util/FFmpegHelper.cs
create mode 100644 DM_Weight/util/OpenCVScreenRecord.cs
diff --git a/DM_Weight/App.config b/DM_Weight/App.config
index 68a8d03..73e426e 100644
--- a/DM_Weight/App.config
+++ b/DM_Weight/App.config
@@ -37,12 +37,12 @@
-
+
-
+
diff --git a/DM_Weight/App.xaml.cs b/DM_Weight/App.xaml.cs
index 0a23294..6ef46ef 100644
--- a/DM_Weight/App.xaml.cs
+++ b/DM_Weight/App.xaml.cs
@@ -266,6 +266,8 @@ namespace DM_Weight
containerRegistry.RegisterForNavigation();
//紧急开锁页面
containerRegistry.RegisterForNavigation();
+ //交接柜加药页面
+ containerRegistry.RegisterForNavigation();
}
diff --git a/DM_Weight/DM_Weight.csproj b/DM_Weight/DM_Weight.csproj
index b75f7e8..2b270b6 100644
--- a/DM_Weight/DM_Weight.csproj
+++ b/DM_Weight/DM_Weight.csproj
@@ -71,7 +71,6 @@
-
diff --git a/DM_Weight/Models/ChannelStock.cs b/DM_Weight/Models/ChannelStock.cs
index 2256fea..42093ea 100644
--- a/DM_Weight/Models/ChannelStock.cs
+++ b/DM_Weight/Models/ChannelStock.cs
@@ -112,7 +112,7 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)]
public string Location
{
- get => ColNo == 0 ? DrawerNo + "号交接柜" :ColNo==-1?"未绑定": ColNo == -2 ? "库存不足" : DrawerNo + "-" + ColNo;
+ get => ColNo == 0 ? DrawerNo + "号交接柜" :ColNo==-1?"未绑定/无库存": ColNo == -2 ? "库存不足" : DrawerNo + "-" + ColNo;
}
private int _addQuantity = 0;
diff --git a/DM_Weight/Models/DrugInfo.cs b/DM_Weight/Models/DrugInfo.cs
index 8506887..628ac9d 100644
--- a/DM_Weight/Models/DrugInfo.cs
+++ b/DM_Weight/Models/DrugInfo.cs
@@ -94,7 +94,9 @@ namespace DM_Weight.Models
set { SetProperty(ref _base, value); }
}
-
+ //交接柜补药弹窗对应的需补药数
+ [SugarColumn(IsIgnore = true)]
+ public int? NeedQuantity { get; set; }
}
}
diff --git a/DM_Weight/ViewModels/AddToJiaoJieDialogViewModel.cs b/DM_Weight/ViewModels/AddToJiaoJieDialogViewModel.cs
index 4754524..29e10f0 100644
--- a/DM_Weight/ViewModels/AddToJiaoJieDialogViewModel.cs
+++ b/DM_Weight/ViewModels/AddToJiaoJieDialogViewModel.cs
@@ -9,6 +9,7 @@ using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
+using SqlSugar;
using System;
using System.Collections.Generic;
using System.Configuration;
@@ -24,6 +25,13 @@ namespace DM_Weight.ViewModels
public class AddToJiaoJieDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
+ private List _drugInfoList = new List();
+
+ public List _DrugInfoList
+ {
+ get => _drugInfoList;
+ set => SetProperty(ref _drugInfoList, value);
+ }
private List _channelStocks = new List();
@@ -52,12 +60,12 @@ namespace DM_Weight.ViewModels
///
/// 交接柜的库位信息
///
- private ChannelStock _jiaojei_cs;
+ private ChannelStock _jiaojie_cs;
public ChannelStock Jiaojie_cs
{
- get => _jiaojei_cs;
- set => SetProperty(ref _jiaojei_cs, value);
+ get => _jiaojie_cs;
+ set => SetProperty(ref _jiaojie_cs, value);
}
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
@@ -209,12 +217,14 @@ namespace DM_Weight.ViewModels
}
public async void RequestData()
{
- List channelStocks = new List();
- List msg = new List();
+ //List channelStocks = new List();
+ List drugList = new List();
for (int i = 0; i < ChannelStocks.Count; i++)
{
+ DrugInfo drug = ChannelStocks[i].DrugInfo;
+ drug.NeedQuantity = ChannelStocks[i].AddQuantity;
List HasQChannels = SqlSugarHelper.Db.Queryable()
- .Includes(cs => cs.DrugInfo)
+ //.Includes(cs => cs.DrugInfo)
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
@@ -222,11 +232,6 @@ namespace DM_Weight.ViewModels
//.OrderBy(cs => cs.EffDate)
.OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo })
.ToList();
- //if (HasQChannels == null || HasQChannels.Count <= 0)
- //{
- // msg.Add($"有药品未绑定,请先绑定");
- // continue;
- //}
if (HasQChannels != null && HasQChannels.Count > 0)
{
int total = HasQChannels.Sum(it => it.Quantity);
@@ -234,37 +239,42 @@ namespace DM_Weight.ViewModels
// 说明数量足够
//if (total >= TakeQ)
//{
- //for (int j = 0; TakeQ > 0; j++)
- //{
- // ChannelStock stock = HasQChannels[j];
- // if (TakeQ > stock.Quantity)
- // {
- // stock.TakeQuantity = stock.Quantity;
- // channelStocks.Add(stock);
- // TakeQ -= stock.Quantity;
- // }
- // else
- // {
- // stock.TakeQuantity = TakeQ;
- // channelStocks.Add(stock);
- // TakeQ = 0;
- // }
- //}
- int hadTakeQ = 0;
- for (int j = 0; j < HasQChannels.Count; j++)
+ //for (int j = 0; TakeQ > 0; j++)
+ //{
+ // ChannelStock stock = HasQChannels[j];
+ // if (TakeQ > stock.Quantity)
+ // {
+ // stock.TakeQuantity = stock.Quantity;
+ // channelStocks.Add(stock);
+ // TakeQ -= stock.Quantity;
+ // }
+ // else
+ // {
+ // stock.TakeQuantity = TakeQ;
+ // channelStocks.Add(stock);
+ // TakeQ = 0;
+ // }
+ //}
+ int hadTakeQ = 0;
+ for (int j = 0; j < HasQChannels.Count; j++)
+ {
+ if ((ChannelStocks[i].AddQuantity - hadTakeQ) > HasQChannels[j].Quantity)
{
- if ((ChannelStocks[i].AddQuantity - hadTakeQ) > HasQChannels[j].Quantity)
- {
- HasQChannels[j].TakeQuantity = HasQChannels[j].Quantity;
- hadTakeQ += HasQChannels[j].Quantity;
- }
- else
- {
- HasQChannels[j].TakeQuantity = ChannelStocks[i].AddQuantity - hadTakeQ;
- break;
- }
+ HasQChannels[j].TakeQuantity = HasQChannels[j].Quantity;
+ hadTakeQ += HasQChannels[j].Quantity;
}
- channelStocks.AddRange(HasQChannels);
+ else
+ {
+ HasQChannels[j].TakeQuantity = ChannelStocks[i].AddQuantity - hadTakeQ;
+ break;
+ }
+ }
+
+ if (drug.channelStocks == null)
+ {
+ drug.channelStocks = new List();
+ }
+ drug.channelStocks.AddRange(HasQChannels);
//}
//else
//{
@@ -287,31 +297,13 @@ namespace DM_Weight.ViewModels
channel.ManuNo = null;
channel.EffDate = null;
channel.TakeQuantity = 0;
- channelStocks.Add(channel);
+ if (drug.channelStocks == null)
+ {
+ drug.channelStocks = new List();
+ }
+ drug.channelStocks.Add(channel);
}
- }
- if (msg.Count > 0)
- {
- RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
- //MessageBox.Show(string.Join("\n", msg));
- DialogParameters dialogParameters = new DialogParameters();
- dialogParameters.Add("msgInfo", msg);
- DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
-
- }
- else
- {
- //channelStocks.Sort((a, b) =>
- //{
- // if ((a.DrawerNo - b.DrawerNo) == 0)
- // {
- // return a.ColNo - b.ColNo;
- // }
- // return a.DrawerNo - b.DrawerNo;
- //});
- ChannelStocks = channelStocks;
-
-
+ _DrugInfoList.Add(drug);
}
}
public DelegateCommand OpenDrawer
@@ -323,7 +315,7 @@ namespace DM_Weight.ViewModels
if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
{
//查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
- bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 2).Any();
+ bool bDrawer = _DrugInfoList.Where(di => di.channelStocks.Select(it => it.DrawerNo).Where(n => n > 2).Any()).Count() > 0;
if (bDrawer)
{
AlertMsg alertMsg = new AlertMsg
@@ -336,7 +328,9 @@ namespace DM_Weight.ViewModels
}
}
- enumerable = ChannelStocks.Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
+ enumerable = _DrugInfoList.SelectMany(di => di.channelStocks).Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
+
+ // enumerable = ChannelStocks.Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
if (enumerable != null && enumerable.Count() > 0)
{
enumerator = enumerable.GetEnumerator();
@@ -410,12 +404,12 @@ namespace DM_Weight.ViewModels
_isFinishClick = true;
- List record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
+ List record = _DrugInfoList.SelectMany(di => di.channelStocks).Where(cs => cs.TakeQuantity > 0).ToList();
if (record.Count > 0)
{
//交接柜需要补药数量与加药数量对比,数量不一致则提示
- var jjSum = from item in Jiaojie_ChannelStocks orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.NeedNum) };
+ var jjSum = from item in Jiaojie_ChannelStocks orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.AddQuantity) };
var csSum = from item in record orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.TakeQuantity) };
foreach (var jjItem in jjSum)
@@ -476,14 +470,30 @@ namespace DM_Weight.ViewModels
for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
{
ChannelStock jiaoStock = Jiaojie_ChannelStocks[i];
- List csStockList = record.Where(cs => cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.TakeQuantity > 0).ToList();
+ List csStockList = record.Where(cs => cs.DrugId == jiaoStock.DrugId && cs.TakeQuantity > 0).ToList();
if (csStockList != null && csStockList.Count > 0)
{
- int jjNeedQuantity = SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId).Sum(cs => cs.NeedNum);
+ int jjNeedQuantity = jiaoStock.AddQuantity;// SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId).Sum(cs => (cs.BaseQuantity-cs.Quantity));
SqlSugarHelper.Db.Deleteable().Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId && cs.Quantity <= 0).ExecuteCommand();
for (int j = 0; j < csStockList.Count; j++)
{
+ // 保存数据 记录
+ SqlSugarHelper.Db.Insertable(new MachineRecord()
+ {
+ MachineId = jiaoStock.MachineId,
+ DrawerNo = jiaoStock.DrawerNo,
+ DrugId = jiaoStock.DrugId,
+ ManuNo = csStockList[i].ManuNo,
+ Operator = HomeWindowViewModel.Operator?.Id,
+ Reviewer = HomeWindowViewModel.Reviewer?.Id,
+ OperationTime = DateTime.Now,
+ Quantity = csStockList[i].TakeQuantity,
+ Type = 55,
+ Status = 2,//给交接柜补药不用还空瓶,等真正用了以后再还空瓶,所以先把状态置为2
+ InvoiceId = $"毒麻柜{csStockList[i].Location}给交接柜{jiaoStock.DrawerNo}补药"
+ }).ExecuteCommand();
+
ChannelStock csStock = (ChannelStock)csStockList[j].Clone();
ChannelStock jjStockManuNo = SqlSugarHelper.Db.Queryable()
.Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo && cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.ManuNo == csStock.ManuNo && cs.MachineId == "DM5").First();
@@ -491,9 +501,9 @@ namespace DM_Weight.ViewModels
if (jjStockManuNo != null)
{
int addNum = csStock.TakeQuantity;
- logger.Info($"需补药数{Jiaojie_ChannelStocks[i].NeedNum},该批次取药数{csStock.TakeQuantity}");
+ logger.Info($"需补药数{Jiaojie_ChannelStocks[i].AddQuantity},该批次取药数{csStock.TakeQuantity}");
//有该批次
- if (Jiaojie_ChannelStocks[i].NeedNum > csStock.TakeQuantity)
+ if (Jiaojie_ChannelStocks[i].AddQuantity > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
@@ -512,7 +522,7 @@ namespace DM_Weight.ViewModels
UpdateJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
csStockList[j].TakeQuantity = 0;
- Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
+ Jiaojie_ChannelStocks[i].AddQuantity = Jiaojie_ChannelStocks[i].AddQuantity - csStock.TakeQuantity;
}
else
{
@@ -530,7 +540,7 @@ namespace DM_Weight.ViewModels
newStock.EffDate = Jiaojie_ChannelStocks[i].EffDate;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
- newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
+ newStock.AddToJJNum = Jiaojie_ChannelStocks[i].AddQuantity;
newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId;
@@ -538,14 +548,14 @@ namespace DM_Weight.ViewModels
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
UpdateJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
- csStockList[j].TakeQuantity = csStock.TakeQuantity - Jiaojie_ChannelStocks[i].NeedNum;
- Jiaojie_ChannelStocks[i].NeedNum = 0;
+ csStockList[j].TakeQuantity = csStock.TakeQuantity - Jiaojie_ChannelStocks[i].AddQuantity;
+ Jiaojie_ChannelStocks[i].AddQuantity = 0;
break;
}
}
else //没有该批次
{
- if (Jiaojie_ChannelStocks[i].NeedNum > csStock.TakeQuantity)
+ if (Jiaojie_ChannelStocks[i].AddQuantity > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
@@ -559,10 +569,10 @@ namespace DM_Weight.ViewModels
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
- newStock.NeedNum = 0;
+ newStock.AddQuantity = 0;
newStock.State = 1;
AddJJStock.Add(newStock);
- Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
+ Jiaojie_ChannelStocks[i].AddQuantity = Jiaojie_ChannelStocks[i].AddQuantity - csStock.TakeQuantity;
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
csStockList[j].TakeQuantity = 0;
}
@@ -576,8 +586,8 @@ namespace DM_Weight.ViewModels
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.ManuNo = csStock.ManuNo;
newStock.EffDate = csStock.EffDate;
- newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
- newStock.NeedNum = 0;
+ newStock.AddToJJNum = Jiaojie_ChannelStocks[i].AddQuantity;
+ newStock.AddQuantity = 0;
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
@@ -589,18 +599,18 @@ namespace DM_Weight.ViewModels
}
}
}
- int addQuantity= AddJJStock.Where(aj => aj.DrugId == jiaoStock.DrugId).Sum(aj => aj.AddToJJNum);
- int updateQuantity = UpdateJJStock.Where(aj => aj.DrugId == jiaoStock.DrugId).Sum(aj => aj.AddToJJNum);
- int iUpdateResult= SqlSugarHelper.Db.Updateable()
- .SetColumns(cs => new ChannelStock() { NeedNum = 0,State=1 })
- .Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo && cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.MachineId == Jiaojie_ChannelStocks[i].MachineId)
- .ExecuteCommand();
- jiaoStock.NeedNum = jjNeedQuantity - (addQuantity + updateQuantity);
- int iUpdateResult2 = SqlSugarHelper.Db.Updateable(jiaoStock)
- .UpdateColumns(it => new { it.NeedNum })
- .ExecuteCommand();
+ //int addQuantity= AddJJStock.Where(aj => aj.DrugId == jiaoStock.DrugId).Sum(aj => aj.AddToJJNum);
+ //int updateQuantity = UpdateJJStock.Where(aj => aj.DrugId == jiaoStock.DrugId).Sum(aj => aj.AddToJJNum);
+ int iUpdateResult = SqlSugarHelper.Db.Updateable()
+ .SetColumns(cs => new ChannelStock() { State = 1 })
+ .Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo && cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.MachineId == Jiaojie_ChannelStocks[i].MachineId)
+ .ExecuteCommand();
+ //jiaoStock.NeedNum = jjNeedQuantity - (addQuantity + updateQuantity);
+ //int iUpdateResult2 = SqlSugarHelper.Db.Updateable(jiaoStock)
+ // .UpdateColumns(it => new { it.NeedNum })
+ // .ExecuteCommand();
}
-
+
}
//保存交接柜数据
@@ -611,7 +621,7 @@ namespace DM_Weight.ViewModels
{
var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
- ret.NeedNum = 0;
+ //ret.NeedNum = 0;
return ret;
}).ToList();
SqlSugarHelper.Db.Insertable(AddJJStock).ExecuteCommand();
@@ -623,7 +633,7 @@ namespace DM_Weight.ViewModels
{
var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
- ret.NeedNum = 0;
+ //ret.NeedNum = 0;
return ret;
}).ToList();
for (int i = 0; i < UpdateJJStock.Count; i++)
@@ -716,7 +726,7 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent().Publish(alertMsg);
}
Status = 0;
- _isFinishClick = false;
+ _isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
diff --git a/DM_Weight/ViewModels/AddToJiaoJieNewWindowViewModel.cs b/DM_Weight/ViewModels/AddToJiaoJieNewWindowViewModel.cs
new file mode 100644
index 0000000..bbadeaa
--- /dev/null
+++ b/DM_Weight/ViewModels/AddToJiaoJieNewWindowViewModel.cs
@@ -0,0 +1,241 @@
+using DM_Weight.Models;
+using DM_Weight.msg;
+using DM_Weight.Port;
+using DM_Weight.util;
+using log4net;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Mvvm;
+using Prism.Regions;
+using Prism.Services.Dialogs;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DM_Weight.ViewModels
+{
+ internal class AddToJiaoJieNewWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
+ {
+ private readonly ILog logger = LogManager.GetLogger(typeof(AddToJiaoJieWindowViewModel));
+ private static readonly DateTime Jan1st1970 = new DateTime
+ (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ public long CurrentTimeMillis()
+ {
+ return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
+ }
+ public bool KeepAlive => false;
+ public bool IsNavigationTarget(NavigationContext navigationContext)
+ {
+ return true;
+ }
+
+ public void OnNavigatedFrom(NavigationContext navigationContext)
+ {
+ // 取消消息订阅
+ //_eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent);
+ //_eventAggregator.GetEvent().Unsubscribe(SetIsSelected);
+ }
+
+
+ private List? channelStocks;
+ public List? ChannelStocks
+ {
+ get => channelStocks;
+ set => SetProperty(ref channelStocks, value);
+ }
+
+ private ChannelStock _channelStock;
+ public ChannelStock _ChannelStock
+ {
+ get => _channelStock;
+ set => SetProperty(ref _channelStock, value);
+ }
+
+ private List? _channelStocksList;
+ public List? _ChannelStocksList
+ {
+ get => _channelStocksList;
+ set => SetProperty(ref _channelStocksList, value);
+ }
+
+ private List? _channelLists;
+ public List? _ChannelLists
+ {
+ get => _channelLists;
+ set => SetProperty(ref _channelLists, value);
+ }
+ private ChannelList _channelList;
+ public ChannelList _ChannelList
+ {
+ get => _channelList;
+ set => SetProperty(ref _channelList, value);
+ }
+
+
+
+ public void OnNavigatedTo(NavigationContext navigationContext)
+ {
+ RequestData();
+ }
+ private PortUtil _portUtil;
+ IEventAggregator _eventAggregator;
+ IDialogService _dialogService;
+ public AddToJiaoJieNewWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
+ {
+ _portUtil = portUtil;
+ _eventAggregator = eventAggregator;
+ _dialogService = DialogService;
+ }
+ private void RequestData()
+ {
+
+ ChannelStocks?.Clear();
+ _ChannelLists?.Clear();
+ //1)查询channel_stock所有要补药的药箱
+ ChannelStocks = SqlSugarHelper.Db.Queryable()
+ .Includes(cs => cs.ChannelLst)
+ .Includes(cs => cs.DrugInfo)
+ .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5"))
+ .OrderBy(cs => cs.Chnguid)
+ .OrderBy(cs => cs.DrawerNo)
+ .ToList();
+ ChannelStocks = ChannelStocks.GroupBy(it => new { it.DrawerNo, it.DrugId })
+ .Select(it =>
+ {
+ var ret = it.First();
+ ret.Quantity = it.Sum(itx => itx.Quantity);
+ //ret.NeedNum = ret.BaseQuantity-it.Sum(itx => itx.Quantity);
+ return ret;
+ }).Where(it => it.BaseQuantity > it.Quantity)
+ .ToList();
+ if (ChannelStocks != null && ChannelStocks.Count > 0)
+ {
+ ChannelStocks.ForEach(cs => cs.AddQuantity =cs.BaseQuantity- cs.Quantity);
+
+ //2)查询channel_list将1)中查询的添加到channel_list的channel_stock里供页面呈现显示
+ List DrawerNoList = ChannelStocks.Select(cs => cs.DrawerNo).Distinct().ToList();
+ List channelLists = new List();
+ for (int i = 0; i < DrawerNoList.Count; i++)
+ {
+ var channelList = SqlSugarHelper.Db.Queryable()
+ .Where(cl => cl.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cl.DrawerNo == DrawerNoList[i])
+ .OrderBy(cl => cl.Id)
+ .OrderBy(cl => cl.DrawerNo)
+ .First();
+ if (channelList.channelStocks == null)
+ {
+ channelList.channelStocks = new List();
+ }
+ channelList.channelStocks.AddRange(ChannelStocks.Where(cs => cs.DrawerNo == DrawerNoList[i]).ToList());
+ if (channelList != null)
+ {
+ //if (channelList.channelStocks[0].AddToJJNum>0)
+ // channelList.State=1; //表示有补药
+ channelLists.Add(channelList);
+ }
+ }
+ _ChannelLists = channelLists;
+ }
+ else
+ {
+ _ChannelLists?.Clear();
+ _ChannelLists = new List();
+ }
+
+ }
+ private int _status = 0;
+
+ public int Status { get => _status; set => SetProperty(ref _status, value); }
+
+ private bool _isEnable = true;
+ public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); }
+
+ private List iDrawerNoLst
+ { get; set; }
+ private int CurrentNum { get; set; }
+
+ //刷新
+ public DelegateCommand QueryCommand
+ {
+ get => new DelegateCommand(() => RequestData());
+ }
+ public DelegateCommand RejectReport_Download
+ {
+ get => new DelegateCommand(() =>
+ {
+ //GridReportUtil.RejectionReport("");
+ });
+ }
+ public DelegateCommand Account_Download
+ {
+ get => new DelegateCommand(() =>
+ {
+ //GridReportUtil.AccountNewReport();
+ });
+ }
+
+
+ private List csList = new List();
+ //取药 弹出出药列表
+ public DelegateCommand TakeDrugCommand
+ {
+ get => new DelegateCommand(async () =>
+ {
+ csList = _ChannelList.channelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
+
+ if (csList != null && csList.Count > 0)
+ {
+ // 此处延时1毫秒,等待页面渲染
+ await Task.Delay(TimeSpan.FromMilliseconds(1));
+ DialogParameters dialogParameters = new DialogParameters();
+ dialogParameters.Add("_ChannelStock", csList);
+ DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
+
+ }
+ else
+ {
+ AlertMsg alertMsg = new AlertMsg
+ {
+ Message = $"未选择药品,请先点选药箱号",
+ Type = MsgType.ERROR,
+ };
+ _eventAggregator.GetEvent().Publish(alertMsg);
+ _portUtil.Operate = false;
+ }
+ });
+ }
+ private void DoDialogResult(IDialogResult dialogResult)
+ {
+ RequestData();
+ }
+
+ private DelegateCommand _rowSelected;
+
+ public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
+ public async void OpenOrderDialog()
+ {
+ if (_ChannelList != null && _ChannelList.channelStocks != null && _ChannelList.channelStocks.Any(cs => cs.State == 0))
+ {
+ // 此处延时1毫秒,等待页面渲染
+ await Task.Delay(TimeSpan.FromMilliseconds(1));
+ //选中药箱号下的所有药品id
+ DialogParameters dialogParameters = new DialogParameters();
+ dialogParameters.Add("_ChannelStock", _ChannelList.channelStocks.Where(cs => cs.State == 0).ToList());
+ DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
+
+ }
+ if (_ChannelList != null)
+ {
+ AlertMsg alertMsg = new AlertMsg
+ {
+ Message = $"药品已取出,待入库",
+ Type = MsgType.ERROR,
+ };
+ _eventAggregator.GetEvent().Publish(alertMsg);
+ }
+ }
+ }
+}
diff --git a/DM_Weight/ViewModels/AddToJiaoJieWindowViewModel.cs b/DM_Weight/ViewModels/AddToJiaoJieWindowViewModel.cs
index 54028c3..c5d8fb5 100644
--- a/DM_Weight/ViewModels/AddToJiaoJieWindowViewModel.cs
+++ b/DM_Weight/ViewModels/AddToJiaoJieWindowViewModel.cs
@@ -96,7 +96,7 @@ namespace DM_Weight.ViewModels
ChannelStocks = SqlSugarHelper.Db.Queryable()
.Includes(cs => cs.ChannelLst)
.Includes(cs => cs.DrugInfo)
- .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && (cs.NeedNum > 0 || cs.AddToJJNum > 0))
+ .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5"))
.OrderBy(cs => cs.Chnguid)
.OrderBy(cs => cs.DrawerNo)
.ToList();
@@ -105,16 +105,16 @@ namespace DM_Weight.ViewModels
{
var ret = it.First();
ret.Quantity = it.Sum(itx => itx.Quantity);
- ret.NeedNum = it.Sum(itx => itx.NeedNum);
+ //ret.NeedNum = it.Sum(itx => itx.NeedNum);
return ret;
}).Where(it => it.BaseQuantity > it.Quantity)
.ToList();
if (ChannelStocks != null && ChannelStocks.Count > 0)
{
- ChannelStocks.ForEach(cs => cs.AddQuantity = cs.NeedNum);
+ ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity-cs.Quantity);
//2)查询channel_list将1)中查询的添加到channel_list的channel_stock里供页面呈现显示
- List DrawerNoList = ChannelStocks.Select(cs => cs.DrawerNo).Distinct().ToList();
+ List DrawerNoList = ChannelStocks.Select(cs => cs.DrawerNo).Distinct().OrderBy(cs=>cs).ToList();
List channelLists = new List();
for (int i = 0; i < DrawerNoList.Count; i++)
{
@@ -127,7 +127,7 @@ namespace DM_Weight.ViewModels
{
channelList.channelStocks = new List();
}
- channelList.channelStocks.AddRange(ChannelStocks.Where(cs => cs.DrawerNo == DrawerNoList[i]&&(cs.NeedNum>0||cs.AddToJJNum>0)).ToList());
+ channelList.channelStocks.AddRange(ChannelStocks.Where(cs => cs.DrawerNo == DrawerNoList[i]).ToList());
if (channelList != null)
{
//if (channelList.channelStocks[0].AddToJJNum>0)
diff --git a/DM_Weight/ViewModels/HomeWindowViewModel.cs b/DM_Weight/ViewModels/HomeWindowViewModel.cs
index 7a6186a..322400a 100644
--- a/DM_Weight/ViewModels/HomeWindowViewModel.cs
+++ b/DM_Weight/ViewModels/HomeWindowViewModel.cs
@@ -349,6 +349,8 @@ namespace DM_Weight.ViewModels
IEventAggregator _eventAggregator;
public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator)
{
+
+ logger.Info("HomeWindowViewModel");
_portUtil = portUtil;
_regionManager = iRegionManager;
_dialogService = dialogService;
diff --git a/DM_Weight/ViewModels/LoginWindowViewModel.cs b/DM_Weight/ViewModels/LoginWindowViewModel.cs
index 889cc5c..93fcde1 100644
--- a/DM_Weight/ViewModels/LoginWindowViewModel.cs
+++ b/DM_Weight/ViewModels/LoginWindowViewModel.cs
@@ -14,7 +14,6 @@ using Prism.Events;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Regions;
-using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -471,6 +470,7 @@ _exitCommand ??= new DelegateCommand(Exit);
public void OnNavigatedTo(NavigationContext navigationContext)
{
FingerMsg = !_fingerprintUtil.bIsConnected;
+ logger.Info("OnNavigatedTo");
_eventAggregator.GetEvent().Subscribe(LoginEvent);
//结束录屏
_eventAggregator.GetEvent().Publish(0);
@@ -486,8 +486,9 @@ _exitCommand ??= new DelegateCommand(Exit);
//这个方法用于拦截请求
public void OnNavigatedFrom(NavigationContext navigationContext)
{
- _eventAggregator.GetEvent().Unsubscribe(LoginEvent);
+ _eventAggregator.GetEvent().Unsubscribe(LoginEvent);
+ logger.Info("OnNavigatedFrom");
#region 录屏
//登录进来后开始录屏
_eventAggregator.GetEvent().Publish(1);
diff --git a/DM_Weight/ViewModels/MainWindowViewModel.cs b/DM_Weight/ViewModels/MainWindowViewModel.cs
index 7a93d39..be4ff5d 100644
--- a/DM_Weight/ViewModels/MainWindowViewModel.cs
+++ b/DM_Weight/ViewModels/MainWindowViewModel.cs
@@ -11,7 +11,6 @@ using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
-using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.IO;
@@ -26,10 +25,10 @@ namespace DM_Weight.ViewModels
internal class MainWindowViewModel : BindableBase
{
#region 录屏相关
- public Recorder _recorder;
+ //public Recorder _recorder;
private string _outputFolder;
private string _outputFilePath;
- public static MainWindowViewModel vm;
+ //public static MainWindowViewModel vm;
#endregion
private readonly ILog logger = LogManager.GetLogger(typeof(MainWindowViewModel));
@@ -76,9 +75,10 @@ namespace DM_Weight.ViewModels
IRegionManager _regionManager;
IUnityContainer _container;
//private CHKFunction _cHKFunction;
- public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil)
+ FFmpegHelper fFmpegHelper;
+ public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil, FFmpegHelper fFmpegHelper)
{
- vm = this;
+ //vm = this;
//_portUtil = portUtil;
this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent().Subscribe(doMyPrismEvent2);
@@ -101,6 +101,7 @@ namespace DM_Weight.ViewModels
}
}));
+ this.fFmpegHelper = fFmpegHelper;
}
void doMyPrismEvent2(AlertMsg msg)
@@ -127,83 +128,97 @@ namespace DM_Weight.ViewModels
/// 0停止录屏;1开始录屏;2退出软件清进程
void PrintScreen(int type)
{
- if(type==0)
+ logger.Info($"录屏事件PrintScreen{type}");
+ if (type == 0)
{
- StopPrintScreen();
- //删除7天前的录屏文件
+ fFmpegHelper.stopFlag = true;
+ fFmpegHelper.StopRecording();
+ //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}");
- }
- }
- }
- }
+ //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.Info($"删除录屏文件失败: {ex.Message}");
+ // }
+ // }
+ // }
+ //}
}
else if (type == 1)
{
- StartPrintScreen();
+ fFmpegHelper.stopFlag = false;
+ // 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}.webm");
+ fFmpegHelper.StartRecording(_outputFilePath, 25);
}
else if (type == 2)
{
- _recorder?.Dispose();
+ // _recorder?.Dispose();
}
}
#endregion
- void StopPrintScreen()
- {
+ //void StopPrintScreen()
+ //{
- //退出登录结束录屏
- _recorder?.Stop();
- }
- //录屏
- void StartPrintScreen()
- {
+ // //退出登录结束录屏
+ // _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");
+ // // 创建输出目录
+ // _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();
+ // // 设置录制选项
+ // var options = new RecorderOptions();
- // 创建录制器实例
- _recorder = Recorder.CreateRecorder(options);
+ // // 创建录制器实例
+ // _recorder = Recorder.CreateRecorder(options);
- // 设置事件处理
- _recorder.OnRecordingComplete += Recorder_OnRecordingComplete;
- _recorder.OnRecordingFailed += Recorder_OnRecordingFailed;
+ // // 设置事件处理
+ // _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}");
- }
+ // // 开始录制
+ // _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/AddToJiaoJieNewWindow.xaml b/DM_Weight/Views/AddToJiaoJieNewWindow.xaml
new file mode 100644
index 0000000..e46699b
--- /dev/null
+++ b/DM_Weight/Views/AddToJiaoJieNewWindow.xaml
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DM_Weight/Views/AddToJiaoJieNewWindow.xaml.cs b/DM_Weight/Views/AddToJiaoJieNewWindow.xaml.cs
new file mode 100644
index 0000000..fa1c780
--- /dev/null
+++ b/DM_Weight/Views/AddToJiaoJieNewWindow.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace DM_Weight.Views
+{
+ ///
+ /// AddToJiaoJieNewWindow.xaml 的交互逻辑
+ ///
+ public partial class AddToJiaoJieNewWindow : UserControl
+ {
+ public AddToJiaoJieNewWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/DM_Weight/Views/AddToJiaoJieWindow.xaml b/DM_Weight/Views/AddToJiaoJieWindow.xaml
index de40c9f..4735490 100644
--- a/DM_Weight/Views/AddToJiaoJieWindow.xaml
+++ b/DM_Weight/Views/AddToJiaoJieWindow.xaml
@@ -259,7 +259,7 @@
-
+
diff --git a/DM_Weight/Views/Dialog/AddToJiaoJieDialog.xaml b/DM_Weight/Views/Dialog/AddToJiaoJieDialog.xaml
index 07085b6..c381b4e 100644
--- a/DM_Weight/Views/Dialog/AddToJiaoJieDialog.xaml
+++ b/DM_Weight/Views/Dialog/AddToJiaoJieDialog.xaml
@@ -37,7 +37,7 @@
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ IsReadOnly="True">
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/DM_Weight/Views/MainWindow.xaml.cs b/DM_Weight/Views/MainWindow.xaml.cs
index 057a3dd..fc97971 100644
--- a/DM_Weight/Views/MainWindow.xaml.cs
+++ b/DM_Weight/Views/MainWindow.xaml.cs
@@ -4,7 +4,6 @@ using DM_Weight.ViewModels;
using Prism.Events;
using Prism.Ioc;
using Prism.Regions;
-using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -30,11 +29,11 @@ namespace DM_Weight.Views
{
//IRegionManager _regionManager;
//IUnityContainer _container;
- MainWindowViewModel vms;
+ //MainWindowViewModel vms;
public MainWindow()
{
InitializeComponent();
- vms = MainWindowViewModel.vm;
+ //vms = MainWindowViewModel.vm;
//_regionManager = regionManager;
//_container = container;
//System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
@@ -46,11 +45,11 @@ namespace DM_Weight.Views
//}));
}
- protected override void OnClosed(EventArgs e)
- {
- vms._recorder?.Dispose();
- base.OnClosed(e);
- }
+ //protected override void OnClosed(EventArgs e)
+ //{
+ // vms._recorder?.Dispose();
+ // base.OnClosed(e);
+ //}
}
}
diff --git a/DM_Weight/util/FFmpegHelper.cs b/DM_Weight/util/FFmpegHelper.cs
new file mode 100644
index 0000000..6c84f38
--- /dev/null
+++ b/DM_Weight/util/FFmpegHelper.cs
@@ -0,0 +1,79 @@
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace DM_Weight.util
+{
+ public class FFmpegHelper
+ {
+ private Process _ffmpegProcess;
+ private string _ffmpegPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ffmpeg.exe");
+ //是否停止录屏标志
+ public bool stopFlag = false;
+
+ public void StartRecording(string outputPath, int frameRate = 30)
+ {
+ //int width = (int)SystemParameters.PrimaryScreenWidth;
+ //int height =(int)SystemParameters.PrimaryScreenHeight;
+ int segmentDuration = 1800; // 每段半小时
+ string args = $"-f gdigrab -framerate {frameRate} " +
+ $"-i desktop -preset ultrafast -t {segmentDuration} {outputPath}";
+
+ _ffmpegProcess = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = _ffmpegPath,
+ Arguments = args,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ RedirectStandardInput = true
+ }
+ };
+ _ffmpegProcess.Start();
+ ThreadPool.QueueUserWorkItem(CheckFFmpegProcess); // 检查FFmpeg进程是否完成,以开始下一个录制段
+ }
+ public void StopRecording()
+ {
+ _ffmpegProcess?.StandardInput.WriteLine("q");
+ _ffmpegProcess?.WaitForExit(1000);
+ _ffmpegProcess?.Close();
+ stopFlag = true;
+ }
+ private void CheckFFmpegProcess(object state)
+ {
+ try
+ {
+
+ if (!stopFlag)
+ {
+ _ffmpegProcess.WaitForExit(); // 等待FFmpeg进程结束
+ if (!_ffmpegProcess.HasExited) return; // 如果进程未结束,则不继续
+ // 开始下一个录制段,如果需要循环录制,可以取消注释下面的代码行并适当调整逻辑
+ // StartRecording(); // 注意:这将无限循环录制,可能需要用户界面干预来停止或重置计数器。
+ string _outputFolder;
+ string _outputFilePath;
+ _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}.webm");
+ StartRecording(_outputFilePath, 25);
+ }
+ }
+ catch (Exception)
+ {
+ }
+ }
+ }
+}
diff --git a/DM_Weight/util/OpenCVScreenRecord.cs b/DM_Weight/util/OpenCVScreenRecord.cs
new file mode 100644
index 0000000..56d518a
--- /dev/null
+++ b/DM_Weight/util/OpenCVScreenRecord.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DM_Weight.util
+{
+ public class OpenCVScreenRecord
+ {
+
+ }
+}