using EasyInject.Attributes; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; /// /// 库存信息管理 /// [GameObjectBean] [AddComponentMenu("WXDC/Storage/LocationStorageManage")] public class LocationStorageManage : MonoBehaviour,IStorageSocketDataHandle { [Autowired("WmsStorageWebsocket")] private WmsStorageWebsocket wmsStorageWebsocket; /// /// 库位信息维护,库位信息等来源 /// [Header("所有库位信息")] public List storages = new List (); [Header("所有站台列信息")] public List localtionStorages = new List(); [Autowired] private ContainersManage containerManage; [Header("平库开始排")] [SerializeField] public int startRow = 33; [Header("平库结束排")] [SerializeField] public int endRow = 80; private void Start() { storages = FindObjectsWithDashInName(); storages.AddRange(localtionStorages); } /// /// 根据正则表达式查找名称 /// /// 符合条件的游戏对象列表 private List FindObjectsWithDashInName() { List result = new List(); // 正则表达式:匹配 Regex regex = new Regex("^\\d{2}-\\d{2}-\\d{2}$"); foreach (GameObject obj in GameObject.FindObjectsByType(FindObjectsSortMode.InstanceID)) { // 1. 检查名称是否匹配正则表达式 if (regex.IsMatch(obj.name)) { result.Add(obj); } } return result; } public GameObject GetStorageByName(string code) { return storages.Find(v=> string.Equals(v.name,code)); } public GameObject GetStorageByName(int row,int cloumn,int layer) { string name = row.ToString("D2") + "-" + cloumn.ToString("D2") + "-" + layer.ToString("D2"); return storages.Find(v => string.Equals(v.name, name)); } public void DataHandle(object data, object other = null) { LocationStorageInfo info = (LocationStorageInfo)data; //空数据直接结束 if (info == null) { return; } //库位无锁状态处理 if(info.locked == 0) { //先拿到库位 GameObject storage = storages.Find(v => string.Equals(v.name, info.code)); if (storage == null) { return ; } //库位没有锁且没有条码了,场景存在容器移除 //还需要判断当前模型父组件是库位 if (string.IsNullOrEmpty(info.containerCode)){ if (storage != null) { //库位内,有这个模型移除 Container container = storage.GetComponentInChildren(); //移除 containerManage.RemoveContainer(container); } } else { //如果场景存在托盘则不创建了 Container container = containerManage.GetContainerByCode(info.containerCode); if (container != null && container.gameObject.activeSelf) { return; } int row = int.Parse(storage.name.Split("-")[0]); ContainerEntity entity = new(); entity.location = info.code; entity.containerCode = info.containerCode; entity.containerType = info.containerTypeCode; if (row >= startRow && row <= endRow) { containerManage.CreateContainer(new Vector3(0, -0.2472343f, 0.0006999969f), storage.transform, entity, storage.layer); } else { containerManage.CreateContainer(Vector3.zero, storage.transform, entity, storage.layer); } } } } }