public ResponseModel GetExpenses([FromUri] ExpensesSearchParam searchParam)
        {
            if (searchParam == null)
            {
                searchParam = new ExpensesSearchParam();
            }
            //校验时间参数
            var checkResult = CheckDateParams(searchParam);

            if (checkResult.Code > 0)
            {
                return(checkResult);
            }

            //校验单页最大数据量不超过100条,防止通过接口单页请求大批量数据
            if (searchParam.PageSize != null && searchParam.PageSize > 100)
            {
                return(FunctionReturn(new ResponseModel
                {
                    Code = (int)ErrorCodeEnum.MoreThanMaxSize
                }));
            }

            if (searchParam.StartDate != null && searchParam.EndDate != null)
            {
                var newStartDate = (DateTime)searchParam.StartDate;
                searchParam.StartDate = new DateTime(newStartDate.Year, newStartDate.Month, newStartDate.Day);
                var newEndDate = (DateTime)searchParam.EndDate;
                searchParam.EndDate =
                    new DateTime(newEndDate.Year, newEndDate.Month, newEndDate.Day).AddDays(1).AddSeconds(-1);
            }
            var result = _expensesService.GetExpenses(GetUserContext(), searchParam);

            return(FunctionReturn(result));
        }
        /// <summary>
        ///     校验时间参数
        /// </summary>
        /// <param name="searchParam"></param>
        /// <returns></returns>
        private ResponseModel CheckDateParams(ExpensesSearchParam searchParam)
        {
            var responseResult = new ResponseModel();
            //开始时间和结束时间不能为空
            var checkOneOfDateIsNull = (searchParam.StartDate != null && searchParam.EndDate == null) ||
                                       (searchParam.StartDate == null && searchParam.EndDate != null);

            if (checkOneOfDateIsNull)
            {
                responseResult = Fail(ErrorCodeEnum.CheckStartDateOrEndDateIsNull);
            }

            //开始时间不能小于结束时间
            if (searchParam.StartDate != null && searchParam.EndDate != null &&
                searchParam.StartDate > searchParam.EndDate)
            {
                responseResult = Fail(ErrorCodeEnum.SearchDateParamInvalid);
            }

            return(responseResult);
        }
        /// <summary>
        ///     获取支出记录列表
        /// </summary>
        /// <returns></returns>
        public ResponseModel GetExpenses(UserContext userContext, ExpensesSearchParam param)
        {
            //1.获取筛选的条件
            if (param.CurrentPage == null || param.CurrentPage < 1)
            {
                param.CurrentPage = 1;
            }
            if (param.PageSize == null || param.PageSize < 1)
            {
                param.PageSize = 25;
            }
            var result           = new ExpensesSearchResult();
            var mainCategoryName = string.Empty;
            var subCategoryName  = string.Empty;
            var strSql           = new StringBuilder();
            var sqlWhereBuilder  = new StringBuilder();
            var tRowBuilder      = new StringBuilder();

            sqlWhereBuilder.Append(" WHERE t_PayRecord.ShopperId= @ShopperId");

            //日期过滤
            if (param.StartDate != null && param.EndDate != null && param.StartDate <= param.EndDate)
            {
                sqlWhereBuilder.Append(" and  t_PayRecord.PayDate >=@StartDate  and t_PayRecord.PayDate <=@EndDate ");
            }
            //支出人员过滤
            if (param.Staff != null && param.Staff > 0)
            {
                sqlWhereBuilder.Append(" and  t_PayRecord.InsertUserId =@InsertUserId ");
            }
            //支出大分类过滤
            if (param.MainCategoryId != null)
            {
                var mainCategory = _expensesCategoryRepository.Find(x => x.Id == param.MainCategoryId);
                if (mainCategory != null)
                {
                    mainCategoryName = mainCategory.Name;
                    sqlWhereBuilder.Append(" and  t_PayRecord.PayMaxType =@PayMaxType ");
                }
            }
            //支出小分类过滤
            if (param.SubCategoryId != null)
            {
                var subCategory = _expensesCategoryRepository.Find(x => x.Id == param.SubCategoryId);
                if (subCategory != null)
                {
                    subCategoryName = subCategory.Name;
                    sqlWhereBuilder.Append(" and  t_PayRecord.PayMinType =@PayMinType ");
                }
            }

            //筛选项
            tRowBuilder.Append("   SELECT ROW_NUMBER() OVER ( ");
            tRowBuilder.Append("       ORDER BY t_PayRecord.ID DESC ");
            tRowBuilder.Append("       ) AS rownumber ");
            tRowBuilder.Append(
                "     ,*,PaySum as  Amount,PayMaxType as MainCategoryName,PayName as Notes,PayMinType as SubCategoryName,ShopperId as MerchanId,insertUserName as UserName");
            tRowBuilder.Append("   FROM t_PayRecord  ");
            tRowBuilder.Append(sqlWhereBuilder);

            //分页查询
            strSql.Append(" SELECT *");
            strSql.Append(" FROM (");
            strSql.Append(tRowBuilder);
            strSql.Append("   ) AS T");
            strSql.Append(" WHERE RowNumber BETWEEN (@PageIndex-1)*@PageSize+1  ");
            strSql.Append("     AND @PageSize*@PageIndex ;");

            //统计支出总金额
            strSql.Append(" SELECT @TotalMoney= ISNULL(SUM(T.PaySum),0),@TotalNum=COUNT(1) from ( ");
            strSql.Append(tRowBuilder);
            strSql.Append("   ) AS T");

            var sqlParams = new
            {
                ShopperId = userContext.AccId,
                param.StartDate,
                param.EndDate,
                InsertUserId = param.Staff,
                PayMaxType   = mainCategoryName,
                PayMinType   = subCategoryName,
                param.PageSize,
                PageIndex = param.CurrentPage
            };
            var dapperParam = new DynamicParameters(sqlParams);

            dapperParam.Add("TotalMoney", dbType: DbType.Decimal, direction: ParameterDirection.Output, precision: 10, scale: 2);
            dapperParam.Add("TotalNum", dbType: DbType.Int32, direction: ParameterDirection.Output);
            var sqlQuery = new SqlQuery(strSql.ToString(), dapperParam);

            result.Items               = _expensesRepository.FindAll(sqlQuery);
            result.CurrentPage         = param.CurrentPage ?? 1;
            result.PageSize            = param.PageSize ?? 25;
            result.TotalExpensesAmount = dapperParam.Get <decimal>("TotalMoney");
            result.TotalSize           = dapperParam.Get <int>("TotalNum");
            result.TotalPage           =
                Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(result.TotalSize) / Convert.ToDecimal(result.PageSize)));

            //2.返回查询结果
            return(new ResponseModel
            {
                Code = result.Items.Any() ? (int)ErrorCodeEnum.Success : (int)ErrorCodeEnum.NotFound,
                Data = result
            });
        }
        /// <summary>
        ///     获取店铺今日运营概况
        /// </summary>
        /// <param name="userContext"></param>
        /// <returns></returns>
        public AccountOverview GetAccountOverViewToday(UserContext userContext)
        {
            var accountBusiness = _accountBusinessDapperRepository.Find(x => x.accountid == userContext.AccId);

            //销售情况
            var strSqlCoupon =
                @"SELECT @SalesMoney=cast(sum(RealMoney) as decimal(18, 2)),@GoodsSalesCount=SUM(saleNum) FROM dbo.T_SaleInfo 
                                WHERE accID=@AccountId AND saleTime BETWEEN @sDate AND @eDate;
                                IF @SalesMoney IS NULL SET @SalesMoney=0;
                                IF @GoodsSalesCount IS NULL SET @GoodsSalesCount=0;
                                ";

            var sDate = DateTime.Now.ToShortDateString();
            var eDate = DateTime.Now.ToShortDateString();

            sDate = sDate + " 00:00:00";
            eDate = eDate + " 23:59:59";
            var sqlParams = new
            {
                AccountId = userContext.AccId,
                sDate,
                eDate
            };
            var dapperParam = new DynamicParameters(sqlParams);

            dapperParam.Add("SalesMoney", dbType: DbType.Decimal, direction: ParameterDirection.Output);
            dapperParam.Add("GoodsSalesCount", dbType: DbType.Int32, direction: ParameterDirection.Output);
            var sqlQuery = new SqlQuery(strSqlCoupon, dapperParam);

            _salesDapperRepository.FindAll(sqlQuery);
            var salesMoney      = dapperParam.Get <decimal>("SalesMoney");
            var goodsSalesCount = dapperParam.Get <int>("GoodsSalesCount");

            //库存警告
            var strSqlGoodsWarning = new StringBuilder();

            strSqlGoodsWarning.Append("SELECT @GoodsWarning=COUNT( DISTINCT a.gid) ");
            strSqlGoodsWarning.Append("from T_GoodsInfo ");
            strSqlGoodsWarning.Append("a left join T_Goods_Sku b ");
            strSqlGoodsWarning.Append("on a.gid=b.gid ");
            strSqlGoodsWarning.Append("where a.accID=@accId and  ISNULL(a.isDown,0)=0  ");
            strSqlGoodsWarning.Append(
                "and ((a.IsExtend=1 and ( b.gsQuantity>=b.LimitUpper or b.gsQuantity<=b.LimitLower)) ");
            strSqlGoodsWarning.Append(
                "or (ISNULL(a.IsExtend,0)=0 and (a.gQuantity>=a.LimitUpper or a.gQuantity<=a.LimitLower))) ");
            var sqlParamsGoodsWarning = new
            {
                accId = userContext.AccId
            };
            var dapperParamGoodsWarning = new DynamicParameters(sqlParamsGoodsWarning);

            dapperParamGoodsWarning.Add("GoodsWarning", dbType: DbType.Int32, direction: ParameterDirection.Output);
            var sqlQueryGoodsWarning = new SqlQuery(strSqlGoodsWarning.ToString(), dapperParamGoodsWarning);

            _salesDapperRepository.FindAll(sqlQueryGoodsWarning);
            var goodsWarning = dapperParamGoodsWarning.Get <int>("GoodsWarning");


            //店铺会员生日
            var userBirthdayCount = 0;
            var responseUser      = _userService.GetBirthdayUsers(userContext,
                                                                  DateTime.Parse(DateTime.Now.ToShortDateString()));

            if (responseUser.Code == (int)ErrorCodeEnum.Success)
            {
                userBirthdayCount = ((IEnumerable <BirthdayUsersResult>)responseUser.Data).Count();
            }

            var expenseService  = new ExpensesService();
            var accountOverview = new AccountOverview
            {
                SalesMoney        = salesMoney,
                GoodsSalesCount   = goodsSalesCount,
                UserBirthdayCount = userBirthdayCount,
                GoodsStockCount   = goodsWarning,
                SmsCount          = accountBusiness.dxunity
            };
            var searchParams = new ExpensesSearchParam
            {
                StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1, 0, 0, 0),
                EndDate   = DateTime.Now
            };

            //本月支出总额
            var expenseResult = expenseService.GetExpenses(userContext, searchParams);

            if (expenseResult.Code == (int)ErrorCodeEnum.Success)
            {
                accountOverview.ThisMonthExpense = ((ExpensesSearchResult)expenseResult.Data).TotalExpensesAmount;
            }
            //资金账户可提现余额
            accountOverview.TotalMoeny =
                ((AccountBalanceResponse)_accountbookService.GetWithdrawingBalance(userContext).Data).TotalBalance;

            //会员总数
            accountOverview.UsersNum = _userInfoDapperRepository.FindAll(x => x.AccId == userContext.AccId).Count();

            //今日手机橱窗订单总数
            var ordersStrSql = new StringBuilder();
            var searchDate   = Convert.ToDateTime(DateTime.Now.ToShortDateString());

            ordersStrSql.Append(
                "SELECT COUNT(bid) as TotalOrdersNum FROM T_Goods_Booking WHERE accid=@accId AND payType=1 AND bState IN (4,6) AND bInsertTime BETWEEN @StartDate AND @EndDate;");
            var sqlParamMobileOrdersNum = new
            {
                accId     = userContext.AccId,
                StartDate = searchDate,
                EndDate   = searchDate.AddDays(1).AddSeconds(-1)
            };
            var dapperParamMobileOrdersNum = new DynamicParameters(sqlParamMobileOrdersNum);
            var sqlQueryMobileOrdersNum    = new SqlQuery(ordersStrSql.ToString(), dapperParamMobileOrdersNum);

            accountOverview.TodayMobileOrdersNum = Convert.ToInt32(_getRepository.FindAll(sqlQueryMobileOrdersNum).FirstOrDefault());

            return(accountOverview);
        }