Compare commits
	
		
			2 Commits
		
	
	
		
			ac39763b13
			...
			396fb8743f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
								 | 
						396fb8743f | 
							 | 
					|
| 
							
							
								
								 | 
						ff96d4e676 | 
							 | 
					
| 
						 | 
				
			
			@ -8,13 +8,19 @@ EndProject
 | 
			
		|||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Any CPU = Debug|Any CPU
 | 
			
		||||
		Debug|x64 = Debug|x64
 | 
			
		||||
		Release|Any CPU = Release|Any CPU
 | 
			
		||||
		Release|x64 = Release|x64
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.ActiveCfg = Debug|x64
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|x64.Build.0 = Debug|x64
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.ActiveCfg = Release|x64
 | 
			
		||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|x64.Build.0 = Release|x64
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,10 +50,36 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
			
		|||
        //手术室药箱补药获取毒麻柜中的药品信息
 | 
			
		||||
        Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
 | 
			
		||||
        //手术室药箱补药完成
 | 
			
		||||
        Task<bool> BoxTakeFinish(List<BoxTakeVo> datas);
 | 
			
		||||
        Task<bool> BoxTakeFinish(List<BoxTakeVo> datas, ChannelList boxChannelList);
 | 
			
		||||
        //手术室药箱入库
 | 
			
		||||
        Task<PageData<ChannelList>> GetBoxWaitInfo(int? take, int? skip);
 | 
			
		||||
        //手术室药箱入库获取待入库明细
 | 
			
		||||
        Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl);
 | 
			
		||||
        Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl, int? take, int? skip);
 | 
			
		||||
        // 手术室药箱待入库明细入库完成
 | 
			
		||||
        Task<bool> BoxAddBoxFinish(ChannelList boxChannelList);
 | 
			
		||||
 | 
			
		||||
        //手术室药箱获取药箱药品及库存信息
 | 
			
		||||
        Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip);
 | 
			
		||||
        //药箱移库时获取选中药箱号的药品信息
 | 
			
		||||
        Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药箱交换药品获取所有除本药箱外的所有药箱号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="machineId"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task<int[]> GetDrawerNum(ChannelStock channelStock);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="machineId"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task<int[]> GetDrawerNumForRemove(ChannelStock channelStock);
 | 
			
		||||
 | 
			
		||||
        //手术室药箱交换药品完成
 | 
			
		||||
        Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> Stocks);
 | 
			
		||||
        //手术室药箱移出药品完成
 | 
			
		||||
        Task<bool> BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,6 +51,10 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
			
		|||
        /// <param name="details"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task<bool> UpdatePlanDetail(PlanDetails details);
 | 
			
		||||
        //查询要删除的套餐下是否有绑定,且绑定有库存
 | 
			
		||||
        Task<bool> CheckPlanBind(int planId);
 | 
			
		||||
        //查询要删除的药品是否有绑定且库存大于0
 | 
			
		||||
        Task<bool> CheckPlanDetailBind(PlanDetails planDetail);
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 删除套餐中的药品
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,5 +21,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
			
		|||
        Task<bool> UpdateSign(int id, string sign);
 | 
			
		||||
 | 
			
		||||
        bool UpdateUserPassword(User user);
 | 
			
		||||
        //查询当前值班信息
 | 
			
		||||
        HkcChangeShifts GetOnDuty();
 | 
			
		||||
        //保存交接班信息
 | 
			
		||||
        Task<bool> UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -315,7 +315,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            var q = _connection.ChannelStock
 | 
			
		||||
                .Where(cs => cs.Id == Stock.Id)
 | 
			
		||||
                .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
 | 
			
		||||
                .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().Substring(0, 10) ?? String.Empty)
 | 
			
		||||
                .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.Value.ToString("yyyy-MM-dd") ?? String.Empty)
 | 
			
		||||
                .Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty);
 | 
			
		||||
 | 
			
		||||
            if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
 | 
			
		||||
| 
						 | 
				
			
			@ -617,7 +617,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                    .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
 | 
			
		||||
                //将套餐中的药品信息写入channelStock
 | 
			
		||||
                //查询套餐中药品信息
 | 
			
		||||
                var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id);
 | 
			
		||||
                var query = _connection.PlanDetails.AsQueryable().Where(p => p.PlanId == list.PlanInfo.Id&&p.UseState==1);
 | 
			
		||||
                List<PlanDetails> planInfos = await query.ToListAsync();
 | 
			
		||||
                if (planInfos != null && planInfos.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -631,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                            DrawerNo = list.DrawerNo,
 | 
			
		||||
                            DrugId = planInfos[i].DrugId.ToString(),
 | 
			
		||||
                            BaseQuantity = planInfos[i].BaseQuantity,
 | 
			
		||||
                            BoxState = 1
 | 
			
		||||
                        });
 | 
			
		||||
                        if (mid > 0)
 | 
			
		||||
                        {
 | 
			
		||||
| 
						 | 
				
			
			@ -789,7 +790,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                    if (flag)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 盘点库存是否足够
 | 
			
		||||
                        if (total > Quantity)
 | 
			
		||||
                        if (total >= Quantity)
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            for (var j = 0; Quantity > 0; j++)
 | 
			
		||||
| 
						 | 
				
			
			@ -848,7 +849,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //手术室药箱补药完成
 | 
			
		||||
        public async Task<bool> BoxTakeFinish(List<BoxTakeVo> datas)
 | 
			
		||||
        public async Task<bool> BoxTakeFinish(List<BoxTakeVo> datas, ChannelList boxChannelList)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
| 
						 | 
				
			
			@ -950,7 +951,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                    #endregion
 | 
			
		||||
 | 
			
		||||
                    //更新药箱中的药品数量
 | 
			
		||||
                    int boxID = _connection.Insert(new ChannelStock() { 
 | 
			
		||||
                    int boxID = _connection.Insert(new ChannelStock()
 | 
			
		||||
                    {
 | 
			
		||||
                        Id = Guid.NewGuid().ToString(),
 | 
			
		||||
                        ListId = boxTakeVo.BoxDetail.Id,
 | 
			
		||||
                        MachineId = _setting.boxMachineId,
 | 
			
		||||
| 
						 | 
				
			
			@ -959,7 +961,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                        NeedQuantity = 0,
 | 
			
		||||
                        DrugId = boxTakeVo.ChannelStock.DrugId,
 | 
			
		||||
                        ManuNo = boxTakeVo.ChannelStock.ManuNo,
 | 
			
		||||
                        EffDate= boxTakeVo.ChannelStock.EffDate,
 | 
			
		||||
                        EffDate = EffDate,
 | 
			
		||||
                        BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
 | 
			
		||||
                        BoardType = boxTakeVo.BoxDetail.BoardType,
 | 
			
		||||
                        BoxState = 2 //补药完成
 | 
			
		||||
| 
						 | 
				
			
			@ -979,12 +981,12 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
			
		||||
                        InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
 | 
			
		||||
                    });
 | 
			
		||||
                    int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxTakeVo.BoxDetail.DrugId)).Sum(p => p.BaseQuantity);
 | 
			
		||||
                    int list=_connection.ChannelList.Where(cl => cl.Id == boxTakeVo.BoxDetail.Id)
 | 
			
		||||
                        .Set(cl => cl.TotalQuantity, totalQuantity)
 | 
			
		||||
                        .Update();
 | 
			
		||||
                    //int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId)&&p.DrugId== boxTakeVo.BoxDetail.DrugId).Sum(p => p.BaseQuantity);
 | 
			
		||||
                    //int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.Id)
 | 
			
		||||
                    //    .Set(cl => cl.TotalQuantity, totalQuantity)
 | 
			
		||||
                    //    .Update();
 | 
			
		||||
                    int delResutl = await _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.BoxDetail.Id).DeleteAsync();
 | 
			
		||||
                    if (mid > 0 && r > 0 && boxID > 0&& boxMId>0&& delResutl>0&& list>0)
 | 
			
		||||
                    if (mid > 0 && r > 0 && boxID > 0 && boxMId > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (boxTakeVo.ChannelStock.BoardType.ToString().Contains("5"))
 | 
			
		||||
                        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1079,7 +1081,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //手术室药箱入库获取待入库明细
 | 
			
		||||
        public async Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl)
 | 
			
		||||
        public async Task<List<BoxTakeVo>> getBoxWaitByBox(ChannelList cl, int? take, int? skip)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1092,8 +1094,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                    // 当前药品取药数量
 | 
			
		||||
                    var Quantity = boxCs.NeedQuantity;
 | 
			
		||||
                    List<ChannelStock> stockList = await _connection.ChannelStock
 | 
			
		||||
                        .Where(cs => cs.MachineId == _setting.machineId && cs.DrawerType == 1 && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
 | 
			
		||||
                        .Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
 | 
			
		||||
                        .AsQueryable()
 | 
			
		||||
                        .Skip((int)skip)
 | 
			
		||||
                        .Take((int)take)
 | 
			
		||||
                        .OrderBy(cs => cs.EffDate).ToListAsync();
 | 
			
		||||
 | 
			
		||||
                    // 当前药品的库存总量
 | 
			
		||||
| 
						 | 
				
			
			@ -1105,58 +1109,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                        StockQuantity = total,
 | 
			
		||||
                        Quantity = Quantity
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    if (flag)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 盘点库存是否足够
 | 
			
		||||
                        if (total > Quantity)
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            for (var j = 0; Quantity > 0; j++)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock stock = stockList[j];
 | 
			
		||||
                                if (Quantity > stock.Quantity)
 | 
			
		||||
                                {
 | 
			
		||||
                                    // 取药数量大于库存
 | 
			
		||||
                                    tempData.Add(new BoxTakeVo()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        Drug = boxCs.Drug,
 | 
			
		||||
                                        BoxDetail = boxCs,
 | 
			
		||||
                                        ChannelStock = stock,
 | 
			
		||||
                                        StockQuantity = total,
 | 
			
		||||
                                        Quantity = stock.Quantity,
 | 
			
		||||
                                    });
 | 
			
		||||
                                    Quantity -= stock.Quantity;
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //取药数量小于库存
 | 
			
		||||
                                    tempData.Add(new BoxTakeVo()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        Drug = boxCs.Drug,
 | 
			
		||||
                                        BoxDetail = boxCs,
 | 
			
		||||
                                        ChannelStock = stock,
 | 
			
		||||
                                        StockQuantity = total,
 | 
			
		||||
                                        Quantity = Quantity,
 | 
			
		||||
                                    });
 | 
			
		||||
                                    Quantity = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            // 库存不足
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
                    return tempData;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return tempData2;
 | 
			
		||||
                }
 | 
			
		||||
                return tempData;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1167,5 +1119,523 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // 手术室药箱待入库明细入库完成
 | 
			
		||||
        public async Task<bool> BoxAddBoxFinish(ChannelList boxChannelList)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                bool flag = true;
 | 
			
		||||
                int totalQuantity =0;
 | 
			
		||||
                for (var i = 0; i < boxChannelList.ChannelStocks.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    var EffDate = boxChannelList.ChannelStocks[i].EffDate;
 | 
			
		||||
                    //效期转换出错
 | 
			
		||||
                    if (boxChannelList.ChannelStocks[i].EffDate != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        string[] idate = boxChannelList.ChannelStocks[i].EffDate.Split('/');
 | 
			
		||||
                        foreach (string iS in idate)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (!string.IsNullOrEmpty(iS.Trim()))
 | 
			
		||||
                            {
 | 
			
		||||
                                switch (iS.Trim().Length)
 | 
			
		||||
                                {
 | 
			
		||||
                                    case 4:
 | 
			
		||||
                                        EffDate = iS.Trim();
 | 
			
		||||
                                        break;
 | 
			
		||||
                                    case 2:
 | 
			
		||||
                                        EffDate += "-" + iS.Trim();
 | 
			
		||||
                                        break;
 | 
			
		||||
                                    case 1:
 | 
			
		||||
                                        EffDate += "-0" + iS.Trim();
 | 
			
		||||
                                        break;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    // 手术室药箱入库记录
 | 
			
		||||
                    int mid = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = _setting.boxMachineId,
 | 
			
		||||
                        DrawerNo = boxChannelList.ChannelStocks[i].DrawerNo, 
 | 
			
		||||
                        DrugId = boxChannelList.ChannelStocks[i].DrugId,
 | 
			
		||||
                        ManuNo = boxChannelList.ChannelStocks[i].ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(EffDate) ? DateTime.ParseExact(EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Type = 1,
 | 
			
		||||
                        Quantity = boxChannelList.ChannelStocks[i].AddToQuantity,
 | 
			
		||||
                        Operator = _globalStateService.Operator.Id,
 | 
			
		||||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
			
		||||
                        InvoiceId = boxChannelList.ChannelStocks[i].Id.ToString(),
 | 
			
		||||
                    });
 | 
			
		||||
                    // 更新库存
 | 
			
		||||
                    boxChannelList.ChannelStocks[i].Quantity= boxChannelList.ChannelStocks[i].Quantity+ boxChannelList.ChannelStocks[i].AddToQuantity;
 | 
			
		||||
                    boxChannelList.ChannelStocks[i].AddToQuantity = 0;
 | 
			
		||||
                    boxChannelList.ChannelStocks[i].NeedQuantity = 0;
 | 
			
		||||
                    boxChannelList.ChannelStocks[i].BoxState=0;
 | 
			
		||||
                    boxChannelList.ChannelStocks[i].EffDate = EffDate;
 | 
			
		||||
                    int r = _connection.Update(boxChannelList.ChannelStocks[i]);
 | 
			
		||||
 | 
			
		||||
                    totalQuantity += _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxChannelList.DrugId) && p.DrugId == boxChannelList.ChannelStocks[i].DrugId).Sum(p => p.BaseQuantity);
 | 
			
		||||
                  
 | 
			
		||||
                    if (!(mid > 0 && r > 0 ))                   
 | 
			
		||||
                    {
 | 
			
		||||
                        flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
                    boxChannelList.TotalQuantity+= totalQuantity;
 | 
			
		||||
                    int updateResult = _connection
 | 
			
		||||
                        .Update(boxChannelList);
 | 
			
		||||
                    if (updateResult > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        _connection.CommitTransaction();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {                         flag = false;
 | 
			
		||||
                        _connection.RollbackTransaction();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _connection.RollbackTransaction();
 | 
			
		||||
                }
 | 
			
		||||
                return flag;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"手术室药箱待入库明细入库完成操作异常:{ex.Message}");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //手术室药箱获取药箱药品及库存信息
 | 
			
		||||
        public async Task<PageData<PlanDetails>> GetBoxDrugInfo(int DrawerNo, int? take, int? skip)
 | 
			
		||||
        {
 | 
			
		||||
            var query = _connection.PlanDetails.AsQueryable()
 | 
			
		||||
                .InnerJoin(
 | 
			
		||||
                _connection.ChannelList.Where(cl => cl.MachineId == _setting.boxMachineId && cl.DrawerNo.Equals(DrawerNo)),
 | 
			
		||||
                (pd, cl) => pd.PlanId.ToString() == cl.DrugId,
 | 
			
		||||
                (pd, cl) => pd).Where(pd=>pd.UseState==1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            int pagedData = await query.CountAsync();
 | 
			
		||||
 | 
			
		||||
            List<PlanDetails> list = await query
 | 
			
		||||
                .LoadWith(pd => pd._DrugInfo)
 | 
			
		||||
                //.LoadWith(pd => cl._PlanDetails._DrugInfo)
 | 
			
		||||
                .OrderBy((pd) => pd.DrugId)
 | 
			
		||||
                //.ThenBy((cl) => cl.ColNo)
 | 
			
		||||
                .Skip((int)skip)
 | 
			
		||||
                .Take((int)take)
 | 
			
		||||
                .ToListAsync();
 | 
			
		||||
            if (list != null && list.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < list.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    list[i].channelStocks = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                        .Where(cs => cs.MachineId == _setting.boxMachineId && cs.DrawerNo == DrawerNo && cs.DrugId == list[i].DrugId)
 | 
			
		||||
                        .LoadWith(cs => cs.Drug)
 | 
			
		||||
                        .LoadWith(cs => cs.Drug.Manus)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //List<ChannelStock> list = await query
 | 
			
		||||
            //    .LoadWith(cl => cl.Drug)
 | 
			
		||||
            //    .LoadWith(cl => cl.Drug.Manus)
 | 
			
		||||
            //    .LoadWith(cl => cl.drugManuNo)
 | 
			
		||||
            //    .OrderBy((cl) => cl.DrawerNo)
 | 
			
		||||
            //    .ThenBy((cl) => cl.ColNo)
 | 
			
		||||
            //    .Skip((int)skip)
 | 
			
		||||
            //    .Take((int)take)
 | 
			
		||||
            //    .ToListAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return new PageData<PlanDetails>()
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                TotalDesserts = pagedData,
 | 
			
		||||
                Desserts = list
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //药箱移库时获取选中药箱号的药品信息
 | 
			
		||||
        public async Task<PageData<ChannelStock>> GetChannelStockByDrug(ChannelStock cs, int drawerNo, int? take, int? skip)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var query = _connection.ChannelStock.AsQueryable().Where(c => c.MachineId == _setting.boxMachineId && c.DrawerNo.Equals(drawerNo) && c.DrugId.Equals(cs.DrugId) && c.ManuNo != cs.ManuNo && c.EffDate != cs.EffDate);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                int pagedData = await query.CountAsync();
 | 
			
		||||
 | 
			
		||||
                List<ChannelStock> list = await query
 | 
			
		||||
                    .LoadWith(cs => cs.Drug)
 | 
			
		||||
                    .OrderBy((cs) => cs.DrugId)
 | 
			
		||||
                    .Skip((int)skip)
 | 
			
		||||
                    .Take((int)take)
 | 
			
		||||
                    .ToListAsync();
 | 
			
		||||
 | 
			
		||||
                return new PageData<ChannelStock>()
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    TotalDesserts = pagedData,
 | 
			
		||||
                    Desserts = list
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"药箱移库时获取选中药箱号的药品信息异常:{ex.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药箱交换药品获取所有除本药箱外的所有药箱号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="machineId"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<int[]> GetDrawerNum(ChannelStock channelStock)
 | 
			
		||||
        {
 | 
			
		||||
            int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo && !string.IsNullOrEmpty(cs.ManuNo) && cs.ManuNo != channelStock.ManuNo)
 | 
			
		||||
                .GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
 | 
			
		||||
            return ints;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药箱移除药品,获取所有除本药箱外的所有包含该药品的药箱号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="machineId"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<int[]> GetDrawerNumForRemove(ChannelStock channelStock)
 | 
			
		||||
        {
 | 
			
		||||
            int[] ints = _connection.ChannelStock.Where(cs => cs.MachineId == channelStock.MachineId && cs.DrugId == channelStock.DrugId && cs.DrawerNo != channelStock.DrawerNo).GroupBy(cs => cs.DrawerNo).Select(cs => cs.Key).ToArray();
 | 
			
		||||
            return ints;
 | 
			
		||||
        }
 | 
			
		||||
        //手术室药箱交换药品完成
 | 
			
		||||
        public async Task<bool> BoxReplaceFinish(ChannelStock stock, List<ChannelStock> stockList)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                bool flag = true;
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                for (int i = 0; i < stockList.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    //查询出药的药箱是否有该批次的药品
 | 
			
		||||
                    ChannelStock replace1ChannelStock = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                        .Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stock.DrawerNo && cs.DrugId == stockList[i].DrugId && cs.ManuNo == stockList[i].ManuNo && cs.EffDate == stockList[i].EffDate)
 | 
			
		||||
                        .FirstOrDefault();
 | 
			
		||||
                    if (replace1ChannelStock != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        //如果有该批次的药品,则更新数量
 | 
			
		||||
                        int r = _connection.ChannelStock.Where(cs => cs.Id == replace1ChannelStock.Id)
 | 
			
		||||
                            .Set(cs => cs.Quantity, replace1ChannelStock.Quantity + stockList[i].AddQuantity)
 | 
			
		||||
                            .Update();
 | 
			
		||||
                        if (r <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //如果没有该批次的药品,则新增一条记录
 | 
			
		||||
                        int mid = _connection.Insert(new ChannelStock()
 | 
			
		||||
                        {
 | 
			
		||||
                            Id = Guid.NewGuid().ToString(),
 | 
			
		||||
                            MachineId = stockList[i].MachineId,
 | 
			
		||||
                            DrawerNo = stock.DrawerNo,
 | 
			
		||||
                            DrugId = stockList[i].DrugId,
 | 
			
		||||
                            ManuNo = stockList[i].ManuNo,
 | 
			
		||||
                            EffDate = stockList[i].EffDate,
 | 
			
		||||
                            Quantity = stockList[i].AddToQuantity,
 | 
			
		||||
                            BaseQuantity = stockList[i].BaseQuantity,
 | 
			
		||||
                            BoxState = 1
 | 
			
		||||
                        });
 | 
			
		||||
                        if (mid <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    //记录操作记录
 | 
			
		||||
                    int recordId = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = stock.MachineId,
 | 
			
		||||
                        DrawerNo = stock.DrawerNo,
 | 
			
		||||
                        DrugId = stock.DrugId,
 | 
			
		||||
                        ManuNo = stock.ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Type = 69, //交换
 | 
			
		||||
                        Quantity = stockList[i].AddQuantity,
 | 
			
		||||
                        Operator = _globalStateService.Operator.Id,
 | 
			
		||||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
			
		||||
                        InvoiceId = stockList[i].Id.ToString(),
 | 
			
		||||
                    });
 | 
			
		||||
                    if (recordId <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                        flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    //更新入药的药箱中的药品数量
 | 
			
		||||
                    ChannelStock replace2ChannelStock = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                         .Where(cs => cs.MachineId == stockList[i].MachineId && cs.DrawerNo == stockList[i].DrawerNo && cs.DrugId == stock.DrugId && cs.ManuNo == stock.ManuNo && cs.EffDate == stock.EffDate)
 | 
			
		||||
                         .FirstOrDefault();
 | 
			
		||||
                    if (replace2ChannelStock != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        //如果有该批次的药品,则更新数量
 | 
			
		||||
                        int r = _connection.ChannelStock.Where(cs => cs.Id == replace2ChannelStock.Id)
 | 
			
		||||
                            .Set(cs => cs.Quantity, replace2ChannelStock.Quantity + stockList[i].AddQuantity)
 | 
			
		||||
                            .Update();
 | 
			
		||||
                        if (r <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"更新药箱药品数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //如果没有该批次的药品,则新增一条记录
 | 
			
		||||
                        int mid = _connection.Insert(new ChannelStock()
 | 
			
		||||
                        {
 | 
			
		||||
                            Id = Guid.NewGuid().ToString(),
 | 
			
		||||
                            MachineId = stockList[i].MachineId,
 | 
			
		||||
                            DrawerNo = stockList[i].DrawerNo,
 | 
			
		||||
                            DrugId = stock.DrugId,
 | 
			
		||||
                            ManuNo = stock.ManuNo,
 | 
			
		||||
                            EffDate = stock.EffDate,
 | 
			
		||||
                            Quantity = stockList[i].AddQuantity,
 | 
			
		||||
                            BaseQuantity = stock.BaseQuantity,
 | 
			
		||||
                            BoxState = 1
 | 
			
		||||
                        });
 | 
			
		||||
                        if (mid <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"新增药箱药品记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    //记录操作记录
 | 
			
		||||
                    int record2Id = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = stockList[i].MachineId,
 | 
			
		||||
                        DrawerNo = stockList[i].DrawerNo,
 | 
			
		||||
                        DrugId = stockList[i].DrugId,
 | 
			
		||||
                        ManuNo = stockList[i].ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(stockList[i].EffDate) ? DateTime.ParseExact(stockList[i].EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Type = 69, //交换
 | 
			
		||||
                        Quantity = stockList[i].AddQuantity,
 | 
			
		||||
                        Operator = _globalStateService.Operator.Id,
 | 
			
		||||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
			
		||||
                        InvoiceId = stock.Id.ToString(),
 | 
			
		||||
                    });
 | 
			
		||||
                    if (record2Id <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}");
 | 
			
		||||
                        flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    //出库药箱减数量
 | 
			
		||||
                    int updateQuantity = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
 | 
			
		||||
                           .Set(cs => cs.Quantity, stock.Quantity - stockList[i].AddQuantity)
 | 
			
		||||
                           .Update();
 | 
			
		||||
                    if (updateQuantity <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"更新出库药箱药品减数量失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                        flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    //入库药箱减数量
 | 
			
		||||
                    int updateQuantity2 = _connection.ChannelStock.Where(cs => cs.Id == stockList[i].Id)
 | 
			
		||||
                            .Set(cs => cs.Quantity, stockList[i].Quantity - stockList[i].AddQuantity)
 | 
			
		||||
                            .Update();
 | 
			
		||||
                    if (updateQuantity2 <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"更新入库药箱药品减数量失败,药箱号:{stockList[i].DrawerNo},药品ID:{stockList[i].DrugId}"); flag = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    _connection.CommitTransaction();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _connection.RollbackTransaction();
 | 
			
		||||
                }
 | 
			
		||||
                return flag;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"手术室药箱交换药品完成异常:{ex.Message}");
 | 
			
		||||
                _connection.RollbackTransaction();
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //手术室药箱移出药品完成
 | 
			
		||||
        public async Task<bool> BoxRemoveFinish(ChannelStock stock, int SelectedDrawerNo, int removeQuantity)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                bool flag = true;
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                //查询移入的药品是否有库存
 | 
			
		||||
                ChannelStock inChannelStock = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                       .Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId && cs.ManuNo == stock.ManuNo && cs.EffDate == stock.EffDate)
 | 
			
		||||
                       .FirstOrDefault();
 | 
			
		||||
                if (inChannelStock != null)
 | 
			
		||||
                {
 | 
			
		||||
                    //如果有该批次的药品,则更新数量
 | 
			
		||||
                    int r = _connection.ChannelStock.Where(cs => cs.Id == inChannelStock.Id)
 | 
			
		||||
                        .Set(cs => cs.Quantity, inChannelStock.Quantity + removeQuantity)
 | 
			
		||||
                        .Update();
 | 
			
		||||
                    if (r <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"手术室药箱移出药品更新数量失败,药箱号:{SelectedDrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //如果没有该批次的药品,先查询是否有未绑批次的,有则更新批次信息,无则新增一条记录
 | 
			
		||||
                    ChannelStock inDrugChannelStock = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                      .Where(cs => cs.MachineId == stock.MachineId && cs.DrawerNo == SelectedDrawerNo && cs.DrugId == stock.DrugId)
 | 
			
		||||
                      .FirstOrDefault();
 | 
			
		||||
                    if (inDrugChannelStock != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        int mid = _connection.ChannelStock.Where(cs => cs.Id == inDrugChannelStock.Id)
 | 
			
		||||
                        .Set(cs => cs.Quantity, removeQuantity)
 | 
			
		||||
                        .Set(cs => cs.ManuNo, stock.ManuNo)
 | 
			
		||||
                        .Set(cs => cs.EffDate, stock.EffDate)
 | 
			
		||||
                        .Update();
 | 
			
		||||
                        if (mid <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"更新药箱药品批次记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        int mid = _connection.Insert(new ChannelStock()
 | 
			
		||||
                        {
 | 
			
		||||
                            Id = Guid.NewGuid().ToString(),
 | 
			
		||||
                            MachineId = stock.MachineId,
 | 
			
		||||
                            DrawerNo = SelectedDrawerNo,
 | 
			
		||||
                            DrugId = stock.DrugId,
 | 
			
		||||
                            ManuNo = stock.ManuNo,
 | 
			
		||||
                            EffDate = stock.EffDate,
 | 
			
		||||
                            Quantity = removeQuantity,
 | 
			
		||||
                            BaseQuantity = stock.BaseQuantity,
 | 
			
		||||
                            BoxState = 1
 | 
			
		||||
                        });
 | 
			
		||||
                        if (mid <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"新增药箱药品记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
                    //减本库位库存数量
 | 
			
		||||
                    int updateQuantity2 = _connection.ChannelStock.Where(cs => cs.Id == stock.Id)
 | 
			
		||||
                            .Set(cs => cs.Quantity, stock.Quantity - removeQuantity)
 | 
			
		||||
                            .Update();
 | 
			
		||||
                    if (updateQuantity2 <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"更新入库药箱药品减数量失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                        flag = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        int updateTotalQuantity = 0;
 | 
			
		||||
                        int updateMoveToTotalQuantity = 0;
 | 
			
		||||
                        //修改总库存数
 | 
			
		||||
                        ChannelList channelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == stock.DrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault();
 | 
			
		||||
                        if (channelList != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == channelList.Id)
 | 
			
		||||
                                .Set(cl => cl.TotalQuantity, channelList.TotalQuantity - removeQuantity)
 | 
			
		||||
                                .Update();
 | 
			
		||||
                        }
 | 
			
		||||
                        //修改移入药箱的总库存数
 | 
			
		||||
                        ChannelList moveToChannelList = _connection.ChannelList.Where(cl => cl.MachineId == stock.MachineId && cl.DrawerNo == SelectedDrawerNo && cl.DrugId == stock.DrugId).FirstOrDefault();
 | 
			
		||||
                        if (moveToChannelList != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            updateTotalQuantity = _connection.ChannelList.Where(cl => cl.Id == moveToChannelList.Id)
 | 
			
		||||
                                .Set(cl => cl.TotalQuantity, channelList.TotalQuantity + removeQuantity)
 | 
			
		||||
                                .Update();
 | 
			
		||||
                        }
 | 
			
		||||
                        if (updateTotalQuantity > 0 && updateMoveToTotalQuantity > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            flag = true;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    if (flag)
 | 
			
		||||
                    {
 | 
			
		||||
                        //记录操作记录
 | 
			
		||||
                        int recordId = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
			
		||||
                        {
 | 
			
		||||
                            MachineId = stock.MachineId,
 | 
			
		||||
                            DrawerNo = stock.DrawerNo,
 | 
			
		||||
                            ColNo = SelectedDrawerNo,//移入的药箱号
 | 
			
		||||
                            DrugId = stock.DrugId,
 | 
			
		||||
                            ManuNo = stock.ManuNo,
 | 
			
		||||
                            EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                            OperationTime = DateTime.Now,
 | 
			
		||||
                            Type = 21, //交换
 | 
			
		||||
                            Quantity = removeQuantity,
 | 
			
		||||
                            Operator = _globalStateService.Operator.Id,
 | 
			
		||||
                            Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
			
		||||
                            InvoiceId = stock.Id.ToString(),
 | 
			
		||||
                        });
 | 
			
		||||
                        if (recordId <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"药箱{stock.DrawerNo}交换药品新增操作记录失败,药箱号:{stock.DrawerNo},药品ID:{stock.DrugId}");
 | 
			
		||||
                            flag = false;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    _connection.CommitTransaction();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _connection.RollbackTransaction();
 | 
			
		||||
                }
 | 
			
		||||
                return flag;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"手术室药箱移出药品异常{ex.Message}");
 | 
			
		||||
                _connection.RollbackTransaction();
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,8 +68,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            int pagedData = await query.CountAsync();
 | 
			
		||||
 | 
			
		||||
            List<OrderInfo> list = await query
 | 
			
		||||
                .LoadWith(oi => oi.Detail)
 | 
			
		||||
                .LoadWith(oi => oi.Detail.Drug)
 | 
			
		||||
                //.LoadWith(oi => oi.Detail)
 | 
			
		||||
                //.LoadWith(oi => oi.Detail.Drug)
 | 
			
		||||
                .OrderBy((oi) => oi.RecvDate)
 | 
			
		||||
                .ThenBy((oi => oi.OrderNo))
 | 
			
		||||
                .Skip((int)skip)
 | 
			
		||||
| 
						 | 
				
			
			@ -590,10 +590,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
        /// <returns></returns>
 | 
			
		||||
        public async Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip)
 | 
			
		||||
        {
 | 
			
		||||
            //var query = _connection.OrderInfo.AsQueryable();
 | 
			
		||||
 | 
			
		||||
            //query.InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo);
 | 
			
		||||
 | 
			
		||||
            var query2 = from od in _connection.OrderDetail
 | 
			
		||||
                         from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
 | 
			
		||||
                         group od by od.OrderNo into temp
 | 
			
		||||
| 
						 | 
				
			
			@ -601,7 +597,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            var query = from oi in _connection.OrderInfo
 | 
			
		||||
                        from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
 | 
			
		||||
                        select oi;
 | 
			
		||||
 | 
			
		||||
            if (!String.IsNullOrEmpty(OrderrNo))
 | 
			
		||||
            {
 | 
			
		||||
                query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
 | 
			
		||||
| 
						 | 
				
			
			@ -619,8 +614,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            int pagedData = await query.CountAsync();
 | 
			
		||||
 | 
			
		||||
            List<OrderInfo> list = await query
 | 
			
		||||
                //.LoadWith(oi => oi.Detail)
 | 
			
		||||
                //.LoadWith(oi => oi.Detail.Drug)
 | 
			
		||||
                //.LoadWith(oi => oi.DetailList)
 | 
			
		||||
                .OrderBy((oi) => oi.RecvDate)
 | 
			
		||||
                .ThenBy((oi => oi.OrderNo))
 | 
			
		||||
                .Skip((int)skip)
 | 
			
		||||
| 
						 | 
				
			
			@ -630,12 +624,56 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            {
 | 
			
		||||
                for (int i = 0; i < list.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    //list[i].Detail = await _connection.OrderDetail.AsQueryable()
 | 
			
		||||
                    //    .Where(od => od.OrderNo == list[i].OrderNo)
 | 
			
		||||
                    //    .LoadWith(od => od.Drug)
 | 
			
		||||
                    for (int j = 0; j < list[i].DetailList.Count; j++)
 | 
			
		||||
                    {
 | 
			
		||||
                        list[i].DetailList[j].Drug = await _connection.DrugInfo.AsQueryable().Where(d => d.DrugId == list[i].DetailList[j].DrugId).FirstOrDefaultAsync();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //var query2 = from od in _connection.OrderDetail
 | 
			
		||||
            //             from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
 | 
			
		||||
            //             group od by od.OrderNo into temp
 | 
			
		||||
            //             select new { temp.Key };
 | 
			
		||||
            //var query = from oi in _connection.OrderInfo
 | 
			
		||||
            //            from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
 | 
			
		||||
            //            select oi;
 | 
			
		||||
 | 
			
		||||
            //if (!String.IsNullOrEmpty(OrderrNo))
 | 
			
		||||
            //{
 | 
			
		||||
            //    query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
 | 
			
		||||
            //}
 | 
			
		||||
            //if (OrderDate != null && OrderDate != DateTime.MinValue)
 | 
			
		||||
            //{
 | 
			
		||||
            //    query = query.Where(oi => oi.OrderDate.Date.Equals(OrderDate.Date));
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            //query = query.Where(oi => oi.Status == 0);
 | 
			
		||||
            //query = query.Where(oi => oi.HisDispFlag == 0);
 | 
			
		||||
            //query = query.Where(oi => oi.CancelFlag == 0);
 | 
			
		||||
            ////query = query.Where(oi => oi.DoctorCode == box);
 | 
			
		||||
 | 
			
		||||
            //int pagedData = await query.CountAsync();
 | 
			
		||||
 | 
			
		||||
            //List<OrderInfo> list = await query
 | 
			
		||||
            //    .LoadWith(oi => oi.Detail)
 | 
			
		||||
            //    .LoadWith(oi => oi.Detail.Drug)
 | 
			
		||||
            //    .OrderBy((oi) => oi.RecvDate)
 | 
			
		||||
            //    .ThenBy((oi => oi.OrderNo))
 | 
			
		||||
            //    .Skip((int)skip)
 | 
			
		||||
            //    .Take((int)take)
 | 
			
		||||
            //    .ToListAsync();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //if (list != null && list.Count > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    for (int i = 0; i < list.Count; i++)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        //list[i].Detail = await _connection.OrderDetail.AsQueryable()
 | 
			
		||||
            //        //    .Where(od => od.OrderNo == list[i].OrderNo)
 | 
			
		||||
            //        //    .LoadWith(od => od.Drug)
 | 
			
		||||
            //        //    .ToListAsync();
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            return new PageData<OrderInfo>()
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -670,9 +708,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                    OrderInfo oi = selectedOrderInfos[i];
 | 
			
		||||
 | 
			
		||||
                    //更新处方状态
 | 
			
		||||
                    if (oi.state == 1)
 | 
			
		||||
                    if (oi.Status == 1)
 | 
			
		||||
                    {
 | 
			
		||||
                        int iUpdate= _connection.OrderInfo.Where(o=>o.OrderNo==oi.OrderNo).Set(o=>o.state,2).Update();
 | 
			
		||||
                        int iUpdate = _connection.OrderInfo.Where(o => o.OrderNo == oi.OrderNo).Set(o => o.Status, 2).Update();
 | 
			
		||||
                        _connection.Insert(new OrderFinish()
 | 
			
		||||
                        {
 | 
			
		||||
                            OrderNo = oi.OrderNo,
 | 
			
		||||
| 
						 | 
				
			
			@ -683,25 +721,34 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                            Operator = _globalStateService.Operator.NickName,
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                    int drawerNo = DrawerNo + 1;
 | 
			
		||||
                    int drawerNo = DrawerNo;
 | 
			
		||||
                    if (oi.DetailList != null && oi.DetailList.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int j = 0; j < oi.DetailList.Count; j++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock cs = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                                     .Where(cs => cs.DrugId == oi.Detail.DrugId
 | 
			
		||||
                                            && cs.ManuNo == oi.Detail.SetManuNo
 | 
			
		||||
                                             .Where(cs => cs.DrugId == oi.DetailList[j].DrugId
 | 
			
		||||
                                                    && cs.ManuNo == oi.DetailList[j].SetManuNo
 | 
			
		||||
                                                    // && cs.EffDate == oi._OrderDetail.SetEffDate
 | 
			
		||||
                                                    && cs.MachineId.Equals(_setting.boxMachineId)
 | 
			
		||||
                                                    && cs.DrawerNo == drawerNo
 | 
			
		||||
                                            && cs.Quantity >= oi.Detail.Quantity).First();
 | 
			
		||||
                                                    && cs.Quantity >= oi.DetailList[j].Quantity).First();
 | 
			
		||||
                            if (cs == null)
 | 
			
		||||
                            {
 | 
			
		||||
                        logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.Detail.DrugId}-{oi.Detail.SetManuNo}在{drawerNo}药箱无库存");
 | 
			
		||||
                                logger.Info($"手麻单{oi.OrderNo}对药品批次{oi.DetailList[j].DrugId}-{oi.DetailList[j].SetManuNo}在{drawerNo}药箱无库存");
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                    cs.Quantity = cs.Quantity - oi.Detail.Quantity;
 | 
			
		||||
                            cs.Quantity = cs.Quantity - oi.DetailList[j].Quantity;
 | 
			
		||||
                            //cs.NeedNum = cs.NeedNum > 0 ? cs.NeedNum + oi._OrderDetail.Quantity : oi._OrderDetail.Quantity;
 | 
			
		||||
                    logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.Detail.Quantity}");
 | 
			
		||||
                            logger.Info($"更新手术间{cs.DrawerNo}药品{cs.DrugId}批次{cs.ManuNo}库存为{cs.Quantity},需补药数量为{oi.DetailList[j].Quantity}");
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            _connection.Update(cs);
 | 
			
		||||
 | 
			
		||||
                            //更新ChannelList对应的总库存
 | 
			
		||||
                            ChannelList channelList = _connection.ChannelList.AsQueryable().Where(cl => cl.MachineId.Equals(cs.MachineId) && cl.Id.Equals(cs.ListId) && cl.DrawerNo.Equals(cs.DrawerNo)).FirstOrDefault();
 | 
			
		||||
                            channelList.TotalQuantity = channelList.TotalQuantity - oi.DetailList[j].Quantity;
 | 
			
		||||
                            _connection.Update(channelList);
 | 
			
		||||
 | 
			
		||||
                            // 获取更新完库存后的药品库存
 | 
			
		||||
                            List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
 | 
			
		||||
                                .Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
 | 
			
		||||
| 
						 | 
				
			
			@ -709,6 +756,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                .Where(it => it.ManuNo.Equals(cs.ManuNo))
 | 
			
		||||
                                .Where(it => it.DrawerType == 1)
 | 
			
		||||
                                .ToList();
 | 
			
		||||
 | 
			
		||||
                            if (cs != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                _connection.Insert(new MachineRecord()
 | 
			
		||||
| 
						 | 
				
			
			@ -722,7 +770,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    Operator = _globalStateService.Operator?.Id,
 | 
			
		||||
                                    Reviewer = _globalStateService.Reviewer?.Id,
 | 
			
		||||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                            Quantity = oi.Detail.Quantity,
 | 
			
		||||
                                    Quantity = oi.DetailList[j].Quantity,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    InvoiceId = oi.OrderNo
 | 
			
		||||
                                    //, StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
| 
						 | 
				
			
			@ -733,18 +781,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 1 || ab.Type == 2)
 | 
			
		||||
                        .Where(ab => ab.DrugId == oi.Detail.DrugId)
 | 
			
		||||
                                .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
 | 
			
		||||
                                .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
 | 
			
		||||
                                //保存账册
 | 
			
		||||
                                int iInsertResult = _connection.Insert(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                            DrugId = oi.Detail.DrugId,
 | 
			
		||||
                                    DrugId = oi.DetailList[j].DrugId,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    Department = oi.DeptName,
 | 
			
		||||
                                    OrderNo = oi.OrderNo,
 | 
			
		||||
                                    ManuNo = cs.ManuNo,
 | 
			
		||||
                                    EffDate = cs.EffDate,
 | 
			
		||||
                            OutQuantity = oi.Detail.Quantity,
 | 
			
		||||
                                    OutQuantity = oi.DetailList[j].Quantity,
 | 
			
		||||
                                    UserId1 = _globalStateService.Operator?.Id,
 | 
			
		||||
                                    UserId2 = _globalStateService.Reviewer?.Id,
 | 
			
		||||
                                    MachineId = _setting.machineId,
 | 
			
		||||
| 
						 | 
				
			
			@ -752,19 +800,19 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    CreateTime = DateTime.Now,
 | 
			
		||||
                                    InvoiceNo = oi.OrderNo,
 | 
			
		||||
                                    ManuStock = nowChannels.Sum(it => it.Quantity),
 | 
			
		||||
                            TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.Detail.Quantity,
 | 
			
		||||
                                    TotalStock = (accountBookEmpty != null ? (accountBookEmpty.TotalStock > 0 ? accountBookEmpty.TotalStock : 0) : 0) + oi.DetailList[j].Quantity,
 | 
			
		||||
                                    ShoushuJian = drawerNo.ToString()
 | 
			
		||||
                                });
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 3)
 | 
			
		||||
                        .Where(ab => ab.DrugId == oi.Detail.DrugId)
 | 
			
		||||
                                .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
 | 
			
		||||
                                .Where(ab => ab.ManuNo == cs.ManuNo)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Day != null)
 | 
			
		||||
                                {
 | 
			
		||||
                            accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity;
 | 
			
		||||
                                    accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity;
 | 
			
		||||
                                    _connection.Update(accountBookG2Day);
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
| 
						 | 
				
			
			@ -772,13 +820,13 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                    int iDayResult = _connection.Insert(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                DrugId = oi.Detail.DrugId,
 | 
			
		||||
                                        DrugId = oi.DetailList[j].DrugId,
 | 
			
		||||
                                        Type = 3,
 | 
			
		||||
                                        ManuNo = cs.ManuNo,
 | 
			
		||||
                                        EffDate = cs.EffDate,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                ManuStock = oi.Detail.Quantity,
 | 
			
		||||
                                TotalStock = oi.Detail.Quantity,
 | 
			
		||||
                                        ManuStock = oi.DetailList[j].Quantity,
 | 
			
		||||
                                        TotalStock = oi.DetailList[j].Quantity,
 | 
			
		||||
                                        UserId1 = _globalStateService.Operator?.Id,
 | 
			
		||||
                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
			
		||||
                                        MachineId = _setting.machineId,
 | 
			
		||||
| 
						 | 
				
			
			@ -787,18 +835,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    });
 | 
			
		||||
                                    if (iDayResult <= 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                logger.Info($"未写入日结存数据{oi.Detail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
 | 
			
		||||
                                        logger.Info($"未写入日结存数据{oi.DetailList[j].DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 4)
 | 
			
		||||
                        .Where(ab => ab.DrugId == oi.Detail.DrugId)
 | 
			
		||||
                                .Where(ab => ab.DrugId == oi.DetailList[j].DrugId)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Total != null)
 | 
			
		||||
                                {
 | 
			
		||||
                            accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity;
 | 
			
		||||
                                    accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity;
 | 
			
		||||
                                    _connection.Update(accountBookG2Total);
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
| 
						 | 
				
			
			@ -806,11 +854,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                    int iTotalResult = _connection.Insert(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                DrugId = oi.Detail.DrugId,
 | 
			
		||||
                                        DrugId = oi.DetailList[j].DrugId,
 | 
			
		||||
                                        Type = 4,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                ManuStock = oi.Detail.Quantity,
 | 
			
		||||
                                TotalStock = oi.Detail.Quantity,
 | 
			
		||||
                                        ManuStock = oi.DetailList[j].Quantity,
 | 
			
		||||
                                        TotalStock = oi.DetailList[j].Quantity,
 | 
			
		||||
                                        UserId1 = _globalStateService.Operator?.Id,
 | 
			
		||||
                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
			
		||||
                                        MachineId = _setting.machineId,
 | 
			
		||||
| 
						 | 
				
			
			@ -819,11 +867,14 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                                    });
 | 
			
		||||
                                    if (iTotalResult <= 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}");
 | 
			
		||||
                                        logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ using MasaBlazorApp3.DataAccess.Dao;
 | 
			
		|||
using MasaBlazorApp3.Pojo;
 | 
			
		||||
using MasaBlazorApp3.Pojo.Config;
 | 
			
		||||
using Microsoft.Extensions.Options;
 | 
			
		||||
using Org.BouncyCastle.Crypto;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Data.Common;
 | 
			
		||||
| 
						 | 
				
			
			@ -112,6 +113,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                plan.AddTime = DateTime.Now;
 | 
			
		||||
                plan.OperatorUser = _globalStateService.Operator.Id;
 | 
			
		||||
                plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
 | 
			
		||||
                plan.UseState = 1;
 | 
			
		||||
                return _connection.InsertWithInt32Identity(plan) > 0;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
| 
						 | 
				
			
			@ -143,6 +145,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //查询要删除的套餐下是否有绑定,且绑定有库存
 | 
			
		||||
        public async Task<bool> CheckPlanBind(int planId)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                //查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
 | 
			
		||||
                List<string> channelListsId =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.boxMachineId).Select(cl => cl.Id).ToListAsync();
 | 
			
		||||
                if (channelListsId != null && channelListsId.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    bool searchResult = _connection.ChannelStock.AsQueryable().Where(cs => channelListsId.Contains(cs.ListId)).Any(cs => cs.Quantity > 0);
 | 
			
		||||
                    if (searchResult)
 | 
			
		||||
                    {
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Error($"查询要删除的套餐下是否有绑定异常{ex.Message}");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 删除套餐
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -154,28 +188,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            {
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                bool flag = false;
 | 
			
		||||
                //查询是否有绑定,没有绑定可以删除,有绑定则不允许删除
 | 
			
		||||
                int hasCount = _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString() && cl.MachineId == _setting.machineId).Count();
 | 
			
		||||
                if (hasCount > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return flag;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                logger.Error($"删除套餐{planId}");
 | 
			
		||||
                //查询该套餐下是否有药品,如果有则一并删除
 | 
			
		||||
                int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
 | 
			
		||||
                int pdResult = 1;
 | 
			
		||||
                if (iHasPd > 0)
 | 
			
		||||
                {
 | 
			
		||||
                        pdResult = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).Update();
 | 
			
		||||
                    pdResult =await _connection.PlanDetails.Where(pd => pd.PlanId == planId).Set(pd => pd.UseState, 0).UpdateAsync();
 | 
			
		||||
                }
 | 
			
		||||
                    int pResult = _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).Update();
 | 
			
		||||
                    if (pdResult > 0 && pResult > 0)
 | 
			
		||||
                int pResult = await _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).UpdateAsync();
 | 
			
		||||
 | 
			
		||||
                //如果套餐下有绑药且库存为0的也将绑定药品信息一并删除
 | 
			
		||||
                List<string> listIds =await _connection.ChannelList.Where(cl => cl.DrugId == planId.ToString()).Select(cl => cl.Id).ToListAsync();
 | 
			
		||||
                int iDelResult = 1;
 | 
			
		||||
                int iDelChannelListResult = 1;
 | 
			
		||||
                if (listIds != null && listIds.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //删除channelStock表中的绑定药品
 | 
			
		||||
                    iDelResult = _connection.ChannelStock.Where(cs => listIds.Contains(cs.ListId)).Delete();
 | 
			
		||||
                    _connection.ChannelList.Where(cl => listIds.Contains(cl.Id)).Set(cl=>cl.DrugId,"").Update();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (pdResult > 0 && pResult > 0 && iDelResult > 0 && iDelChannelListResult > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    flag = true;
 | 
			
		||||
                }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (flag)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +246,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            {
 | 
			
		||||
                if (!string.IsNullOrEmpty(details.DrugId))
 | 
			
		||||
                {
 | 
			
		||||
                    int id = _connection.InsertWithInt32Identity(details);
 | 
			
		||||
                    int id =await _connection.InsertWithInt32IdentityAsync(details);
 | 
			
		||||
                    details.Id = id;
 | 
			
		||||
                    return id > 0;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -235,7 +274,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                  .Where(p => p.Id == details.Id)
 | 
			
		||||
                  .Set(p => p.DrugId, details._DrugInfo.DrugId)
 | 
			
		||||
                  .Set(p => p.BaseQuantity, details.BaseQuantity);
 | 
			
		||||
                return iResult.Update() > 0;
 | 
			
		||||
                return await iResult.UpdateAsync() > 0;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -244,6 +283,26 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //查询要删除的药品是否有绑定且库存大于0
 | 
			
		||||
        public async Task<bool> CheckPlanDetailBind(PlanDetails planDetail)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                bool bFlag = true;
 | 
			
		||||
                List<string> idList =await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == planDetail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync();
 | 
			
		||||
                if (idList != null && idList.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    bFlag = !(_connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == planDetail.DrugId).Any(cs => cs.Quantity > 0));
 | 
			
		||||
                }
 | 
			
		||||
                return bFlag;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Error($"查询要删除的药品是否有绑定异常{ex.Message}");
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 删除套餐中的药品
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -253,9 +312,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}");
 | 
			
		||||
                return _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p=>p.UseState,0).Update() > 0;
 | 
			
		||||
 | 
			
		||||
                int iDelResult = 1;
 | 
			
		||||
                //删除该套餐下该药品对应绑定的库位
 | 
			
		||||
                List<string> idList = await _connection.ChannelList.AsQueryable().Where(cl => cl.DrugId == detail.PlanId.ToString()).Select(cl => cl.Id).ToListAsync();
 | 
			
		||||
                if (idList != null && idList.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    iDelResult= await _connection.ChannelStock.AsQueryable().Where(cs => idList.Contains(cs.ListId) && cs.DrugId == detail.DrugId).DeleteAsync();
 | 
			
		||||
                }
 | 
			
		||||
                if (iDelResult > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    bool bUpdateResult= _connection.PlanDetails.Where(p => p.Id == detail.Id).Set(p => p.UseState, 0).Update() > 0;
 | 
			
		||||
                    if(bUpdateResult)
 | 
			
		||||
                    {
 | 
			
		||||
                        _connection.CommitTransaction();
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        _connection.RollbackTransaction();
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
using Google.Protobuf.WellKnownTypes;
 | 
			
		||||
using LinqToDB;
 | 
			
		||||
using log4net;
 | 
			
		||||
using MasaBlazorApp3.DataAccess.Dao;
 | 
			
		||||
using MasaBlazorApp3.Pojo;
 | 
			
		||||
using MasaBlazorApp3.Pojo.Config;
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +18,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
 | 
			
		||||
        private readonly AppDataConnection _connection;
 | 
			
		||||
        private readonly SettingConfig _setting;
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
 | 
			
		||||
 | 
			
		||||
        //public UserDao(MyContext context)
 | 
			
		||||
        //{
 | 
			
		||||
| 
						 | 
				
			
			@ -115,5 +117,50 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
			
		|||
                .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
 | 
			
		||||
            return statement.Update() > 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //查询当前值班信息
 | 
			
		||||
        public HkcChangeShifts GetOnDuty()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                return _connection.HkcChangeShifts.Where(cs => cs.MachineId == _setting.machineId && cs.State == "0").FirstOrDefault();
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"查询当前值班信息异常{ex.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //保存交接班信息
 | 
			
		||||
        public async Task<bool> UpdateChangeShift(HkcChangeShifts changeShift, HkcChangeShifts changeShiftNew)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                _connection.BeginTransaction();
 | 
			
		||||
                var insertResult = _connection.InsertWithInt32Identity(changeShiftNew);
 | 
			
		||||
 | 
			
		||||
                int updateResult = _connection.HkcChangeShifts
 | 
			
		||||
                     .Where(cs => cs.Id == changeShift.Id)
 | 
			
		||||
                     .Set(cs => cs.State, "1")
 | 
			
		||||
                     .Set(cs => cs.ToDate, DateTime.Now)
 | 
			
		||||
                     .Set(cs=>cs.ToOperator,changeShift.ToOperator).Update();
 | 
			
		||||
                if (insertResult <= 0 || updateResult <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _connection.RollbackTransaction();
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _connection.CommitTransaction();
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Error($"更新交接班信息异常: {ex.Message}");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
        <ImplicitUsings>enable</ImplicitUsings>
 | 
			
		||||
        <Nullable>enable</Nullable>
 | 
			
		||||
        <ApplicationIcon>favicon.ico</ApplicationIcon>
 | 
			
		||||
        <Platforms>AnyCPU;x64</Platforms>
 | 
			
		||||
    </PropertyGroup>
 | 
			
		||||
 | 
			
		||||
    <ItemGroup>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,12 +43,12 @@
 | 
			
		|||
<div class="container-fluid">
 | 
			
		||||
 | 
			
		||||
    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
			
		||||
                    IsLoading="@isLoading"
 | 
			
		||||
                    RowRender="@RowRender"
 | 
			
		||||
                    EmptyText="无数据"
 | 
			
		||||
                    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
			
		||||
                    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
			
		||||
                    SelectionMode="DataGridSelectionMode.Single"
 | 
			
		||||
                    SelectionMode="DataGridSelectionMode.Single" LoadData="@LoadData" IsLoading="@isLoading" 
 | 
			
		||||
                    Count="@count" AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据"
 | 
			
		||||
                    ExpandMode="DataGridExpandMode.Multiple">
 | 
			
		||||
        <Template Context="cs">
 | 
			
		||||
            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
			
		||||
| 
						 | 
				
			
			@ -95,9 +95,13 @@
 | 
			
		|||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        await base.OnInitializedAsync();
 | 
			
		||||
       
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
        var result = await channelStockDao.GetBoxWaitInfo(10, 0);
 | 
			
		||||
        var result = await channelStockDao.GetBoxWaitInfo(args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result.Desserts;
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +116,6 @@
 | 
			
		|||
            // await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void RowRender(RowRenderEventArgs<ChannelList> args)
 | 
			
		||||
    {
 | 
			
		||||
        args.Expandable = args.Data.ChannelStocks.Count > 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +124,7 @@
 | 
			
		|||
    async void OnRowSelect(ChannelList cl)
 | 
			
		||||
    {
 | 
			
		||||
        var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
 | 
			
		||||
               $"{cl.DrawerNo}号药箱取药",
 | 
			
		||||
               $"{cl.DrawerNo}号药箱药品入库",
 | 
			
		||||
             new Dictionary<string, object>() { { "boxChannelList", cl } },
 | 
			
		||||
             new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
			
		||||
       );
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,51 +8,20 @@
 | 
			
		|||
 | 
			
		||||
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
 | 
			
		||||
    <RadzenStack>
 | 
			
		||||
        @if (CanTakeDrug)
 | 
			
		||||
        {
 | 
			
		||||
            <RadzenDataGrid Data="@data" AllowAlternatingRows="false">
 | 
			
		||||
        <RadzenDataGrid Data="@boxChannelList.ChannelStocks" AllowAlternatingRows="true" 
 | 
			
		||||
                      AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
                <Columns>
 | 
			
		||||
                    <RadzenDataGridColumn Property="ChannelStock" Title="库位">
 | 
			
		||||
                        <Template>
 | 
			
		||||
                            @context.ChannelStock.DrawerNo - @context.ChannelStock.ColNo
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="ChannelStock.ManuNo" Title="批次" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="ChannelStock.EffDate" Title="效期" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="Quantity" Title="数量" />
 | 
			
		||||
                <RadzenDataGridColumn Property="ChannelStocks.Drug.DrugName" Title="药品" />
 | 
			
		||||
                <RadzenDataGridColumn Property="ChannelStocks.Drug.DrugSpec" Title="规格" />
 | 
			
		||||
                <RadzenDataGridColumn Property="AddToQuantity" Title="入药箱数量" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Quantity" Title="库存" />
 | 
			
		||||
                </Columns>
 | 
			
		||||
            </RadzenDataGrid>
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            <RadzenDataGrid Data="@data" AllowAlternatingRows="false">
 | 
			
		||||
                <Columns>
 | 
			
		||||
                    <RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="Quantity" Title="取药数量" />
 | 
			
		||||
                    <RadzenDataGridColumn Property="StockQuantity" Title="库存" />
 | 
			
		||||
                </Columns>
 | 
			
		||||
            </RadzenDataGrid>
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </RadzenStack>
 | 
			
		||||
    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
			
		||||
        @if (status < 2)
 | 
			
		||||
        {
 | 
			
		||||
            <RadzenButton Click="@OpenDrawer" Disabled="!CanTakeDrug" IsBusy="status > 0" BusyText="取药中。。。" ButtonStyle="ButtonStyle.Warning" Variant="Variant.Flat" Text="取药" Style="width: 120px" />
 | 
			
		||||
        }
 | 
			
		||||
        @if (status == 2)
 | 
			
		||||
        {
 | 
			
		||||
            <RadzenButton Click="@TakeFinish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
 | 
			
		||||
        }
 | 
			
		||||
        @if (status <= 2)
 | 
			
		||||
        {
 | 
			
		||||
        <RadzenButton Click="@Finish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="保存" Style="width: 120px" />
 | 
			
		||||
        <RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
</RadzenStack>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,10 +33,10 @@
 | 
			
		|||
    @inject PortUtil PortUtil;
 | 
			
		||||
    private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
 | 
			
		||||
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    // int status;
 | 
			
		||||
    bool isLoading;
 | 
			
		||||
    int count;
 | 
			
		||||
    [Parameter] public ChannelList boxChannelList { get; set; }
 | 
			
		||||
    private bool CanTakeDrug = true;
 | 
			
		||||
 | 
			
		||||
    public List<BoxTakeVo> data { get; set; }
 | 
			
		||||
    //称重取药数量
 | 
			
		||||
| 
						 | 
				
			
			@ -78,225 +47,212 @@
 | 
			
		|||
 | 
			
		||||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        data = await channelListDao.getTakeInfoByBox(boxChannelList);
 | 
			
		||||
        // 如果有【stockQuantity】字段说明有药品库存不足
 | 
			
		||||
        if (data.Any(it => it.ChannelStock == null))
 | 
			
		||||
        {
 | 
			
		||||
            CanTakeDrug = false;
 | 
			
		||||
        }
 | 
			
		||||
        base.OnInitializedAsync();
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
    async Task OpenDrawer()
 | 
			
		||||
    {
 | 
			
		||||
        this.status = 1;
 | 
			
		||||
        // 解析需要打开的抽屉列表
 | 
			
		||||
        List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
 | 
			
		||||
        data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
    // async Task OpenDrawer()
 | 
			
		||||
    // {
 | 
			
		||||
    //     this.status = 1;
 | 
			
		||||
    //     // 解析需要打开的抽屉列表
 | 
			
		||||
    //     List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
 | 
			
		||||
 | 
			
		||||
        // 根据抽屉类型来决定打开前是否需要查询数量
 | 
			
		||||
        var promiseUtil = new PromiseUtil<int>();
 | 
			
		||||
    //     // 根据抽屉类型来决定打开前是否需要查询数量
 | 
			
		||||
    //     var promiseUtil = new PromiseUtil<int>();
 | 
			
		||||
 | 
			
		||||
        await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
			
		||||
        {
 | 
			
		||||
            var orderTakeVo = drawerNos[options._data];
 | 
			
		||||
            var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                if (this.status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    stop();
 | 
			
		||||
                }
 | 
			
		||||
                // 开启抽屉
 | 
			
		||||
                else if (this.status == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    if (orderTakeVo.Status == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 判断是否为单支抽屉
 | 
			
		||||
                        if (setting.Value.single.Contains(drawerNo))
 | 
			
		||||
                        {
 | 
			
		||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
			
		||||
                            orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
			
		||||
                            logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
			
		||||
    //     await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
			
		||||
    //     {
 | 
			
		||||
    //         var orderTakeVo = drawerNos[options._data];
 | 
			
		||||
    //         var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
 | 
			
		||||
    //         try
 | 
			
		||||
    //         {
 | 
			
		||||
    //             if (this.status == 0)
 | 
			
		||||
    //             {
 | 
			
		||||
    //                 stop();
 | 
			
		||||
    //             }
 | 
			
		||||
    //             // 开启抽屉
 | 
			
		||||
    //             else if (this.status == 1)
 | 
			
		||||
    //             {
 | 
			
		||||
    //                 if (orderTakeVo.Status == 0)
 | 
			
		||||
    //                 {
 | 
			
		||||
    //                     // 判断是否为单支抽屉
 | 
			
		||||
    //                     if (setting.Value.single.Contains(drawerNo))
 | 
			
		||||
    //                     {
 | 
			
		||||
    //                         byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
			
		||||
    //                         orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
			
		||||
    //                         logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
			
		||||
 | 
			
		||||
                            await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
 | 
			
		||||
                        }
 | 
			
		||||
                        for (int i = 0; i < data.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
 | 
			
		||||
                            {
 | 
			
		||||
                                if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
			
		||||
                                {
 | 
			
		||||
                                    PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
			
		||||
                                    PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                         await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                     for (int i = 0; i < data.Count; i++)
 | 
			
		||||
    //                     {
 | 
			
		||||
    //                         if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
 | 
			
		||||
    //                         {
 | 
			
		||||
    //                             if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
			
		||||
    //                             {
 | 
			
		||||
    //                                 PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
			
		||||
    //                                 PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
			
		||||
 | 
			
		||||
                                    data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
			
		||||
                                    logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
			
		||||
                                    await Task.Delay(200);
 | 
			
		||||
                                }
 | 
			
		||||
    //                                 data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                                 logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
			
		||||
    //                                 await Task.Delay(200);
 | 
			
		||||
    //                             }
 | 
			
		||||
 | 
			
		||||
                                //是药盒抽屉开药盒
 | 
			
		||||
                                if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
 | 
			
		||||
                                {
 | 
			
		||||
                                    PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
			
		||||
                                    await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
 | 
			
		||||
                                    await Task.Delay(200);
 | 
			
		||||
                                }
 | 
			
		||||
                                DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
			
		||||
                        if (b)
 | 
			
		||||
                        {
 | 
			
		||||
                            PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
                            PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
 | 
			
		||||
                            orderTakeVo.Status = 1;
 | 
			
		||||
                            next();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            _message.Notify(
 | 
			
		||||
                            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
 | 
			
		||||
                        );
 | 
			
		||||
                            logger.Info($"抽屉打开失败");
 | 
			
		||||
                            PortUtil.AllLightOff();
 | 
			
		||||
                            RestData();
 | 
			
		||||
                            stop();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    // 检测状态
 | 
			
		||||
                    else if (orderTakeVo.Status == 1)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 查询抽屉是否为关闭状态
 | 
			
		||||
                        var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
			
		||||
                        // 关闭则改变状态并终止循环
 | 
			
		||||
                        if (b)
 | 
			
		||||
                        {
 | 
			
		||||
    //                             //是药盒抽屉开药盒
 | 
			
		||||
    //                             if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
 | 
			
		||||
    //                             {
 | 
			
		||||
    //                                 PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
			
		||||
    //                                 await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                                 await Task.Delay(200);
 | 
			
		||||
    //                             }
 | 
			
		||||
    //                             DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                         }
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                     var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
			
		||||
    //                     if (b)
 | 
			
		||||
    //                     {
 | 
			
		||||
    //                         PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
    //                         PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
 | 
			
		||||
    //                         orderTakeVo.Status = 1;
 | 
			
		||||
    //                         next();
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                     else
 | 
			
		||||
    //                     {
 | 
			
		||||
    //                         _message.Notify(
 | 
			
		||||
    //                         new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
 | 
			
		||||
    //                     );
 | 
			
		||||
    //                         logger.Info($"抽屉打开失败");
 | 
			
		||||
    //                         PortUtil.AllLightOff();
 | 
			
		||||
    //                         RestData();
 | 
			
		||||
    //                         stop();
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                 }
 | 
			
		||||
    //                 // 检测状态
 | 
			
		||||
    //                 else if (orderTakeVo.Status == 1)
 | 
			
		||||
    //                 {
 | 
			
		||||
    //                     // 查询抽屉是否为关闭状态
 | 
			
		||||
    //                     var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
			
		||||
    //                     // 关闭则改变状态并终止循环
 | 
			
		||||
    //                     if (b)
 | 
			
		||||
    //                     {
 | 
			
		||||
 | 
			
		||||
                            data.ForEach(cl =>
 | 
			
		||||
                            {
 | 
			
		||||
                                if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
			
		||||
                                {
 | 
			
		||||
                                    cl.GetQuantity = cl.Quantity;
 | 
			
		||||
    //                         data.ForEach(cl =>
 | 
			
		||||
    //                         {
 | 
			
		||||
    //                             if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
			
		||||
    //                             {
 | 
			
		||||
    //                                 cl.GetQuantity = cl.Quantity;
 | 
			
		||||
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
                            orderTakeVo.Status = 2;
 | 
			
		||||
                            PortUtil.AllLightOff();
 | 
			
		||||
                            if (options._data == drawerNos.Count - 1)
 | 
			
		||||
                            {
 | 
			
		||||
                                PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
                                PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
			
		||||
                                this.status = 2;
 | 
			
		||||
                                string alertMessage = string.Empty;
 | 
			
		||||
                                //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
 | 
			
		||||
                                for (int i = 0; i < data.Count; i++)
 | 
			
		||||
                                {
 | 
			
		||||
                                    if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
			
		||||
                                    {
 | 
			
		||||
                                        PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
 | 
			
		||||
                                        PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                             }
 | 
			
		||||
    //                         });
 | 
			
		||||
    //                         orderTakeVo.Status = 2;
 | 
			
		||||
    //                         PortUtil.AllLightOff();
 | 
			
		||||
    //                         if (options._data == drawerNos.Count - 1)
 | 
			
		||||
    //                         {
 | 
			
		||||
    //                             PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
    //                             PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
    //                             PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
			
		||||
    //                             this.status = 2;
 | 
			
		||||
    //                             string alertMessage = string.Empty;
 | 
			
		||||
    //                             //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
 | 
			
		||||
    //                             for (int i = 0; i < data.Count; i++)
 | 
			
		||||
    //                             {
 | 
			
		||||
    //                                 if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
			
		||||
    //                                 {
 | 
			
		||||
    //                                     PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
 | 
			
		||||
    //                                     PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
			
		||||
 | 
			
		||||
                                        orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
			
		||||
                                        logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
			
		||||
                                        WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
 | 
			
		||||
                                        if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
 | 
			
		||||
                                        {
 | 
			
		||||
                                            //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
 | 
			
		||||
                                            alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
 | 
			
		||||
    //                                     orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
			
		||||
    //                                     logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
			
		||||
    //                                     WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
 | 
			
		||||
    //                                     if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
 | 
			
		||||
    //                                     {
 | 
			
		||||
    //                                         //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
 | 
			
		||||
    //                                         alertMessage += $"{data[i].Drug.DrugName}应取数量【{data[i].Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
 | 
			
		||||
 | 
			
		||||
                                        }
 | 
			
		||||
                                        await Task.Delay(200);
 | 
			
		||||
                                    }
 | 
			
		||||
    //                                     }
 | 
			
		||||
    //                                     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("取消保存");
 | 
			
		||||
                                        // 关闭弹窗
 | 
			
		||||
                                        dialogService.Close(false);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                stop();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                options._data += 1;
 | 
			
		||||
                                next();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            next(); // continue iteration
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
    //                                 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("取消保存");
 | 
			
		||||
    //                                     // 关闭弹窗
 | 
			
		||||
    //                                     dialogService.Close(false);
 | 
			
		||||
    //                                 }
 | 
			
		||||
    //                             }
 | 
			
		||||
    //                             stop();
 | 
			
		||||
    //                         }
 | 
			
		||||
    //                         else
 | 
			
		||||
    //                         {
 | 
			
		||||
    //                             options._data += 1;
 | 
			
		||||
    //                             next();
 | 
			
		||||
    //                         }
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                     else
 | 
			
		||||
    //                     {
 | 
			
		||||
    //                         next(); // continue iteration
 | 
			
		||||
    //                     }
 | 
			
		||||
    //                 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
    //             }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                RestData();
 | 
			
		||||
                logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
			
		||||
            );
 | 
			
		||||
                if (setting.Value.single.Contains(drawerNo))
 | 
			
		||||
                {
 | 
			
		||||
                    PortUtil.AllLightOff();
 | 
			
		||||
                }
 | 
			
		||||
                stop();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    //         }
 | 
			
		||||
    //         catch (Exception e)
 | 
			
		||||
    //         {
 | 
			
		||||
    //             RestData();
 | 
			
		||||
    //             logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
 | 
			
		||||
    //             _message.Notify(
 | 
			
		||||
    //             new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
			
		||||
    //         );
 | 
			
		||||
    //             if (setting.Value.single.Contains(drawerNo))
 | 
			
		||||
    //             {
 | 
			
		||||
    //                 PortUtil.AllLightOff();
 | 
			
		||||
    //             }
 | 
			
		||||
    //             stop();
 | 
			
		||||
    //         }
 | 
			
		||||
    //     });
 | 
			
		||||
    // }
 | 
			
		||||
 | 
			
		||||
    void RestData()
 | 
			
		||||
    {
 | 
			
		||||
        PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
        this.status = 0;
 | 
			
		||||
        data.ForEach(it =>
 | 
			
		||||
        {
 | 
			
		||||
            it.Status = 0;
 | 
			
		||||
            it.BeforeQuantity = new int[9];
 | 
			
		||||
            it.AfterQuantity = new int[9];
 | 
			
		||||
        });
 | 
			
		||||
        this.WeightFinnalQuantity = new int[9];
 | 
			
		||||
        DrawerNoColNoList.Clear();
 | 
			
		||||
    }
 | 
			
		||||
    void Cancel()
 | 
			
		||||
    {
 | 
			
		||||
        RestData();
 | 
			
		||||
        // 关闭弹窗
 | 
			
		||||
        dialogService.Close(false);
 | 
			
		||||
    }
 | 
			
		||||
    async Task TakeFinish()
 | 
			
		||||
    async Task Finish()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        // 保存账册、操作记录
 | 
			
		||||
        var b = await channelListDao.BoxTakeFinish(data);
 | 
			
		||||
        var b = await channelListDao.BoxAddBoxFinish(boxChannelList);
 | 
			
		||||
        if (!b)
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
			
		||||
| 
						 | 
				
			
			@ -310,8 +266,6 @@
 | 
			
		|||
            dialogService.Close(true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //重置状态
 | 
			
		||||
        this.RestData();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -307,7 +307,7 @@
 | 
			
		|||
    {
 | 
			
		||||
 | 
			
		||||
        // 保存账册、操作记录
 | 
			
		||||
        var b = await channelListDao.BoxTakeFinish(data);
 | 
			
		||||
        var b = await channelListDao.BoxTakeFinish(data, boxChannelList);
 | 
			
		||||
        if (!b)
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,13 +42,13 @@
 | 
			
		|||
<div class="container-fluid">
 | 
			
		||||
 | 
			
		||||
    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
			
		||||
    IsLoading="@isLoading"
 | 
			
		||||
    RowRender="@RowRender"
 | 
			
		||||
    EmptyText="无数据"
 | 
			
		||||
    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
			
		||||
    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
			
		||||
    SelectionMode="DataGridSelectionMode.Single"
 | 
			
		||||
    ExpandMode="DataGridExpandMode.Multiple">
 | 
			
		||||
                    ExpandMode="DataGridExpandMode.Multiple" LoadData="@LoadData" IsLoading="@isLoading" Count="@count"
 | 
			
		||||
                    AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
        <Template Context="cs">
 | 
			
		||||
            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
			
		||||
                <Columns>
 | 
			
		||||
| 
						 | 
				
			
			@ -94,14 +94,17 @@
 | 
			
		|||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        await base.OnInitializedAsync();
 | 
			
		||||
       
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
        var result = await channelStockDao.GetAllBoxAddDrug(10, 0);
 | 
			
		||||
        var result = await channelStockDao.GetAllBoxAddDrug(args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result.Desserts;
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected override async Task OnAfterRenderAsync(bool firstRender)
 | 
			
		||||
    {
 | 
			
		||||
        base.OnAfterRender(firstRender);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,131 @@
 | 
			
		|||
@page "/Box/BoxRemove"
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Config;
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Vo;
 | 
			
		||||
@using MasaBlazorApp3.Util;
 | 
			
		||||
@using Microsoft.Extensions.Options;
 | 
			
		||||
@using Newtonsoft.Json;
 | 
			
		||||
@using log4net;
 | 
			
		||||
 | 
			
		||||
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
 | 
			
		||||
    <RadzenStack>
 | 
			
		||||
        <RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border)" Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">药名:</RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-text-truncate"><b>@(channelStock.Drug.DrugName)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">规格:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Drug.DrugSpec)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">批次:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.ManuNo)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">效期:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.EffDate)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">库存:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Quantity)</b></RadzenText>
 | 
			
		||||
        </RadzenStack>
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
    <RadzenStack style="align-content:center">
 | 
			
		||||
 | 
			
		||||
        <RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border);align-content:center" Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">移入药箱:</RadzenText>
 | 
			
		||||
            <RadzenDropDown @bind-Value="SelectedDrawerNo" Data="@DrawerNos" Style="display: block;" Name="DropDownChangeEvent">
 | 
			
		||||
                <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@(SelectedDrawerNo)</RadzenText>
 | 
			
		||||
            </RadzenDropDown>
 | 
			
		||||
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">移入数量:</RadzenText>         
 | 
			
		||||
 | 
			
		||||
            <RadzenNumeric Min="0" Style="display: block" Max=@channelStock.Quantity Name="Quantity" @bind-Value="removeQuantity" />
 | 
			
		||||
        </RadzenStack>
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
			
		||||
 | 
			
		||||
        <RadzenButton Click="@Save" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="完成" Style="width: 120px" />
 | 
			
		||||
 | 
			
		||||
        <RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
			
		||||
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
</RadzenStack>
 | 
			
		||||
 | 
			
		||||
@code {
 | 
			
		||||
    @inject Radzen.DialogService dialogService;
 | 
			
		||||
    @inject IChannelListDao channelListDao;
 | 
			
		||||
    @inject IOptions<SettingConfig> setting;
 | 
			
		||||
    @inject NotificationService _message
 | 
			
		||||
    @inject PortUtil PortUtil;
 | 
			
		||||
    private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
 | 
			
		||||
 | 
			
		||||
    int removeQuantity;
 | 
			
		||||
    int status;
 | 
			
		||||
 | 
			
		||||
    int[] DrawerNos;
 | 
			
		||||
    int SelectedDrawerNo = 0;
 | 
			
		||||
 | 
			
		||||
    [Parameter] public ChannelStock channelStock { get; set; }
 | 
			
		||||
    private bool CanTakeDrug = true;
 | 
			
		||||
 | 
			
		||||
    // public List<BoxTakeVo> data { get; set; }
 | 
			
		||||
     
 | 
			
		||||
 | 
			
		||||
    //称重取药数量
 | 
			
		||||
    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
			
		||||
 | 
			
		||||
    //开抽屉前操作标识
 | 
			
		||||
    List<string> DrawerNoColNoList = new List<string>();
 | 
			
		||||
 | 
			
		||||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        DrawerNos = await channelListDao.GetDrawerNumForRemove(channelStock);
 | 
			
		||||
        if (DrawerNos != null && DrawerNos.Count() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            SelectedDrawerNo = DrawerNos[0];
 | 
			
		||||
            // var result = await channelListDao.GetChannelStockByDrug(channelStock, SelectedDrawerNo, 8, 0);
 | 
			
		||||
            // selectedDrawerData = result.Desserts;
 | 
			
		||||
        }
 | 
			
		||||
        base.OnInitializedAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void RestData()
 | 
			
		||||
    {
 | 
			
		||||
        // PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
        // this.status = 0;
 | 
			
		||||
        // data.ForEach(it =>
 | 
			
		||||
        // {
 | 
			
		||||
        //     it.Status = 0;
 | 
			
		||||
        //     it.BeforeQuantity = new int[9];
 | 
			
		||||
        //     it.AfterQuantity = new int[9];
 | 
			
		||||
        // });
 | 
			
		||||
        // this.WeightFinnalQuantity = new int[9];
 | 
			
		||||
        // DrawerNoColNoList.Clear();
 | 
			
		||||
    }
 | 
			
		||||
    void Cancel()
 | 
			
		||||
    {
 | 
			
		||||
        RestData();
 | 
			
		||||
        // 关闭弹窗
 | 
			
		||||
        dialogService.Close(false);
 | 
			
		||||
    }
 | 
			
		||||
    async Task Save()
 | 
			
		||||
    {
 | 
			
		||||
        if (removeQuantity<=0)
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "请输入移入数量", Duration = 4000 });
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (SelectedDrawerNo<=0)
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "无可移入的药箱", Duration = 4000 });
 | 
			
		||||
            return;            
 | 
			
		||||
        }
 | 
			
		||||
        var b = await channelListDao.BoxRemoveFinish(channelStock, SelectedDrawerNo,removeQuantity);
 | 
			
		||||
        if (!b)
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
			
		||||
            logger.Error($"药箱移出保存数据失败,数据{JsonConvert.SerializeObject(channelStock)}");
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交换完成", Duration = 4000 });
 | 
			
		||||
            // 关闭弹窗
 | 
			
		||||
            dialogService.Close(true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //重置状态
 | 
			
		||||
        this.RestData();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,169 @@
 | 
			
		|||
@page "/Box/BoxReplace"
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Config;
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Vo;
 | 
			
		||||
@using MasaBlazorApp3.Util;
 | 
			
		||||
@using Microsoft.Extensions.Options;
 | 
			
		||||
@using Newtonsoft.Json;
 | 
			
		||||
@using log4net;
 | 
			
		||||
 | 
			
		||||
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
 | 
			
		||||
    <RadzenStack>
 | 
			
		||||
        <RadzenStack class="rz-p-4 rz-border-radius-1" Style="border: var(--rz-grid-cell-border)" Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">药名:</RadzenText>
 | 
			
		||||
            <RadzenText  Class="rz-text-truncate"><b>@(channelStock.Drug.DrugName)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">规格:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Drug.DrugSpec)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">批次:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.ManuNo)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">效期:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.EffDate)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">库存:</RadzenText>
 | 
			
		||||
            <RadzenText TextStyle="TextStyle.Body1" Class="rz-text-truncate"><b>@(channelStock.Quantity)</b></RadzenText>
 | 
			
		||||
            <RadzenText Class="rz-mt-2 rz-my-0" Style="color: var(--rz-text-tertiary-color);">交换药箱:</RadzenText>
 | 
			
		||||
            <RadzenDropDown @bind-Value="SelectedDrawerNo" Data="@DrawerNos" Style="display: block;" Change="@(args => SelectedDrawerChange(args))" Name="DropDownChangeEvent">
 | 
			
		||||
              
 | 
			
		||||
                    <RadzenText TextStyle="TextStyle.Subtitle2" class="mb-0">@(SelectedDrawerNo)</RadzenText>
 | 
			
		||||
           
 | 
			
		||||
            </RadzenDropDown>
 | 
			
		||||
 | 
			
		||||
        </RadzenStack>
 | 
			
		||||
        <RadzenDataGrid @ref="grid" Data="@selectedDrawerData" AllowAlternatingRows="true" LoadData="@LoadData" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
 | 
			
		||||
                        CellClick="@((DataGridCellMouseEventArgs<ChannelStock> args) => OnCellClick(args))" 
 | 
			
		||||
                            AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
            <Columns>
 | 
			
		||||
                <RadzenDataGridColumn Property="DrawerNo" Title="药箱号">
 | 
			
		||||
                </RadzenDataGridColumn>
 | 
			
		||||
                <RadzenDataGridColumn Property="Drug.DrugName" Title="药品" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Drug.DrugSpec" Title="规格" />
 | 
			
		||||
                <RadzenDataGridColumn Property="ChannelStock.ManuNo" Title="批次" />
 | 
			
		||||
                <RadzenDataGridColumn Property="ChannelStock.EffDate" Title="效期" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Quantity" Title="库存" />
 | 
			
		||||
                 <RadzenDataGridColumn MinWidth="100px" Title="交换数量" Property="AddQuantity">
 | 
			
		||||
                    <EditTemplate Context="cs">
 | 
			
		||||
                            <RadzenNumeric Min="0" Style="display: block" Max=@cs.Quantity Name="Quantity" @bind-Value=@cs.AddQuantity />
 | 
			
		||||
                            <RadzenNumericRangeValidator Style="position: absolute;z-index: 9999;" Min="0" Text="请填写正确的交换数量" Component="Quantity" Popup="true" />
 | 
			
		||||
                    </EditTemplate>
 | 
			
		||||
            </RadzenDataGridColumn>
 | 
			
		||||
            </Columns>
 | 
			
		||||
        </RadzenDataGrid>
 | 
			
		||||
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
			
		||||
 | 
			
		||||
        <RadzenButton Click="@Save" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="保存" Style="width: 120px" />
 | 
			
		||||
 | 
			
		||||
        <RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
			
		||||
 | 
			
		||||
    </RadzenStack>
 | 
			
		||||
</RadzenStack>
 | 
			
		||||
 | 
			
		||||
@code {
 | 
			
		||||
@inject Radzen.DialogService dialogService;
 | 
			
		||||
    @inject IChannelListDao channelListDao;
 | 
			
		||||
    @inject IOptions<SettingConfig> setting;
 | 
			
		||||
    @inject NotificationService _message
 | 
			
		||||
    @inject PortUtil PortUtil;
 | 
			
		||||
    private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
 | 
			
		||||
 | 
			
		||||
    int status;
 | 
			
		||||
    bool isLoading;
 | 
			
		||||
    int count;
 | 
			
		||||
    int[] DrawerNos;
 | 
			
		||||
    int SelectedDrawerNo=0;
 | 
			
		||||
 | 
			
		||||
    [Parameter] public ChannelStock channelStock { get; set; }
 | 
			
		||||
    private bool CanTakeDrug = true;
 | 
			
		||||
 | 
			
		||||
    // public List<BoxTakeVo> data { get; set; }
 | 
			
		||||
 | 
			
		||||
    public List<ChannelStock> selectedDrawerData{ get; set; }
 | 
			
		||||
 | 
			
		||||
    //称重取药数量
 | 
			
		||||
    int[] WeightFinnalQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
			
		||||
 | 
			
		||||
    //开抽屉前操作标识
 | 
			
		||||
    List<string> DrawerNoColNoList = new List<string>();
 | 
			
		||||
 | 
			
		||||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        DrawerNos = await channelListDao.GetDrawerNum(channelStock);
 | 
			
		||||
        base.OnInitializedAsync();
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
        if (DrawerNos != null && DrawerNos.Count() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            SelectedDrawerNo = DrawerNos[0];
 | 
			
		||||
            var result = await channelListDao.GetChannelStockByDrug(channelStock, SelectedDrawerNo, args.Top, args.Skip);
 | 
			
		||||
            selectedDrawerData = result.Desserts;
 | 
			
		||||
        count = result.TotalDesserts;
 | 
			
		||||
        }
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
    void RestData()
 | 
			
		||||
    {
 | 
			
		||||
        // PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
			
		||||
        // this.status = 0;
 | 
			
		||||
        // data.ForEach(it =>
 | 
			
		||||
        // {
 | 
			
		||||
        //     it.Status = 0;
 | 
			
		||||
        //     it.BeforeQuantity = new int[9];
 | 
			
		||||
        //     it.AfterQuantity = new int[9];
 | 
			
		||||
        // });
 | 
			
		||||
        // this.WeightFinnalQuantity = new int[9];
 | 
			
		||||
        // DrawerNoColNoList.Clear();
 | 
			
		||||
    }
 | 
			
		||||
    void Cancel()
 | 
			
		||||
    {
 | 
			
		||||
        RestData();
 | 
			
		||||
        // 关闭弹窗
 | 
			
		||||
        dialogService.Close(false);
 | 
			
		||||
    }
 | 
			
		||||
    async Task Save()
 | 
			
		||||
    {
 | 
			
		||||
        if (selectedDrawerData!=null&&selectedDrawerData.Any(cl => cl.AddQuantity != 0 && cl.DrugId != null && cl.ManuNo != null))
 | 
			
		||||
        {
 | 
			
		||||
            if (selectedDrawerData.Where(cs => cs.AddQuantity != 0).Sum(cs => cs.Quantity) > channelStock.Quantity)
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = "提示", Detail = $"交换总数量不能大于库存", Duration = 4000 });
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            var b = await channelListDao.BoxReplaceFinish(channelStock,selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList());
 | 
			
		||||
            if (!b)
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
			
		||||
                logger.Error($"药箱药品替换保存数据库失败,数据{JsonConvert.SerializeObject(selectedDrawerData.Where(cl => cl.AddQuantity != 0).ToList())}");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交换完成", Duration = 4000 });
 | 
			
		||||
                // 关闭弹窗
 | 
			
		||||
                dialogService.Close(true);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            //重置状态
 | 
			
		||||
            this.RestData();
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Warning, Summary = "提示", Detail = $"无可交换数据或未输入交换数量", Duration = 4000 });
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async Task SelectedDrawerChange(object drawerNo)
 | 
			
		||||
    {
 | 
			
		||||
        var result = await channelListDao.GetChannelStockByDrug(channelStock, Convert.ToInt32(drawerNo), 8, 0);
 | 
			
		||||
        selectedDrawerData = result.Desserts;
 | 
			
		||||
    }
 | 
			
		||||
    int currentCol = 0;
 | 
			
		||||
 | 
			
		||||
    RadzenDataGrid<ChannelStock> grid;
 | 
			
		||||
    void OnCellClick(DataGridCellMouseEventArgs<ChannelStock> args)
 | 
			
		||||
    {
 | 
			
		||||
        currentCol = args.Data.ColNo;
 | 
			
		||||
        grid.EditRow(args.Data);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,239 @@
 | 
			
		|||
@page "/Box/BoxStock"
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Config
 | 
			
		||||
 | 
			
		||||
<RadzenStack Orientation="Orientation.Horizontal" class="col-12 mb-4">
 | 
			
		||||
    <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;">
 | 
			
		||||
            @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)" />
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="col-9 mb-4">
 | 
			
		||||
        @*   <RadzenFieldset Text="">
 | 
			
		||||
            <RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
                <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenColumn Size="12">
 | 
			
		||||
                        <RadzenButton Size="ButtonSize.Medium" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="替换药品" />
 | 
			
		||||
                        <RadzenButton Size="ButtonSize.Medium" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="移出药品" ButtonStyle="ButtonStyle.Warning" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
            </RadzenStack>
 | 
			
		||||
        </RadzenFieldset> *@
 | 
			
		||||
 | 
			
		||||
        @* <RadzenDataGrid @ref="grid" AllowRowSelectOnRowClick="@allowRowSelectOnRowClick" AllowFiltering="true" LoadData="@LoadData"
 | 
			
		||||
                        FilterPopupRenderMode="PopupRenderMode.OnDemand" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
 | 
			
		||||
                        Data="@orderInfos" ColumnWidth="200px" IsLoading="@isLoading" Count="@count" EmptyText="无数据"
 | 
			
		||||
                        SelectionMode="DataGridSelectionMode.Multiple" @bind-Value=@selectedOrderInfos
 | 
			
		||||
                        AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
            <Columns>
 | 
			
		||||
                <RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
 | 
			
		||||
                    <HeaderTemplate>
 | 
			
		||||
                        <RadzenCheckBox TabIndex="-1" TriState="false" TValue="bool?" InputAttributes="@(new Dictionary<string, object>() { { "aria-label", "Select all items" } })"
 | 
			
		||||
                                        Value="@(selectedOrderInfos == null || selectedOrderInfos?.Any() != true ? false : !orderInfos.All(i => selectedOrderInfos.Contains(i)) ? null : orderInfos.Any(i => selectedOrderInfos.Contains(i)))"
 | 
			
		||||
                                        Change="@(args => selectedOrderInfos = args == true ? orderInfos.ToList() : null)" />
 | 
			
		||||
                    </HeaderTemplate>
 | 
			
		||||
                    <Template Context="data">
 | 
			
		||||
                        <RadzenCheckBox TabIndex="-1" TriState="false" Value="@(selectedOrderInfos != null && selectedOrderInfos.Contains(data))" InputAttributes="@(new Dictionary<string, object>() { { "aria-label", "Select item" } })"
 | 
			
		||||
                                        TValue="bool" Change="@(args => { if (!allowRowSelectOnRowClick) { grid.SelectRow(data); } })" />
 | 
			
		||||
                    </Template>
 | 
			
		||||
                </RadzenDataGridColumn>
 | 
			
		||||
                <RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="OrderNo" Title="单号" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem" />
 | 
			
		||||
            </Columns>
 | 
			
		||||
        </RadzenDataGrid> *@
 | 
			
		||||
 | 
			
		||||
        <RadzenDataList @ref="grid" LoadData="@LoadData" WrapItems="true" Count="@count" IsLoading="@isLoading"
 | 
			
		||||
                        Data="@_forecasts" PageSize="6" AllowPaging="true" PagerHorizontalAlign="HorizontalAlign.Left"
 | 
			
		||||
                        ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
            <Template Context="pd">
 | 
			
		||||
                <RadzenCard Variant="Variant.Outlined" class="rz-p-0" Style="width: 100%; overflow: hidden;">
 | 
			
		||||
                    <RadzenRow Gap="0">
 | 
			
		||||
                        <RadzenColumn Size="12" SizeLG="2" class="rz-p-4 product-title">
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.DrugName)</RadzenText>
 | 
			
		||||
                        </RadzenColumn>
 | 
			
		||||
                        <RadzenColumn Size="12" SizeLG="3" class="rz-p-4 product-title">
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.Manufactory)</RadzenText>
 | 
			
		||||
                        </RadzenColumn>
 | 
			
		||||
                        <RadzenColumn Size="12" SizeLG="2" class="rz-p-4 product-title">
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd._DrugInfo.DrugSpec)</RadzenText>
 | 
			
		||||
                        </RadzenColumn>
 | 
			
		||||
                        <RadzenColumn Size="12" SizeLG="1" class="rz-p-4 product-title">
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-color-on-secondary-lighter">@(pd.BaseQuantity)</RadzenText>
 | 
			
		||||
                        </RadzenColumn>
 | 
			
		||||
                       @*  <RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
 | 
			
		||||
                            <RadzenButton Text="替换药品" Style="width: 100%" Click="@(() => replaceClick(pd))" />
 | 
			
		||||
                        </RadzenColumn>
 | 
			
		||||
                        <RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
 | 
			
		||||
                            <RadzenButton Text="移出药品" Style="width: 100%" Click="@(()=>removeClick(pd))" />
 | 
			
		||||
                        </RadzenColumn> *@
 | 
			
		||||
                        @if (pd.channelStocks != null && pd.channelStocks.Count > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            for (int i = 0; i < pd.channelStocks.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var manuInfo = pd.channelStocks[i];
 | 
			
		||||
                                var manuNo = 1;
 | 
			
		||||
                                if (i == 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    manuNo = 0;
 | 
			
		||||
                                }
 | 
			
		||||
                                <RadzenColumn Size="12" SizeLG="7" class="rz-p-4">
 | 
			
		||||
                                    @if (manuInfo != null && manuInfo.ManuNo != null)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        <RadzenRow Gap="0">
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeMD="6" SizeLG="2">
 | 
			
		||||
                                                @if (manuNo == 0)
 | 
			
		||||
                                                {
 | 
			
		||||
                                                    <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">批次</RadzenText>
 | 
			
		||||
                                                }
 | 
			
		||||
                                                <RadzenText TextStyle="TextStyle.Body2">@(manuInfo.ManuNo)</RadzenText>
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeMD="6" SizeLG="2">
 | 
			
		||||
                                                @if (manuNo == 0)
 | 
			
		||||
                                                {
 | 
			
		||||
                                                    <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">效期</RadzenText>
 | 
			
		||||
                                                }
 | 
			
		||||
                                                <RadzenText TextStyle="TextStyle.Body2">@(manuInfo.EffDate)</RadzenText>
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeMD="6" SizeLG="2">
 | 
			
		||||
                                                @if (manuNo == 0)
 | 
			
		||||
                                                {
 | 
			
		||||
                                                    <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">库存</RadzenText>
 | 
			
		||||
                                                }
 | 
			
		||||
                                                <RadzenText TextStyle="TextStyle.Body2">@(manuInfo.Quantity)</RadzenText>
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
 | 
			
		||||
                                                <RadzenButton Text="替换药品" Style="width: 100%" Click="@(() => replaceClick(manuInfo))" />
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeLG="2" class="rz-p-4">
 | 
			
		||||
                                                <RadzenButton Text="移出药品" Style="width: 100%" Click="@(() => removeClick(manuInfo))" />
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                        </RadzenRow>
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        <RadzenRow Gap="0">
 | 
			
		||||
                                            <RadzenColumn Size="12" SizeMD="6" SizeLG="2">
 | 
			
		||||
                                                <RadzenText TextStyle="TextStyle.H6" TagName="TagName.H5" class="rz-mb-0">未绑定批次</RadzenText>
 | 
			
		||||
                                            </RadzenColumn>
 | 
			
		||||
                                        </RadzenRow>
 | 
			
		||||
                                    }
 | 
			
		||||
                                </RadzenColumn>
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    </RadzenRow>
 | 
			
		||||
                </RadzenCard>
 | 
			
		||||
            </Template>
 | 
			
		||||
        </RadzenDataList>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
</RadzenStack>
 | 
			
		||||
@code {
 | 
			
		||||
    @inject IOrderInfoDao orderInfoDao;
 | 
			
		||||
    @inject IChannelListDao channelListDao;
 | 
			
		||||
    @inject DialogService dialogService;
 | 
			
		||||
    @inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
 | 
			
		||||
    @inject NotificationService _message
 | 
			
		||||
 | 
			
		||||
    private IEnumerable<PlanDetails>? _forecasts;
 | 
			
		||||
    bool allowRowSelectOnRowClick = true;
 | 
			
		||||
    // IEnumerable<DrugManuNo> drugManuNos;
 | 
			
		||||
    // IList<DrugManuNo> selectedDrugManuNos;
 | 
			
		||||
    RadzenDataList<PlanDetails> grid;
 | 
			
		||||
    // RadzenDataGrid<DrugManuNo> gridManuNo;
 | 
			
		||||
    bool isLoading;
 | 
			
		||||
    int count;
 | 
			
		||||
    int[] DrawerNos = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
 | 
			
		||||
    int status = 0;
 | 
			
		||||
    int drawerNo = 1;
 | 
			
		||||
    string OrderNo;
 | 
			
		||||
    DateTime OrderDate;
 | 
			
		||||
    void SelectDrawer(int drawerNo)
 | 
			
		||||
    {
 | 
			
		||||
        this.drawerNo = drawerNo;
 | 
			
		||||
        grid.Reload();
 | 
			
		||||
    }
 | 
			
		||||
    // void OnCurrentDateChanged(DateTime args)
 | 
			
		||||
    // {
 | 
			
		||||
    //     OrderDate = new DateTime(args.Year, args.Month, args.Day);
 | 
			
		||||
    // }
 | 
			
		||||
    //重置
 | 
			
		||||
    async Task reloadGrid()
 | 
			
		||||
    {
 | 
			
		||||
        OrderNo = "";
 | 
			
		||||
        OrderDate = DateTime.MinValue;
 | 
			
		||||
        await grid.Reload();
 | 
			
		||||
    }
 | 
			
		||||
    //确认
 | 
			
		||||
    async Task Confirm()
 | 
			
		||||
    {
 | 
			
		||||
        // orderInfoDao.CheckOrderInfo(selectedOrderInfos, drawerNo);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
        var result = await channelListDao.GetBoxDrugInfo(drawerNo, args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result.Desserts;
 | 
			
		||||
        // Update the count
 | 
			
		||||
        count = result.TotalDesserts;
 | 
			
		||||
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
 | 
			
		||||
        DrawerNos = await orderInfoDao.GetDrawerNum(setting.Value.boxMachineId);
 | 
			
		||||
    }
 | 
			
		||||
    //替换按钮
 | 
			
		||||
    async Task replaceClick(ChannelStock cs)
 | 
			
		||||
    {
 | 
			
		||||
        if (cs.Quantity > 0)
 | 
			
		||||
        {
 | 
			
		||||
            var b = await dialogService.OpenAsync<BoxReplace>(
 | 
			
		||||
                   $"{cs.DrawerNo}号药箱替换药品详情",
 | 
			
		||||
                 new Dictionary<string, object>() { { "channelStock", cs } },
 | 
			
		||||
                 new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
			
		||||
           );
 | 
			
		||||
            if (b)
 | 
			
		||||
            {
 | 
			
		||||
                await reloadGrid();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            //库存为0无法操作
 | 
			
		||||
            _message.Notify(
 | 
			
		||||
            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"库存为0无法替换", Duration = 4000 }
 | 
			
		||||
        );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    //移除按钮
 | 
			
		||||
    async Task removeClick(ChannelStock cs)
 | 
			
		||||
    {
 | 
			
		||||
        if (cs.Quantity > 0)
 | 
			
		||||
        {
 | 
			
		||||
            var b = await dialogService.OpenAsync<BoxRemoveDialog>(
 | 
			
		||||
                   $"{cs.DrawerNo}号药箱替换药品详情",
 | 
			
		||||
                 new Dictionary<string, object>() { { "channelStock", cs } },
 | 
			
		||||
                 new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
			
		||||
           );
 | 
			
		||||
            if (b)
 | 
			
		||||
            {
 | 
			
		||||
                await reloadGrid();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            //库存为0无法操作
 | 
			
		||||
            _message.Notify(
 | 
			
		||||
            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"库存为0,没有要移出的药品", Duration = 4000 }
 | 
			
		||||
        );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,114 +1,330 @@
 | 
			
		|||
@page "/setting/Change"
 | 
			
		||||
@page "/0"
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Config;
 | 
			
		||||
@using MasaBlazorApp3.Pojo.Vo;
 | 
			
		||||
@using MasaBlazorApp3.Util;
 | 
			
		||||
@using Microsoft.Extensions.Options;
 | 
			
		||||
@using Newtonsoft.Json;
 | 
			
		||||
@using log4net;
 | 
			
		||||
<style>
 | 
			
		||||
    .rz-dialog-content {
 | 
			
		||||
        padding: 0 !important;
 | 
			
		||||
    }
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
<div class="container-fluid">
 | 
			
		||||
    <div class="row">
 | 
			
		||||
        <div class="col-12 mb-4">
 | 
			
		||||
<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">
 | 
			
		||||
                    请交班操作人 @FromOperator?.NickName
 | 
			
		||||
                    <p>登录验证</p>
 | 
			
		||||
                </RadzenText>
 | 
			
		||||
            }
 | 
			
		||||
            else if (userI == 2)
 | 
			
		||||
            {
 | 
			
		||||
                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
 | 
			
		||||
                    请交班复核人 @FromRviewer?.NickName
 | 
			
		||||
                    <p>登录验证</p>
 | 
			
		||||
                </RadzenText>
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            @if (userI == 3)
 | 
			
		||||
            {
 | 
			
		||||
                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
 | 
			
		||||
                    请接班操作人 @ToOperator?.NickName
 | 
			
		||||
                    <p>登录验证</p>
 | 
			
		||||
                </RadzenText>
 | 
			
		||||
            }
 | 
			
		||||
            else if (userI == 4)
 | 
			
		||||
            {
 | 
			
		||||
                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
 | 
			
		||||
                    请接班复核人 @ToReviewer?.NickName
 | 
			
		||||
                    <p>登录验证</p>
 | 
			
		||||
                </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" />
 | 
			
		||||
 | 
			
		||||
            <form onsubmit="@(() => grid.Reload())">
 | 
			
		||||
                <RadzenFieldset Text="查询">
 | 
			
		||||
                    <RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="4">
 | 
			
		||||
                                <RadzenLabel Text="开始时间" Component="Start" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                            <RadzenColumn Size="8">
 | 
			
		||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </RadzenTemplateForm>
 | 
			
		||||
        </RadzenCard>
 | 
			
		||||
    </RadzenColumn>
 | 
			
		||||
 | 
			
		||||
</RadzenRow>
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="4">
 | 
			
		||||
                                <RadzenLabel Text="结束时间" Component="End" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                            <RadzenColumn Size="8">
 | 
			
		||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="12">
 | 
			
		||||
                                <RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
 | 
			
		||||
                                <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
                    </RadzenStack>
 | 
			
		||||
                </RadzenFieldset>
 | 
			
		||||
            </form>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-12 mb-4">
 | 
			
		||||
 | 
			
		||||
            <RadzenDataGrid @ref="grid"
 | 
			
		||||
                            LoadData="@LoadData"
 | 
			
		||||
                            IsLoading="@isLoading"
 | 
			
		||||
                            Count="@count"
 | 
			
		||||
                            EmptyText="无数据"
 | 
			
		||||
                            Data="@_forecasts"
 | 
			
		||||
                            AllowColumnResize="true" AllowAlternatingRows="false"
 | 
			
		||||
                            SelectionMode="DataGridSelectionMode.Single"
 | 
			
		||||
                            AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
                <Columns>
 | 
			
		||||
                    <RadzenDataGridColumn Title="日期" Property="optDate">
 | 
			
		||||
                        <Template Context="mr">
 | 
			
		||||
                            @mr.optDate.ToString("yyyy-MM-dd")
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="交班人发药人" Property="FromOperator"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="交班人审核人" Property="FromRviewer"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班人发药人" Property="ToOperator"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班人审核人" Property="ToReviewer"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班日期" Property="ToDate">
 | 
			
		||||
 | 
			
		||||
                        <Template Context="mr">
 | 
			
		||||
                            @mr.ToDate.ToString("yyyy-MM-dd")
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="当班状态" Property="State">
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn title="库位" Property="Location"></RadzenDataGridColumn>
 | 
			
		||||
                </Columns>
 | 
			
		||||
            </RadzenDataGrid>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
@code {
 | 
			
		||||
    @inject IHkcChangeShiftsDao hkcChangeShiftsDao;
 | 
			
		||||
    @inject DialogService dialogService;
 | 
			
		||||
    @inject Radzen.DialogService dialogService;
 | 
			
		||||
 | 
			
		||||
    @inject NavigationManager navigate;
 | 
			
		||||
    RadzenDataGrid<HkcChangeShifts> grid;
 | 
			
		||||
    bool isLoading;
 | 
			
		||||
    int count;
 | 
			
		||||
    private IEnumerable<HkcChangeShifts>? _forecasts;
 | 
			
		||||
    DateTime start;
 | 
			
		||||
    DateTime end;
 | 
			
		||||
    @inject FingerprintUtil FingerprintUtil;
 | 
			
		||||
    @inject PortUtil PortUtil;
 | 
			
		||||
    @inject NavigationManager na;
 | 
			
		||||
    @inject NotificationService _message
 | 
			
		||||
    @inject GlobalStateService globalStateService;
 | 
			
		||||
    @inject IUserDao userDao;
 | 
			
		||||
    @inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [Parameter] public string type { get; set; }
 | 
			
		||||
 | 
			
		||||
    protected override void OnParametersSet()
 | 
			
		||||
    private readonly ILog logger = LogManager.GetLogger(typeof(LoginDialog));
 | 
			
		||||
 | 
			
		||||
    private int loginMode = 1;
 | 
			
		||||
    private bool opFirst = true;
 | 
			
		||||
    [Parameter] public int userI { get; set; }
 | 
			
		||||
 | 
			
		||||
    Pojo.User FromOperator = new Pojo.User();
 | 
			
		||||
    Pojo.User FromRviewer = new Pojo.User();
 | 
			
		||||
    Pojo.User ToOperator = new Pojo.User();
 | 
			
		||||
    Pojo.User ToReviewer = new Pojo.User();
 | 
			
		||||
 | 
			
		||||
    HkcChangeShifts hkcChange = new HkcChangeShifts();
 | 
			
		||||
 | 
			
		||||
    bool isShow;
 | 
			
		||||
 | 
			
		||||
    private Pojo.User loginModel = new();
 | 
			
		||||
 | 
			
		||||
    protected override Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
        if (grid != null)
 | 
			
		||||
        {
 | 
			
		||||
            reloadGrid();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
        FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx;
 | 
			
		||||
 | 
			
		||||
        var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result.Desserts;
 | 
			
		||||
        // Update the count
 | 
			
		||||
        count = result.TotalDesserts;
 | 
			
		||||
        loginMode = setting.Value.loginMode;
 | 
			
		||||
        opFirst = setting.Value.opFirst;
 | 
			
		||||
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
        //查询当前值班信息
 | 
			
		||||
        hkcChange = userDao.GetOnDuty();
 | 
			
		||||
        if (hkcChange != null && !string.IsNullOrEmpty(hkcChange.FromOperator))
 | 
			
		||||
        {
 | 
			
		||||
            FromOperator = userDao.GetByUsername(hkcChange.FromOperator);
 | 
			
		||||
        }
 | 
			
		||||
        if (hkcChange != null && string.IsNullOrEmpty(hkcChange.FromRviewer))
 | 
			
		||||
        {
 | 
			
		||||
            FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer);
 | 
			
		||||
        }
 | 
			
		||||
        return base.OnInitializedAsync();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async Task reloadGrid()
 | 
			
		||||
    private async Task SetUser(Pojo.User user)
 | 
			
		||||
    {
 | 
			
		||||
        start = DateTime.MinValue;
 | 
			
		||||
        end = DateTime.MinValue;
 | 
			
		||||
        await grid.Reload();
 | 
			
		||||
        if (userI == 1)
 | 
			
		||||
        {
 | 
			
		||||
            if(FromOperator.Id != user.Id)
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                          new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班操作人有误,请核查当前值班人", Duration = 3000 }
 | 
			
		||||
                      );
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            //交班人操作人登录
 | 
			
		||||
            if (FromRviewer != null)
 | 
			
		||||
            {
 | 
			
		||||
                userI = 2;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                userI = 3;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else if (userI == 2)
 | 
			
		||||
        {
 | 
			
		||||
            if (FromOperator != null && FromOperator.Id == user.Id)
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                           new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
 | 
			
		||||
                       );
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if(FromRviewer.Id!=user.Id)
 | 
			
		||||
                {
 | 
			
		||||
                    _message.Notify(
 | 
			
		||||
                           new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"值班审核人有误,请核查当前值班人", Duration = 3000 }
 | 
			
		||||
                       );
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                FromRviewer = user;
 | 
			
		||||
                userI = 3;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if (userI == 3)
 | 
			
		||||
        {
 | 
			
		||||
            if (loginMode == 2)
 | 
			
		||||
            {
 | 
			
		||||
                if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
 | 
			
		||||
                {
 | 
			
		||||
                    _message.Notify(
 | 
			
		||||
                           new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
 | 
			
		||||
                       );
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                userI = 4;
 | 
			
		||||
                ToOperator = user;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id))
 | 
			
		||||
                {
 | 
			
		||||
                    _message.Notify(
 | 
			
		||||
                           new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
 | 
			
		||||
                       );
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    ToOperator = user;
 | 
			
		||||
                    //保存交接班信息
 | 
			
		||||
                    HkcChangeShifts hkcChangeNew = new HkcChangeShifts
 | 
			
		||||
                    {
 | 
			
		||||
                        FromOperator = ToOperator.Username,
 | 
			
		||||
                        optDate = DateTime.Now,
 | 
			
		||||
                        ToDate = DateTime.Now,
 | 
			
		||||
                        State = "0", //状态为1表示交接班完成
 | 
			
		||||
                        MachineId = hkcChange.MachineId
 | 
			
		||||
                    };
 | 
			
		||||
                    hkcChange.ToOperator = ToOperator.Username;
 | 
			
		||||
                    bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
 | 
			
		||||
                    if (bResult)
 | 
			
		||||
                    {
 | 
			
		||||
                        FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
 | 
			
		||||
                        logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToOperator?.NickName}");
 | 
			
		||||
                        _message.Notify(
 | 
			
		||||
                                    new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
 | 
			
		||||
                                );
 | 
			
		||||
                        dialogService.Close(true);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        _message.Notify(
 | 
			
		||||
                          new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
 | 
			
		||||
                      );
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if (userI == 4)
 | 
			
		||||
        {
 | 
			
		||||
            if (FromOperator.Id == user.Id || (FromRviewer != null && FromRviewer.Id == user.Id) || (ToOperator != null && ToOperator.Id == user.Id))
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                         new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"验证重复,请使用其他账号", Duration = 3000 }
 | 
			
		||||
                     );
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            ToReviewer = user;
 | 
			
		||||
            hkcChange.ToReviewer = ToReviewer?.Username;
 | 
			
		||||
            //保存交接班信息
 | 
			
		||||
            HkcChangeShifts hkcChangeNew = new HkcChangeShifts
 | 
			
		||||
            {
 | 
			
		||||
                FromOperator = ToOperator.Username,
 | 
			
		||||
                FromRviewer = ToReviewer?.Username,
 | 
			
		||||
                optDate = DateTime.Now,
 | 
			
		||||
                State = "0", //状态为1表示交接班完成
 | 
			
		||||
                MachineId = hkcChange.MachineId
 | 
			
		||||
            };
 | 
			
		||||
            bool bResult = await userDao.UpdateChangeShift(hkcChange, hkcChangeNew);
 | 
			
		||||
            if (bResult)
 | 
			
		||||
            {
 | 
			
		||||
                FingerprintUtil.axCZKEM1.OnAttTransactionEx -= axCZKEM1_OnAttTransactionEx;
 | 
			
		||||
                logger.Info($"交接班完成,交班人{FromOperator.NickName};{FromRviewer?.NickName},接班人{ToOperator?.NickName};{ToReviewer?.NickName}");
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                            new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"交接班完成", Duration = 3000 }
 | 
			
		||||
                        );
 | 
			
		||||
                dialogService.Close(true);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(
 | 
			
		||||
                           new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = "交接班保存数据失败", Duration = 3000 }
 | 
			
		||||
                       );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
            InvokeAsync(StateHasChanged);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            _message.Notify(
 | 
			
		||||
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"系统中没有ID为【{sEnrollNumber}】的用户", Duration = 4000 }
 | 
			
		||||
            );
 | 
			
		||||
            logger.Info($"指纹机验证通过id为【{sEnrollNumber}】,但是华康数据库中无此用户");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void Exit()
 | 
			
		||||
    {
 | 
			
		||||
        dialogService.Close(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,123 @@
 | 
			
		|||
@page "/stock/Change"
 | 
			
		||||
 | 
			
		||||
<div class="container-fluid">
 | 
			
		||||
    <div class="row">
 | 
			
		||||
        <div class="col-12 mb-4">
 | 
			
		||||
 | 
			
		||||
            <form onsubmit="@(() => grid.Reload())">
 | 
			
		||||
                <RadzenFieldset Text="查询">
 | 
			
		||||
                    <RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="4">
 | 
			
		||||
                                <RadzenLabel Text="开始时间" Component="Start" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                            <RadzenColumn Size="8">
 | 
			
		||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="4">
 | 
			
		||||
                                <RadzenLabel Text="结束时间" Component="End" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                            <RadzenColumn Size="8">
 | 
			
		||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenColumn Size="12">
 | 
			
		||||
                                <RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" />
 | 
			
		||||
                                <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
                    </RadzenStack>
 | 
			
		||||
                </RadzenFieldset>
 | 
			
		||||
            </form>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-12 mb-4">
 | 
			
		||||
 | 
			
		||||
            <RadzenDataGrid @ref="grid"
 | 
			
		||||
                            LoadData="@LoadData"
 | 
			
		||||
                            IsLoading="@isLoading"
 | 
			
		||||
                            Count="@count"
 | 
			
		||||
                            EmptyText="无数据"
 | 
			
		||||
                            Data="@_forecasts"
 | 
			
		||||
                            AllowColumnResize="true" AllowAlternatingRows="false"
 | 
			
		||||
                            SelectionMode="DataGridSelectionMode.Single"
 | 
			
		||||
                            AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
			
		||||
                <Columns>
 | 
			
		||||
                    <RadzenDataGridColumn Title="日期" Property="optDate">
 | 
			
		||||
                        <Template Context="mr">
 | 
			
		||||
                            @mr.optDate.ToString("yyyy-MM-dd")
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="交班发药人" Property="FromOperator"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="交班审核人" Property="FromRviewer"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班发药人" Property="ToOperator"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班审核人" Property="ToReviewer"></RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="接班日期" Property="ToDate">
 | 
			
		||||
 | 
			
		||||
                        <Template Context="mr">
 | 
			
		||||
                            @mr.ToDate.ToString("yyyy-MM-dd")
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                    <RadzenDataGridColumn Title="当班状态" Property="State">
 | 
			
		||||
                        <Template Context="state">
 | 
			
		||||
                            @if(state.State=="0")
 | 
			
		||||
                            {
 | 
			
		||||
                                <RadzenText>值班中</RadzenText>
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                <RadzenText>已交班</RadzenText>
 | 
			
		||||
                            }
 | 
			
		||||
                        </Template>
 | 
			
		||||
                    </RadzenDataGridColumn>
 | 
			
		||||
                </Columns>
 | 
			
		||||
            </RadzenDataGrid>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
@code {
 | 
			
		||||
    @inject IHkcChangeShiftsDao hkcChangeShiftsDao;
 | 
			
		||||
    @inject DialogService dialogService;
 | 
			
		||||
 | 
			
		||||
    @inject NavigationManager navigate;
 | 
			
		||||
    RadzenDataGrid<HkcChangeShifts> grid;
 | 
			
		||||
    bool isLoading;
 | 
			
		||||
    int count;
 | 
			
		||||
    private IEnumerable<HkcChangeShifts>? _forecasts;
 | 
			
		||||
    DateTime start;
 | 
			
		||||
    DateTime end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [Parameter] public string type { get; set; }
 | 
			
		||||
 | 
			
		||||
    protected override void OnParametersSet()
 | 
			
		||||
    {
 | 
			
		||||
        if (grid != null)
 | 
			
		||||
        {
 | 
			
		||||
            reloadGrid();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    async Task LoadData(LoadDataArgs args)
 | 
			
		||||
    {
 | 
			
		||||
        isLoading = true;
 | 
			
		||||
 | 
			
		||||
        var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result.Desserts;
 | 
			
		||||
        // Update the count
 | 
			
		||||
        count = result.TotalDesserts;
 | 
			
		||||
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async Task reloadGrid()
 | 
			
		||||
    {
 | 
			
		||||
        start = DateTime.MinValue;
 | 
			
		||||
        end = DateTime.MinValue;
 | 
			
		||||
        await grid.Reload();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +63,33 @@
 | 
			
		|||
                <RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="OrderNo" Title="单号" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem" />
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem">
 | 
			
		||||
                    <Template Context="DetailList">
 | 
			
		||||
                        @for (int i = 0; i < DetailList.DetailList.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            OrderDetail orderDetail = DetailList.DetailList[i];
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.Drug.DrugName</RadzenText>
 | 
			
		||||
                        }
 | 
			
		||||
                    </Template>
 | 
			
		||||
                </RadzenDataGridColumn>
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem">
 | 
			
		||||
                    <Template Context="DetailList">
 | 
			
		||||
                        @for (int i = 0; i < DetailList.DetailList.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            OrderDetail orderDetail = DetailList.DetailList[i];
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.SetManuNo</RadzenText>
 | 
			
		||||
                        }
 | 
			
		||||
                    </Template>
 | 
			
		||||
                </RadzenDataGridColumn>
 | 
			
		||||
                <RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem">
 | 
			
		||||
                    <Template Context="DetailList">
 | 
			
		||||
                        @for (int i = 0; i < DetailList.DetailList.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            OrderDetail orderDetail = DetailList.DetailList[i];
 | 
			
		||||
                            <RadzenText TextStyle="TextStyle.Subtitle2" class="rz-mb-0">@orderDetail.Quantity</RadzenText>
 | 
			
		||||
                        }
 | 
			
		||||
                    </Template>
 | 
			
		||||
                </RadzenDataGridColumn>
 | 
			
		||||
            </Columns>
 | 
			
		||||
        </RadzenDataGrid>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,16 +36,31 @@
 | 
			
		|||
    .rz-gauge .rz-tick-text {
 | 
			
		||||
        fill: #ffffff !important;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    <style >
 | 
			
		||||
    .icon-preview div {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        gap: 0.5rem;
 | 
			
		||||
        width: 120px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .icon-preview span {
 | 
			
		||||
        color: white;
 | 
			
		||||
        font-size: 0.75rem;
 | 
			
		||||
    }
 | 
			
		||||
</style>
 | 
			
		||||
</style>
 | 
			
		||||
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
 | 
			
		||||
 | 
			
		||||
    <RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
 | 
			
		||||
        <RadzenColumn Size="4">
 | 
			
		||||
        <RadzenColumn Size="2">
 | 
			
		||||
 | 
			
		||||
        </RadzenColumn>
 | 
			
		||||
        <RadzenColumn Size="8">
 | 
			
		||||
            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
			
		||||
                <RadzenColumn Size="3">
 | 
			
		||||
                <RadzenColumn Size="2">
 | 
			
		||||
                    @if (globalStateService.Operator != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
			
		||||
| 
						 | 
				
			
			@ -58,11 +73,20 @@
 | 
			
		|||
                        <RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
			
		||||
                    }
 | 
			
		||||
                </RadzenColumn>
 | 
			
		||||
                <RadzenColumn Size="3">
 | 
			
		||||
                <RadzenColumn Size="3" Orientation="Orientation.Horizontal" Wrap="FlexWrap.Wrap" class="icon-preview rz-p-12">
 | 
			
		||||
                    <div>
 | 
			
		||||
                        <RadzenIcon Icon="compare_arrows" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { changeShifts(); })" />
 | 
			
		||||
                        <span>交接班</span>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </RadzenColumn>
 | 
			
		||||
                <RadzenColumn Size="2">
 | 
			
		||||
                    <RadzenIcon Icon="exit_to_app" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { logout(); })" />
 | 
			
		||||
                </RadzenColumn>
 | 
			
		||||
            </RadzenRow>
 | 
			
		||||
        </RadzenColumn>
 | 
			
		||||
        <RadzenColumn Size="2">
 | 
			
		||||
 | 
			
		||||
        </RadzenColumn>
 | 
			
		||||
    </RadzenRow>
 | 
			
		||||
 | 
			
		||||
    <RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +104,8 @@
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            </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 Orientation="Orientation.Horizontal" Style="height: 50%;width:100%">
 | 
			
		||||
                <RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))"  Style="height: 100%;width:50%">
 | 
			
		||||
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
 | 
			
		||||
                    @if (globalStateService.Operator != null)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +117,19 @@
 | 
			
		|||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                </RadzenStack>
 | 
			
		||||
                <RadzenStack class="home-menu rz-background-color-danger-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(6))" Style="height: 100%;width:50%">
 | 
			
		||||
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">药箱管理</RadzenText>
 | 
			
		||||
                    @if (globalStateService.Operator != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 60 > 0 && id - 60 < 10))
 | 
			
		||||
                        {
 | 
			
		||||
                            <div class="mask">
 | 
			
		||||
                                <RadzenImage Path="images/no_auth.png" />
 | 
			
		||||
                            </div>
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                </RadzenStack>
 | 
			
		||||
            </RadzenStack>
 | 
			
		||||
        </RadzenStack>
 | 
			
		||||
        <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%">
 | 
			
		||||
| 
						 | 
				
			
			@ -296,4 +334,15 @@
 | 
			
		|||
        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //交接班
 | 
			
		||||
    async void changeShifts()
 | 
			
		||||
    {
 | 
			
		||||
        //修改复核人
 | 
			
		||||
        await dialogService.OpenAsync<ChangeShifts>(
 | 
			
		||||
        "",
 | 
			
		||||
        new Dictionary<string, object>() { { "userI", 1 } },
 | 
			
		||||
        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
@page "/return/record1/{type}"
 | 
			
		||||
@page "/return/record2/{type}"
 | 
			
		||||
@page "/stock/record/{type}"
 | 
			
		||||
@using MasaBlazorApp3.Report
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<div class="container-fluid">
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +36,10 @@
 | 
			
		|||
                                <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
 | 
			
		||||
                            </RadzenColumn>
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                            <RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
 | 
			
		||||
                            <RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
 | 
			
		||||
                        </RadzenRow>
 | 
			
		||||
                    </RadzenStack>
 | 
			
		||||
                </RadzenFieldset>
 | 
			
		||||
            </form>
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +116,18 @@
 | 
			
		|||
        await grid.Reload();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //库存导出
 | 
			
		||||
    void StockExport()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    //专用账册导出
 | 
			
		||||
    void AccountBookExport()
 | 
			
		||||
    {
 | 
			
		||||
        // string drugId = drugName != null ? drugName.Split('/').Last().Trim():"";
 | 
			
		||||
        // GridReportUtil gridReportUtil = new GridReportUtil();
 | 
			
		||||
        GridReportUtil.PrintReport("stock_template.grf", null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,6 +136,7 @@
 | 
			
		|||
    @inject IPlanDao planDao;
 | 
			
		||||
    @inject DialogService dialogService;
 | 
			
		||||
    @inject NotificationService _message
 | 
			
		||||
    @inject GlobalStateService globalStateService;
 | 
			
		||||
 | 
			
		||||
    RadzenDataGrid<Plan> grid;
 | 
			
		||||
    RadzenDataGrid<PlanDetails> PlanDetailsGrid;
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +219,23 @@
 | 
			
		|||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
			
		||||
            if (b)
 | 
			
		||||
            {
 | 
			
		||||
                //查询要删除的套餐下是否有绑定,且绑定有库存
 | 
			
		||||
                if (!(await planDao.CheckPlanBind(planInfo.Id)))
 | 
			
		||||
                {
 | 
			
		||||
                    _message.Notify
 | 
			
		||||
                  (
 | 
			
		||||
                      new NotificationMessage
 | 
			
		||||
                      {
 | 
			
		||||
                          Severity = NotificationSeverity.Error,
 | 
			
		||||
                          Summary = "提示",
 | 
			
		||||
                          Detail = $"该套餐还有库存绑定且有库存,请先清库存",
 | 
			
		||||
                          Duration = 4000
 | 
			
		||||
                      }
 | 
			
		||||
                  );
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                // 数据库删除
 | 
			
		||||
                if (await planDao.DeletePlanInfo(planInfo.Id))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +324,19 @@
 | 
			
		|||
           );
 | 
			
		||||
            if (b)
 | 
			
		||||
            {
 | 
			
		||||
                SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
 | 
			
		||||
                //查询要删除的药品是否有绑定且库存大于0
 | 
			
		||||
                if (!(await planDao.CheckPlanDetailBind(planDetail)))
 | 
			
		||||
                {
 | 
			
		||||
                    _message.Notify(new NotificationMessage
 | 
			
		||||
                    {
 | 
			
		||||
                        Severity = NotificationSeverity.Error,
 | 
			
		||||
                        Summary = "提示",
 | 
			
		||||
                        Detail = "该药品有绑定且库存不为0,请先清库存",
 | 
			
		||||
                        Duration = 4000
 | 
			
		||||
                    });
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 数据库删除
 | 
			
		||||
                if (await planDao.DeletePlanDetail(planDetail))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -318,6 +348,7 @@
 | 
			
		|||
                        Duration = 4000
 | 
			
		||||
                    }
 | 
			
		||||
                    );
 | 
			
		||||
                    SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -377,6 +408,9 @@
 | 
			
		|||
        {
 | 
			
		||||
            planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
 | 
			
		||||
            planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId;
 | 
			
		||||
            planDetail.UseState = 1;
 | 
			
		||||
            planDetail.OperatorUser = globalStateService.Operator?.Username;
 | 
			
		||||
            planDetail.ReviewerUser = globalStateService.Reviewer?.Username;
 | 
			
		||||
            if (await planDao.AddPlanDetail(planDetail))
 | 
			
		||||
            {
 | 
			
		||||
                _message.Notify(new NotificationMessage
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,7 +162,11 @@
 | 
			
		|||
                                        <RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
 | 
			
		||||
                                            <Columns>
 | 
			
		||||
                                                <RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" Sortable="false" />
 | 
			
		||||
                                                <RadzenDropDownDataGridColumn Property="EffDate" Title="效期" Sortable="false" />
 | 
			
		||||
                                                <RadzenDropDownDataGridColumn Property="EffDate" Title="效期" Sortable="false">
 | 
			
		||||
                                                    <Template Context="data">
 | 
			
		||||
                                                        @data.EffDate.ToString("yyyy-MM-dd")
 | 
			
		||||
                                                    </Template>
 | 
			
		||||
                                                    </RadzenDropDownDataGridColumn>
 | 
			
		||||
                                            </Columns>
 | 
			
		||||
                                        </RadzenDropDownDataGrid>
 | 
			
		||||
                                    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,37 @@
 | 
			
		|||
@page "/stock/list"
 | 
			
		||||
@using MasaBlazorApp3.Report
 | 
			
		||||
<style>
 | 
			
		||||
    @@keyframes shake {
 | 
			
		||||
    0% { opacity:1;color:red; }
 | 
			
		||||
    25%{opacity:1;color:orange;}
 | 
			
		||||
    50% { opacity:0;color:yellow;}
 | 
			
		||||
    75%{opacity:1;color:crimson;}
 | 
			
		||||
    100% { opacity:1;color:red;  }
 | 
			
		||||
        0% {
 | 
			
		||||
            opacity: 1;
 | 
			
		||||
            color: red;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        25% {
 | 
			
		||||
            opacity: 1;
 | 
			
		||||
            color: orange;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        50% {
 | 
			
		||||
            opacity: 0;
 | 
			
		||||
            color: yellow;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        75% {
 | 
			
		||||
            opacity: 1;
 | 
			
		||||
            color: crimson;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        100% {
 | 
			
		||||
            opacity: 1;
 | 
			
		||||
            color: red;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .rz-custom-header {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .shaky-text {
 | 
			
		||||
        animation: shake 2s infinite ease-in-out;
 | 
			
		||||
        /* 你可以根据需要调整动画的持续时间和迭代次数 */
 | 
			
		||||
| 
						 | 
				
			
			@ -17,8 +39,52 @@
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
<div class="col-12 mb-4">
 | 
			
		||||
 | 
			
		||||
<div class="container-fluid">
 | 
			
		||||
    <form onsubmit="@(() => grid.Reload())">
 | 
			
		||||
        <RadzenFieldset Text="查询">
 | 
			
		||||
            <RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
 | 
			
		||||
                <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenColumn Size="4">
 | 
			
		||||
                        <RadzenLabel Text="开始时间" Component="Start" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                    <RadzenColumn Size="8">
 | 
			
		||||
                        <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
                <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenColumn Size="4">
 | 
			
		||||
                        <RadzenLabel Text="结束时间" Component="End" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                    <RadzenColumn Size="8">
 | 
			
		||||
                        <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
                <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenColumn Size="6">
 | 
			
		||||
                        <RadzenLabel Text="药品名称/拼音码/编码" Component="drug" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                    <RadzenColumn Size="6">
 | 
			
		||||
                        <RadzenAutoComplete Name="drug" Multiline="true" @bind-Value=@drugName Data=@drugInfo TextProperty="@nameof(DrugInfo.DrugNameSpecManufactory)"
 | 
			
		||||
                                            Style="width: 100%;" InputAttributes="@(new Dictionary<string, object>() { { "aria-label", "drugInfo" } })" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
 | 
			
		||||
                <RadzenRow AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenColumn Size="12">
 | 
			
		||||
                        @* <RadzenButton Size="ButtonSize.Large" ButtonType="ButtonType.Submit" IsBusy="isLoading" Icon="search" Text="查询" /> *@
 | 
			
		||||
                        <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="重置" ButtonStyle="ButtonStyle.Warning" />
 | 
			
		||||
                    </RadzenColumn>
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
                <RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
			
		||||
                    <RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
 | 
			
		||||
                    <RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
 | 
			
		||||
                </RadzenRow>
 | 
			
		||||
            </RadzenStack>
 | 
			
		||||
        </RadzenFieldset>
 | 
			
		||||
    </form>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="col-12 mb-4">
 | 
			
		||||
 | 
			
		||||
    <RadzenDataGrid @ref="grid"
 | 
			
		||||
                    IsLoading="@isLoading"
 | 
			
		||||
| 
						 | 
				
			
			@ -28,12 +94,12 @@
 | 
			
		|||
                    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
			
		||||
                    SelectionMode="DataGridSelectionMode.Single"
 | 
			
		||||
                    ExpandMode="DataGridExpandMode.Multiple">
 | 
			
		||||
        <HeaderTemplate>
 | 
			
		||||
        @* <HeaderTemplate>
 | 
			
		||||
            <RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
			
		||||
                <RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
 | 
			
		||||
                <RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
 | 
			
		||||
            </RadzenRow>
 | 
			
		||||
        </HeaderTemplate>
 | 
			
		||||
        </HeaderTemplate> *@
 | 
			
		||||
        <Template Context="di">
 | 
			
		||||
            <RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
 | 
			
		||||
                <Columns>
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +118,9 @@
 | 
			
		|||
                                bool success = DateTime.TryParse(s.EffDate, out dateTime);
 | 
			
		||||
                                if (success && dateTime <= DateTime.Now.AddMonths(3))
 | 
			
		||||
                                {
 | 
			
		||||
                                    @s.EffDate<p class="shaky-text">近效期药品!</p>
 | 
			
		||||
                                    @s.EffDate
 | 
			
		||||
                            
 | 
			
		||||
                                    <p class="shaky-text">近效期药品!</p>
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +139,9 @@
 | 
			
		|||
                <Template Context="s">
 | 
			
		||||
                    @if (s.StockQuantity < 10)
 | 
			
		||||
                    {
 | 
			
		||||
                        @s.StockQuantity<p class="shaky-text">库存预警!</p>
 | 
			
		||||
                        @s.StockQuantity
 | 
			
		||||
                    
 | 
			
		||||
                        <p class="shaky-text">库存预警!</p>
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +164,9 @@
 | 
			
		|||
    DateTime start;
 | 
			
		||||
    DateTime end;
 | 
			
		||||
 | 
			
		||||
    string drugName;
 | 
			
		||||
 | 
			
		||||
    IEnumerable<DrugInfo> drugInfo;
 | 
			
		||||
 | 
			
		||||
    protected override async Task OnInitializedAsync()
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +176,9 @@
 | 
			
		|||
        var result = await drugInfoDao.GetAllDrugAndStock();
 | 
			
		||||
        // Update the Data property
 | 
			
		||||
        _forecasts = result;
 | 
			
		||||
 | 
			
		||||
        drugInfo = await drugInfoDao.GetAllDrug();
 | 
			
		||||
 | 
			
		||||
        isLoading = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,17 +198,26 @@
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    async void StockExport()
 | 
			
		||||
    //库存导出
 | 
			
		||||
    void StockExport()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async void AccountBookExport()
 | 
			
		||||
    //专用账册导出
 | 
			
		||||
    void AccountBookExport()
 | 
			
		||||
    {
 | 
			
		||||
        
 | 
			
		||||
        // string drugId = drugName != null ? drugName.Split('/').Last().Trim():"";
 | 
			
		||||
        // GridReportUtil gridReportUtil = new GridReportUtil();
 | 
			
		||||
        GridReportUtil.PrintReport("stock_template.grf", null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //重置
 | 
			
		||||
    async Task reloadGrid()
 | 
			
		||||
    {
 | 
			
		||||
        start = DateTime.MinValue;
 | 
			
		||||
        end = DateTime.MinValue;
 | 
			
		||||
        drugName = string.Empty;
 | 
			
		||||
        await grid.Reload();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,5 +50,7 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
        //手术室药箱中的库存总数
 | 
			
		||||
        [Column("stock_quantity")]
 | 
			
		||||
        public int TotalQuantity { get; set; }
 | 
			
		||||
        [Association(ThisKey = nameof(DrugId), OtherKey = nameof(PlanDetails.PlanId))]
 | 
			
		||||
        public List<PlanDetails> _PlanDetails { get; set; } = new();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,13 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
 | 
			
		||||
        [Column("pack_unit")]
 | 
			
		||||
        public string PackUnit { get; set; }
 | 
			
		||||
        [Column("py_code")]
 | 
			
		||||
        public string PyCode { get; set; }
 | 
			
		||||
        [Column(IsColumn =false)]
 | 
			
		||||
        public string DrugNameSpecManufactory 
 | 
			
		||||
        {
 | 
			
		||||
            get => DrugName + " / " + DrugSpec+ " / " + Manufactory+" / " + PyCode+" / " + DrugId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [Association(ThisKey = nameof(DrugId), OtherKey = nameof(ChannelStock.DrugId))]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,20 +13,28 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
    {
 | 
			
		||||
        [Column("Id")]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
        //操作时间
 | 
			
		||||
        [Column("optDate")]
 | 
			
		||||
        public DateTime optDate { get; set; }
 | 
			
		||||
        //交班操作人
 | 
			
		||||
        [Column("FromOperator")]
 | 
			
		||||
        public string FromOperator { get; set; }
 | 
			
		||||
        //交班审核人
 | 
			
		||||
        [Column("FromRviewer")]
 | 
			
		||||
        public string FromRviewer { get; set; }
 | 
			
		||||
        //接班操作人
 | 
			
		||||
        [Column("ToOperator")]
 | 
			
		||||
        public string ToOperator { get; set; }
 | 
			
		||||
        //接班审核人
 | 
			
		||||
        [Column("ToReviewer")]
 | 
			
		||||
        public string ToReviewer { get; set; }
 | 
			
		||||
        //接班时间
 | 
			
		||||
        [Column("ToDate")]
 | 
			
		||||
        public DateTime ToDate { get; set; }
 | 
			
		||||
        //当班状态(0当前值班,1已交班)
 | 
			
		||||
        [Column("State")]
 | 
			
		||||
        public string State { get; set; }
 | 
			
		||||
        //操作状态(0新增,1修改)
 | 
			
		||||
        [Column("optState")]
 | 
			
		||||
        public string optState { get; set; }
 | 
			
		||||
        [Column("machine_id")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
        [Column("eff_date")]
 | 
			
		||||
        public DateTime? EffDate { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 出库入库类型(1入库2出库31还药32还空瓶) 
 | 
			
		||||
        /// 出库入库类型(1入库2出库31还药32还空瓶,21药箱移出移入,69药箱药品替换,55药箱套餐绑定解绑) 
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [Column("type")]
 | 
			
		||||
        public int Type { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -147,15 +147,15 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
        ///</summary>
 | 
			
		||||
        [Column("win_no")]
 | 
			
		||||
        public int WinNo { get; set; } = 0;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: 0
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [Column("state")]
 | 
			
		||||
        public int state { get; set; } = 0;
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        /////  
 | 
			
		||||
        ///// 默认值: 0
 | 
			
		||||
        /////</summary>
 | 
			
		||||
        //[Column("state")]
 | 
			
		||||
        //public int state { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
        [Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
 | 
			
		||||
        public OrderDetail Detail { get; set; } = new();
 | 
			
		||||
        public List<OrderDetail> DetailList { get; set; } = new();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否选中
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
        [Column("Drug_Id")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [Association(ThisKey = nameof(Id), OtherKey = nameof(PlanDetails.DrugId))]
 | 
			
		||||
        [Association(ThisKey = nameof(DrugId), OtherKey = nameof(DrugInfo.DrugId))]
 | 
			
		||||
        public DrugInfo _DrugInfo { get; set; } = new(); 
 | 
			
		||||
        //添加时间
 | 
			
		||||
        [Column("AddTime")]
 | 
			
		||||
| 
						 | 
				
			
			@ -33,9 +33,13 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
        public int UseState { get; set; }
 | 
			
		||||
        //操作人
 | 
			
		||||
        [Column("operatorUser")]
 | 
			
		||||
        public int OperatorUser { get; set; }
 | 
			
		||||
        public string OperatorUser { get; set; }
 | 
			
		||||
        //审核人
 | 
			
		||||
        [Column("reviewerUser")]
 | 
			
		||||
        public int ReviewerUser { get; set; }
 | 
			
		||||
        public string ReviewerUser { get; set; }
 | 
			
		||||
        public List<ChannelStock> channelStocks { get; set; } = new List<ChannelStock>();
 | 
			
		||||
 | 
			
		||||
        public DrugManuNo _ManuNo { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -177,6 +177,12 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
                PremissionName = "药品标定",
 | 
			
		||||
                PremissionPath = "/stock/biaoDing"
 | 
			
		||||
            });
 | 
			
		||||
            k.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 47,
 | 
			
		||||
                PremissionName = "交接班列表",
 | 
			
		||||
                PremissionPath = "/stock/Change"
 | 
			
		||||
            });
 | 
			
		||||
            Premission x = new Premission
 | 
			
		||||
            {
 | 
			
		||||
                Id = 5,
 | 
			
		||||
| 
						 | 
				
			
			@ -216,40 +222,93 @@ namespace MasaBlazorApp3.Pojo
 | 
			
		|||
                PremissionPath = "/manage/setting/Fridge"
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
            x.AddChild(new Premission()
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 54,
 | 
			
		||||
            //    PremissionName = "套餐管理",
 | 
			
		||||
            //    PremissionPath = "/Box/Plan"
 | 
			
		||||
            //});
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 55,
 | 
			
		||||
            //    PremissionName = "绑定药箱",
 | 
			
		||||
            //    PremissionPath = "/Box/BoxBindings"
 | 
			
		||||
            //});
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 56,
 | 
			
		||||
            //    PremissionName = "药箱核对",
 | 
			
		||||
            //    PremissionPath = "/Box/Check"
 | 
			
		||||
            //});
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 57,
 | 
			
		||||
            //    PremissionName = "药箱加药",
 | 
			
		||||
            //    PremissionPath = "/Box/BoxAdd"
 | 
			
		||||
            //});
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 58,
 | 
			
		||||
            //    PremissionName = "药箱入库",
 | 
			
		||||
            //    PremissionPath = "/Box/BoxAddBox"
 | 
			
		||||
            //});
 | 
			
		||||
            //x.AddChild(new Premission()
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 59,
 | 
			
		||||
            //    PremissionName = "药箱库存",
 | 
			
		||||
            //    PremissionPath = "/Box/BoxStock"
 | 
			
		||||
            //});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            Premission b = new Premission
 | 
			
		||||
            {
 | 
			
		||||
                Id = 54,
 | 
			
		||||
                Id = 6,
 | 
			
		||||
                PremissionName = "药箱管理",
 | 
			
		||||
                PremissionPath = "Box"
 | 
			
		||||
            };
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 61,
 | 
			
		||||
                PremissionName = "套餐管理",
 | 
			
		||||
                PremissionPath = "/Box/Plan"
 | 
			
		||||
            });
 | 
			
		||||
            x.AddChild(new Premission()
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 55,
 | 
			
		||||
                Id = 62,
 | 
			
		||||
                PremissionName = "绑定药箱",
 | 
			
		||||
                PremissionPath = "/Box/BoxBindings"
 | 
			
		||||
            });
 | 
			
		||||
            x.AddChild(new Premission()
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 56,
 | 
			
		||||
                Id = 63,
 | 
			
		||||
                PremissionName = "药箱核对",
 | 
			
		||||
                //PremissionName = "盘点交接",
 | 
			
		||||
                PremissionPath = "/Box/Check"
 | 
			
		||||
            });
 | 
			
		||||
            x.AddChild(new Premission()
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 57,
 | 
			
		||||
                Id = 66,
 | 
			
		||||
                PremissionName = "药箱加药",
 | 
			
		||||
                //PremissionPath = "/stock/checkRecord"
 | 
			
		||||
                PremissionPath = "/Box/BoxAdd"
 | 
			
		||||
            });
 | 
			
		||||
            x.AddChild(new Premission()
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 58,
 | 
			
		||||
                Id = 65,
 | 
			
		||||
                PremissionName = "药箱入库",
 | 
			
		||||
                PremissionPath = "/Box/BoxAddBox"
 | 
			
		||||
            });
 | 
			
		||||
            b.AddChild(new Premission()
 | 
			
		||||
            {
 | 
			
		||||
                Id = 66,
 | 
			
		||||
                PremissionName = "药箱库存",
 | 
			
		||||
                PremissionPath = "/Box/BoxStock"
 | 
			
		||||
            });
 | 
			
		||||
            list.Add(q);
 | 
			
		||||
            list.Add(j);
 | 
			
		||||
            list.Add(h);
 | 
			
		||||
            list.Add(k);
 | 
			
		||||
            list.Add(b);
 | 
			
		||||
            x.AddChild(set);
 | 
			
		||||
            list.Add(x);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,10 @@ internal class Program
 | 
			
		|||
        //药品批次
 | 
			
		||||
        appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //交接班记录
 | 
			
		||||
        appBuilder.Services.AddScoped<IHkcChangeShiftsDao, HkcChangeShiftsDao>();
 | 
			
		||||
        //GlobalStateService.connStr = config.GetValue<String>("connectionStrings");
 | 
			
		||||
        var app = appBuilder.Build();
 | 
			
		||||
        app.MainWindow
 | 
			
		||||
            .SetHeight(768)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.8.5.2",
 | 
			
		||||
	"Version":"6.8.1.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
| 
						 | 
				
			
			@ -17,8 +17,6 @@
 | 
			
		|||
		"CenterView":true,
 | 
			
		||||
		"AppendBlankRow":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"ConnectionString":"MYSQL;\r\nDatabase=hkcdb;\r\nPassword=qq1223;\r\nPort=3307;\r\nServer=127.0.0.1;\r\nUser=root;",
 | 
			
		||||
			"QuerySQL":"SELECT \r\n  mr.`stock_quantity` AS `stockQuantity`,\r\n  IF(mr.`type` IN (1, 31), mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` > 0, mr.`quantity`, 0)) AS `inQuantity`,\r\n  IF(mr.`type` = 2, mr.`quantity`, IF(mr.`type` = 4 AND mr.`quantity` < 0, (0 - mr.`quantity`), 0)) AS `outQuantity`,\r\n  mr.`operation_time` AS `operationTime`,\r\n  mr.`invoice_id` AS `invoiceId`,\r\n  di.`drug_name` AS `drugName`,\r\n  di.`drug_id` AS `drugId`,\r\n  di.`drug_spec` AS `drugSpec`,\r\n  di.`pack_unit` AS `packUnit`,\r\n  di.`dosage` AS `dosage`,\r\n  di.`manufactory` AS `manufactory`,\r\n  mr.`manu_no` AS `manuNo`,\r\n  mr.`eff_date` AS `effDate`,\r\n  u1.`user_name` AS `operatorName`,\r\n  u2.`user_name` AS `reviewerName`\r\nFROM\r\n  dm_machine_record mr \r\n  LEFT JOIN drug_info di ON mr.`drug_id` = di.`drug_id` \r\n  LEFT JOIN user_list u1 ON mr.`operator` = u1.`id`\r\n  LEFT JOIN user_list u2 ON mr.`reviewer` = u2.`id`\r\n  ORDER BY mr.`drug_id`, mr.`operation_time`, mr.`id`",
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"日期",
 | 
			
		||||
| 
						 | 
				
			
			@ -34,11 +32,6 @@
 | 
			
		|||
					"Name":"批号",
 | 
			
		||||
					"DBFieldName":"manuNo"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"上次批次结存",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"beforeManuQuan"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"入库数量",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
| 
						 | 
				
			
			@ -49,11 +42,6 @@
 | 
			
		|||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"outQuantity"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"批号结存",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"manuQuantity"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"总结存",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +53,7 @@
 | 
			
		|||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"复核人",
 | 
			
		||||
					"DBFieldName":"reviewName"
 | 
			
		||||
					"DBFieldName":"reviewerName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"药品名称",
 | 
			
		||||
| 
						 | 
				
			
			@ -94,15 +82,12 @@
 | 
			
		|||
					"DBFieldName":"effDate"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"sign1",
 | 
			
		||||
					"Type":"Binary"
 | 
			
		||||
					"Name":"drugId",
 | 
			
		||||
					"DBFieldName":"drug_Id"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"sign2",
 | 
			
		||||
					"Type":"Binary"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugId"
 | 
			
		||||
					"Name":"凭证号",
 | 
			
		||||
					"DBFieldName":"invoiceId"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +97,7 @@
 | 
			
		|||
				"Width":1.77271
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"操作类型",
 | 
			
		||||
				"Name":"凭证号",
 | 
			
		||||
				"Width":2.19604
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +106,7 @@
 | 
			
		|||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"有效期",
 | 
			
		||||
				"Width":2.43417
 | 
			
		||||
				"Width":2.40771
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"入库数量",
 | 
			
		||||
| 
						 | 
				
			
			@ -157,20 +142,14 @@
 | 
			
		|||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"DataField":"日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"操作类型",
 | 
			
		||||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox10",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
					"Column":"凭证号",
 | 
			
		||||
					"DataField":"凭证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
| 
						 | 
				
			
			@ -228,11 +207,10 @@
 | 
			
		|||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox6",
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox14",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"药库"
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
| 
						 | 
				
			
			@ -241,11 +219,10 @@
 | 
			
		|||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox7",
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox15",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"门诊药房"
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -269,7 +246,7 @@
 | 
			
		|||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"操作类型",
 | 
			
		||||
					"Column":"凭证号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
| 
						 | 
				
			
			@ -394,6 +371,7 @@
 | 
			
		|||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"drugId",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"NewPage":"Before",
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"RepeatOnPage":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
{
 | 
			
		||||
  "connectionStrings": "server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=root;Charset=utf8mb4;",
 | 
			
		||||
  "connectionStrings": "server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=qq1223;Charset=utf8mb4;",
 | 
			
		||||
  "finger": {
 | 
			
		||||
    "ip": "192.168.50.201",
 | 
			
		||||
    "ip": "192.168.50.59",
 | 
			
		||||
    "port": 4370,
 | 
			
		||||
    "type": 2
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -15,9 +15,9 @@
 | 
			
		|||
    "boxMachineId": "DM5"
 | 
			
		||||
  },
 | 
			
		||||
  "port": {
 | 
			
		||||
    "drawerPortPath": "COM1",
 | 
			
		||||
    "drawerPortPath": "COM2",
 | 
			
		||||
    "drawerProtocol": 485,
 | 
			
		||||
    "scanCodePortPath": "COM8",
 | 
			
		||||
    "scanCodePortPath": "COM1",
 | 
			
		||||
    "canBusPortPath": "COM31",
 | 
			
		||||
    "canBusExsit": true,
 | 
			
		||||
    "doorAddr": 0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue