From aafa20f7aff86100d899e621d443038d4033a937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=B7=A7?= <625215135@qq.com> Date: Thu, 21 Aug 2025 18:25:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E9=83=A8=E6=88=98=E5=8C=BA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataAccess/AppDataConnection.cs | 1 + .../DataAccess/Dao/IChannelListDao.cs | 45 +- .../DataAccess/Dao/IOrderInfoDao.cs | 4 +- .../DataAccess/Dao/IReportDataDao.cs.cs | 4 + .../DataAccess/Impl/ChannelListDao.cs | 541 +++++++++++++----- .../DataAccess/Impl/MachineRecordDao.cs | 30 +- .../DataAccess/Impl/OrderInfoDao.cs | 194 ++++--- MasaBlazorApp3/DataAccess/Impl/PlanDao.cs | 141 +++-- .../DataAccess/Impl/ReportDataDao.cs | 91 ++- .../DataAccess/Impl/SettingManuDao.cs | 2 +- MasaBlazorApp3/DataAccess/Impl/UserDao.cs | 34 +- MasaBlazorApp3/MasaBlazorApp3.csproj | 3 + MasaBlazorApp3/Pages/BoxAddBox.razor | 6 +- .../Pages/BoxAddBoxDetailDialog.razor | 39 +- MasaBlazorApp3/Pages/BoxAddDetailDialog.razor | 8 +- MasaBlazorApp3/Pages/BoxAddDrug.razor | 126 ++-- MasaBlazorApp3/Pages/BoxBind.razor | 6 +- MasaBlazorApp3/Pages/BoxBindNew.razor | 202 +++++++ MasaBlazorApp3/Pages/BoxRemoveDialog.razor | 6 +- MasaBlazorApp3/Pages/BoxReplace.razor | 6 +- MasaBlazorApp3/Pages/BoxStock.razor | 108 ++-- MasaBlazorApp3/Pages/ChangeShifts.razor | 21 +- MasaBlazorApp3/Pages/CheckOrder.razor | 61 +- MasaBlazorApp3/Pages/DrawerAdd.razor | 11 +- MasaBlazorApp3/Pages/DrawerTake.razor | 14 +- MasaBlazorApp3/Pages/Home.razor | 5 +- MasaBlazorApp3/Pages/InitPage.razor | 40 +- MasaBlazorApp3/Pages/PlanManagement.razor | 20 +- MasaBlazorApp3/Pages/SelfTake.razor | 4 +- MasaBlazorApp3/Pages/StockCheck.razor | 1 + MasaBlazorApp3/Pages/StockList.razor | 108 +++- MasaBlazorApp3/Pojo/AccountBookG2.cs | 2 +- MasaBlazorApp3/Pojo/ChannelList.cs | 14 +- MasaBlazorApp3/Pojo/ChannelStock.cs | 15 +- MasaBlazorApp3/Pojo/Config/PortConfig.cs | 5 + MasaBlazorApp3/Pojo/DrugInfo.cs | 3 + MasaBlazorApp3/Pojo/DrugManuNo.cs | 2 + MasaBlazorApp3/Pojo/HkcChangeShifts.cs | 2 + .../Pojo/HkcChangeShiftsDrugDetail.cs | 23 + MasaBlazorApp3/Pojo/MachineRecord.cs | 3 +- MasaBlazorApp3/Pojo/OrderInfo.cs | 12 +- MasaBlazorApp3/Pojo/Plan.cs | 3 + MasaBlazorApp3/Pojo/Premission.cs | 56 +- MasaBlazorApp3/Pojo/ReportDateInfo.cs | 67 ++- MasaBlazorApp3/Pojo/SettingManu.cs | 3 + MasaBlazorApp3/Port/PortUtil.cs | 154 ++++- MasaBlazorApp3/ReportTemp/Apply_Temp.grf | 334 +++++++++++ .../ReportTemp/ChangeShifts_Temp.grf | 275 +++++++++ MasaBlazorApp3/ReportTemp/Usage_Temp.grf | 373 ++++++++++++ .../ReportTemp/account_book_temp.grf | 216 +++---- MasaBlazorApp3/Shared/MainLayout.razor | 98 +++- MasaBlazorApp3/appsettings.json | 13 +- sql/account_book.sql | 50 ++ sql/hkc_changeshifts.sql | 59 ++ sql/hkc_changeshifts_drug.sql | 33 ++ sql/plan.sql | 43 ++ sql/plan_details.sql | 44 ++ sql/修改数据库信息.txt | 229 ++++++++ 58 files changed, 3291 insertions(+), 722 deletions(-) create mode 100644 MasaBlazorApp3/Pages/BoxBindNew.razor create mode 100644 MasaBlazorApp3/Pojo/HkcChangeShiftsDrugDetail.cs create mode 100644 MasaBlazorApp3/ReportTemp/Apply_Temp.grf create mode 100644 MasaBlazorApp3/ReportTemp/ChangeShifts_Temp.grf create mode 100644 MasaBlazorApp3/ReportTemp/Usage_Temp.grf create mode 100644 sql/account_book.sql create mode 100644 sql/hkc_changeshifts.sql create mode 100644 sql/hkc_changeshifts_drug.sql create mode 100644 sql/plan.sql create mode 100644 sql/plan_details.sql create mode 100644 sql/修改数据库信息.txt diff --git a/MasaBlazorApp3/DataAccess/AppDataConnection.cs b/MasaBlazorApp3/DataAccess/AppDataConnection.cs index 60abc3f..1b4da17 100644 --- a/MasaBlazorApp3/DataAccess/AppDataConnection.cs +++ b/MasaBlazorApp3/DataAccess/AppDataConnection.cs @@ -33,6 +33,7 @@ namespace MasaBlazorApp3.DataAccess public ITable PlanDetails => this.GetTable(); public ITable AccountBookG2 => this.GetTable(); public ITable HkcChangeShifts => this.GetTable(); + public ITable HkcChangeShiftsDetail => this.GetTable(); diff --git a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs index 52b8efe..b9177e2 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs @@ -32,54 +32,69 @@ namespace MasaBlazorApp3.DataAccess.Dao public Task DrawerCheckFinish(List Stocks); //抽屉获取库存数据--药品绑定 Task> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0); - //手术室药箱获取绑定数据 + //手术室药盒获取绑定数据 Task> GetAllChannelListWithPlan(int? take, int? skip); /// - /// 手术室药箱绑定套餐 + /// 手术室药盒绑定套餐 + /// + /// + Task BindBox(ChannelList list, Plan plan); + /// + /// 手术室药盒绑定套餐 /// /// Task BindBox(ChannelList channelList); /// - /// 手术室药箱解绑套餐 + /// 手术室药盒解绑套餐 /// /// /// Task UnBindBox(ChannelList list); - //获取手术室药箱中所有要补药的数据 + //获取手术室药盒中所有要补药的数据 Task> GetAllBoxAddDrug(int? take, int? skip); - //手术室药箱补药获取毒麻柜中的药品信息 + //手术室药盒补药获取毒麻柜中的药品信息 Task> getTakeInfoByBox(ChannelList cl); - //手术室药箱补药完成 + //手术室药盒补药完成 Task BoxTakeFinish(List datas, ChannelList boxChannelList); - //手术室药箱入库 + //手术室药盒入库 Task> GetBoxWaitInfo(int? take, int? skip); - //手术室药箱入库获取待入库明细 + // 药盒入库弹窗页面获取要入库的药品明细信息 + Task> GetBoxAddToBox(ChannelList cl); + //手术室药盒入库获取待入库明细 Task> getBoxWaitByBox(ChannelList cl, int? take, int? skip); - // 手术室药箱待入库明细入库完成 + // 手术室药盒待入库明细入库完成 Task BoxAddBoxFinish(ChannelList boxChannelList); - //手术室药箱获取药箱药品及库存信息 + //手术室药盒获取药盒药品及库存信息 Task> GetBoxDrugInfo(int DrawerNo, int? take, int? skip); - //药箱移库时获取选中药箱号的药品信息 + //药盒移库时获取选中药盒号的药品信息 Task> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip); /// - /// 药箱交换药品获取所有除本药箱外的所有药箱号 + /// 药盒交换药品获取所有除本药盒外的所有药盒号 /// /// /// Task GetDrawerNum(ChannelStock channelStock); /// - /// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号 + /// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号 /// /// /// Task GetDrawerNumForRemove(ChannelStock channelStock); - //手术室药箱交换药品完成 + //手术室药盒交换药品完成 Task BoxReplaceFinish(ChannelStock stock, List Stocks); - //手术室药箱移出药品完成 + //手术室药盒移出药品完成 Task BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity); + + Task> GetAllBox(); + //根据药盒查询药品信息 + Task> GetChannelStockByBox(int BoxNum); + //根据套餐下无库存的药箱 + Task> GetChannelStockByPlan(string plan); + //手术室药盒获取绑定数据 + Task> GetAllChannelList(); } } diff --git a/MasaBlazorApp3/DataAccess/Dao/IOrderInfoDao.cs b/MasaBlazorApp3/DataAccess/Dao/IOrderInfoDao.cs index d08e106..b3f704c 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IOrderInfoDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IOrderInfoDao.cs @@ -26,9 +26,9 @@ namespace MasaBlazorApp3.DataAccess.Dao public Task OrderReturnFinish(List> datas, string OrderrNo); public Task>> getReturnInfoByOrderNo(string OrderrNo); - //获取药箱中的用药信息 + //获取药盒中的用药信息 public Task> GetAllOrderInfoByBox(int box,string OrderrNo, DateTime OrderDate, int? take, int? skip); - //获取所有药箱号 + //获取所有药盒号 public Task GetDrawerNum(string machineId); //核对处方 public Task CheckOrderInfo(IList selectedOrderInfos, int DrawerNo); diff --git a/MasaBlazorApp3/DataAccess/Dao/IReportDataDao.cs.cs b/MasaBlazorApp3/DataAccess/Dao/IReportDataDao.cs.cs index ffcd064..7f8dd15 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IReportDataDao.cs.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IReportDataDao.cs.cs @@ -13,5 +13,9 @@ namespace MasaBlazorApp3.DataAccess.Dao Task> GetStockExportData(string drugName); //专用账册导出数据 Task> GetAccountExportData(DateTime? startDate, DateTime? endDate, string drugName); + //手术室患者麻醉药品使用登记本 + Task> GetOrderInfoData(DateTime startDate); + //请领登记表导出 + Task> GetApplyInfoDate(DateTime searchDate); } } diff --git a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs index f124650..621124d 100644 --- a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.Options; using Mysqlx.Crud; using System.Collections.Generic; using System.Data; +using System.Linq; namespace MasaBlazorApp3.DataAccess.Impl { @@ -549,7 +550,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .ToListAsync(); return new ChannelStockWithDrawerCount() { DrawerArray = ints, ChannelStocks = channelStocks }; } - //手术室药箱获取绑定数据 + //手术室药盒获取绑定数据 public async Task> GetAllChannelListWithPlan(int? take, int? skip) { @@ -603,10 +604,10 @@ namespace MasaBlazorApp3.DataAccess.Impl }; } /// - /// 手术室药箱绑定套餐 + /// 手术室药盒绑定套餐 /// /// - public async Task BindBox(ChannelList list) + public async Task BindBox(ChannelList list,Plan plan) { try { @@ -614,10 +615,10 @@ namespace MasaBlazorApp3.DataAccess.Impl bool bFlag = true; var q = _connection.ChannelList - .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString()); + .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, plan.Id.ToString()); //将套餐中的药品信息写入channelStock //查询套餐中药品信息 - var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id&&p.UseState==1); + var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == plan.Id && p.UseState == 1); List planInfos = await query.ToListAsync(); if (planInfos != null && planInfos.Count > 0) { @@ -631,7 +632,7 @@ namespace MasaBlazorApp3.DataAccess.Impl DrawerNo = list.DrawerNo, DrugId = planInfos[i].DrugId.ToString(), BaseQuantity = planInfos[i].BaseQuantity, - BoxState = 1 + //BoxState = 1 }); if (mid > 0) { @@ -647,6 +648,21 @@ namespace MasaBlazorApp3.DataAccess.Impl var r = await q.UpdateAsync(); if (bFlag && r > 0) { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.machineId, + DrawerNo = list.DrawerNo, + ColNo = list.ColNo, + DrugId = list.DrugId, + OperationTime = DateTime.Now, + Type = 55, + Quantity = list.TotalQuantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"药盒{list.DrawerNo}绑定套餐{list.DrugId}", + //GetId = operationVo.data.Id + }); _connection.CommitTransaction(); return true; } @@ -664,7 +680,83 @@ namespace MasaBlazorApp3.DataAccess.Impl } } /// - /// 手术室药箱解绑套餐 + /// 手术室药盒绑定套餐 + /// + /// + public async Task BindBox(ChannelList list) + { + try + { + _connection.BeginTransaction(); + bool bFlag = true; + + var q = _connection.ChannelList + .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString()); + //将套餐中的药品信息写入channelStock + //查询套餐中药品信息 + var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id && p.UseState == 1); + List planInfos = await query.ToListAsync(); + if (planInfos != null && planInfos.Count > 0) + { + for (int i = 0; i < planInfos.Count; i++) + { + int mid = await _connection.InsertAsync(new ChannelStock() + { + Id = Guid.NewGuid().ToString(), + ListId = list.Id, + MachineId = list.MachineId, + DrawerNo = list.DrawerNo, + DrugId = planInfos[i].DrugId.ToString(), + BaseQuantity = planInfos[i].BaseQuantity, + //BoxState = 1 + }); + if (mid > 0) + { + bFlag = true; + } + else + { + bFlag = false; + break; + } + } + } + var r = await q.UpdateAsync(); + if (bFlag && r > 0) + { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.machineId, + DrawerNo = list.DrawerNo, + ColNo = list.ColNo, + DrugId = list.DrugId, + OperationTime = DateTime.Now, + Type = 55, + Quantity = list.TotalQuantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"药盒{list.DrawerNo}绑定套餐{list.DrugId}", + //GetId = operationVo.data.Id + }); + _connection.CommitTransaction(); + return true; + } + else + { + _connection.RollbackTransaction(); + return false; + } + } + catch (Exception ex) + { + _connection.RollbackTransaction(); + logger.Info($"绑定套餐异常{ex.Message}"); + return false; + } + } + /// + /// 手术室药盒解绑套餐 /// /// /// @@ -678,10 +770,29 @@ namespace MasaBlazorApp3.DataAccess.Impl .Where(cs => cs.Id == list.Id) .Set(cs => cs.DrugId, String.Empty) .UpdateAsync(); - - var cs = await _connection.ChannelStock.Where(cs => cs.ListId == list.Id).DeleteAsync(); - if (r > 0 && cs > 0) + int iCount = await _connection.ChannelStock.Where(cs => cs.ListId == list.Id).CountAsync(); + int cs = 0; + if (iCount > 0) { + cs = await _connection.ChannelStock.Where(cs => cs.ListId == list.Id).DeleteAsync(); + } + if (r > 0 && (iCount > 0 && cs > 0 || iCount <= 0)) + { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.machineId, + DrawerNo = list.DrawerNo, + ColNo = list.ColNo, + DrugId = list.DrugId, + OperationTime = DateTime.Now, + Type = 56, + Quantity = list.TotalQuantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"药盒{list.DrawerNo}解绑套餐{list.DrugId}", + //GetId = operationVo.data.Id + }); _connection.CommitTransaction(); return true; } @@ -694,29 +805,31 @@ namespace MasaBlazorApp3.DataAccess.Impl catch (Exception ex) { _connection.RollbackTransaction(); - logger.Info($"手术室药箱解绑异常:{ex.Message}"); + logger.Info($"手术室药盒解绑异常:{ex.Message}"); return false; } } - //获取手术室药箱中所有要补药的数据 + //获取手术室药盒中所有要补药的数据 public async Task> GetAllBoxAddDrug(int? take, int? skip) { try { List channelLists = new List(); var query = _connection.ChannelStock//.AsQueryable() - .Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1) + .Where(cs => cs.MachineId == _setting.boxMachineId) .GroupBy(cs => new { cs.DrawerNo, cs.DrugId }) .Select(g => new { DrawerNo = g.Key.DrawerNo, DrugId = g.Key.DrugId, - sumQuantity = g.Sum(cs => cs.Quantity) - }) + sumQuantity = g.Sum(cs => cs.Quantity), + baseQuantity = g.Max(cs => cs.BaseQuantity), + sumAdd=g.Sum(cs=>cs.AddToQuantity) + }).Where(x => x.baseQuantity > x.sumQuantity+x.sumAdd) .ToList(); var queryChannelStock = _connection.ChannelStock.AsQueryable() - .Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1) + .Where(cs => cs.MachineId == _setting.boxMachineId) .LoadWith(cs => cs.Drug).ToList(); @@ -740,6 +853,31 @@ namespace MasaBlazorApp3.DataAccess.Impl channelLists.Add(queryList[i]); } } + + //if (query != null && query.Count > 0) + //{ + // var queryList = await _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId == _setting.boxMachineId).ToListAsync(); + // for (int i = 0; i < queryList.Count; i++) + // { + // foreach (var item in query) + // { + // if (queryList[i].DrawerNo == item.DrawerNo) + + // { + // ChannelStock? stock = _connection.ChannelStock.AsQueryable() + // .Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId).LoadWith(cs => cs.Drug).FirstOrDefault(); + // stock.NeedQuantity = item.baseQuantity - item.sumQuantity; + // queryList[i].ChannelStocks.Add(stock); + // } + // } + // if (queryList[i].ChannelStocks != null && queryList[i].ChannelStocks.Count > 0) + // { + // channelLists.Add(queryList[i]); + // } + // } + //} + + int pagedData = channelLists.Count; @@ -754,12 +892,12 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"获取药箱中补药数据失败{ex.Message}"); + logger.Info($"获取药盒中补药数据失败{ex.Message}"); return null; } } - //手术室药箱补药获取毒麻柜中的药品信息 + //手术室药盒补药获取毒麻柜中的药品信息 public async Task> getTakeInfoByBox(ChannelList cl) { try @@ -848,7 +986,7 @@ namespace MasaBlazorApp3.DataAccess.Impl return null; } } - //手术室药箱补药完成 + //手术室药盒补药完成 public async Task BoxTakeFinish(List datas, ChannelList boxChannelList) { @@ -856,17 +994,6 @@ namespace MasaBlazorApp3.DataAccess.Impl { _connection.BeginTransaction(); var flag = true; - // 更新处方状态 - //int r1 = _connection.ChannelStock.Where(oi => oi.OrderNo == datas.First().OrderDetail.OrderNo) - // .Set(oi => oi.Status, 1) - // .Update(); - //if (!(r1 > 0)) - //{ - // flag = false; - // logger.Error("处方取药完成更新处方状态失败"); - // _connection.RollbackTransaction(); - // return flag; - //} for (var i = 0; i < datas.Count; i++) { var boxTakeVo = datas[i]; @@ -921,7 +1048,7 @@ namespace MasaBlazorApp3.DataAccess.Impl int r = _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.ChannelStock.Id) .Set(cs => cs.Quantity, boxTakeVo.ChannelStock.Quantity - boxTakeVo.GetQuantity) .Update(); - #region 保存账册,给药箱补药不记录出库账册 + #region 保存账册,给药盒补药不记录出库账册 // 获取更新完库存之后的药品库存 //List list = await _connection.ChannelStock.AsQueryable() // .InnerJoin( @@ -931,7 +1058,7 @@ namespace MasaBlazorApp3.DataAccess.Impl // ) // .Where(cs => cs.DrugId.Equals(boxTakeVo.ChannelStock.DrugId)) // .ToListAsync(); - // 保存账册,给药箱补药不记录出库账册 + // 保存账册,给药盒补药不记录出库账册 //int acid = _connection.InsertWithInt32Identity(new AccountBook() //{ // MachineId = _setting.machineId, @@ -949,24 +1076,40 @@ namespace MasaBlazorApp3.DataAccess.Impl // //InvoiceId = orderTakeVo.OrderDetail.Id.ToString() //}); #endregion - - //更新药箱中的药品数量 - int boxID = _connection.Insert(new ChannelStock() + //查询药盒中是否有该批次药品,有则把对应数量累加,无则insert + ChannelStock? BoxChannelStock = _connection.ChannelStock.AsQueryable() + .Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrawerNo == boxTakeVo.BoxDetail.DrawerNo && cs.DrugId == boxTakeVo.ChannelStock.DrugId && cs.ManuNo == boxTakeVo.ChannelStock.ManuNo && cs.EffDate == EffDate).FirstOrDefault(); + int boxID = 0; + if (BoxChannelStock != null) { - Id = Guid.NewGuid().ToString(), - ListId = boxTakeVo.BoxDetail.Id, - MachineId = _setting.boxMachineId, - DrawerNo = boxTakeVo.BoxDetail.DrawerNo, - AddToQuantity = boxTakeVo.GetQuantity, - NeedQuantity = 0, - DrugId = boxTakeVo.ChannelStock.DrugId, - ManuNo = boxTakeVo.ChannelStock.ManuNo, - EffDate = EffDate, - BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity, - BoardType = boxTakeVo.BoxDetail.BoardType, - BoxState = 2 //补药完成 - }); - // 手术室药箱入库记录 + //BoxChannelStock.AddToQuantity += boxTakeVo.GetQuantity; + //BoxChannelStock.BoxState = 2; + //改为直接加到药盒库存中 + BoxChannelStock.Quantity += boxTakeVo.GetQuantity; + boxID = await _connection.UpdateAsync(BoxChannelStock); + } + else + { + //更新药盒中的药品数量 + boxID = _connection.Insert(new ChannelStock() + { + Id = Guid.NewGuid().ToString(), + ListId = boxTakeVo.BoxDetail.ListId, + MachineId = _setting.boxMachineId, + DrawerNo = boxTakeVo.BoxDetail.DrawerNo, + //AddToQuantity = boxTakeVo.Quantity,//boxTakeVo.GetQuantity, + //NeedQuantity = 0, + Quantity = boxTakeVo.GetQuantity, + DrugId = boxTakeVo.ChannelStock.DrugId, + ManuNo = boxTakeVo.ChannelStock.ManuNo, + EffDate = EffDate, + BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity, + BoardType = boxTakeVo.BoxDetail.BoardType, + //BoxState = 2, //补药完成 + FillTime = DateTime.Now + }); + } + // 手术室药盒入库记录 int boxMId = _connection.InsertWithInt32Identity(new MachineRecord() { MachineId = _setting.machineId, @@ -982,10 +1125,11 @@ namespace MasaBlazorApp3.DataAccess.Impl InvoiceId = boxTakeVo.ChannelStock.Id.ToString(), }); //int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId)&&p.DrugId== boxTakeVo.BoxDetail.DrugId).Sum(p => p.BaseQuantity); - //int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.Id) - // .Set(cl => cl.TotalQuantity, totalQuantity) - // .Update(); - int delResutl = await _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.BoxDetail.Id).DeleteAsync(); + int totalQuantity= boxChannelList.TotalQuantity+ boxTakeVo.GetQuantity; + int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.Id) + .Set(cl => cl.TotalQuantity, totalQuantity) + .Update(); + int delResutl = await _connection.ChannelStock.Where(cs => cs.MachineId == boxTakeVo.BoxDetail.MachineId && cs.DrugId == boxTakeVo.BoxDetail.DrugId && cs.ManuNo == null).DeleteAsync(); if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0) { if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5")) @@ -1020,21 +1164,23 @@ namespace MasaBlazorApp3.DataAccess.Impl } - //手术室药箱入库 + //手术室药盒入库 public async Task> GetBoxWaitInfo(int? take, int? skip) { try { List channelLists = new List(); var query = _connection.ChannelStock//.AsQueryable() - .Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 2) + .Where(cs => cs.MachineId == _setting.boxMachineId) .GroupBy(cs => new { cs.DrawerNo, cs.DrugId }) .Select(g => new { DrawerNo = g.Key.DrawerNo, DrugId = g.Key.DrugId, - sumQuantity = g.Sum(cs => cs.Quantity) - }) + sumQuantity = g.Sum(cs => cs.Quantity), + baseQuantity = g.Max(cs => cs.BaseQuantity), + AddToQuantity = g.Sum(cs => cs.AddToQuantity) + }).Where(x => x.baseQuantity > x.sumQuantity) .ToList(); var queryChannelStock = _connection.ChannelStock.AsQueryable() @@ -1049,10 +1195,11 @@ namespace MasaBlazorApp3.DataAccess.Impl { if (queryList[i].DrawerNo == item.DrawerNo) { - ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault(); + ChannelStock? stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault(); if (stock != null) { stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity; + stock.AddToQuantity = item.AddToQuantity; queryList[i].ChannelStocks.Add(stock); } } @@ -1076,11 +1223,43 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"获取药箱中补药数据失败{ex.Message}"); + logger.Info($"获取药盒中补药数据失败{ex.Message}"); return null; } } - //手术室药箱入库获取待入库明细 + // 药盒入库弹窗页面获取要入库的药品明细信息 + public async Task> GetBoxAddToBox(ChannelList cl) + { + if (cl != null) + { + List manuNosList = new List(); + foreach (var item in cl.ChannelStocks) + { + List manuList = new List(); + List csList = _connection.ChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BoxState == 2).ToList(); + for (int i = 0; i < csList.Count; i++) + { + var existingItem = manuList.FirstOrDefault(item => item.DrugId == csList[i].DrugId && item.ManuNo == csList[i].ManuNo&& item.EffDate.ToString() == csList[i].EffDate); + if (existingItem != null) + { + existingItem.Quantity += csList[i].AddToQuantity; + } + else + { + DrugManuNo manu = new DrugManuNo(); + manu.DrugId = csList[i].DrugId; + manu.ManuNo = csList[i].ManuNo; + manu.EffDate = Convert.ToDateTime(csList[i].EffDate); + manu.Quantity = csList[i].AddToQuantity; + manuList.Add(manu); + } + } + item.drugManuNoList = manuList; + } + } + return cl.ChannelStocks; + } + //手术室药盒入库获取待入库明细 public async Task> getBoxWaitByBox(ChannelList cl, int? take, int? skip) { try @@ -1119,75 +1298,88 @@ namespace MasaBlazorApp3.DataAccess.Impl return null; } } - // 手术室药箱待入库明细入库完成 + // 手术室药盒待入库明细入库完成 public async Task BoxAddBoxFinish(ChannelList boxChannelList) { try { _connection.BeginTransaction(); bool flag = true; - int totalQuantity =0; + int totalQuantity = 0; for (var i = 0; i < boxChannelList.ChannelStocks.Count; i++) { - - var EffDate = boxChannelList.ChannelStocks[i].EffDate; - //效期转换出错 - if (boxChannelList.ChannelStocks[i].EffDate != null) + for (int j = 0; j < boxChannelList.ChannelStocks[i].drugManuNoList.Count; j++) { - string[] idate = boxChannelList.ChannelStocks[i].EffDate.Split('/'); - foreach (string iS in idate) + var EffDate = boxChannelList.ChannelStocks[i].drugManuNoList[j].EffDate?.ToString("yyyy-MM-dd"); + //效期转换出错 + //if (boxChannelList.ChannelStocks[i].EffDate != null) + //{ + // string[] idate = boxChannelList.ChannelStocks[i].EffDate.Split('/'); + // foreach (string iS in idate) + // { + // if (!string.IsNullOrEmpty(iS.Trim())) + // { + // switch (iS.Trim().Length) + // { + // case 4: + // EffDate = iS.Trim(); + // break; + // case 2: + // EffDate += "-" + iS.Trim(); + // break; + // case 1: + // EffDate += "-0" + iS.Trim(); + // break; + // } + // } + // } + //} + // 手术室药盒入库记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() { - if (!string.IsNullOrEmpty(iS.Trim())) - { - switch (iS.Trim().Length) - { - case 4: - EffDate = iS.Trim(); - break; - case 2: - EffDate += "-" + iS.Trim(); - break; - case 1: - EffDate += "-0" + iS.Trim(); - break; - } - } - } - } - // 手术室药箱入库记录 - int mid = _connection.InsertWithInt32Identity(new MachineRecord() - { - MachineId = _setting.boxMachineId, - DrawerNo = boxChannelList.ChannelStocks[i].DrawerNo, - DrugId = boxChannelList.ChannelStocks[i].DrugId, - ManuNo = boxChannelList.ChannelStocks[i].ManuNo, - EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, - OperationTime = DateTime.Now, - Type = 1, - Quantity = boxChannelList.ChannelStocks[i].AddToQuantity, - Operator = _globalStateService.Operator.Id, - Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, - InvoiceId = boxChannelList.ChannelStocks[i].Id.ToString(), - }); - // 更新库存 - boxChannelList.ChannelStocks[i].Quantity= boxChannelList.ChannelStocks[i].Quantity+ boxChannelList.ChannelStocks[i].AddToQuantity; - boxChannelList.ChannelStocks[i].AddToQuantity = 0; - boxChannelList.ChannelStocks[i].NeedQuantity = 0; - boxChannelList.ChannelStocks[i].BoxState=0; - boxChannelList.ChannelStocks[i].EffDate = EffDate; - int r = _connection.Update(boxChannelList.ChannelStocks[i]); + MachineId = _setting.boxMachineId, + DrawerNo = boxChannelList.ChannelStocks[i].DrawerNo, + DrugId = boxChannelList.ChannelStocks[i].DrugId, + ManuNo = boxChannelList.ChannelStocks[i].drugManuNoList[j].ManuNo, + EffDate = boxChannelList.ChannelStocks[i].drugManuNoList[j].EffDate,//!String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + OperationTime = DateTime.Now, + Type = 1, + Quantity = boxChannelList.ChannelStocks[i].drugManuNoList[j].Quantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = boxChannelList.ChannelStocks[i].Id.ToString(), + }); + // 更新库存 + ChannelStock? updateChannelStock = _connection.ChannelStock.AsQueryable() + .Where(cs => cs.DrawerNo == boxChannelList.ChannelStocks[i].DrawerNo && cs.DrugId == boxChannelList.ChannelStocks[i].drugManuNoList[j].DrugId&&cs.ManuNo== boxChannelList.ChannelStocks[i].drugManuNoList[j].ManuNo&&cs.EffDate == EffDate) + .FirstOrDefault(); + int r = 0; + if (updateChannelStock != null) + { + updateChannelStock.Quantity = updateChannelStock.Quantity+ boxChannelList.ChannelStocks[i].drugManuNoList[j].Quantity; + updateChannelStock.AddToQuantity = 0; + updateChannelStock.NeedQuantity = 0; + updateChannelStock.BoxState = 0; + //updateChannelStock.EffDate = EffDate?.ToString("yyyy-MM-dd"); + //updateChannelStock.ManuNo = boxChannelList.ChannelStocks[i].drugManuNoList[j].ManuNo; + r = _connection.Update(updateChannelStock); + + } + + //totalQuantity += _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId) && p.DrugId == boxChannelList.ChannelStocks[i].DrugId).Sum(p => p.BaseQuantity); + totalQuantity += boxChannelList.ChannelStocks[i].drugManuNoList[j].Quantity; + + if (!(mid > 0 && (updateChannelStock == null || r > 0))) + { + flag = false; + break; + } - totalQuantity += _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId) && p.DrugId == boxChannelList.ChannelStocks[i].DrugId).Sum(p => p.BaseQuantity); - - if (!(mid > 0 && r > 0 )) - { - flag = false; - break; } } if (flag) { - boxChannelList.TotalQuantity+= totalQuantity; + boxChannelList.TotalQuantity += totalQuantity; int updateResult = _connection .Update(boxChannelList); if (updateResult > 0) @@ -1195,7 +1387,8 @@ namespace MasaBlazorApp3.DataAccess.Impl _connection.CommitTransaction(); } else - { flag = false; + { + flag = false; _connection.RollbackTransaction(); } } @@ -1207,19 +1400,19 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"手术室药箱待入库明细入库完成操作异常:{ex.Message}"); + logger.Info($"手术室药盒待入库明细入库完成操作异常:{ex.Message}"); return false; } } - //手术室药箱获取药箱药品及库存信息 + //手术室药盒获取药盒药品及库存信息 public async Task> GetBoxDrugInfo(int DrawerNo, int? take, int? skip) { var query = _connection.PlanDetails.AsQueryable() .InnerJoin( _connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)), (pd, cl) => pd.PlanId.ToString() == cl.DrugId, - (pd, cl) => pd).Where(pd=>pd.UseState==1); + (pd, cl) => pd).Where(pd => pd.UseState == 1); @@ -1264,7 +1457,7 @@ namespace MasaBlazorApp3.DataAccess.Impl }; } - //药箱移库时获取选中药箱号的药品信息 + //药盒移库时获取选中药盒号的药品信息 public async Task> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip) { try @@ -1291,14 +1484,14 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"药箱移库时获取选中药箱号的药品信息异常:{ex.Message}"); + logger.Info($"药盒移库时获取选中药盒号的药品信息异常:{ex.Message}"); return null; } } /// - /// 药箱交换药品获取所有除本药箱外的所有药箱号 + /// 药盒交换药品获取所有除本药盒外的所有药盒号 /// /// /// @@ -1309,7 +1502,7 @@ namespace MasaBlazorApp3.DataAccess.Impl return ints; } /// - /// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号 + /// 药盒移除药品,获取所有除本药盒外的所有包含该药品的药盒号 /// /// /// @@ -1318,7 +1511,7 @@ namespace MasaBlazorApp3.DataAccess.Impl int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); return ints; } - //手术室药箱交换药品完成 + //手术室药盒交换药品完成 public async Task BoxReplaceFinish(ChannelStock stock, List stockList) { try @@ -1327,7 +1520,7 @@ namespace MasaBlazorApp3.DataAccess.Impl _connection.BeginTransaction(); for (int i = 0; i < stockList.Count; i++) { - //查询出药的药箱是否有该批次的药品 + //查询出药的药盒是否有该批次的药品 ChannelStock replace1ChannelStock = _connection.ChannelStock.AsQueryable() .Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stock.DrawerNo && cs.DrugId == stockList[i].DrugId && cs.ManuNo == stockList[i].ManuNo && cs.EffDate == stockList[i].EffDate) .FirstOrDefault(); @@ -1339,7 +1532,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Update(); if (r <= 0) { - logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"更新药盒药品数量失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); } } else @@ -1355,11 +1548,11 @@ namespace MasaBlazorApp3.DataAccess.Impl EffDate = stockList[i].EffDate, Quantity = stockList[i].AddToQuantity, BaseQuantity = stockList[i].BaseQuantity, - BoxState = 1 + //BoxState = 1 }); if (mid <= 0) { - logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"新增药盒药品记录失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } @@ -1382,14 +1575,14 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (recordId <= 0) { - logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"药盒{stock.DrawerNo}交换药品新增操作记录失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } - //更新入药的药箱中的药品数量 + //更新入药的药盒中的药品数量 ChannelStock replace2ChannelStock = _connection.ChannelStock.AsQueryable() .Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stockList[i].DrawerNo && cs.DrugId == stock.DrugId && cs.ManuNo == stock.ManuNo && cs.EffDate == stock.EffDate) .FirstOrDefault(); @@ -1401,7 +1594,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Update(); if (r <= 0) { - logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"更新药盒药品数量失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } @@ -1419,11 +1612,11 @@ namespace MasaBlazorApp3.DataAccess.Impl EffDate = stock.EffDate, Quantity = stockList[i].AddQuantity, BaseQuantity = stock.BaseQuantity, - BoxState = 1 + //BoxState = 1 }); if (mid <= 0) { - logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"新增药盒药品记录失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } @@ -1446,27 +1639,27 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (record2Id <= 0) { - logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); + logger.Info($"药盒{stock.DrawerNo}交换药品新增操作记录失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } - //出库药箱减数量 + //出库药盒减数量 int updateQuantity = _connection.ChannelStock.Where(cs => cs.Id == stock.Id) .Set(cs => cs.Quantity, stock.Quantity - stockList[i].AddQuantity) .Update(); if (updateQuantity <= 0) { - logger.Info($"更新出库药箱药品减数量失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"更新出库药盒药品减数量失败,药盒号:{stock.DrawerNo},药品ID:{stock.DrugId}"); flag = false; break; } - //入库药箱减数量 + //入库药盒减数量 int updateQuantity2 = _connection.ChannelStock.Where(cs => cs.Id == stockList[i].Id) .Set(cs => cs.Quantity, stockList[i].Quantity - stockList[i].AddQuantity) .Update(); if (updateQuantity2 <= 0) { - logger.Info($"更新入库药箱药品减数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; + logger.Info($"更新入库药盒药品减数量失败,药盒号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; break; } } @@ -1484,12 +1677,12 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"手术室药箱交换药品完成异常:{ex.Message}"); + logger.Info($"手术室药盒交换药品完成异常:{ex.Message}"); _connection.RollbackTransaction(); return false; } } - //手术室药箱移出药品完成 + //手术室药盒移出药品完成 public async Task BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity) { try @@ -1508,7 +1701,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Update(); if (r <= 0) { - logger.Info($"手术室药箱移出药品更新数量失败,药箱号:{SelectedDrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"手术室药盒移出药品更新数量失败,药盒号:{SelectedDrawerNo},药品ID:{stock.DrugId}"); } } else @@ -1526,7 +1719,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Update(); if (mid <= 0) { - logger.Info($"更新药箱药品批次记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"更新药盒药品批次记录失败,药盒号:{stock.DrawerNo},药品ID:{stock.DrugId}"); flag = false; } } @@ -1542,11 +1735,11 @@ namespace MasaBlazorApp3.DataAccess.Impl EffDate = stock.EffDate, Quantity = removeQuantity, BaseQuantity = stock.BaseQuantity, - BoxState = 1 + //BoxState = 1 }); if (mid <= 0) { - logger.Info($"新增药箱药品记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"新增药盒药品记录失败,药盒号:{stock.DrawerNo},药品ID:{stock.DrugId}"); flag = false; } } @@ -1559,7 +1752,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Update(); if (updateQuantity2 <= 0) { - logger.Info($"更新入库药箱药品减数量失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"更新入库药盒药品减数量失败,药盒号:{stock.DrawerNo},药品ID:{stock.DrugId}"); flag = false; } else @@ -1574,7 +1767,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity) .Update(); } - //修改移入药箱的总库存数 + //修改移入药盒的总库存数 ChannelList moveToChannelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == SelectedDrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault(); if (moveToChannelList != null) { @@ -1599,7 +1792,7 @@ namespace MasaBlazorApp3.DataAccess.Impl { MachineId = stock.MachineId, DrawerNo = stock.DrawerNo, - ColNo = SelectedDrawerNo,//移入的药箱号 + ColNo = SelectedDrawerNo,//移入的药盒号 DrugId = stock.DrugId, ManuNo = stock.ManuNo, EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, @@ -1612,7 +1805,7 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (recordId <= 0) { - logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}"); + logger.Info($"药盒{stock.DrawerNo}交换药品新增操作记录失败,药盒号:{stock.DrawerNo},药品ID:{stock.DrugId}"); flag = false; } } @@ -1631,11 +1824,63 @@ namespace MasaBlazorApp3.DataAccess.Impl } catch (Exception ex) { - logger.Info($"手术室药箱移出药品异常{ex.Message}"); + logger.Info($"手术室药盒移出药品异常{ex.Message}"); _connection.RollbackTransaction(); return false; } } + + public async Task> GetAllBox() + { + var query = _connection.ChannelList.AsQueryable(); + + + return await query + .Where(cl => cl.MachineId == _setting.boxMachineId) + .OrderBy((cl) => cl.DrawerNo) + .ThenBy((cl) => cl.DrawerNo) + .ThenBy((cl) => cl.ColNo) + .ToListAsync(); + } + //根据药盒查询药品信息 + public async Task> GetChannelStockByBox(int BoxNum) + { + var query = _connection.ChannelStock.AsQueryable() + .Where(cl=>cl.MachineId==_setting.boxMachineId&&cl.DrawerNo==BoxNum&&cl.Quantity>0); + return await query + .Where(cl=>cl.Quantity<=0) + .OrderBy((cl) => cl.DrawerNo) + .ThenBy((cl) => cl.DrawerNo) + .ThenBy((cl) => cl.ColNo) + .ToListAsync(); + } + //根据套餐下无库存的药箱 + public async Task> GetChannelStockByPlan(string plan) + { + var query = await _connection.ChannelList.AsQueryable().Where(cl=>cl.MachineId==_setting.boxMachineId&&cl.DrugId== plan).Select(c=>c.DrawerNo).ToListAsync(); + if(query!=null&& query.Count>0) + { + return await _connection.ChannelStock.Where(c => query.Contains(c.DrawerNo) && c.MachineId == _setting.boxMachineId&&c.Quantity<=0).ToListAsync(); + } + return null; + } + + //手术室药盒获取绑定数据 + public async Task> GetAllChannelList() + { + + var query = _connection.ChannelList.AsQueryable() + .Where(cl => cl.MachineId == _setting.boxMachineId); + //.LoadWith(cl=>cl.PlanInfo); + + + int pagedData = await query.CountAsync(); + + List list = await query + .OrderBy((cl) => cl.DrawerNo) + .ToListAsync(); + return list; + } } } diff --git a/MasaBlazorApp3/DataAccess/Impl/MachineRecordDao.cs b/MasaBlazorApp3/DataAccess/Impl/MachineRecordDao.cs index cc63a53..0273bec 100644 --- a/MasaBlazorApp3/DataAccess/Impl/MachineRecordDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/MachineRecordDao.cs @@ -8,6 +8,7 @@ using MasaBlazorApp3.Pojo.Vo; using MasaBlazorApp3.Port; using Microsoft.Extensions.Options; using Mysqlx.Crud; +using System.Collections.Generic; using static LinqToDB.Common.Configuration; namespace MasaBlazorApp3.DataAccess.Impl @@ -20,15 +21,17 @@ namespace MasaBlazorApp3.DataAccess.Impl private readonly ILog logger = LogManager.GetLogger(typeof(MachineRecordDao)); private readonly PortUtil _portUtil; + private GlobalStateService _globalStateService; //public UserDao(MyContext context) //{ // Context = context; //} - public MachineRecordDao(AppDataConnection connection, IOptions setting, PortUtil portUtil) + public MachineRecordDao(AppDataConnection connection, IOptions setting, PortUtil portUtil, GlobalStateService globalStateService) { _connection = connection; _setting = setting.Value; _portUtil = portUtil; + _globalStateService = globalStateService; } public async Task> GetChannelStockByDrugId(string DrugId, String ManuNo) @@ -230,6 +233,31 @@ namespace MasaBlazorApp3.DataAccess.Impl _portUtil.SetNumCount(record.DrawerNo, record.ColNo, record.ReturnQuantity); Thread.Sleep(80); } + // 获取更新完库存之后的药品库存 + List list = await _connection.ChannelStock.AsQueryable() + .InnerJoin( + _connection.ChannelList.Where(cl => cl.MachineId.Equals(_setting.machineId)).Where(cl => cl.DrawerType == 1), + (cs, cl) => cs.ListId == cl.Id, + (cs, cl) => cs + ) + .Where(cs => cs.DrugId.Equals(record.DrugId)) + .ToListAsync(); + //账册添加入库记录 + int accountID = _connection.InsertWithInt32Identity(new AccountBook() + { + MachineId = _setting.machineId, + DrugId = record.DrugId, + ManuNo = record.ManuNo, + EffDate = !String.IsNullOrEmpty(record.EffDate) ? DateTime.ParseExact(record.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + OperationTime = DateTime.Now, + Type = 31, + AddQuantity = record.ReturnQuantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + ManuStock = list.Where(it => it.ManuNo == record.ManuNo).Sum(it => it.Quantity), + TotalStock = list.Sum(it => it.Quantity), + InvoiceId = data.data.First().InvoiceId, + }); } // 更新 取药记录 设置还药数量、状态 diff --git a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs index d0f745f..c101970 100644 --- a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs @@ -14,6 +14,7 @@ using Radzen.Blazor.Rendering; using System; using System.Collections; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -57,7 +58,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } if (OrderDate != null && OrderDate != DateTime.MinValue) { - query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); + query = query.Where(oi => oi.ChargeDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 0); @@ -363,7 +364,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } if (OrderDate != null && OrderDate != DateTime.MinValue) { - query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); + query = query.Where(oi => oi.ChargeDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 1); @@ -581,7 +582,7 @@ namespace MasaBlazorApp3.DataAccess.Impl /// - /// 获取药箱中的用药信息 + /// 获取药盒中的用药信息 /// /// /// @@ -591,11 +592,11 @@ namespace MasaBlazorApp3.DataAccess.Impl public async Task> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip) { var query2 = from od in _connection.OrderDetail - from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) + from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.boxMachineId).InnerJoin(c => c.DrugId == od.DrugId) group od by od.OrderNo into temp select new { temp.Key }; var query = from oi in _connection.OrderInfo - from od in query2.InnerJoin(od => od.Key == oi.OrderNo) + from od in query2.InnerJoin(od => od.Key == oi.OrderNo) where oi.Pharmacy==_setting.storage select oi; if (!String.IsNullOrEmpty(OrderrNo)) { @@ -603,7 +604,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } if (OrderDate != null && OrderDate != DateTime.MinValue) { - query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); + query = query.Where(oi => oi.ChargeDate.Date.Equals(OrderDate.Date)); } query = query.Where(oi => oi.Status == 0); @@ -614,7 +615,7 @@ namespace MasaBlazorApp3.DataAccess.Impl int pagedData = await query.CountAsync(); List list = await query - //.LoadWith(oi => oi.DetailList) + .LoadWith(oi => oi.DetailList) .OrderBy((oi) => oi.RecvDate) .ThenBy((oi => oi.OrderNo)) .Skip((int)skip) @@ -682,7 +683,7 @@ namespace MasaBlazorApp3.DataAccess.Impl }; } /// - /// 获取所有药箱号 + /// 获取所有药盒号 /// /// /// @@ -707,70 +708,98 @@ namespace MasaBlazorApp3.DataAccess.Impl { OrderInfo oi = selectedOrderInfos[i]; - //更新处方状态 - if (oi.Status == 1) - { - int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update(); - _connection.Insert(new OrderFinish() - { - OrderNo = oi.OrderNo, - PatientId = oi.PatientId, - Pharmacy = oi.Pharmacy, - State = 2, - //WinNo = DrawerNo + 1 + "号手术间", - Operator = _globalStateService.Operator.NickName, - }); - } + int drawerNo = DrawerNo; if (oi.DetailList != null && oi.DetailList.Count > 0) { for (int j = 0; j < oi.DetailList.Count; j++) { - ChannelStock cs = _connection.ChannelStock.AsQueryable() - .Where(cs => cs.DrugId == oi.DetailList[j].DrugId - && cs.ManuNo == oi.DetailList[j].SetManuNo - // && cs.EffDate == oi._OrderDetail.SetEffDate - && cs.MachineId.Equals(_setting.boxMachineId) - && cs.DrawerNo == drawerNo - && cs.Quantity >= oi.DetailList[j].Quantity).First(); - if (cs == null) + //ChannelStock? cs = _connection.ChannelStock.AsQueryable() + // .Where(cs => cs.DrugId == oi.DetailList[j].DrugId + // // && cs.ManuNo == oi.DetailList[j].SetManuNo + // // && cs.EffDate == oi._OrderDetail.SetEffDate + // && cs.MachineId.Equals(_setting.boxMachineId) + // && cs.DrawerNo == drawerNo + // && cs.Quantity >= oi.DetailList[j].Quantity).FirstOrDefault(); + List cs = _connection.ChannelStock.AsQueryable() + .Where(cs => cs.DrugId == oi.DetailList[j].DrugId + // && cs.ManuNo == oi.DetailList[j].SetManuNo + // && cs.EffDate == oi._OrderDetail.SetEffDate + && cs.MachineId.Equals(_setting.boxMachineId) + && cs.DrawerNo == drawerNo).OrderBy(cs => cs.EffDate).ToList(); + if (cs.Count <= 0) { - logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存"); + logger.Info($"处方{oi.OrderNo}中药品{oi.DetailList[j].DrugId}在{drawerNo}号药盒无库存"); continue; } - cs.Quantity = cs.Quantity - oi.DetailList[j].Quantity; - //cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity; - logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}"); - // 更新数据 库存信息 - _connection.Update(cs); - - //更新ChannelList对应的总库存 - ChannelList channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs.MachineId) && cl.Id.Equals(cs.ListId) && cl.DrawerNo.Equals(cs.DrawerNo)).FirstOrDefault(); - channelList.TotalQuantity = channelList.TotalQuantity - oi.DetailList[j].Quantity; - _connection.Update(channelList); - - // 获取更新完库存后的药品库存 - List nowChannels = _connection.ChannelStock.AsQueryable() - .Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId)) - .Where(it => it.DrugId.Equals(cs.DrugId)) - .Where(it => it.ManuNo.Equals(cs.ManuNo)) - .Where(it => it.DrawerType == 1) - .ToList(); - - if (cs != null) + int csQuantity = cs.Sum(cs => cs.Quantity); + if (csQuantity < oi.DetailList[j].Quantity) { + logger.Info($"处方{oi.OrderNo}中药品{oi.DetailList[j].DrugId}在{drawerNo}号库存不足,需要核对数{oi.DetailList[j].Quantity},库存总数{csQuantity}"); + continue; + } + //更新处方状态 + if (oi.Status == 0) + { + int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update(); + _connection.Insert(new OrderFinish() + { + OrderNo = oi.OrderNo, + PatientId = oi.PatientId, + Pharmacy = oi.Pharmacy, + State = 1, + //WinNo = DrawerNo + 1 + "号手术间", + Operator = _globalStateService.Operator.NickName, + }); + } + int Break = 0; + for (int k = 0; (k < cs.Count&&Break==0); k++) + { + int oldQuantity = cs[k].Quantity; + int useQuantity = 0; //实际使用数量 + if (cs[k].Quantity >= oi.DetailList[j].Quantity) + { + cs[k].Quantity = cs[k].Quantity - oi.DetailList[j].Quantity; + Break = 1;//药品够取跳出循环 + useQuantity = oi.DetailList[j].Quantity; + } + else + { + oi.DetailList[j].Quantity = oi.DetailList[j].Quantity - cs[k].Quantity; + useQuantity = cs[k].Quantity; + cs[k].Quantity = 0; + } + //cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity; + logger.Info($"更新药盒{cs[k].DrawerNo}药品{cs[k].DrugId}批次{cs[k].ManuNo}库存为{oldQuantity},处方用药数量为{oi.DetailList[j].Quantity}"); + // 更新数据 库存信息 + _connection.Update(cs[k]); + + //更新ChannelList对应的总库存 + ChannelList? channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs[k].MachineId) && cl.Id.Equals(cs[k].ListId) && cl.DrawerNo.Equals(cs[k].DrawerNo)).FirstOrDefault(); + if (channelList != null) + { + channelList.TotalQuantity = channelList.TotalQuantity - useQuantity;// oi.DetailList[j].Quantity; + _connection.Update(channelList); + } + // 获取更新完库存后的药品库存 + List nowChannels = _connection.ChannelStock.AsQueryable() + .Where(it => it.MachineId.Equals(cs[k].MachineId) || it.MachineId.Equals(_setting.machineId)) + .Where(it => it.DrugId.Equals(cs[k].DrugId)) + .Where(it => it.ManuNo.Equals(cs[k].ManuNo)) + .Where(it => it.DrawerType == 1) + .ToList(); _connection.Insert(new MachineRecord() { MachineId = _setting.machineId, - DrawerNo = cs.DrawerNo, - ColNo = cs.ColNo, - DrugId = cs.DrugId, - ManuNo = cs.ManuNo, - EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + DrawerNo = cs[k].DrawerNo, + ColNo = cs[k].ColNo, + DrugId = cs[k].DrugId, + ManuNo = cs[k].ManuNo, + EffDate = !String.IsNullOrEmpty(cs[k].EffDate) ? DateTime.ParseExact(cs[k].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, Operator = _globalStateService.Operator?.Id, Reviewer = _globalStateService.Reviewer?.Id, OperationTime = DateTime.Now, - Quantity = oi.DetailList[j].Quantity, + Quantity = useQuantity,// oi.DetailList[j].Quantity, Type = 2, InvoiceId = oi.OrderNo //, StockQuantity = nowChannels.Sum(it => it.Quantity) @@ -778,11 +807,11 @@ namespace MasaBlazorApp3.DataAccess.Impl //查询上一条账册中的空瓶数 - AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable() + AccountBookG2? accountBookEmpty = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 1 || ab.Type == 2) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) - .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First(); + .Where(ab => ab.ManuNo == cs[k].ManuNo).OrderByDescending(ab => ab.Id).FirstOrDefault(); //保存账册 int iInsertResult = _connection.Insert(new AccountBookG2() { @@ -790,9 +819,9 @@ namespace MasaBlazorApp3.DataAccess.Impl Type = 2, Department = oi.DeptName, OrderNo = oi.OrderNo, - ManuNo = cs.ManuNo, - EffDate = cs.EffDate, - OutQuantity = oi.DetailList[j].Quantity, + ManuNo = cs[k].ManuNo, + EffDate = cs[k].EffDate, + OutQuantity = useQuantity,// oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, @@ -804,15 +833,15 @@ namespace MasaBlazorApp3.DataAccess.Impl ShoushuJian = drawerNo.ToString() }); //修改凌晨生成的日结存与总结存数据 - AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable() + AccountBookG2? accountBookG2Day = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 3) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) - .Where(ab => ab.ManuNo == cs.ManuNo) - .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); + .Where(ab => ab.ManuNo == cs[k].ManuNo) + .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault(); if (accountBookG2Day != null) { - accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity; + accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - useQuantity;// oi.DetailList[j].Quantity; _connection.Update(accountBookG2Day); } else @@ -822,11 +851,11 @@ namespace MasaBlazorApp3.DataAccess.Impl { DrugId = oi.DetailList[j].DrugId, Type = 3, - ManuNo = cs.ManuNo, - EffDate = cs.EffDate, + ManuNo = cs[k].ManuNo, + EffDate = cs[k].EffDate, YQuantity = 0, - ManuStock = oi.DetailList[j].Quantity, - TotalStock = oi.DetailList[j].Quantity, + ManuStock = useQuantity,// oi.DetailList[j].Quantity, + TotalStock = useQuantity,// oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, @@ -835,18 +864,18 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (iDayResult <= 0) { - logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}"); + logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs[k].ManuNo}-{cs[k].EffDate}-{useQuantity}"); } } //修改凌晨生成的日结存与总结存数据 - AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable() + AccountBookG2? accountBookG2Total = _connection.AccountBookG2.AsQueryable() .Where(ab => ab.MachineId.Equals(_setting.machineId)) .Where(ab => ab.Type == 4) .Where(ab => ab.DrugId == oi.DetailList[j].DrugId) - .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); + .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault(); if (accountBookG2Total != null) { - accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity; + accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - useQuantity;// oi.DetailList[j].Quantity; _connection.Update(accountBookG2Total); } else @@ -857,8 +886,8 @@ namespace MasaBlazorApp3.DataAccess.Impl DrugId = oi.DetailList[j].DrugId, Type = 4, YQuantity = 0, - ManuStock = oi.DetailList[j].Quantity, - TotalStock = oi.DetailList[j].Quantity, + ManuStock = useQuantity,//oi.DetailList[j].Quantity, + TotalStock = useQuantity,// oi.DetailList[j].Quantity, UserId1 = _globalStateService.Operator?.Id, UserId2 = _globalStateService.Reviewer?.Id, MachineId = _setting.machineId, @@ -867,18 +896,13 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (iTotalResult <= 0) { - logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}"); + logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{useQuantity}"); } } - } - } } } - - return true; - logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单"); if (bFlag) @@ -886,6 +910,12 @@ namespace MasaBlazorApp3.DataAccess.Impl _connection.CommitTransaction(); return true; } + else + { + _connection.RollbackTransaction(); + logger.Info($"管理员{_globalStateService.Operator.NickName}确认手麻单失败"); + return false; + } } catch (Exception ex) { diff --git a/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs b/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs index 67b9c9b..126ab2b 100644 --- a/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs @@ -1,10 +1,13 @@ -using LinqToDB; +using Google.Protobuf; +using LinqToDB; using log4net; using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; +using MasaBlazorApp3.Pojo.Vo; using Microsoft.Extensions.Options; using Org.BouncyCastle.Crypto; +using Radzen; using System; using System.Collections.Generic; using System.Data.Common; @@ -25,11 +28,13 @@ namespace MasaBlazorApp3.DataAccess.Impl private readonly SettingConfig _setting; private readonly ILog logger = LogManager.GetLogger(typeof(DrugInfoDao)); private GlobalStateService _globalStateService; - public PlanDao(AppDataConnection connection, IOptions setting, GlobalStateService globalStateService) + private NotificationService _message; + public PlanDao(AppDataConnection connection, IOptions setting, GlobalStateService globalStateService,NotificationService message) { _connection = connection; _setting = setting.Value; _globalStateService = globalStateService; + _message = message; } /// /// 获取所有套餐数据 @@ -39,7 +44,7 @@ namespace MasaBlazorApp3.DataAccess.Impl { var query = _connection.Plan.AsQueryable(); - List list = await query.Where(p => p.UseState == 1) + List list = await query.Where(p => p.UseState == 1 && p.MachineId==_setting.boxMachineId) .LoadWith(p => p._PlanDetails.Where(pd => pd.UseState == 1)) //.ThenLoad(p=>p._DrugInfo) .OrderBy(r => r.Id) @@ -79,7 +84,7 @@ namespace MasaBlazorApp3.DataAccess.Impl /// public async Task GetPlanById(int Id) { - var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id && p.UseState == 1); + var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id && p.UseState == 1 && p.MachineId == _setting.boxMachineId); List list = await query .LoadWith(p => p._PlanDetails) //.ThenLoad(p=>p._DrugInfo) @@ -114,7 +119,27 @@ namespace MasaBlazorApp3.DataAccess.Impl plan.OperatorUser = _globalStateService.Operator.Id; plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id; plan.UseState = 1; - return _connection.InsertWithInt32Identity(plan) > 0; + plan.MachineId = _setting.machineId; + if(_connection.InsertWithInt32Identity(plan) > 0) + { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.boxMachineId, + OperationTime = DateTime.Now, + Type = 50, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"新增套餐{plan.Name}", + }); + + + return true; + } + else + { + return false; + } } catch (Exception ex) { @@ -134,7 +159,7 @@ namespace MasaBlazorApp3.DataAccess.Impl try { var iResult = _connection.Plan - .Where(p => p.Id == plan.Id) + .Where(p => p.Id == plan.Id && p.MachineId == _setting.boxMachineId) .Set(p => p.Name, plan.Name) .Set(p => p.Description, plan.Description); return iResult.Update() > 0; @@ -151,7 +176,7 @@ namespace MasaBlazorApp3.DataAccess.Impl try { //查询是否有绑定,没有绑定可以删除,有绑定则不允许删除 - List channelListsId =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.boxMachineId).Select(cl => cl.Id).ToListAsync(); + List channelListsId = await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.boxMachineId).Select(cl => cl.Id).ToListAsync(); if (channelListsId != null && channelListsId.Count > 0) { bool searchResult = _connection.ChannelStock.AsQueryable().Where(cs => channelListsId.Contains(cs.ListId)).Any(cs => cs.Quantity > 0); @@ -187,6 +212,20 @@ namespace MasaBlazorApp3.DataAccess.Impl try { _connection.BeginTransaction(); + + + //如果套餐下有绑药且库存为0的也将绑定药品信息一并删除 + List listIds = await _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString()).Select(cl => cl.Id).ToListAsync(); + int iDelResult = 1; + int iDelChannelListResult = 1; + if (listIds != null && listIds.Count > 0) + { + //删除channelStock表中的绑定药品 + iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete(); + _connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl => cl.DrugId, "").Update(); + + + } bool flag = false; logger.Error($"删除套餐{planId}"); //查询该套餐下是否有药品,如果有则一并删除 @@ -194,25 +233,25 @@ namespace MasaBlazorApp3.DataAccess.Impl int pdResult = 1; if (iHasPd > 0) { - pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync(); + pdResult = await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync(); } int pResult = await _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).UpdateAsync(); - //如果套餐下有绑药且库存为0的也将绑定药品信息一并删除 - List listIds =await _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString()).Select(cl => cl.Id).ToListAsync(); - int iDelResult = 1; - int iDelChannelListResult = 1; - if (listIds != null && listIds.Count > 0) - { - //删除channelStock表中的绑定药品 - iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete(); - _connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl=>cl.DrugId,"").Update(); - - - } + if (pdResult > 0 && pResult > 0 && iDelResult > 0 && iDelChannelListResult > 0) { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.boxMachineId, + OperationTime = DateTime.Now, + Type = 51, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"删除套餐{planId}", + }); + flag = true; } @@ -246,8 +285,18 @@ namespace MasaBlazorApp3.DataAccess.Impl { if (!string.IsNullOrEmpty(details.DrugId)) { - int id =await _connection.InsertWithInt32IdentityAsync(details); + int id = await _connection.InsertWithInt32IdentityAsync(details); details.Id = id; + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.boxMachineId, + OperationTime = DateTime.Now, + Type = 52, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"套餐{details.PlanId}添加药品{details.DrugId},基数{details.BaseQuantity}", + }); return id > 0; } else @@ -274,6 +323,17 @@ namespace MasaBlazorApp3.DataAccess.Impl .Where(p => p.Id == details.Id) .Set(p => p.DrugId, details._DrugInfo.DrugId) .Set(p => p.BaseQuantity, details.BaseQuantity); + + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.boxMachineId, + OperationTime = DateTime.Now, + Type = 53, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"修改套餐{details.PlanId},药品{details.DrugId}-{details._DrugInfo.DrugId},基数{details.BaseQuantity}", + }); return await iResult.UpdateAsync() > 0; } catch (Exception ex) @@ -289,7 +349,7 @@ namespace MasaBlazorApp3.DataAccess.Impl try { bool bFlag = true; - List idList =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planDetail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync(); + List idList = await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planDetail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync(); if (idList != null && idList.Count > 0) { bFlag = !(_connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == planDetail.DrugId).Any(cs => cs.Quantity > 0)); @@ -319,26 +379,37 @@ namespace MasaBlazorApp3.DataAccess.Impl List idList = await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == detail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync(); if (idList != null && idList.Count > 0) { - iDelResult= await _connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == detail.DrugId).DeleteAsync(); + iDelResult = await _connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == detail.DrugId).DeleteAsync(); } - if (iDelResult > 0) - { - bool bUpdateResult= _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p => p.UseState, 0).Update() > 0; - if(bUpdateResult) + //if (iDelResult > 0) + //{ + bool bUpdateResult = _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p => p.UseState, 0).Update() > 0; + if (bUpdateResult) + { + //保存操作记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() { - _connection.CommitTransaction(); - return true; - } - else - { - _connection.RollbackTransaction(); - return false; - } + MachineId = _setting.boxMachineId, + OperationTime = DateTime.Now, + Type = 54, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = $"删除套餐{detail.PlanId},中的药品{detail._DrugInfo.DrugName}ID:{detail.DrugId}", + }); + _connection.CommitTransaction(); + return true; } else { + _connection.RollbackTransaction(); return false; } + //} + //else + //{ + // logger.Error($"套餐中的药品{detail._DrugInfo.DrugName}无绑定"); + // return false; + //} } catch (Exception ex) { diff --git a/MasaBlazorApp3/DataAccess/Impl/ReportDataDao.cs b/MasaBlazorApp3/DataAccess/Impl/ReportDataDao.cs index b8298a6..78e0f5a 100644 --- a/MasaBlazorApp3/DataAccess/Impl/ReportDataDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/ReportDataDao.cs @@ -38,7 +38,7 @@ namespace MasaBlazorApp3.DataAccess.Impl WHERE cl.`machine_id` = '{_setting.machineId}' AND cl.`drawer_type` = 1 "; if (!string.IsNullOrEmpty(drugName)) { - SQL += " and di.drug_name = '{drugName}'"; + SQL += $" and (di.drug_name like '%{drugName}%'|| di.py_code like '%{drugName}%'||di.drug_id like '%{drugName}%')"; } SQL += " ORDER BY cl.`drug_id`"; // 加载模板文件 @@ -49,12 +49,12 @@ namespace MasaBlazorApp3.DataAccess.Impl { foreach (var report in reportList) { - reportStockList.Add(report); + reportStockList.Add(report); } pagedData = await reportList.CountAsync(); } - return new PageData() + return new PageData() { TotalDesserts = pagedData, @@ -67,32 +67,31 @@ namespace MasaBlazorApp3.DataAccess.Impl return null; } } - + //中部战区总医院麻醉药品、第一类精神药品进出专用账册 public async Task> GetAccountExportData(DateTime? startDate, DateTime? endDate, string drugName) { List accountList = new List(); int pagedData = 0; DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1"); DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1); - string SQL = $@"SELECT mr.`stock_quantity` AS `stockQuantity`, IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, 0)) - AS `inQuantity`, IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), 0)) AS `outQuantity`, - mr.`operation_time` AS `operationTime`, mr.`invoice_id` AS `invoiceId`, di.`drug_name` AS `drugName`, di.`drug_id` AS `drugId`, - di.`drug_spec` AS `drugSpec`, di.`big_unit` AS `BigUnit`, di.`dosage` AS `dosage`, di.`manufactory` AS `manufactory`, - mr.`manu_no` AS `manuNo`, mr.`eff_date` AS `effDate`, u1.`user_name` AS `operatorName`, u2.`user_name` AS `reviewerName` FROM - dm_machine_record mr LEFT JOIN drug_info di ON mr.`drug_id` = di.`drug_id` LEFT JOIN user_list u1 ON mr.`operator` = u1.`id` - LEFT JOIN user_list u2 ON mr.`reviewer` = u2.`id` WHERE mr.`machine_id` = '{_setting.machineId}' AND mr.`operation_time` > '{p_startDate}' - AND mr.`operation_time` < '{p_endDate}'"; + string SQL = $@"SELECT ab.`create_time` AS `OperationTime`,ab.manu_no AS ManuNo,ab.eff_date as EffDate, ab.add_quantity AS `inQuantity`, + ab.out_quantity AS `outQuantity`,ab.manu_quantity as ManuQuantity,ab.total_quantity as StockQuantity, + u1.`user_name` AS `operatorName`, u2.`user_name` AS `reviewerName`, ab.`drug_id` AS `drugId`,di.`drug_name` AS `drugName`,di.`drug_spec` AS `drugSpec`, di.`pack_unit` AS `BigUnit`, di.`dosage` AS `dosage`, + di.`manufactory` AS `manufactory`, ab.`invoice_id` AS `invoiceId`, ab.department as department,'' as Remarks FROM + account_book ab LEFT JOIN drug_info di ON ab.`drug_id` = di.`drug_id` LEFT JOIN user_list u1 ON ab.`operator` = u1.`id` + LEFT JOIN user_list u2 ON ab.`reviewer` = u2.`id` WHERE ab.`machine_id` = '{_setting.machineId}' AND ab.type in(1,2,31) DATE_FORMAT(ab.`create_time`,'%Y-%m-%d') > '{p_startDate}' + AND DATE_FORMAT(ab.`create_time`,'%Y-%m-%d') < '{p_endDate}'"; if (!string.IsNullOrEmpty(drugName)) { - SQL += " AND di.drug_name= '{drugName}'"; + SQL += $" AND (di.drug_name like '%{drugName}%' or di.drug_id like '%{drugName}%' or di.py_code like '%{drugName}%')"; } - SQL += " ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`"; + SQL += " ORDER BY ab.`create_time`, ab.`drug_id`"; var reportList = _connection.FromSql(SQL); if (reportList != null) { foreach (var report in reportList) { - accountList.Add(report); + accountList.Add(report); } pagedData = await reportList.CountAsync(); @@ -104,5 +103,67 @@ namespace MasaBlazorApp3.DataAccess.Impl Desserts = accountList }; } + //手术室患者麻醉药品使用登记本 + public async Task> GetOrderInfoData(DateTime searchDate) + { + List accountList = new List(); + int pagedData = 0; + + string SQL = $@"SELECT oi.Order_date as portdate, od.drug_id as DrugId,1 as ShouShuJian,'' as ZhuMa,'' as FuMa,oi.patient_id as IDNumber,oi.p_name as PName,oi.disease as Diagnose, + CONCAT(di.drug_name,' ',di.drug_spec) as DrugName,od.set_manu_No as ManuNo,od.use_dosage as UsageDosage,'' as CanYeLiang,'' as CanYeChuZhi,'' as UseUserName,'' as CheckUserName + from order_info oi inner join order_detail od on oi.order_no=od.order_no inner join drug_info di on od.drug_id=di.drug_id + WHERE DATE_FORMAT(oi.Order_date,'%Y-%m-%d')='{searchDate.ToString("yyyy-MM-dd")}' and oi.dm_status=2 and oi.cancel_flag=0 and oi.his_disp_flag=0 and di.pack_h=1"; + + + + + var reportList = _connection.FromSql(SQL); + if (reportList != null) + { + foreach (var report in reportList) + { + accountList.Add(report); + } + + pagedData = await reportList.CountAsync(); + } + return new PageData() + { + + TotalDesserts = pagedData, + Desserts = accountList + }; + } + + //麻醉科毒麻药品请领登记表 + public async Task> GetApplyInfoDate(DateTime searchDate) + { + List accountList = new List(); + int pagedData = 0; + + string SQL = $@"SELECT Drawerno as BoxNum,Create_date AS applyinfo,userfirst,usersecond,drugid,doctor,manager + from applyinfo ap inner join drug_info di on ap.drugid=di.drug_id + WHERE machine_id='{_setting.boxMachineId}' and DATE_FORMAT(ap.Create_date,'%Y-%m-%d')='{searchDate.ToString("yyyy-MM-dd")}' "; + + + + + var reportList = _connection.FromSql(SQL); + if (reportList != null) + { + foreach (var report in reportList) + { + accountList.Add(report); + } + + pagedData = await reportList.CountAsync(); + } + return new PageData() + { + + TotalDesserts = pagedData, + Desserts = accountList + }; + } } } diff --git a/MasaBlazorApp3/DataAccess/Impl/SettingManuDao.cs b/MasaBlazorApp3/DataAccess/Impl/SettingManuDao.cs index 44cd6fb..67ea73f 100644 --- a/MasaBlazorApp3/DataAccess/Impl/SettingManuDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/SettingManuDao.cs @@ -26,7 +26,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } public async Task> GetMenuItemsAsync() { - var query = _connection.SettingManu.AsQueryable(); + var query = _connection.SettingManu.Where(s=>s.UseStatus==1).AsQueryable(); return await query diff --git a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs index 535309b..ad18e9e 100644 --- a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs @@ -144,7 +144,39 @@ namespace MasaBlazorApp3.DataAccess.Impl .Where(cs => cs.Id == changeShift.Id) .Set(cs => cs.State, "1") .Set(cs => cs.ToDate, DateTime.Now) - .Set(cs=>cs.ToOperator,changeShift.ToOperator).Update(); + .Set(cs => cs.ToOperator, changeShift.ToOperator).Update(); + + //插入交接班时药品数据信息 + var channelStockList = _connection.ChannelStock + .Where(cs => (cs.MachineId == _setting.machineId || cs.MachineId == _setting.boxMachineId) && cs.DrawerType == 1) + .GroupBy(cs => cs.DrugId) + .Select(g => new + { + drugId = g.Key, + sumQuantity = g.Sum(cs => cs.Quantity) + }).ToList(); + + if (channelStockList != null && channelStockList.Count > 0) + { + //将药品库存信息写入交接明细表 + for (int i = 0; i < channelStockList.Count; i++) + { + //查询药品上次交接的明细,用于记录处方数 + HkcChangeShiftsDetail? historyList = _connection.HkcChangeShiftsDetail + .Where(d => d.DrugId == channelStockList[i].drugId && d.ChangeshiftsId == changeShift.Id).FirstOrDefault(); + + HkcChangeShiftsDetail detail = new HkcChangeShiftsDetail() + { + ChangeshiftsId = insertResult, + DrugId = channelStockList[i].drugId, + RealNumber = channelStockList[i].sumQuantity, + OrderNumber = historyList != null ? historyList.OrderNumber + historyList.RealNumber - channelStockList[i].sumQuantity : 0 + }; + var insertDetailResult = _connection.InsertWithInt32Identity(detail); + } + } + + if (insertResult <= 0 || updateResult <= 0) { _connection.RollbackTransaction(); diff --git a/MasaBlazorApp3/MasaBlazorApp3.csproj b/MasaBlazorApp3/MasaBlazorApp3.csproj index b6c5852..2b47f02 100644 --- a/MasaBlazorApp3/MasaBlazorApp3.csproj +++ b/MasaBlazorApp3/MasaBlazorApp3.csproj @@ -93,5 +93,8 @@ Always + + Always + diff --git a/MasaBlazorApp3/Pages/BoxAddBox.razor b/MasaBlazorApp3/Pages/BoxAddBox.razor index 71237b2..c001ea3 100644 --- a/MasaBlazorApp3/Pages/BoxAddBox.razor +++ b/MasaBlazorApp3/Pages/BoxAddBox.razor @@ -70,9 +70,9 @@ - + @@ -124,7 +124,7 @@ async void OnRowSelect(ChannelList cl) { var b = await dialogService.OpenAsync( - $"{cl.DrawerNo}号药箱药品入库", + $"{cl.DrawerNo}号药盒药品入库", new Dictionary() { { "boxChannelList", cl } }, new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false } ); diff --git a/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor b/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor index 67ec488..a56fd0c 100644 --- a/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor +++ b/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor @@ -8,13 +8,39 @@ - - - - + + + + + + + + + + + @@ -38,6 +64,8 @@ int count; [Parameter] public ChannelList boxChannelList { get; set; } + List channelStockList = new List(); + public List data { get; set; } //称重取药数量 int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -47,6 +75,7 @@ protected override async Task OnInitializedAsync() { + channelStockList = await channelListDao.GetBoxAddToBox(boxChannelList); base.OnInitializedAsync(); } async Task LoadData(LoadDataArgs args) @@ -256,7 +285,7 @@ if (!b) { _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 }); - logger.Error($"手术室药箱取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}"); + logger.Error($"手术室药盒取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}"); // 关闭弹窗 dialogService.Close(false); } diff --git a/MasaBlazorApp3/Pages/BoxAddDetailDialog.razor b/MasaBlazorApp3/Pages/BoxAddDetailDialog.razor index 4ef9302..97d79c0 100644 --- a/MasaBlazorApp3/Pages/BoxAddDetailDialog.razor +++ b/MasaBlazorApp3/Pages/BoxAddDetailDialog.razor @@ -192,7 +192,11 @@ } }); orderTakeVo.Status = 2; - PortUtil.AllLightOff(); + if (data.Any(it => it.ChannelStock.BoardType == 2)) + { + //有单支抽屉则广播灭灯 + PortUtil.AllLightOff(); + } if (options._data == drawerNos.Count - 1) { PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); @@ -311,7 +315,7 @@ if (!b) { _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 }); - logger.Error($"手术室药箱取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}"); + logger.Error($"手术室药盒取药保存数据库失败,数据{JsonConvert.SerializeObject(data)}"); // 关闭弹窗 dialogService.Close(false); } diff --git a/MasaBlazorApp3/Pages/BoxAddDrug.razor b/MasaBlazorApp3/Pages/BoxAddDrug.razor index d29dd4e..2a2a2fc 100644 --- a/MasaBlazorApp3/Pages/BoxAddDrug.razor +++ b/MasaBlazorApp3/Pages/BoxAddDrug.razor @@ -1,52 +1,90 @@ @page "/Box/BoxAdd" +@using MasaBlazorApp3.Report +@using Radzen.Blazor.Rendering
- + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -82,19 +120,21 @@ @code { @inject IChannelListDao channelStockDao; @inject DialogService dialogService; + @inject IReportDataDao reportDataDao; RadzenDataGrid grid; bool isLoading; int count; private IEnumerable? _forecasts; DateTime start; DateTime end; - + RadzenButton button; + Popup popup; IList selectedChannelLists; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - + } async Task LoadData(LoadDataArgs args) { @@ -123,7 +163,7 @@ async void OnRowSelect(ChannelList cl) { var b = await dialogService.OpenAsync( - $"{cl.DrawerNo}号药箱取药", + $"{cl.DrawerNo}号药盒加药", new Dictionary() { { "boxChannelList", cl } }, new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false } ); @@ -134,14 +174,14 @@ } - async void StockExport() + + //请领登记表导出 + async Task AccountBookExport() { - - } - - async void AccountBookExport() - { - + // string drugId = drugName != null ? drugName.Split('/').Last().Trim():""; + // GridReportUtil gridReportUtil = new GridReportUtil(); + PageData pageData = await reportDataDao.GetApplyInfoDate(start); + GridReportUtil.PrintReport("account_book_temp.grf", pageData); } diff --git a/MasaBlazorApp3/Pages/BoxBind.razor b/MasaBlazorApp3/Pages/BoxBind.razor index 687e10c..71129ef 100644 --- a/MasaBlazorApp3/Pages/BoxBind.razor +++ b/MasaBlazorApp3/Pages/BoxBind.razor @@ -1,4 +1,4 @@ -@page "/Box/BoxBindings" +@page "/Box/BoxBindings123"
@@ -12,7 +12,7 @@ @(channel.DrawerNo) - 号手术间 + 号药盒 @@ -105,7 +105,7 @@ async Task EditChannel(ChannelList list) { - if (list.PlanInfo.Id > 0) + if (list.PlanInfo.Id > 0) { // 说明之前有绑定并且未改变,那么就是在进行解绑 if (list.DrugId != null && list.DrugId.Equals(list.PlanInfo.Id.ToString())) diff --git a/MasaBlazorApp3/Pages/BoxBindNew.razor b/MasaBlazorApp3/Pages/BoxBindNew.razor new file mode 100644 index 0000000..63cf6f2 --- /dev/null +++ b/MasaBlazorApp3/Pages/BoxBindNew.razor @@ -0,0 +1,202 @@ +@page "/Box/BoxBindings" + + +
+
+ +
+
+ @if (BoxList != null) + { + foreach (var item in BoxList) + { +
+ + +
+ } + } +
+
+
+ + +
+ + + 选择套餐 + + + + + + + + + +
+
+
+ +@code { + @inject IChannelListDao channelListDao; + @inject IDrugInfoDao drugInfoDao; + @inject DialogService dialogService; + @inject NotificationService _message; + @inject IPlanDao planDao; + int count; + private List? _forecasts; + private List? BoxList; + + List drugInfos; + List drugManuNos; + + DrugInfo drugInfo; + + DrugManuNo drugManuNo; + + int firstFlag = 0; + + List plans; + // 默认选中的项 + private Plan selectedPlan = new(); + protected override async Task OnInitializedAsync() + { + await LoadData(); + await base.OnInitializedAsync(); + + //drugInfos = await drugInfoDao.GetAllDrug(); + } + + async Task LoadData() + { + BoxList = await channelListDao.GetAllBox(); + var result = await planDao.GetAllPlanInfo(); + plans = result.Desserts.Where(p=>p._PlanDetails.Count>0).ToList(); + _forecasts = await channelListDao.GetAllChannelList(); + firstFlag = 0; + } + + // 处理选择变更(可选) + private void OnPlanSelected(Plan plan) + { + selectedPlan = plan; + } + + //绑定 + async Task EditChannel() + { + List bindList = BoxList.Where(b => b.IsChecked).ToList(); + if (bindList == null || bindList.Count <= 0) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"请先选择药箱号再点击按钮", Duration = 4000 } + ); + return; + } + if (!string.IsNullOrEmpty(bindList[0].DrugId)) + { + //之前有绑定,在进行解绑 + foreach (var item in bindList) + { + var b = await channelListDao.UnBindBox(item); + if (b) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"解除绑定成功", Duration = 4000 } + ); + } + } + await LoadData(); + } + else + {// 否则是进行绑定 + if (selectedPlan != null && selectedPlan.Id > 0) + { + foreach (var item in bindList) + { + var b = await channelListDao.BindBox(item, selectedPlan); + if (b) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"绑定成功", Duration = 4000 } + ); + } + } + await LoadData(); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请选择套餐", Duration = 4000 } + ); + + } + } + } + + private async Task OnCheckBoxChange(bool isChecked, int DrawerNo) + { + //isChecked==true 1)当前选择的药箱已经绑药套餐且库存<=0,如果有库存则提示不能选择,如果无库存则列出与之绑定相同套餐且库存<=0的药箱号,其他药箱号不可选择 + // 2)当前选择的药箱未绑定套餐则将所有未绑定套餐的药箱号列出来,其他药箱不可操作 + if (firstFlag == 0) + { + if (isChecked) + { + firstFlag = 1; + string drugId = BoxList.Where(b => b.DrawerNo == DrawerNo).Select(b => b.DrugId).FirstOrDefault(); + //所选药箱已绑定套餐 + if (!string.IsNullOrEmpty(drugId)) + { + //查询该药箱下的药品库存是否存在不为0的,存在则不让选择 + List stockList = await channelListDao.GetChannelStockByBox(DrawerNo); + if (stockList != null && stockList.Count > 0) + { + //该药箱下存在库存不为0的药品 + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"该药盒下的药品仍有库存,请清库存后再操作", Duration = 4000 } + ); + return; + } + else + { + //无库存则列出与之绑定相同套餐且库存 <= 0的药箱号,其他药箱号不可选择 + // BoxList.Where(b => string.IsNullOrEmpty(b.DrugId)).ToList().ForEach(b => b.BoxDisabled = true); + //1)查询套餐下无库存的药箱号 + List? lists = await channelListDao.GetChannelStockByPlan(drugId); + if (lists != null && lists.Count > 0) + { + int[] boxNum = lists.Select(l => l.DrawerNo).ToArray(); + //不在该lists下的药箱号不可选择 + BoxList.Where(b => !boxNum.Contains(b.DrawerNo)).ToList().ForEach(b => b.BoxDisabled = true); + } + selectedPlan = await planDao.GetPlanById(Convert.ToInt32(drugId)); + } + + } + else + { + + //未绑定套餐 ,列出所有未绑的药箱号,其他不可操作 + BoxList.Where(b => !string.IsNullOrEmpty(b.DrugId)).ToList().ForEach(b => b.BoxDisabled = true); + } + + } + } + else + { + if (!isChecked) + { + //isChecked==false 1)是否全部是false,是则将所有isChecked==true,不是则不做改变 + if (!BoxList.Any(b => b.IsChecked == true)) + { + BoxList.ForEach(b => b.BoxDisabled = false); + firstFlag = 0; + } + } + } + } + + +} diff --git a/MasaBlazorApp3/Pages/BoxRemoveDialog.razor b/MasaBlazorApp3/Pages/BoxRemoveDialog.razor index 1c00825..1886973 100644 --- a/MasaBlazorApp3/Pages/BoxRemoveDialog.razor +++ b/MasaBlazorApp3/Pages/BoxRemoveDialog.razor @@ -24,7 +24,7 @@ - 移入药箱: + 移入药盒: @(SelectedDrawerNo) @@ -109,14 +109,14 @@ } if (SelectedDrawerNo<=0) { - _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药箱", Duration = 4000 }); + _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药盒", Duration = 4000 }); return; } var b = await channelListDao.BoxRemoveFinish(channelStock, SelectedDrawerNo,removeQuantity); if (!b) { _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 }); - logger.Error($"药箱移出保存数据失败,数据{JsonConvert.SerializeObject(channelStock)}"); + logger.Error($"药盒移出保存数据失败,数据{JsonConvert.SerializeObject(channelStock)}"); } else { diff --git a/MasaBlazorApp3/Pages/BoxReplace.razor b/MasaBlazorApp3/Pages/BoxReplace.razor index 75a6cd6..3a1cdc4 100644 --- a/MasaBlazorApp3/Pages/BoxReplace.razor +++ b/MasaBlazorApp3/Pages/BoxReplace.razor @@ -19,7 +19,7 @@ @(channelStock.EffDate) 库存: @(channelStock.Quantity) - 交换药箱: + 交换药盒: @(SelectedDrawerNo) @@ -31,7 +31,7 @@ CellClick="@((DataGridCellMouseEventArgs args) => OnCellClick(args))" AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"> - + @@ -134,7 +134,7 @@ if (!b) { _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 }); - logger.Error($"药箱药品替换保存数据库失败,数据{JsonConvert.SerializeObject(selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList())}"); + logger.Error($"药盒药品替换保存数据库失败,数据{JsonConvert.SerializeObject(selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList())}"); } else { diff --git a/MasaBlazorApp3/Pages/BoxStock.razor b/MasaBlazorApp3/Pages/BoxStock.razor index c7d0782..8ebc45d 100644 --- a/MasaBlazorApp3/Pages/BoxStock.razor +++ b/MasaBlazorApp3/Pages/BoxStock.razor @@ -2,132 +2,104 @@ @using MasaBlazorApp3.Pojo.Config -
-
+
+
@foreach (int i in DrawerNos) { - + }
-
- @* - - - - - - - - - *@ - - @* - - - - - - - - - - - - - - - *@ - +
@@ -196,7 +168,7 @@ if (cs.Quantity > 0) { var b = await dialogService.OpenAsync( - $"{cs.DrawerNo}号药箱替换药品详情", + $"{cs.DrawerNo}号药盒替换药品详情", new Dictionary() { { "channelStock", cs } }, new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false } ); @@ -219,7 +191,7 @@ if (cs.Quantity > 0) { var b = await dialogService.OpenAsync( - $"{cs.DrawerNo}号药箱替换药品详情", + $"{cs.DrawerNo}号药盒替换药品详情", new Dictionary() { { "channelStock", cs } }, new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false } ); diff --git a/MasaBlazorApp3/Pages/ChangeShifts.razor b/MasaBlazorApp3/Pages/ChangeShifts.razor index 6310490..52b9b13 100644 --- a/MasaBlazorApp3/Pages/ChangeShifts.razor +++ b/MasaBlazorApp3/Pages/ChangeShifts.razor @@ -48,7 +48,7 @@ - 登录 + 交接班登录验证
@@ -66,10 +66,19 @@
+ @if (userI > 2) + { +
+ +
+ +
+
+ }
@@ -105,7 +114,7 @@ Pojo.User ToReviewer = new Pojo.User(); HkcChangeShifts hkcChange = new HkcChangeShifts(); - + string remarks = string.Empty; bool isShow; private Pojo.User loginModel = new(); @@ -207,7 +216,8 @@ optDate = DateTime.Now, ToDate = DateTime.Now, State = "0", //状态为1表示交接班完成 - MachineId = hkcChange.MachineId + MachineId = hkcChange.MachineId, + Remarks = remarks }; hkcChange.ToOperator = ToOperator.Username; bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew); @@ -247,7 +257,8 @@ FromRviewer = ToReviewer?.Username, optDate = DateTime.Now, State = "0", //状态为1表示交接班完成 - MachineId = hkcChange.MachineId + MachineId = hkcChange.MachineId, + Remarks = remarks }; bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew); if (bResult) diff --git a/MasaBlazorApp3/Pages/CheckOrder.razor b/MasaBlazorApp3/Pages/CheckOrder.razor index f5e21b7..971b921 100644 --- a/MasaBlazorApp3/Pages/CheckOrder.razor +++ b/MasaBlazorApp3/Pages/CheckOrder.razor @@ -1,17 +1,27 @@ @page "/Box/Check" @using MasaBlazorApp3.Pojo.Config +@using MasaBlazorApp3.Report - -
-
+ + @*
+
@foreach (int i in DrawerNos) { - + + + } +
+
*@ +
+
+ @foreach (int i in DrawerNos) + { + }
-
+
@@ -28,7 +38,7 @@ - + @@ -38,6 +48,9 @@ + + + @@ -72,7 +85,7 @@ } - + @* - + *@