Пример #1
0
        /// <summary>
        /// 根据年度,月份,和设备id取得相应的月天发电量统计信息
        /// 经过缓存处理
        /// </summary>
        /// <param name="year"></param>
        /// <param name="deviceID"></param>
        /// <param name="monitorCode"></param>
        /// <param name="month"></param>
        /// <returns></returns>
        public DeviceMonthDayData GetDeviceMonthDayData(int year, int deviceID, int month)
        {
            string cacheKey = CacheKeyUtil.buildDeviceEnergyMonthCountKey(deviceID, year, month);
            object obj      = MemcachedClientSatat.getInstance().Get(cacheKey);

            DeviceMonthDayData deviceMonthDayData;

            if (obj == null)
            {                                   //从数据库中取得
                deviceMonthDayData = _DeviceMonthDataDao.GetDeviceMonthDayData(deviceID, year, month);
                if (deviceMonthDayData == null) //构造一个新实例
                {
                    deviceMonthDayData = new DeviceMonthDayData()
                    {
                        month = month, year = year, deviceID = deviceID
                    }
                }
                ;
                deviceMonthDayData.localAcceptTime = DateTime.Now;
                deviceMonthDayData.year            = year;
                MemcachedClientSatat.getInstance().Set(cacheKey, deviceMonthDayData);
            }
            else
            {
                deviceMonthDayData = (DeviceMonthDayData)obj;
            }

            return(deviceMonthDayData);
        }
Пример #2
0
        /// <summary>
        /// 从缓存中批量持久化数据
        /// </summary>
        public void batchSave()
        {
            DeviceMonthDayData energyData;

            String[] keyArr = persistentListKey.ToArray();
            foreach (string key in keyArr)
            {
                object obj = MemcachedClientSatat.getInstance().Get(key);
                if (obj == null)
                {
                    LogUtil.warn(key + "in cache is empty of device day data ");
                    continue;
                }
                energyData = (DeviceMonthDayData)obj;
                string _Column = "d_" + energyData.curDay;
                float  _value  = 0;
                try
                {
                    _value = (float)ReflectionUtil.getProperty(energyData, _Column);
                }
                catch (Exception e1) {
                    LogUtil.error(e1.Message);
                }
                try
                {
                    if (energyData.id > 0)
                    {
                        _DeviceMonthDataDao.UpdateDeviceMonthDayData(energyData.year, _Column, _value, energyData.id);
                    }
                    else
                    {
                        try
                        {
                            _DeviceMonthDataDao.InsertDeviceMonthDayData(_Column, _value, energyData.deviceID, energyData.year, energyData.month);
                        }
                        catch (Exception e) {
                            LogUtil.error("insert device mOnth day error:" + e.Message);
                        }
                        DeviceMonthDayData tmp = _DeviceMonthDataDao.GetDeviceMonthDayData(energyData.deviceID, energyData.year, energyData.month);
                        if (tmp == null)
                        {
                            tmp = _DeviceMonthDataDao.GetDeviceMonthDayData(energyData.deviceID, energyData.year, energyData.month);
                        }
                        energyData.id = tmp == null?0:tmp.id;
                        MemcachedClientSatat.getInstance().Set(key, energyData);
                    }
                }
                catch (Exception e2)
                {
                    LogUtil.error(e2.Message);
                }
                //判断是否不在持久化
                if (energyData.localAcceptTime.Month != DateTime.Now.Month)
                {
                    energyData.dontPersitent = true;
                    persistentListKey.Remove(key);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// 放入缓存
        /// </summary>
        /// <param name="deviceMonthDayData"></param>
        public void Cache(DeviceMonthDayData deviceMonthDayData)
        {
            string cacheKey = CacheKeyUtil.buildDeviceEnergyMonthCountKey(deviceMonthDayData.deviceID, deviceMonthDayData.year, deviceMonthDayData.month);

            if (!persistentListKey.Contains(cacheKey))
            {
                persistentListKey.Add(cacheKey);
            }
            //一个月3天后过期
            MemcachedClientSatat.getInstance().Set(cacheKey, deviceMonthDayData, DateTime.Now.AddMonths(1).AddDays(3));
        }
Пример #4
0
        /// <summary>
        /// 保存单个设备的月天数据
        /// </summary>
        /// <param name="year"></param>
        /// <param name="d_Column"></param>
        /// <param name="d_Value"></param>
        /// <param name="deviceID"></param>
        /// <param name="monitorCode"></param>
        /// <param name="month"></param>
        public void SaveDeviceMonthDayData(int year, string d_Column, double d_Value, int deviceID, int month)
        {
            DeviceMonthDayData deviceMonthDayData = GetDeviceMonthDayData(year, deviceID, month);

            if (deviceMonthDayData != null)
            {
                _DeviceMonthDataDao.UpdateDeviceMonthDayData(year, d_Column, d_Value, deviceMonthDayData.id);
            }
            else
            {
                _DeviceMonthDataDao.InsertDeviceMonthDayData(d_Column, d_Value, deviceID, year, month);
            }
        }
Пример #5
0
        public double GetEnergy(int did, string startyyyyMMdd, string endyyyyMMdd)
        {
            //20111130    20111130
            double   returnValue = 0;
            DateTime startTime   = DateTime.Parse(startyyyyMMdd);
            DateTime endTime     = DateTime.Parse(endyyyyMMdd);
            IList <DeviceYearMonthData> dymds = new List <DeviceYearMonthData>();
            int yyyy = startTime.Year;

            while (yyyy <= endTime.Year)//计算开始到结束时间的所在年发电量
            {
                dymds.Add(DeviceYearMonthDataService.GetInstance().GetDeviceYearMonthData(did, yyyy));
                yyyy++;
            }
            //计算开始到结束时间内的所有发电量
            foreach (DeviceYearMonthData dymd in dymds)
            {
                if (dymd.year.Equals(startTime.Year) && startTime.AddMonths(1) < endTime)
                {
                    returnValue += dymd.count(startTime.Month + 1, 12);
                }
                else
                if (dymd.year.Equals(endTime.Year) && endTime.AddMonths(-1) > startTime)
                {
                    returnValue += dymd.count(1, endTime.Month - 1);
                }
                else
                if (startTime.Year.Equals(endTime.Year) == false)
                {
                    returnValue += dymd.count();
                }
            }
            DeviceMonthDayData dmdd = null;

            //计算边缘月的发电量
            if (!(startTime.Year.Equals(endTime.Year) && startTime.Month.Equals(endTime.Month)))
            {
                dmdd         = DeviceMonthDayDataService.GetInstance().GetDeviceMonthDayData(startTime.Year, did, startTime.Month);
                returnValue += dmdd.count(startTime.Day, 31);

                dmdd         = DeviceMonthDayDataService.GetInstance().GetDeviceMonthDayData(startTime.Year, did, endTime.Month);
                returnValue += dmdd.count(1, endTime.Day);
            }
            else
            {
                dmdd         = DeviceMonthDayDataService.GetInstance().GetDeviceMonthDayData(startTime.Year, did, endTime.Month);
                returnValue += dmdd.count(startTime.Day, endTime.Day);
            }
            return(returnValue);
        }
Пример #6
0
        /// <summary>
        /// 取得电站的某天的性能
        /// </summary>
        /// <param name="plant"></param>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="day"></param>
        /// <param name="dayEnergy"></param>
        /// <returns>已经转化为百分率了</returns>
        public double getDayPr(Plant plant, int year, int month, int day, double dayEnergy)
        {
            Device device = plant.getDetectorWithRenderSunshine();

            if (device == null)
            {
                return(0);
            }
            DeviceMonthDayData deviceYearmonth = DeviceMonthDayDataService.GetInstance().GetDeviceMonthDayData(year, device.id, month);
            float monthsunlingt = deviceYearmonth.getDayData(day);

            if (monthsunlingt == 0)
            {
                return(0);
            }
            float dp = plant.design_power == 0 ? 1 : plant.design_power;

            return((dayEnergy / monthsunlingt * 1000 * dp) * 100);
        }
Пример #7
0
        /// <summary>
        /// 将各个月度数据付给map
        /// </summary>
        /// <param name="monthDataMap"></param>
        /// <param name="deviceMonthData"></param>
        /// <param name="rate">每个设备的rate可能不一样,所以要单独计算</param>
        private void putMonthDayMap(Hashtable monthDataMap, DeviceMonthDayData deviceMonthData, float rate)
        {
            int month = deviceMonthData.month;
            int year  = deviceMonthData.year;

            //使用反射获得对象的号到最后一天的属性值
            int days = CalenderUtil.getMonthDays(year, month);

            for (int i = 1; i <= days; i++)
            {
                string        key = year + TableUtil.convertIntToMnthStr(month) + TableUtil.convertIntToMnthStr(i);
                System.Object obj = monthDataMap[key];

                object tmpvalue = deviceMonthData.GetType().GetProperty("d_" + i).GetValue(deviceMonthData, null);
                float  value    = tmpvalue == null ? 0 : StringUtil.stringtoFloat(tmpvalue.ToString());
                if (obj != null || tmpvalue != null)
                {
                    monthDataMap[key] = (obj == null ? 0 : StringUtil.stringtoFloat(obj.ToString())) + value * rate;
                }
            }
        }
Пример #8
0
 /// <summary>
 /// 获取电站月数据
 /// 需要传递一个Year 年份
 /// plantId 电站编号
 /// month  月份
 /// </summary>
 /// <param name="data"></param>
 /// <returns></returns>
 public DeviceMonthDayData Get(DeviceMonthDayData data)
 {
     return(_DeviceMonthDataDao.Get(data));
 }
Пример #9
0
        /// <summary>
        /// 缓存设备发电量统计
        /// 要进行修正缓存丢失
        /// </summary>
        /// <param name="tcpmessage"></param>
        private static void CacheDeviceEnergyData(IDictionary <string, double> deviceEnergyMap)
        {
            int    deviceID;
            string yearMonth;
            int    year;
            int    month;
            int    day;
            float? data;

            //string[] keys = deviceEnergyMap.Keys.ToArray();
            foreach (string ekey in deviceEnergyMap.Keys)
            {
                try
                {
                    deviceID  = int.Parse(ekey.Split(':')[0]);
                    yearMonth = ekey.Split(':')[1];
                    year      = int.Parse(yearMonth.Substring(0, 4));
                    month     = int.Parse(yearMonth.Substring(4, 2));
                    day       = int.Parse(yearMonth.Substring(6, 2));
                    data      = float.Parse(deviceEnergyMap[ekey].ToString());
                    string d_column = "d_" + day;

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

                    //更新年月发电量数据
                    //统计年月
                    string m_column             = "m_" + month;
                    float? m_value              = deviceMonthDayData.count();
                    DeviceYearMonthData ymdData = DeviceYearMonthDataService.GetInstance().GetDeviceYearMonthData(deviceID, 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);
                        }
                    }
                    DeviceYearMonthDataService.GetInstance().Cache(ymdData);

                    //统计总体发电量
                    float?         y_value = ymdData.count();
                    DeviceYearData yd      = DeviceYearDataService.GetInstance().GetDeviceYearData(deviceID, year);
                    if (yd == null)
                    {
                        yd = new DeviceYearData()
                        {
                            dataValue = 0, deviceID = deviceID, 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());
                        }
                    }
                    DeviceYearDataService.GetInstance().Cache(yd);
                }
                catch (Exception onee) {//捕获单个异常,保证一个错误不影响其他设备数据处理
                    LogUtil.error("Cache deviceEnergyMap of ekey is " + ekey + " error:" + onee.Message);
                }
            }
        }