/// <summary> /// 取得年月发电量数据,经过缓存 /// </summary> /// <param name="deviceID"></param> /// <param name="year"></param> /// <returns></returns> public DeviceYearMonthData GetDeviceYearMonthData(int deviceID, int year) { string cacheKey = CacheKeyUtil.buildDeviceEnergyYearCountKey(deviceID, year); object obj = MemcachedClientSatat.getInstance().Get(cacheKey); DeviceYearMonthData deviceYearMonthData; if (obj == null) { //从数据库中取得 deviceYearMonthData = _DeviceYearDataDao.GetDeviceYearMonthData(deviceID, year); if (deviceYearMonthData == null) //构造一个新实例 { deviceYearMonthData = new DeviceYearMonthData() { year = year, deviceID = deviceID } } ; deviceYearMonthData.localAcceptTime = DateTime.Now; MemcachedClientSatat.getInstance().Set(cacheKey, deviceYearMonthData); } else { deviceYearMonthData = (DeviceYearMonthData)obj; } return(deviceYearMonthData); }
/// <summary> /// 放入缓存 /// </summary> /// <param name="deviceYearMonthData"></param> public void Cache(DeviceYearMonthData deviceYearMonthData) { string cacheKey = CacheKeyUtil.buildDeviceEnergyYearCountKey(deviceYearMonthData.deviceID, deviceYearMonthData.year); if (!persistentListKey.Contains(cacheKey)) { persistentListKey.Add(cacheKey); } //一年3天后过期 MemcachedClientSatat.getInstance().Set(cacheKey, deviceYearMonthData, DateTime.Now.AddYears(1).AddDays(3)); }
/// <summary> /// 保存设备年月数据 /// </summary> /// <param name="d_Column"></param> /// <param name="d_Value"></param> /// <param name="deviceID"></param> /// <param name="monitorCode"></param> /// <param name="year"></param> public void SaveDeviceYearMonthData(string d_Column, double d_Value, int deviceID, int year) { DeviceYearMonthData deviceYearMonthData = GetDeviceYearMonthData(deviceID, year); if (deviceYearMonthData != null) { _DeviceYearDataDao.UpdateDeviceYearMonthData(d_Column, d_Value, deviceYearMonthData.id); } else { _DeviceYearDataDao.InsertDeviceYearMonthData(d_Column, d_Value, deviceID, year); } }
/// <summary> /// 将各个月度数据付给map /// </summary> /// <param name="monthDataMap"></param> /// <param name="inverterYearData"></param> private void putMonthMap(Hashtable monthDataMap, DeviceYearMonthData yearData, float rate) { string yyyy = yearData.year.ToString(); for (int i = 1; i <= 12; i++) { string key = yyyy + TableUtil.convertIntToMnthStr(i); System.Object obj = monthDataMap[key]; object tmpvalue = yearData.GetType().GetProperty("m_" + i).GetValue(yearData, 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; } } }
/// <summary> /// 取得电站的某月的性能 /// </summary> /// <param name="plant"></param> /// <param name="year"></param> /// <param name="month"></param> /// <param name="monthEnergy"></param> /// <returns>已经转化为百分率了</returns> public double getMonthPr(Plant plant, int year, int month, double monthEnergy) { Device device = plant.getDetectorWithRenderSunshine(); if (device == null) { return(0); } DeviceYearMonthData deviceYearmonth = DeviceYearMonthDataService.GetInstance().GetDeviceYearMonthData(device.id, year); float monthsunlingt = deviceYearmonth.getMonthData(month); if (monthsunlingt == 0) { return(0); } float dp = plant.design_power == 0 ? 1 : plant.design_power; return(monthEnergy / monthsunlingt * 1000 * dp); }
/// <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); } } }