添加录屏功能,添加可多次加药,毒麻柜无药则显示无库存或未绑定,对应的药品先不补

This commit is contained in:
马巧 2025-07-10 11:52:24 +08:00
parent 02c626d829
commit 3e34ffe912
31 changed files with 447 additions and 707 deletions

View File

@ -3,7 +3,7 @@
<connectionStrings> <connectionStrings>
<!-- 数据库连接字符串 --> <!-- 数据库连接字符串 -->
<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />--> <!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
<add name="database" connectionString="server=127.0.0.1;port=3306;database=xiangtan_mazuike_xx;userid=root;password=root" /> <add name="database" connectionString="server=192.168.50.84;port=3306;database=xiangtanTest;userid=root;password=root" />
</connectionStrings> </connectionStrings>
<!--<runtime> <!--<runtime>
--><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!-- --><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
@ -37,7 +37,7 @@
<!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow--> <!-- 按处方还药或者按取药记录还药 1:处方ReturnDrugWindow22药品ReturnDrugWindow-->
<add key="returnDrugMode" value="1" /> <add key="returnDrugMode" value="1" />
<!-- 自动退出时间单位秒为0时不自动退出 --> <!-- 自动退出时间单位秒为0时不自动退出 -->
<add key="autoExit" value="0"/> <add key="autoExit" value="10"/>
<!-- 无操作退出录像时间单位秒为0时不退出录像 --> <!-- 无操作退出录像时间单位秒为0时不退出录像 -->
<add key="stopRecord" value="180"/> <add key="stopRecord" value="180"/>
@ -54,9 +54,9 @@
<!-- 抽屉串口使用的协议232或者485 --> <!-- 抽屉串口使用的协议232或者485 -->
<add key="DrawerProtocol" value="485" /> <add key="DrawerProtocol" value="485" />
<!-- 抽屉串口的串口号 --> <!-- 抽屉串口的串口号 -->
<add key="DrawerPortPath" value="COM1" /> <add key="DrawerPortPath" value="COM2" />
<!-- can总线串口的串口号 --> <!-- can总线串口的串口号 -->
<add key="CanBusPortPath" value="COM31" /> <add key="CanBusPortPath" value="COM5" />
<!-- 条码枪串口的串口号 --> <!-- 条码枪串口的串口号 -->
<add key="ScanCodePortPath" value="COM7" /> <add key="ScanCodePortPath" value="COM7" />
@ -99,7 +99,7 @@
<!-- 指纹机号码 --> <!-- 指纹机号码 -->
<add key="machineNumber" value="1"/> <add key="machineNumber" value="1"/>
<!-- 指纹机ip --> <!-- 指纹机ip -->
<add key="fingerIp" value="192.168.50.201"/> <add key="fingerIp" value="192.168.50.59"/>
<!-- 多处方取药 0:不启用 1启用--> <!-- 多处方取药 0:不启用 1启用-->
<add key="MultiOrder" value="1"/> <add key="MultiOrder" value="1"/>

View File

@ -13,27 +13,30 @@ namespace DM_Weight.Converter
//是否给交接柜补药已补药的则不可勾选未补药的可勾选以进行补药0未补1已补 //是否给交接柜补药已补药的则不可勾选未补药的可勾选以进行补药0未补1已补
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{ {
int status = int.Parse(value.ToString()); if (value != null)
if (parameter.ToString() == "EnableState")
{ {
if (status == 0) int status = int.Parse(value.ToString());
if (parameter.ToString() == "EnableState")
{ {
return true; if (status == 0)
{
return true;
}
else
{
return false;
}
} }
else if (parameter.ToString() == "TextState")
{ {
return false; if (status == 0)
} {
} return "未取药";
if (parameter.ToString() == "TextState") }
{ else
if (status == 0) {
{ return "已取药待入库";
return "未取药"; }
}
else
{
return "已取药待入库";
} }
} }
return ""; return "";

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace DM_Weight.Converter
{
internal class TakeQuantityEnabelConverter : IValueConverter
{
//-1未绑定
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value == -1 ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace DM_Weight.Converter
{
internal class TakeQuantityVisiable: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)(value) <0 ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -71,6 +71,7 @@
<PackageReference Include="MaterialDesignThemes" Version="4.8.0" /> <PackageReference Include="MaterialDesignThemes" Version="4.8.0" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" /> <PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
<PackageReference Include="Prism.Unity" Version="8.1.97" /> <PackageReference Include="Prism.Unity" Version="8.1.97" />
<PackageReference Include="ScreenRecorderLib" Version="6.5.1" />
<PackageReference Include="SharpPromise" Version="1.7.0" /> <PackageReference Include="SharpPromise" Version="1.7.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.67" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.67" />
<PackageReference Include="SuperSimpleTcp" Version="3.0.10" /> <PackageReference Include="SuperSimpleTcp" Version="3.0.10" />

View File

@ -112,7 +112,7 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)] [SugarColumn(IsIgnore = true)]
public string Location public string Location
{ {
get => ColNo == 0 ? DrawerNo + "号交接柜" :ColNo==-1?"未绑定": DrawerNo + "-" + ColNo; get => ColNo == 0 ? DrawerNo + "号交接柜" :ColNo==-1?"未绑定": ColNo == -2 ? "库存不足" : DrawerNo + "-" + ColNo;
} }
private int _addQuantity = 0; private int _addQuantity = 0;

View File

@ -87,6 +87,9 @@ namespace DM_Weight.Port
// 是否正在操作中 // 是否正在操作中
public bool Operate { get; set; } public bool Operate { get; set; }
// 操作完抽屉是否点完成按钮
public bool OperateFinish { get; set; } = true;
//冰箱是否正在操作中 //冰箱是否正在操作中
public bool FridgeOperate { get; set; } public bool FridgeOperate { get; set; }
@ -197,7 +200,7 @@ namespace DM_Weight.Port
if (state) if (state)
{ {
//抽屉全部关闭 //抽屉全部关闭
OperateFinish = false;
string _WindowName = WindowName; string _WindowName = WindowName;
// 重新初始化数据 // 重新初始化数据
ResetData(); ResetData();
@ -550,7 +553,8 @@ namespace DM_Weight.Port
} }
string _WindowName = WindowName; string _WindowName = WindowName;
// 重新初始化数据 // 重新初始化数据
ResetData(); ResetData();
OperateFinish = false;
// 返回消息 抽屉已经关闭 // 返回消息 抽屉已经关闭
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg() _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
{ {
@ -656,6 +660,7 @@ namespace DM_Weight.Port
statue = 2; statue = 2;
string _WindowName = WindowName; string _WindowName = WindowName;
OperateFinish = false;
// 重新初始化数据 // 重新初始化数据
ResetData(); ResetData();
_eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg() _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()

View File

@ -222,53 +222,73 @@ namespace DM_Weight.ViewModels
//.OrderBy(cs => cs.EffDate) //.OrderBy(cs => cs.EffDate)
.OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo }) .OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo })
.ToList(); .ToList();
if (HasQChannels == null || HasQChannels.Count <= 0) //if (HasQChannels == null || HasQChannels.Count <= 0)
//{
// msg.Add($"有药品未绑定,请先绑定");
// continue;
//}
if (HasQChannels != null && HasQChannels.Count > 0)
{ {
msg.Add($"有药品未绑定,请先绑定"); int total = HasQChannels.Sum(it => it.Quantity);
continue; int TakeQ = ChannelStocks[i].AddQuantity;
} // 说明数量足够
int total = HasQChannels.Sum(it => it.Quantity); //if (total >= TakeQ)
int TakeQ = ChannelStocks[i].AddQuantity;
// 说明数量足够
if (total >= TakeQ)
{
//for (int j = 0; TakeQ > 0; j++)
//{ //{
// ChannelStock stock = HasQChannels[j]; //for (int j = 0; TakeQ > 0; j++)
// if (TakeQ > stock.Quantity) //{
// { // ChannelStock stock = HasQChannels[j];
// stock.TakeQuantity = stock.Quantity; // if (TakeQ > stock.Quantity)
// channelStocks.Add(stock); // {
// TakeQ -= stock.Quantity; // stock.TakeQuantity = stock.Quantity;
// } // channelStocks.Add(stock);
// else // TakeQ -= stock.Quantity;
// { // }
// stock.TakeQuantity = TakeQ; // else
// channelStocks.Add(stock); // {
// TakeQ = 0; // 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)
{
HasQChannels[j].TakeQuantity = HasQChannels[j].Quantity;
hadTakeQ += HasQChannels[j].Quantity;
}
else
{
HasQChannels[j].TakeQuantity = ChannelStocks[i].AddQuantity - hadTakeQ;
break;
}
}
channelStocks.AddRange(HasQChannels);
//}
//else
//{
// //msg.Add($"药品【{HasQChannels[0].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
// ChannelStock channel = ChannelStocks[i];
// channel.ColNo = -2;
// channel.Quantity = 0;
// channel.ManuNo = null;
// channel.EffDate = null;
// channel.Quantity = total;
// channel.TakeQuantity = 0;
// channelStocks.Add(channel);
//} //}
int hadTakeQ = 0;
for (int j = 0; j < HasQChannels.Count; j++)
{
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;
}
}
channelStocks.AddRange(HasQChannels);
} }
else else
{ {
msg.Add($"药品【{HasQChannels[0].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】"); ChannelStock channel = ChannelStocks[i];
channel.ColNo = -1;
channel.Quantity = 0;
channel.ManuNo = null;
channel.EffDate = null;
channel.TakeQuantity = 0;
channelStocks.Add(channel);
} }
} }
if (msg.Count > 0) if (msg.Count > 0)
{ {
@ -317,10 +337,23 @@ namespace DM_Weight.ViewModels
} }
enumerable = 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);
enumerator = enumerable.GetEnumerator(); if (enumerable != null && enumerable.Count() > 0)
enumerator.MoveNext(); {
Status = 1; enumerator = enumerable.GetEnumerator();
OpenOneByOne(); enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有可补药品!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
} }
}); });
@ -329,38 +362,41 @@ namespace DM_Weight.ViewModels
private void OpenOneByOne() private void OpenOneByOne()
{ {
IGrouping<int, ChannelStock> grouping = enumerator.Current; IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key; if (grouping != null)
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
singleChannels.ForEach(it =>
{ {
try int DrawerNo = grouping.Key;
{ List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
} List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
catch (Exception ex)
// 发送取药数量
singleChannels.ForEach(it =>
{ {
AlertMsg alertMsg = new AlertMsg try
{ {
Message = $"打开抽屉异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
_portUtil.WindowName = "OrderTakeDrugWindow"; _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1; }
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray(); catch (Exception ex)
_portUtil.DrawerNo = DrawerNo; {
_portUtil.Start(); AlertMsg alertMsg = new AlertMsg
{
Message = $"打开抽屉异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
_portUtil.WindowName = "OrderTakeDrugWindow";
_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
_portUtil.DrawerNo = DrawerNo;
_portUtil.Start();
}
} }
private bool _isFinishClick = false; private bool _isFinishClick = false;
@ -388,10 +424,11 @@ namespace DM_Weight.ViewModels
{ {
if (jjItem.DrugId == csItem.DrugId) if (jjItem.DrugId == csItem.DrugId)
{ {
if (jjItem.Quantity != csItem.Quantity) if (jjItem.Quantity < csItem.Quantity)
{ {
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!"); //SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!");
SnackbarMessageQueue.Enqueue("输入药品数量大于需要补药数!");
_isFinishClick = false; _isFinishClick = false;
return; return;
} }
@ -439,10 +476,12 @@ namespace DM_Weight.ViewModels
for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++) for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
{ {
ChannelStock jiaoStock = Jiaojie_ChannelStocks[i]; ChannelStock jiaoStock = Jiaojie_ChannelStocks[i];
SqlSugarHelper.Db.Deleteable<ChannelStock>().Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo && cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.MachineId == Jiaojie_ChannelStocks[i].MachineId && cs.Quantity <= 0).ExecuteCommand();
List<ChannelStock> csStockList = record.Where(cs => cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.TakeQuantity > 0).ToList(); List<ChannelStock> csStockList = record.Where(cs => cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.TakeQuantity > 0).ToList();
if (csStockList != null && csStockList.Count > 0) if (csStockList != null && csStockList.Count > 0)
{ {
int jjNeedQuantity = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId).Sum(cs => cs.NeedNum);
SqlSugarHelper.Db.Deleteable<ChannelStock>().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++) for (int j = 0; j < csStockList.Count; j++)
{ {
ChannelStock csStock = (ChannelStock)csStockList[j].Clone(); ChannelStock csStock = (ChannelStock)csStockList[j].Clone();
@ -466,6 +505,7 @@ namespace DM_Weight.ViewModels
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId; newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = addNum; newStock.AddToJJNum = addNum;
newStock.Id = jjStockManuNo.Id; newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId; //newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0; //newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity; //newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
@ -492,6 +532,7 @@ namespace DM_Weight.ViewModels
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId; newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum; newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
newStock.Id = jjStockManuNo.Id; newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId; //newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0; //newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity; //newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
@ -519,6 +560,7 @@ namespace DM_Weight.ViewModels
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId; newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1; newStock.DrawerType = 1;
newStock.NeedNum = 0; newStock.NeedNum = 0;
newStock.State = 1;
AddJJStock.Add(newStock); AddJJStock.Add(newStock);
Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity; Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity; csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
@ -539,6 +581,7 @@ namespace DM_Weight.ViewModels
newStock.Id = Guid.NewGuid().ToString(); newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId; newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1; newStock.DrawerType = 1;
newStock.State = 1;
AddJJStock.Add(newStock); AddJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity; csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
csStockList[j].TakeQuantity = csStock.TakeQuantity - newStock.AddToJJNum; csStockList[j].TakeQuantity = csStock.TakeQuantity - newStock.AddToJJNum;
@ -546,11 +589,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<ChannelStock>()
.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();
} }
SqlSugarHelper.Db.Updateable<ChannelStock>()
.SetColumns(cs => new ChannelStock() { NeedNum = 0 })
.Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo)
.ExecuteCommand();
} }
//保存交接柜数据 //保存交接柜数据
@ -561,6 +611,7 @@ namespace DM_Weight.ViewModels
{ {
var ret = jj.First(); var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum); ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
ret.NeedNum = 0;
return ret; return ret;
}).ToList(); }).ToList();
SqlSugarHelper.Db.Insertable(AddJJStock).ExecuteCommand(); SqlSugarHelper.Db.Insertable(AddJJStock).ExecuteCommand();
@ -572,11 +623,12 @@ namespace DM_Weight.ViewModels
{ {
var ret = jj.First(); var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum); ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
ret.NeedNum = 0;
return ret; return ret;
}).ToList(); }).ToList();
for (int i = 0; i < UpdateJJStock.Count; i++) for (int i = 0; i < UpdateJJStock.Count; i++)
{ {
SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(cs => new ChannelStock() { AddToJJNum = UpdateJJStock[i].AddToJJNum }).Where(cs => cs.Id == UpdateJJStock[i].Id).ExecuteCommand(); SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(cs => new ChannelStock() { AddToJJNum = UpdateJJStock[i].AddToJJNum, State = 1 }).Where(cs => cs.Id == UpdateJJStock[i].Id).ExecuteCommand();
} }
} }
@ -606,21 +658,21 @@ namespace DM_Weight.ViewModels
} }
} }
//更新交接柜状态为 已取药未入库(等在交接柜入库后再更新交接柜库存) //更新交接柜状态为 已取药未入库(等在交接柜入库后再更新交接柜库存)
if (Jiaojie_ChannelStocks != null) //if (Jiaojie_ChannelStocks != null)
{ //{
Jiaojie_ChannelStocks.ForEach(jj => // Jiaojie_ChannelStocks.ForEach(jj =>
{ // {
//更新交接柜状态为 已取药未入库 // //更新交接柜状态为 已取药未入库
SqlSugarHelper.Db.Updateable(new ChannelList() // SqlSugarHelper.Db.Updateable(new ChannelList()
{ // {
State = 1, // State = 1,
Id = jj.ChannelLst.Id // Id = jj.ChannelLst.Id
}).UpdateColumns(it => it.State).ExecuteCommand(); // }).UpdateColumns(it => it.State).ExecuteCommand();
} // }
); // );
} //}
return true; return true;
}); });
if (f.Data) if (f.Data)
@ -664,7 +716,8 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg); _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} }
@ -696,6 +749,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }
//检查是否是冰箱抽屉(冰箱抽屉打开时需要发送冰箱延迟报警的指令) //检查是否是冰箱抽屉(冰箱抽屉打开时需要发送冰箱延迟报警的指令)

View File

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.ViewModels
{
public class AddToJiaoJieNewDialogViewModel
{
}
}

View File

@ -90,35 +90,6 @@ namespace DM_Weight.ViewModels
} }
private void RequestData() private void RequestData()
{ {
//ChannelStocks = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Includes<ChannelList>(cs => cs.ChannelLst)
// .Includes<DrugInfo>(cs => cs.DrugInfo)
// .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cs.BaseQuantity > cs.Quantity)
// .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=it.Sum(itx => itx.NeedNum);
//// return ret;
//// }).Where(it=>it.BaseQuantity>it.Quantity)
//// .ToList();
//ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity - cs.Quantity);
//ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
//vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
//_ChannelLists = SqlSugarHelper.Db.Queryable<ChannelList>()
// .Includes<ChannelStock>(cl => cl.channelStocks)
// .Includes<DrugInfo>(cl => cl.Drug)
// .InnerJoin<ChannelStock>((cl, cs) => cl.Id == cs.Chnguid && cs.BaseQuantity > cs.Quantity)
// .Where(cl => cl.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5"))
// .OrderBy(cl => cl.Id)
// .OrderBy(cl => cl.DrawerNo)
// .ToList();
ChannelStocks?.Clear(); ChannelStocks?.Clear();
_ChannelLists?.Clear(); _ChannelLists?.Clear();
//1)查询channel_stock所有要补药的药箱 //1)查询channel_stock所有要补药的药箱
@ -159,8 +130,8 @@ namespace DM_Weight.ViewModels
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]&&(cs.NeedNum>0||cs.AddToJJNum>0)).ToList());
if (channelList != null) if (channelList != null)
{ {
if (channelList.channelStocks[0].AddToJJNum>0) //if (channelList.channelStocks[0].AddToJJNum>0)
channelList.State=1; //表示有补药 // channelList.State=1; //表示有补药
channelLists.Add(channelList); channelLists.Add(channelList);
} }
} }
@ -189,307 +160,6 @@ namespace DM_Weight.ViewModels
{ {
get => new DelegateCommand(() => RequestData()); get => new DelegateCommand(() => RequestData());
} }
//一键补药
//public DelegateCommand OpenDragCommand
//{
// get => new DelegateCommand(() =>
// {
// try
// {
// Status = 1;
// IsEnable = false;
// var varDrawerNO = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
// .GroupBy(cs => cs.DrawerNo).Select(DrawerNo => DrawerNo).ToList();
// iDrawerNoLst = varDrawerNO.Select(item => item.DrawerNo).ToList();
// CurrentNum = 0;
// _portUtil.SpeakAsync($"正在打开 {iDrawerNoLst[CurrentNum]} 号抽屉");
// _portUtil.WindowName = "AddToJiaoJieWindow";
// _portUtil.Operate = true;
// //_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
// //_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
// _portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
// _portUtil.OpenAllDrawer();
// }
// catch (Exception ex)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = $"补药异常{ex.Message}",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// logger.Info($"AddToJiaoJieWindowViewModel异常{ex.Message}");
// _portUtil.Operate = false;
// }
// });
//}
//void DoMyPrismEvent(DeviceMsg msg)
//{
// if (msg.WindowName == "AddToJiaoJieWindow")
// {
// switch (msg.EventType)
// {
// // 抽屉打开
// case EventType.DRAWEROPEN:
// if (Status == 1)
// {
// Status = 2;
// }
// CurrentNum += 1;
// if (CurrentNum < iDrawerNoLst.Count)
// {
// _portUtil.WindowName = "AddToJiaoJieWindow";
// _portUtil.Operate = true;
// _portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
// _portUtil.OpenAllDrawer();
// }
// else
// {
// _portUtil.GetAllDrawerLockState();
// }
// break;
// // 抽屉关闭
// case EventType.DRAWERCLOSE:
// if (Status == 2)
// {
// Status = 3;
// }
// _portUtil.Operate = false;
// IsEnable = true;
// CurrentNum = 0;
// break;
// // 数量变化
// case EventType.UPDATEQUANTITY:
// if (Status == 2)
// {
// ChannelStocks.ForEach(it => it.AddQuantity = msg.Quantitys[it.ColNo - 1]);
// }
// break;
// // 打开失败
// case EventType.OPENERROR:
// AlertMsg alertMsg = new AlertMsg
// {
// Message = msg.Message,
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// Status = 0;
// _portUtil.Operate = false;
// IsEnable = false;
// CurrentNum = 0;
// break;
// }
// }
//}
//完成按钮
//public DelegateCommand AddFinish
//{
// get => new DelegateCommand(() =>
// {
// if (ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).Count <= 0)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "请选择药箱",
// Type = MsgType.SUCCESS,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// return;
// }
// List<ChannelStock> jiaojieStocks = new List<ChannelStock>();
// List<ChannelStock> cs = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
// for (int i = 0; i < cs.Count; i++)
// {
// ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(cs[i]);
// jiaojieStocks.Add(copy);
// }
// csList = jiaojieStocks.FindAll(cs => cs.ChannelLst.IsSelected).GroupBy(cs => cs.DrugId).Select(g => new
// {
// DrugId = g.Key,
// AddQuantity = g.Sum(s => s.AddQuantity)
// }).Select(cs => new ChannelStock() { DrugId = cs.DrugId, AddQuantity = cs.AddQuantity }).ToList();
// List<ChannelStock> channelStocks = new List<ChannelStock>();
// List<string> msg = new List<string>();
// for (int i = 0; i < csList.Count; i++)
// {
// List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Includes<DrugInfo>(cs => cs.DrugInfo)
// .Where(cs => cs.Quantity > 0)
// .Where(cs => cs.DrawerType == 1)
// .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
// .Where(cs => cs.DrugId == csList[i].DrugId)
// .OrderBy(cs => cs.EffDate)
// .OrderBy(cs => cs.DrawerNo)
// .ToList();
// int total = HasQChannels.Sum(it => it.Quantity);
// int TakeQ = csList[i].AddQuantity;
// // 说明数量足够
// 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;
// }
// }
// }
// else
// {
// msg.Add($"药品【{ChannelStocks[i].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
// }
// }
// if (msg.Count > 0)
// {
// DialogParameters dialogParameters = new DialogParameters();
// dialogParameters.Add("msgInfo", msg);
// DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
// return;
// }
// else
// {
// channelStocks.Sort((a, b) =>
// {
// if ((a.DrawerNo - b.DrawerNo) == 0)
// {
// return a.ColNo - b.ColNo;
// }
// return a.DrawerNo - b.DrawerNo;
// });
// }
// List<ChannelStock> record = channelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
// if (record.Count > 0)
// {
// string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
// var f = SqlSugarHelper.Db.UseTran(() =>
// {
// for (int i = 0; i < record.Count; i++)
// {
// ChannelStock it = record[i];
// // 更新数据 库存信息
// SqlSugarHelper.Db.Updateable(new ChannelStock()
// {
// Quantity = it.Quantity - it.TakeQuantity,
// ManuNo = it.ManuNo,
// EffDate = it.EffDate,
// Id = it.Id,
// }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
// //更新 交接柜 库存信息
// List<ChannelStock> jiaojie = jiaojieStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
// if (jiaojie != null && jiaojie.Count > 0)
// {
// for (int j = 0; j < jiaojie.Count; j++)
// {
// // 更新数据 交接柜 库存信息
// ChannelStock jiaojie_it = jiaojie[j];
// SqlSugarHelper.Db.Updateable(new ChannelStock()
// {
// Quantity = jiaojie_it.BaseQuantity,
// //ManuNo = it.ManuNo,
// //EffDate = it.EffDate,
// Id = jiaojie_it.Id,
// }).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand();
// }
// }
// // 保存数据 出库记录
// SqlSugarHelper.Db.Insertable(new MachineRecord()
// {
// MachineId = it.MachineId,
// DrawerNo = it.DrawerNo,
// ColNo = it.ColNo,
// DrugId = it.DrugId,
// ManuNo = it.ManuNo,
// EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
// Operator = HomeWindowViewModel.Operator?.Id,
// Reviewer = HomeWindowViewModel.Reviewer?.Id,
// OperationTime = DateTime.Now,
// Quantity = it.TakeQuantity,
// Type = 2,
// InvoiceId = InvoiceId
// }).ExecuteCommand();
// }
// return true;
// });
// if (f.Data)
// {
// // 更新屏显库存
// List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 5);
// if (singleChannels.Count > 0)
// {
// singleChannels.ForEach(it =>
// {
// _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
// });
// }
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "补药完成,库存已更新",
// Type = MsgType.SUCCESS,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// RequestData();
// }
// if (!f.IsSuccess)
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "补药操作失败,库存更新失败!",
// Type = MsgType.ERROR,
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// }
// else
// {
// AlertMsg alertMsg = new AlertMsg
// {
// Message = "补药数量有误",
// Type = MsgType.ERROR
// };
// _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
// }
// });
//}
//取消
//public DelegateCommand CancleAdd
//{
// get => new DelegateCommand(() =>
// {
// _portUtil.ResetData();
// Status = 0;
// IsEnable = true;
// CurrentNum = 0;
// });
//}
public DelegateCommand RejectReport_Download public DelegateCommand RejectReport_Download
{ {
get => new DelegateCommand(() => get => new DelegateCommand(() =>
@ -598,17 +268,17 @@ namespace DM_Weight.ViewModels
public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog); public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
public async void OpenOrderDialog() public async void OpenOrderDialog()
{ {
if (_ChannelList != null && _ChannelList.channelStocks != null && _ChannelList.State == 0) if (_ChannelList != null && _ChannelList.channelStocks != null && _ChannelList.channelStocks.Any(cs=>cs.State==0))
{ {
// 此处延时1毫秒等待页面渲染 // 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1)); await Task.Delay(TimeSpan.FromMilliseconds(1));
//选中药箱号下的所有药品id //选中药箱号下的所有药品id
DialogParameters dialogParameters = new DialogParameters(); DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("_ChannelStock", _ChannelList.channelStocks); dialogParameters.Add("_ChannelStock", _ChannelList.channelStocks.Where(cs=>cs.State==0).ToList());
DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog"); DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
} }
if(_ChannelList!=null&& _ChannelList.State == 1) if(_ChannelList!=null)
{ {
AlertMsg alertMsg = new AlertMsg AlertMsg alertMsg = new AlertMsg
{ {

View File

@ -238,6 +238,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
} }
else else
{ {

View File

@ -383,6 +383,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
} }
else else
{ {
@ -407,6 +408,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -387,6 +387,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
} }
else else
{ {
@ -411,6 +412,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -550,7 +550,7 @@ namespace DM_Weight.ViewModels
{ {
try try
{ {
if (!_portUtil.Operate) if (!_portUtil.Operate &&_portUtil.OperateFinish)
{ {
// 无人操作鼠标键盘 // 无人操作鼠标键盘
if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit) if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)

View File

@ -425,7 +425,7 @@ namespace DM_Weight.ViewModels
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
_portUtil.OperateFinish = true;
} }
}); });
@ -444,6 +444,7 @@ namespace DM_Weight.ViewModels
RequestData(); RequestData();
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -479,6 +479,7 @@ namespace DM_Weight.ViewModels
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
_portUtil.OperateFinish = true;
} }
else else
{ {
@ -508,6 +509,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -1,36 +1,41 @@
using log4net; using DM_Weight.Finger;
using log4net.Core; using DM_Weight.HIKVISION;
using log4net.Repository.Hierarchy;
using Prism.Commands;
using Prism.Events;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using DM_Weight.Finger;
using DM_Weight.Models; using DM_Weight.Models;
using DM_Weight.msg; using DM_Weight.msg;
using DM_Weight.Port; using DM_Weight.Port;
using DM_Weight.util; using DM_Weight.util;
using DM_Weight.Views; using DM_Weight.Views;
using System.Collections.ObjectModel; using log4net;
using log4net.Core;
using log4net.Repository.Hierarchy;
using Microsoft.Win32; using Microsoft.Win32;
using System.Xml; using Prism.Commands;
using Prism.Events;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Regions;
using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Configuration;
using System.Diagnostics; using System.Diagnostics;
using DM_Weight.HIKVISION; using System.IO;
using System.Linq;
using System.Security.AccessControl; using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using System.Xml;
namespace DM_Weight.ViewModels namespace DM_Weight.ViewModels
{ {
public class LoginWindowViewModel : BindableBase, IRegionMemberLifetime, IConfirmNavigationRequest public class LoginWindowViewModel : BindableBase, IRegionMemberLifetime, IConfirmNavigationRequest
{ {
private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel)); private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel));
private string username; private string username;
@ -357,6 +362,8 @@ _exitCommand ??= new DelegateCommand(Exit);
void Exit() void Exit()
{ {
//清录屏进程
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(2);
//_chkFunction.HIKLoginOut(); //_chkFunction.HIKLoginOut();
Process.GetCurrentProcess().Kill(); Process.GetCurrentProcess().Kill();
Environment.Exit(0); Environment.Exit(0);
@ -463,8 +470,10 @@ _exitCommand ??= new DelegateCommand(Exit);
//接收导航传过来的参数 现在是在此处初始化了表格数据 //接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext) public void OnNavigatedTo(NavigationContext navigationContext)
{ {
//FingerMsg = !_fingerprintUtil.bIsConnected; FingerMsg = !_fingerprintUtil.bIsConnected;
_eventAggregator.GetEvent<FingerprintEvent>().Subscribe(LoginEvent); _eventAggregator.GetEvent<FingerprintEvent>().Subscribe(LoginEvent);
//结束录屏
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(0);
} }
@ -478,6 +487,11 @@ _exitCommand ??= new DelegateCommand(Exit);
public void OnNavigatedFrom(NavigationContext navigationContext) public void OnNavigatedFrom(NavigationContext navigationContext)
{ {
_eventAggregator.GetEvent<FingerprintEvent>().Unsubscribe(LoginEvent); _eventAggregator.GetEvent<FingerprintEvent>().Unsubscribe(LoginEvent);
#region
//登录进来后开始录屏
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(1);
#endregion
} }
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题 //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
public string ReadAppSetting(string key) public string ReadAppSetting(string key)
@ -489,5 +503,6 @@ _exitCommand ??= new DelegateCommand(Exit);
XmlNode node = doc.SelectSingleNode(xPath); XmlNode node = doc.SelectSingleNode(xPath);
return node.Attributes["value"].Value.ToString(); return node.Attributes["value"].Value.ToString();
} }
} }
} }

View File

@ -1,26 +1,38 @@
using MaterialDesignThemes.Wpf; using DM_Weight.Finger;
using DM_Weight.HIKVISION;
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.Commands;
using Prism.Events; using Prism.Events;
using Prism.Mvvm; using Prism.Mvvm;
using Prism.Regions; using Prism.Regions;
using ScreenRecorderLib;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Media; 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 Unity;
using DM_Weight.HIKVISION;
namespace DM_Weight.ViewModels namespace DM_Weight.ViewModels
{ {
internal class MainWindowViewModel : BindableBase internal class MainWindowViewModel : BindableBase
{ {
#region
public Recorder _recorder;
private string _outputFolder;
private string _outputFilePath;
public static MainWindowViewModel vm;
#endregion
private readonly ILog logger = LogManager.GetLogger(typeof(MainWindowViewModel));
private string _title = "Prism App"; //标题 private string _title = "Prism App"; //标题
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3)); private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
@ -66,9 +78,11 @@ namespace DM_Weight.ViewModels
//private CHKFunction _cHKFunction; //private CHKFunction _cHKFunction;
public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil) public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil)
{ {
vm = this;
//_portUtil = portUtil; //_portUtil = portUtil;
this.eventAggregator = eventAggregator; this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent<SnackbarEvent>().Subscribe(doMyPrismEvent2); this.eventAggregator.GetEvent<SnackbarEvent>().Subscribe(doMyPrismEvent2);
this.eventAggregator.GetEvent<PrintScreenEvent>().Subscribe(PrintScreen);
_screenUtil = screenUtil; _screenUtil = screenUtil;
_fingerprintUtil = fingerprintUtil; _fingerprintUtil = fingerprintUtil;
_regionManager = regionManager; _regionManager = regionManager;
@ -106,5 +120,90 @@ namespace DM_Weight.ViewModels
SnackbarMessageQueue.Enqueue(msg.Message); SnackbarMessageQueue.Enqueue(msg.Message);
} }
#region
/// <summary>
/// 录屏事件
/// </summary>
/// <param name="type">0停止录屏1开始录屏2退出软件清进程</param>
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}");
}
} }
} }

View File

@ -444,6 +444,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} }
@ -464,6 +465,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -459,7 +459,8 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg); _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
//} //}
//else //else
@ -490,6 +491,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -497,6 +497,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} }
@ -528,6 +529,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -398,6 +398,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
IsFinishClick = false; IsFinishClick = false;
_portUtil.OperateFinish = true;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}, () => !IsFinishClick && ReturnQuantity > 0).ObservesProperty(() => IsFinishClick).ObservesProperty(() => ReturnQuantity); }, () => !IsFinishClick && ReturnQuantity > 0).ObservesProperty(() => IsFinishClick).ObservesProperty(() => ReturnQuantity);
@ -416,6 +417,7 @@ namespace DM_Weight.ViewModels
IsFinishClick = false; IsFinishClick = false;
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -334,6 +334,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
IsFinishClick = false; IsFinishClick = false;
_portUtil.OperateFinish = true;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} else } else
{ {
@ -361,6 +362,7 @@ namespace DM_Weight.ViewModels
IsFinishClick = false; IsFinishClick = false;
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -412,7 +412,8 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg); _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} }
@ -433,6 +434,7 @@ namespace DM_Weight.ViewModels
RequestData(); RequestData();
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -383,6 +383,7 @@ namespace DM_Weight.ViewModels
} }
Status = 0; Status = 0;
_isFinishClick = false; _isFinishClick = false;
_portUtil.OperateFinish = true;
RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
} }
@ -402,6 +403,7 @@ namespace DM_Weight.ViewModels
{ {
_portUtil.ResetData(); _portUtil.ResetData();
Status = 0; Status = 0;
_portUtil.OperateFinish = true;
}); });
} }

View File

@ -263,9 +263,21 @@
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
<GridViewColumn Width="100" <GridViewColumn Width="130"
DisplayMemberBinding="{Binding State,Converter={StaticResource StockStatusConverter},ConverterParameter=TextState}" Header="状态">
Header="状态"/> <GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" materialDesign:ListBoxItemAssist.ShowSelection="False">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Width="130" Text="{Binding State,Converter={StaticResource StockStatusConverter},ConverterParameter=TextState}">
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!--<GridViewColumn Width="200" <!--<GridViewColumn Width="200"
DisplayMemberBinding="{Binding Drug.DrugName}" DisplayMemberBinding="{Binding Drug.DrugName}"

View File

@ -15,6 +15,7 @@
mc:Ignorable="d" > mc:Ignorable="d" >
<UserControl.Resources> <UserControl.Resources>
<convert:StatusConverter x:Key="StatusConverter" /> <convert:StatusConverter x:Key="StatusConverter" />
<convert:TakeQuantityVisiable x:Key="TakeQuantityVisiable" />
</UserControl.Resources> </UserControl.Resources>
<materialDesign:Card Padding="0"> <materialDesign:Card Padding="0">
<Grid> <Grid>
@ -105,7 +106,8 @@
<DataGridTemplateColumn Header="取出数量"> <DataGridTemplateColumn Header="取出数量">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"> <TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"
Visibility="{Binding ColNo,Converter={StaticResource TakeQuantityVisiable}}">
<TextBox.Text> <TextBox.Text>
<Binding Path="TakeQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"> <Binding Path="TakeQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
</Binding> </Binding>

View File

@ -1,174 +0,0 @@
<UserControl x:Class="DM_Weight.Views.Dialog.AddToJiaoJieNewDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DM_Weight.Views.Dialog"
mc:Ignorable="d"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
xmlns:convert="clr-namespace:DM_Weight.Converter"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
MinWidth="880"
Width="Auto"
Height="Auto">
<UserControl.Resources>
<convert:StatusConverter x:Key="StatusConverter" />
</UserControl.Resources>
<materialDesign:Card Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Background="#03a9f4" Grid.Row="0">
<TextBlock VerticalAlignment="Center" Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}" Margin="16 4 16 4" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="交接柜补药" />
<Button
Style="{StaticResource MaterialDesignIconForegroundButton}"
Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}"
HorizontalAlignment="Right"
Command="{Binding BtnCloseCommand}"
IsEnabled="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CloseBtn}"
ToolTip="关闭"
>
<materialDesign:PackIcon Kind="Close" Width="34" Height="34" />
</Button>
</Grid>
<DataGrid
Grid.Row="1"
materialDesign:DataGridAssist.ColumnHeaderPadding="15"
ItemsSource="{Binding ChannelStocks,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
materialDesign:DataGridAssist.EnableEditBoxAssist="False"
IsSynchronizedWithCurrentItem="True"
materialDesign:DataGridAssist.CellPadding="13"
CanUserAddRows="False"
AutoGenerateColumns="False">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
<Setter Property="Background" Value="#31ccec" />
<Setter Property="Foreground" Value="white" />
<Setter Property="Height" Value="56" />
<Setter Property="BorderBrush" Value="white"/>
<Setter Property="BorderThickness" Value="0.6"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<TextBlock TextAlignment="Center" VerticalAlignment="Center" >
<ContentPresenter Margin="13" />
</TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="BorderBrush" Value="Transparent" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<!--<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True"
materialDesign:ExpanderAssist.HeaderBackground="PaleTurquoise" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
<Expander.Header >
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name.DrawerNo,StringFormat={}{0}号药箱}" FontWeight="Bold" />
</StackPanel>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>-->
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="药品名称" Binding="{Binding DrugInfo.DrugName}"/>
<DataGridTextColumn IsReadOnly="True" Header="规格" Binding="{Binding DrugInfo.DrugSpec}"/>
<DataGridTextColumn IsReadOnly="True" Header="厂家" Binding="{Binding DrugInfo.Manufactory}"/>
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding ManuNo}"/>
<DataGridTextColumn IsReadOnly="True" Header="药品基数" Binding="{Binding BaseQuantity}"/>
<DataGridTextColumn IsReadOnly="True" Header="需补药数量" Binding="{Binding AddQuantity}"/>
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding AddQuantity}"/>
<DataGridTextColumn IsReadOnly="True" Header="库存数量" Binding="{Binding AddQuantity}"/>
<DataGridTemplateColumn Header="补药数量" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}">
<TextBox.Text>
<Binding Path="AddQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Column="1" HorizontalAlignment="Center">
<!--<Button
Margin="2"
Style="{StaticResource MaterialDesignRaisedAccentButton}"
Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnVisible}"
materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
materialDesign:ButtonProgressAssist.IsIndeterminate="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
Content="取药"
Command="{Binding OpenDrawer}">
</Button>-->
<Button
Margin="2"
Style="{StaticResource MaterialDesignRaisedAccentButton}"
Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnVisible}"
materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
materialDesign:ButtonProgressAssist.IsIndeterminate="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
Content="取药"
Command="{Binding OpenDrawer}">
</Button>
<Button
Margin="2"
Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CompleteBtn}"
Style="{StaticResource MaterialDesignRaisedAccentButton}"
Content="完成"
Command="{Binding TakeFinish}"/>
<Button
Margin="2"
Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CancelBtn}"
Style="{StaticResource MaterialDesignRaisedButton}"
Background="Orange"
BorderBrush="Orange"
Content="取消"
Command="{Binding CancleTake}" />
</StackPanel>
</Grid>
</Grid>
</materialDesign:Card>
</UserControl>

View File

@ -1,28 +0,0 @@
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.Dialog
{
/// <summary>
/// AddToJiaoJieNewDialog.xaml 的交互逻辑
/// </summary>
public partial class AddToJiaoJieNewDialog : UserControl
{
public AddToJiaoJieNewDialog()
{
InitializeComponent();
}
}
}

View File

@ -1,6 +1,10 @@
using Prism.Events; using DM_Weight.msg;
using DM_Weight.util;
using DM_Weight.ViewModels;
using Prism.Events;
using Prism.Ioc; using Prism.Ioc;
using Prism.Regions; using Prism.Regions;
using ScreenRecorderLib;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -16,8 +20,6 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes; using System.Windows.Shapes;
using Unity; using Unity;
using Unity.Lifetime; using Unity.Lifetime;
using DM_Weight.msg;
using DM_Weight.util;
namespace DM_Weight.Views namespace DM_Weight.Views
{ {
@ -28,9 +30,11 @@ namespace DM_Weight.Views
{ {
//IRegionManager _regionManager; //IRegionManager _regionManager;
//IUnityContainer _container; //IUnityContainer _container;
MainWindowViewModel vms;
public MainWindow() public MainWindow()
{ {
InitializeComponent(); InitializeComponent();
vms = MainWindowViewModel.vm;
//_regionManager = regionManager; //_regionManager = regionManager;
//_container = container; //_container = container;
//System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => //System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
@ -42,6 +46,11 @@ namespace DM_Weight.Views
//})); //}));
} }
protected override void OnClosed(EventArgs e)
{
vms._recorder?.Dispose();
base.OnClosed(e);
}
} }
} }

View File

@ -0,0 +1,14 @@
using DM_Weight.Models;
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<int>
{
}
}