/// <summary> /// 取得采集器的年月数据对象,经过缓存 /// </summary> /// <param name="collectorID"></param> /// <param name="year"></param> /// <returns></returns> public CollectorYearMonthData GetCollectorYearMonthData(int collectorID, int year) { string cacheKey = CacheKeyUtil.buildCollectorEnergyYearCountKey(collectorID, year); object obj = MemcachedClientSatat.getInstance().Get(cacheKey); CollectorYearMonthData deviceYearMonthData; if (obj == null) { //从数据库中取得 deviceYearMonthData = _plantYearDataDao.GetCollectorYearMonthData(collectorID, year); if (deviceYearMonthData == null) //构造一个新实例 { deviceYearMonthData = new CollectorYearMonthData() { year = year, collectorID = collectorID } } ; deviceYearMonthData.localAcceptTime = DateTime.Now; MemcachedClientSatat.getInstance().Set(cacheKey, deviceYearMonthData); } else { deviceYearMonthData = (CollectorYearMonthData)obj; } return(deviceYearMonthData); }
/// <summary> /// 放入缓存 /// </summary> /// <param name="collectorYearMonthData"></param> public void Cache(CollectorYearMonthData collectorYearMonthData) { string cacheKey = CacheKeyUtil.buildCollectorEnergyYearCountKey(collectorYearMonthData.collectorID, collectorYearMonthData.year); if (!persistentListKey.Contains(cacheKey)) { persistentListKey.Add(cacheKey); } //一年3天后过期 MemcachedClientSatat.getInstance().Set(cacheKey, collectorYearMonthData, 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 SaveCollectorYearMonthData(string d_Column, float d_Value, int collectorID, int year) { CollectorYearMonthData deviceYearMonthData = GetCollectorYearMonthData(collectorID, year); if (deviceYearMonthData != null) { _plantYearDataDao.UpdateCollectorYearMonthData(d_Column, d_Value, deviceYearMonthData.id); } else { _plantYearDataDao.InsertCollectorYearMonthData(d_Column, d_Value, collectorID, year); } }
/// <summary> /// 将各个月度数据付给map /// </summary> /// <param name="monthDataMap"></param> /// <param name="unitYearData"></param> private void putMonthMap(Hashtable monthDataMap, CollectorYearMonthData yearData) { 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; } } }
/// <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); } } }
/// <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); } } }