using Adam; using Cysharp.Threading.Tasks; using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class DataController : MonoSingleton { private CityInfo[] cityInfos; [HideInInspector] public List> loadingAreaDataTasks = new List>(); [HideInInspector] public List> loadingScreenTopStatisticsTasks = new List>(); /// /// 省级视角下得区县信息 /// private AreaStationData areaStationData = new AreaStationData(); /// /// 弹出框信息 /// private AreaData[] areaPopUpDatasTasksReturnValue; /// /// 市级视角中得区县信息 /// private AreaStationData[] areaStationDatasTasksReturnValue; /// /// 区县站点信息 /// private List screenTopStatisticss = new List(); /// /// 企业信息 /// public AreaCompanyInformationData companyInformationData = new AreaCompanyInformationData(); private Dictionary urlDic = new Dictionary(); public CompanyInfo companyPointPrefab; public GameObject btns; public List companyPoint = new List(); public int currentStationID = 0; private void Awake() { var serverConfig = new System.Uri(Path.Combine(Application.streamingAssetsPath + @"/Config", "WebAddress.json")); GetText(serverConfig.ToString(), (temp) => { if (!String.IsNullOrWhiteSpace(temp)) { urlDic = JsonConvert.DeserializeObject>(temp); } else { Debug.Log("加载配置文件错误"); } }); } public void GetText(string url, Action actionResult) { StartCoroutine(FileUtil.GetTextAsyn(url, actionResult)); } private void Start() { #if UNITY_WEBGL && !UNITY_EDITOR btns.SetActive(false); #endif Bootstrap.Instance.webAdapter.onStation.AddListener(SwitchStation); Bootstrap.Instance.webAdapter.onStartRequest.AddListener(OnInit); } public void TEstStation(int index) { SwitchStation(index); } public void OnTEstBtn() { OnInit(); } private async void OnInit() { await UniTask.Delay(1); //GetAllCompanyInfo("37"); areaStationData = await GetProvincialLevelStationData("37"); cityInfos = transform.GetComponentsInChildren(); for (int i = 0; i < cityInfos.Length; i++) { cityInfos[i].Init(); } areaStationDatasTasksReturnValue = await UniTask.WhenAll(loadingScreenTopStatisticsTasks); for (int i = 0; i < areaStationDatasTasksReturnValue.Length; i++) { List tempDI = areaStationDatasTasksReturnValue[i].data; if (tempDI != null && tempDI.Count > 0) { for (int j = 0; j < tempDI.Count; j++) { screenTopStatisticss.Add(tempDI[j].screenTopStatistics); } } } for (int i = 0; i < cityInfos.Length; i++) { string distCodeTemp = cityInfos[i].distCode; if (distCodeTemp.Length == 6) cityInfos[i].SetStationData(GetAreLevelStationDataByDistCode(distCodeTemp)); } } public async void GetAllCompanyInfo(string _distCode) { companyInformationData = await GetAreaCompanyInformationData(_distCode); for (int i = 0; i < companyInformationData.data.Count; i++) { Coordinate coords = new Coordinate(); coords.lat = companyInformationData.data[i].latitude; coords.lon = companyInformationData.data[i].longitude; coords.alt = 1986; CompanyInfo obj = Instantiate(companyPointPrefab); obj.companyInfo = companyInformationData.data[i]; obj.transform.position = coords.AsVector3(); companyPoint.Add(obj); //Vector3 temp = WebApiExtension.GPSToVector3(companyInformationData.data[i].latitude, companyInformationData.data[i].longitude); } } public void RemoveCompanyPoint() { if (companyPoint.Count > 0) { for (int i = 0; i < companyPoint.Count; i++) { Destroy(companyPoint[i].gameObject); } companyPoint.Clear(); } } /// /// 切换资源站点 /// /// public void SwitchStation(int stationIndex) { currentStationID = stationIndex; for (int i = 0; i < cityInfos.Length; i++) { cityInfos[i].SetScreenTopStatistices(stationIndex); } } public string CurrentStation() { string currentStationId = ""; switch (currentStationID) { case 0: currentStationId = "cons"; break; case 1: currentStationId = ""; break; case 2: currentStationId = "10100500"; break; case 3: currentStationId = "10100200"; break; case 4: currentStationId = "10100300"; break; case 5: currentStationId = "10100400"; break; case 6: currentStationId = "10100100"; break; default: break; } return $"?resourceType={currentStationId}"; } /// /// 获取所有企业信息 /// /// /// /// public async UniTask GetAreaCompanyInformationData(string _distCode) { string url = urlDic["地图企业用户资源"]; return await AsyncWebReq.Get(url + _distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); } /// /// 通过市级视角去获取区县得资源站点数据 /// /// /// public ScreenTopStatistics GetAreLevelStationDataByDistCode(string _distCode) { for (int i = 0; i < screenTopStatisticss.Count; i++) { if (screenTopStatisticss[i] != null && screenTopStatisticss[i].distCode == _distCode) { return screenTopStatisticss[i]; } } return null; } /// /// 针对市级区域 /// /// /// public ScreenTopStatistics GetProvincialLevelStationDataByDistCode(string _distCode) { for (int i = 0; i < areaStationData.data.Count; i++) { if (areaStationData.data[i].distCode == _distCode) { return areaStationData.data[i].screenTopStatistics; } } return null; } /// /// 获取每个区域的聚合信息 /// /// /// public async UniTask GetAreaPopUpDataByDistCode(string _distCode) { //await UniTask.Delay(2); string url = urlDic["地图弹出框"]; AreaData areaData = await AsyncWebReq.Get($"{url}{_distCode}{CurrentStation()}", Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); if (!bool.Parse(areaData.success)) return null; return areaData; } /// /// 获取所有弹出框 /// /// /// public AreaData GetAreaDateByDistCode(string _distCode) { for (int i = 0; i < areaPopUpDatasTasksReturnValue.Length; i++) { if (areaPopUpDatasTasksReturnValue[i].data.distCode == _distCode) { return areaPopUpDatasTasksReturnValue[i]; } } return null; } /// /// 获取地图汇总 /// /// /// public async UniTask GetProvincialLevelStationData(string _distCode) { string url = urlDic["地图信息汇总"]; AreaStationData areaStationData = await AsyncWebReq.Get(url + _distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token); return areaStationData; } }