Esempio n. 1
0
        /// <summary>
        /// 缓存采集器发电量统计
        /// 要进行修正缓存丢失
        /// 
        /// </summary>
        /// <param name="tcpmessage"></param>
        private static void CacheCollectorEnergyData(IDictionary<string, double?> collectorEnergyMap)
        {
            int collectorID;
            string[] keyArr;
            int year;
            int month;
            int day;
            float? data;
            Collector collector = null;
            //string[] keys = collectorEnergyMap.Keys.ToArray();
            foreach (string ekey in collectorEnergyMap.Keys)
            {
                try
                {
                    keyArr = ekey.Split(':');

                    collectorID = int.Parse(keyArr[0]);
                    //原来是通过消息头部取得,现在改为
                    data = collectorEnergyMap[ekey] == null ? 0 : float.Parse(collectorEnergyMap[ekey].ToString());
                    if (data == 0)//如果头部未传或者为0则再从设备累计下看看
                    {
                        //现在改为通过采集器的设备的今日电量来累加
                        collector = CollectorInfoService.GetInstance().Get(collectorID);
                        if (keyArr.Length < 4 || (string.IsNullOrEmpty(keyArr[1]) || string.IsNullOrEmpty(keyArr[2]) || string.IsNullOrEmpty(keyArr[3]))) continue;
                        data = collector.deviceTodayEnergy(keyArr[1] + keyArr[2] + keyArr[3]);
                    }
                    year = int.Parse(keyArr[1]);
                    month = int.Parse(keyArr[2]);
                    day = int.Parse(keyArr[3]);
                    string d_column = "d_" + day;

                    //取得月天数据对象
                    CollectorMonthDayData collectorMonthDayData = CollectorMonthDayDataService.GetInstance().GetCollectorMonthDayData(year, collectorID, month);
                    collectorMonthDayData.curDay = day;
                    //给相应属性赋值
                    if (collectorMonthDayData != null)
                    {
                        object ovalue = ReflectionUtil.getProperty(collectorMonthDayData, d_column);
                        if (ovalue == null || float.Parse(ovalue.ToString()) < data)
                        {
                            ReflectionUtil.setProperty(collectorMonthDayData, d_column, data);
                        }
                    }
                    CollectorMonthDayDataService.GetInstance().Cache(collectorMonthDayData);

                    //更新年月发电量数据
                    //统计年月
                    string m_column = "m_" + month;
                    float? m_value = collectorMonthDayData.count();
                    CollectorYearMonthData ymdData = CollectorYearMonthDataService.GetInstance().GetCollectorYearMonthData(collectorID, year); ;
                    ymdData.curMonth = month;
                    //给年月数据对象相应属性赋值
                    if (ymdData != null)
                    {
                        object ovalue = ReflectionUtil.getProperty(ymdData, m_column);
                        if (ovalue == null || float.Parse(ovalue.ToString()) < m_value)
                        {
                            ReflectionUtil.setProperty(ymdData, m_column, m_value);
                        }
                    }
                    CollectorYearMonthDataService.GetInstance().Cache(ymdData);

                    //统计总体发电量
                    float? y_value = ymdData.count();
                    CollectorYearData yd = CollectorYearDataService.GetInstance().GetCollectorYearData(collectorID, year);
                    if (yd == null) yd = new CollectorYearData() { dataValue = 0, collectorID = collectorID, year = year };
                    yd.localAcceptTime = DateTime.Now;
                    //给年月数据对象相应属性赋值
                    if (yd != null)
                    {
                        object ovalue = yd.dataValue;
                        if (ovalue == null || float.Parse(ovalue.ToString()) < y_value)
                        {
                            yd.dataValue = y_value == null ? 0 : float.Parse(y_value.ToString());
                        }
                    }
                    CollectorYearDataService.GetInstance().Cache(yd);
                }
                catch (Exception onee) {//捕获单个异常,保证一个错误不影响其他采集器数据处理
                    LogUtil.error("Cache collectorEnergyMap of ekey is " + ekey+" error:"+onee.Message);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 缓存采集器发电量统计
        /// 要进行修正缓存丢失
        /// 
        /// </summary>
        /// <param name="tcpmessage"></param>
        private static void CacheCollectorEnergyData(IDictionary<string, double> collectorEnergyMap)
        {
            int collectorID;
            string[] keyArr;
            int year;
            int month;
            int day;
            float? data;
            Collector collector = null;
            //string[] keys = collectorEnergyMap.Keys.ToArray();
            foreach (string ekey in collectorEnergyMap.Keys)
            {
                //原来是通过消息头部取得,现在改为
                //data = float.Parse(collectorEnergyMap[ekey].ToString());
                //现在改为通过采集器的设备的今日电量来累加
                keyArr = ekey.Split(':');
                collectorID = int.Parse(keyArr[0]);
                collector = CollectorInfoService.GetInstance().Get(collectorID);
                data = collector.TodayEnergy(keyArr[1] + keyArr[2] + keyArr[3]);

                //改为通过所含设备的
                year = int.Parse(keyArr[1]);
                month = int.Parse(keyArr[2]);
                day = int.Parse(keyArr[3]);
                string d_column = "d_" + day;

                //取得月天数据对象
                CollectorMonthDayData collectorMonthDayData = CollectorMonthDayDataService.GetInstance().GetCollectorMonthDayData(year, collectorID, month);
                collectorMonthDayData.curDay = day;
                //给相应属性赋值
                if (collectorMonthDayData != null)
                {
                    object ovalue = ReflectionUtil.getProperty(collectorMonthDayData, d_column);
                    //if (ovalue == null || float.Parse(ovalue.ToString()) < data)
                    //{
                        ReflectionUtil.setProperty(collectorMonthDayData, d_column, data);
                    //}
                }
                CollectorMonthDayDataService.GetInstance().Cache(collectorMonthDayData);

                //更新年月发电量数据
                //统计年月
                string m_column = "m_" + month;
                float? m_value = collectorMonthDayData.count();
                CollectorYearMonthData ymdData = CollectorYearMonthDataService.GetInstance().GetCollectorYearMonthData(collectorID, year); ;
                ymdData.curMonth = month;
                //给年月数据对象相应属性赋值
                if (ymdData != null)
                {
                    object ovalue = ReflectionUtil.getProperty(ymdData, m_column);
                    if (ovalue == null || float.Parse(ovalue.ToString()) < m_value)
                    {
                        ReflectionUtil.setProperty(ymdData, m_column, m_value);
                    }
                }
                CollectorYearMonthDataService.GetInstance().Cache(ymdData);

                //统计总体发电量
                float? y_value = ymdData.count();
                CollectorYearData yd = CollectorYearDataService.GetInstance().GetCollectorYearData(collectorID, year);
                if (yd == null) yd = new CollectorYearData() { dataValue = 0, collectorID = collectorID, year = year };
                yd.localAcceptTime = DateTime.Now;
                //给年月数据对象相应属性赋值
                if (yd != null)
                {
                    object ovalue = yd.dataValue;
                    if (ovalue == null || float.Parse(ovalue.ToString()) < y_value)
                    {
                        yd.dataValue = y_value == null ? 0 : float.Parse(y_value.ToString());
                    }
                }
                CollectorYearDataService.GetInstance().Cache(yd);
            }
        }
 /// <summary>
 /// 保存年度数据
 /// </summary>
 /// <param name="yeardata"></param>
 public void SaveTotalData(CollectorYearData yeardata)
 {
     CollectorYearData data = GetCollectorYearData(yeardata.collectorID, yeardata.year);
     if (null == data)
     {
         _plantTotalDataDao.Insert(yeardata);
     }
     else
     {
         yeardata.id = data.id;
         _plantTotalDataDao.Update(yeardata);
     }
 }
        /// <summary>
        /// 放入缓存
        /// </summary>
        /// <param name="collectorYearData"></param>
        public void Cache(CollectorYearData collectorYearData)
        {
            string cacheKey = CacheKeyUtil.buildCollectorEnergyTotalCountKey(collectorYearData.collectorID, collectorYearData.year);

            if (!persistentListKey.Contains(cacheKey)) persistentListKey.Add(cacheKey);
            MemcachedClientSatat.getInstance().Set(cacheKey, collectorYearData);
        }
        /// <summary>
        /// 判断
        /// </summary>
        /// <param name="collectorID"></param>
        /// <param name="year"></param>
        /// <returns></returns>
        public CollectorYearData GetCollectorYearData(int collectorID, int year)
        {
            string cacheKey = CacheKeyUtil.buildCollectorEnergyTotalCountKey(collectorID, year);
            object obj = MemcachedClientSatat.getInstance().Get(cacheKey);

            CollectorYearData deviceYearData;
            if (obj == null)
            {//从数据库中取得
                deviceYearData = _plantTotalDataDao.GetCollectorYearData(collectorID, year);
                if (deviceYearData == null)//构造一个新实例
                    deviceYearData = new CollectorYearData() { year = year, collectorID = collectorID, dataValue = 0 };
                deviceYearData.localAcceptTime = DateTime.Now;
                MemcachedClientSatat.getInstance().Set(cacheKey, deviceYearData);
            }
            else
                deviceYearData = (CollectorYearData)obj;

            return deviceYearData;
        }