diff --git a/MasaBlazorApp3.sln b/MasaBlazorApp3.sln index 6b2abd8..3049405 100644 --- a/MasaBlazorApp3.sln +++ b/MasaBlazorApp3.sln @@ -8,13 +8,19 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.ActiveCfg = Debug|x64 + {B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.Build.0 = Debug|x64 {B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.ActiveCfg = Release|Any CPU {B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.Build.0 = Release|Any CPU + {B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.ActiveCfg = Release|x64 + {B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs index 0633963..52b8efe 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs @@ -54,8 +54,9 @@ namespace MasaBlazorApp3.DataAccess.Dao //手术室药箱入库 Task> GetBoxWaitInfo(int? take, int? skip); //手术室药箱入库获取待入库明细 - Task> getBoxWaitByBox(ChannelList cl); - + Task> getBoxWaitByBox(ChannelList cl, int? take, int? skip); + // 手术室药箱待入库明细入库完成 + Task BoxAddBoxFinish(ChannelList boxChannelList); //手术室药箱获取药箱药品及库存信息 Task> GetBoxDrugInfo(int DrawerNo, int? take, int? skip); diff --git a/MasaBlazorApp3/DataAccess/Dao/IPlanDao.cs b/MasaBlazorApp3/DataAccess/Dao/IPlanDao.cs index dcdf0c5..a56866f 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IPlanDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IPlanDao.cs @@ -51,6 +51,10 @@ namespace MasaBlazorApp3.DataAccess.Dao /// /// Task UpdatePlanDetail(PlanDetails details); + //查询要删除的套餐下是否有绑定,且绑定有库存 + Task CheckPlanBind(int planId); + //查询要删除的药品是否有绑定且库存大于0 + Task CheckPlanDetailBind(PlanDetails planDetail); /// /// 删除套餐中的药品 /// diff --git a/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs b/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs index 496cbef..8b12b3c 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs @@ -21,5 +21,9 @@ namespace MasaBlazorApp3.DataAccess.Dao Task UpdateSign(int id, string sign); bool UpdateUserPassword(User user); + //查询当前值班信息 + HkcChangeShifts GetOnDuty(); + //保存交接班信息 + Task UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew); } } diff --git a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs index 229ea69..f124650 100644 --- a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs @@ -315,7 +315,7 @@ namespace MasaBlazorApp3.DataAccess.Impl var q = _connection.ChannelStock .Where(cs => cs.Id == Stock.Id) .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty) - .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().Substring(0, 10) ?? String.Empty) + .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.Value.ToString("yyyy-MM-dd") ?? String.Empty) .Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty); if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId)) @@ -617,7 +617,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .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); + 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) { @@ -631,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl DrawerNo = list.DrawerNo, DrugId = planInfos[i].DrugId.ToString(), BaseQuantity = planInfos[i].BaseQuantity, + BoxState = 1 }); if (mid > 0) { @@ -789,7 +790,7 @@ namespace MasaBlazorApp3.DataAccess.Impl if (flag) { // 盘点库存是否足够 - if (total > Quantity) + if (total >= Quantity) { for (var j = 0; Quantity > 0; j++) @@ -960,7 +961,7 @@ namespace MasaBlazorApp3.DataAccess.Impl NeedQuantity = 0, DrugId = boxTakeVo.ChannelStock.DrugId, ManuNo = boxTakeVo.ChannelStock.ManuNo, - EffDate = boxTakeVo.ChannelStock.EffDate, + EffDate = EffDate, BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity, BoardType = boxTakeVo.BoxDetail.BoardType, BoxState = 2 //补药完成 @@ -980,12 +981,12 @@ namespace MasaBlazorApp3.DataAccess.Impl Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, 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 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(); - if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0 && list > 0) + if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0) { if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5")) { @@ -1080,7 +1081,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } } //手术室药箱入库获取待入库明细 - public async Task> getBoxWaitByBox(ChannelList cl) + public async Task> getBoxWaitByBox(ChannelList cl, int? take, int? skip) { try { @@ -1093,8 +1094,10 @@ namespace MasaBlazorApp3.DataAccess.Impl // 当前药品取药数量 var Quantity = boxCs.NeedQuantity; List stockList = await _connection.ChannelStock - .Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType == 1 && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null) + .Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null) .AsQueryable() + .Skip((int)skip) + .Take((int)take) .OrderBy(cs => cs.EffDate).ToListAsync(); // 当前药品的库存总量 @@ -1106,58 +1109,6 @@ namespace MasaBlazorApp3.DataAccess.Impl StockQuantity = total, Quantity = Quantity }); - - if (flag) - { - // 盘点库存是否足够 - if (total > Quantity) - { - - for (var j = 0; Quantity > 0; j++) - { - ChannelStock stock = stockList[j]; - if (Quantity > stock.Quantity) - { - // 取药数量大于库存 - tempData.Add(new BoxTakeVo() - { - Drug = boxCs.Drug, - BoxDetail = boxCs, - ChannelStock = stock, - StockQuantity = total, - Quantity = stock.Quantity, - }); - Quantity -= stock.Quantity; - } - else - { - //取药数量小于库存 - tempData.Add(new BoxTakeVo() - { - Drug = boxCs.Drug, - BoxDetail = boxCs, - ChannelStock = stock, - StockQuantity = total, - Quantity = Quantity, - }); - Quantity = 0; - } - } - } - else - { - // 库存不足 - flag = false; - } - } - } - if (flag) - { - return tempData; - } - else - { - return tempData2; } return tempData; @@ -1168,6 +1119,98 @@ namespace MasaBlazorApp3.DataAccess.Impl return null; } } + // 手术室药箱待入库明细入库完成 + public async Task BoxAddBoxFinish(ChannelList boxChannelList) + { + try + { + _connection.BeginTransaction(); + bool flag = true; + int totalQuantity =0; + for (var i = 0; i < boxChannelList.ChannelStocks.Count; i++) + { + + var EffDate = boxChannelList.ChannelStocks[i].EffDate; + //效期转换出错 + 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() + { + 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]); + + 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; + int updateResult = _connection + .Update(boxChannelList); + if (updateResult > 0) + { + _connection.CommitTransaction(); + } + else + { flag = false; + _connection.RollbackTransaction(); + } + } + else + { + _connection.RollbackTransaction(); + } + return flag; + } + catch (Exception ex) + { + logger.Info($"手术室药箱待入库明细入库完成操作异常:{ex.Message}"); + return false; + } + } //手术室药箱获取药箱药品及库存信息 public async Task> GetBoxDrugInfo(int DrawerNo, int? take, int? skip) @@ -1176,7 +1219,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .InnerJoin( _connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)), (pd, cl) => pd.PlanId.ToString() == cl.DrugId, - (pd, cl) => pd); + (pd, cl) => pd).Where(pd=>pd.UseState==1); @@ -1226,7 +1269,7 @@ namespace MasaBlazorApp3.DataAccess.Impl { try { - var query = _connection.ChannelStock.AsQueryable().Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo.Equals(drawerNo) && c.DrugId.Equals(cs.DrugId)&&c.ManuNo!=cs.ManuNo&&c.EffDate!=cs.EffDate); + var query = _connection.ChannelStock.AsQueryable().Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo.Equals(drawerNo) && c.DrugId.Equals(cs.DrugId) && c.ManuNo != cs.ManuNo && c.EffDate != cs.EffDate); @@ -1261,7 +1304,7 @@ namespace MasaBlazorApp3.DataAccess.Impl /// public async Task GetDrawerNum(ChannelStock channelStock) { - int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo && !string.IsNullOrEmpty(cs.ManuNo)&&cs.ManuNo!=channelStock.ManuNo) + int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo && !string.IsNullOrEmpty(cs.ManuNo) && cs.ManuNo != channelStock.ManuNo) .GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); return ints; } @@ -1321,9 +1364,9 @@ namespace MasaBlazorApp3.DataAccess.Impl break; } } - + //记录操作记录 - int recordId = _connection.InsertWithInt32Identity(new MachineRecord() + int recordId = _connection.InsertWithInt32Identity(new MachineRecord() { MachineId = stock.MachineId, DrawerNo = stock.DrawerNo, @@ -1337,7 +1380,7 @@ namespace MasaBlazorApp3.DataAccess.Impl Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, InvoiceId = stockList[i].Id.ToString(), }); - if(recordId <= 0) + if (recordId <= 0) { logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false; @@ -1359,7 +1402,7 @@ namespace MasaBlazorApp3.DataAccess.Impl if (r <= 0) { logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); - flag= false; + flag = false; break; } } @@ -1381,7 +1424,7 @@ namespace MasaBlazorApp3.DataAccess.Impl if (mid <= 0) { logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); - flag= false; + flag = false; break; } @@ -1429,7 +1472,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } if (flag) { - + _connection.CommitTransaction(); } else @@ -1447,7 +1490,7 @@ namespace MasaBlazorApp3.DataAccess.Impl } } //手术室药箱移出药品完成 - public async Task BoxRemoveFinish(ChannelStock stock,int SelectedDrawerNo,int removeQuantity) + public async Task BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity) { try { @@ -1472,14 +1515,14 @@ namespace MasaBlazorApp3.DataAccess.Impl { //如果没有该批次的药品,先查询是否有未绑批次的,有则更新批次信息,无则新增一条记录 ChannelStock inDrugChannelStock = _connection.ChannelStock.AsQueryable() - .Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId ) + .Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId) .FirstOrDefault(); if (inDrugChannelStock != null) { - int mid= _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id) + int mid = _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id) .Set(cs => cs.Quantity, removeQuantity) - .Set(cs=>cs.ManuNo, stock.ManuNo) - .Set(cs=>cs.EffDate,stock.EffDate) + .Set(cs => cs.ManuNo, stock.ManuNo) + .Set(cs => cs.EffDate, stock.EffDate) .Update(); if (mid <= 0) { @@ -1516,16 +1559,16 @@ 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 { int updateTotalQuantity = 0; - int updateMoveToTotalQuantity=0; + int updateMoveToTotalQuantity = 0; //修改总库存数 ChannelList channelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == stock.DrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault(); - if(channelList!=null) + if (channelList != null) { updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == channelList.Id) .Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity) @@ -1539,7 +1582,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Set(cl => cl.TotalQuantity, channelList.TotalQuantity + removeQuantity) .Update(); } - if(updateTotalQuantity>0&&updateMoveToTotalQuantity > 0) + if (updateTotalQuantity > 0 && updateMoveToTotalQuantity > 0) { flag = true; } diff --git a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs index 0ed7a82..d0f745f 100644 --- a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs @@ -590,10 +590,6 @@ namespace MasaBlazorApp3.DataAccess.Impl /// public async Task> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip) { - //var query = _connection.OrderInfo.AsQueryable(); - - //query.InnerJoin((oi, od) => oi.OrderNo == od.OrderNo); - var query2 = from od in _connection.OrderDetail from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId) group od by od.OrderNo into temp @@ -601,7 +597,6 @@ namespace MasaBlazorApp3.DataAccess.Impl var query = from oi in _connection.OrderInfo from od in query2.InnerJoin(od => od.Key == oi.OrderNo) select oi; - if (!String.IsNullOrEmpty(OrderrNo)) { query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); @@ -619,8 +614,7 @@ namespace MasaBlazorApp3.DataAccess.Impl int pagedData = await query.CountAsync(); List list = await query - .LoadWith(oi => oi.Detail) - .LoadWith(oi => oi.Detail.Drug) + //.LoadWith(oi => oi.DetailList) .OrderBy((oi) => oi.RecvDate) .ThenBy((oi => oi.OrderNo)) .Skip((int)skip) @@ -630,13 +624,57 @@ namespace MasaBlazorApp3.DataAccess.Impl { for (int i = 0; i < list.Count; i++) { - //list[i].Detail = await _connection.OrderDetail.AsQueryable() - // .Where(od => od.OrderNo == list[i].OrderNo) - // .LoadWith(od => od.Drug) - // .ToListAsync(); + for (int j = 0; j < list[i].DetailList.Count; j++) + { + list[i].DetailList[j].Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailList[j].DrugId).FirstOrDefaultAsync(); + } } } + + //var query2 = from od in _connection.OrderDetail + // from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).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) + // select oi; + + //if (!String.IsNullOrEmpty(OrderrNo)) + //{ + // query = query.Where(oi => oi.OrderNo.Equals(OrderrNo)); + //} + //if (OrderDate != null && OrderDate != DateTime.MinValue) + //{ + // query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date)); + //} + + //query = query.Where(oi => oi.Status == 0); + //query = query.Where(oi => oi.HisDispFlag == 0); + //query = query.Where(oi => oi.CancelFlag == 0); + ////query = query.Where(oi => oi.DoctorCode == box); + + //int pagedData = await query.CountAsync(); + + //List list = await query + // .LoadWith(oi => oi.Detail) + // .LoadWith(oi => oi.Detail.Drug) + // .OrderBy((oi) => oi.RecvDate) + // .ThenBy((oi => oi.OrderNo)) + // .Skip((int)skip) + // .Take((int)take) + // .ToListAsync(); + //if (list != null && list.Count > 0) + //{ + // for (int i = 0; i < list.Count; i++) + // { + // //list[i].Detail = await _connection.OrderDetail.AsQueryable() + // // .Where(od => od.OrderNo == list[i].OrderNo) + // // .LoadWith(od => od.Drug) + // // .ToListAsync(); + // } + //} + return new PageData() { TotalDesserts = pagedData, @@ -654,7 +692,7 @@ namespace MasaBlazorApp3.DataAccess.Impl return ints; } //核对处方 - public async Task CheckOrderInfo(IList selectedOrderInfos,int DrawerNo) + public async Task CheckOrderInfo(IList selectedOrderInfos, int DrawerNo) { try { @@ -670,9 +708,9 @@ namespace MasaBlazorApp3.DataAccess.Impl OrderInfo oi = selectedOrderInfos[i]; //更新处方状态 - if (oi.state == 1) + if (oi.Status == 1) { - int iUpdate= _connection.OrderInfo.Where(o=>o.OrderNo==oi.OrderNo).Set(o=>o.state,2).Update(); + int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update(); _connection.Insert(new OrderFinish() { OrderNo = oi.OrderNo, @@ -683,149 +721,162 @@ namespace MasaBlazorApp3.DataAccess.Impl Operator = _globalStateService.Operator.NickName, }); } - int drawerNo = DrawerNo + 1; - ChannelStock cs =_connection.ChannelStock.AsQueryable() - .Where(cs => cs.DrugId == oi.Detail.DrugId - && cs.ManuNo == oi.Detail.SetManuNo - // && cs.EffDate == oi._OrderDetail.SetEffDate - && cs.MachineId.Equals(_setting.boxMachineId) - && cs.DrawerNo == drawerNo - && cs.Quantity >= oi.Detail.Quantity).First(); - if (cs == null) + int drawerNo = DrawerNo; + if (oi.DetailList != null && oi.DetailList.Count > 0) { - logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存"); - continue; - } - cs.Quantity = cs.Quantity - oi.Detail.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.Detail.Quantity}"); - // 更新数据 库存信息 - _connection.Update(cs); - - // 获取更新完库存后的药品库存 - 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) - { - _connection.Insert(new MachineRecord() + for (int j = 0; j < oi.DetailList.Count; j++) { - 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, - Operator = _globalStateService.Operator?.Id, - Reviewer = _globalStateService.Reviewer?.Id, - OperationTime = DateTime.Now, - Quantity = oi.Detail.Quantity, - Type = 2, - InvoiceId = oi.OrderNo - //, StockQuantity = nowChannels.Sum(it => it.Quantity) - }); - - - //查询上一条账册中的空瓶数 - 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.Detail.DrugId) - .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First(); - //保存账册 - int iInsertResult = _connection.Insert(new AccountBookG2() - { - DrugId = oi.Detail.DrugId, - Type = 2, - Department = oi.DeptName, - OrderNo = oi.OrderNo, - ManuNo = cs.ManuNo, - EffDate = cs.EffDate, - OutQuantity = oi.Detail.Quantity, - UserId1 = _globalStateService.Operator?.Id, - UserId2 = _globalStateService.Reviewer?.Id, - MachineId = _setting.machineId, - CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), - CreateTime = DateTime.Now, - InvoiceNo = oi.OrderNo, - ManuStock = nowChannels.Sum(it => it.Quantity), - TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.Detail.Quantity, - ShoushuJian = drawerNo.ToString() - }); - //修改凌晨生成的日结存与总结存数据 - AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable() - .Where(ab => ab.MachineId.Equals(_setting.machineId)) - .Where(ab => ab.Type == 3) - .Where(ab => ab.DrugId == oi.Detail.DrugId) - .Where(ab => ab.ManuNo == cs.ManuNo) - .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); - if (accountBookG2Day != null) - { - accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity; - _connection.Update(accountBookG2Day); - } - else - { - //生成日结存时可能没有该库位的绑定信息,需要写入日结存 - int iDayResult =_connection.Insert(new AccountBookG2() + 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) { - DrugId = oi.Detail.DrugId, - Type = 3, - ManuNo = cs.ManuNo, - EffDate = cs.EffDate, - YQuantity = 0, - ManuStock = oi.Detail.Quantity, - TotalStock = oi.Detail.Quantity, - UserId1 = _globalStateService.Operator?.Id, - UserId2 = _globalStateService.Reviewer?.Id, - MachineId = _setting.machineId, - CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), - InvoiceNo = "日结存" - }); - if (iDayResult <= 0) - { - logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}"); + logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存"); + continue; } - } - //修改凌晨生成的日结存与总结存数据 - AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable() - .Where(ab => ab.MachineId.Equals(_setting.machineId)) - .Where(ab => ab.Type == 4) - .Where(ab => ab.DrugId == oi.Detail.DrugId) - .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); - if (accountBookG2Total != null) - { - accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity; - _connection.Update(accountBookG2Total); - } - else - { - //生成总结存时可能没有该库位的绑定信息,需要写入总结存 - int iTotalResult = _connection.Insert(new AccountBookG2() - { - DrugId = oi.Detail.DrugId, - Type = 4, - YQuantity = 0, - ManuStock = oi.Detail.Quantity, - TotalStock = oi.Detail.Quantity, - UserId1 = _globalStateService.Operator?.Id, - UserId2 = _globalStateService.Reviewer?.Id, - MachineId = _setting.machineId, - CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), - InvoiceNo = "总结存" - }); - if (iTotalResult <= 0) - { - logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}"); - } - } + 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) + { + _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, + Operator = _globalStateService.Operator?.Id, + Reviewer = _globalStateService.Reviewer?.Id, + OperationTime = DateTime.Now, + Quantity = oi.DetailList[j].Quantity, + Type = 2, + InvoiceId = oi.OrderNo + //, StockQuantity = nowChannels.Sum(it => it.Quantity) + }); + + + //查询上一条账册中的空瓶数 + 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(); + //保存账册 + int iInsertResult = _connection.Insert(new AccountBookG2() + { + DrugId = oi.DetailList[j].DrugId, + Type = 2, + Department = oi.DeptName, + OrderNo = oi.OrderNo, + ManuNo = cs.ManuNo, + EffDate = cs.EffDate, + OutQuantity = oi.DetailList[j].Quantity, + UserId1 = _globalStateService.Operator?.Id, + UserId2 = _globalStateService.Reviewer?.Id, + MachineId = _setting.machineId, + CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), + CreateTime = DateTime.Now, + InvoiceNo = oi.OrderNo, + ManuStock = nowChannels.Sum(it => it.Quantity), + TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailList[j].Quantity, + ShoushuJian = drawerNo.ToString() + }); + //修改凌晨生成的日结存与总结存数据 + 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(); + if (accountBookG2Day != null) + { + accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity; + _connection.Update(accountBookG2Day); + } + else + { + //生成日结存时可能没有该库位的绑定信息,需要写入日结存 + int iDayResult = _connection.Insert(new AccountBookG2() + { + DrugId = oi.DetailList[j].DrugId, + Type = 3, + ManuNo = cs.ManuNo, + EffDate = cs.EffDate, + YQuantity = 0, + ManuStock = oi.DetailList[j].Quantity, + TotalStock = oi.DetailList[j].Quantity, + UserId1 = _globalStateService.Operator?.Id, + UserId2 = _globalStateService.Reviewer?.Id, + MachineId = _setting.machineId, + CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), + InvoiceNo = "日结存" + }); + if (iDayResult <= 0) + { + logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}"); + } + } + //修改凌晨生成的日结存与总结存数据 + 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(); + if (accountBookG2Total != null) + { + accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity; + _connection.Update(accountBookG2Total); + } + else + { + //生成总结存时可能没有该库位的绑定信息,需要写入总结存 + int iTotalResult = _connection.Insert(new AccountBookG2() + { + DrugId = oi.DetailList[j].DrugId, + Type = 4, + YQuantity = 0, + ManuStock = oi.DetailList[j].Quantity, + TotalStock = oi.DetailList[j].Quantity, + UserId1 = _globalStateService.Operator?.Id, + UserId2 = _globalStateService.Reviewer?.Id, + MachineId = _setting.machineId, + CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), + InvoiceNo = "总结存" + }); + if (iTotalResult <= 0) + { + logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}"); + } + } + + } + + } } } - + return true; logger.Info($"管理员{_globalStateService.Operator.NickName}结束确认手麻单"); diff --git a/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs b/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs index 54d8dc8..67b9c9b 100644 --- a/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/PlanDao.cs @@ -4,6 +4,7 @@ using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; using Microsoft.Extensions.Options; +using Org.BouncyCastle.Crypto; using System; using System.Collections.Generic; using System.Data.Common; @@ -38,8 +39,8 @@ namespace MasaBlazorApp3.DataAccess.Impl { var query = _connection.Plan.AsQueryable(); - List list = await query.Where(p=>p.UseState==1) - .LoadWith(p => p._PlanDetails.Where(pd=>pd.UseState==1)) + List list = await query.Where(p => p.UseState == 1) + .LoadWith(p => p._PlanDetails.Where(pd => pd.UseState == 1)) //.ThenLoad(p=>p._DrugInfo) .OrderBy(r => r.Id) .ToListAsync(); @@ -78,7 +79,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); List list = await query .LoadWith(p => p._PlanDetails) //.ThenLoad(p=>p._DrugInfo) @@ -112,6 +113,7 @@ namespace MasaBlazorApp3.DataAccess.Impl plan.AddTime = DateTime.Now; plan.OperatorUser = _globalStateService.Operator.Id; plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id; + plan.UseState = 1; return _connection.InsertWithInt32Identity(plan) > 0; } catch (Exception ex) @@ -143,6 +145,38 @@ namespace MasaBlazorApp3.DataAccess.Impl return false; } } + //查询要删除的套餐下是否有绑定,且绑定有库存 + public async Task CheckPlanBind(int planId) + { + try + { + //查询是否有绑定,没有绑定可以删除,有绑定则不允许删除 + 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); + if (searchResult) + { + return false; + } + else + { + return true; + } + } + else + { + return true; + } + } + catch (Exception ex) + { + logger.Error($"查询要删除的套餐下是否有绑定异常{ex.Message}"); + return false; + } + } + + /// /// 删除套餐 /// @@ -154,27 +188,32 @@ namespace MasaBlazorApp3.DataAccess.Impl { _connection.BeginTransaction(); bool flag = false; - //查询是否有绑定,没有绑定可以删除,有绑定则不允许删除 - int hasCount = _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.machineId).Count(); - if (hasCount > 0) + logger.Error($"删除套餐{planId}"); + //查询该套餐下是否有药品,如果有则一并删除 + int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count(); + int pdResult = 1; + if (iHasPd > 0) { - return flag; + pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync(); } - else + 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) { - logger.Error($"删除套餐{planId}"); - //查询该套餐下是否有药品,如果有则一并删除 - int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count(); - int pdResult = 1; - if (iHasPd > 0) - { - pdResult = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).Update(); - } - int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update(); - if (pdResult > 0 && pResult > 0) - { - flag = true; - } + //删除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) + { + flag = true; } if (flag) @@ -207,7 +246,7 @@ namespace MasaBlazorApp3.DataAccess.Impl { if (!string.IsNullOrEmpty(details.DrugId)) { - int id = _connection.InsertWithInt32Identity(details); + int id =await _connection.InsertWithInt32IdentityAsync(details); details.Id = id; return id > 0; } @@ -235,7 +274,7 @@ namespace MasaBlazorApp3.DataAccess.Impl .Where(p => p.Id == details.Id) .Set(p => p.DrugId, details._DrugInfo.DrugId) .Set(p => p.BaseQuantity, details.BaseQuantity); - return iResult.Update() > 0; + return await iResult.UpdateAsync() > 0; } catch (Exception ex) { @@ -244,6 +283,26 @@ namespace MasaBlazorApp3.DataAccess.Impl } } + //查询要删除的药品是否有绑定且库存大于0 + public async Task CheckPlanDetailBind(PlanDetails planDetail) + { + try + { + bool bFlag = true; + 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)); + } + return bFlag; + } + catch (Exception ex) + { + logger.Error($"查询要删除的药品是否有绑定异常{ex.Message}"); + return true; + } + } + /// /// 删除套餐中的药品 /// @@ -253,9 +312,33 @@ namespace MasaBlazorApp3.DataAccess.Impl { try { + _connection.BeginTransaction(); logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}"); - return _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p=>p.UseState,0).Update() > 0; - + int iDelResult = 1; + //删除该套餐下该药品对应绑定的库位 + 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(); + } + if (iDelResult > 0) + { + bool bUpdateResult= _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p => p.UseState, 0).Update() > 0; + if(bUpdateResult) + { + _connection.CommitTransaction(); + return true; + } + else + { + _connection.RollbackTransaction(); + return false; + } + } + else + { + return false; + } } catch (Exception ex) { @@ -269,7 +352,7 @@ namespace MasaBlazorApp3.DataAccess.Impl if (details._DrugInfo.DrugId != null) { //查询该药品是否已在套餐中存在,存在则不再添加 - PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId&&p.UseState==1).FirstOrDefault(); + PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId && p.UseState == 1).FirstOrDefault(); if (details.Id > 0) { diff --git a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs index 40b8a5b..535309b 100644 --- a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs @@ -1,5 +1,6 @@ using Google.Protobuf.WellKnownTypes; using LinqToDB; +using log4net; using MasaBlazorApp3.DataAccess.Dao; using MasaBlazorApp3.Pojo; using MasaBlazorApp3.Pojo.Config; @@ -17,6 +18,7 @@ namespace MasaBlazorApp3.DataAccess.Impl private readonly AppDataConnection _connection; private readonly SettingConfig _setting; + private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao)); //public UserDao(MyContext context) //{ @@ -61,7 +63,7 @@ namespace MasaBlazorApp3.DataAccess.Impl public User GetByUsername(string username) { - return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username&&u.MachineId== _setting.machineId); + return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username && u.MachineId == _setting.machineId); } public int InsertUser(User user) @@ -92,7 +94,7 @@ namespace MasaBlazorApp3.DataAccess.Impl //重置用户密码 public bool ResetPassword(int id) { - var statement= _connection.User.Where(u => u.Id == id).Set(u=>u.Password, MD5.GetMD5Hash("123456").ToLower()); + var statement = _connection.User.Where(u => u.Id == id).Set(u => u.Password, MD5.GetMD5Hash("123456").ToLower()); return statement.Update() > 0; } @@ -115,5 +117,50 @@ namespace MasaBlazorApp3.DataAccess.Impl .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower()); return statement.Update() > 0; } + + //查询当前值班信息 + public HkcChangeShifts GetOnDuty() + { + try + { + return _connection.HkcChangeShifts.Where(cs => cs.MachineId == _setting.machineId && cs.State == "0").FirstOrDefault(); + + } + catch (Exception ex) + { + logger.Info($"查询当前值班信息异常{ex.Message}"); + return null; + } + } + //保存交接班信息 + public async Task UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew) + { + try + { + _connection.BeginTransaction(); + var insertResult = _connection.InsertWithInt32Identity(changeShiftNew); + + int updateResult = _connection.HkcChangeShifts + .Where(cs => cs.Id == changeShift.Id) + .Set(cs => cs.State, "1") + .Set(cs => cs.ToDate, DateTime.Now) + .Set(cs=>cs.ToOperator,changeShift.ToOperator).Update(); + if (insertResult <= 0 || updateResult <= 0) + { + _connection.RollbackTransaction(); + return false; + } + else + { + _connection.CommitTransaction(); + return true; + } + } + catch (Exception ex) + { + logger.Error($"更新交接班信息异常: {ex.Message}"); + return false; + } + } } } diff --git a/MasaBlazorApp3/MasaBlazorApp3.csproj b/MasaBlazorApp3/MasaBlazorApp3.csproj index 0b4ec44..b6c5852 100644 --- a/MasaBlazorApp3/MasaBlazorApp3.csproj +++ b/MasaBlazorApp3/MasaBlazorApp3.csproj @@ -6,6 +6,7 @@ enable enable favicon.ico + AnyCPU;x64 diff --git a/MasaBlazorApp3/Pages/BoxAddBox.razor b/MasaBlazorApp3/Pages/BoxAddBox.razor index 5639aa9..71237b2 100644 --- a/MasaBlazorApp3/Pages/BoxAddBox.razor +++ b/MasaBlazorApp3/Pages/BoxAddBox.razor @@ -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 e9ea0a9..67ec488 100644 --- a/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor +++ b/MasaBlazorApp3/Pages/BoxAddBoxDetailDialog.razor @@ -8,51 +8,20 @@ - @if (CanTakeDrug) - { - + - - - - - - - - + + + + - } - else - { - - - - - - - - - } - - - - + - @if (status < 2) - { - - } - @if (status == 2) - { - - } - @if (status <= 2) - { - - } + + + @@ -64,10 +33,10 @@ @inject PortUtil PortUtil; private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog)); - int status; - + // int status; + bool isLoading; + int count; [Parameter] public ChannelList boxChannelList { get; set; } - private bool CanTakeDrug = true; public List data { get; set; } //称重取药数量 @@ -78,225 +47,212 @@ protected override async Task OnInitializedAsync() { - data = await channelListDao.getTakeInfoByBox(boxChannelList); - // 如果有【stockQuantity】字段说明有药品库存不足 - if (data.Any(it => it.ChannelStock == null)) - { - CanTakeDrug = false; - } base.OnInitializedAsync(); } - - async Task OpenDrawer() + async Task LoadData(LoadDataArgs args) { - this.status = 1; - // 解析需要打开的抽屉列表 - List drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList(); + isLoading = true; - // 根据抽屉类型来决定打开前是否需要查询数量 - var promiseUtil = new PromiseUtil(); - - await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) => - { - var orderTakeVo = drawerNos[options._data]; - var drawerNo = orderTakeVo.ChannelStock.DrawerNo; - try - { - if (this.status == 0) - { - stop(); - } - // 开启抽屉 - else if (this.status == 1) - { - if (orderTakeVo.Status == 0) - { - // 判断是否为单支抽屉 - if (setting.Value.single.Contains(drawerNo)) - { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); - orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】"); - - await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray()); - } - for (int i = 0; i < data.Count; i++) - { - if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo)) - { - if (data[i].ChannelStock.BoardType.ToString().Contains("6")) - { - PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; - PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); - - data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo); - logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】"); - await Task.Delay(200); - } - - //是药盒抽屉开药盒 - if (data[i].ChannelStock.BoardType.ToString().Contains("3")) - { - PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; - await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo); - await Task.Delay(200); - } - DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo); - } - } - var b = await PortUtil.OpenDrawerStatus(drawerNo); - if (b) - { - PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); - PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药"); - orderTakeVo.Status = 1; - next(); - } - else - { - _message.Notify( - new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 } - ); - logger.Info($"抽屉打开失败"); - PortUtil.AllLightOff(); - RestData(); - stop(); - } - } - // 检测状态 - else if (orderTakeVo.Status == 1) - { - // 查询抽屉是否为关闭状态 - var b = await PortUtil.CheckDrawerStatus2(drawerNo); - // 关闭则改变状态并终止循环 - if (b) - { - - data.ForEach(cl => - { - if (cl.ChannelStock.DrawerNo == drawerNo) - { - cl.GetQuantity = cl.Quantity; - - } - }); - orderTakeVo.Status = 2; - PortUtil.AllLightOff(); - if (options._data == drawerNos.Count - 1) - { - PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); - PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); - PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); - this.status = 2; - string alertMessage = string.Empty; - //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示 - for (int i = 0; i < data.Count; i++) - { - if (data[i].ChannelStock.BoardType.ToString().Contains("6")) - { - PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo; - PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); - - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo); - logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); - WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1]; - if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]) - { - //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据 - alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; - - } - await Task.Delay(200); - } - - if (data[i].ChannelStock.BoardType.ToString().Contains("2")) - { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); - orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); - WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1]; - if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]) - { - alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; - } - } - } - if (!string.IsNullOrEmpty(alertMessage)) - { - //弹出确认对话框 - alertMessage += "应取数与实际取出数不一致确认要保存吗?"; - //弹出确认提示框 - var confirm = await dialogService.OpenAsync( - $"保存确认", - new Dictionary() { { "confirmInfo", alertMessage } }, - new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); - logger.Info(alertMessage); - if (!confirm) - { - RestData(); - logger.Info("取消保存"); - // 关闭弹窗 - dialogService.Close(false); - } - } - stop(); - } - else - { - options._data += 1; - next(); - } - } - else - { - next(); // continue iteration - } - } - - - } - - } - catch (Exception e) - { - RestData(); - logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}"); - _message.Notify( - new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } - ); - if (setting.Value.single.Contains(drawerNo)) - { - PortUtil.AllLightOff(); - } - stop(); - } - }); + data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip); + // Update the Data property + isLoading = false; } + // async Task OpenDrawer() + // { + // this.status = 1; + // // 解析需要打开的抽屉列表 + // List drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList(); + + // // 根据抽屉类型来决定打开前是否需要查询数量 + // var promiseUtil = new PromiseUtil(); + + // await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) => + // { + // var orderTakeVo = drawerNos[options._data]; + // var drawerNo = orderTakeVo.ChannelStock.DrawerNo; + // try + // { + // if (this.status == 0) + // { + // stop(); + // } + // // 开启抽屉 + // else if (this.status == 1) + // { + // if (orderTakeVo.Status == 0) + // { + // // 判断是否为单支抽屉 + // if (setting.Value.single.Contains(drawerNo)) + // { + // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); + // orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + // logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】"); + + // await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray()); + // } + // for (int i = 0; i < data.Count; i++) + // { + // if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo)) + // { + // if (data[i].ChannelStock.BoardType.ToString().Contains("6")) + // { + // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; + // PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); + + // data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo); + // logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】"); + // await Task.Delay(200); + // } + + // //是药盒抽屉开药盒 + // if (data[i].ChannelStock.BoardType.ToString().Contains("3")) + // { + // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo; + // await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo); + // await Task.Delay(200); + // } + // DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo); + // } + // } + // var b = await PortUtil.OpenDrawerStatus(drawerNo); + // if (b) + // { + // PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); + // PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药"); + // orderTakeVo.Status = 1; + // next(); + // } + // else + // { + // _message.Notify( + // new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 } + // ); + // logger.Info($"抽屉打开失败"); + // PortUtil.AllLightOff(); + // RestData(); + // stop(); + // } + // } + // // 检测状态 + // else if (orderTakeVo.Status == 1) + // { + // // 查询抽屉是否为关闭状态 + // var b = await PortUtil.CheckDrawerStatus2(drawerNo); + // // 关闭则改变状态并终止循环 + // if (b) + // { + + // data.ForEach(cl => + // { + // if (cl.ChannelStock.DrawerNo == drawerNo) + // { + // cl.GetQuantity = cl.Quantity; + + // } + // }); + // orderTakeVo.Status = 2; + // PortUtil.AllLightOff(); + // if (options._data == drawerNos.Count - 1) + // { + // PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); + // PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); + // PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); + // this.status = 2; + // string alertMessage = string.Empty; + // //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示 + // for (int i = 0; i < data.Count; i++) + // { + // if (data[i].ChannelStock.BoardType.ToString().Contains("6")) + // { + // PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo; + // PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); + + // orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo); + // logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); + // WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1]; + // if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]) + // { + // //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据 + // alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; + + // } + // await Task.Delay(200); + // } + + // if (data[i].ChannelStock.BoardType.ToString().Contains("2")) + // { + // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); + // orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + // logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】"); + // WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1]; + // if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]) + // { + // alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】"; + // } + // } + // } + // if (!string.IsNullOrEmpty(alertMessage)) + // { + // //弹出确认对话框 + // alertMessage += "应取数与实际取出数不一致确认要保存吗?"; + // //弹出确认提示框 + // var confirm = await dialogService.OpenAsync( + // $"保存确认", + // new Dictionary() { { "confirmInfo", alertMessage } }, + // new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); + // logger.Info(alertMessage); + // if (!confirm) + // { + // RestData(); + // logger.Info("取消保存"); + // // 关闭弹窗 + // dialogService.Close(false); + // } + // } + // stop(); + // } + // else + // { + // options._data += 1; + // next(); + // } + // } + // else + // { + // next(); // continue iteration + // } + // } + + + // } + + // } + // catch (Exception e) + // { + // RestData(); + // logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}"); + // _message.Notify( + // new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } + // ); + // if (setting.Value.single.Contains(drawerNo)) + // { + // PortUtil.AllLightOff(); + // } + // stop(); + // } + // }); + // } - void RestData() - { - PortUtil.speechSynthesizer.SpeakAsyncCancelAll(); - this.status = 0; - data.ForEach(it => - { - it.Status = 0; - it.BeforeQuantity = new int[9]; - it.AfterQuantity = new int[9]; - }); - this.WeightFinnalQuantity = new int[9]; - DrawerNoColNoList.Clear(); - } void Cancel() { - RestData(); // 关闭弹窗 dialogService.Close(false); } - async Task TakeFinish() + async Task Finish() { // 保存账册、操作记录 - var b = await channelListDao.BoxTakeFinish(data, boxChannelList); + var b = await channelListDao.BoxAddBoxFinish(boxChannelList); if (!b) { _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 }); @@ -310,8 +266,6 @@ dialogService.Close(true); } - //重置状态 - this.RestData(); } diff --git a/MasaBlazorApp3/Pages/ChangeShifts.razor b/MasaBlazorApp3/Pages/ChangeShifts.razor index dbd25b3..6310490 100644 --- a/MasaBlazorApp3/Pages/ChangeShifts.razor +++ b/MasaBlazorApp3/Pages/ChangeShifts.razor @@ -1,114 +1,330 @@ -@page "/setting/Change" +@page "/0" +@using MasaBlazorApp3.Pojo.Config; +@using MasaBlazorApp3.Pojo.Vo; +@using MasaBlazorApp3.Util; +@using Microsoft.Extensions.Options; +@using Newtonsoft.Json; +@using log4net; + -
-
-
+ + + + @if (userI == 1) + { + + 请交班操作人 @FromOperator?.NickName +

登录验证

+
+ } + else if (userI == 2) + { + + 请交班复核人 @FromRviewer?.NickName +

登录验证

+
+ } + else + @if (userI == 3) + { + + 请接班操作人 @ToOperator?.NickName +

登录验证

+
+ } + else if (userI == 4) + { + + 请接班复核人 @ToReviewer?.NickName +

登录验证

+
+ } +
+
+ + + + 登录 + + +
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ + +
+
+
+
- - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - -
-
-
+ @code { - @inject IHkcChangeShiftsDao hkcChangeShiftsDao; - @inject DialogService dialogService; + @inject Radzen.DialogService dialogService; - @inject NavigationManager navigate; - RadzenDataGrid grid; - bool isLoading; - int count; - private IEnumerable? _forecasts; - DateTime start; - DateTime end; + @inject FingerprintUtil FingerprintUtil; + @inject PortUtil PortUtil; + @inject NavigationManager na; + @inject NotificationService _message + @inject GlobalStateService globalStateService; + @inject IUserDao userDao; + @inject Microsoft.Extensions.Options.IOptions setting; - [Parameter] public string type { get; set; } - protected override void OnParametersSet() + private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog)); + + private int loginMode = 1; + private bool opFirst = true; + [Parameter] public int userI { get; set; } + + Pojo.User FromOperator = new Pojo.User(); + Pojo.User FromRviewer = new Pojo.User(); + Pojo.User ToOperator = new Pojo.User(); + Pojo.User ToReviewer = new Pojo.User(); + + HkcChangeShifts hkcChange = new HkcChangeShifts(); + + bool isShow; + + private Pojo.User loginModel = new(); + + protected override Task OnInitializedAsync() { - if (grid != null) + FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx; + + loginMode = setting.Value.loginMode; + opFirst = setting.Value.opFirst; + + //查询当前值班信息 + hkcChange = userDao.GetOnDuty(); + if (hkcChange != null && !string.IsNullOrEmpty(hkcChange.FromOperator)) { - reloadGrid(); + FromOperator = userDao.GetByUsername(hkcChange.FromOperator); + } + if (hkcChange != null && string.IsNullOrEmpty(hkcChange.FromRviewer)) + { + FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer); + } + return base.OnInitializedAsync(); + } + + private async Task SetUser(Pojo.User user) + { + if (userI == 1) + { + if(FromOperator.Id != user.Id) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班操作人有误,请核查当前值班人", Duration = 3000 } + ); + return; + } + //交班人操作人登录 + if (FromRviewer != null) + { + userI = 2; + } + else + { + userI = 3; + } + + } + else if (userI == 2) + { + if (FromOperator != null && FromOperator.Id == user.Id) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + return; + } + else + { + if(FromRviewer.Id!=user.Id) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班审核人有误,请核查当前值班人", Duration = 3000 } + ); + return; + } + FromRviewer = user; + userI = 3; + } + } + else if (userI == 3) + { + if (loginMode == 2) + { + if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id)) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + return; + } + userI = 4; + ToOperator = user; + } + else + { + if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id)) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + return; + } + else + { + ToOperator = user; + //保存交接班信息 + HkcChangeShifts hkcChangeNew = new HkcChangeShifts + { + FromOperator = ToOperator.Username, + optDate = DateTime.Now, + ToDate = DateTime.Now, + State = "0", //状态为1表示交接班完成 + MachineId = hkcChange.MachineId + }; + hkcChange.ToOperator = ToOperator.Username; + bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew); + if (bResult) + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx; + logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToOperator?.NickName}"); + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 } + ); + dialogService.Close(true); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 } + ); + } + } + } + } + else if (userI == 4) + { + if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id) || (ToOperator != null && ToOperator.Id == user.Id)) + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + return; + } + ToReviewer = user; + hkcChange.ToReviewer = ToReviewer?.Username; + //保存交接班信息 + HkcChangeShifts hkcChangeNew = new HkcChangeShifts + { + FromOperator = ToOperator.Username, + FromRviewer = ToReviewer?.Username, + optDate = DateTime.Now, + State = "0", //状态为1表示交接班完成 + MachineId = hkcChange.MachineId + }; + bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew); + if (bResult) + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx; + logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToReviewer?.NickName}"); + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 } + ); + dialogService.Close(true); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 } + ); + } } } - async Task LoadData(LoadDataArgs args) + + + + private void Submit(Pojo.User user) { - isLoading = true; + Pojo.User u = userDao.GetByUsername(loginModel.Username); + if (u != null) + { + if (Util.MD5.GetMD5Hash(loginModel.Password).ToLower().Equals(u.Password)) + { + SetUser(u); + loginModel.Username = ""; + loginModel.Password = ""; + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"密码错误", Duration = 4000 } + ); + logger.Info($"用户【{u.NickName}】密码输入错误"); - var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip); - // Update the Data property - _forecasts = result.Desserts; - // Update the count - count = result.TotalDesserts; + } - isLoading = false; + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 } + ); + logger.Info($"没有用户:【{loginModel.Username}】"); + } } - async Task reloadGrid() + private void axCZKEM1_OnAttTransactionEx(string sEnrollNumber, int iIsInValid, int iAttState, int iVerifyMethod, int iYear, int iMonth, int iDay, int iHour, int iMinute, int iSecond, int iWorkCode) { - start = DateTime.MinValue; - end = DateTime.MinValue; - await grid.Reload(); + + Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber)); + if (u != null) + { + SetUser(u); + InvokeAsync(StateHasChanged); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 } + ); + logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户"); + } + } -} \ No newline at end of file + + private void Exit() + { + dialogService.Close(false); + } + + + + +} diff --git a/MasaBlazorApp3/Pages/ChangeShiftsList.razor b/MasaBlazorApp3/Pages/ChangeShiftsList.razor new file mode 100644 index 0000000..702c414 --- /dev/null +++ b/MasaBlazorApp3/Pages/ChangeShiftsList.razor @@ -0,0 +1,123 @@ +@page "/stock/Change" + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
+
+
+ +@code { + @inject IHkcChangeShiftsDao hkcChangeShiftsDao; + @inject DialogService dialogService; + + @inject NavigationManager navigate; + RadzenDataGrid grid; + bool isLoading; + int count; + private IEnumerable? _forecasts; + DateTime start; + DateTime end; + + + [Parameter] public string type { get; set; } + + protected override void OnParametersSet() + { + if (grid != null) + { + reloadGrid(); + } + } + async Task LoadData(LoadDataArgs args) + { + isLoading = true; + + var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip); + // Update the Data property + _forecasts = result.Desserts; + // Update the count + count = result.TotalDesserts; + + isLoading = false; + } + + async Task reloadGrid() + { + start = DateTime.MinValue; + end = DateTime.MinValue; + await grid.Reload(); + } +} \ No newline at end of file diff --git a/MasaBlazorApp3/Pages/CheckOrder.razor b/MasaBlazorApp3/Pages/CheckOrder.razor index 6fa2249..f5e21b7 100644 --- a/MasaBlazorApp3/Pages/CheckOrder.razor +++ b/MasaBlazorApp3/Pages/CheckOrder.razor @@ -6,7 +6,7 @@
@foreach (int i in DrawerNos) { - + }
@@ -44,28 +44,52 @@ + FilterPopupRenderMode="PopupRenderMode.OnDemand" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" + Data="@orderInfos" ColumnWidth="200px" IsLoading="@isLoading" Count="@count" EmptyText="无数据" + SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@selectedOrderInfos + AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"> - - - - + + + + + + + + + diff --git a/MasaBlazorApp3/Pages/Home.razor b/MasaBlazorApp3/Pages/Home.razor index 8739e3b..8436b89 100644 --- a/MasaBlazorApp3/Pages/Home.razor +++ b/MasaBlazorApp3/Pages/Home.razor @@ -36,33 +36,57 @@ .rz-gauge .rz-tick-text { fill: #ffffff !important; } + + - + - + @if (globalStateService.Operator != null) { //操作人:@globalStateService.Operator.NickName - 操作人:@globalStateService.Operator.NickName + 操作人:@globalStateService.Operator.NickName } @if (globalStateService.Reviewer != null) { //复核人:@globalStateService.Reviewer.NickName - 复核人:@globalStateService.Reviewer.NickName + 复核人:@globalStateService.Reviewer.NickName } - + +
+ + 交接班 +
+
+
+ + +
@@ -80,17 +104,31 @@ } } - - 入库 - @if (globalStateService.Operator != null) - { - @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10)) + + + 入库 + @if (globalStateService.Operator != null) { -
- -
+ @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10)) + { +
+ +
+ } } - } +
+ + 药箱管理 + @if (globalStateService.Operator != null) + { + @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 60 > 0 && id - 60 < 10)) + { +
+ +
+ } + } +
@@ -296,4 +334,15 @@ new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false }); } + + //交接班 + async void changeShifts() + { + //修改复核人 + await dialogService.OpenAsync( + "", + new Dictionary() { { "userI", 1 } }, + new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false }); + + } } diff --git a/MasaBlazorApp3/Pages/MachineRecordList.razor b/MasaBlazorApp3/Pages/MachineRecordList.razor index ee7df09..2bccd41 100644 --- a/MasaBlazorApp3/Pages/MachineRecordList.razor +++ b/MasaBlazorApp3/Pages/MachineRecordList.razor @@ -3,6 +3,7 @@ @page "/return/record1/{type}" @page "/return/record2/{type}" @page "/stock/record/{type}" +@using MasaBlazorApp3.Report
@@ -35,6 +36,10 @@ + + + + @@ -111,7 +116,18 @@ await grid.Reload(); } - + //浼 + void StockExport() + { + + } + //ר˲ᵼ + void AccountBookExport() + { + // string drugId = drugName != null ? drugName.Split('/').Last().Trim():""; + // GridReportUtil gridReportUtil = new GridReportUtil(); + GridReportUtil.PrintReport("stock_template.grf", null); + } diff --git a/MasaBlazorApp3/Pages/PlanManagement.razor b/MasaBlazorApp3/Pages/PlanManagement.razor index e9505ed..b12e611 100644 --- a/MasaBlazorApp3/Pages/PlanManagement.razor +++ b/MasaBlazorApp3/Pages/PlanManagement.razor @@ -28,7 +28,7 @@ EmptyText="无数据" Data="@_forecasts" AllowColumnResize="true" AllowAlternatingRows="false" - SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di)=>{OnUpdatePlanRow(di);})" RowCreate="@((Plan di)=>{OnCreatePlanRow(di);})" + SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di) => { OnUpdatePlanRow(di); })" RowCreate="@((Plan di) => { OnCreatePlanRow(di); })" AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"> @@ -96,8 +96,8 @@ - - + + @@ -136,6 +136,7 @@ @inject IPlanDao planDao; @inject DialogService dialogService; @inject NotificationService _message + @inject GlobalStateService globalStateService; RadzenDataGrid grid; RadzenDataGrid PlanDetailsGrid; @@ -218,18 +219,35 @@ new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); if (b) { + //查询要删除的套餐下是否有绑定,且绑定有库存 + if (!(await planDao.CheckPlanBind(planInfo.Id))) + { + _message.Notify + ( + new NotificationMessage + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = $"该套餐还有库存绑定且有库存,请先清库存", + Duration = 4000 + } + ); + return; + } + + // 数据库删除 if (await planDao.DeletePlanInfo(planInfo.Id)) { _message.Notify ( new NotificationMessage - { - Severity = NotificationSeverity.Success, - Summary = "提示", - Detail = $"删除成功", - Duration = 4000 - } + { + Severity = NotificationSeverity.Success, + Summary = "提示", + Detail = $"删除成功", + Duration = 4000 + } ); } else @@ -237,12 +255,12 @@ _message.Notify ( new NotificationMessage - { - Severity = NotificationSeverity.Error, - Summary = "提示", - Detail = "删除失败", - Duration = 4000 - } + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = "删除失败", + Duration = 4000 + } ); } } @@ -306,28 +324,41 @@ ); if (b) { - SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail); + //查询要删除的药品是否有绑定且库存大于0 + if (!(await planDao.CheckPlanDetailBind(planDetail))) + { + _message.Notify(new NotificationMessage + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = "该药品有绑定且库存不为0,请先清库存", + Duration = 4000 + }); + return; + } + // 数据库删除 if (await planDao.DeletePlanDetail(planDetail)) { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Success, - Summary = "提示", - Detail = "删除成功", - Duration = 4000 - } + { + Severity = NotificationSeverity.Success, + Summary = "提示", + Detail = "删除成功", + Duration = 4000 + } ); + SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail); } else { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Error, - Summary = "提示", - Detail = "删除失败", - Duration = 4000 - } + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = "删除失败", + Duration = 4000 + } ); } await PlanDetailsGrid.Reload(); @@ -348,23 +379,23 @@ if (await planDao.UpdatePlanDetail(planDetail)) { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Success, - Summary = "提示", - Detail = "修改成功", - Duration = 4000 - } + { + Severity = NotificationSeverity.Success, + Summary = "提示", + Detail = "修改成功", + Duration = 4000 + } ); } else { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Error, - Summary = "提示", - Detail = "修改失败", - Duration = 4000 - } + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = "修改失败", + Duration = 4000 + } ); } @@ -377,15 +408,18 @@ { planDetail.PlanId = SelectedPlan.FirstOrDefault().Id; planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId; + planDetail.UseState = 1; + planDetail.OperatorUser = globalStateService.Operator?.Username; + planDetail.ReviewerUser = globalStateService.Reviewer?.Username; if (await planDao.AddPlanDetail(planDetail)) { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Success, - Summary = "提示", - Detail = "保存成功", - Duration = 4000 - } + { + Severity = NotificationSeverity.Success, + Summary = "提示", + Detail = "保存成功", + Duration = 4000 + } ); @@ -393,12 +427,12 @@ else { _message.Notify(new NotificationMessage - { - Severity = NotificationSeverity.Error, - Summary = "提示", - Detail = "保存失败", - Duration = 4000 - } + { + Severity = NotificationSeverity.Error, + Summary = "提示", + Detail = "保存失败", + Duration = 4000 + } ); } } @@ -411,9 +445,9 @@ async Task InsertRow() { var detail = new Pojo.PlanDetails() - { - PlanId = SelectedPlan.FirstOrDefault().Id - }; + { + PlanId = SelectedPlan.FirstOrDefault().Id + }; SelectedPlan.FirstOrDefault()._PlanDetails.Add(detail); await PlanDetailsGrid.InsertRow(detail); diff --git a/MasaBlazorApp3/Pages/StockBinding.razor b/MasaBlazorApp3/Pages/StockBinding.razor index a05d8c7..3174fb1 100644 --- a/MasaBlazorApp3/Pages/StockBinding.razor +++ b/MasaBlazorApp3/Pages/StockBinding.razor @@ -162,7 +162,11 @@ - + + + } diff --git a/MasaBlazorApp3/Pages/StockList.razor b/MasaBlazorApp3/Pages/StockList.razor index 6d78dae..5d06360 100644 --- a/MasaBlazorApp3/Pages/StockList.razor +++ b/MasaBlazorApp3/Pages/StockList.razor @@ -1,39 +1,105 @@ @page "/stock/list" +@using MasaBlazorApp3.Report +
-
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @* *@ + + + + + + + + + +
+
+
- + IsLoading="@isLoading" + RowRender="@RowRender" + EmptyText="" + Data="@_forecasts" + AllowColumnResize="true" AllowAlternatingRows="false" + SelectionMode="DataGridSelectionMode.Single" + ExpandMode="DataGridExpandMode.Multiple"> + @* - + *@