XiangTan_DM/DM_Weight/ViewModels/AddToJiaoJieDialogViewModel.cs

817 lines
42 KiB
C#
Raw Normal View History

2024-12-03 13:22:42 +08:00
using DM_Weight.Models;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
using log4net;
using MaterialDesignThemes.Wpf;
2024-12-03 13:22:42 +08:00
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
2025-07-21 15:24:38 +08:00
using SqlSugar;
2024-12-03 13:22:42 +08:00
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
2025-03-25 16:21:39 +08:00
using System.Windows.Input;
using System.Windows.Media;
2024-12-03 13:22:42 +08:00
namespace DM_Weight.ViewModels
{
public class AddToJiaoJieDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
{
private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
2025-07-21 15:24:38 +08:00
private List<DrugInfo> _drugInfoList = new List<DrugInfo>();
public List<DrugInfo> _DrugInfoList
{
get => _drugInfoList;
set => SetProperty(ref _drugInfoList, value);
}
2024-12-03 13:22:42 +08:00
private List<ChannelStock> _channelStocks = new List<ChannelStock>();
public List<ChannelStock> ChannelStocks
{
get => _channelStocks;
set => SetProperty(ref _channelStocks, value);
}
/// <summary>
/// 交接柜的库位信息
/// </summary>
private List<ChannelStock> _jiaojie_channelStocks;
public List<ChannelStock> Jiaojie_ChannelStocks
{
get => _jiaojie_channelStocks;
set => SetProperty(ref _jiaojie_channelStocks, value);
}
//交接柜所在药箱下的所有药品id
List<string> drugIdLst = new List<string>();
//交接柜中无该批次添加实体
public List<ChannelStock> AddJJStock = new List<ChannelStock>();
//交接柜中有该批次更新实体
public List<ChannelStock> UpdateJJStock = new List<ChannelStock>();
2024-12-03 13:22:42 +08:00
/// <summary>
/// 交接柜的库位信息
/// </summary>
2025-07-21 15:24:38 +08:00
private ChannelStock _jiaojie_cs;
2024-12-03 13:22:42 +08:00
public ChannelStock Jiaojie_cs
{
2025-07-21 15:24:38 +08:00
get => _jiaojie_cs;
set => SetProperty(ref _jiaojie_cs, value);
2024-12-03 13:22:42 +08:00
}
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
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);
}
2024-12-03 13:22:42 +08:00
public string Title => "交接柜补药";
public bool KeepAlive => false;
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return Status == 0;
}
public void OnDialogClosed()
{
// 取消消息订阅
_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
}
public void OnDialogOpened(IDialogParameters parameters)
{
_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
Jiaojie_ChannelStocks = parameters.GetValue<List<ChannelStock>>("_ChannelStock");
2024-12-03 13:22:42 +08:00
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 }).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();
2024-12-03 13:22:42 +08:00
RequestData();
}
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
IDialogService _dialogService;
public AddToJiaoJieDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
{
_dialogService = DialogService;
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
void DoMyPrismEvent(DeviceMsg msg)
{
if (msg.WindowName == "OrderTakeDrugWindow")
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
switch (msg.EventType)
{
// 抽屉打开
case EventType.DRAWEROPEN:
if (Status == 1)
{
if (channelStocks[0].process == 1)
{
channelStocks.ForEach(it => it.process = 2);
}
}
//是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
CheckIsFridgeOpen();
break;
// 抽屉关闭
case EventType.DRAWERCLOSE:
if (Status == 1)
{
if (channelStocks[0].process == 2)
{
channelStocks.ForEach(it => it.process = 3);
}
IGrouping<int, ChannelStock> groupingBefore = enumerator.Current;
int DrawerNoBefore = groupingBefore.Key;
if (enumerator.MoveNext())
{
IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
int DrawerNoAfter = groupingAfter.Key;
if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
{
Thread.Sleep(50);
}
OpenOneByOne();
}
// 已经全部取出
else
{
Status = 3;
}
}
//是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
CheckIsFridgeClose();
break;
// 数量变化
case EventType.UPDATEQUANTITY:
if (Status == 1)
{
logger.Info($"抽屉【{DrawerNo}】库位取药数量【{msg.Quantitys}】");
}
break;
// 打开失败
case EventType.OPENERROR:
AlertMsg alertMsg = new AlertMsg
{
Message = msg.Message,
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
Status = 0;
break;
}
}
}
private int _status = 0;
public int Status
{
get => _status; set => SetProperty(ref _status, value);
}
public async void RequestData()
{
2025-07-21 15:24:38 +08:00
//List<ChannelStock> channelStocks = new List<ChannelStock>();
List<DrugInfo> drugList = new List<DrugInfo>();
2024-12-03 13:22:42 +08:00
for (int i = 0; i < ChannelStocks.Count; i++)
{
2025-07-21 15:24:38 +08:00
DrugInfo drug = ChannelStocks[i].DrugInfo;
drug.NeedQuantity = ChannelStocks[i].AddQuantity;
2024-12-03 13:22:42 +08:00
List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
2025-07-21 15:24:38 +08:00
//.Includes<DrugInfo>(cs => cs.DrugInfo)
2024-12-03 13:22:42 +08:00
.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)
//.OrderBy(cs => cs.EffDate)
.OrderBy(cs => new { cs.EffDate, cs.DrawerNo, cs.ColNo })
2024-12-03 13:22:42 +08:00
.ToList();
if (HasQChannels != null && HasQChannels.Count > 0)
2024-12-03 13:22:42 +08:00
{
int total = HasQChannels.Sum(it => it.Quantity);
int TakeQ = ChannelStocks[i].AddQuantity;
// 说明数量足够
//if (total >= TakeQ)
//{
2025-07-21 15:24:38 +08:00
//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)
2024-12-03 13:22:42 +08:00
{
2025-07-21 15:24:38 +08:00
HasQChannels[j].TakeQuantity = HasQChannels[j].Quantity;
hadTakeQ += HasQChannels[j].Quantity;
}
else
{
HasQChannels[j].TakeQuantity = ChannelStocks[i].AddQuantity - hadTakeQ;
break;
2024-12-03 13:22:42 +08:00
}
2025-07-21 15:24:38 +08:00
}
if (drug.channelStocks == null)
{
drug.channelStocks = new List<ChannelStock>();
}
drug.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);
//}
2024-12-03 13:22:42 +08:00
}
else
{
ChannelStock channel = ChannelStocks[i];
channel.ColNo = -1;
channel.Quantity = 0;
channel.ManuNo = null;
channel.EffDate = null;
channel.TakeQuantity = 0;
2025-07-21 15:24:38 +08:00
if (drug.channelStocks == null)
{
drug.channelStocks = new List<ChannelStock>();
}
drug.channelStocks.Add(channel);
2024-12-03 13:22:42 +08:00
}
2025-07-21 15:24:38 +08:00
_DrugInfoList.Add(drug);
2024-12-03 13:22:42 +08:00
}
}
public DelegateCommand OpenDrawer
{
get => new DelegateCommand(async () =>
{
if (Status == 0)
{
if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
{
//查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开其他6层管理员才能开
2025-07-21 15:24:38 +08:00
bool bDrawer = _DrugInfoList.Where(di => di.channelStocks.Select(it => it.DrawerNo).Where(n => n > 2).Any()).Count() > 0;
2024-12-03 13:22:42 +08:00
if (bDrawer)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "当前用户没有打开抽屉的权限!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
}
2025-07-21 15:24:38 +08:00
enumerable = _DrugInfoList.SelectMany(di => di.channelStocks).Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
// enumerable = ChannelStocks.Where(cs => cs.TakeQuantity > 0).GroupBy(cs => cs.DrawerNo, cs => cs);
if (enumerable != null && enumerable.Count() > 0)
{
enumerator = enumerable.GetEnumerator();
enumerator.MoveNext();
Status = 1;
OpenOneByOne();
}
else
{
AlertMsg alertMsg = new AlertMsg
{
Message = "没有可补药品!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
return;
}
2024-12-03 13:22:42 +08:00
}
});
}
private void OpenOneByOne()
{
IGrouping<int, ChannelStock> grouping = enumerator.Current;
if (grouping != null)
{
int DrawerNo = grouping.Key;
List<ChannelStock> channelStocks = grouping.ToList();
channelStocks.ForEach(it => it.process = 1);
_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
2024-12-03 13:22:42 +08:00
List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
2024-12-03 13:22:42 +08:00
// 发送取药数量
singleChannels.ForEach(it =>
2024-12-03 13:22:42 +08:00
{
try
{
2024-12-03 13:22:42 +08:00
_portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
}
catch (Exception ex)
2024-12-03 13:22:42 +08:00
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"打开抽屉异常{ex.Message}",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
});
2024-12-03 13:22:42 +08:00
_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();
}
2024-12-03 13:22:42 +08:00
}
private bool _isFinishClick = false;
// 完成按钮
public DelegateCommand TakeFinish
{
get => new DelegateCommand(async () =>
2024-12-03 13:22:42 +08:00
{
if (!_isFinishClick)
{
2024-12-03 13:22:42 +08:00
_isFinishClick = true;
2025-07-21 15:24:38 +08:00
List<ChannelStock> record = _DrugInfoList.SelectMany(di => di.channelStocks).Where(cs => cs.TakeQuantity > 0).ToList();
2024-12-03 13:22:42 +08:00
if (record.Count > 0)
{
//交接柜需要补药数量与加药数量对比,数量不一致则提示
2025-07-21 15:24:38 +08:00
var jjSum = from item in Jiaojie_ChannelStocks orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.AddQuantity) };
var csSum = from item in record orderby item.DrugId group item by item.DrugId into g select new { DrugId = g.Key, Quantity = g.Sum(item => item.TakeQuantity) };
foreach (var jjItem in jjSum)
{
foreach (var csItem in csSum)
{
if (jjItem.DrugId == csItem.DrugId)
{
if (jjItem.Quantity < csItem.Quantity)
{
SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
//SnackbarMessageQueue.Enqueue("输入药品数量与需要补药品数不一致!");
SnackbarMessageQueue.Enqueue("输入药品数量大于需要补药数!");
_isFinishClick = false;
return;
}
}
}
}
2024-12-03 13:22:42 +08:00
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();
// 保存数据 出库记录
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,
Status = 2,//给交接柜补药不用还空瓶等真正用了以后再还空瓶所以先把状态置为2
InvoiceId = InvoiceId
}).ExecuteCommand();
}
//更新 交接柜 批次信息
for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
{
ChannelStock jiaoStock = Jiaojie_ChannelStocks[i];
2025-07-21 15:24:38 +08:00
List<ChannelStock> csStockList = record.Where(cs => cs.DrugId == jiaoStock.DrugId && cs.TakeQuantity > 0).ToList();
if (csStockList != null && csStockList.Count > 0)
{
2025-07-21 15:24:38 +08:00
int jjNeedQuantity = jiaoStock.AddQuantity;// SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == jiaoStock.DrawerNo && cs.DrugId == jiaoStock.DrugId && cs.MachineId == jiaoStock.MachineId).Sum(cs => (cs.BaseQuantity-cs.Quantity));
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++)
{
2025-07-21 15:24:38 +08:00
// 保存数据 记录
SqlSugarHelper.Db.Insertable(new MachineRecord()
{
MachineId = jiaoStock.MachineId,
DrawerNo = jiaoStock.DrawerNo,
DrugId = jiaoStock.DrugId,
ManuNo = csStockList[i].ManuNo,
Operator = HomeWindowViewModel.Operator?.Id,
Reviewer = HomeWindowViewModel.Reviewer?.Id,
OperationTime = DateTime.Now,
Quantity = csStockList[i].TakeQuantity,
Type = 55,
Status = 2,//给交接柜补药不用还空瓶等真正用了以后再还空瓶所以先把状态置为2
InvoiceId = $"毒麻柜{csStockList[i].Location}给交接柜{jiaoStock.DrawerNo}补药"
}).ExecuteCommand();
ChannelStock csStock = (ChannelStock)csStockList[j].Clone();
ChannelStock jjStockManuNo = SqlSugarHelper.Db.Queryable<ChannelStock>()
.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;
2025-07-21 15:24:38 +08:00
logger.Info($"需补药数{Jiaojie_ChannelStocks[i].AddQuantity},该批次取药数{csStock.TakeQuantity}");
//有该批次
2025-07-21 15:24:38 +08:00
if (Jiaojie_ChannelStocks[i].AddQuantity > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
//newStock.Chnguid = jiaoStock.Chnguid;
newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.ManuNo = Jiaojie_ChannelStocks[i].ManuNo;
newStock.EffDate = Jiaojie_ChannelStocks[i].EffDate;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
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;
UpdateJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
csStockList[j].TakeQuantity = 0;
2025-07-21 15:24:38 +08:00
Jiaojie_ChannelStocks[i].AddQuantity = Jiaojie_ChannelStocks[i].AddQuantity - csStock.TakeQuantity;
}
else
{
//够取
//jiaoStock.AddQuantity = jiaoStock.Quantity+ jiaoStock.NeedNum;
//jiaoStock.NeedNum = 0;
//AddJJStock.Add(jiaoStock);
//csStock.Quantity = csStock.Quantity - jiaoStock.NeedNum;
//csStockList[j].Quantity = csStock.Quantity - jiaoStock.NeedNum;
ChannelStock newStock = new ChannelStock();
//newStock.Chnguid = jiaoStock.Chnguid;
newStock.BaseQuantity = jiaoStock.BaseQuantity;
newStock.ManuNo = Jiaojie_ChannelStocks[i].ManuNo;
newStock.EffDate = Jiaojie_ChannelStocks[i].EffDate;
newStock.DrawerNo = Jiaojie_ChannelStocks[i].DrawerNo;
newStock.DrugId = Jiaojie_ChannelStocks[i].DrugId;
2025-07-21 15:24:38 +08:00
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].AddQuantity;
newStock.Id = jjStockManuNo.Id;
newStock.State = 1;
//newStock.MachineId = jiaoStock.MachineId;
//newStock.NeedNum = 0;
//newStock.Quantity = jiaoStock.Quantity + csStock.TakeQuantity;
UpdateJJStock.Add(newStock);
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
2025-07-21 15:24:38 +08:00
csStockList[j].TakeQuantity = csStock.TakeQuantity - Jiaojie_ChannelStocks[i].AddQuantity;
Jiaojie_ChannelStocks[i].AddQuantity = 0;
break;
}
}
else //没有该批次
{
2025-07-21 15:24:38 +08:00
if (Jiaojie_ChannelStocks[i].AddQuantity > csStock.TakeQuantity)
{
//不够取
ChannelStock newStock = new ChannelStock();
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.EffDate = csStock.EffDate;
newStock.AddToJJNum = csStock.TakeQuantity;
newStock.Id = Guid.NewGuid().ToString();
newStock.MachineId = Jiaojie_ChannelStocks[i].MachineId;
newStock.DrawerType = 1;
2025-07-21 15:24:38 +08:00
newStock.AddQuantity = 0;
newStock.State = 1;
AddJJStock.Add(newStock);
2025-07-21 15:24:38 +08:00
Jiaojie_ChannelStocks[i].AddQuantity = Jiaojie_ChannelStocks[i].AddQuantity - csStock.TakeQuantity;
csStockList[j].CheckQuantity = csStockList[j].TakeQuantity;
csStockList[j].TakeQuantity = 0;
}
else
{
//够取
ChannelStock newStock = new ChannelStock();
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.EffDate = csStock.EffDate;
2025-07-21 15:24:38 +08:00
newStock.AddToJJNum = Jiaojie_ChannelStocks[i].AddQuantity;
newStock.AddQuantity = 0;
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;
break;
}
}
}
2025-07-21 15:24:38 +08:00
//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() { 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();
}
2025-07-21 15:24:38 +08:00
}
//保存交接柜数据
if (AddJJStock != null && AddJJStock.Count > 0)
{
AddJJStock = AddJJStock.GroupBy(jj => new { jj.DrawerNo, jj.DrugId, jj.ManuNo })
.Select(jj =>
{
var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
2025-07-21 15:24:38 +08:00
//ret.NeedNum = 0;
return ret;
}).ToList();
SqlSugarHelper.Db.Insertable(AddJJStock).ExecuteCommand();
}
if (UpdateJJStock != null && UpdateJJStock.Count > 0)
{
UpdateJJStock = UpdateJJStock.GroupBy(jj => new { jj.DrawerNo, jj.DrugId, jj.ManuNo })
.Select(jj =>
{
var ret = jj.First();
ret.AddToJJNum = jj.Sum(itx => itx.AddToJJNum);
2025-07-21 15:24:38 +08:00
//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, State = 1 }).Where(cs => cs.Id == UpdateJJStock[i].Id).ExecuteCommand();
}
}
2024-12-03 13:22:42 +08:00
//保存注射剂报表信息
for (int j = 0; j < Jiaojie_ChannelStocks.Count; j++)
{
ChannelStock jStock = Jiaojie_ChannelStocks[j];
if (jStock.DrugInfo.Dosage == "注射剂")
{
int totalBaseNum = SqlSugarHelper.Db.Queryable<DrugBase>().
Where(db => db.DrugId == jStock.DrugId && db.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3")).Select(db => db.BaseQuantity).First();
string belognUser = SqlSugarHelper.Db.Queryable<ChannelList>().
Where(cl => cl.DrawerNo == jStock.DrawerNo && cl.MachineId == jStock.MachineId).Select(cl => cl.BelongUser).First();
DrugInfo di = SqlSugarHelper.Db.Queryable<DrugInfo>().Where(di => di.DrugId == jStock.DrugId).First();
SqlSugarHelper.Db.Insertable(new RejectionReport()
{
SendDate = DateTime.Parse(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm")),
SendUser = HomeWindowViewModel.Operator?.Nickname,
ReceiveUser = belognUser,//Jiaojie_ChannelStocks
DrugId = jStock.DrugId,
DrugName = di.DrugName,
DrugSpec = di.DrugSpec,
BaseNum = totalBaseNum + "支",//总基数
DrawerNo = jStock.DrawerNo
}).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();
// }
// );
//}
2024-12-03 13:22:42 +08:00
return true;
});
if (f.Data)
{
//Task.Factory.StartNew(() =>
//{
// 更新屏显库存
//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);
// Thread.Sleep(150);
// });
//}
List<ChannelStock> singleChannelsBoxSmart = record.FindAll(it => it.BoardType == 35);
if ((singleChannelsBoxSmart.Count > 0 ? singleChannelsBoxSmart[0].BoardType : 1) == 35)
{
for (int i = 0; i < singleChannelsBoxSmart.Count; i++)
{
ChannelStock it = singleChannelsBoxSmart[i];
await _portUtil.WriteQuantityMethod((it.Quantity - it.CheckQuantity), it.DrawerNo, it.ColNo);
}
}
//});
2024-12-03 13:22:42 +08:00
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存已更新",
Type = MsgType.SUCCESS,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
if (!f.IsSuccess)
{
AlertMsg alertMsg = new AlertMsg
{
Message = "抽屉取药完成,库存更新失败!",
Type = MsgType.ERROR,
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
Status = 0;
2025-07-21 15:24:38 +08:00
_isFinishClick = false;
_portUtil.OperateFinish = true;
2024-12-03 13:22:42 +08:00
//RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
}
else
{
_isFinishClick = false;
AlertMsg alertMsg = new AlertMsg
{
Message = "没有填写取药数量",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
}
}
});
}
public long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
// 取消按钮
public DelegateCommand CancleTake
{
get => new DelegateCommand(() =>
{
_portUtil.ResetData();
Status = 0;
_portUtil.OperateFinish = true;
2024-12-03 13:22:42 +08:00
});
}
//检查是否是冰箱抽屉(冰箱抽屉打开时需要发送冰箱延迟报警的指令)
public async Task CheckIsFridgeOpen()
{
//if (ChannelStocks != null && ChannelStocks.Count > 0)
//{
// if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
// {
// _portUtil.FridgeOperate = true;
// //发送冰箱延迟报警的指令
// await _portUtil.FridgeDelayWarm();
// _portUtil.FridgeOperate = false;
// }
//}
}
//检查是否是冰箱抽屉(冰箱抽屉关闭时需要查询冰箱温度如温度不在范围则发送冰箱延迟报警的指令)
public async Task CheckIsFridgeClose()
{
//if (ChannelStocks != null && ChannelStocks.Count > 0)
//{
// if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
// {
// string[] iTempertureRange = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
// //发送查询冰箱温度的指令
// float temperature = await _portUtil.GetFridgeTemperature();
// if (temperature > Convert.ToSingle(iTempertureRange[0]) && temperature < Convert.ToSingle(iTempertureRange[1]))
// {
// _portUtil.FridgeOperate = true;
// //发送冰箱延迟报警的指令
// await _portUtil.FridgeDelayWarm();
// _portUtil.FridgeOperate = false;
// }
// }
//}
}
public DelegateCommand BtnCloseCommand
{
get => new DelegateCommand(() =>
{
if (Status != 0)
{
_portUtil.ResetData();
Status = 0;
}
//DialogParameters parameters = new DialogParameters();
//parameters.Add("",);
// 关闭当前窗口
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
}
}
}