killapp/Assets/Scripts/UI/Pages/HomePage/HomePageChartsCtrl.cs

186 lines
6.7 KiB
C#
Raw Normal View History

2026-06-08 08:55:10 +08:00
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
{
/// <summary>
/// 0天 1周 2月 3年
/// </summary>
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<KillCountDataResponse>(url);
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
totalText.text = data.data.total_count.ToString();
switch (nowChartIndex)
{
case 0:
List<int> daily = new List<int>();
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<int> weekly = new List<int>();
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<int> monthly = new List<int>();
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<int> annual = new List<int>();
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");
2026-06-17 17:37:49 +08:00
startTime = now.AddDays(-1).ToString("yyyy-MM-dd");
2026-06-08 08:55:10 +08:00
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<HeatmapDataListResponse>(url);
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
if (data.data.points != null && data.data.points.Count > 0)
{
List<RadarHeatmap.HeatmapData> 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);
}
2026-06-10 15:04:14 +08:00
if(heatmapDatas==null||heatmapDatas.Count<1)
{
radarHeatmap.ClearData();
}
else
radarHeatmap.SetData(heatmapDatas);
2026-06-08 08:55:10 +08:00
}
else
{
radarHeatmap.ClearData();
}
},
onError: null
);
}
}
}