using System;
|
using System.Collections.Generic;
|
using HDL_ON.DAL.Server;
|
using HDL_ON.DriverLayer;
|
using HDL_ON.Entity;
|
using HDL_ON.UI.CSS;
|
using Shared;
|
namespace HDL_ON.UI
|
{
|
public class EnergyMainPage : FrameLayout
|
{
|
static EnergyMainPage bodyView;
|
|
/// <summary>
|
/// 顶部区域
|
/// </summary>
|
FrameLayout generalTableView;
|
|
/// <summary>
|
/// 实时功耗
|
/// </summary>
|
Button btnRealTimeData;
|
/// <summary>
|
/// 实时功耗单位
|
/// </summary>
|
Button btnTotalValueUint;
|
/// <summary>
|
/// 总功耗
|
/// </summary>
|
TextButton btnTotalValue;
|
/// <summary>
|
/// 历史数据区域
|
/// </summary>
|
FrameLayout diagramView;
|
/// <summary>
|
/// 曲线图
|
/// </summary>
|
MyEchartsViewOn myLineEchartsView;
|
/// <summary>
|
/// 曲线图数据string
|
/// </summary>
|
EchartsOption_BrokenLine brokenLine;
|
/// <summary>
|
/// 曲线图下拉按钮
|
/// </summary>
|
Button btnDrodDown;
|
|
|
/// <summary>
|
/// 插查询的能源列表
|
/// </summary>
|
List<Function> queryList = new List<Function>();
|
/// <summary>
|
/// 查询条件
|
/// hour、week、month
|
/// </summary>
|
string curQueryType = "hour";
|
|
|
/// <summary>
|
/// 能源列表区域
|
/// </summary>
|
FrameLayout energyListView;
|
/// <summary>
|
/// 历史数据图表
|
/// </summary>
|
MyEchartsViewOn myEchartsView;
|
/// <summary>
|
/// 曲线图是否展开
|
/// </summary>
|
bool isUnfoldOrStow = false;
|
|
List<Function> energyList = new List<Function>();
|
|
List<uint> colorList = new List<uint>(){0xFF80AEFF, 0xFFFFD154, 0xFFFF9D54, 0xFFFE6A6A, 0xFFB183C3, 0xFFADE764,
|
0xFFD7504B, 0xFFC6E579, 0xFFF4E001, 0xFFF0805A, 0xFF26C0C0};
|
List<string> colorList2 = new List<string>() {
|
"#80AEFF", "#FFD154", "#FF9D54", "#FE6A6A", "#B183C3", "#ADE764",
|
"#D7504B", "#C6E579", "#F4E001", "#F0805A", "#26C0C0"};
|
/// <summary>
|
/// 主页
|
/// </summary>
|
public EnergyMainPage()
|
{
|
bodyView = this;
|
energyList = FunctionList.List.GetEnergyList();
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public void LoadPage()
|
{
|
new TopViewDiv(bodyView, Language.StringByID(StringId.EnergyMonitoring)).LoadTopView();
|
bodyView.BackgroundColor = CSS_Color.BackgroundColor;
|
|
var contentView = new VerticalScrolViewLayout()
|
{
|
Y = Application.GetRealHeight(64),
|
Height = Application.GetRealHeight(603),
|
};
|
bodyView.AddChidren(contentView);
|
|
#region 顶部view
|
generalTableView = new FrameLayout()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight(16),
|
Width = Application.GetRealWidth(343),
|
Height = Application.GetRealWidth(148),//419//148
|
Radius = (uint)Application.GetRealWidth(5),
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
};
|
contentView.AddChidren(generalTableView);
|
|
btnTotalValue = new TextButton()
|
{
|
X = Application.GetRealWidth(18),
|
Y = Application.GetRealWidth(24),
|
Width = Application.GetRealWidth(18),
|
Height = Application.GetRealWidth(52),
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
IsBold = true,
|
TextAlignment = TextAlignment.CenterLeft,
|
TextSize = 40,
|
Text = "000"
|
};
|
generalTableView.AddChidren(btnTotalValue);
|
|
btnTotalValueUint = new Button()
|
{
|
X = btnTotalValue.Right,
|
Y = Application.GetRealWidth(24),
|
Width = Application.GetRealWidth(60),
|
Height = Application.GetRealWidth(28),
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
IsBold = true,
|
Text = "kW‧h",
|
TextAlignment = TextAlignment.CenterLeft,
|
};
|
generalTableView.AddChidren(btnTotalValueUint);
|
|
btnRealTimeData = new Button()
|
{
|
X = Application.GetRealWidth(18),
|
Y = btnTotalValue.Bottom,
|
Width = Application.GetRealWidth(209),
|
Height = Application.GetRealWidth(28),
|
TextColor = CSS_Color.TextualColor,
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextAlignment = TextAlignment.CenterLeft,
|
TextID = StringId.RealTimePowerConsumption,
|
};
|
generalTableView.AddChidren(btnRealTimeData);
|
|
UpdataValue();
|
|
|
var echartsView = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(118),
|
Height = Application.GetRealWidth(118),
|
X = Application.GetRealWidth(227),
|
//Y = Application.GetRealWidth(16),
|
};
|
generalTableView.AddChidren(echartsView);
|
myEchartsView = new MyEchartsViewOn()
|
{
|
Width = Application.GetRealWidth(118),
|
Height = Application.GetRealWidth(118),
|
};
|
|
echartsView.AddChidren(myEchartsView);
|
Dictionary<string, string> list = new Dictionary<string, string>();
|
|
foreach(var ene in energyList)
|
{
|
double tt = 0;
|
double.TryParse(ene.GetAttrState(FunctionAttributeKey.TotalElectricity), out tt);
|
tt *= 100;//乘以100,小于1无法加载echart
|
|
list.Add(ene.name, tt.ToString());
|
}
|
|
var echartsPie = new EchartsOption_Pie();
|
var echartRootJson = echartsPie.InitDateJson(list);
|
//var echartRootJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(echartRootJson);
|
myEchartsView.ShowWithOption(echartRootJson);
|
|
|
btnDrodDown = new Button()
|
{
|
Y = Application.GetRealWidth(118),
|
Width = Application.GetRealWidth(343),
|
Height = Application.GetRealWidth(30),
|
UnSelectedImagePath = "FunctionIcon/Energy/EnergyDrodDownIcon.png",
|
SelectedImagePath = "FunctionIcon/Energy/EnergyDrodUpIcon.png",
|
};
|
initDiagramView();
|
generalTableView.AddChidren(btnDrodDown);
|
btnDrodDown.MouseUpEventHandler = (sender, e) => {
|
isUnfoldOrStow = btnDrodDown.IsSelected = !btnDrodDown.IsSelected;
|
showDiagramView();
|
};
|
|
#endregion
|
|
|
energyListView = new FrameLayout()
|
{
|
Y = generalTableView.Bottom + Application.GetRealWidth(8),
|
Height = Application.GetRealWidth(116 * energyList.Count + 50),
|
};
|
contentView.AddChidren(energyListView);
|
int index = 0;
|
foreach (var energy in energyList)
|
{
|
EnergyRow(energy, energyListView, index);
|
index++;
|
Control.Ins.SendReadCommand(energy);
|
}
|
|
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
void showDiagramView()
|
{
|
if (isUnfoldOrStow)//展开
|
{
|
generalTableView.Height = Application.GetRealHeight(419);
|
btnDrodDown.Y = Application.GetRealWidth(389);
|
btnDrodDown.IsSelected = true;
|
}
|
else
|
{
|
generalTableView.Height = Application.GetRealHeight(148);
|
btnDrodDown.Y = Application.GetRealWidth(118);
|
btnDrodDown.IsSelected = false;
|
}
|
|
energyListView.Y = generalTableView.Bottom + Application.GetRealWidth(8);
|
}
|
|
/// <summary>
|
/// 加载曲线图
|
/// </summary>
|
/// <param name="contentView"></param>
|
void initDiagramView()
|
{
|
brokenLine = new EchartsOption_BrokenLine();
|
|
|
diagramView = new FrameLayout()
|
{
|
Y = Application.GetRealHeight(136),
|
Gravity = Gravity.CenterHorizontal,
|
Width = Application.GetRealWidth(343),
|
Height = Application.GetRealWidth(241),
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
Radius = (uint)Application.GetRealWidth(12),
|
BorderColor = 0x00000000,
|
BorderWidth = 0,
|
};
|
generalTableView.AddChidren(diagramView);
|
|
#region 选择数据日期范围
|
var showDataTypeView = new FrameLayout()
|
{
|
X = Application.GetRealWidth(183),
|
Y = Application.GetRealHeight(12),
|
Width = Application.GetRealWidth(144),
|
Height = Application.GetRealHeight(24),
|
BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg1.png",
|
};
|
diagramView.AddChidren(showDataTypeView);
|
|
var btnShowHistroyData_Day = new Button()
|
{
|
Width = Application.GetRealWidth(48),
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.PromptingColor2,
|
SelectedTextColor = CSS_Color.MainColor,
|
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
|
IsSelected = true,
|
TextID = StringId.day,
|
};
|
showDataTypeView.AddChidren(btnShowHistroyData_Day);
|
|
var btnShowHistroyData_Week = new Button()
|
{
|
X = Application.GetRealWidth(48),
|
Width = Application.GetRealWidth(48),
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.PromptingColor2,
|
SelectedTextColor = CSS_Color.MainColor,
|
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
|
TextID = StringId.week,
|
};
|
showDataTypeView.AddChidren(btnShowHistroyData_Week);
|
|
var btnShowHistroyData_Month = new Button()
|
{
|
X = Application.GetRealWidth(48 * 2),
|
Width = Application.GetRealWidth(48),
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.PromptingColor2,
|
SelectedTextColor = CSS_Color.MainColor,
|
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
|
Text = DateTime.Now.Month.ToString() + Language.StringByID(StringId.month),
|
};
|
showDataTypeView.AddChidren(btnShowHistroyData_Month);
|
|
|
btnShowHistroyData_Day.MouseUpEventHandler = (sender, e) =>
|
{
|
showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg1.png";
|
btnShowHistroyData_Day.IsSelected = true;
|
btnShowHistroyData_Month.IsSelected = false;
|
btnShowHistroyData_Week.IsSelected = false;
|
curQueryType = "hour";
|
brokenLine.YvalueText = "";
|
foreach (var enery in queryList)
|
{
|
LoadMothed_GetHistoryData(enery,false);
|
}
|
};
|
|
btnShowHistroyData_Week.MouseUpEventHandler = (sender, e) =>
|
{
|
showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg2.png";
|
btnShowHistroyData_Day.IsSelected = false;
|
btnShowHistroyData_Month.IsSelected = false;
|
btnShowHistroyData_Week.IsSelected = true;
|
curQueryType = "week";
|
brokenLine.YvalueText = "";
|
foreach (var enery in queryList)
|
{
|
LoadMothed_GetHistoryData(enery, false);
|
}
|
};
|
btnShowHistroyData_Month.MouseUpEventHandler = (sender, e) =>
|
{
|
showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg3.png";
|
btnShowHistroyData_Day.IsSelected = false;
|
btnShowHistroyData_Month.IsSelected = true;
|
btnShowHistroyData_Week.IsSelected = false;
|
curQueryType = "month";
|
brokenLine.YvalueText = "";
|
foreach (var enery in queryList)
|
{
|
LoadMothed_GetHistoryData(enery, false);
|
}
|
};
|
|
#endregion
|
|
var historyDataView = new FrameLayout()
|
{
|
Gravity = Gravity.CenterHorizontal,
|
Y = Application.GetRealHeight(52),
|
//Width = Application.GetRealWidth(343 - 32),
|
Height = Application.GetRealHeight(178),
|
};
|
diagramView.AddChidren(historyDataView);
|
|
myEchartsView = new MyEchartsViewOn() {
|
Y = Application.GetRealHeight(10),
|
Height = Application.GetRealHeight(150),
|
};
|
|
historyDataView.AddChidren(myEchartsView);
|
|
}
|
|
/// <summary>
|
/// 读取历史数据
|
/// </summary>
|
void LoadMothed_GetHistoryData(Function sr,bool isDel)
|
{
|
if(isDel)//删除数据现实
|
{
|
brokenLine.YvalueText = "";
|
foreach (var ene in queryList)
|
{
|
brokenLine.YvalueText += ene.GetAttrState("ydata") + ",";
|
}
|
|
Application.RunOnMainThread(() =>
|
{
|
myEchartsView.ShowWithOption(brokenLine.InitOption());
|
});
|
return;
|
}
|
|
var loadPage = new Loading()
|
{
|
LodingBackgroundColor = 0x88888888,
|
};
|
diagramView.AddChidren(loadPage);
|
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loadPage.Start(Language.StringByID(StringId.PleaseWait));
|
});
|
|
var sensorType = sr.spk.Split(".")[1];
|
var revertObj = new HttpServerRequest().GetSensorHistory(curQueryType, sr.deviceId, "total_electricity");
|
if (revertObj != null)
|
{
|
if (revertObj.Code == StateCode.SUCCESS)
|
{
|
var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
|
|
List<string> vs = new List<string>();
|
if (brokenLine.YvalueText == "")
|
{
|
foreach (var data in revertData)
|
{
|
vs.Add(data.fieldName);
|
}
|
brokenLine.InitXdataText(vs);
|
|
if (sr.GetAttribute("ydata") == null)
|
{
|
sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
|
}
|
sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color")) + ",");
|
}
|
else
|
{
|
if (sr.GetAttribute("ydata") == null)
|
{
|
sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
|
}
|
sr.SetAttrState("ydata", brokenLine.InitYdataText(sr.name, revertData, sr.GetAttrState("color"))+",");
|
}
|
}
|
}
|
brokenLine.yTitle = Language.StringByID(StringId.EnergyConsumption) + "(kW)";
|
brokenLine.xTitle = Language.StringByID(StringId.timeMode);
|
if(curQueryType != "hour")
|
{
|
brokenLine.xTitle = Language.StringByID(StringId.Date);
|
}
|
var opString = brokenLine.InitOption();
|
|
Application.RunOnMainThread(() =>
|
{
|
myEchartsView.ShowWithOption(opString);
|
});
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"sensor history error : {ex.Message}");
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loadPage.Hide();
|
});
|
}
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public void EnergyRow(Function energy, FrameLayout view, int index)
|
{
|
var btnLine = new Button()
|
{
|
Y = Application.GetRealWidth(116 * index),
|
Height = Application.GetRealWidth(16),
|
};
|
view.AddChidren(btnLine);
|
|
//定义代表色
|
energy.attributes.Add(new FunctionAttributes() { key = "color", state = colorList2[index] });
|
|
var row = new EnergyRow(energy, colorList[index]);
|
|
row.SetHistory_Action = (isAdd) =>
|
{
|
if (isAdd)
|
{
|
if(!isUnfoldOrStow)//如果曲线图没有加载出来,则自动加载出来
|
{
|
isUnfoldOrStow = true;
|
showDiagramView();
|
}
|
queryList.Add(row.function);
|
LoadMothed_GetHistoryData(row.function, false);
|
}
|
else
|
{
|
queryList.Remove(row.function);
|
LoadMothed_GetHistoryData(row.function, true);
|
if (queryList.Count == 0)//如果查询列表为0,自动收起曲线图
|
{
|
isUnfoldOrStow = false;
|
showDiagramView();
|
}
|
}
|
};
|
|
|
row.Y = btnLine.Bottom;
|
view.AddChidren(row);
|
listButton_value.Add(row.btnValue);
|
|
Control.Ins.SendReadCommand(energy);
|
}
|
|
|
public List<Button> listButton_value = new List<Button>();
|
|
/// <summary>
|
/// 更新功能状态
|
/// </summary>
|
public static void UpdataStatus(Function updataTemp)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
if (bodyView == null)
|
return;
|
foreach (var btn in bodyView.listButton_value)
|
{
|
if (btn.Tag.ToString() == updataTemp.sid)
|
{
|
var newValue = updataTemp.GetAttrState(FunctionAttributeKey.Power);
|
//if (newValue != btn.Text)
|
{
|
btn.Text = newValue;
|
UpdataValue();
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"{bodyView.GetType().Name } UpdataStates error : {ex.Message}");
|
}
|
});
|
}
|
|
/// <summary>
|
/// 更新数据
|
/// </summary>
|
static void UpdataValue()
|
{
|
double totalValue = 0;
|
double realtimeValue = 0;
|
foreach (var ene in bodyView.energyList)
|
{
|
double power = 0;
|
double.TryParse(ene.GetAttrState(FunctionAttributeKey.TotalElectricity), out power);
|
totalValue += power;
|
|
int realTimePower = 0;
|
int.TryParse(ene.GetAttrState(FunctionAttributeKey.Power), out realTimePower);
|
realtimeValue += realTimePower;
|
}
|
bodyView.btnTotalValue.Text = totalValue.ToString();
|
realtimeValue /= 1000;
|
bodyView.btnRealTimeData.Text = Language.StringByID(StringId.RealTimePowerConsumption).Replace("{0}", realtimeValue.ToString());
|
///动态获取文本宽度
|
bodyView.btnTotalValue.Width = bodyView.btnTotalValue.GetTextWidth() + Application.GetRealWidth(5);
|
bodyView.btnTotalValueUint.X = bodyView.btnTotalValue.Right;
|
}
|
}
|
|
|
public class EnergyRow : FrameLayout
|
{
|
public Button btnValue;
|
Button btnShowData;
|
public Function function;
|
public Action<bool> SetHistory_Action;
|
public EnergyRow(Function energy, uint color)
|
{
|
function = energy;
|
Gravity = Gravity.CenterHorizontal;
|
Width = Application.GetRealWidth(343);
|
Height = Application.GetRealWidth(100);
|
Radius = (uint)Application.GetRealWidth(12);
|
BackgroundColor = CSS_Color.MainBackgroundColor;
|
Tag = energy.sid;
|
|
var btnColorTip = new Button()
|
{
|
X = Application.GetRealWidth(8),
|
Y = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(12),
|
Height = Application.GetRealWidth(12),
|
BackgroundColor = color
|
};
|
AddChidren(btnColorTip);
|
|
var btnName = new Button()
|
{
|
X = Application.GetRealWidth(28),
|
Y = Application.GetRealHeight(10),
|
Width = Application.GetRealWidth(200),
|
Height = Application.GetRealHeight(24),
|
Text = energy.name,
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
};
|
AddChidren(btnName);
|
|
var btnFromFloor = new Button()
|
{
|
X = Application.GetRealWidth(28),
|
Y = Application.GetRealHeight(10 + 24),
|
Width = Application.GetRealWidth(200),
|
Height = Application.GetRealHeight(18),
|
Text = energy.GetRoomListName(),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.PromptingColor1,
|
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
|
};
|
AddChidren(btnFromFloor);
|
|
btnValue = new Button()
|
{
|
X = Application.GetRealWidth(28),
|
Y = Application.GetRealWidth(57),
|
Width = Application.GetRealWidth(226),
|
Height = Application.GetRealWidth(43),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextSize = CSS_FontSize.HeadlineFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Text = energy.GetAttrState(FunctionAttributeKey.Power),
|
Tag = energy.sid,
|
IsBold = true,
|
};
|
AddChidren(btnValue);
|
|
|
var btnSetting = new Button()
|
{
|
X = Application.GetRealWidth(291),
|
Y = Application.GetRealWidth(6),
|
Width = Application.GetMinRealAverage(32),
|
Height = Application.GetMinRealAverage(32),
|
UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
|
};
|
AddChidren(btnSetting);
|
|
var btnSeltSensorValue = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Y = Application.GetRealWidth(47),
|
Width = Application.GetRealWidth(200),
|
Height = Application.GetRealWidth(43),
|
TextAlignment = TextAlignment.CenterLeft,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
IsBold = true,
|
TextSize = CSS_FontSize.HeadlineFontSize,
|
};
|
AddChidren(btnSeltSensorValue);
|
|
btnShowData = new Button()
|
{
|
X = Application.GetRealWidth(291),
|
Y = Application.GetRealWidth(62),
|
Width = Application.GetMinRealAverage(32),
|
Height = Application.GetMinRealAverage(32),
|
UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIcon.png",
|
SelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIconOn.png",
|
IsSelected = false,
|
};
|
AddChidren(btnShowData);
|
|
btnSetting.MouseUpEventHandler = (sender, e) =>
|
{
|
Action backAction = () =>
|
{
|
btnName.Text = energy.name;
|
btnFromFloor.Text = energy.GetRoomListName();
|
};
|
var infoView = new FunctionBaseInfoSetPage(energy, backAction);
|
MainPage.BasePageView.AddChidren(infoView);
|
infoView.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
|
btnShowData.MouseUpEventHandler = (sender, e) => {
|
btnShowData.IsSelected = !btnShowData.IsSelected;
|
SetHistory_Action(btnShowData.IsSelected);
|
};
|
}
|
|
}
|
}
|