186 lines
6.7 KiB
C#
186 lines
6.7 KiB
C#
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");
|
|
startTime = now.AddDays(-1).ToString("yyyy-MM-dd");
|
|
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);
|
|
}
|
|
if(heatmapDatas==null||heatmapDatas.Count<1)
|
|
{
|
|
radarHeatmap.ClearData();
|
|
}
|
|
else
|
|
radarHeatmap.SetData(heatmapDatas);
|
|
|
|
}
|
|
else
|
|
{
|
|
radarHeatmap.ClearData();
|
|
}
|
|
},
|
|
onError: null
|
|
);
|
|
}
|
|
}
|
|
|
|
}
|