From 4a25695d53e343029391d2fb54a7c742f3e8b0d4 Mon Sep 17 00:00:00 2001 From: maqiao <625215135@qq.com> Date: Tue, 20 May 2025 11:17:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4=EF=BC=8C?= =?UTF-8?q?=E6=95=B4=E4=BD=93=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataAccess/ChannelStockWidthDrawerInfo.cs | 16 ++ .../DataAccess/Dao/IChannelListDao.cs | 2 + MasaBlazorApp3/DataAccess/Dao/IUserDao.cs | 2 + .../DataAccess/Impl/ChannelListDao.cs | 137 +++++++--- .../DataAccess/Impl/InOutInvoiceDao.cs | 65 +++++ .../DataAccess/Impl/OrderInfoDao.cs | 37 ++- MasaBlazorApp3/DataAccess/Impl/UserDao.cs | 8 + MasaBlazorApp3/Finger/FingerprintUtil.cs | 31 +-- MasaBlazorApp3/GlobalStateService.cs | 2 + MasaBlazorApp3/Pages/BiaoDing.razor | 211 +++++++-------- MasaBlazorApp3/Pages/BiaoDingDialog.razor | 188 ++++++++++++++ ...ConfirmDialo.razor => ConfirmDialog.razor} | 3 +- MasaBlazorApp3/Pages/DrawerAdd.razor | 174 +++++++++---- MasaBlazorApp3/Pages/DrawerTake.razor | 183 +++++++------ MasaBlazorApp3/Pages/DrugList.razor | 8 +- MasaBlazorApp3/Pages/EditPasswordDialog.razor | 135 ++++++++++ MasaBlazorApp3/Pages/Home.razor | 227 +++++++++++------ MasaBlazorApp3/Pages/Index.razor | 2 +- MasaBlazorApp3/Pages/InitPage.razor | 110 ++++++++ MasaBlazorApp3/Pages/InvoiceAddDialog.razor | 237 ++++++++++++----- MasaBlazorApp3/Pages/InvoiceOutDialog.razor | 241 ++++++++++++++---- MasaBlazorApp3/Pages/LoginDialog.razor | 226 ++++++++++++++++ MasaBlazorApp3/Pages/OrderDetailDialog.razor | 109 ++++++-- MasaBlazorApp3/Pages/Role.razor | 4 +- MasaBlazorApp3/Pages/SelfTakeDialog.razor | 100 +++++++- MasaBlazorApp3/Pages/User.razor | 8 +- MasaBlazorApp3/Pojo/ChannelStock.cs | 8 +- MasaBlazorApp3/Pojo/User.cs | 3 + MasaBlazorApp3/Port/PortUtil.cs | 80 +++--- MasaBlazorApp3/Shared/EmptyLayout.razor | 8 +- MasaBlazorApp3/Shared/MainLayout.razor | 2 +- MasaBlazorApp3/appsettings.json | 10 +- MasaBlazorApp3/wwwroot/images/community.svg | 1 + 33 files changed, 1985 insertions(+), 593 deletions(-) create mode 100644 MasaBlazorApp3/DataAccess/ChannelStockWidthDrawerInfo.cs create mode 100644 MasaBlazorApp3/Pages/BiaoDingDialog.razor rename MasaBlazorApp3/Pages/{ConfirmDialo.razor => ConfirmDialog.razor} (93%) create mode 100644 MasaBlazorApp3/Pages/EditPasswordDialog.razor create mode 100644 MasaBlazorApp3/Pages/InitPage.razor create mode 100644 MasaBlazorApp3/Pages/LoginDialog.razor create mode 100644 MasaBlazorApp3/wwwroot/images/community.svg diff --git a/MasaBlazorApp3/DataAccess/ChannelStockWidthDrawerInfo.cs b/MasaBlazorApp3/DataAccess/ChannelStockWidthDrawerInfo.cs new file mode 100644 index 0000000..916e3e2 --- /dev/null +++ b/MasaBlazorApp3/DataAccess/ChannelStockWidthDrawerInfo.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MasaBlazorApp3.DataAccess +{ + public class ChannelStockWidthDrawerInfo + { + //抽屉信息(抽屉号,抽屉类型) + public List> DrawerInfo { get; set; } + + public List ChannelStocks { get; set; } = new List(); + } +} diff --git a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs index e240ea7..6240790 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IChannelListDao.cs @@ -29,5 +29,7 @@ namespace MasaBlazorApp3.DataAccess.Dao //盘点 public Task DrawerCheckFinish(List Stocks); + //抽屉获取库存数据--药品绑定 + Task> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0); } } diff --git a/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs b/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs index 11e41a4..496cbef 100644 --- a/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs +++ b/MasaBlazorApp3/DataAccess/Dao/IUserDao.cs @@ -19,5 +19,7 @@ namespace MasaBlazorApp3.DataAccess.Dao bool ResetPassword(int id); Task UpdateSign(int id, string sign); + + bool UpdateUserPassword(User user); } } diff --git a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs index 33366ad..f551e37 100644 --- a/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/ChannelListDao.cs @@ -50,7 +50,7 @@ namespace MasaBlazorApp3.DataAccess.Impl int pagedData = await query.CountAsync(); - + List list = await query .LoadWith(cl => cl.Drug) .LoadWith(cl => cl.Drug.Manus) @@ -98,11 +98,11 @@ namespace MasaBlazorApp3.DataAccess.Impl .LoadWith(cs => cs.drugManuNo) .LoadWith(cs => cs.Drug.Manus) .Where(cs => cs.DrawerNo == DrawerNo) - .Where(cs => cs.DrugId != String.Empty ) + .Where(cs => cs.DrugId != String.Empty) .Where(cs => cs.DrawerType == 1) .Where(cs => cs.MachineId == _setting.machineId); - if(Quantity > 0) + if (Quantity > 0) { query = query.Where(cs => cs.Quantity > 0); } @@ -178,27 +178,60 @@ namespace MasaBlazorApp3.DataAccess.Impl //var EffDate = !stock.drugManuNo.ManuNo.Equals(stock.ManuNo) ? stock.drugManuNo.EffDate : stock.EffDate; var ManuNo = stock.ManuNo; var EffDate = stock.EffDate; - // 出入库记录 - int mid = _connection.InsertWithInt32Identity(new MachineRecord() + if (!DateTime.TryParse(stock.EffDate, out DateTime dEffDate)) { - MachineId = _setting.machineId, - DrawerNo = stock.DrawerNo, - ColNo = stock.ColNo, - DrugId = stock.DrugId, - ManuNo = ManuNo, - EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, - OperationTime = DateTime.Now, - Type = type, - Quantity = type == 1? stock.AddQuantity : stock.TakeQuantity, - Operator = _globalStateService.Operator.Id, - Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, - InvoiceId = InvoiceId - }); + //效期转换出错 + if (stock.ManuNo != null) + { + string[] idate= stock.EffDate.Split('/'); + foreach (string iS in idate) + { + if (!string.IsNullOrEmpty(iS.Replace(" ", "").Trim())) + { + switch (iS.Replace(" ", "").Trim().Length) + { + case 4: + EffDate = iS.Replace(" ", "").Trim(); + break; + case 2: + EffDate += "-" + iS.Replace(" ", "").Trim(); + break; + case 1: + EffDate += "-0"+iS.Replace(" ", "").Trim(); + break; + } + } + } + + + } + } + else + { + EffDate=dEffDate.ToString("yyyy-MM-dd"); + } + + // 出入库记录 + int mid = _connection.InsertWithInt32Identity(new MachineRecord() + { + MachineId = _setting.machineId, + DrawerNo = stock.DrawerNo, + ColNo = stock.ColNo, + DrugId = stock.DrugId, + ManuNo = ManuNo, + EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + OperationTime = DateTime.Now, + Type = type, + Quantity = type == 1 ? stock.AddQuantity : stock.TakeQuantity, + Operator = _globalStateService.Operator.Id, + Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, + InvoiceId = InvoiceId + }); // 更新库存 var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id) .Set(cs => cs.Quantity, type == 1 ? stock.Quantity + stock.AddQuantity : stock.Quantity - stock.TakeQuantity); // 入库时如果库存为0则有可能会修改批次效期进行保存 - if(type == 1 && stock.Quantity == 0 && !stock.drugManuNo.ManuNo.Equals(stock.ManuNo)) + if (type == 1 && stock.Quantity == 0 && !stock.drugManuNo.ManuNo.Equals(stock.ManuNo)) { stockQ = stockQ.Set(cs => cs.ManuNo, stock.drugManuNo.ManuNo).Set(cs => cs.EffDate, stock.drugManuNo.EffDate.ToString()).Set(cs => cs.Dmnguid, stock.drugManuNo.Id); } @@ -231,8 +264,9 @@ namespace MasaBlazorApp3.DataAccess.Impl }); if (mid > 0 && r > 0 && acid > 0) { - - } else + + } + else { flag = false; break; @@ -248,7 +282,8 @@ namespace MasaBlazorApp3.DataAccess.Impl } return flag; - } catch (Exception ex) + } + catch (Exception ex) { logger.Error($"抽屉{(type == 1 ? "加药" : "取药")}操作完成保存数据库失败,错误:" + ex.Message); _connection.RollbackTransaction(); @@ -263,7 +298,7 @@ namespace MasaBlazorApp3.DataAccess.Impl public async Task UnBind(string id) { - var r = await _connection.ChannelStock + var r = await _connection.ChannelStock .Where(cs => cs.Id == id) .Set(cs => cs.DrugId, String.Empty) .Set(cs => cs.Dmnguid, String.Empty) @@ -277,18 +312,19 @@ 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() ?? String.Empty) + .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.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty); - if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId)) { + if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId)) + { q = q.Set(cs => cs.DrugId, Stock.Drug?.DrugId); } var r = await q.UpdateAsync(); return r > 0; } - public async Task> GetAllChannelListWithDrug(int DrawerType, string drugName, int? take, int? skip) + public async Task> GetAllChannelListWithDrug(int DrawerType, string drugName, int? take, int? skip) { var query = _connection.ChannelStock.AsQueryable(); @@ -319,18 +355,18 @@ namespace MasaBlazorApp3.DataAccess.Impl .Take((int)take) .ToListAsync(); - var other= _connection.DrugInfo.AsQueryable(); - List drugInfos= await other + var other = _connection.DrugInfo.AsQueryable(); + List drugInfos = await other .LoadWith(di => di.Manus) .OrderBy((di) => di.DrugId) .ToListAsync(); - return new PageMultiData() + return new PageMultiData() { TotalDesserts = pagedData, Desserts = list, - Other= drugInfos + Other = drugInfos }; } //抽屉加药、取药获取数据 @@ -349,11 +385,11 @@ namespace MasaBlazorApp3.DataAccess.Impl { query = query.Where(cs => cs.Quantity > 0); } - int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId).GroupBy(cs=>cs.DrawerNo).Select(cs=>cs.Key).ToArray(); - List channelStocks= await query - .OrderBy((cs) => cs.DrawerNo) - .ThenBy((cs) => cs.ColNo) - .ToListAsync(); + int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); + List channelStocks = await query + .OrderBy((cs) => cs.DrawerNo) + .ThenBy((cs) => cs.ColNo) + .ToListAsync(); return new ChannelStockWithDrawerCount() { DrawerArray = ints, ChannelStocks = channelStocks }; } //盘点 @@ -384,7 +420,7 @@ namespace MasaBlazorApp3.DataAccess.Impl EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 4, - Quantity =stock.CheckQuantity, + Quantity = stock.CheckQuantity, Operator = _globalStateService.Operator.Id, Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id, InvoiceId = InvoiceId @@ -392,7 +428,7 @@ namespace MasaBlazorApp3.DataAccess.Impl // 更新库存 var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id) .Set(cs => cs.Quantity, stock.CheckQuantity); - + int r = stockQ.Update(); // 获取更新完库存之后的药品库存 List list = await _connection.ChannelStock.AsQueryable() @@ -452,5 +488,30 @@ namespace MasaBlazorApp3.DataAccess.Impl return false; } } + + //抽屉获取库存数据--药品绑定 + public async Task> GetChannelStockByBiaoDing(int DrawerNo, int Quantity = 0) + { + var query = _connection.ChannelStock.AsQueryable() + .LoadWith(cs => cs.Drug) + .LoadWith(cs => cs.drugManuNo) + .LoadWith(cs => cs.Drug.Manus) + .Where(cs => cs.DrawerType == 1) + .Where(cs => cs.MachineId == _setting.machineId); + + if (DrawerNo > 0) + { + query = query.Where(cs => cs.DrawerNo == DrawerNo); + } + int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray(); + + + List channelStocks = await query + .OrderBy((cs) => cs.DrawerNo) + .ThenBy((cs) => cs.ColNo) + .ToListAsync(); + return new ChannelStockWithDrawerCount() { DrawerArray = ints, ChannelStocks = channelStocks }; + } + } } diff --git a/MasaBlazorApp3/DataAccess/Impl/InOutInvoiceDao.cs b/MasaBlazorApp3/DataAccess/Impl/InOutInvoiceDao.cs index c72b3b0..dd21c7e 100644 --- a/MasaBlazorApp3/DataAccess/Impl/InOutInvoiceDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/InOutInvoiceDao.cs @@ -298,6 +298,38 @@ namespace MasaBlazorApp3.DataAccess.Impl for (var j = 0; j < stocks.Count; j++) { var ChannelStock = stocks[j]; + if (!DateTime.TryParse(ChannelStock.EffDate, out DateTime dEffDate)) + { + //效期转换出错 + if (ChannelStock.EffDate != null) + { + string[] idate = ChannelStock.EffDate.Split('/'); + foreach (string iS in idate) + { + if (!string.IsNullOrEmpty(iS.Trim())) + { + switch (iS.Trim().Length) + { + case 4: + ChannelStock.EffDate = iS.Trim(); + break; + case 2: + ChannelStock.EffDate += "-" + iS.Trim(); + break; + case 1: + ChannelStock.EffDate += "-0" + iS.Trim(); + break; + } + } + } + + + } + } + else + { + ChannelStock.EffDate = dEffDate.ToString("yyyy-MM-dd"); + } // 出库记录 int mid = _connection.InsertWithInt32Identity(new MachineRecord() { @@ -327,6 +359,7 @@ namespace MasaBlazorApp3.DataAccess.Impl ) .Where(cs => cs.DrugId.Equals(ChannelStock.DrugId)) .ToListAsync(); + // 保存账册 int acid = _connection.InsertWithInt32Identity(new AccountBook() { @@ -428,6 +461,38 @@ namespace MasaBlazorApp3.DataAccess.Impl .Set(cs => cs.EffDate, drugManuNo.EffDate.ToString()); } int r = q.Update(); + if (!DateTime.TryParse(ChannelStock.EffDate, out DateTime dEffDate)) + { + //效期转换出错 + if (ChannelStock.EffDate != null) + { + string[] idate = ChannelStock.EffDate.Split('/'); + foreach (string iS in idate) + { + if (!string.IsNullOrEmpty(iS.Trim())) + { + switch (iS.Trim().Length) + { + case 4: + ChannelStock.EffDate = iS.Trim(); + break; + case 2: + ChannelStock.EffDate += "-" + iS.Trim(); + break; + case 1: + ChannelStock.EffDate += "-0" + iS.Trim(); + break; + } + } + } + + + } + } + else + { + ChannelStock.EffDate = dEffDate.ToString("yyyy-MM-dd"); + } // 入库记录 int mid = _connection.InsertWithInt32Identity(new MachineRecord() { diff --git a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs index 1a97974..a7152f7 100644 --- a/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/OrderInfoDao.cs @@ -231,6 +231,39 @@ namespace MasaBlazorApp3.DataAccess.Impl for (var i = 0; i < datas.Count; i++) { var orderTakeVo = datas[i]; + var EffDate = orderTakeVo.ChannelStock.EffDate; + if (!DateTime.TryParse(orderTakeVo.ChannelStock.EffDate, out DateTime dEffDate)) + { + //效期转换出错 + if (orderTakeVo.ChannelStock.EffDate != null) + { + string[] idate = orderTakeVo.ChannelStock.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; + } + } + } + + + } + } + else + { + EffDate = dEffDate.ToString("yyyy-MM-dd"); + } // 出库记录 int mid = _connection.InsertWithInt32Identity(new MachineRecord() { @@ -239,7 +272,7 @@ namespace MasaBlazorApp3.DataAccess.Impl ColNo = orderTakeVo.ChannelStock.ColNo, DrugId = orderTakeVo.ChannelStock.DrugId, ManuNo = orderTakeVo.ChannelStock.ManuNo, - EffDate = !String.IsNullOrEmpty(orderTakeVo.ChannelStock.EffDate) ? DateTime.ParseExact(orderTakeVo.ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 2, Quantity = orderTakeVo.GetQuantity, @@ -266,7 +299,7 @@ namespace MasaBlazorApp3.DataAccess.Impl MachineId = _setting.machineId, DrugId = orderTakeVo.ChannelStock.DrugId, ManuNo = orderTakeVo.ChannelStock.ManuNo, - EffDate = !String.IsNullOrEmpty(orderTakeVo.ChannelStock.EffDate) ? DateTime.ParseExact(orderTakeVo.ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, OperationTime = DateTime.Now, Type = 2, OutQuantity = orderTakeVo.GetQuantity, diff --git a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs index 7c662b2..40b8a5b 100644 --- a/MasaBlazorApp3/DataAccess/Impl/UserDao.cs +++ b/MasaBlazorApp3/DataAccess/Impl/UserDao.cs @@ -107,5 +107,13 @@ namespace MasaBlazorApp3.DataAccess.Impl //} return (await statement.UpdateAsync()) > 0; } + //修改密码 + public bool UpdateUserPassword(User user) + { + var statement = _connection.User + .Where(u => u.Id == user.Id) + .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower()); + return statement.Update() > 0; + } } } diff --git a/MasaBlazorApp3/Finger/FingerprintUtil.cs b/MasaBlazorApp3/Finger/FingerprintUtil.cs index 03615c2..7f31910 100644 --- a/MasaBlazorApp3/Finger/FingerprintUtil.cs +++ b/MasaBlazorApp3/Finger/FingerprintUtil.cs @@ -32,30 +32,27 @@ namespace MasaBlazorApp3.Finger // ConnectionMain(); } - public async void ConnectionMain() + public async Task ConnectionMain() { - await Task.Run(() => + return await Task.Run(() => { - try - { - bIsConnected = axCZKEM1.Connect_Net(_options.ip, fingerPort); - logger.Info($"连接指纹机,IP:{_options.ip},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}"); - if (bIsConnected) - { - if (axCZKEM1.RegEvent(machineNumber, 65535)) - { - this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx); - //this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger); - this.axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx); - } + bIsConnected = axCZKEM1.Connect_Net(_options.ip, fingerPort); + logger.Info($"连接指纹机,IP:{_options.ip},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}"); + if (bIsConnected) + { + if (axCZKEM1.RegEvent(machineNumber, 65535)) + { + this.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(axCZKEM1_OnAttTransactionEx); + //this.axCZKEM1.OnEnrollFinger += new zkemkeeper._IZKEMEvents_OnEnrollFingerEventHandler(axCZKEM1_OnEnrollFinger); + this.axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(axCZKEM1_OnEnrollFingerEx); + } } - catch - { - } + return bIsConnected; }); + } //If your fingerprint(or your card) passes the verification,this event will be triggered diff --git a/MasaBlazorApp3/GlobalStateService.cs b/MasaBlazorApp3/GlobalStateService.cs index 99684dd..710af3a 100644 --- a/MasaBlazorApp3/GlobalStateService.cs +++ b/MasaBlazorApp3/GlobalStateService.cs @@ -30,6 +30,8 @@ namespace MasaBlazorApp3 } } + public bool isInit { get; set; } = false; + public event PropertyChangedEventHandler? PropertyChanged; //protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) diff --git a/MasaBlazorApp3/Pages/BiaoDing.razor b/MasaBlazorApp3/Pages/BiaoDing.razor index 632b535..b73118b 100644 --- a/MasaBlazorApp3/Pages/BiaoDing.razor +++ b/MasaBlazorApp3/Pages/BiaoDing.razor @@ -19,7 +19,7 @@
@foreach (int i in DrawerNos) { - + }
@@ -50,7 +50,14 @@ AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"> - + @if (status < 3) + { + + } + @if (status > 0 && status <= 3) + { + + } @@ -64,52 +71,17 @@ - - - @if (channel.Quantity == 0 && !String.IsNullOrEmpty(channel.DrugId)) - { - - - - - @((context as DrugManuNo)?.ManuNo) - @((context as DrugManuNo)?.EffDate) - - - - - } - else - { - - @channel.drugManuNo?.ManuNo - @channel.drugManuNo?.EffDate - } - - - - @if (cs.BoardType == 2) - { - @cs.AddQuantity - } - else - { - - - } - - + + + @@ -119,20 +91,22 @@ @inject PortUtil PortUtil; @inject NotificationService _message @inject IOptions setting; + @inject DialogService dialogService; int status = 0; - int drawerNo = 1; + int drawerNo = 0; RadzenDataGrid grid; private List? channels; bool isLoading; int count; - int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; int[] BeforeQuantity = new int[9]; int[] AfterQuantity = new int[9]; - private readonly ILog logger = LogManager.GetLogger(typeof(DrawerAdd)); + private readonly ILog logger = LogManager.GetLogger(typeof(BiaoDing)); // 当前操作的库位号列表 public List ColNos { get; set; } = new List(); - int currentCol = 0; + //当前操作的库位数据 + ChannelStock currentChannelStock; bool CompleteIsEnable = true; bool CancleIsEnable = true; @@ -146,7 +120,7 @@ { isLoading = true; - var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo); + var result = await channelListDao.GetChannelStockByBiaoDing(drawerNo); DrawerNos = result.DrawerArray; channels = result.ChannelStocks; count = result.ChannelStocks.Count; @@ -158,7 +132,7 @@ { this.status = 1; var promiseUtil = new PromiseUtil(); - await promiseUtil.taskAsyncLoop(500, null, async (data, next, stop) => + await promiseUtil.taskAsyncLoop(300, null, async (data, next, stop) => { try { @@ -166,94 +140,74 @@ { stop(); } - // 开启抽屉 - else if (this.status == 1) + else { - // if(库存》0) - // {} - - } - var b = await PortUtil.OpenDrawerStatus(this.drawerNo); - if (b) - { - PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,加药"); - this.status = 2; - PortUtil.Operate = true; - next(); - } - // else - // { - // _message.Notify( - // new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 } - // ); - // logger.Info($"抽屉打开失败"); - // RestData(); - // PortUtil.Operate = false; - // stop(); - // } - - else if (this.status == 2) - { - if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo)) + if (this.status == 1) { - //药盒抽屉,开药盒 - for (int i = 0; i < ColNos.Count; i++) + PortUtil.DrawerNo = this.drawerNo; + var b = await PortUtil.OpenDrawerStatus(this.drawerNo); + if (b) { - await PortUtil.OpenBoxByColNo(ColNos[i]); + PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,加药"); + this.status = 2; + PortUtil.Operate = true; + next(); } - } - // 查询抽屉是否为关闭状态 - var b2 = await PortUtil.CheckDrawerStatus2(drawerNo); - // 关闭则改变状态并终止循环 - if (b2) - { - PortUtil.SpeakAsync($"加药完成,请,核对,或,录入,正确的,添加数量"); - // 判断是否为称重抽屉 - if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) + else { - //关闭抽屉后获取称重稳定数量 - // await GetWeightQuantity(); + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 } + ); + logger.Info($"抽屉打开失败"); + RestData(); + PortUtil.Operate = false; + stop(); } - this.status = 3; - PortUtil.Operate = false; - stop(); } else { - if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo)) + //查询抽屉状态 + var b = await PortUtil.CheckDrawerStatus2(drawerNo); + if (!b) { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo); - AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); - - channels.ForEach(cl => - { - cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1]; - }); - } - // 判断是否为称重抽屉 - if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) - { - //开抽屉后查数 - for (int i = 0; i < 9; i++) + if (this.status == 2) { - int afterQuantity = await PortUtil.CheckQuantityForSingle(i); - AfterQuantity[i] = afterQuantity; - logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}"); + //药盒称重抽屉 + if (currentChannelStock != null && currentChannelStock.BoardType.ToString().Contains("3")) + { + //打开药盒 + await PortUtil.OpenBoxByColNo(currentChannelStock.ColNo); + this.status = 3; + } } - channels.ForEach(cl => - { - cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1]; - }); + if (this.status == 3) + { + this.status = 4; + //弹出标定对话框 + var dialog = await dialogService.OpenAsync( + $"标定", + new Dictionary() { { "channelStockInfo", + currentChannelStock } }, + new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); + currentChannelStock = null; + //关闭弹窗后将状态置为2以便下次点击药盒进行开药盒操作 + this.status = 2; + } + next(); + } + else + { + //抽屉已关闭 + stop(); + this.status = 0; + logger.Info($"抽屉关闭"); } - next(); // continue iteration } - } } catch (Exception e) { - logger.Info($"抽屉加药发生错误,{e.Message}"); + logger.Info($"标定药品发生错误,{e.Message}"); _message.Notify( new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } ); @@ -270,19 +224,28 @@ { this.status = 0; } + void Cancel() + { + this.status = 0; + } + void OnCellClick(DataGridCellMouseEventArgs args) { - if (args.Data.BoardType.ToString().Contains("3")) + if (this.status == 0) { - //是药盒抽屉则点击行,打开对应行的药箱 - if (!ColNos.Contains(args.Data.ColNo)) - { - ColNos.Add(args.Data.ColNo); - } + PortUtil.SpeakAsync("请先打开抽屉后再点开药盒"); } else { - grid.EditRow(args.Data); + currentChannelStock = args.Data; + if (args.Data.BoardType.ToString().Contains("3")) + { + PortUtil.SpeakAsync("正在打开药盒"); + } + // else + // { + // grid.EditRow(args.Data); + // } } } } diff --git a/MasaBlazorApp3/Pages/BiaoDingDialog.razor b/MasaBlazorApp3/Pages/BiaoDingDialog.razor new file mode 100644 index 0000000..3f6eb8c --- /dev/null +++ b/MasaBlazorApp3/Pages/BiaoDingDialog.razor @@ -0,0 +1,188 @@ +@using MasaBlazorApp3.Util +@using log4net + + + @* *@ +
+
+ + @if (channelStockInfo.Quantity>0) + { + 库位库存不为零,请取出药品后点击【清空】按钮,清空完成后输入标定数量并放入对应数量药品并根据下一步提示操作 + } + else + { + 正在清零,清零完成后输入标定数量并放入对应数量药品后点击【标定】按钮 + } + + +
+
+ @*
*@ + + + + + + + + + +
+ +@code { + @inject Radzen.DialogService dialogService; + @inject NotificationService _message + @inject PortUtil PortUtil; + [Parameter] public ChannelStock channelStockInfo { get; set; } + + PromiseUtil promiseUtil = new PromiseUtil(); + private readonly ILog logger = LogManager.GetLogger(typeof(BiaoDingDialog)); + + int BDQuantity = 10; + + int status = 0; + int iClear = 0; + int iBiaoDing = 0; + protected override async Task OnInitializedAsync() + { + if(channelStockInfo!=null&&channelStockInfo.Quantity<=0) + { + //库存为零,直接进行清空操作 + await Clear(); + } + base.OnInitializedAsync(); + } + //清空按钮 + async Task Clear() + { + PortUtil.SpeakAsync($"正在清空,请稍等"); + + this.status = 1; + int i = 0; + await promiseUtil.taskAsyncLoop(200, null, async (data, next, stop) => + { + i++; + if (this.status == 0) + { + iClear = 0; + stop(); + } + else + { + try + { + if (iClear == 0) + { + logger.Info($"清零操作{i}"); + //无库存发送计数清零指令 + await PortUtil.ClearCount(channelStockInfo.DrawerNo, channelStockInfo.ColNo); + iClear += 1; + next(); + } + else + { + logger.Info($"查数操作{i}"); + //发查数指令 + PortUtil.DrawerNo = channelStockInfo.DrawerNo; + PortUtil.Operate = true; + int stock = await PortUtil.CheckQuantityForBiaoDing(channelStockInfo.ColNo); + if (stock != 0) + { + _message.Notify( + new NotificationMessage + { Severity = NotificationSeverity.Success, Summary = "提示", Detail = "清空操作成功", Duration = 3000 } + ); + + PortUtil.SpeakAsync("清空完成,请放入10个药品,放好后点击标定按钮"); + iClear = 0; + stop(); + } + else + { + next(); + } + } + } + catch (Exception ex) + { + logger.Info($"清空操作异常"); + next(); + } + } + + }); + } + //标定按钮 + async Task ConfirmOK() + { + if (BDQuantity > 0) + { + try + { + status = 2; + PortUtil.SpeakAsync("正在标定,请稍等"); + //提示输入标定数量,发26指令 + await PortUtil.SetNumCount(channelStockInfo.DrawerNo, channelStockInfo.ColNo, BDQuantity); + await Task.Delay(200); + int i = 1; + await promiseUtil.taskAsyncLoop(200, null, async (data, next, stop) => + { + if(status==0) + { + stop(); + } + if (status == 2) + { + //查数量 + int quantity = await PortUtil.CheckQuantityForBiaoDing(channelStockInfo.ColNo); + if (quantity == BDQuantity) + { + //标定完成 + status = 0; + _message.Notify( + new NotificationMessage + { Severity = NotificationSeverity.Success, Summary = "提示", Detail = "标定成功", Duration = 3000 } + ); + + PortUtil.SpeakAsync("标定完成,请取出药品"); + status = 0; + i = 0; + stop(); + // 关闭弹窗 + dialogService.Close(true); + } + else + { + i++; + logger.Info($"标定数量不一致{quantity}-{BDQuantity},标定次数{i}"); + next(); + } + + } + }); + } + catch (Exception ex) + { + logger.Error($"标定异常{ex.Message}"); + _message.Notify( + new NotificationMessage + { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "标定异常", Duration = 3000 } + ); + } + } + else + { + _message.Notify( + new NotificationMessage + { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入标定数量", Duration = 3000 }); + } + } + // 取消 + async Task CancelClick() + { + status = 0; + // 关闭弹窗 + dialogService.Close(true); + } +} \ No newline at end of file diff --git a/MasaBlazorApp3/Pages/ConfirmDialo.razor b/MasaBlazorApp3/Pages/ConfirmDialog.razor similarity index 93% rename from MasaBlazorApp3/Pages/ConfirmDialo.razor rename to MasaBlazorApp3/Pages/ConfirmDialog.razor index bfce5a1..d97134b 100644 --- a/MasaBlazorApp3/Pages/ConfirmDialo.razor +++ b/MasaBlazorApp3/Pages/ConfirmDialog.razor @@ -1,7 +1,8 @@  - 确认要@(confirmInfo) 吗? + @(confirmInfo) + diff --git a/MasaBlazorApp3/Pages/DrawerAdd.razor b/MasaBlazorApp3/Pages/DrawerAdd.razor index 5d6fa59..7f71945 100644 --- a/MasaBlazorApp3/Pages/DrawerAdd.razor +++ b/MasaBlazorApp3/Pages/DrawerAdd.razor @@ -11,17 +11,30 @@
-
- @* *@ -
- @foreach (int i in DrawerNos) - { - + @if (DrawerNos.Count() > 8) + { +
+
+ @foreach (int i in DrawerNos) + { + - } + } +
- @* *@ -
+ } + else + { +
+
+ @foreach (int i in DrawerNos) + { + + + } +
+
+ }
@if (status < 3) { - + } @if (status == 3) { - + } @if (status > 0 && status <= 3) { @@ -59,7 +72,19 @@ @@ -68,12 +93,30 @@ @((context as DrugManuNo)?.ManuNo) - @((context as DrugManuNo)?.EffDate) + @if ((context as DrugManuNo).EffDate != null && (context as DrugManuNo).EffDate.ToString().Length > 10) + { + + @((context as DrugManuNo).EffDate.ToString().Substring(0, 10)) + } + else + { + + @((context as DrugManuNo)?.EffDate) + } @@ -94,7 +137,7 @@ - @if (cs.BoardType == 2) + @if (cs.BoardType.ToString().Contains("2") || cs.BoardType.ToString().Contains("3")) { @cs.AddQuantity } @@ -130,7 +173,7 @@ public List ColNos { get; set; } = new List(); int currentCol = 0; bool CompleteIsEnable = true; - bool CancleIsEnable=true; + bool CancleIsEnable = true; async Task LoadData(LoadDataArgs args) { isLoading = true; @@ -148,6 +191,7 @@ } async Task OpenDrawer() { + PortUtil.DrawerNo = this.drawerNo; this.status = 1; // 根据抽屉类型来决定打开前是否需要查询数量 var promiseUtil = new PromiseUtil(); @@ -170,16 +214,16 @@ logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); } // 判断是否为称重抽屉 - if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) - { - //开抽屉前先查数 - for (int i = 0; i < 9; i++) - { - int beforeQuantity = await PortUtil.CheckQuantityForSingle(i); - BeforeQuantity[i] = beforeQuantity; - logger.Info($"BeforeQuantity:{i}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}"); - } - } + // if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) + // { + // //开抽屉前先查数 + // for (int i = 0; i < 9; i++) + // { + // int beforeQuantity = await PortUtil.CheckQuantityForSingle(i + 1); + // BeforeQuantity[i] = beforeQuantity; + // logger.Info($"BeforeQuantity:{i++}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}"); + // } + // } var b = await PortUtil.OpenDrawerStatus(this.drawerNo); if (b) @@ -204,14 +248,6 @@ // 检测状态 else if (this.status == 2) { - if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo)) - { - //药盒抽屉,开药盒 - for(int i=0;i< ColNos.Count;i++) - { - await PortUtil.OpenBoxByColNo(ColNos[i]); - } - } // 查询抽屉是否为关闭状态 var b = await PortUtil.CheckDrawerStatus2(drawerNo); // 关闭则改变状态并终止循环 @@ -230,6 +266,29 @@ } else { + //药盒抽屉,开药盒 + if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo)) + { + if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) + { + if (currentCol > 0) + { + //开药盒前先查数 + int beforeQuantity = await PortUtil.CheckQuantityForSingle(currentCol); + BeforeQuantity[currentCol - 1] = beforeQuantity; + logger.Info($"BeforeQuantity:{currentCol}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}"); + await Task.Delay(200); + ColNos.Add(currentCol); + } + } + //药盒抽屉,开药盒 + if (currentCol > 0) + { + await PortUtil.OpenBoxByColNo(currentCol); + } + currentCol = 0; + } + if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo)) { byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo); @@ -245,16 +304,17 @@ if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) { //开抽屉后查数 - for (int i = 0; i < 9; i++) + for (int i = 0; i < ColNos.Count; i++) { - int afterQuantity = await PortUtil.CheckQuantityForSingle(i); - AfterQuantity[i] = afterQuantity; - logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}"); + int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]); + AfterQuantity[ColNos[i]-1] = afterQuantity; + logger.Info($"AfterQuantity:{ColNos[i]}-{string.Join(",", AfterQuantity)}数量{string.Join(", ", BeforeQuantity)}"); } - channels.ForEach(cl => + channels.Where(cl => ColNos.Contains(cl.ColNo)).ToList().ForEach(cl => { cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1]; }); + await InvokeAsync(StateHasChanged); } next(); // continue iteration } @@ -282,6 +342,8 @@ this.status = 0; this.BeforeQuantity = new int[9]; this.AfterQuantity = new int[9]; + currentCol = 0; + ColNos.Clear(); } //关闭抽屉后获取称重稳定数量 public async Task GetWeightQuantity() @@ -311,6 +373,10 @@ { cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1]; }); + CompleteIsEnable = true; + CancleIsEnable = true; + logger.Info("对比成功停止循环"); + await InvokeAsync(StateHasChanged); } else { @@ -330,6 +396,7 @@ } CompleteIsEnable = false; PortUtil.DrawerNo = drawerNo; + PortUtil.ColNoLst = ColNos; int[] quantity = await PortUtil.CheckQuantityByAddrForMulti(); AfterQuantity = quantity; int[] Quantitys = new int[BeforeQuantity.Length]; @@ -377,14 +444,15 @@ else { // 判断是否为标签抽屉 - if (setting.Value.label.Contains(this.drawerNo)) + if (setting.Value != null && setting.Value.label != null && setting.Value.label.Contains(this.drawerNo)) { //写标签数量 - channels.ForEach(async it => + channels.Where(it => it.AddQuantity > 0).ToList().ForEach(async it => { await PortUtil.WriteQuantityMethod(it.Quantity + it.AddQuantity, it.DrawerNo, it.ColNo); }); } + ColNos.Clear(); } } @@ -396,7 +464,7 @@ void Cancel() { - this.status = 0; + RestData(); } void SelectDrawer(int drawerNo) @@ -407,18 +475,20 @@ void OnCellClick(DataGridCellMouseEventArgs args) { - if (args.Data.BoardType.ToString().Contains("3")) + // if (args.Data.BoardType.ToString().Contains("3")) + // { + // //是药盒抽屉则点击行,打开对应行的药箱 + // if (!ColNos.Contains(args.Data.ColNo)) + // { + // ColNos.Add(args.Data.ColNo); + // } + // } + if (setting.Value.box.Contains(args.Data.DrawerNo) && status != 2) { - //是药盒抽屉则点击行,打开对应行的药箱 - if (!ColNos.Contains(args.Data.ColNo)) - { - ColNos.Add(args.Data.ColNo); - } - } - else - { - grid.EditRow(args.Data); + PortUtil.SpeakAsync("请先点取药按钮打开抽屉"); } + currentCol = args.Data.ColNo; + grid.EditRow(args.Data); } private IDisposable? registration; protected override void OnAfterRender(bool firstRender) diff --git a/MasaBlazorApp3/Pages/DrawerTake.razor b/MasaBlazorApp3/Pages/DrawerTake.razor index 32cf938..570f50c 100644 --- a/MasaBlazorApp3/Pages/DrawerTake.razor +++ b/MasaBlazorApp3/Pages/DrawerTake.razor @@ -6,42 +6,45 @@ @using log4net; - @*
-
- - @foreach (int i in DrawerNos) - { - - } - -
-
*@
-
- @* *@ -
- @foreach (int i in DrawerNos) - { - + @if (DrawerNos.Count() > 8) + { +
+
+ @foreach (int i in DrawerNos) + { + - } + } +
- @* *@ -
+ } + else + { +
+
+ @foreach (int i in DrawerNos) + { + + + } +
+
+ }
+ LoadData="@LoadData" + IsLoading="@isLoading" + Count="@count" + EmptyText="无数据" + Data="@channels" + AllowColumnResize="true" AllowAlternatingRows="false" + CellClick="@((DataGridCellMouseEventArgs args) => OnCellClick(args))" + AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"> @if (status < 3) @@ -50,7 +53,7 @@ } @if (status == 3) { - + } @if (status > 0 && status <= 3) { @@ -79,7 +82,7 @@ - @if (channel.BoardType == 2) + @if (channel.BoardType.ToString().Contains("2") || channel.BoardType.ToString().Contains("3")) { @channel.TakeQuantity } @@ -112,6 +115,7 @@ // 当前操作的库位号列表 public List ColNos { get; set; } = new List(); + int currentCol = 0; bool CompleteIsEnable = true; bool CancleIsEnable = true; @@ -122,7 +126,7 @@ isLoading = true; // var result = await channelListDao.GetChannelStockByDrawerNo(drawerNo, 1); - var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo); + var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo, 1); DrawerNos = result.DrawerArray; // Update the Data property channels = result.ChannelStocks; @@ -134,6 +138,7 @@ } async Task OpenDrawer() { + PortUtil.DrawerNo = this.drawerNo; this.status = 1; // 根据抽屉类型来决定打开前是否需要查询数量 var promiseUtil = new PromiseUtil(); @@ -155,17 +160,6 @@ BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); } - // 判断是否为称重抽屉 - if (setting.Value.weigh!=null&&setting.Value.weigh.Contains(this.drawerNo)) - { - //开抽屉前先查数 - for (int i = 0; i < 9; i++) - { - int beforeQuantity = await PortUtil.CheckQuantityForSingle(i); - BeforeQuantity[i] = beforeQuantity; - logger.Info($"BeforeQuantity:{i}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}"); - } - } var b = await PortUtil.OpenDrawerStatus(this.drawerNo); if (b) @@ -189,15 +183,6 @@ // 检测状态 else if (this.status == 2) { - if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo)) - { - //药盒抽屉,开药盒 - for (int i = 0; i < ColNos.Count; i++) - { - await PortUtil.OpenBoxByColNo(ColNos[i]); - } - } - // 查询抽屉是否为关闭状态 var b = await PortUtil.CheckDrawerStatus2(drawerNo); // 关闭则改变状态并终止循环 @@ -217,32 +202,63 @@ } else { + if (setting.Value.box != null && setting.Value.box.Contains(this.drawerNo)) + { + // 判断是否为称重抽屉 + if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) + { + //开抽屉前先查数 + if (currentCol > 0) + { + int beforeQuantity = await PortUtil.CheckQuantityForSingle(currentCol); + BeforeQuantity[currentCol - 1] = beforeQuantity; + logger.Info($"BeforeQuantity:{currentCol}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}"); + await Task.Delay(200); + ColNos.Add(currentCol); + } + } + //药盒抽屉,开药盒 + if (currentCol > 0) + { + await PortUtil.OpenBoxByColNo(currentCol); + } + currentCol = 0; + } + + if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo)) { byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo); AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); - channels.ForEach(cl => + if (!BeforeQuantity.SequenceEqual(AfterQuantity)) + { + channels.ForEach(cl => { cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1]; }); - + await InvokeAsync(StateHasChanged); + } } // 判断是否为称重抽屉 - if (setting.Value.weigh!=null&&setting.Value.weigh.Contains(this.drawerNo)) + if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo)) { //开抽屉后查数 - for (int i = 0; i < 9; i++) + for (int i = 0; i < ColNos.Count; i++) { - int afterQuantity = await PortUtil.CheckQuantityForSingle(i); - AfterQuantity[i] = afterQuantity; - logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}"); + int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]); + AfterQuantity[ColNos[i]-1] = afterQuantity; + logger.Info($"AfterQuantity:{ColNos[i]}-{afterQuantity}数量{string.Join(",", AfterQuantity)}"); } - channels.ForEach(cl => + if (!BeforeQuantity.SequenceEqual(AfterQuantity)) + { + channels.Where(cl => ColNos.Contains(cl.ColNo)).ToList().ForEach(cl => { - cl.TakeQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1]; + cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1]; }); + await InvokeAsync(StateHasChanged); + } } next(); // continue iteration } @@ -300,6 +316,7 @@ { cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1]; }); + await InvokeAsync(StateHasChanged); } else { @@ -320,6 +337,7 @@ } CompleteIsEnable = false; PortUtil.DrawerNo = drawerNo; + PortUtil.ColNoLst = ColNos; int[] quantity = await PortUtil.CheckQuantityByAddrForMulti(); AfterQuantity = quantity; int[] Quantitys = new int[BeforeQuantity.Length]; @@ -329,10 +347,14 @@ } finallyQuantity.Add(Quantitys); logger.Info($"Quantity{string.Join(",", Quantitys)}"); - channels.ForEach(cl => + if (!BeforeQuantity.SequenceEqual(AfterQuantity)) + { + channels.ForEach(cl => { cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1]; }); + await InvokeAsync(StateHasChanged); + } next(); } } @@ -357,8 +379,10 @@ this.status = 0; this.BeforeQuantity = new int[9]; this.AfterQuantity = new int[9]; + ColNos.Clear(); + currentCol = 0; - InvokeAsync(StateHasChanged); + // InvokeAsync(StateHasChanged); } async Task TakeFinish() @@ -376,12 +400,12 @@ else { // 判断是否为标签抽屉 - if (setting.Value.label.Contains(this.drawerNo)) + if (setting.Value.label != null && setting.Value.label.Contains(this.drawerNo)) { //写标签数量 - channels.ForEach(async it => + channels.Where(it => it.TakeQuantity > 0).ToList().ForEach(async it => { - await PortUtil.WriteQuantityMethod(it.Quantity + it.AddQuantity, it.DrawerNo, it.ColNo); + await PortUtil.WriteQuantityMethod(it.Quantity - it.TakeQuantity, it.DrawerNo, it.ColNo); }); } } @@ -394,30 +418,35 @@ void Cancel() { - this.status = 0; + RestData(); } void SelectDrawer(int drawerNo) { this.drawerNo = drawerNo; - InvokeAsync(StateHasChanged); grid.Reload(); } void OnCellClick(DataGridCellMouseEventArgs args) { - if (args.Data.BoardType.ToString().Contains("3")) + // if (args.Data.BoardType.ToString().Contains("3")) + // { + // //是药盒抽屉则点击行,打开对应行的药箱 + // if (!ColNos.Contains(args.Data.ColNo)) + // { + // ColNos.Add(args.Data.ColNo); + // } + // } + // else + // { + // grid.EditRow(args.Data); + // } + if (setting.Value.box.Contains(args.Data.DrawerNo) && status != 2) { - //是药盒抽屉则点击行,打开对应行的药箱 - if (!ColNos.Contains(args.Data.ColNo)) - { - ColNos.Add(args.Data.ColNo); - } - } - else - { - grid.EditRow(args.Data); + PortUtil.SpeakAsync("请先点取药按钮打开抽屉"); } + currentCol = args.Data.ColNo; + grid.EditRow(args.Data); } private IDisposable? registration; protected override void OnAfterRender(bool firstRender) diff --git a/MasaBlazorApp3/Pages/DrugList.razor b/MasaBlazorApp3/Pages/DrugList.razor index 35fcb0e..ad77e96 100644 --- a/MasaBlazorApp3/Pages/DrugList.razor +++ b/MasaBlazorApp3/Pages/DrugList.razor @@ -248,9 +248,9 @@ if(!string.IsNullOrEmpty(drugInfo.DrugId)) { //ȷʾ - var b = await dialogService.OpenAsync( + var b = await dialogService.OpenAsync( $"ɾȷ", - new Dictionary() { { "confirmInfo", "ɾҩƷ"+drugInfo.DrugName } }, + new Dictionary() { { "confirmInfo", "ȷҪɾҩƷ"+drugInfo.DrugName+"" } }, new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); if(b) { @@ -301,9 +301,9 @@ if (SelectedDrugs.FirstOrDefault().Manus.Contains(drugManuNo)) { //ȷʾ - var b = await dialogService.OpenAsync( + var b = await dialogService.OpenAsync( $"ȷɾ", - new Dictionary() { { "confirmInfo", "ɾΣ"+drugManuNo.ManuNo } }, + new Dictionary() { { "confirmInfo", "ȷҪɾΣ"+drugManuNo.ManuNo+"" } }, new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false } ); if(b) diff --git a/MasaBlazorApp3/Pages/EditPasswordDialog.razor b/MasaBlazorApp3/Pages/EditPasswordDialog.razor new file mode 100644 index 0000000..3734a79 --- /dev/null +++ b/MasaBlazorApp3/Pages/EditPasswordDialog.razor @@ -0,0 +1,135 @@ +@page "/EditPasswordDialog" +@using MasaBlazorApp3.Pojo.Config; +@using MasaBlazorApp3.Pojo.Vo; +@using MasaBlazorApp3.Util; +@using Microsoft.Extensions.Options; +@using Newtonsoft.Json; +@using log4net; + + + + + + @if (userI == 1) + { + 操作人 @globalStateService.Operator?.NickName 修改密码 + } + else if (userI == 2) + { + 复核人 @globalStateService.Reviewer?.NickName 修改密码 + } + + + + + + 登录 + + +
+ +
+ + +
+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ +
+ +@code { + @inject NotificationService _message + @inject GlobalStateService globalStateService; + @inject IUserDao userDao; + @inject Radzen.DialogService dialogService; + + private Pojo.User loginModel = new(); + private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog)); + [Parameter] public int userI { get; set; } + + + private void Submit(Pojo.User user) + { + if (userI == 1) + { + user.Username = globalStateService.Operator.Username; + } + else if (userI == 2) + { + user.Username = globalStateService.Reviewer.Username; + } + else + { + return; + } + Pojo.User u = userDao.GetByUsername(loginModel.Username); + if (u != null) + { + if (Util.MD5.GetMD5Hash(loginModel.OldPassword).ToLower().Equals(u.Password)) + { + bool iRet=userDao.UpdateUserPassword(u); + if (iRet) + { + _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"修改完成,退出后登录请使用新密码", Duration = 4000 }); + logger.Error($"{loginModel.Username}修改密码失败,数据{JsonConvert.SerializeObject(u)}"); + // 关闭弹窗 + dialogService.Close(false); + } + else + { + _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"修改失败", Duration = 4000 }); + logger.Error($"{loginModel.Username}修改密码失败,数据{JsonConvert.SerializeObject(u)}"); + // 关闭弹窗 + dialogService.Close(false); + } + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"原密码错误", Duration = 4000 } + ); + logger.Info($"用户【{u.Username}】修改密码,原密码输入错误"); + + } + + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 } + ); + logger.Info($"修改密码没有用户:【{loginModel.Username}】"); + } + } + //修改密码 + private void UpdateUserPassword(Pojo.User user) + { + + //退出后登录请使用新密码 + } + private void Exit() + { + dialogService.Close(false); + } +} diff --git a/MasaBlazorApp3/Pages/Home.razor b/MasaBlazorApp3/Pages/Home.razor index a86e6d2..9662887 100644 --- a/MasaBlazorApp3/Pages/Home.razor +++ b/MasaBlazorApp3/Pages/Home.razor @@ -1,56 +1,61 @@ -@page "/home" +@page "/" @using MasaBlazorApp3.Util @using log4net @layout EmptyLayout - - + + - + - - 操作人:@Operator.NickName - @if (Reviewer != null) + @if (globalStateService.Operator != null) { - 复核人:@Reviewer.NickName + //操作人:@globalStateService.Operator.NickName + 操作人:@globalStateService.Operator.NickName + + } + @if (globalStateService.Reviewer != null) + { + //复核人:@globalStateService.Reviewer.NickName + 复核人:@globalStateService.Reviewer.NickName } @@ -59,59 +64,74 @@ - + - + - 出库 - @if (!Operator.role.permissionIds.Any(id => id - 10 < 10)) + 出库 + @if (globalStateService.Operator != null) { -
- -
+ @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 10 < 10)) + { +
+ +
+ } }
入库 - @if (!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 (!Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10)) + @if (globalStateService.Operator != null) { -
- -
- } -
- - - 库存管理 - @if (!Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10)) + @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10)) { -
+
} + } + + + + 库存管理 + @if (globalStateService.Operator != null) + { + @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10)) + { +
+ +
+ } + }
系统设置 - @if (!Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10)) + @if (globalStateService.Operator != null) { -
- -
+ @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10)) + { +
+ +
+ } }
- +
@@ -119,26 +139,21 @@ @code { + @inject Radzen.DialogService dialogService; + @inject NotificationService _message @inject NavigationManager na; @inject TooltipService tooltipService private List userPremissions { get; set; } = new(); @inject GlobalStateService globalStateService; - Pojo.User Operator; - Pojo.User Reviewer; Timer timer; @inject PortUtil _portUtil; private readonly ILog logger = LogManager.GetLogger(typeof(Home)); @inject Microsoft.Extensions.Options.IOptions setting; bool currentPage = true; - + protected override void OnInitialized() { - - - Operator = globalStateService.Operator; - Reviewer = globalStateService.Reviewer; - // timer = new Timer(state => // { // var now = DateTime.Now; @@ -154,7 +169,7 @@ { if (globalStateService.Operator == null || !currentPage) { - logger.Info($"Home页自动退出循环停止{globalStateService.Operator==null},{!currentPage}"); + logger.Info($"Home页自动退出循环停止{globalStateService.Operator == null},{!currentPage}"); stop(); } else @@ -167,10 +182,9 @@ // 无人操作鼠标键盘 if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > setting.Value.autoOutLog && CheckComputerFreeState.GetLastInputTime() > setting.Value.autoOutLog) { - logger.Info($"设备{setting.Value.autoOutLog}内无人操作,用户【{Operator?.NickName}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoOutLog:{setting.Value.autoOutLog}"); + logger.Info($"设备{setting.Value.autoOutLog}内无人操作,用户【{globalStateService.Operator?.NickName}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoOutLog:{setting.Value.autoOutLog}"); globalStateService.Operator = null; globalStateService.Reviewer = null; - na.NavigateTo(""); stop(); } else @@ -199,22 +213,83 @@ timer?.Dispose(); } - void jump2Page(int parentId) + async void init() { - List childrenIds = Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList(); - if(childrenIds.Count > 0) + var b = await dialogService.OpenAsync( + $"调拨入库详情", + new Dictionary() { }, + new DialogOptions() { ShowTitle = false, Style = "min-height:auto;min-width:auto;width:auto", CloseDialogOnEsc = false, Resizable = true, Draggable = true, ShowClose = false } + ); + + } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + base.OnAfterRender(firstRender); + + if (firstRender && !globalStateService.isInit) { - childrenIds.Sort(); - int minId = childrenIds[0]; - string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath; - na.NavigateTo(path); - currentPage = false; + this.init(); + } + } + + + async void jump2Page(int parentId) + { + bool a = globalStateService.Operator != null; + if (!a) + { + a = await dialogService.OpenAsync( + "", + null, + new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false }); + } + if (a) + { + List childrenIds = globalStateService.Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList(); + if (childrenIds.Count > 0) + { + currentPage = false; + childrenIds.Sort(); + int minId = childrenIds[0]; + string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath; + na.NavigateTo(path); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"没有权限不能访问", Duration = 3000 } + ); + await InvokeAsync(StateHasChanged); + } } } void logout() { - globalStateService.Operator = null; - globalStateService.Reviewer = null; - na.NavigateTo(""); + if (globalStateService.Operator != null) + { + globalStateService.Operator = null; + globalStateService.Reviewer = null; + } + else + { + Environment.Exit(0); + } + + } + //修改密码 + async void EditPassword(int i) + { + if(i==1) + { + //修改操作人 + await dialogService.OpenAsync( + "", + null, + new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false }); + } + else if(i==2) + { + //修改复核人 + } } } diff --git a/MasaBlazorApp3/Pages/Index.razor b/MasaBlazorApp3/Pages/Index.razor index c548931..2454776 100644 --- a/MasaBlazorApp3/Pages/Index.razor +++ b/MasaBlazorApp3/Pages/Index.razor @@ -1,4 +1,4 @@ -@page "/" +@page "/login" @layout EmptyLayout @using System.ComponentModel; diff --git a/MasaBlazorApp3/Pages/InitPage.razor b/MasaBlazorApp3/Pages/InitPage.razor new file mode 100644 index 0000000..4b7bf01 --- /dev/null +++ b/MasaBlazorApp3/Pages/InitPage.razor @@ -0,0 +1,110 @@ +@page "/init" +@using MasaBlazorApp3.Pojo.Config; +@using MasaBlazorApp3.Pojo.Vo; +@using MasaBlazorApp3.Util; +@using Microsoft.Extensions.Options; +@using Newtonsoft.Json; +@using log4net; + + + + 加载程序必要连接中,请稍等。。。 + @msg + @errMsg + + +@code { + @inject Radzen.DialogService dialogService; + @inject IOptions setting; + @inject NotificationService _message; + @inject PortUtil PortUtil; + @inject FingerprintUtil FingerprintUtil; + @inject GlobalStateService globalStateService; + + + string msg; + string errMsg; + + private readonly ILog logger = LogManager.GetLogger(typeof(InitPage)); + + + protected override async Task OnInitializedAsync() + { + + base.OnInitializedAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + base.OnAfterRender(firstRender); + + if (firstRender) + { + await Task.Delay(15); + msg = "开始连接指纹模块"; + InvokeAsync(StateHasChanged); + try + { + await FingerprintUtil.ConnectionMain(); + msg = "指纹模块连接成功"; + InvokeAsync(StateHasChanged); + } catch (Exception e) + { + msg = "指纹模块连接失败"; + errMsg += "【指纹模块连接失败】"; + InvokeAsync(StateHasChanged); + } + await Task.Delay(500); + msg = "开始连接抽屉串口"; + InvokeAsync(StateHasChanged); + try + { + PortUtil.drawerSerial.Open(); + logger.Info($"抽屉串口打开结果【{PortUtil.drawerSerial.IsOpen}】"); + msg = "抽屉串口连接成功"; + InvokeAsync(StateHasChanged); + } catch (Exception e) + { + msg = "抽屉串口连接失败"; + errMsg += "【抽屉串口连接失败】"; + InvokeAsync(StateHasChanged); + } + await Task.Delay(500); + msg = "开始连接CanBus模块"; + InvokeAsync(StateHasChanged); + try + { + PortUtil.canBusSerial.Open(); + logger.Info($"CanBus模块打开结果【{PortUtil.canBusSerial.IsOpen}】"); + msg = "CanBus模块连接成功"; + InvokeAsync(StateHasChanged); + } catch (Exception e) + { + msg = "CanBus模块连接失败"; + errMsg += "【CanBus模块连接失败】"; + InvokeAsync(StateHasChanged); + } + await Task.Delay(500); + msg = "开始连接条码扫描模块"; + InvokeAsync(StateHasChanged); + try + { + PortUtil.scanCodeSerial.Open(); + logger.Info($"条码扫描模块打开结果【{PortUtil.scanCodeSerial.IsOpen}】"); + msg = "条码扫描模块连接成功"; + InvokeAsync(StateHasChanged); + } catch (Exception e) + { + msg = "条码扫描模块连接失败"; + errMsg += "【条码扫描模块连接失败】"; + InvokeAsync(StateHasChanged); + } + globalStateService.isInit = true; + dialogService.Close(); + } + } + + + + +} diff --git a/MasaBlazorApp3/Pages/InvoiceAddDialog.razor b/MasaBlazorApp3/Pages/InvoiceAddDialog.razor index 430e338..a27cdd2 100644 --- a/MasaBlazorApp3/Pages/InvoiceAddDialog.razor +++ b/MasaBlazorApp3/Pages/InvoiceAddDialog.razor @@ -15,45 +15,45 @@ - - - + + + + + + + + + + + - @if (status < 2) @@ -82,25 +82,33 @@ private readonly ILog logger = LogManager.GetLogger(typeof(InvoiceAddDialog)); - + [Parameter] public InOutInvoice invoice { get; set; } private bool CanTakeDrug = true; int status = 0; public List data { get; set; } + //称重取药数量 + int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + // 当前操作的库位号列表 + public List ColNos { get; set; } = new List(); + int currentCol = 0; + //开抽屉前操作标识 + private List _flagList = new List(); async Task StartAdd() { - if(data.Any(it => it.Quantity != it.ChannelStocks.Sum(cs => cs.AddQuantity))) + if (data.Any(it => it.Quantity != it.ChannelStocks.Sum(cs => cs.AddQuantity))) { _message.Notify( new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的入库数量!", Duration = 4000 } ); - - } else + + } + else { await OpenDrawer(); - } + } } async Task CancelOpera() @@ -142,14 +150,35 @@ { BeforeQuantity = new int[9]; AfterQuantity = new int[9]; - // 判断是否为单支抽屉 - if (setting.Value.single.Contains(drawerNo)) + for (int j = 0; j < data[index].ChannelStocks.Count; j++) { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); - BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + // _flagList.Add(flag); + //单支-查数 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("2")) + { + byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[index].ChannelStocks[j].DrawerNo); + BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); - await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast().ToArray()); + await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast().ToArray()); + } + //称重-查数 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("6")) + { + PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;// drawerNo; + PortUtil.ColNoLst.Add(data[index].ChannelStocks[j].ColNo); + + BeforeQuantity[data[index].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[index].ChannelStocks[j].ColNo); + logger.Info($"称重抽屉【{data[index].ChannelStocks[j].DrawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + await Task.Delay(200); + } + //药盒-开药盒 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("3")) + { + PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo; + await PortUtil.OpenBoxByColNo(data[index].ChannelStocks[j].ColNo); + await Task.Delay(200); + } } var b = await PortUtil.OpenDrawerStatus(drawerNo); if (b) @@ -186,6 +215,80 @@ { PortUtil.SpeakAsync($"加药完成,请,点击完成按钮进行确认"); this.status = 2; + string alertMessage = string.Empty; + bool cancelFlag = false; + for (int i = 0; i < data.Count; i++) + { + for (int j = 0; j < data[i].ChannelStocks.Count; j++) + { + string flag = "关" + data[i].ChannelStocks[j].DrawerNo.ToString() + data[i].ChannelStocks[j].ColNo.ToString(); + + if (!_flagList.Contains(flag)) + { + _flagList.Add(flag); + //关闭抽屉后获取称重数量 + PortUtil.DrawerNo = data[i].ChannelStocks[j].DrawerNo;// drawerNo; + // 判断是否为称重抽屉 + //单支-查数 + if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6")) + { + PortUtil.ColNoLst = this.ColNos; + + AfterQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo); + logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】"); + WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1]; + if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]) + { + //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据 + alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】"; + + } + } + //单支-查数 + if (data[i].ChannelStocks[j].BoardType.ToString().Contains("2")) + { + byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); + AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】"); + WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1]; + if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]) + { + alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].ChannelStocks[j].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].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 }); + + if (!confirm) + { + RestData(); + logger.Info("取消保存"); + cancelFlag = true; + break; + } + else + { + logger.Info(alertMessage); + } + alertMessage = string.Empty; + } + } + } + if (cancelFlag) + { + break; + } + } stop(); } else @@ -196,21 +299,21 @@ } else { - if (setting.Value.single.Contains(drawerNo)) - { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); - AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); + // if (setting.Value.single.Contains(drawerNo)) + // { + // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); + // AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + // logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); - data.ForEach(cl => - { - cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs => - { - logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】"); - }); + // data.ForEach(cl => + // { + // cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs => + // { + // logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】"); + // }); - }); - } + // }); + // } next(); // continue iteration } } @@ -223,13 +326,12 @@ RestData(); logger.Info($"调拨加药发生错误,{e.Message}"); _message.Notify( - new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } - ); + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } + ); if (setting.Value.single.Contains(drawerNo)) { PortUtil.AllLightOff(); } - stop(); } }); } @@ -237,6 +339,8 @@ void RestData() { this.status = 0; + _flagList.Clear(); + this.ColNos.Clear(); } async Task AddFinish() @@ -285,16 +389,17 @@ } - void RowRender(RowRenderEventArgs args) + void RowRender(RowRenderEventArgs + args) { args.Expandable = args.Data.ChannelStocks != null && args.Data.ChannelStocks.Count > 0; } - void OnCellClick(DataGridCellMouseEventArgs args, RadzenDataGrid Grid) + void OnCellClick(DataGridCellMouseEventArgs + args, RadzenDataGrid + Grid) { Grid.EditRow(args.Data); } - - } diff --git a/MasaBlazorApp3/Pages/InvoiceOutDialog.razor b/MasaBlazorApp3/Pages/InvoiceOutDialog.razor index 14813a1..7c379cc 100644 --- a/MasaBlazorApp3/Pages/InvoiceOutDialog.razor +++ b/MasaBlazorApp3/Pages/InvoiceOutDialog.razor @@ -16,45 +16,45 @@ - - - + + + + + + + + + + + - @if (status < 2) @@ -82,26 +82,36 @@ RadzenDataGrid grid; private readonly ILog logger = LogManager.GetLogger(typeof(InvoiceOutDialog)); - + [Parameter] public InOutInvoice invoice { get; set; } private bool CanTakeDrug = true; int status = 0; public List data { get; set; } + //称重取药数量 + int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + // 当前操作的库位号列表 + public List ColNos { get; set; } = new List(); + int currentCol = 0; + //开抽屉前操作标识 + private List _flagList = new List(); + int[] BeforeQuantity = new int[9]; + int[] AfterQuantity = new int[9]; async Task StartTake() { - if(data.Any(it => it.Quantity != it.ChannelStocks.Sum(cs => cs.TakeQuantity))) + if (data.Any(it => it.Quantity != it.ChannelStocks.Sum(cs => cs.TakeQuantity))) { _message.Notify( new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的出库数量!", Duration = 4000 } ); - - } else + + } + else { await OpenDrawer(); - } + } } async Task CancelOpera() { @@ -113,7 +123,7 @@ this.status = 1; // 解析需要打开的抽屉列表 List channels = new(); - for(int i = 0; i < data.Count; i++) + for (int i = 0; i < data.Count; i++) { channels = channels.Concat(data[i].ChannelStocks.Where(cs => cs.TakeQuantity > 0)).ToList(); } @@ -123,9 +133,7 @@ // 根据抽屉类型来决定打开前是否需要查询数量 var promiseUtil = new PromiseUtil(); int index = 0; - var BeforeQuantity = new int[9]; - var AfterQuantity = new int[9]; - await promiseUtil.taskAsyncLoop(500, 0 , async (options, next, stop) => + await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) => { var drawerNo = drawerNos[index]; try @@ -141,15 +149,63 @@ { BeforeQuantity = new int[9]; AfterQuantity = new int[9]; - // 判断是否为单支抽屉 - if (setting.Value.single.Contains(drawerNo)) + for (int j = 0; j < data[index].ChannelStocks.Count; j++) { - byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); - BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + //单支-查数 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("2")) + { + byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[index].ChannelStocks[j].DrawerNo); + BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); - await PortUtil.HasLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast().ToArray()); + await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast().ToArray()); + } + //称重-查数 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("6")) + { + PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo;// drawerNo; + PortUtil.ColNoLst.Add(data[index].ChannelStocks[j].ColNo); + + BeforeQuantity[data[index].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[index].ChannelStocks[j].ColNo); + logger.Info($"称重抽屉【{data[index].ChannelStocks[j].DrawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + await Task.Delay(200); + } + //药盒-开药盒 + if (data[index].ChannelStocks[j].BoardType.ToString().Contains("3")) + { + PortUtil.DrawerNo = data[index].ChannelStocks[j].DrawerNo; + await PortUtil.OpenBoxByColNo(data[index].ChannelStocks[j].ColNo); + await Task.Delay(200); + } } + // // 判断是否为单支抽屉 + // if (setting.Value.single != null && setting.Value.single.Contains(drawerNo)) + // { + // byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); + // BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + // logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + + // await PortUtil.HasLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast().ToArray()); + // } + // // 称重抽屉关上则查数 + // if (setting.Value.weigh != null && setting.Value.weigh.Contains(drawerNo)) + // { + // for (int i = 0; i < data.Count; i++) + // { + // for (int j = 0; j < data[i].ChannelStocks.Count; j++) + // { + // if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6")) + // { + // PortUtil.DrawerNo = drawerNo; + // PortUtil.ColNoLst.Add(data[i].ChannelStocks[j].ColNo); + + // BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo); + // logger.Info($"称重抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + // await Task.Delay(200); + // } + // } + // } + // } var b = await PortUtil.OpenDrawerStatus(drawerNo); if (b) { @@ -181,10 +237,80 @@ { PortUtil.AllLightOff(); } + if (index == drawerNos.Count - 1) { PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); this.status = 2; + string alertMessage = string.Empty; + bool cancelFlag = false; + for (int i = 0; i < data.Count; i++) + { + for (int j = 0; j < data[i].ChannelStocks.Count; j++) + { + string flag = "关" + data[i].ChannelStocks[j].DrawerNo.ToString() + data[i].ChannelStocks[j].ColNo.ToString(); + + if (!_flagList.Contains(flag)) + { + _flagList.Add(flag); + // 判断是否为称重抽屉 + if (data[i].ChannelStocks[j].BoardType.ToString().Contains("6")) + { + //关闭抽屉后获取称重数量 + PortUtil.DrawerNo = data[i].ChannelStocks[j].DrawerNo;// drawerNo; + PortUtil.ColNoLst = this.ColNos; + + AfterQuantity[data[i].ChannelStocks[j].ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStocks[j].ColNo); + logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】"); + WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1]; + if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]) + { + //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据 + alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]}】"; + + } + } + if (data[i].ChannelStocks[j].BoardType.ToString().Contains("2")) + { + byte[] quantity = await PortUtil.CheckQuantityByDrawer(data[i].ChannelStocks[j].DrawerNo); + AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", AfterQuantity)}】"); + WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1] = BeforeQuantity[data[i].ChannelStocks[j].ColNo - 1] - AfterQuantity[data[i].ChannelStocks[j].ColNo - 1]; + if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStocks[j].ColNo - 1]) + { + alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].ChannelStocks[j].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStocks[j].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("取消保存"); + cancelFlag = true; + break; + } + else + { + logger.Info(alertMessage); + } + alertMessage = string.Empty; + } + } + } + if (cancelFlag) + { + break; + } + } stop(); } else @@ -195,7 +321,7 @@ } else { - if (setting.Value.single.Contains(drawerNo)) + if (setting.Value.single != null && setting.Value.single.Contains(drawerNo)) { byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo); AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); @@ -210,6 +336,15 @@ }); } + //是药盒抽屉开药盒 + if (setting.Value.box != null && setting.Value.box.Contains(drawerNo) && currentCol != null) + { + PortUtil.DrawerNo = drawerNo; + await PortUtil.OpenBoxByColNo(currentCol); + ColNos.Add(currentCol); + currentCol = 0; + await Task.Delay(200); + } next(); // continue iteration } } @@ -236,6 +371,11 @@ void RestData() { this.status = 0; + this.BeforeQuantity = new int[9]; + this.AfterQuantity = new int[9]; + currentCol = 0; + ColNos.Clear(); + _flagList.Clear(); } async Task TakeFinish() @@ -291,6 +431,7 @@ void OnCellClick(DataGridCellMouseEventArgs args, RadzenDataGrid Grid) { + currentCol = args.Data.ColNo; Grid.EditRow(args.Data); } diff --git a/MasaBlazorApp3/Pages/LoginDialog.razor b/MasaBlazorApp3/Pages/LoginDialog.razor new file mode 100644 index 0000000..2f94815 --- /dev/null +++ b/MasaBlazorApp3/Pages/LoginDialog.razor @@ -0,0 +1,226 @@ +@page "/loginDialog" +@using MasaBlazorApp3.Pojo.Config; +@using MasaBlazorApp3.Pojo.Vo; +@using MasaBlazorApp3.Util; +@using Microsoft.Extensions.Options; +@using Newtonsoft.Json; +@using log4net; + + + + + + + @if (loginMode == 2) + { + 操作人:@globalStateService.Operator?.NickName + 复核人:@globalStateService.Reviewer?.NickName + } + + + + + + 登录 + + +
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ + +
+
+
+
+ +
+ +@code { + @inject Radzen.DialogService dialogService; + + @inject FingerprintUtil FingerprintUtil; + @inject PortUtil PortUtil; + @inject NavigationManager na; + @inject NotificationService _message + @inject GlobalStateService globalStateService; + @inject IUserDao userDao; + @inject Microsoft.Extensions.Options.IOptions setting; + + + + private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog)); + + private int loginMode = 1; + private bool opFirst = true; + + + + bool isShow; + + private Pojo.User loginModel = new(); + + protected override Task OnInitializedAsync() + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx; + + loginMode = setting.Value.loginMode; + opFirst = setting.Value.opFirst; + + return base.OnInitializedAsync(); + } + + private void SetUser(Pojo.User user) + { + + // 判断是否为双人登录模式 + if (loginMode == 2) + { + // 判断是否是操作人优先登录 + if (opFirst) + { + // 判断操作人是否已经登录,已经登录说明此时为第二人登录 + if (globalStateService.Operator != null) + { + // 判断是否还是操作人的验证 + if (globalStateService.Operator.Id != user.Id) + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx; + globalStateService.Reviewer = user; + logger.Info($"双人登录模式:操作人【{globalStateService.Operator.NickName}】复核人【{user.NickName}】登录"); + dialogService.Close(true); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + } + } + else + { + // 此时为第一人登录 + globalStateService.Operator = user; + InvokeAsync(StateHasChanged); + } + } + // 操作人为第二人登录 + else + { + // 判断复核人是否已经登录,已经登录说明此时为第二人登录 + if (globalStateService.Reviewer != null) + { + // 判断是否还是复核人的验证 + if (globalStateService.Reviewer.Id != user.Id) + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx; + globalStateService.Operator = user; + logger.Info($"双人登录模式:操作人【{user.NickName}】复核人【{globalStateService.Reviewer.NickName}】登录"); + dialogService.Close(true); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 } + ); + } + } + else + { + // 此时为第一人登录 + globalStateService.Reviewer = user; + InvokeAsync(StateHasChanged); + } + + } + + } + else + { + FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx; + globalStateService.Operator = user; + logger.Info($"单人登录模式:用户【{user.NickName}】登录"); + dialogService.Close(true); + } + } + + + + private void Submit(Pojo.User user) + { + 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}】密码输入错误"); + + } + + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"无此用户", Duration = 4000 } + ); + logger.Info($"没有用户:【{loginModel.Username}】"); + } + } + + 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) + { + + Pojo.User u = userDao.GetById(Convert.ToInt32(sEnrollNumber)); + if (u != null) + { + SetUser(u); + } + else + { + _message.Notify( + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 } + ); + logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户"); + } + + } + + private void Exit() + { + dialogService.Close(false); + } + + + + +} diff --git a/MasaBlazorApp3/Pages/OrderDetailDialog.razor b/MasaBlazorApp3/Pages/OrderDetailDialog.razor index 599b078..0fc60f3 100644 --- a/MasaBlazorApp3/Pages/OrderDetailDialog.razor +++ b/MasaBlazorApp3/Pages/OrderDetailDialog.razor @@ -62,7 +62,7 @@ } @if (status <= 2) { - + }
@@ -82,8 +82,8 @@ private bool CanTakeDrug = true; public List data { get; set; } - - + //称重取药数量 + int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; protected override async Task OnInitializedAsync() { @@ -129,6 +129,26 @@ 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 (data[i].ChannelStock.BoardType.ToString().Contains("6")) + { + PortUtil.DrawerNo = drawerNo; + PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); + + orderTakeVo.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 = drawerNo; + await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo); + await Task.Delay(200); + } + } var b = await PortUtil.OpenDrawerStatus(drawerNo); if (b) { @@ -170,6 +190,55 @@ { 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 = 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] = 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}应取数量【{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("取消保存"); + } + } stop(); } else @@ -180,35 +249,21 @@ } else { - if (setting.Value.single.Contains(drawerNo)) - { - 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)}】"); - - data.ForEach(cl => - { - if (cl.ChannelStock.DrawerNo == drawerNo) - { - logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】"); - } - - }); - } next(); // continue iteration } } } + } catch (Exception e) { RestData(); logger.Info($"处方取药发生错误,{e.Message}"); _message.Notify( - new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } - ); + new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 } + ); if (setting.Value.single.Contains(drawerNo)) { PortUtil.AllLightOff(); @@ -221,8 +276,20 @@ void RestData() { this.status = 0; + data.ForEach(it => + { + it.Status = 0; + it.BeforeQuantity = new int[9]; + it.AfterQuantity = new int[9]; + }); + this.WeightFinnalQuantity = new int[9]; + } + void Cancel() + { + RestData(); + // 关闭弹窗 + dialogService.Close(true); } - async Task TakeFinish() { diff --git a/MasaBlazorApp3/Pages/Role.razor b/MasaBlazorApp3/Pages/Role.razor index 1a0a924..0455210 100644 --- a/MasaBlazorApp3/Pages/Role.razor +++ b/MasaBlazorApp3/Pages/Role.razor @@ -196,9 +196,9 @@ if (roleList.Contains(role)) { //弹出确认提示框 - var b = await dialogService.OpenAsync( + var b = await dialogService.OpenAsync( $"删除确认", - new Dictionary() { { "confirmInfo", "删除角色:" + role.RoleName } }, + new Dictionary() { { "confirmInfo", "确认要删除角色:" + role.RoleName+"吗?" } }, new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); if (b) { diff --git a/MasaBlazorApp3/Pages/SelfTakeDialog.razor b/MasaBlazorApp3/Pages/SelfTakeDialog.razor index c259387..8cacdad 100644 --- a/MasaBlazorApp3/Pages/SelfTakeDialog.razor +++ b/MasaBlazorApp3/Pages/SelfTakeDialog.razor @@ -77,11 +77,14 @@ int status; [Parameter] public OrderInfo order { get; set; } - [Parameter] public List orderDetails{ get; set; } + [Parameter] public List orderDetails { get; set; } + private bool CanTakeDrug = true; public List data { get; set; } + //称重取药数量 + int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; protected override async Task OnInitializedAsync() { data = await selfTakeDao.getTakeInfoByOrderNo(orderDetails); @@ -126,6 +129,26 @@ 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 (data[i].ChannelStock.BoardType.ToString().Contains("6")) + { + PortUtil.DrawerNo = drawerNo; + PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo); + + orderTakeVo.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 = drawerNo; + await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo); + await Task.Delay(200); + } + } var b = await PortUtil.OpenDrawerStatus(drawerNo); if (b) { @@ -169,6 +192,55 @@ { 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 = 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] = 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}应取数量【{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("取消保存"); + } + } stop(); } else @@ -179,21 +251,21 @@ } else { - if (setting.Value.single.Contains(drawerNo)) - { - 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)}】"); + // if (setting.Value.single.Contains(drawerNo)) + // { + // 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)}】"); - data.ForEach(cl => - { - if (cl.ChannelStock.DrawerNo == drawerNo) - { - logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】"); - } + // data.ForEach(cl => + // { + // if (cl.ChannelStock.DrawerNo == drawerNo) + // { + // logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】"); + // } - }); - } + // }); + // } next(); // continue iteration } } diff --git a/MasaBlazorApp3/Pages/User.razor b/MasaBlazorApp3/Pages/User.razor index 99efefb..34f75e3 100644 --- a/MasaBlazorApp3/Pages/User.razor +++ b/MasaBlazorApp3/Pages/User.razor @@ -233,9 +233,9 @@ if (userList.Contains(user)) { //弹出确认提示框 - var b = await dialogService.OpenAsync( + var b = await dialogService.OpenAsync( $"删除确认", - new Dictionary() { { "confirmInfo", "删除用户:"+user.Username } }, + new Dictionary() { { "confirmInfo", "确认要删除用户:"+user.Username+"吗?" } }, new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); if (b) { @@ -258,9 +258,9 @@ if (userList.Contains(user)) { //弹出确认提示框 - var b = await dialogService.OpenAsync( + var b = await dialogService.OpenAsync( $"密码重置确认", - new Dictionary() { { "confirmInfo", "重置用户:" + user.Username+" 的密码" } }, + new Dictionary() { { "confirmInfo", "确认要重置用户:" + user.Username+" 的密码吗?" } }, new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }); if (b) { diff --git a/MasaBlazorApp3/Pojo/ChannelStock.cs b/MasaBlazorApp3/Pojo/ChannelStock.cs index bcb697a..f54a161 100644 --- a/MasaBlazorApp3/Pojo/ChannelStock.cs +++ b/MasaBlazorApp3/Pojo/ChannelStock.cs @@ -66,11 +66,11 @@ namespace MasaBlazorApp3.Pojo public DrugManuNo? drugManuNo { get; set; } - [Column(IsColumn =false)] + [Column(IsColumn = false)] public string Location - { get=>DrawerNo+ "-" + ColNo; } + { get => DrawerNo + "-" + ColNo; } - [Column(IsColumn =false)] + [Column(IsColumn = false)] public int CanReturnQuantity { get; set; } [Column(IsColumn = false)] @@ -79,5 +79,7 @@ namespace MasaBlazorApp3.Pojo get; set; } + [Column("Pos_No")] + public int BiaoDingStatus { get; set; } } } diff --git a/MasaBlazorApp3/Pojo/User.cs b/MasaBlazorApp3/Pojo/User.cs index d6a12be..3ca4e2b 100644 --- a/MasaBlazorApp3/Pojo/User.cs +++ b/MasaBlazorApp3/Pojo/User.cs @@ -35,5 +35,8 @@ namespace MasaBlazorApp3.Pojo [Association(ThisKey = nameof(RoleId), OtherKey = nameof(Role.Id))] public Role role { get; set; } + + [Column(IsColumn =false)] + public string OldPassword { get; set; } } } diff --git a/MasaBlazorApp3/Port/PortUtil.cs b/MasaBlazorApp3/Port/PortUtil.cs index d07c253..1b0a70b 100644 --- a/MasaBlazorApp3/Port/PortUtil.cs +++ b/MasaBlazorApp3/Port/PortUtil.cs @@ -55,8 +55,8 @@ namespace MasaBlazorApp3.Port string DrawerPortPath = _portConfig.drawerPortPath; logger.Info($"打开抽屉串口【{DrawerPortPath}】"); drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8); - drawerSerial.Open(); - logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】"); + //drawerSerial.Open(); + //logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】"); } catch (Exception e) { @@ -72,8 +72,8 @@ namespace MasaBlazorApp3.Port string code = scanCodeSerial.ReadExisting(); }; - scanCodeSerial.Open(); - logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】"); + //scanCodeSerial.Open(); + //logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】"); } catch (Exception e) { @@ -86,8 +86,8 @@ namespace MasaBlazorApp3.Port string CanBusPortPath = _portConfig.canBusPortPath; logger.Info($"打开can总线串口【{CanBusPortPath}】"); canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8); - canBusSerial.Open(); - logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】"); + //canBusSerial.Open(); + //logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】"); } catch (Exception e) { @@ -410,7 +410,7 @@ namespace MasaBlazorApp3.Port var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16); byte[] buffer = new byte[] { 0xaa, (byte)channel, 5, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; //byte[] buffer = new byte[] { 0xaa, 0x11, 0x05,0x01, 0x00,0x00,0x00,0xee}; - logger.Info($"开药盒{ColNo}【{Convert.ToHexString(buffer)}】"); + logger.Info($"开药盒{DrawerNo}-{ColNo}【{Convert.ToHexString(buffer)}】"); canBusSerial.Write(buffer, 0, 8); byte[] retBuffer = await GetBufferByPort(canBusSerial, 8); logger.Info($"开药盒返回{ColNo}【{Convert.ToHexString(retBuffer)}】"); @@ -770,33 +770,51 @@ namespace MasaBlazorApp3.Port } } - public async void ClearCount(int DrawerNo, int ColNo) + public async Task ClearCount(int DrawerNo, int ColNo) { - canBusSerial.DiscardInBuffer(); - var index = ColNo > 3 ? 2 : 1; - var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3; - var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16); - byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)lock1, 0x00, 0x00, 0x00, 0xee }; + try + { + canBusSerial.DiscardInBuffer(); + int[] iNum = new int[] { 3, 2, 1 }; + var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2; + var bColNo = iNum[colNo2]; + decimal decolNO = (decimal)ColNo; + var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16); + byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; - logger.Info($"称重发送清空计数【{string.Join(",", buffer)}】"); - canBusSerial.Write(buffer, 0, 8); + logger.Info($"称重发送清空计数【{Convert.ToHexString(buffer)}】"); + canBusSerial.Write(buffer, 0, 8); + } + catch (Exception ex) + { + logger.Info($"操作发生异常:ex:{ex.Message},方法名:ClearCount;参数:{DrawerNo},{ColNo}"); + } } - public async void SetNumCount(int DrawerNo, int ColNo, int Quantity) + public async Task SetNumCount(int DrawerNo, int ColNo, int Quantity) { - canBusSerial.DiscardInBuffer(); - var index = ColNo > 3 ? 2 : 1; - var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3; - var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16); - byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)lock1, 0x00, 0x00, 0x00, 0xee }; + try + { + canBusSerial.DiscardInBuffer(); + int[] iNum = new int[] { 3, 2, 1 }; + var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2; + var bColNo = iNum[colNo2]; + decimal decolNO = (decimal)ColNo; + var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16); + byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; + + buffer[4] = (byte)(Quantity & 0xff); + //buffer[4] = (byte)(Quantity >> 8); + //buffer[5] = (byte)(Quantity & 0xff); - buffer[4] = (byte)(Quantity >> 8); - buffer[5] = (byte)(Quantity & 0xff); - - - logger.Info($"称重发送数量【{string.Join(",", buffer)}】"); - canBusSerial.Write(buffer, 0, 8); + logger.Info($"标定数量【{Convert.ToHexString(buffer)}】"); + canBusSerial.Write(buffer, 0, 8); + } + catch (Exception ex) + { + logger.Info($"操作发生异常:ex:{ex.Message},方法名:SetNumCount;参数:{DrawerNo},{ColNo},{Quantity}"); + } } // 以板子为单位获取抽屉内所有库位的药品数量 @@ -843,7 +861,7 @@ namespace MasaBlazorApp3.Port byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; - logger.Info($"称重发送库位数量查询{ColNoLst[i]}【{Convert.ToHexString(buffer)}】"); + logger.Info($"称重发送库位数量查询{DrawerNo}-{ColNoLst[i]}【{Convert.ToHexString(buffer)}】"); canBusSerial.Write(buffer, 0, 8); byte[] result = await GetBufferByPort(canBusSerial, 8); logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】"); @@ -888,7 +906,7 @@ namespace MasaBlazorApp3.Port byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; - logger.Info($"称重发送库位数量查询{colNo}【{Convert.ToHexString(buffer)}】"); + logger.Info($"称重发送库位数量查询{DrawerNo}-{colNo}【{Convert.ToHexString(buffer)}】"); canBusSerial.Write(buffer, 0, 8); byte[] result = await GetBufferByPort(canBusSerial, 8); byte[] hl = result.Skip(4).Take(2).ToArray(); @@ -922,7 +940,7 @@ namespace MasaBlazorApp3.Port byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; - logger.Info($"称重发送库位数量查询{colNo}【{Convert.ToHexString(buffer)}】"); + logger.Info($"称重发送库位数量查询{DrawerNo}-{colNo}【{Convert.ToHexString(buffer)}】"); canBusSerial.Write(buffer, 0, 8); byte[] result = await GetBufferByPort(canBusSerial, 8); logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】"); @@ -951,7 +969,7 @@ namespace MasaBlazorApp3.Port byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee }; - logger.Info($"称重发送库位数量查询{ColNos[i]}【{Convert.ToHexString(buffer)}】"); + logger.Info($"称重发送库位数量查询{DrawerNo}-{ColNos[i]}【{Convert.ToHexString(buffer)}】"); canBusSerial.Write(buffer, 0, 8); byte[] result = await GetBufferByPort(canBusSerial, 8); logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】"); diff --git a/MasaBlazorApp3/Shared/EmptyLayout.razor b/MasaBlazorApp3/Shared/EmptyLayout.razor index 13157f2..046dd4c 100644 --- a/MasaBlazorApp3/Shared/EmptyLayout.razor +++ b/MasaBlazorApp3/Shared/EmptyLayout.razor @@ -1,6 +1,6 @@ @inherits LayoutComponentBase - -
+ @Body -
- \ No newline at end of file + + + \ No newline at end of file diff --git a/MasaBlazorApp3/Shared/MainLayout.razor b/MasaBlazorApp3/Shared/MainLayout.razor index 2a89746..4e57b7b 100644 --- a/MasaBlazorApp3/Shared/MainLayout.razor +++ b/MasaBlazorApp3/Shared/MainLayout.razor @@ -138,7 +138,7 @@ void backHome() { currentPage = false; - na.NavigateTo("/home"); + na.NavigateTo(""); } void logout() diff --git a/MasaBlazorApp3/appsettings.json b/MasaBlazorApp3/appsettings.json index dc03ca1..e75bc4f 100644 --- a/MasaBlazorApp3/appsettings.json +++ b/MasaBlazorApp3/appsettings.json @@ -8,7 +8,7 @@ "setting": { "machineId": "DM1", "storage": null, - "loginMode": 1, + "loginMode": 2, "opFirst": true, //自动退出登录时间,单位秒(0不自动退出) "autoOutLog": 0 @@ -17,16 +17,16 @@ "drawerPortPath": "COM1", "drawerProtocol": 485, "scanCodePortPath": "COM8", - "canBusPortPath": "COM5", + "canBusPortPath": "COM31", "canBusExsit": true, "doorAddr": 0, "storageBoxAddr": 0 }, "drawer": { "single": [ 3 ], - "weigh": [1], - "box": [], - "label": [] + "weigh": [4], + "box": [4], + "label": [4] } } \ No newline at end of file diff --git a/MasaBlazorApp3/wwwroot/images/community.svg b/MasaBlazorApp3/wwwroot/images/community.svg new file mode 100644 index 0000000..cba3f5e --- /dev/null +++ b/MasaBlazorApp3/wwwroot/images/community.svg @@ -0,0 +1 @@ + \ No newline at end of file