GCYWLayer.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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. List<B08_StatisticsInfo.DateValuePair> temps = currentData.SortedDateValues;
  90. foreach (B08_StatisticsInfo.DateValuePair dateValue in temps)
  91. {
  92. tempXaxis.data.Add(dateValue.Date);
  93. }
  94. SerieData[] tempDatas = new SerieData[temps.Count];
  95. for (int i = 0; i < tempDatas.Length; i++)
  96. {
  97. tempDatas[i] = new SerieData();
  98. tempDatas[i].data = new List<double>();
  99. tempDatas[i].data.Add(i);
  100. tempDatas[i].data.Add(temps[i].Value);
  101. }
  102. tempSeries[0].data.Clear();
  103. tempSeries[0].data.AddRange(tempDatas);
  104. if (!GlobalData.B08_Type.Equals(currentIds))
  105. {
  106. await HttpHelper._Instance.InitGCYWData1(currentIds);
  107. }
  108. SetTFSJ_Data();
  109. //todo 其他信息获取
  110. // SetShuJuTongJiData();
  111. // SetXunJianBarChart();
  112. // SetGongChengGuanLiChart();
  113. //
  114. // await HttpHelper._Instance.B08_GetTaskList();
  115. taskListPanel.SetData(this);
  116. }
  117. catch (Exception e)
  118. {
  119. Debug.LogError("GCYWLayer ChangeData error"+e.ToString());
  120. }
  121. }
  122. public CameraBird cameraBird;
  123. private void OnEnable()
  124. {
  125. stationNames.Clear();
  126. ids.Clear();
  127. stationDropdown.ClearOptions();
  128. StaticLod.instance.OnFoucusStatic("Bird0");
  129. stationNames.AddRange(GlobalData.B08StationList.Keys.ToArray());
  130. ids.AddRange(GlobalData.B08StationList.Values.ToArray());
  131. stationDropdown.AddOptions(stationNames);
  132. stationDropdown.onValueChanged.AddListener(ChangeData);
  133. stationDropdown.value = 0;
  134. ChangeData(0);
  135. cameraBird = CameraManager.instance.mainCamera.GetComponent<CameraBird>();
  136. }
  137. public void SetGongChengGuanLiChart()
  138. {
  139. B08_projectExamine tempData = GlobalData.B08ProjectExamine;
  140. var tempSeries = gongChengGuanLiChart.series;
  141. int tempCount = 0;
  142. SerieData[] tempDatas = new SerieData[tempData.data.type1.Length];
  143. for (int i = 0; i < tempDatas.Length; i++)
  144. {
  145. tempDatas[i] = new SerieData();
  146. tempDatas[i].data = new List<double>();
  147. tempDatas[i].data.Add(i);
  148. tempDatas[i].data.Add(tempData.data.type1[i].value);
  149. tempDatas[i].name = tempData.data.type1[i].key;
  150. tempCount += tempData.data.type1[i].value;
  151. }
  152. tempSeries[0].data.Clear();
  153. tempSeries[0].data.AddRange(tempDatas);
  154. gongChengGuanLiChartCount.text = tempCount.ToString();
  155. var tempSeries_1 = fenJiKaoPingChart.series;
  156. SerieData[] tempDatas_1 = new SerieData[tempData.data.type2.Length];
  157. for (int i = 0; i < tempDatas_1.Length; i++)
  158. {
  159. tempDatas_1[i] = new SerieData();
  160. tempDatas_1[i].data = new List<double>();
  161. tempDatas_1[i].data.Add(i);
  162. tempDatas_1[i].data.Add(tempData.data.type2[i].value);
  163. tempDatas_1[i].name = tempData.data.type2[i].key;
  164. }
  165. tempSeries_1[0].data.Clear();
  166. tempSeries_1[0].data.AddRange(tempDatas_1);
  167. }
  168. public void SetTFSJ_Data()
  169. {
  170. B08_event tempData = GlobalData.B08Event;
  171. TFSJ_DaiChuLiNumTex.text = tempData.waitHandle.ToString();
  172. TFSJ_DaiYanShouNumTex.text = tempData.waitAccept.ToString();
  173. TFSJ_YiChuLiNumTex.text = tempData.hasHandle.ToString();
  174. TFSJ_completeText.text = $"{tempData.hasHandle*1.0f/tempData.total * 100.0f:0}%";
  175. TFSJ_completeSlider.fillAmount = tempData.hasHandle*1.0f/tempData.total;
  176. for (int i = 0; i < TFSJ_eventItems.Count; i++)
  177. {
  178. Destroy(TFSJ_eventItems[i]);
  179. }
  180. TFSJ_eventItems.Clear();
  181. for (int i = 0; i < tempData.rows.Count; i++)
  182. {
  183. var tempObj = Instantiate(eventListItemPrefab, TFSJ_eventItemContent).GetComponent<B08_EventListItem>();
  184. tempObj.Init(tempData.rows[i]);
  185. TFSJ_eventItems.Add(tempObj.gameObject);
  186. }
  187. // _tuFaShiJian_Count_Text.text =
  188. // $"{tempData.data.waitHandle + tempData.data.waitAccept + tempData.data.hasHandle}";
  189. // _tuFaShiJian_Vlaue_Text.text = $"{float.Parse(tempData.data.completeRate) * 100.0f:0}%";
  190. // _tuFaShiJian_Slider.fillAmount = float.Parse(tempData.data.completeRate);
  191. }
  192. // public void SetWTZG_Data()
  193. // {
  194. // B08_questionStatis tempData = GlobalData.B08QuestionStatis;
  195. // WTZG_DaiChuLiNumTex.text = tempData.data.waitHandle.ToString();
  196. // WTZG_DaiYanShouNumTex.text = tempData.data.waitAccept.ToString();
  197. // WTZG_YiChuLiNumTex.text = tempData.data.hasHandle.ToString();
  198. // WTZG_completeText.text = $"{float.Parse(tempData.data.completeRate) * 100.0f:0}%";
  199. // WTZG_completeSlider.fillAmount = float.Parse(tempData.data.completeRate);
  200. //
  201. // for (int i = 0; i < WTZG_eventItems.Count; i++)
  202. // {
  203. // Destroy(WTZG_eventItems[i]);
  204. // }
  205. //
  206. // WTZG_eventItems.Clear();
  207. // for (int i = 0; i < tempData.data.list.Count; i++)
  208. // {
  209. // var tempObj = Instantiate(eventListItemPrefab, WTZG_eventItemContent).GetComponent<B08_EventListItem>();
  210. // tempObj.Init(tempData.data.list[i]);
  211. // WTZG_eventItems.Add(tempObj.gameObject);
  212. // }
  213. //
  214. // _zhengGaiWenTi_Count_Text.text =
  215. // $"{tempData.data.waitHandle + tempData.data.waitAccept + tempData.data.hasHandle}";
  216. // _zhengGaiWenTi_Vlaue_Text.text = $"{float.Parse(tempData.data.completeRate) * 100.0f:0}%";
  217. // _zhengGaiWenTi_Slider.fillAmount = float.Parse(tempData.data.completeRate);
  218. // }
  219. // public void SetXJLE_Data()
  220. // {
  221. // B08_inspectType tempData = GlobalData.B08InspectType;
  222. // dianQiCountText.text = tempData.data[0].value.ToString();
  223. // zhaZhanCountText.text = tempData.data[1].value.ToString();
  224. // diFangCountText.text = tempData.data[2].value.ToString();
  225. // jiaoChaJianZhuCountText.text = tempData.data[3].value.ToString();
  226. // dingQiZhuanXiangCountText.text = tempData.data[4].value.ToString();
  227. // }
  228. public void CheckPathChange()
  229. {
  230. showCheckPath = !showCheckPath;
  231. //ActionInstance._Instance.SetCheckPathActive(showCheckPath);
  232. string textStr = showCheckPath ? "隐藏" : "显示";
  233. checkPathButtonText.text = $"巡检路线({textStr})";
  234. }
  235. // public void OpenTaskListPanel(int type)
  236. // {
  237. // taskListPanel.SetData(this,type);
  238. // TaskListPanelObj.SetActive(true);
  239. // }
  240. private B08_TaskLocation[] currentTaskLocation;
  241. private string taskTime;
  242. public void SetTaskImgPanelData(B08_TaskLocation[] itemsArray,string _time)
  243. {
  244. currentTaskLocation = itemsArray;
  245. taskTime = _time;
  246. //taskPhotoPanel.SetData(currentTaskItems[0],taskTime);
  247. taskPointLineRenderer.positionCount = 0;
  248. for (int i = 0; i < taskPointIcons.Count; i++)
  249. {
  250. Destroy(taskPointIcons[i].gameObject);
  251. }
  252. taskPointIcons.Clear();
  253. for (int i = 0; i < itemsArray.Length; i++)
  254. {
  255. GameObject ori = taskPointIconStartPrefab;
  256. if (i == 0) {
  257. ori = taskPointIconEndPrefab;
  258. }
  259. if (itemsArray[i].longitude != null && itemsArray[i].latitude != null)
  260. {
  261. GameObject tempObj = Instantiate(ori, taskPointIconContent);
  262. tempObj.name = itemsArray[i].locationTypeName;
  263. Vector2 longlatt = CoordinateConverter.GCJ02ToWGS84(double.Parse(itemsArray[i].longitude),
  264. double.Parse(itemsArray[i].latitude));
  265. tempObj.transform.position = CoordinateConverter.GeoToUnity(longlatt.x, longlatt.y) + Vector3.up * 41;
  266. tempObj.transform.localEulerAngles = new Vector3(-90f, 0f, 0f);
  267. tempObj.gameObject.SetActive(false);
  268. taskPointIcons.Add(tempObj);
  269. }
  270. }
  271. //taskPointLineRenderer.positionCount = itemsArray.Length;
  272. float allDistance = 0;
  273. UnityEngine.Vector3 prePos = UnityEngine.Vector3.zero;
  274. List<UnityEngine.Vector3> vector3s = new List<UnityEngine.Vector3>();
  275. for (int i = 0; i < taskPointIcons.Count; i++)
  276. {
  277. vector3s.Add(taskPointIcons[i].transform.position);
  278. if (i != 0)
  279. {
  280. allDistance += UnityEngine.Vector3.Distance(taskPointIcons[i].transform.position, prePos);
  281. }
  282. else {
  283. cameraBird.target.transform.position = taskPointIcons[i].transform.position;
  284. }
  285. if (i == 0 || i == taskPointIcons.Count - 1) {
  286. taskPointIcons[i].gameObject.SetActive(true);
  287. }
  288. //taskPointLineRenderer.SetPosition(i, taskPointIcons[i].transform.position);
  289. prePos = taskPointIcons[i].transform.position;
  290. }
  291. taskPointLineRenderer.GetComponent<DynamicLine>().SetDynamicPoint(vector3s);
  292. //taskPointLineRenderer.GetComponent<DynamicLine>().OnTouchIndex = (int index) =>
  293. //{
  294. // //Debug.Log(index);
  295. // taskPointIcons[index].gameObject.SetActive(true);
  296. //};
  297. }
  298. //public void SetTaskPointIconHeightLight(int index)
  299. //{
  300. // for (int i = 0; i < taskPointIcons.Count; i++)
  301. // {
  302. // taskPointIcons[i].SetHeightLight(i == index);
  303. // }
  304. //}
  305. // public void OpenTaskImgPanel(int openPage)
  306. // {
  307. // taskPhotoPanel.SetData(currentTaskItems[openPage],taskTime);
  308. // taskPhotoPanel.ChangePage(0);
  309. // taskPhotoPanelObj.SetActive(true);
  310. // }
  311. private void Update()
  312. {
  313. for (int i = 0; i < taskPointIcons.Count; i++) {
  314. taskPointIcons[i].transform.localScale = Vector3.one * (cameraBird.currentDistance / 60);
  315. }
  316. taskPointLineRenderer.GetComponent<LineRenderer>().startWidth = cameraBird.currentDistance / 25;
  317. taskPointLineRenderer.GetComponent<LineRenderer>().endWidth = cameraBird.currentDistance / 25;
  318. taskPointLineRenderer.GetComponent<LineRenderer>().material.SetTextureScale("_MainTex", new Vector2(250000/cameraBird.currentDistance, 1f));
  319. }
  320. }