Compare commits
	
		
			2 Commits
		
	
	
		
			1a0aced391
			...
			264a4bd0fc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
								 | 
						264a4bd0fc | 
							 | 
					|
| 
							
							
								
								 | 
						4a25695d53 | 
							 | 
					
| 
						 | 
					@ -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<ChannelStock>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //抽屉信息(抽屉号,抽屉类型)
 | 
				
			||||||
 | 
					        public List<Dictionary<int,int>> DrawerInfo { get; set; }
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					        public List<ChannelStock> ChannelStocks { get; set; } = new List<ChannelStock>();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -29,5 +29,7 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //盘点
 | 
					        //盘点
 | 
				
			||||||
        public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
 | 
					        public Task<bool> DrawerCheckFinish(List<ChannelStock> Stocks);
 | 
				
			||||||
 | 
					        //抽屉获取库存数据--药品绑定
 | 
				
			||||||
 | 
					        Task<ChannelStockWithDrawerCount<ChannelStock>> GetChannelStockByBiaoDing(int DrawerNo, int Quantity=0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,5 +19,7 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
				
			||||||
        bool ResetPassword(int id);
 | 
					        bool ResetPassword(int id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Task<bool> UpdateSign(int id, string sign);
 | 
					        Task<bool> UpdateSign(int id, string sign);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bool UpdateUserPassword(User user);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,11 +98,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                .LoadWith(cs => cs.drugManuNo)
 | 
					                .LoadWith(cs => cs.drugManuNo)
 | 
				
			||||||
                .LoadWith(cs => cs.Drug.Manus)
 | 
					                .LoadWith(cs => cs.Drug.Manus)
 | 
				
			||||||
                .Where(cs => cs.DrawerNo == DrawerNo)
 | 
					                .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.DrawerType == 1)
 | 
				
			||||||
                .Where(cs => cs.MachineId == _setting.machineId);
 | 
					                .Where(cs => cs.MachineId == _setting.machineId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(Quantity > 0)
 | 
					            if (Quantity > 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                query = query.Where(cs => cs.Quantity > 0);
 | 
					                query = query.Where(cs => cs.Quantity > 0);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -178,6 +178,39 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    //var EffDate = !stock.drugManuNo.ManuNo.Equals(stock.ManuNo) ? stock.drugManuNo.EffDate : stock.EffDate;
 | 
					                    //var EffDate = !stock.drugManuNo.ManuNo.Equals(stock.ManuNo) ? stock.drugManuNo.EffDate : stock.EffDate;
 | 
				
			||||||
                    var ManuNo = stock.ManuNo;
 | 
					                    var ManuNo = stock.ManuNo;
 | 
				
			||||||
                    var EffDate = stock.EffDate;
 | 
					                    var EffDate = stock.EffDate;
 | 
				
			||||||
 | 
					                    if (!DateTime.TryParse(stock.EffDate, out DateTime dEffDate))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        //效期转换出错
 | 
				
			||||||
 | 
					                        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()
 | 
					                        int mid = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -189,7 +222,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                            EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(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,
 | 
					                            OperationTime = DateTime.Now,
 | 
				
			||||||
                            Type = type,
 | 
					                            Type = type,
 | 
				
			||||||
                        Quantity = type == 1? stock.AddQuantity : stock.TakeQuantity,
 | 
					                            Quantity = type == 1 ? stock.AddQuantity : stock.TakeQuantity,
 | 
				
			||||||
                            Operator = _globalStateService.Operator.Id,
 | 
					                            Operator = _globalStateService.Operator.Id,
 | 
				
			||||||
                            Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
					                            Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
				
			||||||
                            InvoiceId = InvoiceId
 | 
					                            InvoiceId = InvoiceId
 | 
				
			||||||
| 
						 | 
					@ -198,7 +231,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
 | 
					                    var stockQ = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
 | 
				
			||||||
                        .Set(cs => cs.Quantity, type == 1 ? stock.Quantity + stock.AddQuantity : stock.Quantity - stock.TakeQuantity);
 | 
					                        .Set(cs => cs.Quantity, type == 1 ? stock.Quantity + stock.AddQuantity : stock.Quantity - stock.TakeQuantity);
 | 
				
			||||||
                    // 入库时如果库存为0则有可能会修改批次效期进行保存
 | 
					                    // 入库时如果库存为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);
 | 
					                        stockQ = stockQ.Set(cs => cs.ManuNo, stock.drugManuNo.ManuNo).Set(cs => cs.EffDate, stock.drugManuNo.EffDate.ToString()).Set(cs => cs.Dmnguid, stock.drugManuNo.Id);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -232,7 +265,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    if (mid > 0 && r > 0 && acid > 0)
 | 
					                    if (mid > 0 && r > 0 && acid > 0)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    } else
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        flag = false;
 | 
					                        flag = false;
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
| 
						 | 
					@ -248,7 +282,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return flag;
 | 
					                return flag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            } catch (Exception ex)
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                logger.Error($"抽屉{(type == 1 ? "加药" : "取药")}操作完成保存数据库失败,错误:" + ex.Message);
 | 
					                logger.Error($"抽屉{(type == 1 ? "加药" : "取药")}操作完成保存数据库失败,错误:" + ex.Message);
 | 
				
			||||||
                _connection.RollbackTransaction();
 | 
					                _connection.RollbackTransaction();
 | 
				
			||||||
| 
						 | 
					@ -277,18 +312,19 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var q = _connection.ChannelStock
 | 
					            var q = _connection.ChannelStock
 | 
				
			||||||
                .Where(cs => cs.Id == Stock.Id)
 | 
					                .Where(cs => cs.Id == Stock.Id)
 | 
				
			||||||
                .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id??String.Empty)
 | 
					                .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
 | 
				
			||||||
                .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString() ?? String.Empty)
 | 
					                .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().Substring(0, 10) ?? String.Empty)
 | 
				
			||||||
                .Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? 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);
 | 
					                q = q.Set(cs => cs.DrugId, Stock.Drug?.DrugId);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var r = await q.UpdateAsync();
 | 
					            var r = await q.UpdateAsync();
 | 
				
			||||||
            return r > 0;
 | 
					            return r > 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public async Task<PageMultiData<ChannelStock,DrugInfo>> GetAllChannelListWithDrug(int DrawerType, string drugName, int? take, int? skip)
 | 
					        public async Task<PageMultiData<ChannelStock, DrugInfo>> GetAllChannelListWithDrug(int DrawerType, string drugName, int? take, int? skip)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var query = _connection.ChannelStock.AsQueryable();
 | 
					            var query = _connection.ChannelStock.AsQueryable();
 | 
				
			||||||
| 
						 | 
					@ -319,18 +355,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                .Take((int)take)
 | 
					                .Take((int)take)
 | 
				
			||||||
                .ToListAsync();
 | 
					                .ToListAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var other= _connection.DrugInfo.AsQueryable();
 | 
					            var other = _connection.DrugInfo.AsQueryable();
 | 
				
			||||||
            List<DrugInfo> drugInfos= await other
 | 
					            List<DrugInfo> drugInfos = await other
 | 
				
			||||||
                .LoadWith(di => di.Manus)
 | 
					                .LoadWith(di => di.Manus)
 | 
				
			||||||
                .OrderBy((di) => di.DrugId)
 | 
					                .OrderBy((di) => di.DrugId)
 | 
				
			||||||
                .ToListAsync();
 | 
					                .ToListAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return new PageMultiData<ChannelStock,DrugInfo>()
 | 
					            return new PageMultiData<ChannelStock, DrugInfo>()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                TotalDesserts = pagedData,
 | 
					                TotalDesserts = pagedData,
 | 
				
			||||||
                Desserts = list,
 | 
					                Desserts = list,
 | 
				
			||||||
                Other= drugInfos
 | 
					                Other = drugInfos
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //抽屉加药、取药获取数据
 | 
					        //抽屉加药、取药获取数据
 | 
				
			||||||
| 
						 | 
					@ -349,8 +385,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                query = query.Where(cs => cs.Quantity > 0);
 | 
					                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();
 | 
					            int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == _setting.machineId).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
 | 
				
			||||||
           List<ChannelStock> channelStocks= await query
 | 
					            List<ChannelStock> channelStocks = await query
 | 
				
			||||||
                .OrderBy((cs) => cs.DrawerNo)
 | 
					                .OrderBy((cs) => cs.DrawerNo)
 | 
				
			||||||
                .ThenBy((cs) => cs.ColNo)
 | 
					                .ThenBy((cs) => cs.ColNo)
 | 
				
			||||||
                .ToListAsync();
 | 
					                .ToListAsync();
 | 
				
			||||||
| 
						 | 
					@ -384,7 +420,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(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,
 | 
					                        OperationTime = DateTime.Now,
 | 
				
			||||||
                        Type = 4,
 | 
					                        Type = 4,
 | 
				
			||||||
                        Quantity =stock.CheckQuantity,
 | 
					                        Quantity = stock.CheckQuantity,
 | 
				
			||||||
                        Operator = _globalStateService.Operator.Id,
 | 
					                        Operator = _globalStateService.Operator.Id,
 | 
				
			||||||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
					                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
				
			||||||
                        InvoiceId = InvoiceId
 | 
					                        InvoiceId = InvoiceId
 | 
				
			||||||
| 
						 | 
					@ -452,5 +488,30 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //抽屉获取库存数据--药品绑定
 | 
				
			||||||
 | 
					        public async Task<ChannelStockWithDrawerCount<ChannelStock>> 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<ChannelStock> channelStocks = await query
 | 
				
			||||||
 | 
					                .OrderBy((cs) => cs.DrawerNo)
 | 
				
			||||||
 | 
					                .ThenBy((cs) => cs.ColNo)
 | 
				
			||||||
 | 
					                .ToListAsync();
 | 
				
			||||||
 | 
					            return new ChannelStockWithDrawerCount<ChannelStock>() { DrawerArray = ints, ChannelStocks = channelStocks };
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -298,6 +298,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    for (var j = 0; j < stocks.Count; j++)
 | 
					                    for (var j = 0; j < stocks.Count; j++)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        var ChannelStock = stocks[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()
 | 
					                        int mid = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -327,6 +359,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                             .Where(cs => cs.DrugId.Equals(ChannelStock.DrugId))
 | 
					                             .Where(cs => cs.DrugId.Equals(ChannelStock.DrugId))
 | 
				
			||||||
                             .ToListAsync();
 | 
					                             .ToListAsync();
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
                        // 保存账册
 | 
					                        // 保存账册
 | 
				
			||||||
                        int acid = _connection.InsertWithInt32Identity(new AccountBook()
 | 
					                        int acid = _connection.InsertWithInt32Identity(new AccountBook()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -428,6 +461,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                .Set(cs => cs.EffDate, drugManuNo.EffDate.ToString());
 | 
					                                .Set(cs => cs.EffDate, drugManuNo.EffDate.ToString());
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        int r = q.Update();
 | 
					                        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()
 | 
					                        int mid = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -231,6 +231,39 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                for (var i = 0; i < datas.Count; i++)
 | 
					                for (var i = 0; i < datas.Count; i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var orderTakeVo = datas[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()
 | 
					                    int mid = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -239,7 +272,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        ColNo = orderTakeVo.ChannelStock.ColNo,
 | 
					                        ColNo = orderTakeVo.ChannelStock.ColNo,
 | 
				
			||||||
                        DrugId = orderTakeVo.ChannelStock.DrugId,
 | 
					                        DrugId = orderTakeVo.ChannelStock.DrugId,
 | 
				
			||||||
                        ManuNo = orderTakeVo.ChannelStock.ManuNo,
 | 
					                        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,
 | 
					                        OperationTime = DateTime.Now,
 | 
				
			||||||
                        Type = 2,
 | 
					                        Type = 2,
 | 
				
			||||||
                        Quantity = orderTakeVo.GetQuantity,
 | 
					                        Quantity = orderTakeVo.GetQuantity,
 | 
				
			||||||
| 
						 | 
					@ -266,7 +299,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        MachineId = _setting.machineId,
 | 
					                        MachineId = _setting.machineId,
 | 
				
			||||||
                        DrugId = orderTakeVo.ChannelStock.DrugId,
 | 
					                        DrugId = orderTakeVo.ChannelStock.DrugId,
 | 
				
			||||||
                        ManuNo = orderTakeVo.ChannelStock.ManuNo,
 | 
					                        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,
 | 
					                        OperationTime = DateTime.Now,
 | 
				
			||||||
                        Type = 2,
 | 
					                        Type = 2,
 | 
				
			||||||
                        OutQuantity = orderTakeVo.GetQuantity,
 | 
					                        OutQuantity = orderTakeVo.GetQuantity,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,5 +107,13 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            //}
 | 
					            //}
 | 
				
			||||||
            return (await statement.UpdateAsync()) > 0;
 | 
					            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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,12 +32,11 @@ namespace MasaBlazorApp3.Finger
 | 
				
			||||||
           // ConnectionMain();
 | 
					           // ConnectionMain();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async void ConnectionMain()
 | 
					        public async Task<bool> ConnectionMain()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            await Task.Run(() =>
 | 
					            return await Task<bool>.Run(() =>
 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                try
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                bIsConnected = axCZKEM1.Connect_Net(_options.ip, fingerPort);
 | 
					                bIsConnected = axCZKEM1.Connect_Net(_options.ip, fingerPort);
 | 
				
			||||||
                logger.Info($"连接指纹机,IP:{_options.ip},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
 | 
					                logger.Info($"连接指纹机,IP:{_options.ip},端口:{fingerPort},机器号:{machineNumber},连接结果:{bIsConnected}");
 | 
				
			||||||
                if (bIsConnected)
 | 
					                if (bIsConnected)
 | 
				
			||||||
| 
						 | 
					@ -50,12 +49,10 @@ namespace MasaBlazorApp3.Finger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					                return bIsConnected;
 | 
				
			||||||
                catch
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If your fingerprint(or your card) passes the verification,this event will be triggered
 | 
					        //If your fingerprint(or your card) passes the verification,this event will be triggered
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,8 @@ namespace MasaBlazorApp3
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool isInit { get; set; } = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public event PropertyChangedEventHandler? PropertyChanged;
 | 
					        public event PropertyChangedEventHandler? PropertyChanged;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
 | 
					        //protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@
 | 
				
			||||||
                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
					                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
                    @foreach (int i in DrawerNos)
 | 
					                    @foreach (int i in DrawerNos)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        <RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
					                        <RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0||!setting.Value.weigh.Contains(i))" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,14 @@
 | 
				
			||||||
    AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
					    AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
				
			||||||
        <HeaderTemplate>
 | 
					        <HeaderTemplate>
 | 
				
			||||||
            <RadzenRow JustifyContent="JustifyContent.End">
 | 
					            <RadzenRow JustifyContent="JustifyContent.End">
 | 
				
			||||||
                <RadzenButton IsBusy="@(status>0)" BusyText="抽屉已打开。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="开抽屉" Click="@OpenDrawer" />
 | 
					                @if (status < 3)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    <RadzenButton IsBusy="@(status>0)" BusyText="抽屉已打开。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="开抽屉" Click="@OpenDrawer" />
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                @if (status > 0 && status <= 3)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    <RadzenButton Visible="@CancleIsEnable" Variant="Variant.Flat" Text="取消" Click="@Cancel" Style="width: 120px" />
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            </RadzenRow>
 | 
					            </RadzenRow>
 | 
				
			||||||
        </HeaderTemplate>
 | 
					        </HeaderTemplate>
 | 
				
			||||||
        <Columns>
 | 
					        <Columns>
 | 
				
			||||||
| 
						 | 
					@ -64,52 +71,17 @@
 | 
				
			||||||
            <RadzenDataGridColumn Title="批次" Property="ManuNo">
 | 
					            <RadzenDataGridColumn Title="批次" Property="ManuNo">
 | 
				
			||||||
                <Template Context="channel">
 | 
					                <Template Context="channel">
 | 
				
			||||||
                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
 | 
					                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
 | 
				
			||||||
                    <RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
 | 
					                    <RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate.ToString().Substring(0,10)</RadzenText>
 | 
				
			||||||
                </Template>
 | 
					                </Template>
 | 
				
			||||||
                <EditTemplate Context="channel">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    @if (channel.Quantity == 0 && !String.IsNullOrEmpty(channel.DrugId))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        <RadzenDropDown TValue="DrugManuNo" Name="ManuNo" @bind-Value="channel.drugManuNo" Data="@channel.Drug?.Manus" Style="width:100%; display: block;">
 | 
					 | 
				
			||||||
                            <Template>
 | 
					 | 
				
			||||||
                                <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
					 | 
				
			||||||
                                <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
					 | 
				
			||||||
                            </Template>
 | 
					 | 
				
			||||||
                            <ValueTemplate>
 | 
					 | 
				
			||||||
                                <RadzenStack Orientation="Orientation.Horizontal">
 | 
					 | 
				
			||||||
                                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
					 | 
				
			||||||
                                    <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
					 | 
				
			||||||
                                </RadzenStack>
 | 
					 | 
				
			||||||
                            </ValueTemplate>
 | 
					 | 
				
			||||||
                        </RadzenDropDown>
 | 
					 | 
				
			||||||
                        <RadzenRequiredValidator Text="请选择批次" Component="ManuNo" Popup="true" />
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
 | 
					 | 
				
			||||||
                        <RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                </EditTemplate>
 | 
					 | 
				
			||||||
            </RadzenDataGridColumn>
 | 
					            </RadzenDataGridColumn>
 | 
				
			||||||
            <RadzenDataGridColumn Title="库存" Property="Quantity">
 | 
					            <RadzenDataGridColumn Title="库存" Property="Quantity">
 | 
				
			||||||
                <Template Context="cs">
 | 
					                <Template Context="cs">
 | 
				
			||||||
                    <RadzenButton ButtonStyle="ButtonStyle.Info" Variant="Variant.Flat" Shade="Shade.Lighter" class="m-1" Text="@cs.Quantity.ToString()" />
 | 
					                    <RadzenButton ButtonStyle="ButtonStyle.Info" Variant="Variant.Flat" Shade="Shade.Lighter" class="m-1" Text="@cs.Quantity.ToString()" />
 | 
				
			||||||
                </Template>
 | 
					                </Template>
 | 
				
			||||||
            </RadzenDataGridColumn>
 | 
					            </RadzenDataGridColumn>
 | 
				
			||||||
            <RadzenDataGridColumn MinWidth="100px" Title="加药数量" Property="AddQuantity">
 | 
					            <RadzenGridColumn Title="状态" Property="BiaoDingStatus">
 | 
				
			||||||
                <EditTemplate Context="cs">
 | 
					
 | 
				
			||||||
                    @if (cs.BoardType == 2)
 | 
					            </RadzenGridColumn>
 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        @cs.AddQuantity
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        <RadzenNumeric Min="0" Style="display: block" Name="Quantity" @bind-Value=@cs.AddQuantity />
 | 
					 | 
				
			||||||
                        <RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的添加数量" Component="Quantity" Popup="true" />
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                </EditTemplate>
 | 
					 | 
				
			||||||
            </RadzenDataGridColumn>
 | 
					 | 
				
			||||||
        </Columns>
 | 
					        </Columns>
 | 
				
			||||||
    </RadzenDataGrid>
 | 
					    </RadzenDataGrid>
 | 
				
			||||||
</RadzenStack>
 | 
					</RadzenStack>
 | 
				
			||||||
| 
						 | 
					@ -119,20 +91,22 @@
 | 
				
			||||||
    @inject PortUtil PortUtil;
 | 
					    @inject PortUtil PortUtil;
 | 
				
			||||||
    @inject NotificationService _message
 | 
					    @inject NotificationService _message
 | 
				
			||||||
    @inject IOptions<DrawerConfig> setting;
 | 
					    @inject IOptions<DrawerConfig> setting;
 | 
				
			||||||
 | 
					    @inject DialogService dialogService;
 | 
				
			||||||
    int status = 0;
 | 
					    int status = 0;
 | 
				
			||||||
    int drawerNo = 1;
 | 
					    int drawerNo = 0;
 | 
				
			||||||
    RadzenDataGrid<ChannelStock> grid;
 | 
					    RadzenDataGrid<ChannelStock> grid;
 | 
				
			||||||
    private List<ChannelStock>? channels;
 | 
					    private List<ChannelStock>? channels;
 | 
				
			||||||
    bool isLoading;
 | 
					    bool isLoading;
 | 
				
			||||||
    int count;
 | 
					    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[] BeforeQuantity = new int[9];
 | 
				
			||||||
    int[] AfterQuantity = 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<int> ColNos { get; set; } = new List<int>();
 | 
					    public List<int> ColNos { get; set; } = new List<int>();
 | 
				
			||||||
    int currentCol = 0;
 | 
					    //当前操作的库位数据
 | 
				
			||||||
 | 
					    ChannelStock currentChannelStock;
 | 
				
			||||||
    bool CompleteIsEnable = true;
 | 
					    bool CompleteIsEnable = true;
 | 
				
			||||||
    bool CancleIsEnable = true;
 | 
					    bool CancleIsEnable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,7 +120,7 @@
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        isLoading = true;
 | 
					        isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo);
 | 
					        var result = await channelListDao.GetChannelStockByBiaoDing(drawerNo);
 | 
				
			||||||
        DrawerNos = result.DrawerArray;
 | 
					        DrawerNos = result.DrawerArray;
 | 
				
			||||||
        channels = result.ChannelStocks;
 | 
					        channels = result.ChannelStocks;
 | 
				
			||||||
        count = result.ChannelStocks.Count;
 | 
					        count = result.ChannelStocks.Count;
 | 
				
			||||||
| 
						 | 
					@ -158,7 +132,7 @@
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 1;
 | 
					        this.status = 1;
 | 
				
			||||||
        var promiseUtil = new PromiseUtil<object>();
 | 
					        var promiseUtil = new PromiseUtil<object>();
 | 
				
			||||||
        await promiseUtil.taskAsyncLoop(500, null, async (data, next, stop) =>
 | 
					        await promiseUtil.taskAsyncLoop(300, null, async (data, next, stop) =>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -166,13 +140,11 @@
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    stop();
 | 
					                    stop();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                // 开启抽屉
 | 
					                else
 | 
				
			||||||
                else if (this.status == 1)
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // if(库存》0)
 | 
					                    if (this.status == 1)
 | 
				
			||||||
                    // {}
 | 
					                    {
 | 
				
			||||||
 | 
					                        PortUtil.DrawerNo = this.drawerNo;
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                        var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
 | 
					                        var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					                        if (b)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -181,79 +153,61 @@
 | 
				
			||||||
                            PortUtil.Operate = true;
 | 
					                            PortUtil.Operate = true;
 | 
				
			||||||
                            next();
 | 
					                            next();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                // else
 | 
					                        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))
 | 
					                            _message.Notify(
 | 
				
			||||||
                    {
 | 
					                            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
 | 
				
			||||||
                        //药盒抽屉,开药盒
 | 
					                            );
 | 
				
			||||||
                        for (int i = 0; i < ColNos.Count; i++)
 | 
					                            logger.Info($"抽屉打开失败");
 | 
				
			||||||
                        {
 | 
					                            RestData();
 | 
				
			||||||
                            await PortUtil.OpenBoxByColNo(ColNos[i]);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    // 查询抽屉是否为关闭状态
 | 
					 | 
				
			||||||
                    var b2 = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
					 | 
				
			||||||
                    // 关闭则改变状态并终止循环
 | 
					 | 
				
			||||||
                    if (b2)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        PortUtil.SpeakAsync($"加药完成,请,核对,或,录入,正确的,添加数量");
 | 
					 | 
				
			||||||
                        // 判断是否为称重抽屉
 | 
					 | 
				
			||||||
                        if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            //关闭抽屉后获取称重稳定数量
 | 
					 | 
				
			||||||
                            // await GetWeightQuantity();
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        this.status = 3;
 | 
					 | 
				
			||||||
                            PortUtil.Operate = false;
 | 
					                            PortUtil.Operate = false;
 | 
				
			||||||
                            stop();
 | 
					                            stop();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    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);
 | 
					                            if (this.status == 2)
 | 
				
			||||||
                            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 (currentChannelStock != null && currentChannelStock.BoardType.ToString().Contains("3"))
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    //打开药盒
 | 
				
			||||||
 | 
					                                    await PortUtil.OpenBoxByColNo(currentChannelStock.ColNo);
 | 
				
			||||||
 | 
					                                    this.status = 3;
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                        // 判断是否为称重抽屉
 | 
					 | 
				
			||||||
                        if (setting.Value.weigh != null && setting.Value.weigh.Contains(this.drawerNo))
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            //开抽屉后查数
 | 
					 | 
				
			||||||
                            for (int i = 0; i < 9; i++)
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                int afterQuantity = await PortUtil.CheckQuantityForSingle(i);
 | 
					 | 
				
			||||||
                                AfterQuantity[i] = afterQuantity;
 | 
					 | 
				
			||||||
                                logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
 | 
					 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            channels.ForEach(cl =>
 | 
					                            if (this.status == 3)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                              cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
 | 
					                                this.status = 4;
 | 
				
			||||||
                          });
 | 
					                                //弹出标定对话框
 | 
				
			||||||
 | 
					                                var dialog = await dialogService.OpenAsync<BiaoDingDialog>(
 | 
				
			||||||
 | 
					                                          $"标定",
 | 
				
			||||||
 | 
					                                        new Dictionary<string, object>() { { "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)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                logger.Info($"抽屉加药发生错误,{e.Message}");
 | 
					                logger.Info($"标定药品发生错误,{e.Message}");
 | 
				
			||||||
                _message.Notify(
 | 
					                _message.Notify(
 | 
				
			||||||
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
					                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
| 
						 | 
					@ -270,19 +224,28 @@
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        this.status = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    void Cancel()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.status = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
 | 
					    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (args.Data.BoardType.ToString().Contains("3"))
 | 
					        if (this.status == 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //是药盒抽屉则点击行,打开对应行的药箱
 | 
					            PortUtil.SpeakAsync("请先打开抽屉后再点开药盒");
 | 
				
			||||||
            if (!ColNos.Contains(args.Data.ColNo))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ColNos.Add(args.Data.ColNo);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            grid.EditRow(args.Data);
 | 
					            currentChannelStock = args.Data;
 | 
				
			||||||
 | 
					            if (args.Data.BoardType.ToString().Contains("3"))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                PortUtil.SpeakAsync("正在打开药盒");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // else
 | 
				
			||||||
 | 
					            // {
 | 
				
			||||||
 | 
					            //     grid.EditRow(args.Data);
 | 
				
			||||||
 | 
					            // }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,188 @@
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Util
 | 
				
			||||||
 | 
					@using log4net
 | 
				
			||||||
 | 
					<RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @* <RadzenTemplateForm Submit="@((int BDQuantity) => { ConfirmOK(BDQuantity); })" Style="width:100%;height:100%"> *@
 | 
				
			||||||
 | 
					        <div class="rz-form-row">
 | 
				
			||||||
 | 
					            <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                <!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
 | 
				
			||||||
 | 
					                @if (channelStockInfo.Quantity>0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    <RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">库位库存不为零,请取出药品后点击【清空】按钮,清空完成后输入标定数量并放入对应数量药品并根据下一步提示操作</RadzenText>
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    <RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">正在清零,清零完成后输入标定数量并放入对应数量药品后点击【标定】按钮</RadzenText>
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                <RadzenTextBox id="BDQuantity" Name="BDQuantity" Value="10" Style="width:100%" />
 | 
				
			||||||
 | 
					                <RadzenRequiredValidator Component="BDQuantity" Text="请填写标定数量" />
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    @* </RadzenTemplateForm> *@
 | 
				
			||||||
 | 
					    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <RadzenButton Click="@Clear" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Disabled="@(channelStockInfo.Quantity<=0)" Text="清空" Style="width: 120px" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <RadzenButton Click="ConfirmOK" ButtonStyle="ButtonStyle.Success" IsBusy="@(status==2)" BusyText="正在标定。。。" Variant="Variant.Flat" Text="标定" Disabled=@(this.status<=0||this.status==2) Style="width: 120px" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <RadzenButton Click="@CancelClick" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </RadzenStack>
 | 
				
			||||||
 | 
					</RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code {
 | 
				
			||||||
 | 
					    @inject Radzen.DialogService dialogService;
 | 
				
			||||||
 | 
					    @inject NotificationService _message
 | 
				
			||||||
 | 
					    @inject PortUtil PortUtil;
 | 
				
			||||||
 | 
					    [Parameter] public ChannelStock channelStockInfo { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PromiseUtil<object> promiseUtil = new PromiseUtil<object>();
 | 
				
			||||||
 | 
					    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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<RadzenStack>
 | 
					<RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">确认要@(confirmInfo) 吗?</RadzenText>
 | 
					    <RadzenText TextStyle="TextStyle.Body1" Style="color: var(--rz-text-tertiary-color); align-content:center; text-align:center; font-size:medium;">@(confirmInfo)</RadzenText>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
					    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
				
			||||||
        <RadzenButton Click="@ConfirmOK" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="确认" Style="width: 120px" />
 | 
					        <RadzenButton Click="@ConfirmOK" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="确认" Style="width: 120px" />
 | 
				
			||||||
| 
						 | 
					@ -11,8 +11,9 @@
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
<RadzenStack Orientation="Orientation.Horizontal">
 | 
					<RadzenStack Orientation="Orientation.Horizontal">
 | 
				
			||||||
    <div class="row  justify-content-center">
 | 
					    <div class="row  justify-content-center">
 | 
				
			||||||
        <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
					        @if (DrawerNos.Count() > 8)
 | 
				
			||||||
            @* <RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px"> *@
 | 
					        {
 | 
				
			||||||
 | 
					            <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box-16.jpg')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
				
			||||||
                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
					                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
                    @foreach (int i in DrawerNos)
 | 
					                    @foreach (int i in DrawerNos)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -20,8 +21,20 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            @* </RadzenStack> *@
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
				
			||||||
 | 
					                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
 | 
					                    @foreach (int i in DrawerNos)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        <RadzenButton class="col-12" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <RadzenDataGrid @ref="grid"
 | 
					    <RadzenDataGrid @ref="grid"
 | 
				
			||||||
    LoadData="@LoadData"
 | 
					    LoadData="@LoadData"
 | 
				
			||||||
| 
						 | 
					@ -36,11 +49,11 @@
 | 
				
			||||||
            <RadzenRow JustifyContent="JustifyContent.End">
 | 
					            <RadzenRow JustifyContent="JustifyContent.End">
 | 
				
			||||||
                @if (status < 3)
 | 
					                @if (status < 3)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    <RadzenButton IsBusy="@(status>0)" BusyText="加药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="加药" Click="@OpenDrawer" />
 | 
					                    <RadzenButton IsBusy="@(status>0)" BusyText="加药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="加药" Click="@OpenDrawer" />
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                @if (status == 3)
 | 
					                @if (status == 3)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    <RadzenButton Visible="@CompleteIsEnable" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Outlined" Shade="Shade.Light" Text="完成" Click="@AddFinish" />
 | 
					                    <RadzenButton Visible="@CompleteIsEnable" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Shade="Shade.Light" Text="完成" Click="@AddFinish" />
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                @if (status > 0 && status <= 3)
 | 
					                @if (status > 0 && status <= 3)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -59,7 +72,19 @@
 | 
				
			||||||
            <RadzenDataGridColumn Title="批次" Property="ManuNo">
 | 
					            <RadzenDataGridColumn Title="批次" Property="ManuNo">
 | 
				
			||||||
                <Template Context="channel">
 | 
					                <Template Context="channel">
 | 
				
			||||||
                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
 | 
					                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@channel.drugManuNo?.ManuNo</RadzenText>
 | 
				
			||||||
                    <RadzenText TextStyle="TextStyle.Caption">@channel.drugManuNo?.EffDate</RadzenText>
 | 
					
 | 
				
			||||||
 | 
					                    @if (channel.drugManuNo != null && channel.drugManuNo.EffDate.ToString().Length > 10)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        <RadzenText TextStyle="TextStyle.Caption">
 | 
				
			||||||
 | 
					                            @channel.drugManuNo.EffDate.ToString().Substring(0, 10)
 | 
				
			||||||
 | 
					                        </RadzenText>
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        <RadzenText TextStyle="TextStyle.Caption">
 | 
				
			||||||
 | 
					                            @channel.drugManuNo?.EffDate
 | 
				
			||||||
 | 
					                        </RadzenText>
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                </Template>
 | 
					                </Template>
 | 
				
			||||||
                <EditTemplate Context="channel">
 | 
					                <EditTemplate Context="channel">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,12 +93,30 @@
 | 
				
			||||||
                        <RadzenDropDown TValue="DrugManuNo" Name="ManuNo" @bind-Value="channel.drugManuNo" Data="@channel.Drug?.Manus" Style="width:100%; display: block;">
 | 
					                        <RadzenDropDown TValue="DrugManuNo" Name="ManuNo" @bind-Value="channel.drugManuNo" Data="@channel.Drug?.Manus" Style="width:100%; display: block;">
 | 
				
			||||||
                            <Template>
 | 
					                            <Template>
 | 
				
			||||||
                                <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
					                                <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
				
			||||||
 | 
					                                @if ((context as DrugManuNo).EffDate != null && (context as DrugManuNo).EffDate.ToString().Length > 10)
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                    <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo).EffDate.ToString().Substring(0, 10))</RadzenText>
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                else
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
					                                    <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                            </Template>
 | 
					                            </Template>
 | 
				
			||||||
                            <ValueTemplate>
 | 
					                            <ValueTemplate>
 | 
				
			||||||
                                <RadzenStack Orientation="Orientation.Horizontal">
 | 
					                                <RadzenStack Orientation="Orientation.Horizontal">
 | 
				
			||||||
                                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
					                                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@((context as DrugManuNo)?.ManuNo)</RadzenText>
 | 
				
			||||||
 | 
					                                    @if ((context as DrugManuNo).EffDate != null && (context as DrugManuNo).EffDate.ToString().Length > 10)
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                        <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo).EffDate.ToString().Substring(0, 10))</RadzenText>
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                    else
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                        <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
					                                        <RadzenText TextStyle="TextStyle.Caption">@((context as DrugManuNo)?.EffDate)</RadzenText>
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
                                </RadzenStack>
 | 
					                                </RadzenStack>
 | 
				
			||||||
                            </ValueTemplate>
 | 
					                            </ValueTemplate>
 | 
				
			||||||
                        </RadzenDropDown>
 | 
					                        </RadzenDropDown>
 | 
				
			||||||
| 
						 | 
					@ -94,7 +137,7 @@
 | 
				
			||||||
            </RadzenDataGridColumn>
 | 
					            </RadzenDataGridColumn>
 | 
				
			||||||
            <RadzenDataGridColumn MinWidth="100px" Title="加药数量" Property="AddQuantity">
 | 
					            <RadzenDataGridColumn MinWidth="100px" Title="加药数量" Property="AddQuantity">
 | 
				
			||||||
                <EditTemplate Context="cs">
 | 
					                <EditTemplate Context="cs">
 | 
				
			||||||
                    @if (cs.BoardType == 2)
 | 
					                    @if (cs.BoardType.ToString().Contains("2") || cs.BoardType.ToString().Contains("3"))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        @cs.AddQuantity
 | 
					                        @cs.AddQuantity
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -130,7 +173,7 @@
 | 
				
			||||||
    public List<int> ColNos { get; set; } = new List<int>();
 | 
					    public List<int> ColNos { get; set; } = new List<int>();
 | 
				
			||||||
    int currentCol = 0;
 | 
					    int currentCol = 0;
 | 
				
			||||||
    bool CompleteIsEnable = true;
 | 
					    bool CompleteIsEnable = true;
 | 
				
			||||||
    bool CancleIsEnable=true;
 | 
					    bool CancleIsEnable = true;
 | 
				
			||||||
    async Task LoadData(LoadDataArgs args)
 | 
					    async Task LoadData(LoadDataArgs args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        isLoading = true;
 | 
					        isLoading = true;
 | 
				
			||||||
| 
						 | 
					@ -148,6 +191,7 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    async Task OpenDrawer()
 | 
					    async Task OpenDrawer()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        PortUtil.DrawerNo = this.drawerNo;
 | 
				
			||||||
        this.status = 1;
 | 
					        this.status = 1;
 | 
				
			||||||
        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
					        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
				
			||||||
        var promiseUtil = new PromiseUtil<object>();
 | 
					        var promiseUtil = new PromiseUtil<object>();
 | 
				
			||||||
| 
						 | 
					@ -170,16 +214,16 @@
 | 
				
			||||||
                        logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
					                        logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    // 判断是否为称重抽屉
 | 
					                    // 判断是否为称重抽屉
 | 
				
			||||||
                    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 < 9; i++)
 | 
				
			||||||
                        {
 | 
					                    //     {
 | 
				
			||||||
                            int beforeQuantity = await PortUtil.CheckQuantityForSingle(i);
 | 
					                    //         int beforeQuantity = await PortUtil.CheckQuantityForSingle(i + 1);
 | 
				
			||||||
                            BeforeQuantity[i] = beforeQuantity;
 | 
					                    //         BeforeQuantity[i] = beforeQuantity;
 | 
				
			||||||
                            logger.Info($"BeforeQuantity:{i}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
 | 
					                    //         logger.Info($"BeforeQuantity:{i++}-{beforeQuantity}数量{string.Join(",", BeforeQuantity)}");
 | 
				
			||||||
                        }
 | 
					                    //     }
 | 
				
			||||||
                    }
 | 
					                    // }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
 | 
					                    var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
 | 
				
			||||||
                    if (b)
 | 
					                    if (b)
 | 
				
			||||||
| 
						 | 
					@ -204,14 +248,6 @@
 | 
				
			||||||
                // 检测状态
 | 
					                // 检测状态
 | 
				
			||||||
                else if (this.status == 2)
 | 
					                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);
 | 
					                    var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
				
			||||||
                    // 关闭则改变状态并终止循环
 | 
					                    // 关闭则改变状态并终止循环
 | 
				
			||||||
| 
						 | 
					@ -230,6 +266,29 @@
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    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))
 | 
					                        if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
 | 
					                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
 | 
				
			||||||
| 
						 | 
					@ -245,16 +304,17 @@
 | 
				
			||||||
                        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);
 | 
					                                int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]);
 | 
				
			||||||
                                AfterQuantity[i] = afterQuantity;
 | 
					                                AfterQuantity[ColNos[i]-1] = afterQuantity;
 | 
				
			||||||
                                logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
 | 
					                                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];
 | 
					                                  cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
 | 
				
			||||||
                              });
 | 
					                              });
 | 
				
			||||||
 | 
					                            await InvokeAsync(StateHasChanged);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        next(); // continue iteration
 | 
					                        next(); // continue iteration
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -282,6 +342,8 @@
 | 
				
			||||||
        this.status = 0;
 | 
					        this.status = 0;
 | 
				
			||||||
        this.BeforeQuantity = new int[9];
 | 
					        this.BeforeQuantity = new int[9];
 | 
				
			||||||
        this.AfterQuantity = new int[9];
 | 
					        this.AfterQuantity = new int[9];
 | 
				
			||||||
 | 
					        currentCol = 0;
 | 
				
			||||||
 | 
					        ColNos.Clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    //关闭抽屉后获取称重稳定数量
 | 
					    //关闭抽屉后获取称重稳定数量
 | 
				
			||||||
    public async Task GetWeightQuantity()
 | 
					    public async Task GetWeightQuantity()
 | 
				
			||||||
| 
						 | 
					@ -311,6 +373,10 @@
 | 
				
			||||||
                                 {
 | 
					                                 {
 | 
				
			||||||
                                     cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
 | 
					                                     cl.AddQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
 | 
				
			||||||
                                 });
 | 
					                                 });
 | 
				
			||||||
 | 
					                                CompleteIsEnable = true;
 | 
				
			||||||
 | 
					                                CancleIsEnable = true;
 | 
				
			||||||
 | 
					                                logger.Info("对比成功停止循环");
 | 
				
			||||||
 | 
					                                await InvokeAsync(StateHasChanged);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
| 
						 | 
					@ -330,6 +396,7 @@
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            CompleteIsEnable = false;
 | 
					                            CompleteIsEnable = false;
 | 
				
			||||||
                            PortUtil.DrawerNo = drawerNo;
 | 
					                            PortUtil.DrawerNo = drawerNo;
 | 
				
			||||||
 | 
					                            PortUtil.ColNoLst = ColNos;
 | 
				
			||||||
                            int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
 | 
					                            int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
 | 
				
			||||||
                            AfterQuantity = quantity;
 | 
					                            AfterQuantity = quantity;
 | 
				
			||||||
                            int[] Quantitys = new int[BeforeQuantity.Length];
 | 
					                            int[] Quantitys = new int[BeforeQuantity.Length];
 | 
				
			||||||
| 
						 | 
					@ -377,14 +444,15 @@
 | 
				
			||||||
            else
 | 
					            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);
 | 
					                        await PortUtil.WriteQuantityMethod(it.Quantity + it.AddQuantity, it.DrawerNo, it.ColNo);
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                ColNos.Clear();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -396,7 +464,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Cancel()
 | 
					    void Cancel()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        RestData();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void SelectDrawer(int drawerNo)
 | 
					    void SelectDrawer(int drawerNo)
 | 
				
			||||||
| 
						 | 
					@ -407,19 +475,21 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
 | 
					    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> 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)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //是药盒抽屉则点击行,打开对应行的药箱
 | 
					            PortUtil.SpeakAsync("请先点取药按钮打开抽屉");
 | 
				
			||||||
            if (!ColNos.Contains(args.Data.ColNo))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ColNos.Add(args.Data.ColNo);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        }
 | 
					        currentCol = args.Data.ColNo;
 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
        grid.EditRow(args.Data);
 | 
					        grid.EditRow(args.Data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private IDisposable? registration;
 | 
					    private IDisposable? registration;
 | 
				
			||||||
    protected override void OnAfterRender(bool firstRender)
 | 
					    protected override void OnAfterRender(bool firstRender)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,19 +10,10 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
<RadzenStack Orientation="Orientation.Horizontal">
 | 
					<RadzenStack Orientation="Orientation.Horizontal">
 | 
				
			||||||
    @* <div class="row  justify-content-center align-items-center">
 | 
					 | 
				
			||||||
        <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png')  no-repeat; background-size: 100% 100%; width: 240px; height:650px">
 | 
					 | 
				
			||||||
            <RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px">
 | 
					 | 
				
			||||||
                @foreach (int i in DrawerNos)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    <RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            </RadzenStack>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </div> *@
 | 
					 | 
				
			||||||
    <div class="row  justify-content-center">
 | 
					    <div class="row  justify-content-center">
 | 
				
			||||||
        <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
					        @if (DrawerNos.Count() > 8)
 | 
				
			||||||
            @* <RadzenStack AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Orientation="Orientation.Vertical" Style="margin-top: 220px"> *@
 | 
					        {
 | 
				
			||||||
 | 
					            <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box-16.jpg')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
				
			||||||
                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
					                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
                    @foreach (int i in DrawerNos)
 | 
					                    @foreach (int i in DrawerNos)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -30,8 +21,20 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            @* </RadzenStack> *@
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            <div class="col-12 row justify-content-center align-items-center text-center" style="background: url('/images/box.png')  no-repeat; background-size: 100% 100%; width: 380px; height:650px">
 | 
				
			||||||
 | 
					                <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
 | 
					                    @foreach (int i in DrawerNos)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        <RadzenButton class="col-12" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <RadzenDataGrid @ref="grid"
 | 
					    <RadzenDataGrid @ref="grid"
 | 
				
			||||||
                    LoadData="@LoadData"
 | 
					                    LoadData="@LoadData"
 | 
				
			||||||
| 
						 | 
					@ -79,7 +82,7 @@
 | 
				
			||||||
            </RadzenDataGridColumn>
 | 
					            </RadzenDataGridColumn>
 | 
				
			||||||
            <RadzenDataGridColumn MinWidth="120px" Title="取药数量" Property="TakeQuantity">
 | 
					            <RadzenDataGridColumn MinWidth="120px" Title="取药数量" Property="TakeQuantity">
 | 
				
			||||||
                <EditTemplate Context="channel">
 | 
					                <EditTemplate Context="channel">
 | 
				
			||||||
                    @if (channel.BoardType == 2)
 | 
					                    @if (channel.BoardType.ToString().Contains("2") || channel.BoardType.ToString().Contains("3"))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        @channel.TakeQuantity
 | 
					                        @channel.TakeQuantity
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -112,6 +115,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 当前操作的库位号列表
 | 
					    // 当前操作的库位号列表
 | 
				
			||||||
    public List<int> ColNos { get; set; } = new List<int>();
 | 
					    public List<int> ColNos { get; set; } = new List<int>();
 | 
				
			||||||
 | 
					    int currentCol = 0;
 | 
				
			||||||
    bool CompleteIsEnable = true;
 | 
					    bool CompleteIsEnable = true;
 | 
				
			||||||
    bool CancleIsEnable = true;
 | 
					    bool CancleIsEnable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,7 +126,7 @@
 | 
				
			||||||
        isLoading = true;
 | 
					        isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // var result = await channelListDao.GetChannelStockByDrawerNo(drawerNo, 1);
 | 
					        // var result = await channelListDao.GetChannelStockByDrawerNo(drawerNo, 1);
 | 
				
			||||||
        var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo);
 | 
					        var result = await channelListDao.GetChannelStockByDrawerNoWithDrawers(drawerNo, 1);
 | 
				
			||||||
        DrawerNos = result.DrawerArray;
 | 
					        DrawerNos = result.DrawerArray;
 | 
				
			||||||
        // Update the Data property
 | 
					        // Update the Data property
 | 
				
			||||||
        channels = result.ChannelStocks;
 | 
					        channels = result.ChannelStocks;
 | 
				
			||||||
| 
						 | 
					@ -134,6 +138,7 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    async Task OpenDrawer()
 | 
					    async Task OpenDrawer()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        PortUtil.DrawerNo = this.drawerNo;
 | 
				
			||||||
        this.status = 1;
 | 
					        this.status = 1;
 | 
				
			||||||
        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
					        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
				
			||||||
        var promiseUtil = new PromiseUtil<object>();
 | 
					        var promiseUtil = new PromiseUtil<object>();
 | 
				
			||||||
| 
						 | 
					@ -155,17 +160,6 @@
 | 
				
			||||||
                        BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					                        BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                        logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
					                        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);
 | 
					                    var b = await PortUtil.OpenDrawerStatus(this.drawerNo);
 | 
				
			||||||
                    if (b)
 | 
					                    if (b)
 | 
				
			||||||
| 
						 | 
					@ -189,15 +183,6 @@
 | 
				
			||||||
                // 检测状态
 | 
					                // 检测状态
 | 
				
			||||||
                else if (this.status == 2)
 | 
					                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);
 | 
					                    var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
				
			||||||
                    // 关闭则改变状态并终止循环
 | 
					                    // 关闭则改变状态并终止循环
 | 
				
			||||||
| 
						 | 
					@ -217,32 +202,63 @@
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    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))
 | 
					                        if (setting.Value.single != null && setting.Value.single.Contains(this.drawerNo))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
 | 
					                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(this.drawerNo);
 | 
				
			||||||
                            AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					                            AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                            logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
 | 
					                            logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if (!BeforeQuantity.SequenceEqual(AfterQuantity))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
                                channels.ForEach(cl =>
 | 
					                                channels.ForEach(cl =>
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
					                                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);
 | 
					                                int afterQuantity = await PortUtil.CheckQuantityForSingle(ColNos[i]);
 | 
				
			||||||
                                AfterQuantity[i] = afterQuantity;
 | 
					                                AfterQuantity[ColNos[i]-1] = afterQuantity;
 | 
				
			||||||
                                logger.Info($"AfterQuantity:{i}-{AfterQuantity}数量{string.Join(",", BeforeQuantity)}");
 | 
					                                logger.Info($"AfterQuantity:{ColNos[i]}-{afterQuantity}数量{string.Join(",", AfterQuantity)}");
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            channels.ForEach(cl =>
 | 
					                            if (!BeforeQuantity.SequenceEqual(AfterQuantity))
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                  cl.TakeQuantity = this.AfterQuantity[cl.ColNo - 1] - this.BeforeQuantity[cl.ColNo - 1];
 | 
					                                channels.Where(cl => ColNos.Contains(cl.ColNo)).ToList().ForEach(cl =>
 | 
				
			||||||
 | 
					                              {
 | 
				
			||||||
 | 
					                                  cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
				
			||||||
                              });
 | 
					                              });
 | 
				
			||||||
 | 
					                                await InvokeAsync(StateHasChanged);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        next(); // continue iteration
 | 
					                        next(); // continue iteration
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -300,6 +316,7 @@
 | 
				
			||||||
                                 {
 | 
					                                 {
 | 
				
			||||||
                                     cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
					                                     cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
				
			||||||
                                 });
 | 
					                                 });
 | 
				
			||||||
 | 
					                                await InvokeAsync(StateHasChanged);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
| 
						 | 
					@ -320,6 +337,7 @@
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            CompleteIsEnable = false;
 | 
					                            CompleteIsEnable = false;
 | 
				
			||||||
                            PortUtil.DrawerNo = drawerNo;
 | 
					                            PortUtil.DrawerNo = drawerNo;
 | 
				
			||||||
 | 
					                            PortUtil.ColNoLst = ColNos;
 | 
				
			||||||
                            int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
 | 
					                            int[] quantity = await PortUtil.CheckQuantityByAddrForMulti();
 | 
				
			||||||
                            AfterQuantity = quantity;
 | 
					                            AfterQuantity = quantity;
 | 
				
			||||||
                            int[] Quantitys = new int[BeforeQuantity.Length];
 | 
					                            int[] Quantitys = new int[BeforeQuantity.Length];
 | 
				
			||||||
| 
						 | 
					@ -329,10 +347,14 @@
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            finallyQuantity.Add(Quantitys);
 | 
					                            finallyQuantity.Add(Quantitys);
 | 
				
			||||||
                            logger.Info($"Quantity{string.Join(",", Quantitys)}");
 | 
					                            logger.Info($"Quantity{string.Join(",", Quantitys)}");
 | 
				
			||||||
 | 
					                            if (!BeforeQuantity.SequenceEqual(AfterQuantity))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
                                channels.ForEach(cl =>
 | 
					                                channels.ForEach(cl =>
 | 
				
			||||||
                                 {
 | 
					                                 {
 | 
				
			||||||
                                     cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
					                                     cl.TakeQuantity = this.BeforeQuantity[cl.ColNo - 1] - this.AfterQuantity[cl.ColNo - 1];
 | 
				
			||||||
                                 });
 | 
					                                 });
 | 
				
			||||||
 | 
					                                await InvokeAsync(StateHasChanged);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                            next();
 | 
					                            next();
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -357,8 +379,10 @@
 | 
				
			||||||
        this.status = 0;
 | 
					        this.status = 0;
 | 
				
			||||||
        this.BeforeQuantity = new int[9];
 | 
					        this.BeforeQuantity = new int[9];
 | 
				
			||||||
        this.AfterQuantity = new int[9];
 | 
					        this.AfterQuantity = new int[9];
 | 
				
			||||||
 | 
					        ColNos.Clear();
 | 
				
			||||||
 | 
					        currentCol = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        InvokeAsync(StateHasChanged);
 | 
					        // InvokeAsync(StateHasChanged);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task TakeFinish()
 | 
					    async Task TakeFinish()
 | 
				
			||||||
| 
						 | 
					@ -376,12 +400,12 @@
 | 
				
			||||||
            else
 | 
					            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,31 +418,36 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Cancel()
 | 
					    void Cancel()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        RestData();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void SelectDrawer(int drawerNo)
 | 
					    void SelectDrawer(int drawerNo)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.drawerNo = drawerNo;
 | 
					        this.drawerNo = drawerNo;
 | 
				
			||||||
        InvokeAsync(StateHasChanged);
 | 
					 | 
				
			||||||
        grid.Reload();
 | 
					        grid.Reload();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
 | 
					    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> 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)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //是药盒抽屉则点击行,打开对应行的药箱
 | 
					            PortUtil.SpeakAsync("请先点取药按钮打开抽屉");
 | 
				
			||||||
            if (!ColNos.Contains(args.Data.ColNo))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ColNos.Add(args.Data.ColNo);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        }
 | 
					        currentCol = args.Data.ColNo;
 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
        grid.EditRow(args.Data);
 | 
					        grid.EditRow(args.Data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private IDisposable? registration;
 | 
					    private IDisposable? registration;
 | 
				
			||||||
    protected override void OnAfterRender(bool firstRender)
 | 
					    protected override void OnAfterRender(bool firstRender)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -248,9 +248,9 @@
 | 
				
			||||||
        if(!string.IsNullOrEmpty(drugInfo.DrugId))
 | 
					        if(!string.IsNullOrEmpty(drugInfo.DrugId))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //弹出确认提示框
 | 
					            //弹出确认提示框
 | 
				
			||||||
            var b = await dialogService.OpenAsync<ConfirmDialo>(
 | 
					            var b = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
               $"删除确认",
 | 
					               $"删除确认",
 | 
				
			||||||
             new Dictionary<string, object>() { { "confirmInfo", "删除药品:"+drugInfo.DrugName } },
 | 
					             new Dictionary<string, object>() { { "confirmInfo", "确认要删除药品:"+drugInfo.DrugName+"吗?" } },
 | 
				
			||||||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
             if(b)
 | 
					             if(b)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -301,9 +301,9 @@
 | 
				
			||||||
        if (SelectedDrugs.FirstOrDefault().Manus.Contains(drugManuNo))
 | 
					        if (SelectedDrugs.FirstOrDefault().Manus.Contains(drugManuNo))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //弹出确认提示框
 | 
					            //弹出确认提示框
 | 
				
			||||||
             var b = await dialogService.OpenAsync<ConfirmDialo>(
 | 
					             var b = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
                $"确认删除",
 | 
					                $"确认删除",
 | 
				
			||||||
              new Dictionary<string, object>() { { "confirmInfo", "删除批次:"+drugManuNo.ManuNo } },
 | 
					              new Dictionary<string, object>() { { "confirmInfo", "确认要删除批次:"+drugManuNo.ManuNo+"吗?" } },
 | 
				
			||||||
              new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
					              new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
            if(b)
 | 
					            if(b)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,130 @@
 | 
				
			||||||
 | 
					@page "/EditPasswordDialog"
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Pojo.Config;
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Pojo.Vo;
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Util;
 | 
				
			||||||
 | 
					@using Microsoft.Extensions.Options;
 | 
				
			||||||
 | 
					@using Newtonsoft.Json;
 | 
				
			||||||
 | 
					@using log4net;
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					    .rz-dialog-content {
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
 | 
				
			||||||
 | 
					    <RadzenColumn Size="12" SizeMD="5">
 | 
				
			||||||
 | 
					        <RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
 | 
				
			||||||
 | 
					            @if (userI == 1)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">操作人 @globalStateService.Operator?.NickName 正在修改密码</RadzenText>
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (userI == 2)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">复核人 @globalStateService.Reviewer?.NickName 正在修改密码</RadzenText>
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        </RadzenCard>
 | 
				
			||||||
 | 
					    </RadzenColumn>
 | 
				
			||||||
 | 
					    <RadzenColumn Size="12" SizeMD="7">
 | 
				
			||||||
 | 
					        <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
 | 
				
			||||||
 | 
					            @*  <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
 | 
				
			||||||
 | 
					                密码修改
 | 
				
			||||||
 | 
					            </RadzenText> *@
 | 
				
			||||||
 | 
					            <RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label" for="oldPassword">原密码</label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                        <RadzenPassword id="oldPassword" Name="oldPassword" @bind-Value="@loginModel.OldPassword" Style="width:100%" />
 | 
				
			||||||
 | 
					                        <RadzenRequiredValidator Component="oldPassword" Text="请填写原密码" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label" for="password">新密码</label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                        <RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
 | 
				
			||||||
 | 
					                        <RadzenRequiredValidator Component="Password" Text="请填新密码" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label"></label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper rz-login-buttons">
 | 
				
			||||||
 | 
					                        <RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="确定" />
 | 
				
			||||||
 | 
					                        <RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </RadzenTemplateForm>
 | 
				
			||||||
 | 
					        </RadzenCard>
 | 
				
			||||||
 | 
					    </RadzenColumn>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</RadzenRow>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@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))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                u.Password = loginModel.Password;
 | 
				
			||||||
 | 
					                bool iRet=userDao.UpdateUserPassword(u);
 | 
				
			||||||
 | 
					                if (iRet)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, 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 Exit()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        dialogService.Close(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,10 @@
 | 
				
			||||||
@page "/home"
 | 
					@page "/"
 | 
				
			||||||
@using MasaBlazorApp3.Util
 | 
					@using MasaBlazorApp3.Util
 | 
				
			||||||
@using log4net
 | 
					@using log4net
 | 
				
			||||||
@layout EmptyLayout
 | 
					@layout EmptyLayout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
    .home-menu{
 | 
					    .home-menu {
 | 
				
			||||||
        transition: box-shadow 0.3s ease; /* 平滑过渡阴影效果 */
 | 
					        transition: box-shadow 0.3s ease; /* 平滑过渡阴影效果 */
 | 
				
			||||||
        cursor: pointer;
 | 
					        cursor: pointer;
 | 
				
			||||||
        position: relative;
 | 
					        position: relative;
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
        box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
 | 
					        box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .home-menu>h2{
 | 
					        .home-menu > h2 {
 | 
				
			||||||
            font-weight: bold;
 | 
					            font-weight: bold;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,11 +46,16 @@
 | 
				
			||||||
        <RadzenColumn Size="8">
 | 
					        <RadzenColumn Size="8">
 | 
				
			||||||
            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
					            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
				
			||||||
                <RadzenColumn Size="3">
 | 
					                <RadzenColumn Size="3">
 | 
				
			||||||
 | 
					                    @if (globalStateService.Operator != null)
 | 
				
			||||||
                    <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@Operator.NickName</RadzenText>
 | 
					 | 
				
			||||||
                    @if (Reviewer != null)
 | 
					 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@Reviewer.NickName</RadzenText>
 | 
					                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
				
			||||||
 | 
					                        <RadzenText onclick="@(()=>{EditPassword(1);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    @if (globalStateService.Reviewer != null)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
				
			||||||
 | 
					                        <RadzenText onclick="@(()=>{EditPassword(2);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </RadzenColumn>
 | 
					                </RadzenColumn>
 | 
				
			||||||
                <RadzenColumn Size="3">
 | 
					                <RadzenColumn Size="3">
 | 
				
			||||||
| 
						 | 
					@ -64,52 +69,67 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <RadzenStack Style="height: 100%;width:41%" Gap="20">
 | 
					        <RadzenStack Style="height: 100%;width:41%" Gap="20">
 | 
				
			||||||
            <RadzenStack class="home-menu rz-background-color-info-lighter rz-ripple" JustifyContent="JustifyContent.Center" Style="height: 50%" @onclick="@(() => jump2Page(1))">
 | 
					            <RadzenStack class="home-menu rz-background-color-info-lighter rz-ripple" JustifyContent="JustifyContent.Center" Style="height: 50%" @onclick="@(() => jump2Page(1))">
 | 
				
			||||||
                <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center" >出库</RadzenText>
 | 
					                <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">出库</RadzenText>
 | 
				
			||||||
                @if (!Operator.role.permissionIds.Any(id => id - 10 < 10))
 | 
					                @if (globalStateService.Operator != null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 10 < 10))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        <div class="mask">
 | 
					                        <div class="mask">
 | 
				
			||||||
                            <RadzenImage Path="images/no_auth.png" />
 | 
					                            <RadzenImage Path="images/no_auth.png" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            </RadzenStack>
 | 
					            </RadzenStack>
 | 
				
			||||||
            <RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 50%">
 | 
					            <RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 50%">
 | 
				
			||||||
                <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
 | 
					                <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
 | 
				
			||||||
                @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))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        <div class="mask">
 | 
					                        <div class="mask">
 | 
				
			||||||
                            <RadzenImage Path="images/no_auth.png" />
 | 
					                            <RadzenImage Path="images/no_auth.png" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            </RadzenStack>
 | 
					            </RadzenStack>
 | 
				
			||||||
        </RadzenStack>
 | 
					        </RadzenStack>
 | 
				
			||||||
        <RadzenStack Style="height: 100%;width:59%" Gap="20">
 | 
					        <RadzenStack Style="height: 100%;width:59%" Gap="20">
 | 
				
			||||||
            <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
 | 
					            <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
 | 
				
			||||||
                <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">归还</RadzenText>
 | 
					                <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">归还</RadzenText>
 | 
				
			||||||
                @if (!Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10))
 | 
					                @if (globalStateService.Operator != null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        <div class="mask">
 | 
					                        <div class="mask">
 | 
				
			||||||
                            <RadzenImage Path="images/no_auth.png" />
 | 
					                            <RadzenImage Path="images/no_auth.png" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            </RadzenStack>
 | 
					            </RadzenStack>
 | 
				
			||||||
            <RadzenStack Orientation="Orientation.Horizontal" Style="height: 57%;width:100%">
 | 
					            <RadzenStack Orientation="Orientation.Horizontal" Style="height: 57%;width:100%">
 | 
				
			||||||
                <RadzenStack class="home-menu rz-background-color-primary rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(4))" Style="height: 100%;width:50%">
 | 
					                <RadzenStack class="home-menu rz-background-color-primary rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(4))" Style="height: 100%;width:50%">
 | 
				
			||||||
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">库存管理</RadzenText>
 | 
					                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">库存管理</RadzenText>
 | 
				
			||||||
                    @if (!Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10))
 | 
					                    @if (globalStateService.Operator != null)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            <div class="mask">
 | 
					                            <div class="mask">
 | 
				
			||||||
                                <RadzenImage Path="images/no_auth.png" />
 | 
					                                <RadzenImage Path="images/no_auth.png" />
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                </RadzenStack>
 | 
					                </RadzenStack>
 | 
				
			||||||
                <RadzenStack class="home-menu rz-background-color-success-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(5))" Style="height: 100%;width:50%">
 | 
					                <RadzenStack class="home-menu rz-background-color-success-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(5))" Style="height: 100%;width:50%">
 | 
				
			||||||
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">系统设置</RadzenText>
 | 
					                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">系统设置</RadzenText>
 | 
				
			||||||
                    @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))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            <div class="mask">
 | 
					                            <div class="mask">
 | 
				
			||||||
                                <RadzenImage Path="images/no_auth.png" />
 | 
					                                <RadzenImage Path="images/no_auth.png" />
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                </RadzenStack>
 | 
					                </RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            </RadzenStack>
 | 
					            </RadzenStack>
 | 
				
			||||||
| 
						 | 
					@ -119,12 +139,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@code {
 | 
					@code {
 | 
				
			||||||
 | 
					    @inject Radzen.DialogService dialogService;
 | 
				
			||||||
 | 
					    @inject NotificationService _message
 | 
				
			||||||
    @inject NavigationManager na;
 | 
					    @inject NavigationManager na;
 | 
				
			||||||
    @inject TooltipService tooltipService
 | 
					    @inject TooltipService tooltipService
 | 
				
			||||||
    private List<Premission> userPremissions { get; set; } = new();
 | 
					    private List<Premission> userPremissions { get; set; } = new();
 | 
				
			||||||
    @inject GlobalStateService globalStateService;
 | 
					    @inject GlobalStateService globalStateService;
 | 
				
			||||||
    Pojo.User Operator;
 | 
					 | 
				
			||||||
    Pojo.User Reviewer;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Timer timer;
 | 
					    Timer timer;
 | 
				
			||||||
    @inject PortUtil _portUtil;
 | 
					    @inject PortUtil _portUtil;
 | 
				
			||||||
| 
						 | 
					@ -134,11 +154,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override void OnInitialized()
 | 
					    protected override void OnInitialized()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Operator = globalStateService.Operator;
 | 
					 | 
				
			||||||
        Reviewer = globalStateService.Reviewer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // timer = new Timer(state =>
 | 
					        // timer = new Timer(state =>
 | 
				
			||||||
        // {
 | 
					        // {
 | 
				
			||||||
        //     var now = DateTime.Now;
 | 
					        //     var now = DateTime.Now;
 | 
				
			||||||
| 
						 | 
					@ -154,7 +169,7 @@
 | 
				
			||||||
           {
 | 
					           {
 | 
				
			||||||
               if (globalStateService.Operator == null || !currentPage)
 | 
					               if (globalStateService.Operator == null || !currentPage)
 | 
				
			||||||
               {
 | 
					               {
 | 
				
			||||||
                   logger.Info($"Home页自动退出循环停止{globalStateService.Operator==null},{!currentPage}");
 | 
					                   logger.Info($"Home页自动退出循环停止{globalStateService.Operator == null},{!currentPage}");
 | 
				
			||||||
                   stop();
 | 
					                   stop();
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
               else
 | 
					               else
 | 
				
			||||||
| 
						 | 
					@ -167,10 +182,9 @@
 | 
				
			||||||
                           // 无人操作鼠标键盘
 | 
					                           // 无人操作鼠标键盘
 | 
				
			||||||
                           if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > setting.Value.autoOutLog && CheckComputerFreeState.GetLastInputTime() > setting.Value.autoOutLog)
 | 
					                           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.Operator = null;
 | 
				
			||||||
                               globalStateService.Reviewer = null;
 | 
					                               globalStateService.Reviewer = null;
 | 
				
			||||||
                               na.NavigateTo("");
 | 
					 | 
				
			||||||
                               stop();
 | 
					                               stop();
 | 
				
			||||||
                           }
 | 
					                           }
 | 
				
			||||||
                           else
 | 
					                           else
 | 
				
			||||||
| 
						 | 
					@ -199,22 +213,87 @@
 | 
				
			||||||
        timer?.Dispose();
 | 
					        timer?.Dispose();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void jump2Page(int parentId)
 | 
					    async void init()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        List<int> childrenIds = Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList();
 | 
					        var b = await dialogService.OpenAsync<InitPage>(
 | 
				
			||||||
        if(childrenIds.Count > 0)
 | 
					               $"调拨入库详情",
 | 
				
			||||||
 | 
					             new Dictionary<string, object>() { },
 | 
				
			||||||
 | 
					             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)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.init();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async void jump2Page(int parentId)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        bool a = true;
 | 
				
			||||||
 | 
					        if ((setting.Value.loginMode == 2 && (globalStateService.Operator == null || globalStateService.Reviewer == null))
 | 
				
			||||||
 | 
					        || setting.Value.loginMode == 1 && globalStateService.Operator == null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            a = await dialogService.OpenAsync<LoginDialog>(
 | 
				
			||||||
 | 
					                  "",
 | 
				
			||||||
 | 
					                null,
 | 
				
			||||||
 | 
					                new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // bool a = globalStateService.Operator != null;
 | 
				
			||||||
 | 
					        // if (!a)
 | 
				
			||||||
 | 
					        // {
 | 
				
			||||||
 | 
					        //     a = await dialogService.OpenAsync<LoginDialog>(
 | 
				
			||||||
 | 
					        //            "",
 | 
				
			||||||
 | 
					        //          null,
 | 
				
			||||||
 | 
					        //          new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
				
			||||||
 | 
					        // }
 | 
				
			||||||
 | 
					        if (a)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            List<int> childrenIds = globalStateService.Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList();
 | 
				
			||||||
 | 
					            if (childrenIds.Count > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                currentPage = false;
 | 
				
			||||||
                childrenIds.Sort();
 | 
					                childrenIds.Sort();
 | 
				
			||||||
                int minId = childrenIds[0];
 | 
					                int minId = childrenIds[0];
 | 
				
			||||||
                string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath;
 | 
					                string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath;
 | 
				
			||||||
                na.NavigateTo(path);
 | 
					                na.NavigateTo(path);
 | 
				
			||||||
            currentPage = false;
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _message.Notify(
 | 
				
			||||||
 | 
					                            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"没有权限不能访问", Duration = 3000 }
 | 
				
			||||||
 | 
					                        );
 | 
				
			||||||
 | 
					                await InvokeAsync(StateHasChanged);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    void logout()
 | 
					    void logout()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (globalStateService.Operator != null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            globalStateService.Operator = null;
 | 
					            globalStateService.Operator = null;
 | 
				
			||||||
            globalStateService.Reviewer = null;
 | 
					            globalStateService.Reviewer = null;
 | 
				
			||||||
        na.NavigateTo("");
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Environment.Exit(0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    //修改密码
 | 
				
			||||||
 | 
					    async void EditPassword(int i)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //修改复核人
 | 
				
			||||||
 | 
					        await dialogService.OpenAsync<EditPasswordDialog>(
 | 
				
			||||||
 | 
					        "",
 | 
				
			||||||
 | 
					          new Dictionary<string, object>() { { "userI", i } },
 | 
				
			||||||
 | 
					        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
@page "/"
 | 
					@page "/login"
 | 
				
			||||||
@layout EmptyLayout
 | 
					@layout EmptyLayout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@using System.ComponentModel;
 | 
					@using System.ComponentModel;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<RadzenStack AlignItems="AlignItems.Center" Gap="2rem" class="rz-p-12">
 | 
				
			||||||
 | 
					    <RadzenImage Path="images/community.svg" Style="width: 200px;" AlternateText="community" />
 | 
				
			||||||
 | 
					    <RadzenText TextStyle="TextStyle.H6">加载程序必要连接中,请稍等。。。</RadzenText>
 | 
				
			||||||
 | 
					    <RadzenText TextStyle="TextStyle.H6">@msg</RadzenText>
 | 
				
			||||||
 | 
					    <RadzenText TextStyle="TextStyle.H6">@errMsg</RadzenText>
 | 
				
			||||||
 | 
					</RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@code {
 | 
				
			||||||
 | 
					    @inject Radzen.DialogService dialogService;
 | 
				
			||||||
 | 
					    @inject IOptions<DrawerConfig> 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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -89,15 +89,23 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public List<InvoiceVo> data { get; set; }
 | 
					    public List<InvoiceVo> data { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //称重取药数量
 | 
				
			||||||
 | 
					    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
				
			||||||
 | 
					    // 当前操作的库位号列表
 | 
				
			||||||
 | 
					    public List<int> ColNos { get; set; } = new List<int>();
 | 
				
			||||||
 | 
					    int currentCol = 0;
 | 
				
			||||||
 | 
					    //开抽屉前操作标识
 | 
				
			||||||
 | 
					    private List<string> _flagList = new List<string>();
 | 
				
			||||||
    async Task StartAdd()
 | 
					    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(
 | 
					            _message.Notify(
 | 
				
			||||||
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的入库数量!", Duration = 4000 }
 | 
					                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的入库数量!", Duration = 4000 }
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            await OpenDrawer();
 | 
					            await OpenDrawer();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -142,15 +150,36 @@
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        BeforeQuantity = new int[9];
 | 
					                        BeforeQuantity = new int[9];
 | 
				
			||||||
                        AfterQuantity = new int[9];
 | 
					                        AfterQuantity = new int[9];
 | 
				
			||||||
                        // 判断是否为单支抽屉
 | 
					                        for (int j = 0; j < data[index].ChannelStocks.Count; j++)
 | 
				
			||||||
                        if (setting.Value.single.Contains(drawerNo))
 | 
					 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					                            // _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();
 | 
					                                BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                                logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
					                                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<int>().ToArray());
 | 
					                                await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().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);
 | 
					                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					                        if (b)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -186,6 +215,80 @@
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                PortUtil.SpeakAsync($"加药完成,请,点击完成按钮进行确认");
 | 
					                                PortUtil.SpeakAsync($"加药完成,请,点击完成按钮进行确认");
 | 
				
			||||||
                                this.status = 2;
 | 
					                                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<ConfirmDialog>
 | 
				
			||||||
 | 
					                                                                (
 | 
				
			||||||
 | 
					                                                                    $"保存确认",
 | 
				
			||||||
 | 
					                                                                    new Dictionary<string, object>
 | 
				
			||||||
 | 
					                                                                    () { { "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();
 | 
					                                stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
| 
						 | 
					@ -196,21 +299,21 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if (setting.Value.single.Contains(drawerNo))
 | 
					                            // if (setting.Value.single.Contains(drawerNo))
 | 
				
			||||||
                            {
 | 
					                            // {
 | 
				
			||||||
                                byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					                            //     byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
				
			||||||
                                AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					                            //     AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                                logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
 | 
					                            //     logger.Info($"单支抽屉【{drawerNo}】,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                data.ForEach(cl =>
 | 
					                            //     data.ForEach(cl =>
 | 
				
			||||||
                                {
 | 
					                            //     {
 | 
				
			||||||
                                    cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs =>
 | 
					                            //         cl.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).ToList().ForEach(cs =>
 | 
				
			||||||
                                    {
 | 
					                            //         {
 | 
				
			||||||
                                        logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】");
 | 
					                            //             logger.Info($"单支抽屉【{drawerNo}】,应加药品数量【{cs.AddQuantity}】,现实取数量【{AfterQuantity[cs.ColNo - 1] - BeforeQuantity[cs.ColNo - 1]}】");
 | 
				
			||||||
                                    });
 | 
					                            //         });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                });
 | 
					                            //     });
 | 
				
			||||||
                            }
 | 
					                            // }
 | 
				
			||||||
                            next(); // continue iteration
 | 
					                            next(); // continue iteration
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -229,7 +332,6 @@
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    PortUtil.AllLightOff();
 | 
					                    PortUtil.AllLightOff();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                stop();
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -237,6 +339,8 @@
 | 
				
			||||||
    void RestData()
 | 
					    void RestData()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        this.status = 0;
 | 
				
			||||||
 | 
					        _flagList.Clear();
 | 
				
			||||||
 | 
					        this.ColNos.Clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task AddFinish()
 | 
					    async Task AddFinish()
 | 
				
			||||||
| 
						 | 
					@ -285,16 +389,17 @@
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void RowRender(RowRenderEventArgs<InvoiceVo> args)
 | 
					    void RowRender(RowRenderEventArgs<InvoiceVo>
 | 
				
			||||||
 | 
					        args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        args.Expandable = args.Data.ChannelStocks != null && args.Data.ChannelStocks.Count > 0;
 | 
					        args.Expandable = args.Data.ChannelStocks != null && args.Data.ChannelStocks.Count > 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args, RadzenDataGrid<ChannelStock> Grid)
 | 
					    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock>
 | 
				
			||||||
 | 
					        args, RadzenDataGrid<ChannelStock>
 | 
				
			||||||
 | 
					            Grid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Grid.EditRow(args.Data);
 | 
					        Grid.EditRow(args.Data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -89,16 +89,26 @@
 | 
				
			||||||
    int status = 0;
 | 
					    int status = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public List<InvoiceVo> data { get; set; }
 | 
					    public List<InvoiceVo> data { get; set; }
 | 
				
			||||||
 | 
					    //称重取药数量
 | 
				
			||||||
 | 
					    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
				
			||||||
 | 
					    // 当前操作的库位号列表
 | 
				
			||||||
 | 
					    public List<int> ColNos { get; set; } = new List<int>();
 | 
				
			||||||
 | 
					    int currentCol = 0;
 | 
				
			||||||
 | 
					    //开抽屉前操作标识
 | 
				
			||||||
 | 
					    private List<string> _flagList = new List<string>();
 | 
				
			||||||
 | 
					    int[] BeforeQuantity = new int[9];
 | 
				
			||||||
 | 
					    int[] AfterQuantity = new int[9];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task StartTake()
 | 
					    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(
 | 
					            _message.Notify(
 | 
				
			||||||
                                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的出库数量!", Duration = 4000 }
 | 
					                                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请填写正确的出库数量!", Duration = 4000 }
 | 
				
			||||||
                            );
 | 
					                            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            await OpenDrawer();
 | 
					            await OpenDrawer();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -113,7 +123,7 @@
 | 
				
			||||||
        this.status = 1;
 | 
					        this.status = 1;
 | 
				
			||||||
        // 解析需要打开的抽屉列表
 | 
					        // 解析需要打开的抽屉列表
 | 
				
			||||||
        List<ChannelStock> channels = new();
 | 
					        List<ChannelStock> 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();
 | 
					            channels = channels.Concat(data[i].ChannelStocks.Where(cs => cs.TakeQuantity > 0)).ToList();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -123,9 +133,7 @@
 | 
				
			||||||
        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
					        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
				
			||||||
        var promiseUtil = new PromiseUtil<int>();
 | 
					        var promiseUtil = new PromiseUtil<int>();
 | 
				
			||||||
        int index = 0;
 | 
					        int index = 0;
 | 
				
			||||||
        var BeforeQuantity = new int[9];
 | 
					        await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
				
			||||||
        var AfterQuantity = new int[9];
 | 
					 | 
				
			||||||
        await promiseUtil.taskAsyncLoop(500, 0 , async (options, next, stop) =>
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var drawerNo = drawerNos[index];
 | 
					            var drawerNo = drawerNos[index];
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
| 
						 | 
					@ -141,15 +149,63 @@
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        BeforeQuantity = new int[9];
 | 
					                        BeforeQuantity = new int[9];
 | 
				
			||||||
                        AfterQuantity = new int[9];
 | 
					                        AfterQuantity = new int[9];
 | 
				
			||||||
                        // 判断是否为单支抽屉
 | 
					                        for (int j = 0; j < data[index].ChannelStocks.Count; j++)
 | 
				
			||||||
                        if (setting.Value.single.Contains(drawerNo))
 | 
					 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					                            //单支-查数
 | 
				
			||||||
 | 
					                            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();
 | 
					                                BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                                logger.Info($"单支抽屉【{drawerNo}】,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
					                                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<int>().ToArray());
 | 
					                                await PortUtil.NoLightOnByCol(drawerNo, data.Select(ot => ot.ChannelStocks.Where(cs => cs.DrawerNo == drawerNo).Select(cs => cs.ColNo)).Cast<int>().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<int>().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);
 | 
					                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					                        if (b)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -181,10 +237,80 @@
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                PortUtil.AllLightOff();
 | 
					                                PortUtil.AllLightOff();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if (index == drawerNos.Count - 1)
 | 
					                            if (index == drawerNos.Count - 1)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
					                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
				
			||||||
                                this.status = 2;
 | 
					                                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<ConfirmDialog>(
 | 
				
			||||||
 | 
					                                  $"保存确认",
 | 
				
			||||||
 | 
					                                  new Dictionary<string, object>() { { "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();
 | 
					                                stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
| 
						 | 
					@ -195,7 +321,7 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if (setting.Value.single.Contains(drawerNo))
 | 
					                            if (setting.Value.single != null && setting.Value.single.Contains(drawerNo))
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					                                byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
				
			||||||
                                AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					                                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
 | 
					                            next(); // continue iteration
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -236,6 +371,11 @@
 | 
				
			||||||
    void RestData()
 | 
					    void RestData()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        this.status = 0;
 | 
				
			||||||
 | 
					        this.BeforeQuantity = new int[9];
 | 
				
			||||||
 | 
					        this.AfterQuantity = new int[9];
 | 
				
			||||||
 | 
					        currentCol = 0;
 | 
				
			||||||
 | 
					        ColNos.Clear();
 | 
				
			||||||
 | 
					        _flagList.Clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task TakeFinish()
 | 
					    async Task TakeFinish()
 | 
				
			||||||
| 
						 | 
					@ -291,6 +431,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args, RadzenDataGrid<ChannelStock> Grid)
 | 
					    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args, RadzenDataGrid<ChannelStock> Grid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        currentCol = args.Data.ColNo;
 | 
				
			||||||
        Grid.EditRow(args.Data);
 | 
					        Grid.EditRow(args.Data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					    .rz-dialog-content {
 | 
				
			||||||
 | 
					    padding: 0 !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
 | 
				
			||||||
 | 
					    <RadzenColumn Size="12" SizeMD="5">
 | 
				
			||||||
 | 
					        <RadzenCard class="rz-shadow-0 rz-border-radius-0 rz-text-align-center rz-p-12 align-items-center justify-content-center" Style="height: 100%; background: var(--rz-primary-light) no-repeat 100% 70% fixed url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwNCIgaGVpZ2h0PSIxNDU4IiB2aWV3Qm94PSIwIDAgMTIwNCAxNDU4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjcyMi4xMjgiIGN5PSI4MzkuMDIiIHI9IjQ4MS40MTkiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGcgb3BhY2l0eT0iMC41IiBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzQ5M18xMDEzNCkiPgo8Y2lyY2xlIGN4PSI0NzAuMzMzIiBjeT0iNTcwLjMzMyIgcj0iNDcwLjMzMyIgZmlsbD0idXJsKCNwYWludDFfcmFkaWFsXzQ5M18xMDEzNCkiLz4KPC9nPgo8ZyBvcGFjaXR5PSIwLjUiIGZpbHRlcj0idXJsKCNmaWx0ZXIyX2ZfNDkzXzEwMTM0KSI+CjxjaXJjbGUgY3g9IjY5MS41MTEiIGN5PSI1MjIuMjk3IiByPSIzMzEuNTAzIiBmaWxsPSJ1cmwoI3BhaW50Ml9yYWRpYWxfNDkzXzEwMTM0KSIvPgo8L2c+CjxnIG9wYWNpdHk9IjAuNSIgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl80OTNfMTAxMzQpIj4KPGNpcmNsZSBjeD0iNjA4LjI0NCIgY3k9IjEwNzkuOTciIHI9IjMzMS41MDMiIHRyYW5zZm9ybT0icm90YXRlKC04MS4yMjQ0IDYwOC4yNDQgMTA3OS45NykiIGZpbGw9InVybCgjcGFpbnQzX3JhZGlhbF80OTNfMTAxMzQpIi8+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZl80OTNfMTAxMzQiIHg9IjE0MC43MDkiIHk9IjI1Ny42MDEiIHdpZHRoPSIxMTYyLjg0IiBoZWlnaHQ9IjExNjIuODQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZl80OTNfMTAxMzQiIHg9Ii0xMDAiIHk9IjAiIHdpZHRoPSIxMTQwLjY3IiBoZWlnaHQ9IjExNDAuNjciIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjJfZl80OTNfMTAxMzQiIHg9IjI2MC4wMDgiIHk9IjkwLjc5MzkiIHdpZHRoPSI4NjMuMDA2IiBoZWlnaHQ9Ijg2My4wMDYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNTAiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl80OTNfMTAxMzQiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjNfZl80OTNfMTAxMzQiIHg9IjE3Ni42OTQiIHk9IjY0OC40MjMiIHdpZHRoPSI4NjMuMSIgaGVpZ2h0PSI4NjMuMSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1MCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzQ5M18xMDEzNCIvPgo8L2ZpbHRlcj4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDBfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3MjIuMTI4IDgzOS4wMikgcm90YXRlKDkwKSBzY2FsZSg0ODEuNDE5KSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRjFBNkMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYxQTZDIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzQ5M18xMDEzNCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg0NzAuMzMzIDU3MC4zMzMpIHJvdGF0ZSg5MCkgc2NhbGUoNDcwLjMzMykiPgo8c3RvcCBzdG9wLWNvbG9yPSIjM0FBQ0ZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNBOTVGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF80OTNfMTAxMzQiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjUxMSA1MjIuMjk3KSByb3RhdGUoOTApIHNjYWxlKDMzMS41MDMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzQ4M0FGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ODNBRkYiIHN0b3Atb3BhY2l0eT0iMCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50M19yYWRpYWxfNDkzXzEwMTM0IiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDYwOC4yNDQgMTA3OS45Nykgcm90YXRlKDkwKSBzY2FsZSgzMzEuNTAzKSI+CjxzdG9wIHN0b3AtY29sb3I9IiNGRkM4M0EiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZDODNBIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9yYWRpYWxHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K')">
 | 
				
			||||||
 | 
					            @if (loginMode == 2)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                <RadzenText TextStyle="TextStyle.H6" class="rz-color-white">操作人:@globalStateService.Operator?.NickName</RadzenText>
 | 
				
			||||||
 | 
					                <RadzenText TextStyle="TextStyle.H6" class="rz-color-white">复核人:@globalStateService.Reviewer?.NickName</RadzenText>
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        </RadzenCard>
 | 
				
			||||||
 | 
					    </RadzenColumn>
 | 
				
			||||||
 | 
					    <RadzenColumn Size="12" SizeMD="7">
 | 
				
			||||||
 | 
					        <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
 | 
				
			||||||
 | 
					            <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
 | 
				
			||||||
 | 
					                登录
 | 
				
			||||||
 | 
					            </RadzenText>
 | 
				
			||||||
 | 
					            <RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label" for="username">账号</label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                        <!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
 | 
				
			||||||
 | 
					                        <RadzenTextBox id="username" Name="Username" @bind-Value="@loginModel.Username"  Style="width:100%" />
 | 
				
			||||||
 | 
					                        <RadzenRequiredValidator Component="Username" Text="请填写用户名" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label" for="password">密码</label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                        <RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
 | 
				
			||||||
 | 
					                        <RadzenRequiredValidator Component="Password" Text="请填写密码" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label"></label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper rz-login-buttons">
 | 
				
			||||||
 | 
					                        <RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="登录" />
 | 
				
			||||||
 | 
					                        <RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </RadzenTemplateForm>
 | 
				
			||||||
 | 
					        </RadzenCard>
 | 
				
			||||||
 | 
					    </RadzenColumn>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</RadzenRow>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@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<Pojo.Config.SettingConfig> 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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        @if (status <= 2)
 | 
					        @if (status <= 2)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            <RadzenButton Click="@((args) => dialogService.Close(false))" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
					            <RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    </RadzenStack>
 | 
					    </RadzenStack>
 | 
				
			||||||
</RadzenStack>
 | 
					</RadzenStack>
 | 
				
			||||||
| 
						 | 
					@ -82,8 +82,8 @@
 | 
				
			||||||
    private bool CanTakeDrug = true;
 | 
					    private bool CanTakeDrug = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public List<OrderTakeVo> data { get; set; }
 | 
					    public List<OrderTakeVo> data { get; set; }
 | 
				
			||||||
 | 
					    //称重取药数量
 | 
				
			||||||
 | 
					    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    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());
 | 
					                            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);
 | 
					                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					                        if (b)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -170,6 +190,55 @@
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
					                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
				
			||||||
                                this.status = 2;
 | 
					                                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<ConfirmDialog>(
 | 
				
			||||||
 | 
					                                          $"保存确认",
 | 
				
			||||||
 | 
					                                          new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
 | 
				
			||||||
 | 
					                                          new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
 | 
					                                    logger.Info(alertMessage);
 | 
				
			||||||
 | 
					                                    if (!confirm)
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					                                        RestData();
 | 
				
			||||||
 | 
					                                        logger.Info("取消保存");
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                                stop();
 | 
					                                stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
| 
						 | 
					@ -180,27 +249,13 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        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
 | 
					                            next(); // continue iteration
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -221,8 +276,20 @@
 | 
				
			||||||
    void RestData()
 | 
					    void RestData()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.status = 0;
 | 
					        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()
 | 
					    async Task TakeFinish()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,9 +196,9 @@
 | 
				
			||||||
        if (roleList.Contains(role))
 | 
					        if (roleList.Contains(role))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //弹出确认提示框
 | 
					            //弹出确认提示框
 | 
				
			||||||
            var b = await dialogService.OpenAsync<ConfirmDialo>(
 | 
					            var b = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
               $"删除确认",
 | 
					               $"删除确认",
 | 
				
			||||||
             new Dictionary<string, object>() { { "confirmInfo", "删除角色:" + role.RoleName } },
 | 
					             new Dictionary<string, object>() { { "confirmInfo", "确认要删除角色:" + role.RoleName+"吗?" } },
 | 
				
			||||||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
            if (b)
 | 
					            if (b)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,11 +77,14 @@
 | 
				
			||||||
    int status;
 | 
					    int status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [Parameter] public OrderInfo order { get; set; }
 | 
					    [Parameter] public OrderInfo order { get; set; }
 | 
				
			||||||
    [Parameter] public List<OrderDetail> orderDetails{ get; set; }
 | 
					    [Parameter] public List<OrderDetail> orderDetails { get; set; } 
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private bool CanTakeDrug = true;
 | 
					    private bool CanTakeDrug = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public List<OrderTakeVo> data { get; set; }
 | 
					    public List<OrderTakeVo> data { get; set; }
 | 
				
			||||||
 | 
					    //称重取药数量
 | 
				
			||||||
 | 
					    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    protected override async Task OnInitializedAsync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        data = await selfTakeDao.getTakeInfoByOrderNo(orderDetails);
 | 
					        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());
 | 
					                            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);
 | 
					                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					                        if (b)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -169,6 +192,55 @@
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
					                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
				
			||||||
                                this.status = 2;
 | 
					                                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<ConfirmDialog>(
 | 
				
			||||||
 | 
					                                          $"保存确认",
 | 
				
			||||||
 | 
					                                          new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
 | 
				
			||||||
 | 
					                                          new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
 | 
					                                    logger.Info(alertMessage);
 | 
				
			||||||
 | 
					                                    if (!confirm)
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					                                        RestData();
 | 
				
			||||||
 | 
					                                        logger.Info("取消保存");
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                                stop();
 | 
					                                stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
| 
						 | 
					@ -179,21 +251,21 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if (setting.Value.single.Contains(drawerNo))
 | 
					                            // if (setting.Value.single.Contains(drawerNo))
 | 
				
			||||||
                            {
 | 
					                            // {
 | 
				
			||||||
                                byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					                            //     byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
				
			||||||
                                orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					                            //     orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                                logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
					                            //     logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                data.ForEach(cl =>
 | 
					                            //     data.ForEach(cl =>
 | 
				
			||||||
                                {
 | 
					                            //     {
 | 
				
			||||||
                                    if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
					                            //         if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
				
			||||||
                                    {
 | 
					                            //         {
 | 
				
			||||||
                                        logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】");
 | 
					                            //             logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{orderTakeVo.Quantity}】,现实取数量【{orderTakeVo.BeforeQuantity[cl.ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[cl.ChannelStock.ColNo - 1]}】");
 | 
				
			||||||
                                    }
 | 
					                            //         }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                });
 | 
					                            //     });
 | 
				
			||||||
                            }
 | 
					                            // }
 | 
				
			||||||
                            next(); // continue iteration
 | 
					                            next(); // continue iteration
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -233,9 +233,9 @@
 | 
				
			||||||
        if (userList.Contains(user))
 | 
					        if (userList.Contains(user))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //弹出确认提示框
 | 
					            //弹出确认提示框
 | 
				
			||||||
            var b = await dialogService.OpenAsync<ConfirmDialo>(
 | 
					            var b = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
               $"删除确认",
 | 
					               $"删除确认",
 | 
				
			||||||
             new Dictionary<string, object>() { { "confirmInfo", "删除用户:"+user.Username } },
 | 
					             new Dictionary<string, object>() { { "confirmInfo", "确认要删除用户:"+user.Username+"吗?" } },
 | 
				
			||||||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
            if (b)
 | 
					            if (b)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -258,9 +258,9 @@
 | 
				
			||||||
        if (userList.Contains(user))
 | 
					        if (userList.Contains(user))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //弹出确认提示框
 | 
					            //弹出确认提示框
 | 
				
			||||||
            var b = await dialogService.OpenAsync<ConfirmDialo>(
 | 
					            var b = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
               $"密码重置确认",
 | 
					               $"密码重置确认",
 | 
				
			||||||
             new Dictionary<string, object>() { { "confirmInfo", "重置用户:" + user.Username+" 的密码" } },
 | 
					             new Dictionary<string, object>() { { "confirmInfo", "确认要重置用户:" + user.Username+" 的密码吗?" } },
 | 
				
			||||||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
            if (b)
 | 
					            if (b)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,11 +66,11 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        public DrugManuNo? drugManuNo { get; set; }
 | 
					        public DrugManuNo? drugManuNo { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Column(IsColumn =false)]
 | 
					        [Column(IsColumn = false)]
 | 
				
			||||||
        public string Location
 | 
					        public string Location
 | 
				
			||||||
        { get=>DrawerNo+ "-" + ColNo; }
 | 
					        { get => DrawerNo + "-" + ColNo; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Column(IsColumn =false)]
 | 
					        [Column(IsColumn = false)]
 | 
				
			||||||
        public int CanReturnQuantity { get; set; }
 | 
					        public int CanReturnQuantity { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Column(IsColumn = false)]
 | 
					        [Column(IsColumn = false)]
 | 
				
			||||||
| 
						 | 
					@ -79,5 +79,7 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
            get;
 | 
					            get;
 | 
				
			||||||
            set;
 | 
					            set;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        [Column("Pos_No")]
 | 
				
			||||||
 | 
					        public int BiaoDingStatus { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,5 +35,8 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Association(ThisKey = nameof(RoleId), OtherKey = nameof(Role.Id))]
 | 
					        [Association(ThisKey = nameof(RoleId), OtherKey = nameof(Role.Id))]
 | 
				
			||||||
        public Role role { get; set; }
 | 
					        public Role role { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Column(IsColumn =false)]
 | 
				
			||||||
 | 
					        public string OldPassword { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,8 +55,8 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
                string DrawerPortPath = _portConfig.drawerPortPath;
 | 
					                string DrawerPortPath = _portConfig.drawerPortPath;
 | 
				
			||||||
                logger.Info($"打开抽屉串口【{DrawerPortPath}】");
 | 
					                logger.Info($"打开抽屉串口【{DrawerPortPath}】");
 | 
				
			||||||
                drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8);
 | 
					                drawerSerial = new SerialPort(DrawerPortPath, 9600, Parity.None, 8);
 | 
				
			||||||
                drawerSerial.Open();
 | 
					                //drawerSerial.Open();
 | 
				
			||||||
                logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
 | 
					                //logger.Info($"抽屉串口打开结果【{drawerSerial.IsOpen}】");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -72,8 +72,8 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
                    string code = scanCodeSerial.ReadExisting();
 | 
					                    string code = scanCodeSerial.ReadExisting();
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
                scanCodeSerial.Open();
 | 
					                //scanCodeSerial.Open();
 | 
				
			||||||
                logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
 | 
					                //logger.Info($"条码枪串口打开结果【{scanCodeSerial.IsOpen}】");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -86,8 +86,8 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
                    string CanBusPortPath = _portConfig.canBusPortPath;
 | 
					                    string CanBusPortPath = _portConfig.canBusPortPath;
 | 
				
			||||||
                    logger.Info($"打开can总线串口【{CanBusPortPath}】");
 | 
					                    logger.Info($"打开can总线串口【{CanBusPortPath}】");
 | 
				
			||||||
                    canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8);
 | 
					                    canBusSerial = new SerialPort(CanBusPortPath, 57600, Parity.None, 8);
 | 
				
			||||||
                    canBusSerial.Open();
 | 
					                    //canBusSerial.Open();
 | 
				
			||||||
                    logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
 | 
					                    //logger.Info($"can总线串口打开结果【{canBusSerial.IsOpen}】");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                catch (Exception e)
 | 
					                catch (Exception e)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -410,7 +410,7 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
                var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO / 3)).ToString(), 16);
 | 
					                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, (byte)channel, 5, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
 | 
				
			||||||
                //byte[] buffer = new byte[] { 0xaa, 0x11, 0x05,0x01, 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);
 | 
					                canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
                byte[] retBuffer = await GetBufferByPort(canBusSerial, 8);
 | 
					                byte[] retBuffer = await GetBufferByPort(canBusSerial, 8);
 | 
				
			||||||
                logger.Info($"开药盒返回{ColNo}【{Convert.ToHexString(retBuffer)}】");
 | 
					                logger.Info($"开药盒返回{ColNo}【{Convert.ToHexString(retBuffer)}】");
 | 
				
			||||||
| 
						 | 
					@ -770,34 +770,52 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async void ClearCount(int DrawerNo, int ColNo)
 | 
					        public async Task ClearCount(int DrawerNo, int ColNo)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                canBusSerial.DiscardInBuffer();
 | 
					                canBusSerial.DiscardInBuffer();
 | 
				
			||||||
            var index = ColNo > 3 ? 2 : 1;
 | 
					                int[] iNum = new int[] { 3, 2, 1 };
 | 
				
			||||||
            var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
 | 
					                var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2;
 | 
				
			||||||
            var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
 | 
					                var bColNo = iNum[colNo2];
 | 
				
			||||||
            byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x25, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
 | 
					                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)}】");
 | 
					                logger.Info($"称重发送清空计数【{Convert.ToHexString(buffer)}】");
 | 
				
			||||||
                canBusSerial.Write(buffer, 0, 8);
 | 
					                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)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                canBusSerial.DiscardInBuffer();
 | 
					                canBusSerial.DiscardInBuffer();
 | 
				
			||||||
            var index = ColNo > 3 ? 2 : 1;
 | 
					                int[] iNum = new int[] { 3, 2, 1 };
 | 
				
			||||||
            var lock1 = ColNo % 3 == 0 ? 3 : ColNo % 3;
 | 
					                var colNo2 = ColNo % 3 > 0 ? (ColNo % 3) - 1 : 2;
 | 
				
			||||||
            var channel = Convert.ToInt32((DrawerNo * 10 + index).ToString(), 16);
 | 
					                var bColNo = iNum[colNo2];
 | 
				
			||||||
            byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x26, (byte)lock1, 0x00, 0x00, 0x00, 0xee };
 | 
					                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);
 | 
					                logger.Info($"标定数量【{Convert.ToHexString(buffer)}】");
 | 
				
			||||||
            buffer[5] = (byte)(Quantity & 0xff);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            logger.Info($"称重发送数量【{string.Join(",", buffer)}】");
 | 
					 | 
				
			||||||
                canBusSerial.Write(buffer, 0, 8);
 | 
					                canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                logger.Info($"操作发生异常:ex:{ex.Message},方法名:SetNumCount;参数:{DrawerNo},{ColNo},{Quantity}");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 以板子为单位获取抽屉内所有库位的药品数量
 | 
					        // 以板子为单位获取抽屉内所有库位的药品数量
 | 
				
			||||||
        public async Task<byte[]> CheckQuantityByAddr()
 | 
					        public async Task<byte[]> CheckQuantityByAddr()
 | 
				
			||||||
| 
						 | 
					@ -843,7 +861,7 @@ namespace MasaBlazorApp3.Port
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                byte[] buffer = new byte[] { 0xaa, (byte)(channel), 0x27, (byte)bColNo, 0x00, 0x00, 0x00, 0xee };
 | 
					                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);
 | 
					                canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
                byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
					                byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
				
			||||||
                logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
 | 
					                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 };
 | 
					            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);
 | 
					            canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
            byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
					            byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
				
			||||||
            byte[] hl = result.Skip(4).Take(2).ToArray();
 | 
					            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 };
 | 
					            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);
 | 
					            canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
            byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
					            byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
				
			||||||
            logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
 | 
					            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 };
 | 
					                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);
 | 
					                canBusSerial.Write(buffer, 0, 8);
 | 
				
			||||||
                byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
					                byte[] result = await GetBufferByPort(canBusSerial, 8);
 | 
				
			||||||
                logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
 | 
					                logger.Info($"称重发送库位数量查询返回结果【{Convert.ToHexString(result)}】");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
@inherits LayoutComponentBase
 | 
					@inherits LayoutComponentBase
 | 
				
			||||||
 | 
					<RadzenLayout>
 | 
				
			||||||
<div style="width:100vw;height:100vh">
 | 
					 | 
				
			||||||
    @Body
 | 
					    @Body
 | 
				
			||||||
</div>
 | 
					    <RadzenNotification />
 | 
				
			||||||
<RadzenNotification />
 | 
					    <RadzenComponents />
 | 
				
			||||||
 | 
					</RadzenLayout>
 | 
				
			||||||
| 
						 | 
					@ -138,7 +138,7 @@
 | 
				
			||||||
    void backHome()
 | 
					    void backHome()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        currentPage = false;
 | 
					        currentPage = false;
 | 
				
			||||||
        na.NavigateTo("/home");
 | 
					        na.NavigateTo("");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void logout()
 | 
					    void logout()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@
 | 
				
			||||||
  "setting": {
 | 
					  "setting": {
 | 
				
			||||||
    "machineId": "DM1",
 | 
					    "machineId": "DM1",
 | 
				
			||||||
    "storage": null,
 | 
					    "storage": null,
 | 
				
			||||||
    "loginMode": 1,
 | 
					    "loginMode": 2,
 | 
				
			||||||
    "opFirst": true,
 | 
					    "opFirst": true,
 | 
				
			||||||
    //自动退出登录时间,单位秒(0不自动退出)
 | 
					    //自动退出登录时间,单位秒(0不自动退出)
 | 
				
			||||||
    "autoOutLog": 0
 | 
					    "autoOutLog": 0
 | 
				
			||||||
| 
						 | 
					@ -17,16 +17,16 @@
 | 
				
			||||||
    "drawerPortPath": "COM1",
 | 
					    "drawerPortPath": "COM1",
 | 
				
			||||||
    "drawerProtocol": 485,
 | 
					    "drawerProtocol": 485,
 | 
				
			||||||
    "scanCodePortPath": "COM8",
 | 
					    "scanCodePortPath": "COM8",
 | 
				
			||||||
    "canBusPortPath": "COM5",
 | 
					    "canBusPortPath": "COM31",
 | 
				
			||||||
    "canBusExsit": true,
 | 
					    "canBusExsit": true,
 | 
				
			||||||
    "doorAddr": 0,
 | 
					    "doorAddr": 0,
 | 
				
			||||||
    "storageBoxAddr": 0
 | 
					    "storageBoxAddr": 0
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "drawer": {
 | 
					  "drawer": {
 | 
				
			||||||
    "single": [ 3 ],
 | 
					    "single": [ 3 ],
 | 
				
			||||||
    "weigh": [1],
 | 
					    "weigh": [4],
 | 
				
			||||||
    "box": [],
 | 
					    "box": [4],
 | 
				
			||||||
    "label": []
 | 
					    "label": [4]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 18 KiB  | 
		Loading…
	
		Reference in New Issue