public IndexShopOrder GetIndexShopOrder(DateTime startTime, DateTime endTime) { var shopOrder = new IndexShopOrder { TotalEneryOrderList = new List<EneryOrder>(), AreaEneryOrderList = new List<EneryOrder>() }; var shopOrderLast = new IndexShopOrder { TotalEneryOrderList = new List<EneryOrder>(), AreaEneryOrderList = new List<EneryOrder>() }; Dictionary<int, string> cacheLayer = NTS.WEB.Common.CacheHelper.GetCache("object-Layer") as Dictionary<int, string>; if (cacheLayer == null) { var res = new LayerObjects().GetObjectLayers(); NTS.WEB.Common.CacheHelper.SetCache("object-Layer", res); cacheLayer = res; } var deepth = cacheLayer.ContainsKey(int.Parse(ConfigurationManager.AppSettings["ShopLevel"])) ? int.Parse(ConfigurationManager.AppSettings["ShopLevel"]) : cacheLayer.Count; shopOrderLast.ShopLevel = GetShopLevel(deepth); //层级对象数据 var listObject = new NTS.WEB.BLL.BaseLayerObject().GetBaseLayerObjectList (string.Format(" and layerobjectid in ({0})", cacheLayer[deepth]), " order by LayerObjectID"); //拼接表名 string tbName = "TS_COUNT_AREA_MONTH_" + startTime.Year.ToString(); var monthDataList = new NTS.WEB.BLL.MonthDataObject().GetMonthDataObjectList(tbName, startTime.ToShortDateString()); //分类分项 var ItemList = new BLL.Itemcode().GetItemcodeList(" and ParentID=0", " order by ItemcodeID"); //总能耗 //List<EneryOrder> lstTotal = (from o in listObject // join b in monthDataList // on o.LayerObjectID equals int.Parse(b.CNAME) // select new EneryOrder // { // BuildingName = o.LayerObjectName, // EneryValue = b.COUNTVALUE * ItemList.Find(p => p.ItemCodeNumber == b.ITEMCODE).ItemCoal // }).ToList(); List<EneryOrder> lstTotal = (from o in listObject join b in monthDataList on o.LayerObjectID equals int.Parse(b.CNAME) select new EneryOrder { BuildingName = o.LayerObjectName, // EneryValue=0 EneryValue = b.COUNTVALUE * Convert.ToDouble(ItemList.Find(p => p.ItemCodeNumber.Substring(0, 2) == b.ITEMCODE.Substring(0, 2)).ItemCoal.ToString()) }).ToList(); ////单位面积能耗 List<EneryOrder> lstArea = (from o in listObject join b in monthDataList on o.LayerObjectID equals int.Parse(b.CNAME) select new EneryOrder { BuildingName = o.LayerObjectName, //EneryValue=0 EneryValue = (b.COUNTVALUE * Convert.ToDouble(ItemList.Find(p => p.ItemCodeNumber.Substring(0, 2) == b.ITEMCODE.Substring(0, 2)).ItemCoal.ToString())) / o.AreaNum }).ToList(); List<EneryOrder> lstTtl = new List<EneryOrder>(); List<EneryOrder> lstAr = new List<EneryOrder>(); //按对象名称分组 var lstGpTtl = from item in lstTotal group item by item.BuildingName; string nm = string.Empty; double sum = 0; foreach (var group in lstGpTtl) { nm = string.Empty; sum = 0; foreach (var v in group) { nm = v.BuildingName; sum += v.EneryValue; } lstTtl.Add(new EneryOrder { BuildingName = nm, EneryValue = sum }); } var lstGpAr = from item in lstArea group item by item.BuildingName; foreach (var group in lstGpAr) { nm = string.Empty; sum = 0; foreach (var v in group) { nm = v.BuildingName; sum += v.EneryValue; } lstAr.Add(new EneryOrder { BuildingName = nm, EneryValue = sum }); } // var objectList = new NTS.WEB.BLL.BaseLayerObject().GetBaseLayerObjectList(string.Format(" and LayerObjectDeepth={0}", deepth), " order by LayerObjectID"); //List<string> ItemCodeStr = (from item in ItemList select item.ItemCodeNumber).ToList<string>(); //var model = new BaseQueryModel(); //model.IsDevice = 0; //model.ObjectList = (from p in objectList select p.LayerObjectID).ToList<int>(); //Dictionary<string, decimal> tempConvert = new Dictionary<string, decimal>(); //Dictionary<string, decimal> tempAreaConvert = new Dictionary<string, decimal>(); //decimal[] tempConvert = new decimal[objectList.Count]; //decimal[] tempAreaConvert = new decimal[objectList.Count]; //foreach (var item in ItemCodeStr) //{ // model.ItemCode = item; // model.Unit = ChartUnit.unit_month; // model.Starttime = startTime; // model.Endtime = endTime; // var resList = reportBll.GetBaseEneryDataList(model); // const int order = 1; // foreach ( var r in resList.BaseLayerObjectResults) // { // if(tempConvert.ContainsKey(r.Value.baseLayerObject.LayerObjectName)) // { // tempConvert[r.Value.baseLayerObject.LayerObjectName] += decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()); // tempAreaConvert[r.Value.baseLayerObject.LayerObjectName] += decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()) / // decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString()); // } // else // { // tempConvert.Add(r.Value.baseLayerObject.LayerObjectName, decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString())); // tempAreaConvert.Add(r.Value.baseLayerObject.LayerObjectName, decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()) / // decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString())); // } // shopOrder.TotalEneryOrderList.Add(new EneryOrder() // { // BuildingName = r.Value.baseLayerObject.LayerObjectName, //EneryValue = double.Parse(tempConvert[r.Value.baseLayerObject.LayerObjectName].ToString("f2")), // OrderNum = order // }); // shopOrder.AreaEneryOrderList.Add(new EneryOrder() // { // BuildingName = r.Value.baseLayerObject.LayerObjectName, // EneryValue = double.Parse(tempAreaConvert[r.Value.baseLayerObject.LayerObjectName].ToString("f2")), // OrderNum = order // }); // } //} //var res1 = from p in shopOrder.TotalEneryOrderList group p by p.BuildingName into g select new { g.Key, BuildingName = g.Max(p => p.BuildingName), OrderNum = g.Max(p => p.OrderNum), EneryValue = g.Max(p => p.EneryValue) }; //var res2 = from p in shopOrder.AreaEneryOrderList group p by p.BuildingName into g select new { g.Key, BuildingName = g.Max(p => p.BuildingName), OrderNum = g.Max(p => p.OrderNum), EneryValue = g.Max(p => p.EneryValue) }; foreach (var c in lstTtl) { shopOrderLast.TotalEneryOrderList.Add(new EneryOrder { BuildingName = c.BuildingName, EneryValue = double.Parse(c.EneryValue.ToString("f2")), OrderNum = c.OrderNum }); } foreach (var c in lstAr) { shopOrderLast.AreaEneryOrderList.Add(new EneryOrder { BuildingName = c.BuildingName, EneryValue = double.Parse(c.EneryValue.ToString("f2")), OrderNum = c.OrderNum }); } return shopOrderLast; }
public NTS.WEB.ResultView.ShopOrderResult GetShopOrder(NTS.WEB.DataContact.QueryOrder query) { string keyCatch = string.Empty; foreach (var q in query.ObjectNum) { keyCatch += q.ToString() + "_"; } keyCatch += query.ItemCode + query.OrderWay + query.StartTime + query.EndTime + query.Particle; if (CacheHelper.GetCache(keyCatch) != null) { return PaddingList((ShopOrderResult)CacheHelper.GetCache(keyCatch), query); } #region 定义区 ShopOrderResult shopOrderResult = new ShopOrderResult(); shopOrderResult.OrderList = new List<BaseOrder>(); shopOrderResult.page = new Padding(); #endregion var ItemList = new List<Model.Itemcode>(); var shopOrder = new IndexShopOrder { TotalEneryOrderList = new List<EneryOrder>(), AreaEneryOrderList = new List<EneryOrder>() }; var shopOrderLast = new IndexShopOrder { TotalEneryOrderList = new List<EneryOrder>(), AreaEneryOrderList = new List<EneryOrder>() }; // var deepth = int.Parse(ConfigurationManager.AppSettings["ShopLevel"]); if (query.ItemCode == "00000") { ItemList = new BLL.Itemcode().GetItemcodeList(" and ParentID=0", " order by ItemcodeID"); } else { ItemList = new BLL.Itemcode().GetItemcodeList(" and ItemCodeNumber='" + query.ItemCode + "'", " order by ItemcodeID"); } List<string> ItemCodeStr = (from item in ItemList select item.ItemCodeNumber).ToList<string>(); var model = new BaseQueryModel(); model.IsDevice = 0; model.ObjectList = query.ObjectNum; Dictionary<string, decimal> tempConvert = new Dictionary<string, decimal>(); Dictionary<string, decimal> tempAreaConvert = new Dictionary<string, decimal>(); // decimal[] tempConvert = new decimal[objectList.Count]; // decimal[] tempAreaConvert = new decimal[objectList.Count]; foreach (var item in ItemCodeStr) { model.ItemCode = item; model.Unit = GetUnit(query.StartTime, query.EndTime); if (model.Unit == ChartUnit.unit_month) { model.Starttime = Convert.ToDateTime(query.StartTime.ToString("yyyy-MM-1")); model.Endtime = Convert.ToDateTime(query.EndTime.ToString("yyyy-MM-1")); } else { model.Starttime = query.StartTime; model.Endtime = query.EndTime; } var resList = reportBll.GetBaseEneryDataList(model); const int order = 1; foreach (var r in resList.BaseLayerObjectResults) { if (tempConvert.ContainsKey(r.Value.baseLayerObject.LayerObjectName)) { if (query.ItemCode == "00000") { tempConvert[r.Value.baseLayerObject.LayerObjectName] += decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()); tempAreaConvert[r.Value.baseLayerObject.LayerObjectName] += decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()) / decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString()); } else { tempConvert[r.Value.baseLayerObject.LayerObjectName] += r.Value.Total; tempAreaConvert[r.Value.baseLayerObject.LayerObjectName] += r.Value.Total / decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString()); } } else { if (query.ItemCode == "00000") { tempConvert.Add(r.Value.baseLayerObject.LayerObjectName, decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString())); tempAreaConvert.Add(r.Value.baseLayerObject.LayerObjectName, decimal.Parse(r.Value.ConvertDataValueList["ITEMCOAL"].ToString()) / decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString())); } else { tempConvert.Add(r.Value.baseLayerObject.LayerObjectName, r.Value.Total); tempAreaConvert.Add(r.Value.baseLayerObject.LayerObjectName, r.Value.Total / decimal.Parse(r.Value.baseLayerObject.AreaNum.ToString())); } } shopOrder.TotalEneryOrderList.Add(new EneryOrder() { BuildingName = r.Value.baseLayerObject.LayerObjectName, EneryValue = double.Parse(tempConvert[r.Value.baseLayerObject.LayerObjectName].ToString("f2")), OrderNum = order }); shopOrder.AreaEneryOrderList.Add(new EneryOrder() { BuildingName = r.Value.baseLayerObject.LayerObjectName, EneryValue = double.Parse(tempAreaConvert[r.Value.baseLayerObject.LayerObjectName].ToString("f2")), OrderNum = order }); } } var res1 = from p in shopOrder.TotalEneryOrderList group p by p.BuildingName into g select new { g.Key, BuildingName = g.Max(p => p.BuildingName), OrderNum = g.Max(p => p.OrderNum), EneryValue = g.Max(p => p.EneryValue) }; var res2 = from p in shopOrder.AreaEneryOrderList group p by p.BuildingName into g select new { g.Key, BuildingName = g.Max(p => p.BuildingName), OrderNum = g.Max(p => p.OrderNum), EneryValue = g.Max(p => p.EneryValue) }; foreach (var c in res1) { shopOrderLast.TotalEneryOrderList.Add(new EneryOrder { BuildingName = c.BuildingName, EneryValue = c.EneryValue, OrderNum = c.OrderNum }); } foreach (var c in res2) { shopOrderLast.AreaEneryOrderList.Add(new EneryOrder { BuildingName = c.BuildingName, EneryValue = c.EneryValue, OrderNum = c.OrderNum }); } int record = shopOrderLast.TotalEneryOrderList.Count; shopOrderResult.page = new Padding() { Current = query.PageCurrent, Total = (record % query.PageSize == 0) ? record / query.PageSize : record / query.PageSize + 1 }; int orders = 1; if (query.Particle == "total") { foreach (var r in shopOrderLast.TotalEneryOrderList) { shopOrderResult.OrderList.Add(new BaseOrder() { Energy = decimal.Parse(r.EneryValue.ToString("f2")), Id = orders, Title = r.BuildingName, Units = query.ItemCode == "00000" ? "T" : ItemList[0].Unit }); orders++; } } else { foreach (var r in shopOrderLast.AreaEneryOrderList) { shopOrderResult.OrderList.Add(new BaseOrder() { Energy = decimal.Parse(r.EneryValue.ToString("f2")), Id = r.OrderNum, Title = r.BuildingName, Units = query.ItemCode == "00000" ? "T" : ItemList[0].Unit }); } } if (CacheHelper.GetCache(keyCatch) == null) { CacheHelper.SetCache(keyCatch, shopOrderResult); } return PaddingList(shopOrderResult, query); }