GCYWLayer.cs 15 KB

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