using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Kill.UI.Components; using System.Threading.Tasks; using Kill.Network; using System; using Kill.Managers; namespace Kill.UI.Pages { public class HomePageChartsCtrl : MonoBehaviour { /// /// 0天 1周 2月 3年 /// public int nowChartIndex = 0; public Barchart[] barcharts; public enum TimeType { daily, weekly, monthly, annual } public RadarHeatmap radarHeatmap; public async Task Init() { LoadingUI.Show(); await GetKillCount(); await GetKillRecords(); LoadingUI.Hide(); } public Text totalText; public async Task GetKillCount() { string url = $"/api/v1/stats/device/kill-count?device_sn={HomePageCtrl.Instance.selectedDevice.ble_mac}&time_type={(TimeType)nowChartIndex}&date={DateTime.Now:yyyy-MM-dd}"; var response = await NetworkCtrl.Instance.Get(url); ResponseCodeHandler.HandleResponse(response, onSuccess: (data) => { totalText.text = data.data.total_count.ToString(); switch (nowChartIndex) { case 0: List daily = new List(); for (int i = 0; i <24; i++) { if(data.data.stats.Count>i+1) daily.Add(data.data.stats[i+1].count); else daily.Add(0); } barcharts[0].Init(daily); break; case 1: List weekly = new List(); for (int i = 0; i <7; i++) { if(data.data.stats.Count>i+1) weekly.Add(data.data.stats[i+1].count); else weekly.Add(0); } barcharts[1].Init(weekly); break; case 2: List monthly = new List(); for (int i = 0; i <31; i++) { if(data.data.stats.Count>i+1) monthly.Add(data.data.stats[i+1].count); else monthly.Add(0); } barcharts[2].Init(monthly); break; case 3: List annual = new List(); for (int i = 0; i <12; i++) { if(data.data.stats.Count>i+1) annual.Add(data.data.stats[i+1].count); else annual.Add(0); } barcharts[3].Init(annual); break; } barcharts[nowChartIndex].gameObject.SetActive(true); }, onError: null ); } public GameObject[] changeChartBtns; public void ChangeChart(int index) { for (int i = 0; i < changeChartBtns.Length; i++) { if (i == index || (i > 3 && (i != index + 4))) changeChartBtns[i].gameObject.SetActive(true); else changeChartBtns[i].gameObject.SetActive(false); } for (int i = 0; i < barcharts.Length; i++) { if (i == index) barcharts[i].gameObject.SetActive(true); else barcharts[i].gameObject.SetActive(false); } nowChartIndex = index; Init(); } public async Task GetKillRecords() { string startTime = ""; string endTime = ""; DateTime now = DateTime.Now; endTime = now.ToString("yyyy-MM-dd HH:mm:ss"); switch (nowChartIndex) { case 0: startTime = now.AddDays(-1).ToString("yyyy-MM-dd"); break; case 1: startTime = now.AddDays(-((int)now.DayOfWeek + 1)).ToString("yyyy-MM-dd"); break; case 2: startTime = new DateTime(now.Year, now.Month, 1).ToString("yyyy-MM-dd"); break; case 3: startTime = new DateTime(now.Year, 1, 1).ToString("yyyy-MM-dd"); break; } string url = $"/api/v1/stats/device/heatmap?device_sn={HomePageCtrl.Instance.selectedDevice.ble_mac}&start_time={startTime}&end_time={endTime}"; var response = await NetworkCtrl.Instance.Get(url); ResponseCodeHandler.HandleResponse(response, onSuccess: (data) => { if (data.data.points != null && data.data.points.Count > 0) { List heatmapDatas = new(); foreach (var record in data.data.points) { float dis = record.distance / 6.0f; float realAngle=record.angle+90; if(realAngle<0) realAngle=0; if(realAngle>180) realAngle=180; RadarHeatmap.HeatmapData heatmapData = new(realAngle, dis); heatmapDatas.Add(heatmapData); } if(heatmapDatas==null||heatmapDatas.Count<1) { radarHeatmap.ClearData(); } else radarHeatmap.SetData(heatmapDatas); } else { radarHeatmap.ClearData(); } }, onError: null ); } } }