NG_/Assets/Scripts/Data/Controller/ChemicalDosageController.cs

106 lines
3.4 KiB
C#
Raw Normal View History

2024-12-13 19:40:05 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
// 危化品用量
public class ChemicalDosageController : MonoBehaviour,HttpController
{
private Transform dataView; // 显示对象
private HttpRequestHandler httpRequestHandler;
private int index = 0; // 数据下标
private List<ChemicalDosageData> chemicalDosageData;
private List<ChemicalDosageData> lastDatas; // 上一次的数据源
private string httpUrl=HttpRequestHandler.httpIp+"/chemical/chemicalOperation/inventoryDosageStatistics";
private string encryptText; // 加密文本
private bool firstLoad = true;
void OnEnable()
{
firstLoad = true;
dataView = transform;
httpRequestHandler = gameObject.AddComponent<HttpRequestHandler>();
encryptText = AESHelper.Encrypt("/chemical/chemicalOperation/inventoryDosageStatistics");
StartCoroutine(UpdateDataSource());
}
public IEnumerator UpdateDataSource()
{
while (true)
{
// 发起一个 POST 请求
string jsonData = "{\"encryptText\":\"" + encryptText + "\"}";
StartCoroutine(httpRequestHandler.PostRequest(httpUrl, jsonData, OnPostSuccess, OnError));
yield return new WaitForSeconds(4f);
}
}
// POST 请求成功回调
private void OnPostSuccess(string response)
{
Debug.Log("POST Success 危化品用量: " + DateTime.Now);
ReturnInfo<List<ChemicalDosageData>> returnInfo = JsonUtility.FromJson<ReturnInfo<List<ChemicalDosageData>>>(response);
chemicalDosageData = returnInfo.data;
if (firstLoad)
{
firstLoad = false;
UpdateDataView();
}
}
// 请求失败的回调
private void OnError(string error)
{
Debug.LogError("Request Error: " + error);
}
// 更新填充数据
private void UpdateDataView()
{
int count = chemicalDosageData.Count;
for (int i=0;i < dataView.childCount; i++)
{
// (index+i)%userDatas.Count()
// 当轮播图轮动多少次时列表的第一个数据就应该是数据源里的第多少个用i递增过去当超出数据源数量时使用%将多余的拿出去以获得正确的下标
string dosage = chemicalDosageData[(index + i) % count].TotalDosage +
chemicalDosageData[(index + i) % count].MeasuringUnit;
// 危化品名称
dataView.GetChild(i).GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>().text =
chemicalDosageData[(index+i)%count].ChemicalName == "" ? "无":chemicalDosageData[(index+i)%count].ChemicalName;
// 危化品用量
dataView.GetChild(i).GetChild(0).GetChild(1).GetComponent<TextMeshProUGUI>().text =
dosage == "" ? "无" : dosage;
}
}
// 更新下标
public void UpdateIndex()
{
// 轮播图每次轮动下标增加,下标达到数据源数量最大值时清零
if (chemicalDosageData == null)
{
return;
}
if (index<chemicalDosageData.Count-1)
{
index++;
}
else
{
index = 0;
}
UpdateDataView();
}
}