GCYWLayer.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using MPUIKIT;
  6. using Unity.VisualScripting;
  7. using UnityEngine;
  8. using UnityEngine.Serialization;
  9. using UnityEngine.UI;
  10. using XCharts.Runtime;
  11. public class GCYWLayer : YZTRootLayer
  12. {
  13. private Dropdown stationDropdown;
  14. private Text _daiPaiGongText;
  15. private Text _daiXunJianText;
  16. private Text _xunJianZhongText;
  17. private Text _yiXunJianText;
  18. private BarChart wenTiTongJiBarChart;
  19. //突发事件总计
  20. private Text TFSJ_DaiPaiGongNumTex;
  21. private Text TFSJ_DaiChuLiNumTex;
  22. private Text TFSJ_DaiYanShouNumTex;
  23. private Text TFSJ_YiChuLiNumTex;
  24. private Text TFSJ_completeText;
  25. private MPImage TFSJ_completeSlider;
  26. public GameObject eventListItemPrefab;
  27. private List<GameObject> TFSJ_eventItems = new List<GameObject>();
  28. private Transform TFSJ_eventItemContent;
  29. //工程管理
  30. private PieChart gongChengGuanLiChart;
  31. private PieChart fenJiKaoPingChart;
  32. private Text gongChengGuanLiChartCount;
  33. private Button checkPathButton;
  34. private Text checkPathButtonText;
  35. private bool showCheckPath = false;
  36. public TaskListPanel taskListPanel;
  37. //public GameObject taskPhotoPanelObj;
  38. //public TaskPhotoPanel taskPhotoPanel;
  39. public GameObject taskPointIconStartPrefab;
  40. public GameObject taskPointIconEndPrefab;
  41. public Transform taskPointIconContent;
  42. public List<GameObject> taskPointIcons = new List<GameObject>();
  43. public LineRenderer taskPointLineRenderer;
  44. //public Button closePanelBtn;
  45. private List<string> stationNames = new List<string>();
  46. private List<string> ids = new List<string>();
  47. private string currentIds = "";
  48. private void Awake()
  49. {
  50. Init();
  51. }
  52. public void Init()
  53. {
  54. stationDropdown = this.transform.Find("Dropdown").GetComponent<Dropdown>();
  55. _daiPaiGongText = this.transform.Find("ShuJuTongJi/DaiPaiGong/title/numText").GetComponent<Text>();
  56. _daiXunJianText = this.transform.Find("ShuJuTongJi/DaiXunJian/title/numText").GetComponent<Text>();
  57. _xunJianZhongText = this.transform.Find("ShuJuTongJi/XunJianZhong/title/numText").GetComponent<Text>();
  58. _yiXunJianText = this.transform.Find("ShuJuTongJi/YiXunJian/title/numText").GetComponent<Text>();
  59. wenTiTongJiBarChart = this.transform.Find("ShuJuTongJi/XunJianTongJi/BarChart").GetComponent<BarChart>();
  60. gongChengGuanLiChart = this.transform.Find("GongChengGuanLi/GuanLiJianCha").GetComponent<PieChart>();
  61. gongChengGuanLiChartCount =
  62. this.transform.Find("GongChengGuanLi/GuanLiJianCha/count/numText").GetComponent<Text>();
  63. fenJiKaoPingChart = this.transform.Find("GongChengGuanLi/FenJiKaoPing").GetComponent<PieChart>();
  64. TFSJ_DaiPaiGongNumTex = this.transform.Find("TuFaShiJian/DaiPaiGong/count").GetComponent<Text>();
  65. TFSJ_DaiChuLiNumTex = this.transform.Find("TuFaShiJian/DaiChuLi/count").GetComponent<Text>();
  66. TFSJ_DaiYanShouNumTex = this.transform.Find("TuFaShiJian/DaiYanShou/count").GetComponent<Text>();
  67. TFSJ_YiChuLiNumTex = this.transform.Find("TuFaShiJian/YiChuLi/count").GetComponent<Text>();
  68. TFSJ_completeText = this.transform.Find("TuFaShiJian/completeText/numText").GetComponent<Text>();
  69. TFSJ_completeSlider = this.transform.Find("TuFaShiJian/slider").GetComponent<MPImage>();
  70. TFSJ_eventItemContent = this.transform.Find("TuFaShiJian/TuFaShiJianTongBao/ScrollView/Viewport/Content");
  71. checkPathButton = this.transform.Find("CheckPathButton").GetComponent<Button>();
  72. checkPathButtonText = checkPathButton.GetComponentInChildren<Text>();
  73. checkPathButton.onClick.AddListener(CheckPathChange);
  74. }
  75. private async void ChangeData(int type)
  76. {
  77. try
  78. {
  79. currentIds = ids[type];
  80. showCheckPath = false;
  81. string textStr = showCheckPath ? "隐藏" : "显示";
  82. checkPathButtonText.text = $"巡检路线({textStr})";
  83. var currentData = GlobalData.B08StatisticsInfo[stationNames[type]];
  84. _daiPaiGongText.text = $"{currentData.waitDispatch}";
  85. _daiXunJianText.text = $"{currentData.waitPatrol}";
  86. _xunJianZhongText.text = $"{currentData.onPatrol}";
  87. _yiXunJianText.text = $"{currentData.patrolCompleted}";
  88. var tempSeries = wenTiTongJiBarChart.series;
  89. XAxis tempXaxis = wenTiTongJiBarChart.GetChartComponent<XAxis>();
  90. tempXaxis.data.Clear();
  91. List<B08_StatisticsInfo.DateValuePair> temps = currentData.SortedDateValues;
  92. foreach (B08_StatisticsInfo.DateValuePair dateValue in temps)
  93. {
  94. tempXaxis.data.Add(dateValue.Date);
  95. }
  96. SerieData[] tempDatas = new SerieData[temps.Count];
  97. for (int i = 0; i < tempDatas.Length; i++)
  98. {
  99. tempDatas[i] = new SerieData();
  100. tempDatas[i].data = new List<double>();
  101. tempDatas[i].data.Add(i);
  102. tempDatas[i].data.Add(temps[i].Value);
  103. }
  104. tempSeries[0].data.Clear();
  105. tempSeries[0].data.AddRange(tempDatas);
  106. if (!GlobalData.B08_Type.Equals(currentIds))
  107. {
  108. await HttpHelper._Instance.InitGCYWData1(currentIds);
  109. }
  110. SetTFSJ_Data();
  111. taskListPanel.SetData(this);
  112. }
  113. catch (Exception e)
  114. {
  115. Debug.LogError("GCYWLayer ChangeData error"+e.ToString());
  116. }
  117. }
  118. public CameraBird cameraBird;
  119. private void OnEnable()
  120. {
  121. stationNames.Clear();
  122. ids.Clear();
  123. stationDropdown.ClearOptions();
  124. StaticLod.instance.OnFoucusStatic("Bird0");
  125. stationNames.AddRange(GlobalData.B08StationList.Keys.ToArray());
  126. ids.AddRange(GlobalData.B08StationList.Values.ToArray());
  127. stationDropdown.AddOptions(stationNames);
  128. stationDropdown.onValueChanged.AddListener(ChangeData);
  129. stationDropdown.value = 0;
  130. SetChart();
  131. ChangeData(0);
  132. cameraBird = CameraManager.instance.mainCamera.GetComponent<CameraBird>();
  133. }
  134. public void SetChart()
  135. {
  136. if (GlobalData.B08Char1 != null)
  137. {
  138. var tempData = GlobalData.B08Char1;
  139. var tempSeries = gongChengGuanLiChart.series;
  140. int tempCount = 0;
  141. SerieData[] tempDatas = new SerieData[tempData.data.Length];
  142. for (int i = 0; i < tempDatas.Length; i++)
  143. {
  144. tempDatas[i] = new SerieData();
  145. tempDatas[i].data = new List<double>();
  146. tempDatas[i].data.Add(i);
  147. tempDatas[i].data.Add(tempData.data[i].count);
  148. tempDatas[i].name = tempData.data[i].name;
  149. tempCount += tempData.data[i].count;
  150. }
  151. tempSeries[0].data.Clear();
  152. tempSeries[0].data.AddRange(tempDatas);
  153. gongChengGuanLiChartCount.text = tempCount.ToString();
  154. gongChengGuanLiChart.RefreshChart();
  155. }
  156. if (GlobalData.B08Char2 != null)
  157. {
  158. var tempdata_1 = GlobalData.B08Char2;
  159. var tempSeries_1 = fenJiKaoPingChart.series;
  160. SerieData[] tempDatas_1 = new SerieData[4];
  161. for (int i = 0; i < tempDatas_1.Length; i++)
  162. {
  163. tempDatas_1[i] = new SerieData();
  164. tempDatas_1[i].data = new List<double>();
  165. tempDatas_1[i].data.Add(i);
  166. switch (i)
  167. {
  168. case 0:
  169. tempDatas_1[i].data.Add(tempdata_1.data.grade1);
  170. tempDatas_1[i].name = "低";
  171. break;
  172. case 1:
  173. tempDatas_1[i].data.Add(tempdata_1.data.grade2);
  174. tempDatas_1[i].name = "中";
  175. break;
  176. case 2:
  177. tempDatas_1[i].data.Add(tempdata_1.data.grade3);
  178. tempDatas_1[i].name = "高";
  179. break;
  180. case 3:
  181. tempDatas_1[i].data.Add(tempdata_1.data.grade4);
  182. tempDatas_1[i].name = "紧急";
  183. break;
  184. }
  185. }
  186. tempSeries_1[0].data.Clear();
  187. tempSeries_1[0].data.AddRange(tempDatas_1);
  188. fenJiKaoPingChart.RefreshChart();
  189. }
  190. }
  191. public void SetTFSJ_Data()
  192. {
  193. B08_event tempData = GlobalData.B08Event;
  194. TFSJ_DaiPaiGongNumTex.text = tempData.waitWork.ToString();
  195. TFSJ_DaiChuLiNumTex.text = tempData.waitHandle.ToString();
  196. TFSJ_DaiYanShouNumTex.text = tempData.waitAccept.ToString();
  197. TFSJ_YiChuLiNumTex.text = tempData.hasHandle.ToString();
  198. TFSJ_completeText.text = $"{tempData.hasHandle*1.0f/tempData.total * 100.0f:0}%";
  199. TFSJ_completeSlider.fillAmount = tempData.hasHandle*1.0f/tempData.total;
  200. for (int i = 0; i < TFSJ_eventItems.Count; i++)
  201. {
  202. Destroy(TFSJ_eventItems[i]);
  203. }
  204. TFSJ_eventItems.Clear();
  205. for (int i = 0; i < tempData.rows.Count; i++)
  206. {
  207. var tempObj = Instantiate(eventListItemPrefab, TFSJ_eventItemContent).GetComponent<B08_EventListItem>();
  208. tempObj.Init(tempData.rows[i]);
  209. TFSJ_eventItems.Add(tempObj.gameObject);
  210. }
  211. // _tuFaShiJian_Count_Text.text =
  212. // $"{tempData.data.waitHandle + tempData.data.waitAccept + tempData.data.hasHandle}";
  213. // _tuFaShiJian_Vlaue_Text.text = $"{float.Parse(tempData.data.completeRate) * 100.0f:0}%";
  214. // _tuFaShiJian_Slider.fillAmount = float.Parse(tempData.data.completeRate);
  215. }
  216. public void CheckPathChange()
  217. {
  218. showCheckPath = !showCheckPath;
  219. //ActionInstance._Instance.SetCheckPathActive(showCheckPath);
  220. string textStr = showCheckPath ? "隐藏" : "显示";
  221. checkPathButtonText.text = $"巡检路线({textStr})";
  222. }
  223. // public void OpenTaskListPanel(int type)
  224. // {
  225. // taskListPanel.SetData(this,type);
  226. // TaskListPanelObj.SetActive(true);
  227. // }
  228. private B08_TaskLocation[] currentTaskLocation;
  229. private string taskTime;
  230. public void SetTaskImgPanelData(B08_TaskLocation[] itemsArray,string _time)
  231. {
  232. currentTaskLocation = itemsArray;
  233. taskTime = _time;
  234. //taskPhotoPanel.SetData(currentTaskItems[0],taskTime);
  235. taskPointLineRenderer.positionCount = 0;
  236. for (int i = 0; i < taskPointIcons.Count; i++)
  237. {
  238. Destroy(taskPointIcons[i].gameObject);
  239. }
  240. taskPointIcons.Clear();
  241. for (int i = 0; i < itemsArray.Length; i++)
  242. {
  243. GameObject ori = taskPointIconStartPrefab;
  244. if (i == 0) {
  245. ori = taskPointIconEndPrefab;
  246. }
  247. if (itemsArray[i].longitude != null && itemsArray[i].latitude != null)
  248. {
  249. GameObject tempObj = Instantiate(ori, taskPointIconContent);
  250. tempObj.name = itemsArray[i].locationTypeName;
  251. Vector2 longlatt = CoordinateConverter.GCJ02ToWGS84(double.Parse(itemsArray[i].longitude),
  252. double.Parse(itemsArray[i].latitude));
  253. tempObj.transform.position = CoordinateConverter.GeoToUnity(longlatt.x, longlatt.y) + Vector3.up * 41;
  254. tempObj.transform.localEulerAngles = new Vector3(-90f, 0f, 0f);
  255. tempObj.gameObject.SetActive(false);
  256. taskPointIcons.Add(tempObj);
  257. }
  258. }
  259. //taskPointLineRenderer.positionCount = itemsArray.Length;
  260. float allDistance = 0;
  261. UnityEngine.Vector3 prePos = UnityEngine.Vector3.zero;
  262. List<UnityEngine.Vector3> vector3s = new List<UnityEngine.Vector3>();
  263. for (int i = 0; i < taskPointIcons.Count; i++)
  264. {
  265. vector3s.Add(taskPointIcons[i].transform.position);
  266. if (i != 0)
  267. {
  268. allDistance += UnityEngine.Vector3.Distance(taskPointIcons[i].transform.position, prePos);
  269. }
  270. else {
  271. cameraBird.target.transform.position = taskPointIcons[i].transform.position;
  272. }
  273. if (i == 0 || i == taskPointIcons.Count - 1) {
  274. taskPointIcons[i].gameObject.SetActive(true);
  275. }
  276. //taskPointLineRenderer.SetPosition(i, taskPointIcons[i].transform.position);
  277. prePos = taskPointIcons[i].transform.position;
  278. }
  279. taskPointLineRenderer.GetComponent<DynamicLine>().SetDynamicPoint(vector3s);
  280. //taskPointLineRenderer.GetComponent<DynamicLine>().OnTouchIndex = (int index) =>
  281. //{
  282. // //Debug.Log(index);
  283. // taskPointIcons[index].gameObject.SetActive(true);
  284. //};
  285. }
  286. //public void SetTaskPointIconHeightLight(int index)
  287. //{
  288. // for (int i = 0; i < taskPointIcons.Count; i++)
  289. // {
  290. // taskPointIcons[i].SetHeightLight(i == index);
  291. // }
  292. //}
  293. // public void OpenTaskImgPanel(int openPage)
  294. // {
  295. // taskPhotoPanel.SetData(currentTaskItems[openPage],taskTime);
  296. // taskPhotoPanel.ChangePage(0);
  297. // taskPhotoPanelObj.SetActive(true);
  298. // }
  299. private void Update()
  300. {
  301. for (int i = 0; i < taskPointIcons.Count; i++) {
  302. taskPointIcons[i].transform.localScale = Vector3.one * (cameraBird.currentDistance / 60);
  303. }
  304. taskPointLineRenderer.GetComponent<LineRenderer>().startWidth = cameraBird.currentDistance / 25;
  305. taskPointLineRenderer.GetComponent<LineRenderer>().endWidth = cameraBird.currentDistance / 25;
  306. taskPointLineRenderer.GetComponent<LineRenderer>().material.SetTextureScale("_MainTex", new Vector2(250000/cameraBird.currentDistance, 1f));
  307. }
  308. }