交接柜补药时列出所有要补药的批次让补药人选择对应批次

This commit is contained in:
maqiao 2025-04-11 13:45:20 +08:00
parent 88b97e213f
commit c971e9d1bc
10 changed files with 959 additions and 468 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;userid=root;password=root" />
<add name="database" connectionString="server=127.0.0.1;port=3306;database=xiangtan_mazuike_xx;userid=root;password=root" />
</connectionStrings>
<!--<runtime>
--><!--配置之后Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
@ -54,7 +54,7 @@
<!-- 抽屉串口使用的协议232或者485 -->
<add key="DrawerProtocol" value="485" />
<!-- 抽屉串口的串口号 -->
<add key="DrawerPortPath" value="COM5" />
<add key="DrawerPortPath" value="COM1" />
<!-- can总线串口的串口号 -->
<add key="CanBusPortPath" value="COM3" />
<!-- 条码枪串口的串口号 -->

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Models
{
public class StringVSIntModels
{
public string StringId { get; set; }
public int IntQuantity { get; set; }
}
}

View File

@ -3,6 +3,7 @@ using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
@ -16,6 +17,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
namespace DM_Weight.ViewModels
{
@ -41,6 +43,8 @@ namespace DM_Weight.ViewModels
get => _jiaojie_channelStocks;
set => SetProperty(ref _jiaojie_channelStocks, value);
}
//交接柜所在药箱下的所有药品id
List<string> drugIdLst = new List<string>();
//交接柜中无该批次添加实体
public List<ChannelStock> AddJJStock = new List<ChannelStock>();
//交接柜中有该批次更新实体
@ -61,6 +65,20 @@ namespace DM_Weight.ViewModels
private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
private SolidColorBrush _colorBrush;
public SolidColorBrush SnackbarBackground
{
get => _colorBrush;
set => SetProperty(ref _colorBrush, value);
}
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
public ISnackbarMessageQueue SnackbarMessageQueue
{
get => _snackbarMessageQueue;
set => SetProperty(ref _snackbarMessageQueue, value);
}
public string Title => "交接柜补药";
@ -82,18 +100,19 @@ namespace DM_Weight.ViewModels
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
Jiaojie_ChannelStocks = parameters.GetValue<List<ChannelStock>>("ChannelStocks");
Jiaojie_ChannelStocks = parameters.GetValue<List<ChannelStock>>("_ChannelStock");
for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
{
ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(Jiaojie_ChannelStocks[i]);
ChannelStocks.Add(copy);
}
ChannelStocks = Jiaojie_ChannelStocks.GroupBy(cs =>new { cs.DrugId, cs.ManuNo }).Select(g => new
{
Key = g.Key,
AddQuantity = g.Sum(s => s.AddQuantity)
}).Select(cs => new ChannelStock() { DrugId = cs.Key.DrugId,ManuNo=cs.Key.ManuNo, AddQuantity = cs.AddQuantity }).ToList();
//ChannelStocks = Jiaojie_ChannelStocks.GroupBy(cs =>new { cs.DrugId }).Select(g => new
//{
// Key = g.Key,
// AddQuantity = g.Sum(s => s.AddQuantity)
//}).Select(cs => new ChannelStock() { DrugId = cs.Key.DrugId,ManuNo=cs.Key.ManuNo, AddQuantity = cs.AddQuantity }).ToList();
RequestData();
}
@ -199,9 +218,9 @@ namespace DM_Weight.ViewModels
.Where(cs => cs.Quantity > 0)
.Where(cs => cs.DrawerType == 1)
.Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
.Where(cs => cs.DrugId == ChannelStocks[i].DrugId && cs.ManuNo == ChannelStocks[i].ManuNo)
.OrderBy(cs => cs.EffDate)
.OrderBy(cs => cs.DrawerNo)
.Where(cs => cs.DrugId == ChannelStocks[i].DrugId)
//.OrderBy(cs => cs.EffDate)
.OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo })
.ToList();
if (HasQChannels == null || HasQChannels.Count <= 0)
{
@ -213,22 +232,37 @@ namespace DM_Weight.ViewModels
// 说明数量足够
if (total >= TakeQ)
{
for (int j = 0; TakeQ > 0; j++)
//for (int j = 0; TakeQ > 0; j++)
//{
// ChannelStock stock = HasQChannels[j];
// if (TakeQ > stock.Quantity)
// {
// stock.TakeQuantity = stock.Quantity;
// channelStocks.Add(stock);
// TakeQ -= stock.Quantity;
// }
// else
// {
// stock.TakeQuantity = TakeQ;
// channelStocks.Add(stock);
// TakeQ = 0;
// }
//}
int hadTakeQ = 0;
for (int j = 0; j < HasQChannels.Count; j++)
{
ChannelStock stock = HasQChannels[j];
if (TakeQ > stock.Quantity)
if ((ChannelStocks[i].AddQuantity - hadTakeQ) > HasQChannels[j].Quantity)
{
stock.TakeQuantity = stock.Quantity;
channelStocks.Add(stock);
TakeQ -= stock.Quantity;
HasQChannels[j].TakeQuantity = HasQChannels[j].Quantity;
hadTakeQ += HasQChannels[j].Quantity;
}
else
{
stock.TakeQuantity = TakeQ;
channelStocks.Add(stock);
TakeQ = 0;
HasQChannels[j].TakeQuantity = ChannelStocks[i].AddQuantity - hadTakeQ;
break;
}
}
channelStocks.AddRange(HasQChannels);
}
else
{
@ -247,14 +281,14 @@ namespace DM_Weight.ViewModels
}
else
{
channelStocks.Sort((a, b) =>
{
if ((a.DrawerNo - b.DrawerNo) == 0)
{
return a.ColNo - b.ColNo;
}
return a.DrawerNo - b.DrawerNo;
});
//channelStocks.Sort((a, b) =>
//{
// if ((a.DrawerNo - b.DrawerNo) == 0)
// {
// return a.ColNo - b.ColNo;
// }
// return a.DrawerNo - b.DrawerNo;
//});
ChannelStocks = channelStocks;
@ -282,7 +316,7 @@ namespace DM_Weight.ViewModels
}
}
enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
enumerable = ChannelStocks.Where(cs=>cs.TakeQuantity>0).GroupBy(cs => cs.DrawerNo, cs => cs);
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
@ -337,11 +371,36 @@ namespace DM_Weight.ViewModels
{
if (!_isFinishClick)
{
_isFinishClick = true;
List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
if (record.Count > 0)
{
//交接柜需要补药数量与加药数量对比,数量不一致则提示
var jjSum = from item in Jiaojie_ChannelStocks orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.NeedNum) };
var csSum = from item in record orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.TakeQuantity) };
foreach (var jjItem in jjSum)
{
foreach (var csItem in csSum)
{
if (jjItem.DrugId == csItem.DrugId)
{
if (jjItem.Quantity != csItem.Quantity)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!");
_isFinishClick = false;
return;
}
}
}
}
string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
var f = SqlSugarHelper.Db.UseTran(() =>
{
@ -357,35 +416,6 @@ namespace DM_Weight.ViewModels
Id = it.Id,
}).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
////更新 交接柜 批次信息
//List<ChannelStock> jiaojieStock = Jiaojie_ChannelStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
////交接柜中有该药品及批次的数据则更新;没有则插入一条
//if (jiaojieStock != null)
//{
// for (int j = 0; j < jiaojieStock.Count; j++)
// {
// if(it.Quantity> jiaojieStock[j].Quantity)
// {
// //取的数量够不够被
// }
// List<ChannelStock> searchStock = SqlSugarHelper.Db.Queryable<ChannelStock>()
// .Where(cs => cs.DrawerNo == jiaojieStock[j].DrawerNo
// && cs.DrugId == jiaojieStock[j].DrugId
// && cs.DrugId == it.DrugId
// && cs.ManuNo == it.ManuNo
// &&cs.MachineId==(ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5"))
// .ToList();
// //List<ChannelStock> stockManuList = jiaojieStock.Where(cs => cs.ManuNo == it.ManuNo).ToList();
// if (searchStock == null || searchStock.Count <= 0)
// {
// SqlSugarHelper.Db.Deleteable<ChannelStock>().Where(cs=>cs.DrawerNo== jiaojieStock[j].DrawerNo&&cs.DrugId== jiaojieStock[j].DrugId&&cs.Quantity<=0).ExecuteCommand();
// jiaojieStock[j].ManuNo = it.ManuNo;
// jiaojieStock[j].Id = Guid.NewGuid().ToString();
// SqlSugarHelper.Db.Insertable(jiaojieStock[j]).ExecuteCommand();
// }
// }
//}
// 保存数据 出库记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
@ -409,30 +439,30 @@ 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 == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId && cs.Quantity <= 0).ExecuteCommand();
List<ChannelStock> csStockList = record.Where(cs => cs.DrugId == jiaoStock.DrugId && cs.TakeQuantity > 0).ToList();
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)
{
for (int j = 0; j < csStockList.Count; j++)
{
ChannelStock csStock = (ChannelStock)csStockList[j].Clone();
ChannelStock jjStockManuNo = SqlSugarHelper.Db.Queryable<ChannelStock>()
.Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.ManuNo == csStock.ManuNo && cs.MachineId == "DM5").First();
logger.Info($"库中{jiaoStock.DrawerNo}号手术间,{jiaoStock.DrugId},{csStock.ManuNo};有该批次{jjStockManuNo!=null};jjStockManuNo是空{jjStockManuNo==null}");
.Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo && cs.DrugId == Jiaojie_ChannelStocks[i].DrugId && cs.ManuNo == csStock.ManuNo && cs.MachineId == "DM5").First();
logger.Info($"库中{Jiaojie_ChannelStocks[i].DrawerNo}号手术间,{Jiaojie_ChannelStocks[i].DrugId},{csStock.ManuNo};有该批次{jjStockManuNo != null};jjStockManuNo是空{jjStockManuNo == null}");
if (jjStockManuNo != null)
{
int addNum = csStock.TakeQuantity;
logger.Info($"需补药数{jiaoStock.NeedNum},该批次取药数{csStock.TakeQuantity}");
logger.Info($"需补药数{Jiaojie_ChannelStocks[i].NeedNum},该批次取药数{csStock.TakeQuantity}");
//有该批次
if (jiaoStock.NeedNum > csStock.TakeQuantity)
if (Jiaojie_ChannelStocks[i].NeedNum > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
//newStock.Chnguid = jiaoStock.Chnguid;
//newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.ManuNo = jiaoStock.ManuNo;
newStock.DrawerNo = jiaoStock.DrawerNo;
newStock.DrugId = jiaoStock.DrugId;
newStock.ManuNo = Jiaojie_ChannelStocks[i].ManuNo;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = addNum;
newStock.Id = jjStockManuNo.Id;
//newStock.MachineId = jiaoStock.MachineId;
@ -440,7 +470,7 @@ namespace DM_Weight.ViewModels
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
UpdateJJStock.Add(newStock);
csStockList[j].TakeQuantity = 0;
jiaoStock.NeedNum = jiaoStock.NeedNum - csStock.TakeQuantity;
Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
}
else
{
@ -454,53 +484,53 @@ namespace DM_Weight.ViewModels
ChannelStock newStock = new ChannelStock();
//newStock.Chnguid = jiaoStock.Chnguid;
//newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.ManuNo = jiaoStock.ManuNo;
newStock.DrawerNo = jiaoStock.DrawerNo;
newStock.DrugId = jiaoStock.DrugId;
newStock.AddToJJNum = jiaoStock.NeedNum;
newStock.ManuNo = Jiaojie_ChannelStocks[i].ManuNo;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
newStock.Id = jjStockManuNo.Id;
//newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
UpdateJJStock.Add(newStock);
csStockList[j].TakeQuantity = csStock.TakeQuantity - jiaoStock.NeedNum;
jiaoStock.NeedNum = 0;
csStockList[j].TakeQuantity = csStock.TakeQuantity - Jiaojie_ChannelStocks[i].NeedNum;
Jiaojie_ChannelStocks[i].NeedNum = 0;
break;
}
}
else //没有该批次
{
if (jiaoStock.NeedNum > csStock.TakeQuantity)
if (Jiaojie_ChannelStocks[i].NeedNum > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.Chnguid = jiaoStock.Chnguid;
newStock.DrawerNo = jiaoStock.DrawerNo;
newStock.DrugId = jiaoStock.DrugId;
newStock.BaseQuantity = Jiaojie_ChannelStocks[i].BaseQuantity;
newStock.Chnguid = Jiaojie_ChannelStocks[i].Chnguid;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.ManuNo = csStock.ManuNo;
newStock.AddToJJNum = csStock.TakeQuantity;
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = jiaoStock.MachineId;
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
newStock.NeedNum = 0;
AddJJStock.Add(newStock);
jiaoStock.NeedNum = jiaoStock.NeedNum - csStock.TakeQuantity;
Jiaojie_ChannelStocks[i].NeedNum = Jiaojie_ChannelStocks[i].NeedNum - csStock.TakeQuantity;
csStockList[j].TakeQuantity = 0;
}
else
{
//够取
ChannelStock newStock = new ChannelStock();
newStock.Chnguid = jiaoStock.Chnguid;
newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.DrawerNo = jiaoStock.DrawerNo;
newStock.DrugId = jiaoStock.DrugId;
newStock.Chnguid = Jiaojie_ChannelStocks[i].Chnguid;
newStock.BaseQuantity = Jiaojie_ChannelStocks[i].BaseQuantity;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
newStock.ManuNo = csStock.ManuNo;
newStock.AddToJJNum = jiaoStock.NeedNum;
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].NeedNum;
newStock.NeedNum = 0;
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = jiaoStock.MachineId;
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
AddJJStock.Add(newStock);
csStockList[j].TakeQuantity = csStock.TakeQuantity - newStock.AddToJJNum;
@ -511,7 +541,7 @@ namespace DM_Weight.ViewModels
}
SqlSugarHelper.Db.Updateable<ChannelStock>()
.SetColumns(cs => new ChannelStock() { NeedNum = 0 })
.Where(cs => cs.DrawerNo == jiaoStock.DrawerNo)
.Where(cs => cs.DrawerNo == Jiaojie_ChannelStocks[i].DrawerNo)
.ExecuteCommand();
}
@ -568,19 +598,20 @@ namespace DM_Weight.ViewModels
}
}
//更新交接柜状态为 已取药未入库(等在交接柜入库后再更新交接柜库存)
List<ChannelStock> jiaojie = Jiaojie_ChannelStocks.GroupBy(cs => cs.DrawerNo).Select(cs => cs.FirstOrDefault()).ToList();
if (jiaojie != null && jiaojie.Count > 0)
if (Jiaojie_ChannelStocks != null)
{
for (int j = 0; j < jiaojie.Count; j++)
Jiaojie_ChannelStocks.ForEach(jj =>
{
ChannelStock jiaojie_it = jiaojie[j];
//更新交接柜状态为 已取药未入库
SqlSugarHelper.Db.Updateable(new ChannelList()
{
State = 1,
Id = jiaojie_it.ChannelLst.Id
Id = jj.ChannelLst.Id
}).UpdateColumns(it => it.State).ExecuteCommand();
}
);
}
return true;
});

View File

@ -0,0 +1,13 @@
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

@ -39,24 +39,44 @@ namespace DM_Weight.ViewModels
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<IsSelectedEvent>().Unsubscribe(SetIsSelected);
//_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
//_eventAggregator.GetEvent<IsSelectedEvent>().Unsubscribe(SetIsSelected);
}
private List<ChannelStock> channelStocks;
public List<ChannelStock> ChannelStocks
private List<ChannelStock>? channelStocks;
public List<ChannelStock>? ChannelStocks
{
get => channelStocks;
set => SetProperty(ref channelStocks, value);
}
private ChannelStock _channelStock;
public ChannelStock _ChannelStock
{
get => _channelStock;
set => SetProperty(ref _channelStock, value);
}
private List<ChannelList>? _channelLists;
public List<ChannelList>? _ChannelLists
{
get => _channelLists;
set => SetProperty(ref _channelLists, value);
}
private ChannelList _channelList;
public ChannelList _ChannelList
{
get => _channelList;
set => SetProperty(ref _channelList, value);
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
_eventAggregator.GetEvent<IsSelectedEvent>().Subscribe(SetIsSelected);
//_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
//_eventAggregator.GetEvent<IsSelectedEvent>().Subscribe(SetIsSelected);
RequestData();
}
private PortUtil _portUtil;
@ -70,26 +90,85 @@ 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所有要补药的药箱
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)
.Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cs.NeedNum > 0)
.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);
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();
if (ChannelStocks != null && ChannelStocks.Count > 0)
{
ChannelStocks.ForEach(cs => cs.AddQuantity = cs.NeedNum);
//2)查询channel_list将1中查询的添加到channel_list的channel_stock里供页面呈现显示
List<int> DrawerNoList = ChannelStocks.Select(cs => cs.DrawerNo).Distinct().ToList();
List<ChannelList> channelLists = new List<ChannelList>();
for (int i = 0; i < DrawerNoList.Count; i++)
{
var channelList = SqlSugarHelper.Db.Queryable<ChannelList>()
.Where(cl => cl.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cl.DrawerNo == DrawerNoList[i])
.OrderBy(cl => cl.Id)
.OrderBy(cl => cl.DrawerNo)
.First();
if (channelList.channelStocks == null)
{
channelList.channelStocks = new List<ChannelStock>();
}
channelList.channelStocks.AddRange(ChannelStocks.Where(cs => cs.DrawerNo == DrawerNoList[i]&&(cs.NeedNum>0||cs.AddToJJNum>0)).ToList());
if (channelList != null)
{
channelLists.Add(channelList);
}
}
_ChannelLists = channelLists;
}
else
{
_ChannelLists.Clear();
}
ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
}
private int _status = 0;
@ -108,304 +187,304 @@ namespace DM_Weight.ViewModels
get => new DelegateCommand(() => RequestData());
}
//一键补药
public DelegateCommand OpenDragCommand
{
get => new DelegateCommand(() =>
{
try
{
Status = 1;
IsEnable = false;
//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();
// 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]} 号抽屉");
// 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();
// _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)
{
// }
// 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;
}
// 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;
// });
//}
//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;
}
}
// 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)
{
//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();
// 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}】");
}
// 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;
// }
// 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();
// }
// 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();
}
}
// //更新 交接柜 库存信息
// 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);
}
});
}
// // 保存数据 出库记录
// 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 CancleAdd
//{
// get => new DelegateCommand(() =>
// {
// _portUtil.ResetData();
// Status = 0;
// IsEnable = true;
// CurrentNum = 0;
// });
//}
public DelegateCommand RejectReport_Download
@ -437,14 +516,16 @@ namespace DM_Weight.ViewModels
// DrugId = g.Key, AddQuantity = g.Sum(s => s.AddQuantity)
//}).Select(cs=>new ChannelStock() { DrugId=cs.DrugId,AddQuantity=cs.AddQuantity }).ToList();
csList = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
csList = _ChannelList.channelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
if (csList != null && csList.Count > 0)
{
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("ChannelStocks", csList);
dialogParameters.Add("_ChannelStock", csList);
//List<string> drugIdLst = ChannelStocks.FindAll(cs => cs.DrawerNo == _ChannelStock.DrawerNo).Select(cs => cs.DrugId).ToList();
//dialogParameters.Add("drugIdLst", drugIdLst);
DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
}
@ -470,38 +551,61 @@ namespace DM_Weight.ViewModels
//}
//MessageBox.Show("返回值:" + dialogResult.Result.ToString());
}
int AddToJiaoJieClickNum = 1;
//设置选中药箱的复选框状态
private void SetIsSelected(ChannelStock channelStock)
//int AddToJiaoJieClickNum = 1;
////设置选中药箱的复选框状态
//private void SetIsSelected(ChannelStock channelStock)
//{
// if (channelStock != null)
// {
// //channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
// if (channelStock.ChannelLst.State == 0)
// {
// channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
// }
// else
// {
// return;
// }
// if (_ChannelList.channelStocks != null && _ChannelList.channelStocks != null)
// {
// _ChannelList.channelStocks = _ChannelList.channelStocks.Select(x =>
// {
// for (int i = 0; i < _ChannelList.channelStocks.Count; i++)
// {
// if (_ChannelList.channelStocks[i].DrawerNo == channelStock.DrawerNo)
// {
// _ChannelList.channelStocks[i].ChannelLst = channelStock.ChannelLst;
// }
// else
// {
// _ChannelList.channelStocks[i].ChannelLst.IsSelected = false;
// }
// }
// return x;
// }).ToList();
// }
// ICollectionView vw = CollectionViewSource.GetDefaultView(_ChannelList.channelStocks);
// vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
// }
//}
private DelegateCommand _rowSelected;
public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
public async void OpenOrderDialog()
{
if (channelStock != null)
if (_ChannelList != null && _ChannelList.channelStocks != null && _ChannelList.State == 0)
{
//channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
if (channelStock.ChannelLst.State == 0)
{
channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
}
else
{
return;
}
if (channelStock != null && ChannelStocks != null)
{
ChannelStocks = ChannelStocks.Select(x =>
{
for (int i = 0; i < ChannelStocks.Count; i++)
{
if (ChannelStocks[i].DrawerNo == channelStock.DrawerNo)
{
ChannelStocks[i].ChannelLst = channelStock.ChannelLst;
}
}
return x;
}).ToList();
}
ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
// 此处延时1毫秒等待页面渲染
await Task.Delay(TimeSpan.FromMilliseconds(1));
//选中药箱号下的所有药品id
DialogParameters dialogParameters = new DialogParameters();
dialogParameters.Add("_ChannelStock", _ChannelList.channelStocks);
DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
}
}
}
}

View File

@ -10,6 +10,21 @@
xmlns:prism="http://prismlibrary.com/"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style x:Key="st" TargetType="GridViewColumnHeader">
<Style.Setters>
<Setter Property="Height">
<Setter.Value>55</Setter.Value>
</Setter>
<Setter Property="Background">
<Setter.Value>#31ccec</Setter.Value>
</Setter>
<Setter Property="Foreground">
<Setter.Value>white</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</UserControl.Resources>
<Grid>
<Grid.Resources>
<!--<CollectionViewSource x:Key="GroupedDataList" Source="{Binding ChannelStocks}">
@ -21,6 +36,19 @@
<convert:TotalCountConverter x:Key="TotalCountConverter" />
<convert:StatusConverter x:Key="StatusConverter" />
<convert:StockStatusConverter x:Key="StockStatusConverter" />
<Style x:Key="st" TargetType="GridViewColumnHeader">
<Style.Setters>
<Setter Property="Height">
<Setter.Value>55</Setter.Value>
</Setter>
<Setter Property="Background">
<Setter.Value>#31ccec</Setter.Value>
</Setter>
<Setter Property="Foreground">
<Setter.Value>white</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@ -73,12 +101,12 @@
Style="{StaticResource MaterialDesignOutlinedLightButton}"
Content="账册报表" />
<Button
<!--<Button
Margin="3 0 3 0"
VerticalAlignment="Center"
Command="{Binding TakeDrugCommand}"
Style="{StaticResource MaterialDesignOutlinedLightButton}"
Content="取药" />
Content="取药" />-->
<Button
Margin="6 0 6 0"
@ -92,7 +120,7 @@
</Grid>
<DataGrid
<!--<DataGrid
Grid.Row="1"
materialDesign:DataGridAssist.ColumnHeaderPadding="15"
ItemsSource="{Binding ChannelStocks,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
@ -110,6 +138,7 @@
<Setter Property="BorderThickness" Value="0.6"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
-->
<!--<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource MaterialDesignDataGridCell}">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="True">
@ -119,6 +148,7 @@
</Style.Triggers>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>-->
<!--
<Style TargetType="DataGridCell">
<Setter Property="Template">
<Setter.Value>
@ -166,12 +196,94 @@
<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 ManuNo}"/>-->
<!--
<DataGridTextColumn IsReadOnly="True" Header="药品基数" Binding="{Binding BaseQuantity}"/>
<DataGridTextColumn IsReadOnly="True" Header="需补药数量" Binding="{Binding AddQuantity}"/>
<DataGridTextColumn IsReadOnly="True" Header="状态" Binding="{Binding ChannelLst.State,Converter={StaticResource StockStatusConverter},ConverterParameter=TextState}"/>
</DataGrid.Columns>
</DataGrid>
</DataGrid>-->
<ListView Grid.ColumnSpan="2"
Padding="0 6 0 0" Grid.Row="1"
ItemsSource="{Binding _ChannelLists, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding _ChannelList}"
materialDesign:ListViewAssist.HeaderRowBackground="#31ccec"
materialDesign:DataGridAssist.ColumnHeaderPadding="10"
materialDesign:ListViewAssist.ListViewItemPadding="13">
<ListView.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
<Setter Property="Foreground" Value="White" />
</Style>
</ListView.Resources>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding RowSelected}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource st}">
<GridViewColumn Width="80"
DisplayMemberBinding="{Binding DrawerNo}"
Header="药箱号"/>
<GridViewColumn Header="药品名称" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" DisplayMemberPath="DrugInfo.DrugName" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="厂家" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" DisplayMemberPath="DrugInfo.Manufactory" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="规格" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" DisplayMemberPath="DrugInfo.DrugSpec" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="基数" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" DisplayMemberPath="BaseQuantity" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="需补药数" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding channelStocks}" DisplayMemberPath="NeedNum" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="100"
DisplayMemberBinding="{Binding State,Converter={StaticResource StockStatusConverter},ConverterParameter=TextState}"
Header="状态"/>
<!--<GridViewColumn Width="200"
DisplayMemberBinding="{Binding Drug.DrugName}"
Header="药品名称"/>
<GridViewColumn Width="200"
DisplayMemberBinding="{Binding Drug.Manufactory}"
Header="厂家"/>
<GridViewColumn Width="200"
DisplayMemberBinding="{Binding Drug.DrugSpec}"
Header="规格"/>
<GridViewColumn Width="100"
DisplayMemberBinding="{Binding BaseQuantity}"
Header="药品基数"/>
<GridViewColumn Width="100"
DisplayMemberBinding="{Binding BaseQuantity}"
Header="需补药数量"/>-->
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>

View File

@ -23,42 +23,42 @@ namespace DM_Weight.Views
/// </summary>
public partial class AddToJiaoJieWindow : UserControl
{
IEventAggregator _eventAggregator;
public AddToJiaoJieWindow(IEventAggregator eventAggregator)
//IEventAggregator _eventAggregator;
public AddToJiaoJieWindow()
{
InitializeComponent();
_eventAggregator = eventAggregator;
//_eventAggregator = eventAggregator;
}
//展开
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
//Expander expander = sender as Expander;
//if (expander != null)
//private void Expander_Expanded(object sender, RoutedEventArgs e)
//{
// // 假设你的数据在DataContext中
// List<ChannelStock> data = expander.DataContext as List<ChannelStock>;
// if (data != null&&data.Count>0)
// //Expander expander = sender as Expander;
// //if (expander != null)
// //{
// // // 假设你的数据在DataContext中
// // List<ChannelStock> data = expander.DataContext as List<ChannelStock>;
// // if (data != null&&data.Count>0)
// // {
// // // 使用data做你需要的操作
// // }
// //}
//}
//收起
//private void Expander_Collapsed(object sender, RoutedEventArgs e)
//{
// Expander expander = sender as Expander;
// if (expander != null)
// {
// // 使用data做你需要的操作
// // 假设你的数据在DataContext中
// CollectionViewGroup group = expander.DataContext as CollectionViewGroup;
// if (group != null)
// {
// ChannelStock internalGroup = group.Items[0] as ChannelStock;
// _eventAggregator.GetEvent<IsSelectedEvent>().Publish(internalGroup);
// }
// }
//}
}
//收起
private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
Expander expander = sender as Expander;
if (expander != null)
{
// 假设你的数据在DataContext中
CollectionViewGroup group = expander.DataContext as CollectionViewGroup;
if (group != null)
{
ChannelStock internalGroup = group.Items[0] as ChannelStock;
_eventAggregator.GetEvent<IsSelectedEvent>().Publish(internalGroup);
}
}
}
}
}

View File

@ -75,7 +75,7 @@
EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"
/>
<DataGridTextColumn Width="100"
Header="数量"
Header="库存"
IsReadOnly="True"
Binding="{Binding Quantity}"
ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"
@ -95,13 +95,25 @@
ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"
EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"
/>
<DataGridTextColumn Width="100"
<!--<DataGridTextColumn Width="100"
Header="取出数量"
IsReadOnly="True"
Binding="{Binding TakeQuantity}"
ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"
EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"
/>
/>-->
<DataGridTemplateColumn Header="取出数量">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Width="80" Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}">
<TextBox.Text>
<Binding Path="TakeQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
</Binding>
</TextBox.Text>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
@ -147,6 +159,9 @@
</StackPanel>
</Grid>
<materialDesign:Snackbar
Background="{Binding SnackbarBackground}"
MessageQueue="{Binding SnackbarMessageQueue}"/>
</Grid>
</materialDesign:Card>
</UserControl>

View File

@ -0,0 +1,174 @@
<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

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace DM_Weight.Views.Dialog
{
/// <summary>
/// AddToJiaoJieNewDialog.xaml 的交互逻辑
/// </summary>
public partial class AddToJiaoJieNewDialog : UserControl
{
public AddToJiaoJieNewDialog()
{
InitializeComponent();
}
}
}