Esempio n. 1
0
        public ActionResult QueryRealTimeSaleReport(Pager page, SearchSaleReport condition)
        {
            var rows = _saleOrderQuery.QueryRealTimeSaleReport(page, condition);

            if (page.toExcel)
            {
                var data     = _excelService.WriteToExcelStream(rows.ToList(), ExcelVersion.Above2007, false, true).ToArray();
                var fileName = string.Format("实时销售报表_{0}.xlsx", DateTime.Now.ToString("yyyyMMdd"));
                return(File(data, "application/ms-excel", fileName));
            }
            return(Json(new { success = true, data = rows, total = page.Total, sum = page.SumColumns }));
        }
Esempio n. 2
0
        public JsonResult QuerySaleReport(Pager page, SearchSaleReport condition)
        {
            var rows = _saleOrderQuery.QuerySaleReport(page, condition);

            return(Json(new { success = true, data = rows, total = page.Total, sum = page.SumColumns }));
        }
Esempio n. 3
0
        private IEnumerable <SaleReportDto> QuerySaleReportGroupByStore(Pager page, SearchSaleReport condition)
        {
            IEnumerable <SaleReportDto> result = new List <SaleReportDto>();

            if ((int)condition.GroupBy == 0)
            {
                return(result);
            }


            dynamic param = new ExpandoObject();

            string where = "";

            if (!string.IsNullOrEmpty(condition.ProductCodeOrBarCode))
            {
                where += @"and ( p.code=@ProductCodeOrBarCode or p.barcode =@ProductCodeOrBarCode  ) ";
                param.ProductCodeOrBarCode = condition.ProductCodeOrBarCode;
            }

            if (condition.StartDate.HasValue)
            {
                where          += "and r.CreatedOn >=@StartDate ";
                param.StartDate = condition.StartDate.Value;
            }
            if (condition.EndDate.HasValue)
            {
                where        += "and r.CreatedOn < @EndDate ";
                param.EndDate = condition.EndDate.Value.AddDays(1);
            }

            if (!string.IsNullOrEmpty(condition.StoreId) && condition.StoreId != "0")
            {
                where        += "and r.StoreId in @StoreId ";
                param.StoreId = condition.StoreId.Split(',').ToIntArray();
            }
            if (!string.IsNullOrEmpty(condition.CategoryId))
            {
                where           += "and c.Id like @CategoryId ";
                param.CategoryId = condition.CategoryId + "%";
            }
            if (condition.BrandId > 0)
            {
                where        += "and b.Id = @BrandId ";
                param.BrandId = condition.BrandId;
            }
            if (condition.OrderLevel > 0)
            {
                where           += "and r.OrderLevel = @OrderLevel ";
                param.OrderLevel = condition.OrderLevel;
            }

//            select s.`name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
//select r.storeId,count(DISTINCT r.billCode) as OrderCount,sum(r.changeQuantity) as SaleQuantity,sum(r.Price*r.changeQuantity) as SaleCostAmount,sum(r.Price*r.changeQuantity) as SaleAmount
//from storeinventoryhistory r left join product p on p.id = r.productId
//left join category c on c.Id = p.CategoryId
//left join brand b on b.Id = p.BrandId
//where r.BillType in (1,2)
//GROUP BY r.StoreId  ) t
//LEFT JOIN store s on s.id = t.StoreId  limit 0,50

            //按分组组装sql
            var sql      = "";
            var sqlCount = "";
            var sqlSum   = "";

            switch (condition.GroupBy)
            {
            case GroupByMethod.Store:
                sql      = @"select s.`name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select r.storeId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.StoreId LIMIT {1},{2}  ) t
LEFT JOIN store s on s.id = t.StoreId";
                sqlCount = @"select count(*) from (
select r.storeId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.StoreId ) t
LEFT JOIN store s on s.id = t.StoreId";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select r.storeId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.StoreId  ) t
LEFT JOIN store s on s.id = t.StoreId";

                break;

            case GroupByMethod.Product:
                sql      = @"select s.`name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select r.productId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.productId LIMIT {1},{2}  ) t
LEFT JOIN product s on s.id = t.productId";
                sqlCount = @"select count(*) from (
select r.productId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.productId ) t
LEFT JOIN product s on s.id = t.productId";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount  from (
select r.productId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.productId  ) t
LEFT JOIN product s on s.id = t.productId";
                break;

            case GroupByMethod.Category:
                param.CategoryLevel = condition.CategoryLevel <= 0 ? 1 : condition.CategoryLevel;

                sql      = @"select s.`FullName` as Name ,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select left(c.Id,2*@CategoryLevel) as CategoryId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY left(c.Id,2*@CategoryLevel) LIMIT {1},{2}  ) t
LEFT JOIN Category s on s.id = t.CategoryId";
                sqlCount = @"select count(*) from (
select c.Id CategoryId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY left(c.Id,2*@CategoryLevel) ) t
LEFT JOIN Category s on s.id = t.CategoryId";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select left(c.Id,2*@CategoryLevel) as CategoryId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY left(c.Id,2*@CategoryLevel) ) t
LEFT JOIN Category s on s.id = t.CategoryId";
                break;

            case GroupByMethod.Supplier:
                sql      = @"select s.`name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select r.SupplierId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.SupplierId LIMIT {1},{2}  ) t
LEFT JOIN supplier s on s.id = t.SupplierId";
                sqlCount = @"select count(*) from (
select r.SupplierId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.SupplierId  ) t
LEFT JOIN supplier s on s.id = t.SupplierId";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select r.SupplierId,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.SupplierId ) t
LEFT JOIN supplier s on s.id = t.SupplierId";
                break;

            case GroupByMethod.Creator:
                sql      = @"select CONCAT(s.NickName,'(',s.`UserName`,')')  as `Name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select r.createdBy,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.createdBy LIMIT {1},{2}  ) t
LEFT JOIN account s on s.id = t.createdBy";
                sqlCount = @"select count(*) from (
select r.createdBy,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.createdBy   ) t
LEFT JOIN account s on s.id = t.createdBy";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select r.createdBy,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY r.createdBy ) t
LEFT JOIN account s on s.id = t.createdBy";
                break;

            case GroupByMethod.Day:
                sql      = @"select t.`Name`,OrderCount,SaleQuantity,SaleCostAmount,SaleAmount from (
select DATE_FORMAT(r.createdOn,'%Y-%m-%d') as `Name`,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY DATE_FORMAT(r.createdOn,'%Y-%m-%d')  LIMIT {1},{2}  ) t";
                sqlCount = @"select count(*) from (
select DATE_FORMAT(r.createdOn,'%Y-%m-%d') as `Name`,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY DATE_FORMAT(r.createdOn,'%Y-%m-%d')  ) t";
                sqlSum   = @"select sum(OrderCount) as OrderCount ,sum(SaleQuantity) as SaleQuantity,sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select DATE_FORMAT(r.createdOn,'%Y-%m-%d') as `Name`,count(DISTINCT r.saleorderId) as OrderCount,sum(r.Quantity) as SaleQuantity,sum(r.CostPrice*r.Quantity) as SaleCostAmount,sum(r.SalePrice*r.Quantity) as SaleAmount 
from salereport r left join product p on p.id = r.productId 
left join category c on c.Id = p.CategoryId
left join brand b on b.Id = p.BrandId
where 1=1 {0} GROUP BY DATE_FORMAT(r.createdOn,'%Y-%m-%d')  ) t";
                break;

            default:
                break;
            }


            //rows = this._query.FindPage<ProductDto>(page.PageIndex, page.PageSize).Where<Product>(where, param);
            sql = string.Format(sql, where, (page.PageIndex - 1) * page.PageSize, page.PageSize);
            var rows = this._query.FindAll <SaleReportDto>(sql, param);

            sqlCount   = string.Format(sqlCount, where);
            page.Total = this._query.Context.ExecuteScalar <int>(sqlCount, param);

            //汇总数据
            sqlSum = string.Format(sqlSum, where);
            var sumStoreInventory = this._query.Find <SumSaleReport>(sqlSum, param) as SumSaleReport;

            page.SumColumns.Add(new SumColumn("OrderCount", sumStoreInventory.OrderCount.ToString()));
            page.SumColumns.Add(new SumColumn("SaleQuantity", sumStoreInventory.SaleQuantity.ToString()));
            page.SumColumns.Add(new SumColumn("SaleCostAmount", sumStoreInventory.SaleCostAmount.ToString("F4")));
            page.SumColumns.Add(new SumColumn("SaleAmount", sumStoreInventory.SaleAmount.ToString("F2")));
            page.SumColumns.Add(new SumColumn("ProfitAmount", sumStoreInventory.ProfitAmount.ToString("F2")));
            page.SumColumns.Add(new SumColumn("ProfitPercent", sumStoreInventory.ProfitPercent.ToString("F2") + "%"));
            return(rows);
        }
Esempio n. 4
0
        public IEnumerable <RealTimeSaleReportDto> QueryRealTimeSaleReport(Pager page, SearchSaleReport condition)
        {
            dynamic param = new ExpandoObject();

            string where = "";

            if (condition.StartDate.HasValue)
            {
                where          += "and h.CreatedOn >=@StartDate ";
                param.StartDate = condition.StartDate.Value;
            }
            if (condition.EndDate.HasValue)
            {
                where        += "and h.CreatedOn < @EndDate ";
                param.EndDate = condition.EndDate.Value.AddDays(1);
            }

            if (!string.IsNullOrEmpty(condition.StoreId) && condition.StoreId != "0")
            {
                where        += "and h.StoreId in @StoreId ";
                param.StoreId = condition.StoreId.Split(',').ToIntArray();
            }
            if (condition.OrderType != 0)
            {
                where += condition.OrderType == 1 ? "and h.ChangeQuantity<0 " : "and h.ChangeQuantity>0 ";
            }

            var sql = @"select s.name ,t.* from (
select h.storeid,count(DISTINCT h.billcode) as orderCount, abs(sum(h.ChangeQuantity)) as SaleQuantity,abs(sum(h.ChangeQuantity*h.Price)) as SaleCostAmount,abs(sum(h.ChangeQuantity*h.SalePrice)) as SaleAmount 
from StoreInventoryHistory h 
where h.BillType in (1,2)  {0}
group by h.storeid) t left join store s on t.storeid = s.id ";

            if (!page.toExcel)
            {
                sql += string.Format(" LIMIT {0},{1}", (page.PageIndex - 1) * page.PageSize, page.PageSize);
            }
            sql = string.Format(sql, where);
            var rows   = this._query.FindAll <RealTimeSaleReportDto>(sql, param);
            var sqlSum = @"select count(*) as totalCount,sum(t.OrderCount) as OrderCount,sum(Quantity) as SaleQuantity, sum(SaleCostAmount) as SaleCostAmount,sum(SaleAmount) as SaleAmount from (
select h.storeid,count(DISTINCT h.billcode) as orderCount, abs(sum(h.ChangeQuantity)) as Quantity,abs(sum(h.ChangeQuantity*h.Price)) as SaleCostAmount,abs(sum(h.ChangeQuantity*h.SalePrice)) as SaleAmount 
from StoreInventoryHistory h 
where h.BillType in (1,2)  {0}
group by h.storeid) t left join store s on t.storeid = s.id";

            //汇总数据
            sqlSum = string.Format(sqlSum, where);
            var sumStoreInventory = this._query.Find <SumSaleReport>(sqlSum, param) as SumSaleReport;

            page.Total = sumStoreInventory.TotalCount;
            page.SumColumns.Add(new SumColumn("OrderCount", sumStoreInventory.OrderCount.ToString()));
            page.SumColumns.Add(new SumColumn("SaleQuantity", sumStoreInventory.SaleQuantity.ToString()));
            page.SumColumns.Add(new SumColumn("SaleCostAmount", sumStoreInventory.SaleCostAmount.ToString("F4")));
            page.SumColumns.Add(new SumColumn("SaleAmount", sumStoreInventory.SaleAmount.ToString("F2")));
            page.SumColumns.Add(new SumColumn("ProfitAmount", sumStoreInventory.ProfitAmount.ToString("F2")));
            page.SumColumns.Add(new SumColumn("ProfitPercent", sumStoreInventory.ProfitPercent.ToString("F2") + "%"));
            return(rows);
        }
Esempio n. 5
0
        public IEnumerable <SaleReportDto> QuerySaleReport(Pager page, SearchSaleReport condition)
        {
            var result = QuerySaleReportGroupByStore(page, condition);

            return(result);
        }