using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.select; using DM_Weight.util; using log4net; using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Media; namespace DM_Weight.ViewModels { public class AddSurgeryDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime { public string Title => "录入手术"; public bool KeepAlive => false; private List machineRecordList; public List MachineRecordList { get => machineRecordList; set => SetProperty(ref machineRecordList, value); } 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); } private string? _searchValue; /// /// 查询条件 查询字段值 /// public string? SearchValue { get { return _searchValue; } set { SetProperty(ref _searchValue, value); RequestData(); } } public static List StaticSelects = new() { new OrderTakeSelect { Code = "DrugName", Name = "药品名称" }, new OrderTakeSelect { Code = "PyCode", Name = "拼音码" }, new OrderTakeSelect { Code = "DrugBarcode", Name = "药品条码" }, new OrderTakeSelect { Code = "DrugId", Name = "药品编码" } }; private List _selects = StaticSelects; public List Selects { get { return _selects; } set { SetProperty(ref _selects, value); } } private static List> keyValuePairs = new List>() { new Dictionary(){ {0,"男"} },new Dictionary(){ { 1, "女" } } }; public List> SexKeyValue { get { return keyValuePairs; } set { SetProperty(ref keyValuePairs, value); } } private Dictionary _selectedSex = keyValuePairs[0]; public Dictionary SelectedSex { get => _selectedSex; set => SetProperty(ref _selectedSex, value); } private SurgicalSchedule surgicalSchedule = new SurgicalSchedule(); public SurgicalSchedule _SurgicalSchedule { get => surgicalSchedule; set => SetProperty(ref surgicalSchedule, value); } private int _totalCount = 0; public int TotalCount { get => _totalCount; set => SetProperty(ref _totalCount, value); } private int _pageNum = 1; public int PageNum { get => _pageNum; set { SetProperty(ref _pageNum, value); RequestData(); } } private int _pageCount = 1; public int PageCount { get => _pageCount; set { SetProperty(ref _pageCount, value); } } private int _pageSize = 5; public int PageSize { get => _pageSize; set { SetProperty(ref _pageSize, value); } } private int _status = 0; public int Status { get => _status; set => SetProperty(ref _status, value); } List ReturnStockLst; private IEnumerable> enumerable; private IEnumerator> enumerator; private OrderTakeSelect _selectedItem = StaticSelects[0]; /// /// 查询条件 查询字段 /// public OrderTakeSelect SelectedItem { get { return _selectedItem; } set { SetProperty(ref _selectedItem, value); RequestData(); } } private MachineRecord selectedRecord; public MachineRecord SelectedRecord { get => selectedRecord; set => SetProperty(ref selectedRecord, value); } private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel)); public event Action RequestClose; public bool CanCloseDialog() { return Status == 0; } public void OnDialogClosed() { // 取消消息订阅 _eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent); } public void OnDialogOpened(IDialogParameters parameters) { _eventAggregator.GetEvent().Subscribe(DoMyPrismEvent); RequestData(); } private PortUtil _portUtil; IEventAggregator _eventAggregator; IDialogService _dialogService; public AddSurgeryDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService) { surgicalSchedule.ScheduleTime= DateTime.Now; _SurgicalSchedule.Indate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); _dialogService = DialogService; _portUtil = portUtil; _eventAggregator = eventAggregator; } public async void RequestData() { int totalCount = 0; MachineRecordList = SqlSugarHelper.Db.Queryable() .Includes(mr => mr.DrugInfo) .Includes(mr => mr.User) .Includes(mr => mr._SurgicalScheduleDetailLst) .Where(mr => mr.Type == 2) .Where(mr => mr.Status < 2) .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) //.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue)) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue)) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (mr) => mr.DrugInfo.PyCode.Contains(SearchValue)) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (mr) => mr.DrugInfo.DrugBarcode.Contains(SearchValue)) .OrderBy(mr => mr.OperationTime) .ToPageList(PageNum, PageSize, ref totalCount); MachineRecordList.ForEach(mr => mr.HasCheckNum = mr._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity)); TotalCount = totalCount; } public DelegateCommand BtnCloseCommand { get => new DelegateCommand(() => { // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); }); } /// /// 选中行事件 /// public DelegateCommand RowSelected { get => new DelegateCommand(() => { if (SelectedRecord != null && selectedRecord.Id != null) { MachineRecordList = MachineRecordList.Select(x => { if (x.Id == SelectedRecord.Id) { x.IsSelected = !x.IsSelected; if (x.IsSelected) { if (SelectedRecord._SurgicalScheduleDetailLst != null && SelectedRecord._SurgicalScheduleDetailLst.Count > 0) { //已经核销数 int HasCheckNum = SelectedRecord._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity); x.CheckQuantity = SelectedRecord.Quantity - HasCheckNum; x.ReturnQuantity1 = SelectedRecord.Quantity - HasCheckNum - x.CheckQuantity; x.ReturnQuantity2 = HasCheckNum + x.CheckQuantity; } else { x.CheckQuantity = SelectedRecord.Quantity; x.ReturnQuantity1 = 0; x.ReturnQuantity2 = SelectedRecord.Quantity; } } else { x.CheckQuantity = 0; x.ReturnQuantity1 = 0; x.ReturnQuantity2 = 0; } } return x; }).ToList(); } }); } /// /// 保存并核销 /// public DelegateCommand AddSurgeryCommand { get => new DelegateCommand(() => { if (!string.IsNullOrEmpty(_SurgicalSchedule.OperationId)) { //检查是否有该手术号,手术号不能重复 int iCount= SqlSugarHelper.Db.Queryable().Where(ss => ss.OperationId == _SurgicalSchedule.OperationId).Count(); if(iCount>0) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("该手术号已添加,请勿重复创建"); return; } List RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity > 0).ToList(); if (RecordsLst.Count > 0) { //string operationId = Guid.NewGuid().ToString(); var f = SqlSugarHelper.Db.UseTran(() => { SqlSugarHelper.Db.Insertable(new SurgicalSchedule() { PName = _SurgicalSchedule.PName, Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1], Age = _SurgicalSchedule.Age, IdNumber = _SurgicalSchedule.IdNumber, OpRoomCode = _SurgicalSchedule.OpRoomCode, OpRoomName = _SurgicalSchedule.OpRoomName, OperationId = _SurgicalSchedule.OperationId, ScheduleTime = _SurgicalSchedule.ScheduleTime, InsertTime=DateTime.Now, Indiagnosis=_SurgicalSchedule.Indiagnosis, Indate=_SurgicalSchedule.Indate, DmStatus = 1, }).ExecuteCommand(); for (int i = 0; i < RecordsLst.Count; i++) { SqlSugarHelper.Db.Insertable(new SurgicalScheduleDetail() { OperationId = _SurgicalSchedule.OperationId, GetRecordId = RecordsLst[i].Id, Quantity = RecordsLst[i].CheckQuantity, DrugId = RecordsLst[i].DrugId, ManuNo = RecordsLst[i].ManuNo, EffDate = RecordsLst[i].EffDate.ToString(), InsertUserId = HomeWindowViewModel.Operator?.Id, }).ExecuteCommand(); int hasQuantity = RecordsLst[i]._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity); int dmStatus = 0; //已经全部挂上钩,修改dm_machine_record状态为完成 //if (hasQuantity + RecordsLst[i].CheckQuantity == RecordsLst[i].Quantity) //{ // dmStatus = 2; //} //else { dmStatus = 1; } SqlSugarHelper.Db.Updateable(new MachineRecord() { Status = dmStatus, Id = RecordsLst[i].Id }).UpdateColumns(it => new { it.Status }).WhereColumns(it => new { it.Id }).ExecuteCommand(); } }); if (f.IsSuccess) { AlertMsg alertMsg = new AlertMsg { Message = "核销完成", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("核销异常,未核销数据"); } } else { int iRet = SqlSugarHelper.Db.Insertable(new SurgicalSchedule() { PName = _SurgicalSchedule.PName, Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1], Age = _SurgicalSchedule.Age, IdNumber = _SurgicalSchedule.IdNumber, OpRoomCode = _SurgicalSchedule.OpRoomCode, OpRoomName = _SurgicalSchedule.OpRoomName, OperationId = _SurgicalSchedule.OperationId, ScheduleTime= _SurgicalSchedule.ScheduleTime, Indiagnosis = _SurgicalSchedule.Indiagnosis, Indate = _SurgicalSchedule.Indate, InsertTime = DateTime.Now, DmStatus = 0, HisState=1 }).ExecuteCommand(); if (iRet > 0) { AlertMsg alertMsg = new AlertMsg { Message = "手术录入成功,未核销药品", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("手术录入失败"); } } } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("手术号不能为空"); } }); } /// /// 全部归还(还药、还空瓶) /// public DelegateCommand ReturnCommand { get => new DelegateCommand(() => { List RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity == 0).ToList(); ReturnStockLst = new List(); if (RecordsLst.Count > 0) { //待还药的记录 List ReturnDrugLst = RecordsLst.Where(rl => rl.ReturnQuantity1 > 0).ToList(); //待还空瓶的记录 List ReturnEmptyLst = RecordsLst.Where(rl => rl.ReturnQuantity2 > 0).ToList(); for (int i = 0; i < ReturnDrugLst.Count; i++) { ChannelStock queryData = SqlSugarHelper.Db.Queryable() .Includes(cs => cs.DrugInfo) .Where(cs => cs.DrugId == ReturnDrugLst[i].DrugId) .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) .Where(cs => cs.ManuNo == ReturnDrugLst[i].ManuNo) .OrderBy(cs => cs.Quantity).First(); if (queryData != null) { queryData.AddQuantity = ReturnDrugLst[i].ReturnQuantity1; queryData.MachineRecordId = ReturnDrugLst[i].Id; ReturnStockLst.Add(queryData); } } for (int j = 0; j < ReturnEmptyLst.Count; j++) { ChannelStock queryData = SqlSugarHelper.Db.Queryable() .Includes(cs => cs.DrugInfo) .Where(cs => cs.DrugId == ReturnEmptyLst[j].DrugId) .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) //.Where(cs => cs.ManuNo == ReturnEmptyLst[j].ManuNo) .Where(cs => cs.DrawerType == 2) .OrderBy(cs => cs.Quantity).First(); if (queryData != null) { queryData.ReturnQuantity = ReturnEmptyLst[j].ReturnQuantity2; queryData.MachineRecordId = ReturnEmptyLst[j].Id; ReturnStockLst.Add(queryData); } } if (ReturnStockLst != null && ReturnStockLst.Count > 0) { ReturnStockLst = ReturnStockLst.OrderBy(cls => cls.DrawerNo).ToList(); //还药时AddQuantity有值;还空瓶时ReturnQuantity有值 enumerable = ReturnStockLst.GroupBy(cs => cs.DrawerNo, cs => cs); enumerator = enumerable.GetEnumerator(); enumerator.MoveNext(); Status = 1; OpenOneByOne(); } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("选中数据未绑定库位,请先进行绑定库位"); } } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("未选中数据,或选中数据核销数量不为0"); } }); } /// /// 刷新 /// public DelegateCommand QueryCommand { get => new DelegateCommand(() => { RequestData(); }); } void DoMyPrismEvent(DeviceMsg msg) { if (msg.WindowName == "SurgeryTakeWindow") { IGrouping grouping = enumerator.Current; int DrawerNo = grouping.Key; List channelStocks = grouping.ToList(); switch (msg.EventType) { // 抽屉打开 case EventType.DRAWEROPEN: if (Status == 1) { if (channelStocks[0].process == 1) { channelStocks.ForEach(it => it.process = 2); } } break; // 抽屉关闭 case EventType.DRAWERCLOSE: if (Status == 1) { if (channelStocks[0].process == 2) { channelStocks.ForEach(it => it.process = 3); } IGrouping groupingBefore = enumerator.Current; int DrawerNoBefore = groupingBefore.Key; if (enumerator.MoveNext()) { IGrouping groupingAfter = enumerator.Current; int DrawerNoAfter = groupingAfter.Key; if (DrawerNoBefore < 9 && DrawerNoAfter > 8) { Thread.Sleep(50); } OpenOneByOne(); } // 已经全部取出 else { Status = 3; //保存数据 //TakeFinish(); } } 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().Publish(alertMsg); Status = 0; break; } } } private void OpenOneByOne() { IGrouping grouping = enumerator.Current; int DrawerNo = grouping.Key; List channelStocks = grouping.ToList(); channelStocks.ForEach(it => it.process = 1); string drugName = channelStocks[0].DrugInfo.DrugName; int drugQuantity = channelStocks.Sum(cs => cs.AddQuantity); int emptyQuantity = channelStocks.Sum(cs => cs.ReturnQuantity); string speakTxt = $"正在打开{DrawerNo}号抽屉,请将{drugName}的"; if (drugQuantity > 0) { speakTxt += $"{drugQuantity}个药放入抽屉!"; } if (emptyQuantity > 0) { speakTxt += $"{emptyQuantity}个空瓶放入抽屉!"; } _portUtil.SpeakAsync(speakTxt); //List singleChannels = channelStocks.FindAll(it => it.BoardType != 1); // 发送取药数量 //singleChannels.ForEach(it => //{ // try // { // _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().Publish(alertMsg); // } //}); _portUtil.WindowName = "SurgeryTakeWindow"; _portUtil.BoardType = channelStocks.Count > 0 ? channelStocks[0].BoardType : 1; _portUtil.ColNos = channelStocks.Select(it => it.ColNo).ToArray(); _portUtil.DrawerNo = DrawerNo; _portUtil.Start(); } private bool _isFinishClick = false; public bool IsFinishClick { get => _isFinishClick; set => SetProperty(ref _isFinishClick, value); } //完成 private void TakeFinish() { IsFinishClick = true; bool bRet = false; var f = SqlSugarHelper.Db.UseTran(() => { for (int i = 0; i < ReturnStockLst.Count; i++) { ChannelStock it = ReturnStockLst[i]; int quantity = 0; if (it.AddQuantity > 0) //还药 { quantity = it.AddQuantity; bRet = ReturnDrug(it); } else { quantity = it.ReturnQuantity; bRet = ReturnEmpty(it); } if (!bRet) { break; } // 更新屏显库存 if (it.BoardType == 5) { _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + quantity); } AlertMsg alertMsg = new AlertMsg { Message = "操作完成,库存已更新", Type = MsgType.SUCCESS, }; _eventAggregator.GetEvent().Publish(alertMsg); // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); } return bRet; }); if (!f.IsSuccess || !f.Data) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("库存更新失败!"); } Status = 0; IsFinishClick = false; RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); } /// /// 还药 /// private bool ReturnDrug(ChannelStock stock) { try { var f = SqlSugarHelper.Db.UseTran(() => { string InvoiceId = "RETURN_" + CurrentTimeMillis(); ; MachineRecord recordInfo = SqlSugarHelper.Db.Queryable().Where(rd => rd.Id == stock.MachineRecordId).First(); // 更新数据 库存信息 SqlSugarHelper.Db.Updateable(new ChannelStock() { Quantity = stock.Quantity + stock.AddQuantity, Id = stock.Id, }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand(); // 获取更新完库存后的药品库存 List nowChannels = SqlSugarHelper.Db.Queryable() .Where(cs => cs.MachineId.Equals(stock.MachineId)) .Where(cs => cs.DrugId.Equals(stock.DrugId)) .Where(cs => cs.DrawerType == 1) .ToList(); // 更新数据 取药记录 设置还药数量、状态 SqlSugarHelper.Db.Updateable(new MachineRecord() { ReturnQuantity1 = recordInfo.ReturnQuantity1 + stock.AddQuantity, Id = recordInfo.Id, Status = (recordInfo.CanReturnQuantity - stock.AddQuantity) == 0 ? 2 : 1, }).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand(); // 保存数据 还药记录 SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = stock.MachineId, DrawerNo = stock.DrawerNo, ColNo = stock.ColNo, DrugId = stock.DrugId, ManuNo = stock.ManuNo, EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = HomeWindowViewModel.Operator?.Id, OperationTime = DateTime.Now, Quantity = stock.AddQuantity, Type = 31, InvoiceId = InvoiceId, GetId = stock.MachineRecordId //,StockQuantity = nowChannels.Sum(it => it.Quantity) }).ExecuteCommand(); //保存账册 SqlSugarHelper.Db.Insertable(new AccountBookG2() { DrugId = Convert.ToInt32(stock.DrugId), Type = 1, Department = ConfigurationManager.AppSettings["department"].ToString(), InvoiceNo = InvoiceId, ManuNo = stock.ManuNo, EffDate = stock.EffDate, AddQuantity = stock.AddQuantity, UserId1 = HomeWindowViewModel.Operator?.Id, UserId2 = HomeWindowViewModel.Reviewer?.Id, MachineId = ConfigurationManager.AppSettings["machineId"].ToString(), CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), CreateTime = DateTime.Now }).ExecuteCommand(); //修改凌晨生成的日结存数据 AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable() .Where(ab => ab.MachineId.Equals(stock.MachineId)) .Where(ab => ab.Type == 3) .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId)) .Where(ab => ab.ManuNo == stock.ManuNo) .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); if (accountBookG2Day != null) { accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + stock.AddQuantity; SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand(); } else { //生成日结存时可能没有该库位的绑定信息,需要写入日结存 int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2() { DrugId = Convert.ToInt32(stock.DrugId), Type = 3, ManuNo = stock.ManuNo, EffDate = stock.EffDate, YQuantity = 0, ManuStock = stock.ReturnQuantity, TotalStock = stock.ReturnQuantity, UserId1 = HomeWindowViewModel.Operator?.Id, UserId2 = HomeWindowViewModel.Reviewer?.Id, MachineId = ConfigurationManager.AppSettings["machineId"].ToString(), CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), InvoiceNo = "日结存" }).ExecuteCommand(); if (iDayResult <= 0) { logger.Info($"未写入日结存数据{stock.DrugId}-{stock.ManuNo}-{stock.EffDate}-{stock.AddQuantity}"); } } //修改凌晨生成的总结存数据 AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable() .Where(ab => ab.MachineId.Equals(stock.MachineId)) .Where(ab => ab.Type == 4) .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId)) .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); if (accountBookG2Total != null) { accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + stock.AddQuantity; SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand(); } else { //生成总结存时可能没有该库位的绑定信息,需要写入总结存 int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2() { DrugId = Convert.ToInt32(stock.DrugId), Type = 4, YQuantity = 0, ManuStock = stock.ReturnQuantity, TotalStock = stock.ReturnQuantity, UserId1 = HomeWindowViewModel.Operator?.Id, UserId2 = HomeWindowViewModel.Reviewer?.Id, MachineId = ConfigurationManager.AppSettings["machineId"].ToString(), CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), InvoiceNo = "总结存" }).ExecuteCommand(); if (iTotalResult <= 0) { logger.Info($"未写入总结存数据{stock.DrugId}-{stock.AddQuantity}"); } } }); if (f.IsSuccess) { return true; } else { return false; } } catch (Exception) { throw; } } /// /// 还空瓶 /// private bool ReturnEmpty(ChannelStock stock) { string InvoiceId = "RETURN_" + CurrentTimeMillis(); var f = SqlSugarHelper.Db.UseTran(() => { // 更新数据 库存信息 SqlSugarHelper.Db.Updateable(new ChannelStock() { Quantity = stock.Quantity + stock.ReturnQuantity, Id = stock.Id, }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand(); // 获取更新完库存后的药品库存 List nowChannels = SqlSugarHelper.Db.Queryable() .Where(cs => cs.MachineId.Equals(stock.MachineId)) .Where(cs => cs.DrugId.Equals(stock.DrugId)) .Where(cs => cs.DrawerType == 1) .ToList(); MachineRecord recordInfo = SqlSugarHelper.Db.Queryable().Where(rd => rd.Id == stock.MachineRecordId).First(); // 更新数据 取药记录 设置还药数量、状态 SqlSugarHelper.Db.Updateable(new MachineRecord() { ReturnQuantity2 = stock.ReturnQuantity, Id = recordInfo.Id, Status = 2, }).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand(); // 保存数据 还药空瓶记录 SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = stock.MachineId, DrawerNo = stock.DrawerNo, ColNo = stock.ColNo, DrugId = stock.DrugId, ManuNo = stock.ManuNo, EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = HomeWindowViewModel.Operator?.Id, Reviewer = HomeWindowViewModel.Reviewer?.Id, OperationTime = DateTime.Now, Quantity = stock.ReturnQuantity, //ReturnQuantity, Type = 32, InvoiceId = InvoiceId, GetId = stock.MachineRecordId //,StockQuantity = nowChannels.Sum(it => it.Quantity) }).ExecuteCommand(); return true; }); if (!f.IsSuccess || !f.Data) { return false; } else { return true; } } public long CurrentTimeMillis() { return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; } /// /// 取消 /// public DelegateCommand CancleTake { get => new DelegateCommand(() => { _portUtil.ResetData(); Status = 0; }); } // 完成按钮 public DelegateCommand TakeFinishCommand { get => new DelegateCommand(TakeFinish); } private void DoDialogResult(IDialogResult dialogResult) { // 委托 被动执行 被子窗口执行 // dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态 //if(dialogResult.Result == ButtonResult.OK) //{ // 关闭当前窗口 //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); //} //MessageBox.Show("返回值:" + dialogResult.Result.ToString()); } } }