/// <summary>
		/// 根据手术单号查询耗材详情
		/// </summary>
		/// <param name="pageDataApo"></param>
		/// <param name="stockGoodsNum">商品有库存的数量</param>
		/// <param name="notStockGoodsNum">商品库存不足的数量</param>
		/// <returns></returns>
		public BasePageDataDto<SurgeryOrderdtlDto> GetSurgeryOrderdtlDto(SurgeryOrderApo pageDataApo,  out int stockGoodsNum, out int notStockGoodsNum)
		{

            List<SurgeryOrderdtlDto> surgeryOrderdtlDtos = FetchOrderDal.GetSurgeryOrderdtlDto(pageDataApo, out int totalCount);

			//手术单耗材详情拼接当前柜子对应商品库存数量
			surgeryOrderdtlDtos.ForEach(it => 
			{
				it.stock_num = pageDataApo.GoodsDtos.Where(goodsDto => goodsDto.fetch_type == (int)RequisitionAttribute.有单领用 && goodsDto.goods_code == it.goods_code).Count();
			});

			//库存满足的商品的数量
			stockGoodsNum = surgeryOrderdtlDtos.Where(surgeryOrderdtlDto =>
				surgeryOrderdtlDto.not_fetch_num <= surgeryOrderdtlDto.stock_num
			).Count();

			//库存不满足满足的商品的数量
			notStockGoodsNum = surgeryOrderdtlDtos.Count() - stockGoodsNum;

            return new BasePageDataDto<SurgeryOrderdtlDto>()
            {
                PageIndex = pageDataApo.PageIndex,
                PageSize = pageDataApo.PageSize,
                Data = surgeryOrderdtlDtos,
                TotalCount = totalCount
            };

        }
		/// <summary>
		/// 根据手术单号查询对应手术单号
		/// </summary>
		/// <param name="pageDataApo">带分页的pageDataApo</param>
		/// <returns></returns>
		public BasePageDataDto<SurgeryOrderDto> GetSurgeryOrderDto(SurgeryOrderApo pageDataApo)
		{
			return new BasePageDataDto<SurgeryOrderDto>()
			{
				PageIndex = pageDataApo.PageIndex,
				PageSize = pageDataApo.PageSize,
				Data = FetchOrderDal.GetSurgeryOrderDto(pageDataApo, out int totalCount),
				TotalCount = totalCount
			};
		}
		/// <summary>
		/// 根据手术单号查询耗材详情(临时显示,不做入库逻辑)
		/// </summary>
		/// <param name="pageDataApo"></param>
		/// <param name="not_fetch_goods_num">仍然待领取商品的数量</param>
		/// <returns></returns>
		public BasePageDataDto<SurgeryOrderdtlDto> GetSurgeryOrderdtlOperateDto(SurgeryOrderApo pageDataApo, out int notFetchGoodsNum)
		{
			//获取手术单详情
			List<SurgeryOrderdtlDto> surgeryOrderdtlDtos = FetchOrderDal.GetSurgeryOrderdtlDto(pageDataApo, out int totalCount);

			//获取一次操作变化的商品集
			List<GoodsDto> operateGoodsDtos = pageDataApo.OperateGoodsDtos;

			//获取当前库存商品集
			List<GoodsDto> goodsDtos = pageDataApo.GoodsDtos;

			//手术单耗材详情拼接当前柜子对应商品库存数量
			surgeryOrderdtlDtos.ForEach(it =>
			{
				//对应正常领取商品数量
				int normalOperateCount = operateGoodsDtos.Where(goodsDto => goodsDto.goods_code == it.goods_code && goodsDto.exception_flag == (int)ExceptionFlag.正常).Count();

				//对应商品的库存数
				int goodsStockCount = goodsDtos.Where(goodsDto => goodsDto.fetch_type == (int)RequisitionAttribute.有单领用 && goodsDto.goods_code == it.goods_code).Count();

				//已经领用数量
				it.already_fetch_num = normalOperateCount;


				int real_not_fetch_num = it.not_fetch_num - it.already_fetch_num;

				//根据操作的商品数据临时调整代取数量(会有多取的,所以默认多取,也满足正常取)
				it.not_fetch_num = real_not_fetch_num >= 0 ? real_not_fetch_num : 0;

				//如果取多了,则显示这类商品异常(此异常应该为警告,所以默认不操作,就是正确的)
				if (real_not_fetch_num < 0)
				{
					
					it.exception_flag_description = ExceptionFlag.异常.ToString();
					it.exception_description = ExceptionDescription.该商品已经超过待领数量.ToString();
				}

				it.stock_num = goodsStockCount;
			});

			notFetchGoodsNum = surgeryOrderdtlDtos.Where(it => it.not_fetch_num > 0).Count();

			return new BasePageDataDto<SurgeryOrderdtlDto>()
			{
				PageIndex = pageDataApo.PageIndex,
				PageSize = pageDataApo.PageSize,
				//过滤无需代取的商品,此步骤留给前端做,保证处理后数据的完整性,以便可直接做入库修改逻辑
				//Data = surgeryOrderdtlDtos.Where(it=>it.not_fetch_num > 0).ToList(),
				Data = surgeryOrderdtlDtos,
				TotalCount = totalCount
			};

		}
		/// <summary>
		/// 确认时,修改手术领用详情数据
		/// </summary>
		/// <param name="replenishSubOrderid">上架单id</param>
		/// <param name="datasDto">当前操作数据dto</param>
		/// <returns></returns>
		public bool UpdateSurgeryOrderdtl(SurgeryOrderApo pageDataApo, List<SurgeryOrderdtlDto> datasDto)
		{
			bool ret = FetchOrderDal.UpdateSurgeryOrderdtl(datasDto);


			//生成有单领用单信息和库存变化单信息
			if (ret)
			{
				ret = InsertFetchAndGoodsChangeInfo(pageDataApo.OperateGoodsDtos, RequisitionType.有单手术领用, pageDataApo.SurgeryOrderCode);
			}
			return ret;

		}
		/// <summary>
		/// 根据手术单号查询耗材详情(全部显示)
		/// </summary>
		/// <param name="pageDataApo"></param>
		/// <param name="stockGoodsNum">商品有库存的数量</param>
		/// <param name="notStockGoodsNum">商品库存不足的数量</param>
		/// <returns></returns>
		public BasePageDataDto<SurgeryOrderdtlDto> GetSurgeryOrderdtlDto(SurgeryOrderApo pageDataApo)
		{

			List<SurgeryOrderdtlDto> surgeryOrderdtlDtos = FetchOrderDal.GetSurgeryOrderdtlAllDto(pageDataApo, out int totalCount);

			return new BasePageDataDto<SurgeryOrderdtlDto>()
			{
				PageIndex = pageDataApo.PageIndex,
				PageSize = pageDataApo.PageSize,
				Data = surgeryOrderdtlDtos,
				TotalCount = totalCount
			};

		}
        /// <summary>
        /// 根据手术单号查询耗材详情(全部)
        /// </summary>
        /// <param name="surgeryOrderCode"></param>
        /// <returns></returns>
        public List <SurgeryOrderdtlDto> GetSurgeryOrderdtlAllDto(SurgeryOrderApo pageDataApo, out int totalCount)
        {
            totalCount = 0;
            List <SurgeryOrderdtlDto> data;

            //查询语句(查询全部出手术单待领用的耗材)
            var queryable = Db.Queryable <SurgeryOrderdtl>()
                            .Where(it => it.surgery_order_code == pageDataApo.SurgeryOrderCode)
                            .Select <SurgeryOrderdtlDto>();


            //如果小于0,默认查全部
            if (pageDataApo.PageSize > 0)
            {
                data = queryable.ToPageList(pageDataApo.PageIndex, pageDataApo.PageSize, ref totalCount);
            }
            else
            {
                data       = queryable.ToList();
                totalCount = data.Count();
            }
            return(data);
        }
        /// <summary>
        /// 根据手术单号查询对应手术单号
        /// </summary>
        /// <param name="pageDataApo">带分页的pageDataApo</param>
        /// <param name="totalCount">返回的总数</param>
        /// <returns></returns>
        public List <SurgeryOrderDto> GetSurgeryOrderDto(SurgeryOrderApo pageDataApo, out int totalCount)
        {
            totalCount = 0;
            List <SurgeryOrderDto> data;

            //查询语句
            var queryable = Db.Queryable <SurgeryOrder>()
                            .Where(it => it.code.StartsWith(pageDataApo.SurgeryOrderCode))
                            .Select <SurgeryOrderDto>();


            //如果小于0,默认查全部
            if (pageDataApo.PageSize > 0)
            {
                data = queryable.ToPageList(pageDataApo.PageIndex, pageDataApo.PageSize, ref totalCount);
            }
            else
            {
                data       = queryable.ToList();
                totalCount = data.Count();
            }
            return(data);
        }