Files
SAMKWANG/Assets/Scripts/HTTP.cs
2025-12-08 09:34:41 +09:00

218 lines
6.5 KiB
C#

using Best.HTTP;
using Newtonsoft.Json;
using Samkwang;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text;
using UnityEngine;
public class HTTP : MonoBehaviour
{
public class Condition
{
public string max;
public string min;
public string type;
public string deviation;
}
[Serializable]
public class AlarmDatum
{
public string count;
public List<AlarmData> rows = new List<AlarmData>();
}
[Serializable]
public class AlarmManagementData
{
public int status;
public string code;
public string message;
public AlarmDatum data;
}
[Serializable]
public class AlarmData
{
public string id;
public string alarmType;
public string level;
public string state;
public string message;
public string code;
public string eqpId;
public string eqpName;
public string value;
public Condition condition;
public string setTime;
public string clearTime;
}
[Serializable]
public class ItemManagementData
{
public string status;
public string code;
public string message;
public ItemDatum data;
public string remark;
}
[Serializable]
public class ItemDatum
{
public string count;
public ItemData[] rows;
}
[Serializable]
public class ItemData
{
public string id;
public string modelId;
public string createUserId;
public string lastUpdateUserId;
public string itemCode;
public string itemName;
public string spec;
public string unit;
public string timestamp;
public string createdAt;
public string updatedAt;
public Model Model;
}
[Serializable]
public class Model
{
public string id;
public string previewFileld;
public string fileName;
public PrevieFile PreviewFile;
}
[Serializable]
public class PrevieFile
{
public string id;
public string title;
public string path;
public string type;
public string size;
public string createdAt;
}
private string itemServer = "https://samkwang-hub.flexing.ai/server/api/item-management/item";
private string alarmServer = "https://samkwang-hub.flexing.ai/server/api/unity-alarm-history";
private string api = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiZW1haWwiOiJzeXN0ZW0iLCJncm91cElkIjoxLCJncm91cENvZGUiOiIiLCJuYW1lIjoi7Iuc7Iqk7YWcIOq0gOumrOyekCIsInBob25lIjoiMDEwLTExMTEtMTExMSIsImlhdCI6MTc2MzA4MTA4NiwiZXhwIjoxODI2MTk2Mjg2LCJpc3MiOiJodWIifQ.BXZ9tghs9zjh-2zfqk3BOOjUZ2wLLNpGfDFTaD0SkFg";
public ItemManagementData itemManagementData;
public Action<ItemDatum> onItemDatum;
public AlarmManagementData alarmManagementData;
public Dictionary<string, AlarmInfo> alarmInfos = new();
public Action<List<AlarmInfo>> onSetStartAlarmData;
public void Start()
{
ItemServerConnect();
AlarmServerConnect();
}
public void ItemServerConnect()
{
var path = itemServer;
var request = HTTPRequest.CreateGet(path, RequestFinishedCallback);
request.AddHeader("access-token", api);
request.Send();
}
public void AlarmServerConnect()
{
var path = $"{alarmServer}?setTimeFrom={GetTodayStart()}&setTimeTo={GetTodayEnd()}&state=SET";
var request = HTTPRequest.CreateGet(path, RequestFinishedAlarmCallback);
request.AddHeader("access-token", api);
request.Send();
}
public string GetTodayStart()
{
DateTime start = DateTime.Today; // 00:00:00.000
string iso = start.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture);
return WebUtility.UrlEncode(iso);
}
public static string GetTodayEnd()
{
DateTime end = DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59).AddMilliseconds(999);
string iso = end.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture);
return WebUtility.UrlEncode(iso);
}
private void RequestFinishedCallback(HTTPRequest req, HTTPResponse resp)
{
switch (req.State)
{
case HTTPRequestStates.Finished:
if (resp.IsSuccess)
{
var payload = Encoding.UTF8.GetString(resp.Data);
var response = JsonConvert.DeserializeObject<ItemManagementData>(payload);
itemManagementData = response;
}
else
{
Debug.Log("Error");
}
break;
default:
break;
}
}
private void RequestFinishedAlarmCallback(HTTPRequest req, HTTPResponse resp)
{
switch (req.State)
{
case HTTPRequestStates.Finished:
if (resp.IsSuccess)
{
var payload = Encoding.UTF8.GetString(resp.Data);
var response = JsonConvert.DeserializeObject<AlarmManagementData>(payload);
alarmManagementData = response;
foreach(var alarmData in alarmManagementData.data.rows)
{
var alarmInfo = new AlarmInfo();
alarmInfo.id = alarmData.id;
alarmInfo.state = alarmData.state;
alarmInfo.message = alarmData.message;
alarmInfo.code = alarmData.code;
alarmInfo.set_time = alarmData.setTime;
alarmInfo.clear_time = alarmData.clearTime;
alarmInfo.workcd = alarmData.eqpId;
alarmInfo.worknm = alarmData.eqpName;
if (!alarmInfos.ContainsKey(alarmInfo.id))
{
alarmInfos.Add(alarmInfo.id, alarmInfo);
}
}
}
else
{
Debug.Log("Error");
}
break;
default:
break;
}
}
public void SetSendItemDatum()
{
onItemDatum?.Invoke(itemManagementData.data);
}
public void SetSendAlarmDatum()
{
onSetStartAlarmData?.Invoke(alarmInfos.Values.ToList());
}
}