Compare commits
	
		
			2 Commits
		
	
	
		
			ac39763b13
			...
			396fb8743f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
								 | 
						396fb8743f | 
							 | 
					|
| 
							
							
								
								 | 
						ff96d4e676 | 
							 | 
					
| 
						 | 
					@ -8,13 +8,19 @@ EndProject
 | 
				
			||||||
Global
 | 
					Global
 | 
				
			||||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
		Debug|Any CPU = Debug|Any CPU
 | 
							Debug|Any CPU = Debug|Any CPU
 | 
				
			||||||
 | 
							Debug|x64 = Debug|x64
 | 
				
			||||||
		Release|Any CPU = Release|Any CPU
 | 
							Release|Any CPU = Release|Any CPU
 | 
				
			||||||
 | 
							Release|x64 = Release|x64
 | 
				
			||||||
	EndGlobalSection
 | 
						EndGlobalSection
 | 
				
			||||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
						GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
				
			||||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
							{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|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.ActiveCfg = Release|Any CPU
 | 
				
			||||||
		{B589889C-FAEB-4394-A21D-DDCADF39382D}.Release|Any CPU.Build.0 = 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
 | 
						EndGlobalSection
 | 
				
			||||||
	GlobalSection(SolutionProperties) = preSolution
 | 
						GlobalSection(SolutionProperties) = preSolution
 | 
				
			||||||
		HideSolutionNode = FALSE
 | 
							HideSolutionNode = FALSE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,10 +50,36 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
				
			||||||
        //手术室药箱补药获取毒麻柜中的药品信息
 | 
					        //手术室药箱补药获取毒麻柜中的药品信息
 | 
				
			||||||
        Task<List<BoxTakeVo>> getTakeInfoByBox(ChannelList cl);
 | 
					        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<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>
 | 
					        /// <param name="details"></param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        Task<bool> UpdatePlanDetail(PlanDetails details);
 | 
					        Task<bool> UpdatePlanDetail(PlanDetails details);
 | 
				
			||||||
 | 
					        //查询要删除的套餐下是否有绑定,且绑定有库存
 | 
				
			||||||
 | 
					        Task<bool> CheckPlanBind(int planId);
 | 
				
			||||||
 | 
					        //查询要删除的药品是否有绑定且库存大于0
 | 
				
			||||||
 | 
					        Task<bool> CheckPlanDetailBind(PlanDetails planDetail);
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 删除套餐中的药品
 | 
					        /// 删除套餐中的药品
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,5 +21,9 @@ namespace MasaBlazorApp3.DataAccess.Dao
 | 
				
			||||||
        Task<bool> UpdateSign(int id, string sign);
 | 
					        Task<bool> UpdateSign(int id, string sign);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bool UpdateUserPassword(User user);
 | 
					        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
 | 
					            var q = _connection.ChannelStock
 | 
				
			||||||
                .Where(cs => cs.Id == Stock.Id)
 | 
					                .Where(cs => cs.Id == Stock.Id)
 | 
				
			||||||
                .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
 | 
					                .Set(cs => cs.Dmnguid, Stock.drugManuNo?.Id ?? String.Empty)
 | 
				
			||||||
                .Set(cs => cs.EffDate, Stock.drugManuNo?.EffDate.ToString().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);
 | 
					                .Set(cs => cs.ManuNo, Stock.drugManuNo?.ManuNo ?? String.Empty);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
 | 
					            if (Stock.Drug != null && !Stock.Drug.DrugId.Equals(Stock.DrugId))
 | 
				
			||||||
| 
						 | 
					@ -617,7 +617,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
 | 
					                    .Where(cs => cs.Id == list.Id).Set(cs => cs.DrugId, list.PlanInfo.Id.ToString());
 | 
				
			||||||
                //将套餐中的药品信息写入channelStock
 | 
					                //将套餐中的药品信息写入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();
 | 
					                List<PlanDetails> planInfos = await query.ToListAsync();
 | 
				
			||||||
                if (planInfos != null && planInfos.Count > 0)
 | 
					                if (planInfos != null && planInfos.Count > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -631,6 +631,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                            DrawerNo = list.DrawerNo,
 | 
					                            DrawerNo = list.DrawerNo,
 | 
				
			||||||
                            DrugId = planInfos[i].DrugId.ToString(),
 | 
					                            DrugId = planInfos[i].DrugId.ToString(),
 | 
				
			||||||
                            BaseQuantity = planInfos[i].BaseQuantity,
 | 
					                            BaseQuantity = planInfos[i].BaseQuantity,
 | 
				
			||||||
 | 
					                            BoxState = 1
 | 
				
			||||||
                        });
 | 
					                        });
 | 
				
			||||||
                        if (mid > 0)
 | 
					                        if (mid > 0)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -704,7 +705,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                List<ChannelList> channelLists = new List<ChannelList>();
 | 
					                List<ChannelList> channelLists = new List<ChannelList>();
 | 
				
			||||||
                var query = _connection.ChannelStock//.AsQueryable()
 | 
					                var query = _connection.ChannelStock//.AsQueryable()
 | 
				
			||||||
                .Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
 | 
					                .Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1)
 | 
				
			||||||
                .GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
 | 
					                .GroupBy(cs => new { cs.DrawerNo, cs.DrugId })
 | 
				
			||||||
                .Select(g => new
 | 
					                .Select(g => new
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -715,7 +716,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                .ToList();
 | 
					                .ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                var queryChannelStock = _connection.ChannelStock.AsQueryable()
 | 
					                var queryChannelStock = _connection.ChannelStock.AsQueryable()
 | 
				
			||||||
               .Where(cs => cs.MachineId == _setting.boxMachineId&&cs.BoxState==1)
 | 
					               .Where(cs => cs.MachineId == _setting.boxMachineId && cs.BoxState == 1)
 | 
				
			||||||
               .LoadWith(cs => cs.Drug).ToList();
 | 
					               .LoadWith(cs => cs.Drug).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -729,7 +730,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                            ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
 | 
					                            ChannelStock stock = queryChannelStock.Where(cs => cs.DrawerNo == item.DrawerNo && cs.DrugId == item.DrugId && cs.BaseQuantity > item.sumQuantity).FirstOrDefault();
 | 
				
			||||||
                            if (stock != null)
 | 
					                            if (stock != null)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                stock.NeedQuantity = stock.BaseQuantity-item.sumQuantity;
 | 
					                                stock.NeedQuantity = stock.BaseQuantity - item.sumQuantity;
 | 
				
			||||||
                                queryList[i].ChannelStocks.Add(stock);
 | 
					                                queryList[i].ChannelStocks.Add(stock);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
| 
						 | 
					@ -772,9 +773,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    // 当前药品取药数量
 | 
					                    // 当前药品取药数量
 | 
				
			||||||
                    var Quantity = boxCs.NeedQuantity;
 | 
					                    var Quantity = boxCs.NeedQuantity;
 | 
				
			||||||
                    List<ChannelStock> stockList = await _connection.ChannelStock
 | 
					                    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.machineId && cs.DrawerType == 1 && cs.DrugId == boxCs.DrugId && cs.Quantity > 0 && cs.ManuNo != null)
 | 
				
			||||||
                        .AsQueryable()
 | 
					                        .AsQueryable()
 | 
				
			||||||
                        .OrderBy(cs=>cs.EffDate).ToListAsync();
 | 
					                        .OrderBy(cs => cs.EffDate).ToListAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // 当前药品的库存总量
 | 
					                    // 当前药品的库存总量
 | 
				
			||||||
                    var total = stockList.Sum(current => current.Quantity);
 | 
					                    var total = stockList.Sum(current => current.Quantity);
 | 
				
			||||||
| 
						 | 
					@ -789,7 +790,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    if (flag)
 | 
					                    if (flag)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        // 盘点库存是否足够
 | 
					                        // 盘点库存是否足够
 | 
				
			||||||
                        if (total > Quantity)
 | 
					                        if (total >= Quantity)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            for (var j = 0; Quantity > 0; j++)
 | 
					                            for (var j = 0; Quantity > 0; j++)
 | 
				
			||||||
| 
						 | 
					@ -801,7 +802,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    tempData.Add(new BoxTakeVo()
 | 
					                                    tempData.Add(new BoxTakeVo()
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
                                        Drug = boxCs.Drug,
 | 
					                                        Drug = boxCs.Drug,
 | 
				
			||||||
                                        BoxDetail= boxCs,
 | 
					                                        BoxDetail = boxCs,
 | 
				
			||||||
                                        ChannelStock = stock,
 | 
					                                        ChannelStock = stock,
 | 
				
			||||||
                                        StockQuantity = total,
 | 
					                                        StockQuantity = total,
 | 
				
			||||||
                                        Quantity = stock.Quantity,
 | 
					                                        Quantity = stock.Quantity,
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
					            try
 | 
				
			||||||
| 
						 | 
					@ -950,19 +951,20 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    #endregion
 | 
					                    #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    //更新药箱中的药品数量
 | 
					                    //更新药箱中的药品数量
 | 
				
			||||||
                    int boxID = _connection.Insert(new ChannelStock() { 
 | 
					                    int boxID = _connection.Insert(new ChannelStock()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        Id = Guid.NewGuid().ToString(),
 | 
					                        Id = Guid.NewGuid().ToString(),
 | 
				
			||||||
                        ListId = boxTakeVo.BoxDetail.Id,
 | 
					                        ListId = boxTakeVo.BoxDetail.Id,
 | 
				
			||||||
                        MachineId = _setting.boxMachineId,
 | 
					                        MachineId = _setting.boxMachineId,
 | 
				
			||||||
                        DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
 | 
					                        DrawerNo = boxTakeVo.BoxDetail.DrawerNo,
 | 
				
			||||||
                        AddToQuantity = boxTakeVo.GetQuantity,
 | 
					                        AddToQuantity = boxTakeVo.GetQuantity,
 | 
				
			||||||
                        NeedQuantity=0,
 | 
					                        NeedQuantity = 0,
 | 
				
			||||||
                        DrugId = boxTakeVo.ChannelStock.DrugId,
 | 
					                        DrugId = boxTakeVo.ChannelStock.DrugId,
 | 
				
			||||||
                        ManuNo = boxTakeVo.ChannelStock.ManuNo,
 | 
					                        ManuNo = boxTakeVo.ChannelStock.ManuNo,
 | 
				
			||||||
                        EffDate= boxTakeVo.ChannelStock.EffDate,
 | 
					                        EffDate = EffDate,
 | 
				
			||||||
                        BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
 | 
					                        BaseQuantity = boxTakeVo.BoxDetail.BaseQuantity,
 | 
				
			||||||
                        BoardType = boxTakeVo.BoxDetail.BoardType,
 | 
					                        BoardType = boxTakeVo.BoxDetail.BoardType,
 | 
				
			||||||
                        BoxState= 2 //补药完成
 | 
					                        BoxState = 2 //补药完成
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                    // 手术室药箱入库记录
 | 
					                    // 手术室药箱入库记录
 | 
				
			||||||
                    int boxMId = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
					                    int boxMId = _connection.InsertWithInt32Identity(new MachineRecord()
 | 
				
			||||||
| 
						 | 
					@ -979,12 +981,12 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
					                        Reviewer = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id,
 | 
				
			||||||
                        InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
 | 
					                        InvoiceId = boxTakeVo.ChannelStock.Id.ToString(),
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                    int totalQuantity = _connection.PlanDetails.Where(p => p.PlanId == Convert.ToInt32(boxTakeVo.BoxDetail.DrugId)).Sum(p => p.BaseQuantity);
 | 
					                    //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 == boxTakeVo.BoxDetail.Id)
 | 
					                    //int list = _connection.ChannelList.Where(cl => cl.Id == boxChannelList.Id)
 | 
				
			||||||
                        .Set(cl => cl.TotalQuantity, totalQuantity)
 | 
					                    //    .Set(cl => cl.TotalQuantity, totalQuantity)
 | 
				
			||||||
                        .Update();
 | 
					                    //    .Update();
 | 
				
			||||||
                    int delResutl = await _connection.ChannelStock.Where(cs => cs.Id == boxTakeVo.BoxDetail.Id).DeleteAsync();
 | 
					                    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"))
 | 
					                        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
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -1092,8 +1094,10 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    // 当前药品取药数量
 | 
					                    // 当前药品取药数量
 | 
				
			||||||
                    var Quantity = boxCs.NeedQuantity;
 | 
					                    var Quantity = boxCs.NeedQuantity;
 | 
				
			||||||
                    List<ChannelStock> stockList = await _connection.ChannelStock
 | 
					                    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()
 | 
					                        .AsQueryable()
 | 
				
			||||||
 | 
					                        .Skip((int)skip)
 | 
				
			||||||
 | 
					                        .Take((int)take)
 | 
				
			||||||
                        .OrderBy(cs => cs.EffDate).ToListAsync();
 | 
					                        .OrderBy(cs => cs.EffDate).ToListAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // 当前药品的库存总量
 | 
					                    // 当前药品的库存总量
 | 
				
			||||||
| 
						 | 
					@ -1105,58 +1109,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                        StockQuantity = total,
 | 
					                        StockQuantity = total,
 | 
				
			||||||
                        Quantity = Quantity
 | 
					                        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;
 | 
					                return tempData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1167,5 +1119,523 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                return null;
 | 
					                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();
 | 
					            int pagedData = await query.CountAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<OrderInfo> list = await query
 | 
					            List<OrderInfo> list = await query
 | 
				
			||||||
                .LoadWith(oi => oi.Detail)
 | 
					                //.LoadWith(oi => oi.Detail)
 | 
				
			||||||
                .LoadWith(oi => oi.Detail.Drug)
 | 
					                //.LoadWith(oi => oi.Detail.Drug)
 | 
				
			||||||
                .OrderBy((oi) => oi.RecvDate)
 | 
					                .OrderBy((oi) => oi.RecvDate)
 | 
				
			||||||
                .ThenBy((oi => oi.OrderNo))
 | 
					                .ThenBy((oi => oi.OrderNo))
 | 
				
			||||||
                .Skip((int)skip)
 | 
					                .Skip((int)skip)
 | 
				
			||||||
| 
						 | 
					@ -590,10 +590,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public async Task<PageData<OrderInfo>> GetAllOrderInfoByBox(int box, string OrderrNo, DateTime OrderDate, int? take, int? skip)
 | 
					        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
 | 
					            var query2 = from od in _connection.OrderDetail
 | 
				
			||||||
                         from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
 | 
					                         from cl in _connection.ChannelStock.Where(c => c.MachineId == _setting.machineId).InnerJoin(c => c.DrugId == od.DrugId)
 | 
				
			||||||
                         group od by od.OrderNo into temp
 | 
					                         group od by od.OrderNo into temp
 | 
				
			||||||
| 
						 | 
					@ -601,7 +597,6 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            var query = from oi in _connection.OrderInfo
 | 
					            var query = from oi in _connection.OrderInfo
 | 
				
			||||||
                        from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
 | 
					                        from od in query2.InnerJoin(od => od.Key == oi.OrderNo)
 | 
				
			||||||
                        select oi;
 | 
					                        select oi;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (!String.IsNullOrEmpty(OrderrNo))
 | 
					            if (!String.IsNullOrEmpty(OrderrNo))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
 | 
					                query = query.Where(oi => oi.OrderNo.Equals(OrderrNo));
 | 
				
			||||||
| 
						 | 
					@ -619,8 +614,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            int pagedData = await query.CountAsync();
 | 
					            int pagedData = await query.CountAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<OrderInfo> list = await query
 | 
					            List<OrderInfo> list = await query
 | 
				
			||||||
                //.LoadWith(oi => oi.Detail)
 | 
					                //.LoadWith(oi => oi.DetailList)
 | 
				
			||||||
                //.LoadWith(oi => oi.Detail.Drug)
 | 
					 | 
				
			||||||
                .OrderBy((oi) => oi.RecvDate)
 | 
					                .OrderBy((oi) => oi.RecvDate)
 | 
				
			||||||
                .ThenBy((oi => oi.OrderNo))
 | 
					                .ThenBy((oi => oi.OrderNo))
 | 
				
			||||||
                .Skip((int)skip)
 | 
					                .Skip((int)skip)
 | 
				
			||||||
| 
						 | 
					@ -630,12 +624,56 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                for (int i = 0; i < list.Count; i++)
 | 
					                for (int i = 0; i < list.Count; i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    //list[i].Detail = await _connection.OrderDetail.AsQueryable()
 | 
					                    for (int j = 0; j < list[i].DetailList.Count; j++)
 | 
				
			||||||
                    //    .Where(od => od.OrderNo == list[i].OrderNo)
 | 
					                    {
 | 
				
			||||||
                    //    .LoadWith(od => od.Drug)
 | 
					                        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();
 | 
					            //    .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>()
 | 
					            return new PageData<OrderInfo>()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -654,7 +692,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            return ints;
 | 
					            return ints;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //核对处方
 | 
					        //核对处方
 | 
				
			||||||
        public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos,int DrawerNo)
 | 
					        public async Task<bool> CheckOrderInfo(IList<OrderInfo> selectedOrderInfos, int DrawerNo)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -670,9 +708,9 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                    OrderInfo oi = selectedOrderInfos[i];
 | 
					                    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()
 | 
					                        _connection.Insert(new OrderFinish()
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            OrderNo = oi.OrderNo,
 | 
					                            OrderNo = oi.OrderNo,
 | 
				
			||||||
| 
						 | 
					@ -683,25 +721,34 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                            Operator = _globalStateService.Operator.NickName,
 | 
					                            Operator = _globalStateService.Operator.NickName,
 | 
				
			||||||
                        });
 | 
					                        });
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    int drawerNo = DrawerNo + 1;
 | 
					                    int drawerNo = DrawerNo;
 | 
				
			||||||
                    ChannelStock cs =_connection.ChannelStock.AsQueryable()
 | 
					                    if (oi.DetailList != null && oi.DetailList.Count > 0)
 | 
				
			||||||
                                     .Where(cs => cs.DrugId == oi.Detail.DrugId
 | 
					                    {
 | 
				
			||||||
                                            && cs.ManuNo == oi.Detail.SetManuNo
 | 
					                        for (int j = 0; j < oi.DetailList.Count; j++)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            ChannelStock cs = _connection.ChannelStock.AsQueryable()
 | 
				
			||||||
 | 
					                                             .Where(cs => cs.DrugId == oi.DetailList[j].DrugId
 | 
				
			||||||
 | 
					                                                    && cs.ManuNo == oi.DetailList[j].SetManuNo
 | 
				
			||||||
                                                    // && cs.EffDate == oi._OrderDetail.SetEffDate
 | 
					                                                    // && cs.EffDate == oi._OrderDetail.SetEffDate
 | 
				
			||||||
                                                    && cs.MachineId.Equals(_setting.boxMachineId)
 | 
					                                                    && cs.MachineId.Equals(_setting.boxMachineId)
 | 
				
			||||||
                                                    && cs.DrawerNo == drawerNo
 | 
					                                                    && cs.DrawerNo == drawerNo
 | 
				
			||||||
                                            && cs.Quantity >= oi.Detail.Quantity).First();
 | 
					                                                    && cs.Quantity >= oi.DetailList[j].Quantity).First();
 | 
				
			||||||
                            if (cs == null)
 | 
					                            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;
 | 
					                                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;
 | 
					                            //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);
 | 
					                            _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()
 | 
					                            List<ChannelStock> nowChannels = _connection.ChannelStock.AsQueryable()
 | 
				
			||||||
                                .Where(it => it.MachineId.Equals(cs.MachineId) || it.MachineId.Equals(_setting.machineId))
 | 
					                                .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.ManuNo.Equals(cs.ManuNo))
 | 
				
			||||||
                                .Where(it => it.DrawerType == 1)
 | 
					                                .Where(it => it.DrawerType == 1)
 | 
				
			||||||
                                .ToList();
 | 
					                                .ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if (cs != null)
 | 
					                            if (cs != null)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                _connection.Insert(new MachineRecord()
 | 
					                                _connection.Insert(new MachineRecord()
 | 
				
			||||||
| 
						 | 
					@ -722,7 +770,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    Operator = _globalStateService.Operator?.Id,
 | 
					                                    Operator = _globalStateService.Operator?.Id,
 | 
				
			||||||
                                    Reviewer = _globalStateService.Reviewer?.Id,
 | 
					                                    Reviewer = _globalStateService.Reviewer?.Id,
 | 
				
			||||||
                                    OperationTime = DateTime.Now,
 | 
					                                    OperationTime = DateTime.Now,
 | 
				
			||||||
                            Quantity = oi.Detail.Quantity,
 | 
					                                    Quantity = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                    Type = 2,
 | 
					                                    Type = 2,
 | 
				
			||||||
                                    InvoiceId = oi.OrderNo
 | 
					                                    InvoiceId = oi.OrderNo
 | 
				
			||||||
                                    //, StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
					                                    //, StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
				
			||||||
| 
						 | 
					@ -730,21 +778,21 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                //查询上一条账册中的空瓶数
 | 
					                                //查询上一条账册中的空瓶数
 | 
				
			||||||
                        AccountBookG2 accountBookEmpty =_connection.AccountBookG2.AsQueryable()
 | 
					                                AccountBookG2 accountBookEmpty = _connection.AccountBookG2.AsQueryable()
 | 
				
			||||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
					                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
				
			||||||
                                .Where(ab => ab.Type == 1 || ab.Type == 2)
 | 
					                                .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();
 | 
					                                .Where(ab => ab.ManuNo == cs.ManuNo).OrderByDescending(ab => ab.Id).First();
 | 
				
			||||||
                                //保存账册
 | 
					                                //保存账册
 | 
				
			||||||
                                int iInsertResult = _connection.Insert(new AccountBookG2()
 | 
					                                int iInsertResult = _connection.Insert(new AccountBookG2()
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                            DrugId = oi.Detail.DrugId,
 | 
					                                    DrugId = oi.DetailList[j].DrugId,
 | 
				
			||||||
                                    Type = 2,
 | 
					                                    Type = 2,
 | 
				
			||||||
                                    Department = oi.DeptName,
 | 
					                                    Department = oi.DeptName,
 | 
				
			||||||
                                    OrderNo = oi.OrderNo,
 | 
					                                    OrderNo = oi.OrderNo,
 | 
				
			||||||
                                    ManuNo = cs.ManuNo,
 | 
					                                    ManuNo = cs.ManuNo,
 | 
				
			||||||
                                    EffDate = cs.EffDate,
 | 
					                                    EffDate = cs.EffDate,
 | 
				
			||||||
                            OutQuantity = oi.Detail.Quantity,
 | 
					                                    OutQuantity = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                    UserId1 = _globalStateService.Operator?.Id,
 | 
					                                    UserId1 = _globalStateService.Operator?.Id,
 | 
				
			||||||
                                    UserId2 = _globalStateService.Reviewer?.Id,
 | 
					                                    UserId2 = _globalStateService.Reviewer?.Id,
 | 
				
			||||||
                                    MachineId = _setting.machineId,
 | 
					                                    MachineId = _setting.machineId,
 | 
				
			||||||
| 
						 | 
					@ -752,33 +800,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    CreateTime = DateTime.Now,
 | 
					                                    CreateTime = DateTime.Now,
 | 
				
			||||||
                                    InvoiceNo = oi.OrderNo,
 | 
					                                    InvoiceNo = oi.OrderNo,
 | 
				
			||||||
                                    ManuStock = nowChannels.Sum(it => it.Quantity),
 | 
					                                    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()
 | 
					                                    ShoushuJian = drawerNo.ToString()
 | 
				
			||||||
                                });
 | 
					                                });
 | 
				
			||||||
                                //修改凌晨生成的日结存与总结存数据
 | 
					                                //修改凌晨生成的日结存与总结存数据
 | 
				
			||||||
                                AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
 | 
					                                AccountBookG2 accountBookG2Day = _connection.AccountBookG2.AsQueryable()
 | 
				
			||||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
					                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
				
			||||||
                                .Where(ab => ab.Type == 3)
 | 
					                                .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.ManuNo == cs.ManuNo)
 | 
				
			||||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
					                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
				
			||||||
                                if (accountBookG2Day != null)
 | 
					                                if (accountBookG2Day != null)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                            accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.Detail.Quantity;
 | 
					                                    accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - oi.DetailList[j].Quantity;
 | 
				
			||||||
                                    _connection.Update(accountBookG2Day);
 | 
					                                    _connection.Update(accountBookG2Day);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                else
 | 
					                                else
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
					                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
				
			||||||
                            int iDayResult =_connection.Insert(new AccountBookG2()
 | 
					                                    int iDayResult = _connection.Insert(new AccountBookG2()
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
                                DrugId = oi.Detail.DrugId,
 | 
					                                        DrugId = oi.DetailList[j].DrugId,
 | 
				
			||||||
                                        Type = 3,
 | 
					                                        Type = 3,
 | 
				
			||||||
                                        ManuNo = cs.ManuNo,
 | 
					                                        ManuNo = cs.ManuNo,
 | 
				
			||||||
                                        EffDate = cs.EffDate,
 | 
					                                        EffDate = cs.EffDate,
 | 
				
			||||||
                                        YQuantity = 0,
 | 
					                                        YQuantity = 0,
 | 
				
			||||||
                                ManuStock = oi.Detail.Quantity,
 | 
					                                        ManuStock = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                TotalStock = oi.Detail.Quantity,
 | 
					                                        TotalStock = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                        UserId1 = _globalStateService.Operator?.Id,
 | 
					                                        UserId1 = _globalStateService.Operator?.Id,
 | 
				
			||||||
                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
					                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
				
			||||||
                                        MachineId = _setting.machineId,
 | 
					                                        MachineId = _setting.machineId,
 | 
				
			||||||
| 
						 | 
					@ -787,18 +835,18 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    });
 | 
					                                    });
 | 
				
			||||||
                                    if (iDayResult <= 0)
 | 
					                                    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()
 | 
					                                AccountBookG2 accountBookG2Total = _connection.AccountBookG2.AsQueryable()
 | 
				
			||||||
                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
					                                .Where(ab => ab.MachineId.Equals(_setting.machineId))
 | 
				
			||||||
                                .Where(ab => ab.Type == 4)
 | 
					                                .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();
 | 
					                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
				
			||||||
                                if (accountBookG2Total != null)
 | 
					                                if (accountBookG2Total != null)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                            accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.Detail.Quantity;
 | 
					                                    accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - oi.DetailList[j].Quantity;
 | 
				
			||||||
                                    _connection.Update(accountBookG2Total);
 | 
					                                    _connection.Update(accountBookG2Total);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                else
 | 
					                                else
 | 
				
			||||||
| 
						 | 
					@ -806,11 +854,11 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
					                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
				
			||||||
                                    int iTotalResult = _connection.Insert(new AccountBookG2()
 | 
					                                    int iTotalResult = _connection.Insert(new AccountBookG2()
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
                                DrugId = oi.Detail.DrugId,
 | 
					                                        DrugId = oi.DetailList[j].DrugId,
 | 
				
			||||||
                                        Type = 4,
 | 
					                                        Type = 4,
 | 
				
			||||||
                                        YQuantity = 0,
 | 
					                                        YQuantity = 0,
 | 
				
			||||||
                                ManuStock = oi.Detail.Quantity,
 | 
					                                        ManuStock = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                TotalStock = oi.Detail.Quantity,
 | 
					                                        TotalStock = oi.DetailList[j].Quantity,
 | 
				
			||||||
                                        UserId1 = _globalStateService.Operator?.Id,
 | 
					                                        UserId1 = _globalStateService.Operator?.Id,
 | 
				
			||||||
                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
					                                        UserId2 = _globalStateService.Reviewer?.Id,
 | 
				
			||||||
                                        MachineId = _setting.machineId,
 | 
					                                        MachineId = _setting.machineId,
 | 
				
			||||||
| 
						 | 
					@ -819,11 +867,14 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                                    });
 | 
					                                    });
 | 
				
			||||||
                                    if (iTotalResult <= 0)
 | 
					                                    if (iTotalResult <= 0)
 | 
				
			||||||
                                    {
 | 
					                                    {
 | 
				
			||||||
                                logger.Info($"未写入总结存数据{oi.Detail.DrugId}-{oi.Detail.Quantity}");
 | 
					                                        logger.Info($"未写入总结存数据{oi.DetailList[j].DrugId}-{oi.DetailList[j].Quantity}");
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ using MasaBlazorApp3.DataAccess.Dao;
 | 
				
			||||||
using MasaBlazorApp3.Pojo;
 | 
					using MasaBlazorApp3.Pojo;
 | 
				
			||||||
using MasaBlazorApp3.Pojo.Config;
 | 
					using MasaBlazorApp3.Pojo.Config;
 | 
				
			||||||
using Microsoft.Extensions.Options;
 | 
					using Microsoft.Extensions.Options;
 | 
				
			||||||
 | 
					using Org.BouncyCastle.Crypto;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
| 
						 | 
					@ -38,8 +39,8 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var query = _connection.Plan.AsQueryable();
 | 
					            var query = _connection.Plan.AsQueryable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            List<Plan> list = await query.Where(p=>p.UseState==1)
 | 
					            List<Plan> list = await query.Where(p => p.UseState == 1)
 | 
				
			||||||
                .LoadWith(p => p._PlanDetails.Where(pd=>pd.UseState==1))
 | 
					                .LoadWith(p => p._PlanDetails.Where(pd => pd.UseState == 1))
 | 
				
			||||||
                //.ThenLoad(p=>p._DrugInfo)
 | 
					                //.ThenLoad(p=>p._DrugInfo)
 | 
				
			||||||
                .OrderBy(r => r.Id)
 | 
					                .OrderBy(r => r.Id)
 | 
				
			||||||
                .ToListAsync();
 | 
					                .ToListAsync();
 | 
				
			||||||
| 
						 | 
					@ -78,7 +79,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        public async Task<Plan> GetPlanById(int Id)
 | 
					        public async Task<Plan> GetPlanById(int Id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id&&p.UseState==1);
 | 
					            var query = _connection.Plan.AsQueryable().Where(p => p.Id == Id && p.UseState == 1);
 | 
				
			||||||
            List<Plan> list = await query
 | 
					            List<Plan> list = await query
 | 
				
			||||||
               .LoadWith(p => p._PlanDetails)
 | 
					               .LoadWith(p => p._PlanDetails)
 | 
				
			||||||
               //.ThenLoad(p=>p._DrugInfo)
 | 
					               //.ThenLoad(p=>p._DrugInfo)
 | 
				
			||||||
| 
						 | 
					@ -112,6 +113,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                plan.AddTime = DateTime.Now;
 | 
					                plan.AddTime = DateTime.Now;
 | 
				
			||||||
                plan.OperatorUser = _globalStateService.Operator.Id;
 | 
					                plan.OperatorUser = _globalStateService.Operator.Id;
 | 
				
			||||||
                plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
 | 
					                plan.ReviewerUser = _globalStateService.Reviewer?.Id ?? _globalStateService.Operator.Id;
 | 
				
			||||||
 | 
					                plan.UseState = 1;
 | 
				
			||||||
                return _connection.InsertWithInt32Identity(plan) > 0;
 | 
					                return _connection.InsertWithInt32Identity(plan) > 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex)
 | 
					            catch (Exception ex)
 | 
				
			||||||
| 
						 | 
					@ -143,6 +145,38 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                return false;
 | 
					                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>
 | 
				
			||||||
        /// 删除套餐
 | 
					        /// 删除套餐
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
| 
						 | 
					@ -154,28 +188,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _connection.BeginTransaction();
 | 
					                _connection.BeginTransaction();
 | 
				
			||||||
                bool flag = false;
 | 
					                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}");
 | 
					                logger.Error($"删除套餐{planId}");
 | 
				
			||||||
                //查询该套餐下是否有药品,如果有则一并删除
 | 
					                //查询该套餐下是否有药品,如果有则一并删除
 | 
				
			||||||
                int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
 | 
					                int iHasPd = _connection.PlanDetails.Where(pd => pd.PlanId == planId).Count();
 | 
				
			||||||
                int pdResult = 1;
 | 
					                int pdResult = 1;
 | 
				
			||||||
                if (iHasPd > 0)
 | 
					                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();
 | 
					                int pResult = await _connection.Plan.Where(p => p.Id == planId).Set(pd => pd.UseState, 0).UpdateAsync();
 | 
				
			||||||
                    if (pdResult > 0 && pResult > 0)
 | 
					
 | 
				
			||||||
 | 
					                //如果套餐下有绑药且库存为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;
 | 
					                    flag = true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (flag)
 | 
					                if (flag)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -207,7 +246,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (!string.IsNullOrEmpty(details.DrugId))
 | 
					                if (!string.IsNullOrEmpty(details.DrugId))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    int id = _connection.InsertWithInt32Identity(details);
 | 
					                    int id =await _connection.InsertWithInt32IdentityAsync(details);
 | 
				
			||||||
                    details.Id = id;
 | 
					                    details.Id = id;
 | 
				
			||||||
                    return id > 0;
 | 
					                    return id > 0;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -235,7 +274,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                  .Where(p => p.Id == details.Id)
 | 
					                  .Where(p => p.Id == details.Id)
 | 
				
			||||||
                  .Set(p => p.DrugId, details._DrugInfo.DrugId)
 | 
					                  .Set(p => p.DrugId, details._DrugInfo.DrugId)
 | 
				
			||||||
                  .Set(p => p.BaseQuantity, details.BaseQuantity);
 | 
					                  .Set(p => p.BaseQuantity, details.BaseQuantity);
 | 
				
			||||||
                return iResult.Update() > 0;
 | 
					                return await iResult.UpdateAsync() > 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex)
 | 
					            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>
 | 
				
			||||||
        /// 删除套餐中的药品
 | 
					        /// 删除套餐中的药品
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
| 
						 | 
					@ -253,9 +312,33 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                _connection.BeginTransaction();
 | 
				
			||||||
                logger.Error($"删除套餐中的药品{detail._DrugInfo.DrugName}");
 | 
					                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)
 | 
					            catch (Exception ex)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -269,7 +352,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
            if (details._DrugInfo.DrugId != null)
 | 
					            if (details._DrugInfo.DrugId != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                //查询该药品是否已在套餐中存在,存在则不再添加
 | 
					                //查询该药品是否已在套餐中存在,存在则不再添加
 | 
				
			||||||
                PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId&&p.UseState==1).FirstOrDefault();
 | 
					                PlanDetails pdDrug = _connection.PlanDetails.Where(p => p.PlanId == details.PlanId && p.DrugId == details._DrugInfo.DrugId && p.UseState == 1).FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (details.Id > 0)
 | 
					                if (details.Id > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
using Google.Protobuf.WellKnownTypes;
 | 
					using Google.Protobuf.WellKnownTypes;
 | 
				
			||||||
using LinqToDB;
 | 
					using LinqToDB;
 | 
				
			||||||
 | 
					using log4net;
 | 
				
			||||||
using MasaBlazorApp3.DataAccess.Dao;
 | 
					using MasaBlazorApp3.DataAccess.Dao;
 | 
				
			||||||
using MasaBlazorApp3.Pojo;
 | 
					using MasaBlazorApp3.Pojo;
 | 
				
			||||||
using MasaBlazorApp3.Pojo.Config;
 | 
					using MasaBlazorApp3.Pojo.Config;
 | 
				
			||||||
| 
						 | 
					@ -17,6 +18,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private readonly AppDataConnection _connection;
 | 
					        private readonly AppDataConnection _connection;
 | 
				
			||||||
        private readonly SettingConfig _setting;
 | 
					        private readonly SettingConfig _setting;
 | 
				
			||||||
 | 
					        private readonly ILog logger = LogManager.GetLogger(typeof(OrderInfoDao));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //public UserDao(MyContext context)
 | 
					        //public UserDao(MyContext context)
 | 
				
			||||||
        //{
 | 
					        //{
 | 
				
			||||||
| 
						 | 
					@ -61,7 +63,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        public User GetByUsername(string username)
 | 
					        public User GetByUsername(string username)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username&&u.MachineId== _setting.machineId);
 | 
					            return _connection.User.LoadWith(u => (u.role)).FirstOrDefault(u => u.Username == username && u.MachineId == _setting.machineId);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public int InsertUser(User user)
 | 
					        public int InsertUser(User user)
 | 
				
			||||||
| 
						 | 
					@ -92,7 +94,7 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
        //重置用户密码
 | 
					        //重置用户密码
 | 
				
			||||||
        public bool ResetPassword(int id)
 | 
					        public bool ResetPassword(int id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var statement= _connection.User.Where(u => u.Id == id).Set(u=>u.Password, MD5.GetMD5Hash("123456").ToLower());
 | 
					            var statement = _connection.User.Where(u => u.Id == id).Set(u => u.Password, MD5.GetMD5Hash("123456").ToLower());
 | 
				
			||||||
            return statement.Update() > 0;
 | 
					            return statement.Update() > 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,5 +117,50 @@ namespace MasaBlazorApp3.DataAccess.Impl
 | 
				
			||||||
                .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
 | 
					                .Set(u => u.Password, MD5.GetMD5Hash(user.Password).ToLower());
 | 
				
			||||||
            return statement.Update() > 0;
 | 
					            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>
 | 
					        <ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
        <Nullable>enable</Nullable>
 | 
					        <Nullable>enable</Nullable>
 | 
				
			||||||
        <ApplicationIcon>favicon.ico</ApplicationIcon>
 | 
					        <ApplicationIcon>favicon.ico</ApplicationIcon>
 | 
				
			||||||
 | 
					        <Platforms>AnyCPU;x64</Platforms>
 | 
				
			||||||
    </PropertyGroup>
 | 
					    </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,12 +43,12 @@
 | 
				
			||||||
<div class="container-fluid">
 | 
					<div class="container-fluid">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
					    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
				
			||||||
                    IsLoading="@isLoading"
 | 
					 | 
				
			||||||
                    RowRender="@RowRender"
 | 
					                    RowRender="@RowRender"
 | 
				
			||||||
                    EmptyText="无数据"
 | 
					                    EmptyText="无数据"
 | 
				
			||||||
                    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
					                    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
				
			||||||
                    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
					                    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">
 | 
					                    ExpandMode="DataGridExpandMode.Multiple">
 | 
				
			||||||
        <Template Context="cs">
 | 
					        <Template Context="cs">
 | 
				
			||||||
            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
					            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
				
			||||||
| 
						 | 
					@ -95,9 +95,13 @@
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    protected override async Task OnInitializedAsync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        await base.OnInitializedAsync();
 | 
					        await base.OnInitializedAsync();
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    async Task LoadData(LoadDataArgs args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        isLoading = true;
 | 
					        isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var result = await channelStockDao.GetBoxWaitInfo(10, 0);
 | 
					        var result = await channelStockDao.GetBoxWaitInfo(args.Top, args.Skip);
 | 
				
			||||||
        // Update the Data property
 | 
					        // Update the Data property
 | 
				
			||||||
        _forecasts = result.Desserts;
 | 
					        _forecasts = result.Desserts;
 | 
				
			||||||
        isLoading = false;
 | 
					        isLoading = false;
 | 
				
			||||||
| 
						 | 
					@ -112,7 +116,6 @@
 | 
				
			||||||
            // await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
 | 
					            // await grid.ExpandRows(grid.PagedView.Where(di => di.Stocks.Count > 0));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    void RowRender(RowRenderEventArgs<ChannelList> args)
 | 
					    void RowRender(RowRenderEventArgs<ChannelList> args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        args.Expandable = args.Data.ChannelStocks.Count > 0;
 | 
					        args.Expandable = args.Data.ChannelStocks.Count > 0;
 | 
				
			||||||
| 
						 | 
					@ -121,7 +124,7 @@
 | 
				
			||||||
    async void OnRowSelect(ChannelList cl)
 | 
					    async void OnRowSelect(ChannelList cl)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
 | 
					        var b = await dialogService.OpenAsync<BoxAddBoxDetailDialog>(
 | 
				
			||||||
               $"{cl.DrawerNo}号药箱取药",
 | 
					               $"{cl.DrawerNo}号药箱药品入库",
 | 
				
			||||||
             new Dictionary<string, object>() { { "boxChannelList", cl } },
 | 
					             new Dictionary<string, object>() { { "boxChannelList", cl } },
 | 
				
			||||||
             new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
					             new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
 | 
				
			||||||
       );
 | 
					       );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,51 +8,20 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
 | 
					<RadzenStack Gap="1rem" Orientation="Orientation.Vertical" Style="height: 100%;">
 | 
				
			||||||
    <RadzenStack>
 | 
					    <RadzenStack>
 | 
				
			||||||
        @if (CanTakeDrug)
 | 
					        <RadzenDataGrid Data="@boxChannelList.ChannelStocks" AllowAlternatingRows="true" 
 | 
				
			||||||
        {
 | 
					                      AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
				
			||||||
            <RadzenDataGrid Data="@data" AllowAlternatingRows="false">
 | 
					 | 
				
			||||||
                <Columns>
 | 
					                <Columns>
 | 
				
			||||||
                    <RadzenDataGridColumn Property="ChannelStock" Title="库位">
 | 
					                <RadzenDataGridColumn Property="ChannelStocks.Drug.DrugName" Title="药品" />
 | 
				
			||||||
                        <Template>
 | 
					                <RadzenDataGridColumn Property="ChannelStocks.Drug.DrugSpec" Title="规格" />
 | 
				
			||||||
                            @context.ChannelStock.DrawerNo - @context.ChannelStock.ColNo
 | 
					                <RadzenDataGridColumn Property="AddToQuantity" Title="入药箱数量" />
 | 
				
			||||||
                        </Template>
 | 
					                <RadzenDataGridColumn Property="Quantity" 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="数量" />
 | 
					 | 
				
			||||||
                </Columns>
 | 
					                </Columns>
 | 
				
			||||||
            </RadzenDataGrid>
 | 
					            </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>
 | 
				
			||||||
    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
					    <RadzenStack Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" Gap="0.5rem">
 | 
				
			||||||
        @if (status < 2)
 | 
					        <RadzenButton Click="@Finish" ButtonStyle="ButtonStyle.Success" Variant="Variant.Flat" Text="保存" Style="width: 120px" />
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            <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="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
					        <RadzenButton Click="@Cancel" Variant="Variant.Flat" Text="取消" Style="width: 120px" />
 | 
				
			||||||
        }
 | 
					
 | 
				
			||||||
    </RadzenStack>
 | 
					    </RadzenStack>
 | 
				
			||||||
</RadzenStack>
 | 
					</RadzenStack>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,10 +33,10 @@
 | 
				
			||||||
    @inject PortUtil PortUtil;
 | 
					    @inject PortUtil PortUtil;
 | 
				
			||||||
    private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
 | 
					    private readonly ILog logger = LogManager.GetLogger(typeof(OrderDetailDialog));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int status;
 | 
					    // int status;
 | 
				
			||||||
 | 
					    bool isLoading;
 | 
				
			||||||
 | 
					    int count;
 | 
				
			||||||
    [Parameter] public ChannelList boxChannelList { get; set; }
 | 
					    [Parameter] public ChannelList boxChannelList { get; set; }
 | 
				
			||||||
    private bool CanTakeDrug = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public List<BoxTakeVo> data { get; set; }
 | 
					    public List<BoxTakeVo> data { get; set; }
 | 
				
			||||||
    //称重取药数量
 | 
					    //称重取药数量
 | 
				
			||||||
| 
						 | 
					@ -78,225 +47,212 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    protected override async Task OnInitializedAsync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        data = await channelListDao.getTakeInfoByBox(boxChannelList);
 | 
					 | 
				
			||||||
        // 如果有【stockQuantity】字段说明有药品库存不足
 | 
					 | 
				
			||||||
        if (data.Any(it => it.ChannelStock == null))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            CanTakeDrug = false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        base.OnInitializedAsync();
 | 
					        base.OnInitializedAsync();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    async Task LoadData(LoadDataArgs args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task OpenDrawer()
 | 
					        data = await channelListDao.getBoxWaitByBox(boxChannelList, args.Top, args.Skip);
 | 
				
			||||||
    {
 | 
					        // Update the Data property
 | 
				
			||||||
        this.status = 1;
 | 
					        isLoading = false;
 | 
				
			||||||
        // 解析需要打开的抽屉列表
 | 
					    }
 | 
				
			||||||
        List<BoxTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
 | 
					    // 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) =>
 | 
					    //     await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
				
			||||||
        {
 | 
					    //     {
 | 
				
			||||||
            var orderTakeVo = drawerNos[options._data];
 | 
					    //         var orderTakeVo = drawerNos[options._data];
 | 
				
			||||||
            var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
 | 
					    //         var drawerNo = orderTakeVo.ChannelStock.DrawerNo;
 | 
				
			||||||
            try
 | 
					    //         try
 | 
				
			||||||
            {
 | 
					    //         {
 | 
				
			||||||
                if (this.status == 0)
 | 
					    //             if (this.status == 0)
 | 
				
			||||||
                {
 | 
					    //             {
 | 
				
			||||||
                    stop();
 | 
					    //                 stop();
 | 
				
			||||||
                }
 | 
					    //             }
 | 
				
			||||||
                // 开启抽屉
 | 
					    //             // 开启抽屉
 | 
				
			||||||
                else if (this.status == 1)
 | 
					    //             else if (this.status == 1)
 | 
				
			||||||
                {
 | 
					    //             {
 | 
				
			||||||
                    if (orderTakeVo.Status == 0)
 | 
					    //                 if (orderTakeVo.Status == 0)
 | 
				
			||||||
                    {
 | 
					    //                 {
 | 
				
			||||||
                        // 判断是否为单支抽屉
 | 
					    //                     // 判断是否为单支抽屉
 | 
				
			||||||
                        if (setting.Value.single.Contains(drawerNo))
 | 
					    //                     if (setting.Value.single.Contains(drawerNo))
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
                            byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					    //                         byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
				
			||||||
                            orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					    //                         orderTakeVo.BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                            logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
					    //                         logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
 | 
					    //                         await PortUtil.HasLightOnByCol(drawerNo, data.Where(ot => ot.ChannelStock.DrawerNo == drawerNo).Select(ot => ot.ChannelStock.ColNo).ToArray());
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                        for (int i = 0; i < data.Count; i++)
 | 
					    //                     for (int i = 0; i < data.Count; i++)
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
                            if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
 | 
					    //                         if (!DrawerNoColNoList.Contains(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo))
 | 
				
			||||||
                            {
 | 
					    //                         {
 | 
				
			||||||
                                if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
					    //                             if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
				
			||||||
                                {
 | 
					    //                             {
 | 
				
			||||||
                                    PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
					    //                                 PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
				
			||||||
                                    PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
					    //                                 PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    data[i].BeforeQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(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)}】");
 | 
					    //                                 logger.Info($"称重抽屉,开抽屉前检测数量【{string.Join(",", orderTakeVo.BeforeQuantity)}】");
 | 
				
			||||||
                                    await Task.Delay(200);
 | 
					    //                                 await Task.Delay(200);
 | 
				
			||||||
                                }
 | 
					    //                             }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                //是药盒抽屉开药盒
 | 
					    //                             //是药盒抽屉开药盒
 | 
				
			||||||
                                if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
 | 
					    //                             if (data[i].ChannelStock.BoardType.ToString().Contains("3"))
 | 
				
			||||||
                                {
 | 
					    //                             {
 | 
				
			||||||
                                    PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
					    //                                 PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;
 | 
				
			||||||
                                    await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
 | 
					    //                                 await PortUtil.OpenBoxByColNo(data[i].ChannelStock.ColNo);
 | 
				
			||||||
                                    await Task.Delay(200);
 | 
					    //                                 await Task.Delay(200);
 | 
				
			||||||
                                }
 | 
					    //                             }
 | 
				
			||||||
                                DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
 | 
					    //                             DrawerNoColNoList.Add(data[i].ChannelStock.DrawerNo.ToString() + data[i].ChannelStock.ColNo);
 | 
				
			||||||
                            }
 | 
					    //                         }
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                        var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
					    //                     var b = await PortUtil.OpenDrawerStatus(drawerNo);
 | 
				
			||||||
                        if (b)
 | 
					    //                     if (b)
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
                            PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
					    //                         PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
				
			||||||
                            PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
 | 
					    //                         PortUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
 | 
				
			||||||
                            orderTakeVo.Status = 1;
 | 
					    //                         orderTakeVo.Status = 1;
 | 
				
			||||||
                            next();
 | 
					    //                         next();
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                        else
 | 
					    //                     else
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
                            _message.Notify(
 | 
					    //                         _message.Notify(
 | 
				
			||||||
                            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
 | 
					    //                         new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"抽屉【{drawerNo}】打开失败,请检测硬件", Duration = 4000 }
 | 
				
			||||||
                        );
 | 
					    //                     );
 | 
				
			||||||
                            logger.Info($"抽屉打开失败");
 | 
					    //                         logger.Info($"抽屉打开失败");
 | 
				
			||||||
                            PortUtil.AllLightOff();
 | 
					    //                         PortUtil.AllLightOff();
 | 
				
			||||||
                            RestData();
 | 
					    //                         RestData();
 | 
				
			||||||
                            stop();
 | 
					    //                         stop();
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                    }
 | 
					    //                 }
 | 
				
			||||||
                    // 检测状态
 | 
					    //                 // 检测状态
 | 
				
			||||||
                    else if (orderTakeVo.Status == 1)
 | 
					    //                 else if (orderTakeVo.Status == 1)
 | 
				
			||||||
                    {
 | 
					    //                 {
 | 
				
			||||||
                        // 查询抽屉是否为关闭状态
 | 
					    //                     // 查询抽屉是否为关闭状态
 | 
				
			||||||
                        var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
					    //                     var b = await PortUtil.CheckDrawerStatus2(drawerNo);
 | 
				
			||||||
                        // 关闭则改变状态并终止循环
 | 
					    //                     // 关闭则改变状态并终止循环
 | 
				
			||||||
                        if (b)
 | 
					    //                     if (b)
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            data.ForEach(cl =>
 | 
					    //                         data.ForEach(cl =>
 | 
				
			||||||
                            {
 | 
					    //                         {
 | 
				
			||||||
                                if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
					    //                             if (cl.ChannelStock.DrawerNo == drawerNo)
 | 
				
			||||||
                                {
 | 
					    //                             {
 | 
				
			||||||
                                    cl.GetQuantity = cl.Quantity;
 | 
					    //                                 cl.GetQuantity = cl.Quantity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                }
 | 
					    //                             }
 | 
				
			||||||
                            });
 | 
					    //                         });
 | 
				
			||||||
                            orderTakeVo.Status = 2;
 | 
					    //                         orderTakeVo.Status = 2;
 | 
				
			||||||
                            PortUtil.AllLightOff();
 | 
					    //                         PortUtil.AllLightOff();
 | 
				
			||||||
                            if (options._data == drawerNos.Count - 1)
 | 
					    //                         if (options._data == drawerNos.Count - 1)
 | 
				
			||||||
                            {
 | 
					    //                         {
 | 
				
			||||||
                                PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
					    //                             PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
				
			||||||
                                PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
					    //                             PortUtil.speechSynthesizer.SpeakAsyncCancelAll();
 | 
				
			||||||
                                PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
					    //                             PortUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
				
			||||||
                                this.status = 2;
 | 
					    //                             this.status = 2;
 | 
				
			||||||
                                string alertMessage = string.Empty;
 | 
					    //                             string alertMessage = string.Empty;
 | 
				
			||||||
                                //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
 | 
					    //                             //检查是否称重抽屉,核对实际取出数量是否与应取数量一致,不一致则弹出提示
 | 
				
			||||||
                                for (int i = 0; i < data.Count; i++)
 | 
					    //                             for (int i = 0; i < data.Count; i++)
 | 
				
			||||||
                                {
 | 
					    //                             {
 | 
				
			||||||
                                    if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
					    //                                 if (data[i].ChannelStock.BoardType.ToString().Contains("6"))
 | 
				
			||||||
                                    {
 | 
					    //                                 {
 | 
				
			||||||
                                        PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
 | 
					    //                                     PortUtil.DrawerNo = data[i].ChannelStock.DrawerNo;// drawerNo;
 | 
				
			||||||
                                        PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
					    //                                     PortUtil.ColNoLst.Add(data[i].ChannelStock.ColNo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                        orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
					    //                                     orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1] = await PortUtil.CheckQuantityForSingle(data[i].ChannelStock.ColNo);
 | 
				
			||||||
                                        logger.Info($"称重抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
					    //                                     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];
 | 
					    //                                     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])
 | 
					    //                                     if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
 | 
				
			||||||
                                        {
 | 
					    //                                     {
 | 
				
			||||||
                                            //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
 | 
					    //                                         //称重自动计数数量与实际要取数量不一致弹出提示,确认后保存数据
 | 
				
			||||||
                                            alertMessage += $"{data[i].Drug.DrugName}应取数量【{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"))
 | 
					    //                                 if (data[i].ChannelStock.BoardType.ToString().Contains("2"))
 | 
				
			||||||
                                    {
 | 
					    //                                 {
 | 
				
			||||||
                                        byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
					    //                                     byte[] quantity = await PortUtil.CheckQuantityByDrawer(drawerNo);
 | 
				
			||||||
                                        orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
					    //                                     orderTakeVo.AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
				
			||||||
                                        logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
					    //                                     logger.Info($"单支抽屉,关抽屉后检测数量【{string.Join(",", orderTakeVo.AfterQuantity)}】");
 | 
				
			||||||
                                        WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1] = orderTakeVo.BeforeQuantity[data[i].ChannelStock.ColNo - 1] - orderTakeVo.AfterQuantity[data[i].ChannelStock.ColNo - 1];
 | 
					    //                                     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])
 | 
					    //                                     if (data[i].Quantity != WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1])
 | 
				
			||||||
                                        {
 | 
					    //                                     {
 | 
				
			||||||
                                            alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
 | 
					    //                                         alertMessage += $"{data[i].Drug.DrugName}应取数量【{orderTakeVo.Quantity}】,实际取出数量【{WeightFinnalQuantity[data[i].ChannelStock.ColNo - 1]}】";
 | 
				
			||||||
                                        }
 | 
					    //                                     }
 | 
				
			||||||
                                    }
 | 
					    //                                 }
 | 
				
			||||||
                                }
 | 
					    //                             }
 | 
				
			||||||
                                if (!string.IsNullOrEmpty(alertMessage))
 | 
					    //                             if (!string.IsNullOrEmpty(alertMessage))
 | 
				
			||||||
                                {
 | 
					    //                             {
 | 
				
			||||||
                                    //弹出确认对话框
 | 
					    //                                 //弹出确认对话框
 | 
				
			||||||
                                    alertMessage += "应取数与实际取出数不一致确认要保存吗?";
 | 
					    //                                 alertMessage += "应取数与实际取出数不一致确认要保存吗?";
 | 
				
			||||||
                                    //弹出确认提示框
 | 
					    //                                 //弹出确认提示框
 | 
				
			||||||
                                    var confirm = await dialogService.OpenAsync<ConfirmDialog>(
 | 
					    //                                 var confirm = await dialogService.OpenAsync<ConfirmDialog>(
 | 
				
			||||||
                                          $"保存确认",
 | 
					    //                                       $"保存确认",
 | 
				
			||||||
                                          new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
 | 
					    //                                       new Dictionary<string, object>() { { "confirmInfo", alertMessage } },
 | 
				
			||||||
                                          new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					    //                                       new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
                                    logger.Info(alertMessage);
 | 
					    //                                 logger.Info(alertMessage);
 | 
				
			||||||
                                    if (!confirm)
 | 
					    //                                 if (!confirm)
 | 
				
			||||||
                                    {
 | 
					    //                                 {
 | 
				
			||||||
                                        RestData();
 | 
					    //                                     RestData();
 | 
				
			||||||
                                        logger.Info("取消保存");
 | 
					    //                                     logger.Info("取消保存");
 | 
				
			||||||
                                        // 关闭弹窗
 | 
					    //                                     // 关闭弹窗
 | 
				
			||||||
                                        dialogService.Close(false);
 | 
					    //                                     dialogService.Close(false);
 | 
				
			||||||
                                    }
 | 
					    //                                 }
 | 
				
			||||||
                                }
 | 
					    //                             }
 | 
				
			||||||
                                stop();
 | 
					    //                             stop();
 | 
				
			||||||
                            }
 | 
					    //                         }
 | 
				
			||||||
                            else
 | 
					    //                         else
 | 
				
			||||||
                            {
 | 
					    //                         {
 | 
				
			||||||
                                options._data += 1;
 | 
					    //                             options._data += 1;
 | 
				
			||||||
                                next();
 | 
					    //                             next();
 | 
				
			||||||
                            }
 | 
					    //                         }
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                        else
 | 
					    //                     else
 | 
				
			||||||
                        {
 | 
					    //                     {
 | 
				
			||||||
                            next(); // continue iteration
 | 
					    //                         next(); // continue iteration
 | 
				
			||||||
                        }
 | 
					    //                     }
 | 
				
			||||||
                    }
 | 
					    //                 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					    //             }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					    //         }
 | 
				
			||||||
            catch (Exception e)
 | 
					    //         catch (Exception e)
 | 
				
			||||||
            {
 | 
					    //         {
 | 
				
			||||||
                RestData();
 | 
					    //             RestData();
 | 
				
			||||||
                logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
 | 
					    //             logger.Info($"{boxChannelList.DrawerNo}药盒取药发生错误,{e.Message}");
 | 
				
			||||||
                _message.Notify(
 | 
					    //             _message.Notify(
 | 
				
			||||||
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
					    //             new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"发生错误,{e.Message}", Duration = 4000 }
 | 
				
			||||||
            );
 | 
					    //         );
 | 
				
			||||||
                if (setting.Value.single.Contains(drawerNo))
 | 
					    //             if (setting.Value.single.Contains(drawerNo))
 | 
				
			||||||
                {
 | 
					    //             {
 | 
				
			||||||
                    PortUtil.AllLightOff();
 | 
					    //                 PortUtil.AllLightOff();
 | 
				
			||||||
                }
 | 
					    //             }
 | 
				
			||||||
                stop();
 | 
					    //             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()
 | 
					    void Cancel()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        RestData();
 | 
					 | 
				
			||||||
        // 关闭弹窗
 | 
					        // 关闭弹窗
 | 
				
			||||||
        dialogService.Close(false);
 | 
					        dialogService.Close(false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    async Task TakeFinish()
 | 
					    async Task Finish()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 保存账册、操作记录
 | 
					        // 保存账册、操作记录
 | 
				
			||||||
        var b = await channelListDao.BoxTakeFinish(data);
 | 
					        var b = await channelListDao.BoxAddBoxFinish(boxChannelList);
 | 
				
			||||||
        if (!b)
 | 
					        if (!b)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
					            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
				
			||||||
| 
						 | 
					@ -310,8 +266,6 @@
 | 
				
			||||||
            dialogService.Close(true);
 | 
					            dialogService.Close(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //重置状态
 | 
					 | 
				
			||||||
        this.RestData();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -307,7 +307,7 @@
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 保存账册、操作记录
 | 
					        // 保存账册、操作记录
 | 
				
			||||||
        var b = await channelListDao.BoxTakeFinish(data);
 | 
					        var b = await channelListDao.BoxTakeFinish(data, boxChannelList);
 | 
				
			||||||
        if (!b)
 | 
					        if (!b)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
					            _message.Notify(new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"数据保存失败", Duration = 4000 });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,13 +42,13 @@
 | 
				
			||||||
<div class="container-fluid">
 | 
					<div class="container-fluid">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
					    <RadzenDataGrid @ref="grid" RowSelect="@OnRowSelect" TItem="ChannelList"
 | 
				
			||||||
    IsLoading="@isLoading"
 | 
					 | 
				
			||||||
    RowRender="@RowRender"
 | 
					    RowRender="@RowRender"
 | 
				
			||||||
    EmptyText="无数据"
 | 
					    EmptyText="无数据"
 | 
				
			||||||
    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
					    Data="@_forecasts" @bind-Value=@selectedChannelLists
 | 
				
			||||||
    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
					    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
				
			||||||
    SelectionMode="DataGridSelectionMode.Single"
 | 
					    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">
 | 
					        <Template Context="cs">
 | 
				
			||||||
            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
					            <RadzenDataGrid Data="@cs.ChannelStocks" EmptyText="无数据">
 | 
				
			||||||
                <Columns>
 | 
					                <Columns>
 | 
				
			||||||
| 
						 | 
					@ -94,14 +94,17 @@
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    protected override async Task OnInitializedAsync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        await base.OnInitializedAsync();
 | 
					        await base.OnInitializedAsync();
 | 
				
			||||||
 | 
					       
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    async Task LoadData(LoadDataArgs args)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        isLoading = true;
 | 
					        isLoading = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var result = await channelStockDao.GetAllBoxAddDrug(10, 0);
 | 
					        var result = await channelStockDao.GetAllBoxAddDrug(args.Top, args.Skip);
 | 
				
			||||||
        // Update the Data property
 | 
					        // Update the Data property
 | 
				
			||||||
        _forecasts = result.Desserts;
 | 
					        _forecasts = result.Desserts;
 | 
				
			||||||
        isLoading = false;
 | 
					        isLoading = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected override async Task OnAfterRenderAsync(bool firstRender)
 | 
					    protected override async Task OnAfterRenderAsync(bool firstRender)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        base.OnAfterRender(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">
 | 
					<RadzenRow Gap="0" Style="overflow: hidden;width:100%;height:100%">
 | 
				
			||||||
    <div class="row">
 | 
					    <RadzenColumn Size="12" SizeMD="5">
 | 
				
			||||||
        <div class="col-12 mb-4">
 | 
					        <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)
 | 
				
			||||||
            <form onsubmit="@(() => grid.Reload())">
 | 
					            {
 | 
				
			||||||
                <RadzenFieldset Text="查询">
 | 
					                <RadzenText TextStyle="TextStyle.H5" class="rz-color-white">
 | 
				
			||||||
                    <RadzenStack Orientation="Orientation.Horizontal" Gap="1rem">
 | 
					                    请交班操作人 @FromOperator?.NickName
 | 
				
			||||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
					                    <p>登录验证</p>
 | 
				
			||||||
                            <RadzenColumn Size="4">
 | 
					                </RadzenText>
 | 
				
			||||||
                                <RadzenLabel Text="开始时间" Component="Start" />
 | 
					            }
 | 
				
			||||||
 | 
					            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>
 | 
				
			||||||
                            <RadzenColumn Size="8">
 | 
					    <RadzenColumn Size="12" SizeMD="7">
 | 
				
			||||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="start" Style="width: 100%;" Name="Start" />
 | 
					        <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-p-12" Style="width:100%;height:100%">
 | 
				
			||||||
                            </RadzenColumn>
 | 
					            <RadzenText TextStyle="TextStyle.H5" TagName="TagName.H2" class="rz-mb-6">
 | 
				
			||||||
                        </RadzenRow>
 | 
					                登录
 | 
				
			||||||
                        <RadzenRow AlignItems="AlignItems.Center">
 | 
					            </RadzenText>
 | 
				
			||||||
                            <RadzenColumn Size="4">
 | 
					            <RadzenTemplateForm Data="@loginModel" Submit="@((Pojo.User args) => { Submit(args); })" Style="width:100%;height:100%">
 | 
				
			||||||
                                <RadzenLabel Text="结束时间" Component="End" />
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
                            </RadzenColumn>
 | 
					                    <label class="rz-label" for="username">账号</label>
 | 
				
			||||||
                            <RadzenColumn Size="8">
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
                                <RadzenDatePicker DateFormat="yyyy-MM-dd HH:mm:ss" ShowTime="true" @bind-Value="end" Style="width: 100%;" Name="End" />
 | 
					                        <!--@onfocusin="@(() => Util.VirtualKeyboardHelper.ShowVirtualKeyboard())"-->
 | 
				
			||||||
                            </RadzenColumn>
 | 
					                        <RadzenTextBox id="username" Name="Username" @bind-Value="@loginModel.Username" Style="width:100%" />
 | 
				
			||||||
                        </RadzenRow>
 | 
					                        <RadzenRequiredValidator Component="Username" Text="请填写用户名" />
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        <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>
 | 
					                </div>
 | 
				
			||||||
</div>
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label" for="password">密码</label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper">
 | 
				
			||||||
 | 
					                        <RadzenPassword id="password" Name="Password" @bind-Value="@loginModel.Password" Style="width:100%" />
 | 
				
			||||||
 | 
					                        <RadzenRequiredValidator Component="Password" Text="请填写密码" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="rz-form-row">
 | 
				
			||||||
 | 
					                    <label class="rz-label"></label>
 | 
				
			||||||
 | 
					                    <div class="rz-form-input-wrapper rz-login-buttons">
 | 
				
			||||||
 | 
					                        <RadzenButton Style="background:#255dd4;color:white;width:110px" ButtonType="ButtonType.Submit" Text="登录" />
 | 
				
			||||||
 | 
					                        <RadzenButton Style="border-color:#255dd4;width:110px" Variant="Variant.Outlined" Text="取消" Click="@Exit" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </RadzenTemplateForm>
 | 
				
			||||||
 | 
					        </RadzenCard>
 | 
				
			||||||
 | 
					    </RadzenColumn>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</RadzenRow>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@code {
 | 
					@code {
 | 
				
			||||||
    @inject IHkcChangeShiftsDao hkcChangeShiftsDao;
 | 
					    @inject Radzen.DialogService dialogService;
 | 
				
			||||||
    @inject DialogService dialogService;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @inject NavigationManager navigate;
 | 
					    @inject FingerprintUtil FingerprintUtil;
 | 
				
			||||||
    RadzenDataGrid<HkcChangeShifts> grid;
 | 
					    @inject PortUtil PortUtil;
 | 
				
			||||||
    bool isLoading;
 | 
					    @inject NavigationManager na;
 | 
				
			||||||
    int count;
 | 
					    @inject NotificationService _message
 | 
				
			||||||
    private IEnumerable<HkcChangeShifts>? _forecasts;
 | 
					    @inject GlobalStateService globalStateService;
 | 
				
			||||||
    DateTime start;
 | 
					    @inject IUserDao userDao;
 | 
				
			||||||
    DateTime end;
 | 
					    @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)
 | 
					        FingerprintUtil.axCZKEM1.OnAttTransactionEx += axCZKEM1_OnAttTransactionEx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        loginMode = setting.Value.loginMode;
 | 
				
			||||||
 | 
					        opFirst = setting.Value.opFirst;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //查询当前值班信息
 | 
				
			||||||
 | 
					        hkcChange = userDao.GetOnDuty();
 | 
				
			||||||
 | 
					        if (hkcChange != null && !string.IsNullOrEmpty(hkcChange.FromOperator))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            reloadGrid();
 | 
					            FromOperator = userDao.GetByUsername(hkcChange.FromOperator);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if (hkcChange != null && string.IsNullOrEmpty(hkcChange.FromRviewer))
 | 
				
			||||||
    async Task LoadData(LoadDataArgs args)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        isLoading = true;
 | 
					            FromRviewer = userDao.GetByUsername(hkcChange.FromRviewer);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        var result = await hkcChangeShiftsDao.GetChangeShiftRecordAsync(start, end,args.Top, args.Skip);
 | 
					        return base.OnInitializedAsync();
 | 
				
			||||||
        // Update the Data property
 | 
					 | 
				
			||||||
        _forecasts = result.Desserts;
 | 
					 | 
				
			||||||
        // Update the count
 | 
					 | 
				
			||||||
        count = result.TotalDesserts;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        isLoading = false;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async Task reloadGrid()
 | 
					    private async Task SetUser(Pojo.User user)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        start = DateTime.MinValue;
 | 
					        if (userI == 1)
 | 
				
			||||||
        end = DateTime.MinValue;
 | 
					        {
 | 
				
			||||||
        await grid.Reload();
 | 
					            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();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
        <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
					        <div class="row justify-content-around align-items-center" style="margin-top: 220px; height: 430px;">
 | 
				
			||||||
            @foreach (int i in DrawerNos)
 | 
					            @foreach (int i in DrawerNos)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                <RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo !=i ? Variant.Outlined : Variant.Flat)" />
 | 
					                <RadzenButton class="col-5" Click="@(() => SelectDrawer(i))" Text="@i.ToString()" Disabled="@(status > 0)" Shade="Shade.Light" Variant="@(drawerNo != i ? Variant.Outlined : Variant.Flat)" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					@ -51,21 +51,45 @@
 | 
				
			||||||
            <Columns>
 | 
					            <Columns>
 | 
				
			||||||
                <RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
 | 
					                <RadzenDataGridColumn Sortable="false" Filterable="false" Width="4rem">
 | 
				
			||||||
                    <HeaderTemplate>
 | 
					                    <HeaderTemplate>
 | 
				
			||||||
                        <RadzenCheckBox TabIndex="-1" TriState="false" TValue="bool?" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select all items" }})"
 | 
					                        <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)))"
 | 
					                                        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)" />
 | 
					                                        Change="@(args => selectedOrderInfos = args == true ? orderInfos.ToList() : null)" />
 | 
				
			||||||
                    </HeaderTemplate>
 | 
					                    </HeaderTemplate>
 | 
				
			||||||
                    <Template Context="data">
 | 
					                    <Template Context="data">
 | 
				
			||||||
                        <RadzenCheckBox TabIndex="-1" TriState="false" Value="@(selectedOrderInfos != null && selectedOrderInfos.Contains(data))" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "Select item" }})"
 | 
					                        <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); } })" />
 | 
					                                        TValue="bool" Change="@(args => { if (!allowRowSelectOnRowClick) { grid.SelectRow(data); } })" />
 | 
				
			||||||
                    </Template>
 | 
					                    </Template>
 | 
				
			||||||
                </RadzenDataGridColumn>
 | 
					                </RadzenDataGridColumn>
 | 
				
			||||||
                <RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
 | 
					                <RadzenDataGridColumn Property="PatientName" Title="姓名" Sortable="false" Filterable="false" Width="4rem" />
 | 
				
			||||||
                <RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
 | 
					                <RadzenDataGridColumn Property="Sex" Title="性别" Sortable="false" Filterable="false" Width="2rem" />
 | 
				
			||||||
                <RadzenDataGridColumn Property="OrderNo" Title="单号" Sortable="false" Filterable="false" Width="8rem" />
 | 
					                <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.Drug.DrugName" Title="药品名称" FormatString="{0:d}" Sortable="false" Filterable="false" Width="8rem">
 | 
				
			||||||
                <RadzenDataGridColumn Property="Detail.SetManuNo" Title="药品批次" Sortable="false" Filterable="false" Width="8rem" />
 | 
					                    <Template Context="DetailList">
 | 
				
			||||||
                <RadzenDataGridColumn Property="Detail.Quantity" Title="数量" Sortable="false" Filterable="false" Width="2rem" />
 | 
					                        @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>
 | 
					            </Columns>
 | 
				
			||||||
        </RadzenDataGrid>
 | 
					        </RadzenDataGrid>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,33 +36,57 @@
 | 
				
			||||||
    .rz-gauge .rz-tick-text {
 | 
					    .rz-gauge .rz-tick-text {
 | 
				
			||||||
        fill: #ffffff !important;
 | 
					        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>
 | 
					</style>
 | 
				
			||||||
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
 | 
					<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">
 | 
					    <RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
 | 
				
			||||||
        <RadzenColumn Size="4">
 | 
					        <RadzenColumn Size="2">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        </RadzenColumn>
 | 
					        </RadzenColumn>
 | 
				
			||||||
        <RadzenColumn Size="8">
 | 
					        <RadzenColumn Size="8">
 | 
				
			||||||
            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
					            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
				
			||||||
                <RadzenColumn Size="3">
 | 
					                <RadzenColumn Size="2">
 | 
				
			||||||
                    @if (globalStateService.Operator != null)
 | 
					                    @if (globalStateService.Operator != null)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
					                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
				
			||||||
                        <RadzenText onclick="@(()=>{EditPassword(1);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
					                        <RadzenText onclick="@(() => { EditPassword(1); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    @if (globalStateService.Reviewer != null)
 | 
					                    @if (globalStateService.Reviewer != null)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
					                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
				
			||||||
                        <RadzenText onclick="@(()=>{EditPassword(2);})" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
					                        <RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </RadzenColumn>
 | 
					                </RadzenColumn>
 | 
				
			||||||
                <RadzenColumn Size="3">
 | 
					                <RadzenColumn Size="3" 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(); })" />
 | 
					                    <RadzenIcon Icon="exit_to_app" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" @onclick="@(() => { logout(); })" />
 | 
				
			||||||
                </RadzenColumn>
 | 
					                </RadzenColumn>
 | 
				
			||||||
            </RadzenRow>
 | 
					            </RadzenRow>
 | 
				
			||||||
        </RadzenColumn>
 | 
					        </RadzenColumn>
 | 
				
			||||||
 | 
					        <RadzenColumn Size="2">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </RadzenColumn>
 | 
				
			||||||
    </RadzenRow>
 | 
					    </RadzenRow>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
 | 
					    <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>
 | 
				
			||||||
            <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>
 | 
					                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
 | 
				
			||||||
                    @if (globalStateService.Operator != null)
 | 
					                    @if (globalStateService.Operator != null)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -92,6 +117,19 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                </RadzenStack>
 | 
					                </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>
 | 
				
			||||||
        <RadzenStack Style="height: 100%;width:59%" Gap="20">
 | 
					        <RadzenStack Style="height: 100%;width:59%" Gap="20">
 | 
				
			||||||
            <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
 | 
					            <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
 | 
				
			||||||
| 
						 | 
					@ -296,4 +334,15 @@
 | 
				
			||||||
        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
					        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/record1/{type}"
 | 
				
			||||||
@page "/return/record2/{type}"
 | 
					@page "/return/record2/{type}"
 | 
				
			||||||
@page "/stock/record/{type}"
 | 
					@page "/stock/record/{type}"
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Report
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="container-fluid">
 | 
					<div class="container-fluid">
 | 
				
			||||||
| 
						 | 
					@ -35,6 +36,10 @@
 | 
				
			||||||
                                <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
 | 
					                                <RadzenButton Size="ButtonSize.Large" Click="reloadGrid" IsBusy="isLoading" Icon="refresh" Text="ÖØÖÃ" ButtonStyle="ButtonStyle.Warning" />
 | 
				
			||||||
                            </RadzenColumn>
 | 
					                            </RadzenColumn>
 | 
				
			||||||
                        </RadzenRow>
 | 
					                        </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>
 | 
					                    </RadzenStack>
 | 
				
			||||||
                </RadzenFieldset>
 | 
					                </RadzenFieldset>
 | 
				
			||||||
            </form>
 | 
					            </form>
 | 
				
			||||||
| 
						 | 
					@ -111,7 +116,18 @@
 | 
				
			||||||
        await grid.Reload();
 | 
					        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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@
 | 
				
			||||||
                            EmptyText="无数据"
 | 
					                            EmptyText="无数据"
 | 
				
			||||||
                            Data="@_forecasts"
 | 
					                            Data="@_forecasts"
 | 
				
			||||||
                            AllowColumnResize="true" AllowAlternatingRows="false"
 | 
					                            AllowColumnResize="true" AllowAlternatingRows="false"
 | 
				
			||||||
                            SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di)=>{OnUpdatePlanRow(di);})" RowCreate="@((Plan di)=>{OnCreatePlanRow(di);})"
 | 
					                            SelectionMode="DataGridSelectionMode.Single" RowUpdate="@((Plan di) => { OnUpdatePlanRow(di); })" RowCreate="@((Plan di) => { OnCreatePlanRow(di); })"
 | 
				
			||||||
                            AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
					                            AllowPaging="true" PageSize="10" PagerHorizontalAlign="HorizontalAlign.Left" ColumnWidth="100px" ShowPagingSummary="true" PagingSummaryFormat="{0}/{1} 共{2}条数据">
 | 
				
			||||||
                <Columns>
 | 
					                <Columns>
 | 
				
			||||||
                    <RadzenDataGridColumn Frozen="true" Title="套餐名称" Property="Name">
 | 
					                    <RadzenDataGridColumn Frozen="true" Title="套餐名称" Property="Name">
 | 
				
			||||||
| 
						 | 
					@ -96,8 +96,8 @@
 | 
				
			||||||
                                    <RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
 | 
					                                    <RadzenDropDownDataGridColumn Property="DrugSpec" Title="规格" />
 | 
				
			||||||
                                </Columns>
 | 
					                                </Columns>
 | 
				
			||||||
                            </RadzenDropDownDataGrid>
 | 
					                            </RadzenDropDownDataGrid>
 | 
				
			||||||
                            <RadzenCustomValidator Component="drugName" Validator="@(()=>(planDetails._DrugInfo.DrugId!=null))" Text="请选择药品" Popup=true />
 | 
					                            <RadzenCustomValidator Component="drugName" Validator="@(() => (planDetails._DrugInfo.DrugId != null))" Text="请选择药品" Popup=true />
 | 
				
			||||||
                            <RadzenCustomValidator Component="drugName" Validator="@(()=>ValidatroDrug(planDetails))" Text="套餐中已包含该药品" Popup=true />
 | 
					                            <RadzenCustomValidator Component="drugName" Validator="@(() => ValidatroDrug(planDetails))" Text="套餐中已包含该药品" Popup=true />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        </EditTemplate>
 | 
					                        </EditTemplate>
 | 
				
			||||||
                    </RadzenDataGridColumn>
 | 
					                    </RadzenDataGridColumn>
 | 
				
			||||||
| 
						 | 
					@ -136,6 +136,7 @@
 | 
				
			||||||
    @inject IPlanDao planDao;
 | 
					    @inject IPlanDao planDao;
 | 
				
			||||||
    @inject DialogService dialogService;
 | 
					    @inject DialogService dialogService;
 | 
				
			||||||
    @inject NotificationService _message
 | 
					    @inject NotificationService _message
 | 
				
			||||||
 | 
					    @inject GlobalStateService globalStateService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    RadzenDataGrid<Plan> grid;
 | 
					    RadzenDataGrid<Plan> grid;
 | 
				
			||||||
    RadzenDataGrid<PlanDetails> PlanDetailsGrid;
 | 
					    RadzenDataGrid<PlanDetails> PlanDetailsGrid;
 | 
				
			||||||
| 
						 | 
					@ -218,6 +219,23 @@
 | 
				
			||||||
             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
					             new DialogOptions() { Width = "45vw", Resizable = true, Draggable = true, ShowClose = false });
 | 
				
			||||||
            if (b)
 | 
					            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))
 | 
					                if (await planDao.DeletePlanInfo(planInfo.Id))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -306,7 +324,19 @@
 | 
				
			||||||
           );
 | 
					           );
 | 
				
			||||||
            if (b)
 | 
					            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))
 | 
					                if (await planDao.DeletePlanDetail(planDetail))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -318,6 +348,7 @@
 | 
				
			||||||
                        Duration = 4000
 | 
					                        Duration = 4000
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
 | 
					                    SelectedPlan.FirstOrDefault()._PlanDetails.Remove(planDetail);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -377,6 +408,9 @@
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
 | 
					            planDetail.PlanId = SelectedPlan.FirstOrDefault().Id;
 | 
				
			||||||
            planDetail.DrugId = planDetail.DrugId == null ? planDetail._DrugInfo.DrugId : planDetail.DrugId;
 | 
					            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))
 | 
					            if (await planDao.AddPlanDetail(planDetail))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _message.Notify(new NotificationMessage
 | 
					                _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">
 | 
					                                        <RadzenDropDownDataGrid @bind-Value=@channel.drugManuNo Data=@channel.Drug?.Manus Disabled="@(channel.Drug == null)" TValue="DrugManuNo" Name="@("Drugmanu_" + channel.Id)" TextProperty="ManuNo">
 | 
				
			||||||
                                            <Columns>
 | 
					                                            <Columns>
 | 
				
			||||||
                                                <RadzenDropDownDataGridColumn Property="ManuNo" Title="批次" Sortable="false" />
 | 
					                                                <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>
 | 
					                                            </Columns>
 | 
				
			||||||
                                        </RadzenDropDownDataGrid>
 | 
					                                        </RadzenDropDownDataGrid>
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,24 +1,90 @@
 | 
				
			||||||
@page "/stock/list"
 | 
					@page "/stock/list"
 | 
				
			||||||
 | 
					@using MasaBlazorApp3.Report
 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
    @@keyframes shake {
 | 
					    @@keyframes shake {
 | 
				
			||||||
    0% { opacity:1;color:red; }
 | 
					        0% {
 | 
				
			||||||
    25%{opacity:1;color:orange;}
 | 
					            opacity: 1;
 | 
				
			||||||
    50% { opacity:0;color:yellow;}
 | 
					            color: red;
 | 
				
			||||||
    75%{opacity:1;color:crimson;}
 | 
					 | 
				
			||||||
    100% { 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 {
 | 
					    .rz-custom-header {
 | 
				
			||||||
        width: 100%;
 | 
					        width: 100%;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .shaky-text {
 | 
					    .shaky-text {
 | 
				
			||||||
        animation: shake 2s infinite ease-in-out;
 | 
					        animation: shake 2s infinite ease-in-out;
 | 
				
			||||||
        /* 你可以根据需要调整动画的持续时间和迭代次数 */
 | 
					        /* 你可以根据需要调整动画的持续时间和迭代次数 */
 | 
				
			||||||
    transition:color 0.5s linear,opacity 0.5s linear;
 | 
					        transition: color 0.5s linear,opacity 0.5s linear;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</style>
 | 
					</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"
 | 
					    <RadzenDataGrid @ref="grid"
 | 
				
			||||||
                    IsLoading="@isLoading"
 | 
					                    IsLoading="@isLoading"
 | 
				
			||||||
| 
						 | 
					@ -28,12 +94,12 @@
 | 
				
			||||||
                    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
					                    AllowColumnResize="true" AllowAlternatingRows="false"
 | 
				
			||||||
                    SelectionMode="DataGridSelectionMode.Single"
 | 
					                    SelectionMode="DataGridSelectionMode.Single"
 | 
				
			||||||
                    ExpandMode="DataGridExpandMode.Multiple">
 | 
					                    ExpandMode="DataGridExpandMode.Multiple">
 | 
				
			||||||
        <HeaderTemplate>
 | 
					        @* <HeaderTemplate>
 | 
				
			||||||
            <RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
					            <RadzenRow JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
				
			||||||
                <RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
 | 
					                <RadzenButton Icon="download" Text="库存导出" Variant="Variant.Outlined" Click="StockExport" />
 | 
				
			||||||
                <RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
 | 
					                <RadzenButton Icon="download" Text="专用账册导出" Variant="Variant.Outlined" Click="AccountBookExport" />
 | 
				
			||||||
            </RadzenRow>
 | 
					            </RadzenRow>
 | 
				
			||||||
        </HeaderTemplate>
 | 
					        </HeaderTemplate> *@
 | 
				
			||||||
        <Template Context="di">
 | 
					        <Template Context="di">
 | 
				
			||||||
            <RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
 | 
					            <RadzenDataGrid Data="@di.Stocks" EmptyText="无数据">
 | 
				
			||||||
                <Columns>
 | 
					                <Columns>
 | 
				
			||||||
| 
						 | 
					@ -50,9 +116,11 @@
 | 
				
			||||||
                            @{
 | 
					                            @{
 | 
				
			||||||
                                DateTime dateTime;
 | 
					                                DateTime dateTime;
 | 
				
			||||||
                                bool success = DateTime.TryParse(s.EffDate, out dateTime);
 | 
					                                bool success = DateTime.TryParse(s.EffDate, out dateTime);
 | 
				
			||||||
                                if(success&&dateTime<=DateTime.Now.AddMonths(3))
 | 
					                                if (success && dateTime <= DateTime.Now.AddMonths(3))
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    @s.EffDate<p class="shaky-text">近效期药品!</p>
 | 
					                                    @s.EffDate
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                                    <p class="shaky-text">近效期药品!</p>
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                else
 | 
					                                else
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
| 
						 | 
					@ -69,9 +137,11 @@
 | 
				
			||||||
            <RadzenDataGridColumn Title="规格" Property="DrugSpec"></RadzenDataGridColumn>
 | 
					            <RadzenDataGridColumn Title="规格" Property="DrugSpec"></RadzenDataGridColumn>
 | 
				
			||||||
            <RadzenDataGridColumn Title="总库存" Property="StockQuantity">
 | 
					            <RadzenDataGridColumn Title="总库存" Property="StockQuantity">
 | 
				
			||||||
                <Template Context="s">
 | 
					                <Template Context="s">
 | 
				
			||||||
                    @if(s.StockQuantity<10)
 | 
					                    @if (s.StockQuantity < 10)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        @s.StockQuantity<p class="shaky-text">库存预警!</p>
 | 
					                        @s.StockQuantity
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                        <p class="shaky-text">库存预警!</p>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -94,7 +164,9 @@
 | 
				
			||||||
    DateTime start;
 | 
					    DateTime start;
 | 
				
			||||||
    DateTime end;
 | 
					    DateTime end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    string drugName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    IEnumerable<DrugInfo> drugInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected override async Task OnInitializedAsync()
 | 
					    protected override async Task OnInitializedAsync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -104,6 +176,9 @@
 | 
				
			||||||
        var result = await drugInfoDao.GetAllDrugAndStock();
 | 
					        var result = await drugInfoDao.GetAllDrugAndStock();
 | 
				
			||||||
        // Update the Data property
 | 
					        // Update the Data property
 | 
				
			||||||
        _forecasts = result;
 | 
					        _forecasts = result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        drugInfo = await drugInfoDao.GetAllDrug();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        isLoading = false;
 | 
					        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")]
 | 
					        [Column("stock_quantity")]
 | 
				
			||||||
        public int TotalQuantity { get; set; }
 | 
					        public int TotalQuantity { get; set; }
 | 
				
			||||||
 | 
					        [Association(ThisKey = nameof(DrugId), OtherKey = nameof(PlanDetails.PlanId))]
 | 
				
			||||||
 | 
					        public List<PlanDetails> _PlanDetails { get; set; } = new();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,14 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        public string Manufactory { get; set; }
 | 
					        public string Manufactory { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Column("pack_unit")]
 | 
					        [Column("pack_unit")]
 | 
				
			||||||
        public string PackUnit { get; set;}
 | 
					        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))]
 | 
					        [Association(ThisKey = nameof(DrugId), OtherKey = nameof(ChannelStock.DrugId))]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,20 +13,28 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        [Column("Id")]
 | 
					        [Column("Id")]
 | 
				
			||||||
        public int Id { get; set; }
 | 
					        public int Id { get; set; }
 | 
				
			||||||
 | 
					        //操作时间
 | 
				
			||||||
        [Column("optDate")]
 | 
					        [Column("optDate")]
 | 
				
			||||||
        public DateTime optDate { get; set; }
 | 
					        public DateTime optDate { get; set; }
 | 
				
			||||||
 | 
					        //交班操作人
 | 
				
			||||||
        [Column("FromOperator")]
 | 
					        [Column("FromOperator")]
 | 
				
			||||||
        public string FromOperator { get; set; }
 | 
					        public string FromOperator { get; set; }
 | 
				
			||||||
 | 
					        //交班审核人
 | 
				
			||||||
        [Column("FromRviewer")]
 | 
					        [Column("FromRviewer")]
 | 
				
			||||||
        public string FromRviewer { get; set; }
 | 
					        public string FromRviewer { get; set; }
 | 
				
			||||||
 | 
					        //接班操作人
 | 
				
			||||||
        [Column("ToOperator")]
 | 
					        [Column("ToOperator")]
 | 
				
			||||||
        public string ToOperator { get; set; }
 | 
					        public string ToOperator { get; set; }
 | 
				
			||||||
 | 
					        //接班审核人
 | 
				
			||||||
        [Column("ToReviewer")]
 | 
					        [Column("ToReviewer")]
 | 
				
			||||||
        public string ToReviewer { get; set; }
 | 
					        public string ToReviewer { get; set; }
 | 
				
			||||||
 | 
					        //接班时间
 | 
				
			||||||
        [Column("ToDate")]
 | 
					        [Column("ToDate")]
 | 
				
			||||||
        public DateTime ToDate { get; set; }
 | 
					        public DateTime ToDate { get; set; }
 | 
				
			||||||
 | 
					        //当班状态(0当前值班,1已交班)
 | 
				
			||||||
        [Column("State")]
 | 
					        [Column("State")]
 | 
				
			||||||
        public string State { get; set; }
 | 
					        public string State { get; set; }
 | 
				
			||||||
 | 
					        //操作状态(0新增,1修改)
 | 
				
			||||||
        [Column("optState")]
 | 
					        [Column("optState")]
 | 
				
			||||||
        public string optState { get; set; }
 | 
					        public string optState { get; set; }
 | 
				
			||||||
        [Column("machine_id")]
 | 
					        [Column("machine_id")]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,7 +72,7 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        [Column("eff_date")]
 | 
					        [Column("eff_date")]
 | 
				
			||||||
        public DateTime? EffDate { get; set; }
 | 
					        public DateTime? EffDate { get; set; }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 出库入库类型(1入库2出库31还药32还空瓶) 
 | 
					        /// 出库入库类型(1入库2出库31还药32还空瓶,21药箱移出移入,69药箱药品替换,55药箱套餐绑定解绑) 
 | 
				
			||||||
        ///</summary>
 | 
					        ///</summary>
 | 
				
			||||||
        [Column("type")]
 | 
					        [Column("type")]
 | 
				
			||||||
        public int Type { get; set; }
 | 
					        public int Type { get; set; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,15 +147,15 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        ///</summary>
 | 
					        ///</summary>
 | 
				
			||||||
        [Column("win_no")]
 | 
					        [Column("win_no")]
 | 
				
			||||||
        public int WinNo { get; set; } = 0;
 | 
					        public int WinNo { get; set; } = 0;
 | 
				
			||||||
        /// <summary>
 | 
					        ///// <summary>
 | 
				
			||||||
        ///  
 | 
					        /////  
 | 
				
			||||||
        /// 默认值: 0
 | 
					        ///// 默认值: 0
 | 
				
			||||||
        ///</summary>
 | 
					        /////</summary>
 | 
				
			||||||
        [Column("state")]
 | 
					        //[Column("state")]
 | 
				
			||||||
        public int state { get; set; } = 0;
 | 
					        //public int state { get; set; } = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
 | 
					        [Association(ThisKey = nameof(OrderNo), OtherKey = nameof(OrderDetail.OrderNo))]
 | 
				
			||||||
        public OrderDetail Detail { get; set; } = new();
 | 
					        public List<OrderDetail> DetailList { get; set; } = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 是否选中
 | 
					        /// 是否选中
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        [Column("Drug_Id")]
 | 
					        [Column("Drug_Id")]
 | 
				
			||||||
        public string DrugId { get; set; }
 | 
					        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(); 
 | 
					        public DrugInfo _DrugInfo { get; set; } = new(); 
 | 
				
			||||||
        //添加时间
 | 
					        //添加时间
 | 
				
			||||||
        [Column("AddTime")]
 | 
					        [Column("AddTime")]
 | 
				
			||||||
| 
						 | 
					@ -33,9 +33,13 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
        public int UseState { get; set; }
 | 
					        public int UseState { get; set; }
 | 
				
			||||||
        //操作人
 | 
					        //操作人
 | 
				
			||||||
        [Column("operatorUser")]
 | 
					        [Column("operatorUser")]
 | 
				
			||||||
        public int OperatorUser { get; set; }
 | 
					        public string OperatorUser { get; set; }
 | 
				
			||||||
        //审核人
 | 
					        //审核人
 | 
				
			||||||
        [Column("reviewerUser")]
 | 
					        [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 = "药品标定",
 | 
					                PremissionName = "药品标定",
 | 
				
			||||||
                PremissionPath = "/stock/biaoDing"
 | 
					                PremissionPath = "/stock/biaoDing"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					            k.AddChild(new Premission()
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Id = 47,
 | 
				
			||||||
 | 
					                PremissionName = "交接班列表",
 | 
				
			||||||
 | 
					                PremissionPath = "/stock/Change"
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
            Premission x = new Premission
 | 
					            Premission x = new Premission
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Id = 5,
 | 
					                Id = 5,
 | 
				
			||||||
| 
						 | 
					@ -216,40 +222,93 @@ namespace MasaBlazorApp3.Pojo
 | 
				
			||||||
                PremissionPath = "/manage/setting/Fridge"
 | 
					                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 = "套餐管理",
 | 
					                PremissionName = "套餐管理",
 | 
				
			||||||
                PremissionPath = "/Box/Plan"
 | 
					                PremissionPath = "/Box/Plan"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            x.AddChild(new Premission()
 | 
					            b.AddChild(new Premission()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Id = 55,
 | 
					                Id = 62,
 | 
				
			||||||
                PremissionName = "绑定药箱",
 | 
					                PremissionName = "绑定药箱",
 | 
				
			||||||
                PremissionPath = "/Box/BoxBindings"
 | 
					                PremissionPath = "/Box/BoxBindings"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            x.AddChild(new Premission()
 | 
					            b.AddChild(new Premission()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Id = 56,
 | 
					                Id = 63,
 | 
				
			||||||
                PremissionName = "药箱核对",
 | 
					                PremissionName = "药箱核对",
 | 
				
			||||||
 | 
					                //PremissionName = "盘点交接",
 | 
				
			||||||
                PremissionPath = "/Box/Check"
 | 
					                PremissionPath = "/Box/Check"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            x.AddChild(new Premission()
 | 
					            b.AddChild(new Premission()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Id = 57,
 | 
					                Id = 66,
 | 
				
			||||||
                PremissionName = "药箱加药",
 | 
					                PremissionName = "药箱加药",
 | 
				
			||||||
 | 
					                //PremissionPath = "/stock/checkRecord"
 | 
				
			||||||
                PremissionPath = "/Box/BoxAdd"
 | 
					                PremissionPath = "/Box/BoxAdd"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            x.AddChild(new Premission()
 | 
					            b.AddChild(new Premission()
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Id = 58,
 | 
					                Id = 65,
 | 
				
			||||||
                PremissionName = "药箱入库",
 | 
					                PremissionName = "药箱入库",
 | 
				
			||||||
                PremissionPath = "/Box/BoxAddBox"
 | 
					                PremissionPath = "/Box/BoxAddBox"
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					            b.AddChild(new Premission()
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Id = 66,
 | 
				
			||||||
 | 
					                PremissionName = "药箱库存",
 | 
				
			||||||
 | 
					                PremissionPath = "/Box/BoxStock"
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
            list.Add(q);
 | 
					            list.Add(q);
 | 
				
			||||||
            list.Add(j);
 | 
					            list.Add(j);
 | 
				
			||||||
            list.Add(h);
 | 
					            list.Add(h);
 | 
				
			||||||
            list.Add(k);
 | 
					            list.Add(k);
 | 
				
			||||||
 | 
					            list.Add(b);
 | 
				
			||||||
            x.AddChild(set);
 | 
					            x.AddChild(set);
 | 
				
			||||||
            list.Add(x);
 | 
					            list.Add(x);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,10 @@ internal class Program
 | 
				
			||||||
        //药品批次
 | 
					        //药品批次
 | 
				
			||||||
        appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
 | 
					        appBuilder.Services.AddScoped<IDrugManuNoDao, DrugManuNoDao>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //交接班记录
 | 
				
			||||||
 | 
					        appBuilder.Services.AddScoped<IHkcChangeShiftsDao, HkcChangeShiftsDao>();
 | 
				
			||||||
 | 
					        //GlobalStateService.connStr = config.GetValue<String>("connectionStrings");
 | 
				
			||||||
        var app = appBuilder.Build();
 | 
					        var app = appBuilder.Build();
 | 
				
			||||||
        app.MainWindow
 | 
					        app.MainWindow
 | 
				
			||||||
            .SetHeight(768)
 | 
					            .SetHeight(768)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"Version":"6.8.5.2",
 | 
						"Version":"6.8.1.1",
 | 
				
			||||||
	"Font":{
 | 
						"Font":{
 | 
				
			||||||
		"Name":"宋体",
 | 
							"Name":"宋体",
 | 
				
			||||||
		"Size":105000,
 | 
							"Size":105000,
 | 
				
			||||||
| 
						 | 
					@ -17,8 +17,6 @@
 | 
				
			||||||
		"CenterView":true,
 | 
							"CenterView":true,
 | 
				
			||||||
		"AppendBlankRow":true,
 | 
							"AppendBlankRow":true,
 | 
				
			||||||
		"Recordset":{
 | 
							"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":[
 | 
								"Field":[
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"日期",
 | 
										"Name":"日期",
 | 
				
			||||||
| 
						 | 
					@ -34,11 +32,6 @@
 | 
				
			||||||
					"Name":"批号",
 | 
										"Name":"批号",
 | 
				
			||||||
					"DBFieldName":"manuNo"
 | 
										"DBFieldName":"manuNo"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					"Name":"上次批次结存",
 | 
					 | 
				
			||||||
					"Type":"Integer",
 | 
					 | 
				
			||||||
					"DBFieldName":"beforeManuQuan"
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"入库数量",
 | 
										"Name":"入库数量",
 | 
				
			||||||
					"Type":"Integer",
 | 
										"Type":"Integer",
 | 
				
			||||||
| 
						 | 
					@ -49,11 +42,6 @@
 | 
				
			||||||
					"Type":"Integer",
 | 
										"Type":"Integer",
 | 
				
			||||||
					"DBFieldName":"outQuantity"
 | 
										"DBFieldName":"outQuantity"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					"Name":"批号结存",
 | 
					 | 
				
			||||||
					"Type":"Integer",
 | 
					 | 
				
			||||||
					"DBFieldName":"manuQuantity"
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"总结存",
 | 
										"Name":"总结存",
 | 
				
			||||||
					"Type":"Integer",
 | 
										"Type":"Integer",
 | 
				
			||||||
| 
						 | 
					@ -65,7 +53,7 @@
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"复核人",
 | 
										"Name":"复核人",
 | 
				
			||||||
					"DBFieldName":"reviewName"
 | 
										"DBFieldName":"reviewerName"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"药品名称",
 | 
										"Name":"药品名称",
 | 
				
			||||||
| 
						 | 
					@ -94,15 +82,12 @@
 | 
				
			||||||
					"DBFieldName":"effDate"
 | 
										"DBFieldName":"effDate"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"sign1",
 | 
										"Name":"drugId",
 | 
				
			||||||
					"Type":"Binary"
 | 
										"DBFieldName":"drug_Id"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Name":"sign2",
 | 
										"Name":"凭证号",
 | 
				
			||||||
					"Type":"Binary"
 | 
										"DBFieldName":"invoiceId"
 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					"Name":"drugId"
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			]
 | 
								]
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					@ -112,7 +97,7 @@
 | 
				
			||||||
				"Width":1.77271
 | 
									"Width":1.77271
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				"Name":"操作类型",
 | 
									"Name":"凭证号",
 | 
				
			||||||
				"Width":2.19604
 | 
									"Width":2.19604
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					@ -121,7 +106,7 @@
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				"Name":"有效期",
 | 
									"Name":"有效期",
 | 
				
			||||||
				"Width":2.43417
 | 
									"Width":2.40771
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				"Name":"入库数量",
 | 
									"Name":"入库数量",
 | 
				
			||||||
| 
						 | 
					@ -157,20 +142,14 @@
 | 
				
			||||||
			"ColumnContentCell":[
 | 
								"ColumnContentCell":[
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Column":"日期",
 | 
										"Column":"日期",
 | 
				
			||||||
 | 
										"WordWrap":true,
 | 
				
			||||||
					"TextAlign":"MiddleCenter",
 | 
										"TextAlign":"MiddleCenter",
 | 
				
			||||||
 | 
										"ShrinkFontToFit":true,
 | 
				
			||||||
					"DataField":"日期"
 | 
										"DataField":"日期"
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Column":"操作类型",
 | 
										"Column":"凭证号",
 | 
				
			||||||
					"FreeCell":true,
 | 
										"DataField":"凭证号"
 | 
				
			||||||
					"Control":[
 | 
					 | 
				
			||||||
						{
 | 
					 | 
				
			||||||
							"Type":"StaticBox",
 | 
					 | 
				
			||||||
							"Name":"StaticBox10",
 | 
					 | 
				
			||||||
							"Dock":"Fill",
 | 
					 | 
				
			||||||
							"TextAlign":"MiddleCenter"
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
					]
 | 
					 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"Column":"批号",
 | 
										"Column":"批号",
 | 
				
			||||||
| 
						 | 
					@ -228,11 +207,10 @@
 | 
				
			||||||
					"FreeCell":true,
 | 
										"FreeCell":true,
 | 
				
			||||||
					"Control":[
 | 
										"Control":[
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							"Type":"StaticBox",
 | 
												"Type":"FieldBox",
 | 
				
			||||||
							"Name":"StaticBox6",
 | 
												"Name":"FieldBox14",
 | 
				
			||||||
							"Dock":"Fill",
 | 
												"Dock":"Fill",
 | 
				
			||||||
							"TextAlign":"MiddleCenter",
 | 
												"TextAlign":"MiddleCenter"
 | 
				
			||||||
							"Text":"药库"
 | 
					 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					]
 | 
										]
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
| 
						 | 
					@ -241,11 +219,10 @@
 | 
				
			||||||
					"FreeCell":true,
 | 
										"FreeCell":true,
 | 
				
			||||||
					"Control":[
 | 
										"Control":[
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							"Type":"StaticBox",
 | 
												"Type":"FieldBox",
 | 
				
			||||||
							"Name":"StaticBox7",
 | 
												"Name":"FieldBox15",
 | 
				
			||||||
							"Dock":"Fill",
 | 
												"Dock":"Fill",
 | 
				
			||||||
							"TextAlign":"MiddleCenter",
 | 
												"TextAlign":"MiddleCenter"
 | 
				
			||||||
							"Text":"门诊药房"
 | 
					 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					]
 | 
										]
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -269,7 +246,7 @@
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"GroupTitle":false,
 | 
										"GroupTitle":false,
 | 
				
			||||||
					"Column":"操作类型",
 | 
										"Column":"凭证号",
 | 
				
			||||||
					"Font":{
 | 
										"Font":{
 | 
				
			||||||
						"Name":"宋体",
 | 
											"Name":"宋体",
 | 
				
			||||||
						"Size":105000,
 | 
											"Size":105000,
 | 
				
			||||||
| 
						 | 
					@ -394,6 +371,7 @@
 | 
				
			||||||
				"Name":"Group1",
 | 
									"Name":"Group1",
 | 
				
			||||||
				"ByFields":"drugId",
 | 
									"ByFields":"drugId",
 | 
				
			||||||
				"GroupHeader":{
 | 
									"GroupHeader":{
 | 
				
			||||||
 | 
										"NewPage":"Before",
 | 
				
			||||||
					"PrintGridBorder":false,
 | 
										"PrintGridBorder":false,
 | 
				
			||||||
					"RepeatOnPage":true,
 | 
										"RepeatOnPage":true,
 | 
				
			||||||
					"Control":[
 | 
										"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": {
 | 
					  "finger": {
 | 
				
			||||||
    "ip": "192.168.50.201",
 | 
					    "ip": "192.168.50.59",
 | 
				
			||||||
    "port": 4370,
 | 
					    "port": 4370,
 | 
				
			||||||
    "type": 2
 | 
					    "type": 2
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -15,9 +15,9 @@
 | 
				
			||||||
    "boxMachineId": "DM5"
 | 
					    "boxMachineId": "DM5"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "port": {
 | 
					  "port": {
 | 
				
			||||||
    "drawerPortPath": "COM1",
 | 
					    "drawerPortPath": "COM2",
 | 
				
			||||||
    "drawerProtocol": 485,
 | 
					    "drawerProtocol": 485,
 | 
				
			||||||
    "scanCodePortPath": "COM8",
 | 
					    "scanCodePortPath": "COM1",
 | 
				
			||||||
    "canBusPortPath": "COM31",
 | 
					    "canBusPortPath": "COM31",
 | 
				
			||||||
    "canBusExsit": true,
 | 
					    "canBusExsit": true,
 | 
				
			||||||
    "doorAddr": 0,
 | 
					    "doorAddr": 0,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue