예제 #1
0
        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;
        }
예제 #2
0
        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);
        }