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

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

View File

@ -13,27 +13,30 @@ namespace DM_Weight.Converter
//是否给交接柜补药已补药的则不可勾选未补药的可勾选以进行补药0未补1已补
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int status = int.Parse(value.ToString());
if (parameter.ToString() == "EnableState")
if (value != null)
{
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 (parameter.ToString() == "TextState")
{
if (status == 0)
{
return "未取药";
}
else
{
return "已取药待入库";
if (status == 0)
{
return "未取药";
}
else
{
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="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
<PackageReference Include="Prism.Unity" Version="8.1.97" />
<PackageReference Include="ScreenRecorderLib" Version="6.5.1" />
<PackageReference Include="SharpPromise" Version="1.7.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.67" />
<PackageReference Include="SuperSimpleTcp" Version="3.0.10" />

View File

@ -112,7 +112,7 @@ namespace DM_Weight.Models
[SugarColumn(IsIgnore = true)]
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;

View File

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

View File

@ -222,53 +222,73 @@ namespace DM_Weight.ViewModels
//.OrderBy(cs => cs.EffDate)
.OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo })
.ToList();
if (HasQChannels == null || HasQChannels.Count <= 0)
//if (HasQChannels == null || HasQChannels.Count <= 0)
//{
// msg.Add($"有药品未绑定,请先绑定");
// continue;
//}
if (HasQChannels != null && HasQChannels.Count > 0)
{
msg.Add($"有药品未绑定,请先绑定");
continue;
}
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = ChannelStocks[i].AddQuantity;
// 说明数量足够
if (total >= TakeQ)
{
//for (int j = 0; TakeQ > 0; j++)
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = ChannelStocks[i].AddQuantity;
// 说明数量足够
//if (total >= TakeQ)
//{
// 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;
// }
//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)
{
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
{
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)
{
@ -317,10 +337,23 @@ namespace DM_Weight.ViewModels
}
enumerable = ChannelStocks.Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
if (enumerable != null && enumerable.Count() > 0)
{
enumerator = enumerable.GetEnumerator();
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()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
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 =>
if (grouping != null)
{
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);
}
catch (Exception ex)
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
// 发送取药数量
singleChannels.ForEach(it =>
{
AlertMsg alertMsg = new AlertMsg
try
{
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();
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
}
catch (Exception ex)
{
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;
@ -388,10 +424,11 @@ namespace DM_Weight.ViewModels
{
if (jjItem.DrugId == csItem.DrugId)
{
if (jjItem.Quantity != csItem.Quantity)
if (jjItem.Quantity < csItem.Quantity)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!");
//SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!");
SnackbarMessageQueue.Enqueue("输入药品数量大于需要补药数!");
_isFinishClick = false;
return;
}
@ -439,10 +476,12 @@ namespace DM_Weight.ViewModels
for (int i = 0; i < Jiaojie_ChannelStocks.Count; 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();
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++)
{
ChannelStock csStock = (ChannelStock)csStockList[j].Clone();
@ -466,6 +505,7 @@ namespace DM_Weight.ViewModels
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = addNum;
newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
@ -492,6 +532,7 @@ namespace DM_Weight.ViewModels
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
@ -519,6 +560,7 @@ namespace DM_Weight.ViewModels
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
newStock.NeedNum = 0;
newStock.State = 1;
AddJJStock.Add(newStock);
Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
@ -539,6 +581,7 @@ namespace DM_Weight.ViewModels
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
newStock.State = 1;
AddJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
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();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
ret.NeedNum = 0;
return ret;
}).ToList();
SqlSugarHelper.Db.Insertable(AddJJStock).ExecuteCommand();
@ -572,11 +623,12 @@ namespace DM_Weight.ViewModels
{
var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
ret.NeedNum = 0;
return ret;
}).ToList();
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)
{
Jiaojie_ChannelStocks.ForEach(jj =>
{
//更新交接柜状态为 已取药未入库
SqlSugarHelper.Db.Updateable(new ChannelList()
{
State = 1,
Id = jj.ChannelLst.Id
}).UpdateColumns(it => it.State).ExecuteCommand();
//if (Jiaojie_ChannelStocks != null)
//{
// Jiaojie_ChannelStocks.ForEach(jj =>
// {
// //更新交接柜状态为 已取药未入库
// SqlSugarHelper.Db.Updateable(new ChannelList()
// {
// State = 1,
// Id = jj.ChannelLst.Id
// }).UpdateColumns(it => it.State).ExecuteCommand();
}
// }
);
}
// );
//}
return true;
});
if (f.Data)
@ -664,7 +716,8 @@ namespace DM_Weight.ViewModels
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
_isFinishClick = false;
_isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
@ -696,6 +749,7 @@ namespace DM_Weight.ViewModels
{
_portUtil.ResetData();
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()
{
//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();
_ChannelLists?.Clear();
//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());
if (channelList != null)
{
if (channelList.channelStocks[0].AddToJJNum>0)
channelList.State=1; //表示有补药
//if (channelList.channelStocks[0].AddToJJNum>0)
// channelList.State=1; //表示有补药
channelLists.Add(channelList);
}
}
@ -189,307 +160,6 @@ namespace DM_Weight.ViewModels
{
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
{
get => new DelegateCommand(() =>
@ -598,17 +268,17 @@ namespace DM_Weight.ViewModels
public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(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毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
//选中药箱号下的所有药品id
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");
}
if(_ChannelList!=null&& _ChannelList.State == 1)
if(_ChannelList!=null)
{
AlertMsg alertMsg = new AlertMsg
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,36 +1,41 @@
using log4net;
using log4net.Core;
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.Finger;
using DM_Weight.HIKVISION;
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using DM_Weight.Views;
using System.Collections.ObjectModel;
using log4net;
using log4net.Core;
using log4net.Repository.Hierarchy;
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 DM_Weight.HIKVISION;
using System.IO;
using System.Linq;
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
{
public class LoginWindowViewModel : BindableBase, IRegionMemberLifetime, IConfirmNavigationRequest
{
private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel));
private string username;
@ -357,6 +362,8 @@ _exitCommand ??= new DelegateCommand(Exit);
void Exit()
{
//清录屏进程
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(2);
//_chkFunction.HIKLoginOut();
Process.GetCurrentProcess().Kill();
Environment.Exit(0);
@ -463,8 +470,10 @@ _exitCommand ??= new DelegateCommand(Exit);
//接收导航传过来的参数 现在是在此处初始化了表格数据
public void OnNavigatedTo(NavigationContext navigationContext)
{
//FingerMsg = !_fingerprintUtil.bIsConnected;
FingerMsg = !_fingerprintUtil.bIsConnected;
_eventAggregator.GetEvent<FingerprintEvent>().Subscribe(LoginEvent);
//结束录屏
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(0);
}
@ -478,6 +487,11 @@ _exitCommand ??= new DelegateCommand(Exit);
public void OnNavigatedFrom(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<FingerprintEvent>().Unsubscribe(LoginEvent);
#region
//登录进来后开始录屏
_eventAggregator.GetEvent<PrintScreenEvent>().Publish(1);
#endregion
}
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
public string ReadAppSetting(string key)
@ -489,5 +503,6 @@ _exitCommand ??= new DelegateCommand(Exit);
XmlNode node = doc.SelectSingleNode(xPath);
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.Events;
using Prism.Mvvm;
using Prism.Regions;
using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using DM_Weight.Finger;
using DM_Weight.Views;
using Unity;
using DM_Weight.HIKVISION;
namespace DM_Weight.ViewModels
{
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 ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
@ -66,9 +78,11 @@ namespace DM_Weight.ViewModels
//private CHKFunction _cHKFunction;
public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil)
{
vm = this;
//_portUtil = portUtil;
this.eventAggregator = eventAggregator;
this.eventAggregator.GetEvent<SnackbarEvent>().Subscribe(doMyPrismEvent2);
this.eventAggregator.GetEvent<PrintScreenEvent>().Subscribe(PrintScreen);
_screenUtil = screenUtil;
_fingerprintUtil = fingerprintUtil;
_regionManager = regionManager;
@ -106,5 +120,90 @@ namespace DM_Weight.ViewModels
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;
_isFinishClick = false;
_portUtil.OperateFinish = true;
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
@ -464,6 +465,7 @@ namespace DM_Weight.ViewModels
{
_portUtil.ResetData();
Status = 0;
_portUtil.OperateFinish = true;
});
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -263,9 +263,21 @@
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="100"
DisplayMemberBinding="{Binding State,Converter={StaticResource StockStatusConverter},ConverterParameter=TextState}"
Header="状态"/>
<GridViewColumn Width="130"
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"
DisplayMemberBinding="{Binding Drug.DrugName}"

View File

@ -15,6 +15,7 @@
mc:Ignorable="d" >
<UserControl.Resources>
<convert:StatusConverter x:Key="StatusConverter" />
<convert:TakeQuantityVisiable x:Key="TakeQuantityVisiable" />
</UserControl.Resources>
<materialDesign:Card Padding="0">
<Grid>
@ -105,7 +106,8 @@
<DataGridTemplateColumn Header="取出数量">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}">
<TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"
Visibility="{Binding ColNo,Converter={StaticResource TakeQuantityVisiable}}">
<TextBox.Text>
<Binding Path="TakeQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
</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.Regions;
using ScreenRecorderLib;
using System;
using System.Collections.Generic;
using System.Linq;
@ -16,8 +20,6 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Unity;
using Unity.Lifetime;
using DM_Weight.msg;
using DM_Weight.util;
namespace DM_Weight.Views
{
@ -28,9 +30,11 @@ namespace DM_Weight.Views
{
//IRegionManager _regionManager;
//IUnityContainer _container;
MainWindowViewModel vms;
public MainWindow()
{
InitializeComponent();
vms = MainWindowViewModel.vm;
//_regionManager = regionManager;
//_container = container;
//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>
{
}
}