wxr
2020-07-23 5de5a26d3825b3182a7d3a18ed1cbdbb78a3f9aa
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -6,23 +6,40 @@
namespace HDL_ON.UI
{
    public class EnvironmentalSensorPage : FrameLayout
    public partial class EnvironmentalSensorPage : FrameLayout
    {
        EnvironmentalSensorPage bodyView;
        FrameLayout showDataTypeView;
        Button btnShowHistroyData_Day;
        Button btnShowHistroyData_Week;
        Button btnShowHistroyData_Month;
        FrameLayout historyDataView;
        MyEchartsViewOn myEchartsView;
        Sensor sensor;
        List<Sensor> showSensors;
        List<uint> tipColorList = new List<uint>()
        {
            0xFF80AEFF,0xFFFFD154,0xFFFF9D54,0xFFFE6A6A,0xFFB183C3,0xFFADE764,
        };
        List<string> tipColorStringList = new List<string>()
        {
            "#80AEFF","#FFD154","#FF9D54","#FE6A6A","#B183C3","#ADE764",
        };
        public EnvironmentalSensorPage(Sensor ss)
        {
            bodyView = this;
            sensor = ss;
            showSensors = new List<Sensor>();
            showSensors.Add(ss);
        }
        public void LoadPage()
@@ -53,7 +70,7 @@
            contentView.AddChidren(diagramView);
            #region 选择数据日期范围
            FrameLayout showDataTypeView = new FrameLayout()
            showDataTypeView = new FrameLayout()
            {
                X = Application.GetRealWidth(183),
                Y = Application.GetRealHeight(12),
@@ -63,7 +80,7 @@
            };
            diagramView.AddChidren(showDataTypeView);
            Button btnShowHistroyData_Day = new Button()
            btnShowHistroyData_Day = new Button()
            {
                Width = Application.GetRealWidth(48),
                TextAlignment = TextAlignment.Center,
@@ -75,7 +92,7 @@
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Day);
            Button btnShowHistroyData_Week = new Button()
            btnShowHistroyData_Week = new Button()
            {
                X = Application.GetRealWidth(48),
                Width = Application.GetRealWidth(48),
@@ -87,8 +104,7 @@
            };
            showDataTypeView.AddChidren(btnShowHistroyData_Week);
            Button btnShowHistroyData_Month = new Button()
            btnShowHistroyData_Month = new Button()
            {
                X = Application.GetRealWidth(48 * 2),
                Width = Application.GetRealWidth(48),
@@ -101,8 +117,7 @@
            showDataTypeView.AddChidren(btnShowHistroyData_Month);
            #endregion
            FrameLayout historyDataView = new FrameLayout()
            historyDataView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(52),
@@ -111,45 +126,9 @@
            };
            diagramView.AddChidren(historyDataView);
            List<string> xStrings = new List<string>() ;
            List<string> yStrings = new List<string>();
            Random random = new Random();
            for (int i = 0; i < 24; i++)
            {
                xStrings.Add(i.ToString());
            myEchartsView = new MyEchartsViewOn();
                switch (sensor.functionType)
                {
                    case FunctionType.PM10:
                        yStrings.Add( Math.Round(random.NextDouble() * 130, 0).ToString());
                        break;
                    case FunctionType.PM25:
                        yStrings.Add( Math.Round(random.NextDouble() * 130, 0).ToString());
                        break;
                    //case FunctionType.Noise:
                    //    break;
                    case FunctionType.WindPower:
                        break;
                    case FunctionType.CO2:
                        yStrings.Add( Math.Round(random.NextDouble() * 6000, 0).ToString());
                        break;
                    case FunctionType.Temp:
                        yStrings.Add( Math.Round(random.NextDouble() * 40, 0).ToString());
                        break;
                    case FunctionType.TVOC:
                        yStrings.Add( Math.Round(random.NextDouble() * 10, 1).ToString());
                        break;
                    case FunctionType.Humidity:
                        yStrings.Add( Math.Round(random.NextDouble() * 100, 0).ToString());
                        break;
                }
            }
            MyEchartsView myEchartsView = new MyEchartsView();
            historyDataView.AddChidren(myEchartsView);
            myEchartsView.Show(sensor.name, xStrings.ToArray(), yStrings.ToArray());
            #region 底部等级提示
            HorizontalScrolViewLayout tipValuesView = new HorizontalScrolViewLayout()
@@ -180,12 +159,12 @@
            };
            diagramView.AddChidren(tipTextView);
            switch (sensor.functionType)
            {
                case FunctionType.PM10:
                case FunctionType.PM25:
                    tipValuesView.AddChidren(new Button() {
                    tipValuesView.AddChidren(new Button()
                    {
                        Width = Application.GetRealWidth(101),
                        Text = "35",
                        TextAlignment = TextAlignment.Center,
@@ -579,7 +558,6 @@
            };
            selfInfoView.AddChidren(btnSeltSensorName);
           Button btnFromFoorAndRoom = new Button()
            {
                X = Application.GetRealWidth(16),
@@ -616,7 +594,8 @@
            };
            selfInfoView.AddChidren(btnSeltSensorValue);
            var btnShowData = new Button()
            Button btnShowData;
            btnShowData = new Button()
            {
                X = Application.GetRealWidth(291),
                Y = Application.GetRealWidth(62),
@@ -624,6 +603,7 @@
                Height = Application.GetMinRealAverage(32),
                UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIcon.png",
                SelectedImagePath = "FunctionIcon/EnvironmentalScience/DiagramIconOn.png",
                IsSelected = true,
            };
            selfInfoView.AddChidren(btnShowData);
@@ -777,17 +757,193 @@
                #endregion
            }
            #endregion
            new TopViewDiv(bodyView, Language.StringByID(sensor.functionTypeNameId)).LoadTopView();
            LoadMothed_GetSensorHistoryData(QueryType.NowDay);
            LoadEvent_ChangeSensorHistoryShowType();
        }
    }
    //------------
    public partial class EnvironmentalSensorPage
    {
        enum QueryType
        {
            NowDay = 0,//当天
            NowMonth = 1,//指定月
            NowYear = 2,//今年
            LatelySevenDay = 3//最近七天
        }
        /// <summary>
        /// 读取传感器历史数据
        /// </summary>
        void LoadMothed_GetSensorHistoryData(QueryType queryType)
        {
            string echartRootJsonString;
            EchartsOption echartRootJson = new EchartsOption();
            var seriesList = new List<EchartSeriesItem>();
            echartRootJson.xAxis.data = new List<string>();
            var loadPage = new Loading() {
                LodingBackgroundColor = 0x88888888,
            };
            historyDataView.AddChidren(loadPage);
            new System.Threading.Thread(() =>
            {
                try
                {
                    Application.RunOnMainThread(() => {
                        loadPage.Start("Loading...");
                    });
                    var curMonth = 0;
                    if(queryType == QueryType.NowMonth)
                    {
                        curMonth = DateTime.Now.Month;
                    }
                    for (int i = 0; i < showSensors.Count; i++)
                    {
                        var sr = showSensors[i];
                        var revertObj = new DAL.Server.HttpServerRequest().GetSensorHistory(sr.bus_Data.SubnetID, sr.bus_Data.DeviceID,
                               5, (int)(sr.functionType) % 256, (int)queryType, sr.bus_Data.LoopID, curMonth,
                               DB_ResidenceData.residenceData.residenceGatewayMAC);
                        if (revertObj != null)
                        {
                            if (revertObj.StateCode == "SUCCESS")
                            {
                                var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SensorPushHistoryRes>>(revertObj.ResponseData.ToString());
                                var sItem = new EchartSeriesItem
                                {
                                    name = sr.GetRoomListName(),
                                    data = new List<int>(),
                                    lineStyle = new EchartLineStyle()
                                    {
                                        color = tipColorStringList[i],
#if __IOS__
                                        width = 5,
#elif __ANDROID__
                                        width = 2,
#endif
                                    },
                                };
                                int ass = 0;
                                for (int j = 0; j < revertData.Count; j++)
                                {
                                    if (revertData[j].TargetValue.ToString() != "NaN")
                                    {
                                        ass = Convert.ToInt32(revertData[j].TargetValue);
                                    }
                                    sItem.data.Add(ass);
                                    switch (queryType)
                                    {
                                        case QueryType.NowDay:
                                            echartRootJson.xAxis.data.Add(revertData[j].CreatedOnUtc.Hour.ToString());
                                            break;
                                        case QueryType.LatelySevenDay:
                                            echartRootJson.xAxis.data.Add(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(revertData[j].CreatedOnUtc.DayOfWeek));
                                            break;
                                        case QueryType.NowMonth:
                                            echartRootJson.xAxis.data.Add(revertData[j].CreatedOnUtc.Day.ToString());
                                            break;
                                    }
                                }
                                seriesList.Add(sItem);
                            }
                            else
                            {
                                Application.RunOnMainThread(() =>
                                {
                                    new PublicAssmebly().TipMsgAutoClose(Language.StringByID(StringId.GetSensorHistoryFailed), true);
                                });
                            }
                        }
                    }
                    //echartRootJson.title.text = "温度(℃)";lineStyle
                    //echartRootJson.color = new List<string> { "#80AEFF" };//, "FFD154", "FF9D54", "FE6A6A", "B183C3", "ADE764"
                    echartRootJson.series = seriesList;
#if __IOS__
                    echartRootJson.xAxis.axisLabel.fontSize = 22;
                    echartRootJson.yAxis.axisLabel.fontSize = 22;
#else
                    echartRootJson.xAxis.axisLabel.fontSize = 8;
                    echartRootJson.yAxis.axisLabel.fontSize = 8;
#endif
                    echartRootJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(echartRootJson);
                    Application.RunOnMainThread(() =>
                    {
                        myEchartsView.ShowWithOptionJsonString(echartRootJsonString);
                    });
                }
                catch (Exception ex)
                {
                    MainPage.Log($"sensor history error : {ex.Message}");
                }
                finally
                {
                    Application.RunOnMainThread(() => {
                        loadPage.Hide();
                    });
                }
            })
            { IsBackground = true }.Start();
        }
        void LoadEvent_ChangeSensorHistoryShowType()
        {
            btnShowHistroyData_Day.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg1.png";
                btnShowHistroyData_Day.IsSelected = true;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = false;
                LoadMothed_GetSensorHistoryData(QueryType.NowDay);
            };
            btnShowHistroyData_Month.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg3.png";
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = true;
                btnShowHistroyData_Week.IsSelected = false;
                LoadMothed_GetSensorHistoryData(QueryType.NowMonth);
            };
            btnShowHistroyData_Week.MouseUpEventHandler = (sender, e) =>
            {
                showDataTypeView.BackgroundImagePath = "FunctionIcon/EnvironmentalScience/SensorHistoryBg2.png";
                btnShowHistroyData_Day.IsSelected = false;
                btnShowHistroyData_Month.IsSelected = false;
                btnShowHistroyData_Week.IsSelected = true;
                LoadMothed_GetSensorHistoryData(QueryType.LatelySevenDay);
            };
        }
        void LoadEvent_SwitchOtherRoomSensorData()
        {
        }
    }
    public class SensorPushHistoryRes
    {
        /// <summary>
        /// 实际目标值
        /// </summary>
        public float TargetValue { get; set; }
        /// <summary>
        /// 查询的时间集群
        /// </summary>
        public DateTime CreatedOnUtc { get; set; }
    }
}