/// <summary> /// 取得某个设备跨小时的某测点图表 /// </summary> /// <param name="pid"></param> /// <param name="startYYYYMMDD"></param> /// <param name="endYYYYMMDD"></param> /// <returns></returns> public ActionResult MonitorDayChart(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, int monitorCode, string lan) { setlan(lan); if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Device device = DeviceService.GetInstance().get(dId); //获得报表js代码 MonitorType energyMt = MonitorType.getMonitorTypeByCode(monitorCode); string unit = energyMt.unit; string chartName = device.fullName + " " + LanguageUtil.getDesc("CHART_DAY_CHART"); string reportData = string.Empty; if (device != null) { Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = DeviceChartService.GetInstance().DayChart(device, chartName, startYYYYMMDDHH, endYYYYMMDDHH, chartType, unit, monitorCode, intervalTime); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.devicenoexist, Resources.SunResource.CHART_DEVICE_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 设备的年月统计图表 /// </summary> /// <param name="device"></param> /// <param name="rate"></param> /// <param name="chartname"></param> /// <param name="startYearMM"></param> /// <param name="endYearMM"></param> /// <param name="chartType"></param> /// <param name="unit"></param> /// <returns></returns> public ChartData YearMMChartByDevice(Device device, float rate, string chartname, string startYearMM, string endYearMM, string chartType, string unit) { if (device == null) { return(new ChartData()); } string name = LanguageUtil.getDesc("CHART_TITLE_YEAR_ENERGY"); int startYear = int.Parse(startYearMM.Substring(0, 4)); int endYear = int.Parse(endYearMM.Substring(0, 4)); Hashtable yearMonthEnergy = DeviceYearMonthDataService.GetInstance().GetDeviceBetweenYearData(device, startYear, endYear); string[] ic = base.getXseriesFromYYYYMM(startYearMM, endYearMM).ToArray(); string[] xAxis = formatXaxis(ic, ChartTimeType.YearMonth); string yname = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE).name; KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (yearMonthEnergy.Count > 0) { data = GenerateChartData(yname, ic, yearMonthEnergy, rate); } return(ReportBuilder.createJsonChartXY(name, xAxis, data, "", unit, chartType, fromApp)); }
/// <summary> /// 比较一个设备的多个测点的日数据 /// </summary> /// <param name="dId"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="monitorCodes">多个测点之间用逗号分隔</param> /// <returns></returns> public ActionResult CompareDayByMonitor(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string monitorCodes, int intervalMins) { string reportCode = string.Empty; Device device = DeviceService.GetInstance().get(dId); IList <MonitorType> monitorTypes = new List <MonitorType>(); string[] monitorArr = monitorCodes.Split(','); IList <DeviceStuct> devices = new List <DeviceStuct>(); string[] chartTypes = chartType.Split(','); string chartName = string.Empty; for (int i = 0; i < monitorArr.Length; i++) { MonitorType monitorType = MonitorType.getMonitorTypeByCode(int.Parse(monitorArr[i])); devices.Add(new DeviceStuct() { deviceId = dId.ToString(), rate = 1.0F, comareObj = device.fullName, chartType = chartTypes[i], monitorType = monitorType, cVal = ComputeType.Avg, deviceType = ChartDeviceType.DEVICE, intervalMins = intervalMins }); chartName += monitorType.name + "&"; } chartName = chartName.Length > 1 ? chartName.Substring(0, chartName.Length - 1) : chartName; if (device != null) { // string chartName = LanguageUtil.getDesc("CHART_DAY_CHART"); ChartData chartData = CompareChartService.GetInstance().compareDayHHMultiDeviceMultiMonitor(chartName, devices, startYYYYMMDDHH, endYYYYMMDDHH, intervalMins); reportCode = JsonUtil.convertToJson(chartData, typeof(ChartData)); } return(Content(reportCode)); }
/// <summary> /// 单个设备的年月发电量图表数据 /// </summary> /// <param name="userId">用户id</param> /// <param name="startYM">开始年月</param> /// <param name="endYM">截止年月</param> /// <param name="chartType">图表类型</param> /// <returns></returns> public ActionResult DeviceYearMMChart(int dId, string startYM, string endYM, string chartType, string lan) { setlan(lan); string reportData = string.Empty; if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Device device = DeviceService.GetInstance().get(dId); if (device != null) { MonitorType energyMt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); string unit = energyMt.unit; //取得用户年度发电量图表数据 Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = DeviceChartService.GetInstance().YearMMChartByDevice(device, 1.0F, string.Format(LanguageUtil.getDesc("DEVICEYEAR_CHART_NAME"), device.fullName), startYM, endYM, chartType, unit); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.devicenoexist, Resources.SunResource.CHART_DEVICE_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
public ActionResult PlantData(int plantId) { Plant plant = PlantService.GetInstance().GetPlantInfoById(plantId); Cn.Loosoft.Zhisou.SunPower.Common.vo.PlantVO plantVO = new Cn.Loosoft.Zhisou.SunPower.Common.vo.PlantVO(); User user = UserService.GetInstance().Get((int)plant.userID); plantVO.plantName = plant.name; plantVO.CQ2reduce = plant.Reductiong.ToString(); plantVO.CQ2reduceUnit = plant.ReductiongUnit; plantVO.curPower = plant.DisplayTodayTotalPower; plantVO.curPowerUnit = plant.TodayTotalPowerUnit; plantVO.dayEnergy = plant.DisplayTotalDayEnergy; plantVO.dayEnergyUnit = plant.TotalDayEnergyUnit; plantVO.solarIntensity = plant.Sunstrength == null ? "" : plant.Sunstrength.ToString(); plantVO.solarIntensityUnit = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_LINGT_CODE).unit; //add by qhb in 20120106 for 增加逆变器数量 IList <Device> inverterDevices = plant.typeDevices(DeviceData.INVERTER_CODE); plantVO.inverterCount = inverterDevices.Count.ToString(); plantVO.inverterTypeStr = getMainType(inverterDevices, 3); plantVO.installDate = plant.installdate.ToString("yyyy-MM-dd"); plantVO.DesignPower = plant.design_power + " kWp"; plantVO.Country = plant.country; plantVO.City = plant.city; plantVO.organize = user.organize; plantVO.totalEnergy = plant.DisplayTotalEnergy; plantVO.totalEnergyUnit = plant.TotalEnergyUnit; plantVO.imageArray = "http://" + Request.Url.Authority + (string.IsNullOrEmpty(plant.onePic) ? "/bigscreen/images/plant_img.jpg":"/ufile/" + plant.onePic); plantVO.temprature = getPlantTemp(plant).ToString(); plantVO.tempratureUnit = user.TemperatureType.ToUpper(); return(Json(plantVO, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 取得汇流箱传感器路数 /// </summary> /// <param name="rundatas"></param> /// <returns></returns> public int getHlxroute(string[] rundatas) { string[] datas = null; int displayHxlroute = 0; foreach (string data in rundatas) { datas = data.Split(':'); int monitorCode = int.Parse(datas[0]); MonitorType mt = MonitorType.getMonitorTypeByCode(monitorCode); if (mt == null) { continue; } //判断是否接入路数测点 if (monitorCode == MonitorType.MIC_BUSBAR_MAXLINE) { try { int value = int.Parse(datas[1]); if (value == 0) { value = 16; } displayHxlroute = DeviceData.HUILIUXIANG_CODE * 100 + value; } catch (Exception e) { break; } break; } } return(displayHxlroute); }
/// <summary> /// 逆变器设备的月天数据 /// </summary> /// <param name="pid"></param> /// <param name="startYYYYMMDD"></param> /// <param name="endYYYYMMDD"></param> /// <param name="chartType"></param> /// <returns></returns> public ActionResult DeviceMonthDayChart(int dId, string startYYYYMMDD, string endYYYYMMDD, string chartType, string lan) { setlan(lan); if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Device device = DeviceService.GetInstance().get(dId); string reportData = string.Empty; if (device != null) { MonitorType energyMt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_INVERTER_TODAYENERGY); string unit = energyMt.unit; Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = DeviceChartService.GetInstance().MonthDDChartByDevice(device, 1.0F, string.Format(LanguageUtil.getDesc("DEVICEMONTHCHART_NAME"), device.fullName), startYYYYMMDD, endYYYYMMDD, chartType, unit); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.devicenoexist, Resources.SunResource.CHART_DEVICE_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 设备的月天统计图表 /// </summary> /// <param name="device"></param> /// <param name="rate"></param> /// <param name="chartname"></param> /// <param name="startYearMMDD"></param> /// <param name="endYearMMDD"></param> /// <param name="chartType"></param> /// <param name="unit"></param> /// <returns></returns> public ChartData MonthDDChartByDevice(Device device, float rate, string chartname, string startYearMMDD, string endYearMMDD, string chartType, string unit) { if (device == null) { return(new ChartData()); } string name = LanguageUtil.getDesc("CHART_TITLE_MONTH_ENERGY"); string startYearMM = startYearMMDD.Substring(0, 6); string endYearMM = endYearMMDD.Substring(0, 6); Hashtable monthDDEnergy = DeviceMonthDayDataService.GetInstance().DeviceYearMMDDList(device, startYearMM, endYearMM); string[] ic = base.getXseriesFromYYYYMMDD(startYearMMDD, endYearMMDD).ToArray(); string[] xAxis = formatXaxis(ic, ChartTimeType.MonthDay); string xname = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE).name; KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (monthDDEnergy.Count > 0) { data = GenerateChartData(xname, ic, monthDDEnergy, rate); } return(ReportBuilder.createJsonChartXY(name, xAxis, data, "", unit, chartType, fromApp)); }
/// <summary> /// 作者:鄢睿 /// 功能:通过电站列表获得跨月度图表数据 /// 创建时间:2011年02月25日 /// 修改:胡圣忠 /// </summary> /// <param name="plantList">电站列表</param> /// <param name="rate">数据换算系数</param> /// <returns></returns> public ChartData YearMMChartBypList(IList <Plant> plantList, float rate, string chartname, string newserieKey, string startYearMM, string endYearMM, string chartType, string unit) { if (plantList == null) { return(new ChartData()); } ///所有子站累加 IList <PlantUnit> units = this.getUnitsByPlantList(plantList); int startYear = int.Parse(startYearMM.Substring(0, 4)); int endYear = int.Parse(endYearMM.Substring(0, 4)); Hashtable yearMonthEnergy = CollectorYearMonthDataService.GetInstance().GetUnitBetweenYearData(units, startYear, endYear); string[] ic = base.getXseriesFromYYYYMM(startYearMM, endYearMM).ToArray(); string[] xAxis = formatXaxis(ic, ChartTimeType.YearMonth); MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (yearMonthEnergy.Count > 0) { if (newserieKey == null) { data = GenerateChartData(mt.name, ic, yearMonthEnergy, rate); } else { data = GenerateChartData(newserieKey, ic, yearMonthEnergy, rate); } } string comobj = "";//plantList.Count > 1 ? "" : plantList[0].name; return(ReportBuilder.createJsonChartXY(chartname, xAxis, data, "", unit, chartType, comobj, fromApp)); }
/// <summary> /// 作者:鄢睿 /// 功能:通过电站列表获得电站总量图表数据 /// 创建时间:2011年02月25日 /// 修改:胡圣忠 /// </summary> /// <param name="plantList">电站列表</param> /// <param name="rate">数据换算系数</param> /// <returns></returns> public ChartData YearChartBypList(IList <Plant> plantList, float rate, string chartname, string newserieKey, string chartType, string unit) { if (plantList == null) { return(new ChartData()); } //所有子站累加 Hashtable yearEnergy = CollectorYearDataService.GetInstance().GetYearDatasByUnits(this.getUnitsByPlantList(plantList)); string[] ic = sortCollection(yearEnergy.Keys); string[] newic = null; int len = 5; int skip = len - ic.Length; int left = (int)skip / 2; int right = 5 - ic.Length - left; if (ic.Length < len) { newic = new string[len]; len = 0; int startYear = ic.Length == 0 ? DateTime.Now.Year : int.Parse(ic[0]); int endYear = ic.Length == 0 ? DateTime.Now.Year : int.Parse(ic[ic.Length - 1]); while (left > 0) { newic[len++] = (startYear - (left--)).ToString(); } foreach (string s in ic) { newic[len++] = s; } for (int i = 1; i <= right; i++) { newic[len++] = (endYear + (i)).ToString(); } } else { newic = ic; } string[] xAxis = formatXaxis(newic, ChartTimeType.Year); MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (yearEnergy.Count > 0) { if (newserieKey == null) { data = GenerateChartData(mt.name, newic, yearEnergy, rate); } else { data = GenerateChartData(newserieKey, newic, yearEnergy, rate); } } string comobj = "";//plantList.Count > 1 ? "" : plantList[0].name; return(ReportBuilder.createJsonChartXY(chartname, xAxis, data, "", unit, chartType, comobj, fromApp)); }
/// <summary> /// 单元下多个汇流箱日总电流对比 /// </summary> /// <param name="uId"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="intervalMins"></param> /// <returns></returns> public ActionResult CompareDayCurrentChartByUnit(int uId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, int intervalMins) { string reportCode = string.Empty; PlantUnit unit = PlantUnitService.GetInstance().GetPlantUnitById(uId); IList <Device> deviceList = unit.typeDevices(DeviceData.HUILIUXIANG_CODE, false); MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_BUSBAR_TOTALCURRENT); if (deviceList != null && deviceList.Count > 0) { IList <DeviceStuct> devices = new List <DeviceStuct>(); foreach (Device device in deviceList) { float rate = 1.0F; devices.Add(new DeviceStuct() { deviceId = device.id.ToString(), rate = rate, name = device.fullName, unit = mt.unit, chartType = chartType, monitorType = mt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.DEVICE, intervalMins = intervalMins }); } string chartName = LanguageUtil.getDesc("DEVICE_DAY_TOTALCURRENT_COMPARE"); //取得用户年度发电量图表数据 ChartData chartData = CompareChartService.GetInstance().compareDayHHMultiDeviceMultiMonitor(chartName, devices, startYYYYMMDDHH, endYYYYMMDDHH, intervalMins, ComputeType.Avg); reportCode = JsonUtil.convertToJson(chartData, typeof(ChartData)); } else { reportCode = "error:" + Resources.SunResource.NODATA; } return(Content(reportCode)); }
/// <summary> /// 取得用户所有电站跨小时的功率图表 /// </summary> /// <param name="userId"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <returns></returns> public ActionResult AllPlantDayChart(int userId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string lan) { setlan(lan); if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } User user = UserService.GetInstance().Get(userId); //获得报表业务逻辑类 PlantChartService reportService = PlantChartService.GetInstance(); //获得报表js代码 int monitorCode = MonitorType.PLANT_MONITORITEM_POWER_CODE;//发电量测点 MonitorType Mt = MonitorType.getMonitorTypeByCode(monitorCode); string unit = Mt.unit; string chartName = LanguageUtil.getDesc("CHART_DAY_POWER_CHART"); string reportData = string.Empty; if (user != null && user.plants != null) { Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = reportService.PlantDayChart(user.plants, chartName, startYYYYMMDDHH, endYYYYMMDDHH, chartType, unit, monitorCode, intervalTime); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.useridnoexist, Resources.SunResource.CHART_USER_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 电站的月天数据 /// </summary> /// <param name="pid"></param> /// <param name="startYYYYMMDD"></param> /// <param name="endYYYYMMDD"></param> /// <param name="chartType"></param> /// <returns></returns> public ActionResult PlantMonthDayChart(int pid, string startYYYYMMDD, string endYYYYMMDD, string chartType, string lan) { setlan(lan); if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Plant plant = PlantService.GetInstance().GetPlantInfoById(pid); string reportData = string.Empty; if (plant != null) { MonitorType energyMt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); string unit = energyMt.unit; Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = PlantChartService.GetInstance().MMDDChartBypList(new List <Plant> { plant }, startYYYYMMDD, endYYYYMMDD, chartType, unit); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.plantnoexist, Resources.SunResource.CHART_PLANT_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 用户所有电站的年度发电量图表数据 /// </summary> /// <param name="userId"></param> /// <param name="chartType"></param> /// <returns></returns> public ActionResult AllPlantYearChart(int userId, string chartType, string lan) { setlan(lan); string reportData = string.Empty; if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } User user = UserService.GetInstance().Get(userId); if (user != null && user.plants != null) { MonitorType energyMt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); string unit = energyMt.unit; Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = PlantChartService.GetInstance().YearChartBypList(user.plants, chartType, unit); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.useridnoexist, Resources.SunResource.CHART_USER_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 取得电站详细信息 /// </summary> /// <param name="pid"></param> /// <returns></returns> public ActionResult Plantinfo(int pid, string lan) { setlan(lan); string data; Plant plant = PlantService.GetInstance().GetPlantInfoById(pid); if (plant == null) { AppError appError = new AppError(AppError.plantnoexist, Resources.SunResource.CHART_PLANT_DONT_EXISTED); data = JsonUtil.convertToJson(appError, typeof(AppError)); } else { User user = UserService.GetInstance().Get((int)plant.userID); MonitorType energyMt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); MonitorType powerMt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_POWER_CODE); PlantInfoVO plantvo = new PlantInfoVO(); plantvo.totalEnergy = plant.upTotalEnergy; plantvo.todayEnergy = plant.upTotalDayEnergy; plantvo.pId = plant.id; plantvo.name = plant.name; plantvo.co2Reduction = plant.Reductiong; plantvo.revenue = user.revenue * plantvo.totalEnergy; plantvo.designPower = Math.Round(plant.design_power, 2); plantvo.powerUnit = "KWp"; plantvo.revenueUnit = plant.currencies; plantvo.totalEnergyUnit = plant.TotalEnergyUnit; plantvo.todayEnergyUnit = plant.TotalDayEnergyUnit; plantvo.co2ReductionUnit = plant.ReductiongUnit; plantvo.pic = base.getCurWebContext() + "/ufile/small/" + plant.onePic; plantvo.country = plant.country; plantvo.city = plant.city; plantvo.direction = plant.direction; plantvo.installdate = plant.installdate.ToString("yyyy-MM-dd"); plantvo.angle = plant.angle; plantvo.latitude = plant.latitudeString; plantvo.location = plant.location; plantvo.longitude = plant.longitudeString; plantvo.street = plant.street; plantvo.sunlight = plant.Sunstrength.ToString(); plantvo.temperature = plant.Temperature.ToString(); plantvo.weather = "Sundy"; plantvo.moduleType = plant.module_type; plantvo.email = plant.email; plantvo.manufacturer = plant.manufacturer; plantvo.operatorPerson = plant.operater; plantvo.phone = plant.phone; plantvo.revenueRate = Math.Round(plant.revenueRate, 2).ToString(); plantvo.timeZone = Cn.Loosoft.Zhisou.SunPower.Common.TimeZone.GetText(plant.timezone); plantvo.zipCode = plant.postcode; data = JsonUtil.convertToJson(plantvo, typeof(PlantInfoVO)); } return(Content(data)); }
/// <summary> /// 取得多个电站的pr性能图表数据 /// </summary> /// <param name="plantList"></param> /// <param name="chartname"></param> /// <param name="newseriekey"></param> /// <param name="startYearMMDD"></param> /// <param name="endYearMMDD"></param> /// <param name="chartType"></param> /// <param name="unit"></param> /// <returns></returns> public ChartData MonthDDRPChartBypList(Device invertDevice, Device detectorDevice, string chartName, string startYearMMDD, string endYearMMDD, string chartType) { if (invertDevice == null) { return(new ChartData()); } MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); IList <string> chartTypes = new List <string>(); //图表类型 IList <string> units = new List <string>(); //单位 IList <string> ynames = new List <string>(); //y轴名称 //IList<string> compareObjs = null; //图例比较对象,因为是同一个电站,不追加 chartTypes.Add(chartType); chartTypes.Add(chartType); ynames.Add(mt.name); ynames.Add(mt.name); //产生坐标 string[] ic = base.getXseriesFromYYYYMMDD(startYearMMDD, endYearMMDD).ToArray(); string[] xAxis = formatXaxis(ic, ChartTimeType.MonthDay); float rate = 1.0F; string newseriekey; //取得多个采集器的实际发电量 Hashtable monthDDEnergy = DeviceMonthDayDataService.GetInstance().DeviceYearMMDDList(invertDevice, startYearMMDD, endYearMMDD); units.Add(mt.unit); units.Add(mt.unit); IList <KeyValuePair <string, float?[]> > datas = new List <KeyValuePair <string, float?[]> >(); KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (monthDDEnergy.Count > 0) { newseriekey = LanguageUtil.getDesc("ACTUALENERGY"); data = GenerateChartData(newseriekey, ic, monthDDEnergy, rate); } //string comobj = "";//plantList.Count > 1 ? "" : plantList[0].name; datas.Add(data); //取得日照增量强度,并依次计算理论发电量 rate = this.getEnergyRate(invertDevice.designPower); monthDDEnergy = DeviceMonthDayDataService.GetInstance().DeviceYearMMDDList(detectorDevice, startYearMMDD, endYearMMDD); newseriekey = LanguageUtil.getDesc("THEORYENERGY"); data = GenerateChartData(newseriekey, ic, monthDDEnergy, rate); datas.Add(data); float?[] newDataArr = computeByType(xAxis.ToArray(), datas, ComputeType.Ratio); KeyValuePair <string, float?[]> newdata = new KeyValuePair <string, float?[]>("PR", newDataArr); datas.Add(newdata); chartTypes.Add(ChartType.line); units.Add("%"); ynames.Add("PR"); return(ReportBuilder.createMultiJsonChartXY(chartName, xAxis, datas, ynames.ToArray(), chartTypes.ToArray(), units.ToArray(), fromApp)); }
/// <summary> /// 设备年度统计图表 /// </summary> /// <param name="device"></param> /// <param name="rate"></param> /// <param name="chartname"></param> /// <param name="chartType"></param> /// <param name="unit"></param> /// <returns></returns> public ChartData YearChartByDevice(Device device, float rate, string chartname, string chartType, string unit) { if (device == null) { return(new ChartData()); } string chartName = LanguageUtil.getDesc("CHART_TITLE_TOTAL_ENERGY"); ///所有子站累加 Hashtable yearEnergy = DeviceYearDataService.GetInstance().GetTotalDatasByDevice(device); string[] ic = sortCollection(yearEnergy.Keys); string[] newic = null; int len = 5; int skip = len - ic.Length; int left = (int)skip / 2; int right = 5 - ic.Length - left; if (ic.Length < len) { newic = new string[len]; len = 0; int startYear = ic.Length == 0 ? DateTime.Now.Year : int.Parse(ic[0]); int endYear = ic.Length == 0 ? DateTime.Now.Year : int.Parse(ic[ic.Length - 1]); while (left > 0) { newic[len++] = (startYear - (left--)).ToString(); } foreach (string s in ic) { newic[len++] = s; } for (int i = 1; i <= right; i++) { newic[len++] = (endYear + (i)).ToString(); } } else { newic = ic; } string[] xAxis = formatXaxis(newic, ChartTimeType.Year); string yname = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE).name; KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (yearEnergy.Count > 0) { data = GenerateChartData(yname, newic, yearEnergy, rate); } return(ReportBuilder.createJsonChartXY(chartName, xAxis, data, "", unit, chartType, fromApp)); }
/// <summary> /// 电站日功率和关照对比 /// </summary> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="intervalMins"></param> /// <returns></returns> private ActionResult CompareDayChartWithSun(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string intervalMins) { string reportCode = string.Empty; Device device = DeviceService.GetInstance().get(dId); if (device != null) { string[] intervals = intervalMins.Split(','); string[] chartTypes = chartType.Split(','); IList <DeviceStuct> devices = new List <DeviceStuct>(); float rate = 1.0F; MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_INVERTER_TOTALYGPOWER); devices.Add(new DeviceStuct() { deviceId = device.id.ToString(), rate = rate, comareObj = device.fullName, name = "", unit = "", chartType = chartTypes[0], monitorType = mt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.DEVICE, intervalMins = int.Parse(intervals[0]) }); //判断该测点是否有数据,有数据则增加关照对比 Hashtable dataHash = DeviceDayDataService.GetInstance().GetDaydataList(device, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0]), mt.code); string chartName = LanguageUtil.getDesc("DAY_COMPARE_CHART_NAME_POWER"); if (dataHash.Count > 0) { //Collector collector = CollectorInfoService.GetInstance().Get(device.collectorID); PlantUnit pu = PlantUnitService.GetInstance().GetPlantUnitByCollectorId(device.collectorID); Plant plant = PlantService.GetInstance().GetPlantInfoById(pu.plantID); Device sundevice = plant.getFirstDetector(); if (sundevice != null) { dataHash = DeviceDayDataService.GetInstance().GetDaydataList(null, sundevice, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[1]), MonitorType.MIC_DETECTOR_SUNLINGHT); if (dataHash.Keys.Count > 0) //有日照数据 { chartName = LanguageUtil.getDesc("DAY_COMPARE_CHART_NAME"); rate = 1F; MonitorType smt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_DETECTOR_SUNLINGHT); devices.Add(new DeviceStuct() { deviceId = sundevice.id.ToString(), rate = rate, comareObj = device.fullName, name = smt.name, unit = "", chartType = chartTypes[1], monitorType = smt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.DEVICE, intervalMins = int.Parse(intervals[1]) }); } } } else { return(Content("error:" + Resources.SunResource.NODATA)); } //取得用户年度发电量图表数据 ChartData chartData = CompareChartService.GetInstance().compareDayHHMultiDeviceMultiMonitor(chartName, devices, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0])); reportCode = JsonUtil.convertToJson(chartData, typeof(ChartData)); } return(Content(reportCode)); }
/// <summary> /// 取得某个设备跨小时的功率图表 /// </summary> /// <param name="pid"></param> /// <param name="startYYYYMMDD"></param> /// <param name="endYYYYMMDD"></param> /// <returns></returns> public ActionResult DeviceDayChart(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string lan) { setlan(lan); if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Device device = DeviceService.GetInstance().get(dId); int monitorCode = MonitorType.MIC_INVERTER_TOTALYGPOWER;//功率 switch (device.deviceTypeCode) { case DeviceData.HUILIUXIANG_CODE: monitorCode = MonitorType.MIC_BUSBAR_TOTALCURRENT; break; case DeviceData.CABINET_CODE: monitorCode = MonitorType.MIC_BUSBAR_TOTALCURRENT; break; case DeviceData.ENVRIOMENTMONITOR_CODE: monitorCode = MonitorType.MIC_DETECTOR_SUNLINGHT; break; case DeviceData.AMMETER_CODE: monitorCode = MonitorType.MIC_AMMETER_POSITIVEACTIVEPOWERDEGREE; break; default: monitorCode = MonitorType.MIC_INVERTER_TOTALYGPOWER; //功率 break; } MonitorType Mt = MonitorType.getMonitorTypeByCode(monitorCode); string unit = Mt.unit; string chartName = device.fullName + " " + LanguageUtil.getDesc("CHART_DAY_CHART"); string reportData = string.Empty; if (device != null) { Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = DeviceChartService.GetInstance().DayChart(device, chartName, startYYYYMMDDHH, endYYYYMMDDHH, chartType, unit, monitorCode, intervalTime); reportData = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } else { AppError appError = new AppError(AppError.devicenoexist, Resources.SunResource.CHART_DEVICE_DONT_EXISTED); reportData = JsonUtil.convertToJson(appError, typeof(AppError)); } return(Content(reportData)); }
/// <summary> /// 电站日kwp发电量对比 /// </summary> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="intervalMins"></param> /// <returns></returns> public ActionResult CompareDaykWpChart(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string intervalMins) { string reportCode = string.Empty; Device device = DeviceService.GetInstance().get(dId); if (device != null) { string[] intervals = intervalMins.Split(','); string[] chartTypes = chartType.Split(','); IList <DeviceStuct> devices = new List <DeviceStuct>(); float rate = 1 / device.chartPower; MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_INVERTER_TODAYENERGY); devices.Add(new DeviceStuct() { deviceId = device.id.ToString(), rate = rate, comareObj = device.fullName, name = "kWp" + mt.name, unit = "kWh/kWp", chartType = chartTypes[0], monitorType = mt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.DEVICE, intervalMins = int.Parse(intervals[0]) }); //判断改测点是否有数据 Hashtable dataHash = DeviceDayDataService.GetInstance().GetDaydataList(device, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0]), mt.code); if (dataHash.Count > 0) { rate = 1F; MonitorType smt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_LINGT_CODE); devices.Add(new DeviceStuct() { deviceId = device.collectorID.ToString(), rate = rate, comareObj = device.fullName, name = smt.name, unit = "", chartType = chartTypes[1], monitorType = smt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.COLLECTOR, intervalMins = int.Parse(intervals[1]) }); } else { return(Content("error:" + Resources.SunResource.NODATA)); } string chartName = LanguageUtil.getDesc("INVEST_INCOME_COMPARE_CHART"); //取得用户年度发电量图表数据 ChartData chartData = CompareChartService.GetInstance().compareDayHHMultiDeviceMultiMonitor(chartName, devices, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0])); //add by hbqian in 20130418 for过滤大于1的值 //又出现大于1的没有过滤 foreach (YData ydata in chartData.series) { for (int i = 0; i < ydata.data.Length; i++) { if (ydata.data[i] >= 1) { ydata.data[i] = null; } } } reportCode = JsonUtil.convertToJson(chartData, typeof(ChartData)); } return(Content(reportCode)); }
/// <summary> /// 日功率和日照散列图 /// 此类型图表和其他取数方式有点不一样,其他都是多位测点数据公用一个时间坐标 /// 这个是两个测点先按照同样的时间间隔取得数据后(同样的时间间隔取数是为了保证取得数据数组长度一致,能最终合并成对应的散列点) /// 将日照作为x轴,功率作为y轴数据,生成散列图表数据 /// add by hbqian in 2013-03-23 for 生成设备功率和日照散列图 /// </summary> /// <param name="pid"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType">只能有一个,其实是固定为scatter类型的</param> /// <param name="intervalMins">只能有一个</param> /// <returns></returns> public ActionResult PowerSunScatterCompare(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string intervalMins) { string reportCode = string.Empty; Device device = DeviceService.GetInstance().get(dId); string[] intervals = intervalMins.Split(','); if (device != null) { //判断该测点是否有数据,有数据则增加关照对比 Hashtable powerDataHash = DeviceDayDataService.GetInstance().GetDaydataList(device, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0]), MonitorType.MIC_INVERTER_TOTALYGPOWER); if (powerDataHash.Count > 0 && device.plantUnit != null) { string chartName = LanguageUtil.getDesc("PLANT_CHART_DAY_POWER_SUNLIGHT_COMPARE_CHART") + "(" + LanguageUtil.getDesc("CUSTOM_CHART_MONTH") + ")"; Plant plant = PlantService.GetInstance().GetPlantInfoById(device.plantUnit.plantID); Device sundevice = plant.getFirstDetector(); //设备所属电站是否有环境检测仪 if (sundevice != null) { //取得日照数据 Hashtable sunDataHash = DeviceDayDataService.GetInstance().GetDaydataList(null, sundevice, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0]), MonitorType.MIC_DETECTOR_SUNLINGHT); if (sunDataHash.Keys.Count > 0)//有日照数据,则合并数据,将日照作为x,功率作为y,形成新的x.y散列点 { MonitorType smt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_DETECTOR_SUNLINGHT); MonitorType pmt = MonitorType.getMonitorTypeByCode(MonitorType.MIC_INVERTER_TOTALYGPOWER); ChartData chartData = DeviceChartService.GetInstance().genNewScatter(smt, pmt, chartName, startYYYYMMDDHH, endYYYYMMDDHH, int.Parse(intervals[0]), sunDataHash, powerDataHash, "kW", chartType); reportCode = JsonUtil.convertToJson(chartData, typeof(ChartData)); } else { //没有日照无法生成散列点则,返回无数据提示 return(Content("error:" + Resources.SunResource.NODATA)); } } else { return(Content("error:" + Resources.SunResource.NODATA)); } } else { return(Content("error:" + Resources.SunResource.NODATA)); } } else { return(Content("error:" + Resources.SunResource.NODATA)); } return(Content(reportCode)); }
/// <summary> /// 作者:鄢睿 /// 功能:通过电站列表获得跨天度图表数据 /// 创建时间:2011年02月25日 /// 修改:胡圣忠 /// </summary> /// <param name="plantList"></param> /// <param name="rate"></param> /// <param name="chartname"></param> /// <param name="startYearMM"></param> /// <param name="endYearMM"></param> /// <returns></returns> public ChartData MonthDDChartBypList(IList <Plant> plantList, float rate, string chartname, string newseriekey, string startYearMMDD, string endYearMMDD, string chartType, string unit) { if (plantList == null) { return(new ChartData()); } ///所有子站累加 IList <PlantUnit> units = this.getUnitsByPlantList(plantList); Hashtable monthDDEnergy = CollectorMonthDayDataService.GetInstance().GetUnitBetweenMonthData(units, startYearMMDD, endYearMMDD); string[] ic = base.getXseriesFromYYYYMMDD(startYearMMDD, endYearMMDD).ToArray(); string[] xAxis; string[] years = getYearMonths(startYearMMDD, endYearMMDD); if (years.Length > 1) { //chartname = "from " + years[0] + " to " + years[1] + " " + chartname; xAxis = formatXaxis(ic, ChartTimeType.YearMonthDay); } else { //chartname = years[0] + " " + chartname; xAxis = formatXaxis(ic, ChartTimeType.MonthDay); } MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (monthDDEnergy.Count > 0) { if (newseriekey == null) { data = GenerateChartData(mt.name, ic, monthDDEnergy, rate); } else { data = GenerateChartData(newseriekey, ic, monthDDEnergy, rate); } } string comobj = "";//plantList.Count > 1 ? "" : plantList[0].name; return(ReportBuilder.createJsonChartXY(chartname, xAxis, data, "", unit, chartType, comobj, fromApp)); }
/// <summary> /// 取得测点值和单位串,无测点数据为-- /// </summary> /// <param name="mtcode"></param> /// <returns></returns> public string getMonitor(int mtcode) { if (runData == null) { return("-"); } string value = runData.getMonitorValueWithStatus(mtcode); if (!runData.hasMonitor(mtcode)) { value = "-"; } if (value.Equals("-")) { return(value); } return(value + " " + MonitorType.getMonitorTypeByCode(mtcode).unit); }
/// <summary> /// 取得电站的日图表数据 /// </summary> /// <param name="pId">电站id</param> /// <param name="startTime">开始时间,格式:yyyyMMddhh 2011111105</param> /// <param name="endTime">截止时间,格式:yyyyMMddhh 2011111223</param> /// <param name="app_key">第三方应用唯一key</param> /// <param name="call_id">请求序号</param> /// <param name="sig">签名</param> /// <param name="v">api版本</param> /// <param name="format">返回结果格式,暂时值支持json</param> /// <param name="lan">语言环境,暂时只支持中英文</param> /// <returns>图表封装的数据</returns> public ActionResult plantDayChartData(int pId, string startDate, string endDate, string app_key, string call_id, string sig, string v, string format, string lan) { setlan(lan); string chartType = ChartType.column; string reportCode = string.Empty; Plant plant = PlantService.GetInstance().GetPlantInfoById(pId); string intervalMins = "5,5"; string[] intervals = intervalMins.Split(','); if (plant != null && plant.plantUnits.Count > 0) { IList <DeviceStuct> devices = new List <DeviceStuct>(); string deviceId = plant.id.ToString(); string[] chartTypes = chartType.Split(','); devices.Add(new DeviceStuct() { deviceId = deviceId, rate = 1.0F, comareObj = plant.name, chartType = chartTypes[0], monitorType = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_POWER_CODE), cVal = ComputeType.Avg, deviceType = ChartDeviceType.PLANT, intervalMins = int.Parse(intervals[0]) }); //判断该测点是否有数据,有数据则增加关照对比 Hashtable dataHash = CollectorDayDataService.GetInstance().GetUnitDaydataList(plant.plantUnits, startDate, endDate, int.Parse(intervals[0]), MonitorType.PLANT_MONITORITEM_POWER_CODE); if (dataHash.Count > 0) { float rate = 1F; MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_LINGT_CODE); devices.Add(new DeviceStuct() { deviceId = plant.id.ToString(), rate = rate, comareObj = plant.name, name = mt.name, unit = "", chartType = chartTypes[0], monitorType = mt, cVal = ComputeType.Avg, deviceType = ChartDeviceType.PLANT, intervalMins = int.Parse(intervals[1]) }); } else { return(Content("error:" + Resources.SunResource.NODATA)); } string chartName = LanguageUtil.getDesc("PLANT_CHART_DAY_POWER_SUNLIGHT_COMPARE_CHART"); //取得用户年度发电量图表数据 Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = CompareChartService.GetInstance().compareDayHHMultiDeviceMultiMonitor(chartName, devices, startDate, endDate, int.Parse(intervals[0])); reportCode = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } return(Content(reportCode)); }
/// <summary> /// 取得设备某个测点的日变化曲线 /// </summary> /// <param name="dId"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="monitorCode"></param> /// <returns></returns> public ActionResult MonitorDayChart(int dId, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, int monitorCode, int intervalMins) { if (string.IsNullOrEmpty(chartType)) { chartType = ChartType.column; } Device device = DeviceService.GetInstance().get(dId); //获得报表js代码 MonitorType mt = MonitorType.getMonitorTypeByCode(monitorCode); string unit = mt.getMonitorFirstUnitByCode(); string chartName = string.Format(LanguageUtil.getDesc("MONITOR_DAY_CHAR_NAME"), mt.name); string reportCode = string.Empty; if (device != null) { Cn.Loosoft.Zhisou.SunPower.Common.ChartData chartData = DeviceChartService.GetInstance().DayChart(device, chartName, startYYYYMMDDHH, endYYYYMMDDHH, chartType, unit, monitorCode, intervalMins); reportCode = JsonUtil.convertToJson(chartData, typeof(Cn.Loosoft.Zhisou.SunPower.Common.ChartData)); } return(Content(reportCode)); }
/// <summary> /// 设备单个测点的日图表 /// </summary> /// <param name="device"></param> /// <param name="chartName"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <param name="unit"></param> /// <param name="monitorCode"></param> /// <returns></returns> public ChartData DayChart(Device device, string chartName, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string unit, int monitorCode, int intervalMins) { //将整天的数据截断头尾 string[] ic = base.getXseriesFromYYYYMMDDHH(startYYYYMMDDHH, endYYYYMMDDHH, intervalMins).ToArray(); ///结果需要按时间先后排序 Hashtable powerHash = DeviceDayDataService.GetInstance().GetDaydataList(ic, device, startYYYYMMDDHH, endYYYYMMDDHH, intervalMins, monitorCode); string[] xAxis = formatXaxis(ic, this.fromApp ? ChartTimeType.Hour : ChartTimeType.Day); MonitorType monitorType = MonitorType.getMonitorTypeByCode(monitorCode); KeyValuePair <string, float?[]> data = new KeyValuePair <string, float?[]>(); if (powerHash.Count > 0) { //先屏蔽了,因为两天跨度的中间部分平滑有问题,但不是对原来是否有影响测试后才知道 //this.FirstHandleChartData(ic, powerHash); data = GenerateChartData(monitorType.name, ic, powerHash, 1.0F); } return(ReportBuilder.createJsonChartXY(chartName, xAxis, data, "", unit, chartType, fromApp)); }
/// <summary> /// 取得多个电站跨小时的功率图表 /// </summary> /// <param name="plants"></param> /// <param name="startYYYYMMDDHH"></param> /// <param name="endYYYYMMDDHH"></param> /// <param name="chartType"></param> /// <returns></returns> public ChartData PlantDayChart(IList <Plant> plants, string chartname, string startYYYYMMDDHH, string endYYYYMMDDHH, string chartType, string unit, int monitorCode, int intervalMins) { //将整天的数据截断头尾 string head = startYYYYMMDDHH.Substring(6, 4); string foot = endYYYYMMDDHH.Substring(6, 4); MonitorType mt = MonitorType.getMonitorTypeByCode(monitorCode); string[] ic = base.getXseriesFromYYYYMMDDHH(startYYYYMMDDHH, endYYYYMMDDHH, intervalMins).ToArray();//cutXAxisData(sortCollection(powerHash.Keys), head, foot); string[] xAxis = formatXaxis(ic, this.fromApp ? ChartTimeType.Hour : ChartTimeType.Day); //string name = (plants.Count > 1 ? LanguageUtil.getDesc("CHART_TITLE_ALL_PLANTS") : plants[0].name) + " " + LanguageUtil.getDesc("CHART_TITLE_DAY_CHART"); string name = mt.name; KeyValuePair <string, float?[]> alldata = new KeyValuePair <string, float?[]>(); foreach (Plant plant in plants) { IList <PlantUnit> units = plant.plantUnits; ///结果需要按时间先后排序 Hashtable powerHash = CollectorDayDataService.GetInstance().GetUnitDaydataList(units, startYYYYMMDDHH, endYYYYMMDDHH, intervalMins, monitorCode); if (powerHash.Count > 0) { KeyValuePair <string, float?[]> data = GenerateChartData(name, ic, powerHash, 1.0F); if (alldata.Key == null) { alldata = data; } else { alldata = new KeyValuePair <string, float?[]>(alldata.Key, mergeHash(alldata.Value, data.Value)); } } } //MonitorType mt = MonitorType.getMonitorTypeByCode(monitorCode); return(ReportBuilder.createJsonChartXY(chartname, xAxis, alldata, mt.name, unit, chartType, fromApp)); }
/// <summary> /// 将实时数据串转换成键值对象,待状态 /// </summary> /// <param name="deviceRunData">实时数据对象</param> /// <returns>值对列表</returns> public string getMonitorValueWithStatus(int code) { IList <KeyValuePair <MonitorType, string> > kvpList = new List <KeyValuePair <MonitorType, string> >(); string rundatastr = this.rundatastr; string[] rundatas = rundatastr.Split('#'); string[] datas = null; foreach (string data in rundatas) { datas = data.Split(':'); if (code == int.Parse(datas[0])) { string v = this.getStatusValue(code, datas[1]); if ("0".Equals(v) && MonitorType.getMonitorTypeByCode(code).zerotoline) { return("-"); } return(v); } } //没有该测点的值则返回- return("-"); }
public ActionResult DropDownList(string lang) { Session["Culture"] = new CultureInfo(lang); string customType = Request.Form["customType"]; string valuetype = Request.Form["selectvalue"]; string type = Request.Form["selecttype"]; string timeInterval = Request.Form["timeInterval"];//报表时间类型 StringBuilder sb = new StringBuilder(); //单位 if (type.Trim().Equals("ValueType")) { if (!string.IsNullOrEmpty(valuetype) && !valuetype.Trim().ToLower().Equals("null")) { try { int imi = int.Parse(valuetype.Trim()); MonitorType mm = MonitorType.getMonitorTypeByCode(imi); if (mm != null && !string.IsNullOrEmpty(mm.unit)) { string[] sunit = mm.units(); foreach (string ss in sunit) { sb.Append("<option value=\"" + ss + "\">" + ss + "</option>"); } } } catch { } } } else if (type.Trim().Equals("TimeSlot"))//时间大类 { sb.Append(" <select id=\"timeInterval\" name=\"timeInterval\" class = \"subselect02\">"); if (valuetype.ToLower().Trim().Equals(ComConst.Time_YEAR.ToLower().Trim())) { sb.Append(" <option title=\"YEAR\" value=\"YEAR\">YEAR</option>"); sb.Append(" <option title=\"MONTH\" value=\"MONTH\">MONTH</option>"); } else if (valuetype.ToLower().Trim().Equals(ComConst.Time_MONTH.ToLower().Trim())) { sb.Append(" <option title=\"MONTH\" value=\"MONTH\">MONTH</option>"); sb.Append(" <option title=\"DAY\" value=\"DAY\">DAY</option>"); } else if (valuetype.ToLower().Trim().Equals(ComConst.Time_DAY.ToLower().Trim())) { sb.Append(" <option title=\"DAY\" value=\"DAY\">DAY</option>"); sb.Append(" <option title=\"HOUR\" value=\"HOUR\">HOUR</option>"); } sb.Append(" </select>"); } else if (type.Trim().Equals("IdType")) { string[] strvalue = valuetype.Split('&'); if (strvalue != null && strvalue.Length == 2) { int deviceTypeCode = int.Parse(strvalue[1].Trim()); IList <MonitorType> mts = MonitorType.getFilterMonitorTypesByTypeCode(deviceTypeCode); IList <MonitorType> temp = new List <MonitorType>(); string[] items = new string[] { }; MonitorConfig config = MonitorConfigService.GetInstance().Get(deviceTypeCode); if (config != null) { items = config.items.Split(','); } foreach (MonitorType monitor in mts) { foreach (string s in items) { if (s.Equals(monitor.code.ToString())) { temp.Add(monitor); break; } } } if (temp != null) { if (deviceTypeCode == DeviceData.INVERTER_CODE && !timeInterval.Equals("Hour")) { MonitorType mt = MonitorType.getMonitorTypeByCode(MonitorType.PLANT_MONITORITEM_ENERGY_CODE); sb.Append(" <option value=\"" + mt.code + "\">" + mt.name + "</option>"); } else { foreach (MonitorType item in temp) { //if (item.code == MonitorType.MIC_DETECTOR_ADR || item.code == MonitorType.MIC_DETECTOR_SOI || item.code == MonitorType.MIC_DETECTOR_WINDDIRECTION || item.code == MonitorType.MIC_BUSBAR_MAXLINE || item.code == MonitorType.MIC_BUSBAR_COMMUNICATION || item.code == MonitorType.MIC_BUSBAR_DIGITALINPUT || item.code == MonitorType.MIC_BUSBAR_JDQOUT || item.code == MonitorType.MIC_BUSBAR_MAXLINE || item.code == MonitorType.MIC_INVERTER_STATUSTIME || item.code == MonitorType.MIC_INVERTER_DEVICESTATUS || item.code == MonitorType.MIC_INVERTER_OUTTYPE || item.code == MonitorType.MIC_INVERTER_POWER || item.code == MonitorType.MIC_INVERTER_RUNTIME || item.code == MonitorType.MIC_INVERTER_STATUSDATA1 || item.code == MonitorType.MIC_INVERTER_STATUSDATA2 || item.code == MonitorType.MIC_INVERTER_STATUSDATA3 || item.code == MonitorType.MIC_INVERTER_TODAYENERGY) // continue; sb.Append(" <option value=\"" + item.code + "\">" + item.name + "</option>"); } } } } } return(Content(sb.ToString())); }
/// <summary> /// 根据自定义图表,构造设备比较结构 /// </summary> /// <param name="crt"></param> /// <returns></returns> private List <DeviceStuct> GetDeviceStucts(CustomChart crt) { List <DeviceStuct> list = new List <DeviceStuct>(); string[] ss = crt.product.Split(';'); foreach (string ssssss in ss) { if (string.IsNullOrEmpty(ssssss)) { continue; } string[] ssa = ssssss.Split(','); DeviceStuct dev = new DeviceStuct(); dev.chartType = crt.subType; dev.intervalMins = 5; dev.rate = 1F; foreach (string s in ssa) { string[] ss0 = s.Split('&'); if (ss0.Length == 2) { switch (ss0[1]) { case "subType": dev.chartType = ss0[0]; break; case "cVal": dev.cVal = int.Parse(ss0[0]); break; case "Unit": dev.unit = ss0[0]; break; case "valueType": dev.monitorType = MonitorType.getMonitorTypeByCode(int.Parse(ss0[0])); break; case "0": ///DeviceData.PLANT_CODE.ToString() dev.deviceType = ChartDeviceType.PLANT; dev.deviceId = ss0[0]; Plant plant = PlantService.GetInstance().GetPlantInfoById(int.Parse(dev.deviceId)); dev.comareObj = plant.name; break; default: dev.deviceType = ChartDeviceType.DEVICE; dev.deviceId = ss0[0]; Device device = DeviceService.GetInstance().get(int.Parse(dev.deviceId)); dev.comareObj = device.fullName; break; } } } if (!(dev.monitorType.code != MonitorType.PLANT_MONITORITEM_ENERGY_CODE && !crt.timeInterval.Equals("Hour"))) { list.Add(dev); } } return(list); }