LangChaoJiekou.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. using LitJson;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Text;
  9. using UnityEngine;
  10. using UnityEngine.Networking;
  11. using UnityEngine.UI;
  12. public class LangChaoJiekou : MonoSingleton<LangChaoJiekou>
  13. {
  14. //1.调用 /task/getMyList接口传参为header中的Authorization和distributeTarget(机房名称,后续根据需要再修改),这个接口跟上边的/task/getList接口返回的内容结构是一样的,所以这个几口下我没再写返回定义
  15. //2.通过/task/getMyList可以查询到是否有任务,有的话返回值里有inspId字段,是巡检任务的ID
  16. //根据这个inspId调用/insp/getInfo接口获取巡检的详细信息,主要是inspItemList里有这次巡检需要巡检的巡检项ID列表
  17. //3./inspItem/getList这个接口返回的是系统中定义的所有巡检项,通过inspItemList中的ID可以对应出本次巡检任务中的巡检项信息
  18. //4.开始巡检时调用/record/execute接口,参数id传distributeId的值
  19. //5.通过/record/addRecord接口上传巡检项的巡检记录,其中distributeId来自/task/getMyList的接口返回
  20. //6.图片文件通过文件上传接口上传,然后将上传接口返回的data字段的值存到recordImg字段中,多张图片的返回值可以用逗号隔开
  21. //7.通过/record/getRecord接口查询回显数据,查询出的图片字段想要显示可以分别调用文件下载接口,将值作为fileName参数就可以得到
  22. //inline的图片了
  23. public const string insp_getlist = "/inms/metaverse-cooperate/insp/getInfo";
  24. public const string inspItem_getlist = "/inms/metaverse-cooperate/inspItem/getList";
  25. public const string task_getlist = "/inms/metaverse-cooperate/task/getList";
  26. public const string task_getMyList = "/inms/metaverse-cooperate/task/getMyList";
  27. public const string record_addRecord = "/inms/metaverse-cooperate/record/addRecord";
  28. public const string record_getRecord = "/inms/metaverse-cooperate/record/getRecord";
  29. public const string anon_login = "/inms/api/auth-external-microservice/v1/public/anon/login";
  30. public const string file_upload = "/inms/metaverse-cooperate/file/upload";
  31. public const string file_download = "/inms/metaverse-cooperate/file/download";
  32. public const string execute = "/inms/metaverse-cooperate/record/execute";
  33. public string token = "";
  34. Dictionary<string, string> requestHeader = new Dictionary<string, string>(); // header
  35. //登录
  36. public void GotToLogin(string username, string password,Action<bool> callback)
  37. {
  38. JsonData data = new JsonData();
  39. data["appCode"] = "METAVERSE";
  40. data["password"] = password;
  41. data["username"] = username;
  42. StartCoroutine(SendHttp(anon_login, data.ToJson(), (string msg) =>
  43. {
  44. Debug.Log("anon_login===>" + msg);
  45. try
  46. {
  47. JsonData d = JsonMapper.ToObject(msg);
  48. token = d["data"]["token"]["accessToken"].ToString();
  49. login.UserInfo.Instance.Token = token;
  50. callback.Invoke(true);
  51. }
  52. catch
  53. {
  54. callback.Invoke(false);
  55. }
  56. }));
  57. }
  58. //检查是否有巡检
  59. public void checkXunjian(string distributeTarget,Action<TaskItem> callback)
  60. {
  61. JsonData data = new JsonData();
  62. data["distributeTarget"] = distributeTarget;//"机房A";
  63. StartCoroutine(SendHttp(task_getMyList, data.ToJson(), (string msg) => {
  64. Debug.Log("task_getMyList===>" + msg);
  65. try
  66. {
  67. JsonData data = JsonMapper.ToObject(msg);
  68. TaskItem ti = JsonConvert.DeserializeObject<TaskItem>(data["data"]["records"][0].ToJson());
  69. if(ti.inspId!=null)
  70. callback.Invoke(ti);
  71. else
  72. callback.Invoke(null);
  73. }
  74. catch
  75. {
  76. callback.Invoke(null);
  77. }
  78. }));
  79. }
  80. //获取巡检项目列表
  81. public void getXunJian(TaskItem ti,Action<List<RoomItem>> callback)
  82. {
  83. JsonData data = new JsonData();
  84. data["id"] = ti.distributeId;
  85. StartCoroutine(SendHttp(record_getRecord, data.ToJson(), (string msg) =>
  86. {
  87. Debug.Log("record_getRecord===>"+msg);
  88. List<Record> tslist = new List<Record>();
  89. try
  90. {
  91. JsonData data2 = JsonMapper.ToObject(msg);
  92. tslist = JsonConvert.DeserializeObject<List<Record>>(data2["data"]["recordList"].ToJson());
  93. }
  94. catch
  95. {
  96. }
  97. JsonData data = new JsonData();
  98. data["inspId"] = ti.inspId;
  99. StartCoroutine(SendHttp(insp_getlist, data.ToJson(), (string msg) => {
  100. Debug.Log("inspItem_getlist===>" + msg);
  101. JsonData d2 = JsonMapper.ToObject(msg);
  102. try
  103. {
  104. List<RoomItem> rdlist = JsonConvert.DeserializeObject<List<RoomItem>>(d2["data"]["inspItemList"].ToJson());
  105. for (int i = 0; i < rdlist.Count; i++)
  106. {
  107. for (int j = 0; j < tslist.Count; j++)
  108. {
  109. if (rdlist[i].inspItemId == tslist[j].inspItemId)
  110. {
  111. rdlist[i].recd = tslist[j];
  112. }
  113. }
  114. }
  115. callback.Invoke(rdlist);
  116. }
  117. catch
  118. {
  119. callback.Invoke(new List<RoomItem>());
  120. }
  121. }, "", false));
  122. },"",false));
  123. }
  124. //上报记录
  125. public void addRecord(Record add,Action<bool> callback)
  126. {
  127. /*
  128. AddRecord add = new AddRecord();
  129. add.distributeId = ti.distributeId;
  130. add.recordTargetType = "1";
  131. add.recordTarget = ti.distributeTarget;
  132. add.recordTargetId = ti.distributeTargetId;
  133. add.inspItemId = "1722899997636894720";
  134. add.inspItemName = "机房巡检项1";
  135. add.recordImg = "common/2023/12/file.png";
  136. add.recordMemo = "异常情况2";
  137. add.recordStatus = "0";
  138. addRecord(add, (bool b) => { });*/
  139. Debug.Log("DGJ ===> addRecord " + JsonConvert.SerializeObject(add));
  140. StartCoroutine(SendHttp(record_addRecord, JsonConvert.SerializeObject(add), (string msg) => {
  141. try
  142. {
  143. JsonData data = JsonMapper.ToObject(msg);
  144. if (data["msg"].ToString() == "Success")
  145. {
  146. callback.Invoke(true);
  147. }else
  148. {
  149. callback.Invoke(false);
  150. }
  151. }
  152. catch
  153. {
  154. callback.Invoke(false);
  155. }
  156. Debug.Log("record_addRecord====>" + msg);
  157. }));
  158. }
  159. public class TaskItem
  160. {
  161. public string distributeId;
  162. public string inspId;
  163. public string resourcePool;
  164. public string distributeTime;
  165. public string distributeName;
  166. public string distributeTarget;
  167. public string distributeTargetId;
  168. public string distributePerson;
  169. public string distributePersonName;
  170. public string distributeExecutor;
  171. public string distributeExecutorName;
  172. public string distributeExecuteTime;
  173. public string inspType;
  174. public string distributeStatus;
  175. public string remindId;
  176. public string updateTime;
  177. public string createTime;
  178. }
  179. public class RoomError
  180. {
  181. public string createTime;
  182. public string itemErrorId;
  183. public string createUser;
  184. public string createUserName;
  185. public string inspItemId;
  186. public string itemErrorName;
  187. }
  188. public class RoomItem
  189. {
  190. public string createTime;
  191. public string inspItemType;
  192. public List<RoomError> errorList;
  193. public string inspItemName;
  194. public string inspItemDesc;
  195. public string createUser;
  196. public string createUserName;
  197. public string inspItemId;
  198. public Record recd;
  199. }
  200. /// <summary>
  201. /// 上报信息
  202. /// </summary>
  203. public class Record
  204. {
  205. public string distributeId;
  206. public string recordTargetType;
  207. public string recordTarget;
  208. public string recordTargetId;
  209. public string inspItemId;
  210. public string inspItemName;
  211. // public string recordImg; // 图片
  212. public string recordMemo; // 巡检备注
  213. public string recordStatus;// 1-正常 0-异常
  214. public List<string> recordImgList;// 图片
  215. }
  216. public void Start()
  217. {
  218. /* GotToLogin("lisongnan", "13579Wp!#%&(", (bool b) => {
  219. if (b)
  220. {
  221. }
  222. });
  223. */
  224. //测试接口
  225. /* GotToLogin("lisongnan", "13579Wp!#%&(",(bool b)=> {
  226. if (b)
  227. {
  228. checkXunjian("机房A", (TaskItem item) => {
  229. if(item!=null)
  230. {
  231. getXunJian(item, (List<RoomItem> list)=>{
  232. for (int i = 0; i < list.Count; i++)
  233. {
  234. Debug.Log("RoomItem===>"+JsonConvert.SerializeObject(list[i]));
  235. }
  236. });
  237. }
  238. });
  239. }
  240. });
  241. StartCoroutine(UploadFile("D:\\Screenshot_0_Btn.png", "http://36.133.197.238:10002" + file_upload, (string msg) => {
  242. Debug.Log("UploadFile===>" + msg);
  243. JsonData d2 = JsonMapper.ToObject(msg);
  244. JsonData data = new JsonData();
  245. data["fileName"] = d2["data"].ToString();
  246. StartCoroutine(DownloadImage(file_download, data.ToJson(), (Texture2D msg) => {
  247. // img.texture = msg;
  248. }));
  249. }));*/
  250. }
  251. public void initHead(string ContentType)
  252. {
  253. requestHeader.Clear();
  254. requestHeader.Add("Authorization", token);
  255. requestHeader.Add("Content-Type", ContentType);
  256. }
  257. //下载图片
  258. public IEnumerator DownloadImage(string url, string jsonString, Action<Texture2D> CallBack)
  259. {
  260. UnityWebRequest webRequest;
  261. url = "http://36.133.197.238:10002" + url;
  262. JsonData data = JsonMapper.ToObject(jsonString);
  263. url += "?";
  264. foreach (var item in data.Keys)
  265. {
  266. url += item + "=" + data[item].ToString() + "&";
  267. }
  268. webRequest = UnityWebRequest.Get(url);
  269. Debug.Log("下载==》" + url + " " + jsonString);
  270. Debug.Log("下载参数==》" + jsonString );
  271. using (webRequest)
  272. {
  273. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  274. foreach (var v in requestHeader)
  275. {
  276. webRequest.SetRequestHeader(v.Key, v.Value);
  277. }
  278. yield return webRequest.SendWebRequest();
  279. while(!webRequest.downloadHandler.isDone)
  280. {
  281. yield return null;
  282. }
  283. if (webRequest.isHttpError || webRequest.isNetworkError)
  284. {
  285. CallBack(null);
  286. }
  287. else
  288. {
  289. Debug.Log("CallBack==>" + webRequest.downloadHandler.data.Length);
  290. Texture2D d2d = new Texture2D(1,1);
  291. d2d.LoadImage(webRequest.downloadHandler.data);
  292. CallBack(d2d);
  293. }
  294. }
  295. }
  296. public IEnumerator DownloadImage(string url, string jsonString, Action<Texture2D ,string> CallBack)
  297. {
  298. UnityWebRequest webRequest;
  299. url = "http://36.133.197.238:10002" + url;
  300. JsonData data = JsonMapper.ToObject(jsonString);
  301. url += "?";
  302. foreach (var item in data.Keys)
  303. {
  304. url += item + "=" + data[item].ToString() + "&";
  305. }
  306. webRequest = UnityWebRequest.Get(url);
  307. Debug.Log("下载==》" + url + " " + jsonString);
  308. Debug.Log("下载参数==》" + jsonString);
  309. using (webRequest)
  310. {
  311. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  312. foreach (var v in requestHeader)
  313. {
  314. webRequest.SetRequestHeader(v.Key, v.Value);
  315. }
  316. yield return webRequest.SendWebRequest();
  317. while (!webRequest.downloadHandler.isDone)
  318. {
  319. yield return null;
  320. }
  321. if (webRequest.isHttpError || webRequest.isNetworkError)
  322. {
  323. CallBack(null,jsonString);
  324. }
  325. else
  326. {
  327. Debug.Log("CallBack==>" + webRequest.downloadHandler.data.Length);
  328. Texture2D d2d = new Texture2D(1, 1);
  329. d2d.LoadImage(webRequest.downloadHandler.data);
  330. CallBack(d2d, jsonString);
  331. }
  332. }
  333. }
  334. //上传图片
  335. public IEnumerator UploadFile(string path, string url, Action<string> CallBack)
  336. {
  337. // 读取要上传的文件
  338. byte[] bytes = File.ReadAllBytes(path);
  339. WWWForm formData = new WWWForm();
  340. formData.AddBinaryData("file", bytes);
  341. Debug.Log("DGJ ===> UploadFile URL " + url + " Path" + path +" Bytes "+ bytes.Length);
  342. // 创建UnityWebRequest对象
  343. UnityWebRequest request = UnityWebRequest.Post(url, formData);
  344. // 发送请求
  345. yield return request.SendWebRequest();
  346. // 处理响应数据
  347. if (request.isNetworkError || request.isHttpError)
  348. {
  349. Debug.Log(request.error);
  350. }
  351. else
  352. {
  353. CallBack?.Invoke(request.downloadHandler.text);
  354. Debug.Log("Upload complete!"+ request.downloadHandler.text);
  355. }
  356. }
  357. public IEnumerator SendHttp(string methodName, string jsonString, Action<string> CallBack, string ContentType = "application/json", bool isPost = true)
  358. {
  359. Debug.Log("Start Queue SendHttp " + methodName + " jsonstring==>" + jsonString);
  360. string url;
  361. url = "http://36.133.197.238:10002" + methodName;
  362. Debug.Log("URL:" + url + " isPost " + isPost);
  363. UnityWebRequest webRequest;
  364. if (!isPost)
  365. {
  366. JsonData data = JsonMapper.ToObject(jsonString);
  367. url += "?";
  368. foreach (var item in data.Keys)
  369. {
  370. url += item + "=" + data[item].ToString() + "&";
  371. }
  372. Debug.Log("URL:" + url + " isPost " + isPost);
  373. webRequest = UnityWebRequest.Get(url);
  374. }
  375. else
  376. {
  377. webRequest = new UnityWebRequest(url, "POST");
  378. }
  379. initHead(ContentType);
  380. using (webRequest)
  381. {
  382. if (!isPost)
  383. {
  384. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  385. foreach (var v in requestHeader)
  386. {
  387. webRequest.SetRequestHeader(v.Key, v.Value);
  388. }
  389. }
  390. else
  391. {
  392. byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString);
  393. webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
  394. webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
  395. }
  396. foreach (var v in requestHeader)
  397. {
  398. webRequest.SetRequestHeader(v.Key, v.Value);
  399. }
  400. yield return webRequest.SendWebRequest();
  401. Debug.Log("CallBack==>" + webRequest.downloadHandler.text);
  402. if (webRequest.isHttpError || webRequest.isNetworkError)
  403. {
  404. Debug.LogError(url + "\n" + webRequest.error + "\n" + webRequest.downloadHandler.text);
  405. string error = webRequest.downloadHandler.text;
  406. JObject jObject = JObject.Parse(error);
  407. CallBack(error);
  408. }
  409. else
  410. {
  411. //Debug.Log(webRequest.downloadHandler.text);
  412. var mes = webRequest.downloadHandler.text;
  413. CallBack(mes);
  414. }
  415. }
  416. }
  417. }
  418. /*
  419. public RawImage img;
  420. public void login()
  421. {
  422. Record add = new Record();
  423. add.distributeId = "1732204405933334528";
  424. add.recordTargetType = "1";
  425. add.recordTarget = "";
  426. add.recordTargetId = "";
  427. add.inspItemId = "";
  428. add.inspItemName = "";
  429. add.recordImg = "";
  430. add.recordMemo = "";
  431. add.recordStatus = "";
  432. JsonData data = new JsonData();
  433. data["appCode"] = "METAVERSE";
  434. data["password"] = "13579Wp!#%&(";
  435. data["username"] = "lisongnan";
  436. StartCoroutine(SendHttp(anon_login, data.ToJson(), (string msg)=> {
  437. Debug.Log("anon_login===>" + msg);
  438. JsonData d = JsonMapper.ToObject(msg);
  439. token = d["data"]["token"]["accessToken"].ToString();
  440. JsonData data = new JsonData();
  441. data["distributeTarget"] = "机房A";
  442. StartCoroutine(SendHttp(task_getMyList, data.ToJson(), (string msg) => {
  443. Debug.Log("task_getMyList===>"+ msg);
  444. JsonData d2 = JsonMapper.ToObject(msg);
  445. JsonData data = new JsonData();
  446. data["inspId"] = d2["data"]["records"][0]["inspId"].ToString();
  447. string distributeId = d2["data"]["records"][0]["distributeId"].ToString();
  448. StartCoroutine(SendHttp(inspItem_getlist, data.ToJson(), (string msg) => {
  449. Debug.Log("inspItem_getlist===>" + msg);
  450. JsonData d2 = JsonMapper.ToObject(msg);
  451. JsonData data = new JsonData();
  452. data["id"] = distributeId;
  453. StartCoroutine(SendHttp(record_getRecord, data.ToJson(), (string msg) => {
  454. Debug.Log("record_getRecord===>" + msg);
  455. JsonData d2 = JsonMapper.ToObject(msg);
  456. StartCoroutine(UploadFile("D:\\Button.png", "http://36.133.197.238:10002" + file_upload, (string msg) => {
  457. Debug.Log("UploadFile===>" + msg);
  458. JsonData d2 = JsonMapper.ToObject(msg);
  459. JsonData data = new JsonData();
  460. data["fileName"] = d2["data"].ToString();
  461. StartCoroutine(DownloadImage(file_download, data.ToJson(), (Texture2D msg) => {
  462. img.texture = msg;
  463. }));
  464. }));
  465. }, "application/json", false));
  466. }));
  467. }));
  468. Debug.Log("login===>"+msg); })) ;
  469. }
  470. */