using BestHTTP; using EasyInject.Attributes; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.Text; using Unity.VisualScripting; using UnityEngine; using static UnityEngine.EventSystems.EventTrigger; /// /// 初始化库存流程 /// [Component] public class InitStorageProcess : IProcessState { [Autowired] private readonly NetWorkComponent netWorkComponent; [Autowired] private readonly LocationStorageManage storageManage; [Autowired] private readonly ContainersManage containerManage; public string Name => "InitStorageProcess"; public int Priority => 2; private bool isExecuting; public bool IsExecuteProcess { get => isExecuting; set => isExecuting = value; } public void OnEnter() { IsExecuteProcess = true; Debug.Log("进入库存初始化流程"); ///平库 SendRequset(33, 50); SendRequset(1, 32); } private void SendRequset(int startRow, int endRow) { List ints = new List(); for (int i = startRow; i <= endRow; i++) { ints.Add(i.ToString("D2")); } netWorkComponent.RemoteGetStorageDataByRows(ints, RsultHandle); } public void RsultHandle(HTTPRequest originalRequest, HTTPResponse response) { if (response == null) { //请求错误重试 if(originalRequest.State == HTTPRequestStates.Error) { Debug.LogWarning("异常重试"); originalRequest.Send(); } return; } if (response.IsSuccess) { Debug.LogWarning("处理"); JObject keyValues = JObject.Parse(UTF8Encoding.UTF8.GetString(response.Data)); JToken containers = keyValues["object"]["containers"]; List storageResponses = JsonConvert.DeserializeObject>(containers.ToString()); if (storageResponses != null) { foreach (StorageResponseData responseData in storageResponses) { //无货的不往下处理了 if (string.IsNullOrEmpty(responseData.containerCode)) { continue; } //库位号 string storageName = responseData.locationCode; GameObject storageObj = storageManage.GetStorageByName(storageName); if (storageObj != null) { //赋值容器数据 ContainerEntity containerEntity = new(); containerEntity.channelType = responseData.channelType; containerEntity.location = responseData.locationCode; containerEntity.containerCode = responseData.containerCode; containerEntity.procedureCode = responseData.procedureCode; containerEntity.containerType = responseData.containerType; containerEntity.isEmpty = responseData.isEmpty; containerEntity.isTool = responseData.isTool; int row = int.Parse(storageObj.name.Split("-")[0]); if (row >= storageManage.startRow && row <= storageManage.endRow) { containerManage.CreateContainer(new Vector3(0, -0.2472343f, 0.0006999969f), storageObj.transform, containerEntity, storageObj.layer); } else { containerManage.CreateContainer(Vector3.zero, storageObj.transform, containerEntity, storageObj.layer); } } } } } } public void OnExit() { } public void OnUpdate() { } }