版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

678 строки
34 KiB

  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Text;
  10. using System.Text.RegularExpressions;
  11. using System.Threading.Tasks;
  12. using MaiMuControl.Utils;
  13. using MaiMuControl.Device;
  14. using System.Reflection;
  15. using Models;
  16. namespace ProductionControl
  17. {
  18. public class WebService
  19. {
  20. private HttpListener svcHttpListener;
  21. public Action<WarningEnum, string> LogEvent;
  22. /// <summary>
  23. /// 缺陷图片和详情文件路径
  24. /// </summary>
  25. public string Defect_Compress_SavePath { get; set; }
  26. /// <summary>
  27. /// 比对图片和详情文件路径
  28. /// </summary>
  29. public string SizeBmp_Zoom_Image_SavePath { get; set; }
  30. Service.OrderService svcOrder = new Service.OrderService();
  31. private void logEvent(string msg, WarningEnum warn = WarningEnum.Normal)
  32. {
  33. LogEvent?.Invoke(warn, msg);
  34. }
  35. public void start(string HttpIP, int HttpPort)
  36. {
  37. try
  38. {
  39. if (HttpPort > 0)
  40. {
  41. //logEvent("Web服务启动...");
  42. this.svcHttpListener = new HttpListener();
  43. List<string> lstIp = HttpUtil.getLocalIPList();
  44. //logEvent($"Web服务已启动,运行于端口:{Config.LocalHttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
  45. //if (!string.IsNullOrWhiteSpace(Config.LocalIp) && lstIp.FindIndex(m => m.Contains(Config.LocalIp)) >= 0)//没指定IP/指定的不对
  46. //{
  47. // lstIp.Clear();
  48. // lstIp.Add(Config.LocalIp);
  49. //}
  50. //lstIp.Clear();
  51. if (lstIp.Count < 1)
  52. {
  53. lstIp.Add(HttpIP);
  54. lstIp.Add("127.0.0.1");
  55. }
  56. logEvent($"Web服务已启动,运行于端口:{HttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
  57. for (int i = 0; i < lstIp.Count; i++)
  58. this.svcHttpListener.Prefixes.Add("http://" + lstIp[i] + ":" + HttpPort.ToString() + "/");
  59. //svcHttpListener.Prefixes.Add($"https://+:{HttpPort}");
  60. this.svcHttpListener.Start();
  61. //logEvent($"Web服务已启动,运行于端口:{Config.LocalHttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
  62. //this.svcHttpListener.GetContext().Response.AppendHeader("Access-Control-Allow-Origin", "*");//后台跨域请求,通常设置为配置文件
  63. //this.svcHttpListener.GetContext().Response.AppendHeader("Access-Control-Allow-Credentials", "true"); //后台跨域请求
  64. this.svcHttpListener.BeginGetContext(new AsyncCallback(this.GetContextCallBack), this.svcHttpListener);
  65. }
  66. //------WEB Socket
  67. //if (Config.localIp != "" && Config.localSocketPort > 0)
  68. //{
  69. // logEvent( "WebSocket服务启动...");
  70. // this.wssv = new WebSocketServer(Config.localSocketPort);
  71. // this.wssv.AddWebSocketService<Socket1>("/socket1");
  72. // this.wssv.Start();
  73. // logEvent( "WebSocket服务已启动。");
  74. //}
  75. }
  76. catch (Exception ex)
  77. {
  78. logEvent("Web服务启动失败,ex="+ex.Message);
  79. }
  80. }
  81. public void stop()
  82. {
  83. logEvent( "正在停止WEB服务...");
  84. try
  85. {
  86. if (this.svcHttpListener != null && this.svcHttpListener.IsListening)
  87. {
  88. this.svcHttpListener.Stop();
  89. this.svcHttpListener.Close();
  90. this.logEvent("Web服务已停止!");
  91. }
  92. //if (this.svcWebSocket != null && this.svcWebSocket.IsListening)
  93. //{
  94. // this.svcWebSocket.Stop();
  95. // this.svcWebSocket = null;
  96. // this.AddTextEvent("WebSocket", "WebSocket服务已停止!");
  97. //}
  98. }
  99. catch (Exception ex)
  100. {
  101. logEvent("Web服务停止失败,ex=" + ex.Message);
  102. }
  103. }
  104. //
  105. private void GetContextCallBack(IAsyncResult ar)
  106. {
  107. this.svcHttpListener = (ar.AsyncState as HttpListener);
  108. HttpListenerContext httpListenerContext;
  109. try
  110. {
  111. httpListenerContext = this.svcHttpListener.EndGetContext(ar);
  112. //httpListenerContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");//后台跨域请求,通常设置为配置文件
  113. //httpListenerContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true"); //后台跨域请求
  114. //httpListenerContext.Response.AppendHeader("Access-Control-Allow-Methods", "GET,POST");
  115. httpListenerContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
  116. httpListenerContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
  117. httpListenerContext.Response.AddHeader("Access-Control-Allow-Methods", "*");
  118. this.svcHttpListener.BeginGetContext(new AsyncCallback(this.GetContextCallBack), this.svcHttpListener);
  119. }
  120. catch (Exception ex)
  121. {
  122. logEvent( "ex:" + ex.StackTrace);
  123. return;
  124. }
  125. //
  126. string sessionId = Convert.ToInt32(DateTime.Now.ToString("mmssfff")).ToString();//.ToString("X");
  127. string reqHttpMethod = httpListenerContext.Request.HttpMethod;
  128. string reqUrl = httpListenerContext.Request.RawUrl;
  129. string reqData = "";
  130. try
  131. {
  132. this.logEvent( $"{sessionId} / 收到请求:{reqHttpMethod} To Url:{reqUrl}");
  133. reqData = HttpUtil.getPostData(httpListenerContext.Request);
  134. this.logEvent( $"{sessionId} / 请求数据:{reqData}");
  135. var subUrls = reqUrl.Trim(new char[] { '/' }).Split(new char[] { '/' });
  136. if (subUrls[0].ToLower() == "static")
  137. {
  138. #region
  139. //string InputStream = ""; //上传的数据
  140. //using (var streamReader = new StreamReader(httpListenerContext.Request.InputStream))
  141. // InputStream = streamReader.ReadToEnd();
  142. // string filePath = Config.appBasePath;
  143. string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  144. foreach (var sub in subUrls)
  145. filePath += "\\" + sub;
  146. if (!File.Exists(filePath)) filePath = filePath + "\\index.html";
  147. if (!File.Exists(filePath))
  148. {
  149. httpListenerContext.Response.ContentLength64 = 0;
  150. httpListenerContext.Response.StatusCode = 404;
  151. httpListenerContext.Response.Abort();
  152. }
  153. else
  154. {
  155. httpListenerContext.Response.StatusCode = 200;
  156. string exeName = Path.GetExtension(filePath);
  157. httpListenerContext.Response.ContentType = HttpUtil.GetContentType(exeName);
  158. FileStream fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite);
  159. int byteLength = (int)fileStream.Length;
  160. byte[] fileBytes = new byte[byteLength];
  161. fileStream.Read(fileBytes, 0, byteLength);
  162. fileStream.Close();
  163. fileStream.Dispose();
  164. httpListenerContext.Response.ContentLength64 = byteLength;
  165. httpListenerContext.Response.OutputStream.Write(fileBytes, 0, byteLength);
  166. //httpListenerContext.Response.OutputStream.Close();
  167. }
  168. #endregion
  169. return;
  170. }
  171. if (reqData == null)
  172. throw new Exception("请求数据不可为空!");
  173. httpListenerContext.Response.StatusCode = 200;
  174. JObject joReqData = JObject.Parse(reqData);
  175. string respText;
  176. JObject result = new JObject();
  177. string sourceSessionId;
  178. switch (subUrls[0].ToLower())
  179. {
  180. case "static": //上面已处理
  181. break;
  182. case "test":
  183. HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "测试回应!");
  184. break;
  185. case "api":
  186. switch (subUrls[1].ToLower())
  187. {
  188. case "query_table":
  189. #region
  190. //if (httpListenerContext.Request.HttpMethod != "POST")
  191. // goto case "http_error";
  192. result = getTableList(joReqData);
  193. respText = JsonConvert.SerializeObject(result);
  194. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ?respText.Substring(0,30):respText)}");
  195. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  196. this.logEvent($"{sessionId} / http返回时连接已断开!");
  197. #endregion
  198. break;
  199. case "update_table"://insert+update
  200. #region
  201. //if (httpListenerContext.Request.HttpMethod != "POST")
  202. // goto case "http_error";
  203. result = updateTableList(joReqData);
  204. respText = JsonConvert.SerializeObject(result);
  205. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ?respText.Substring(0,30):respText)}");
  206. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  207. this.logEvent($"{sessionId} / http返回时连接已断开!");
  208. #endregion
  209. break;
  210. case "delete_table":
  211. #region
  212. //if (httpListenerContext.Request.HttpMethod != "POST")
  213. // goto case "http_error";
  214. result = delTableList(joReqData);
  215. respText = JsonConvert.SerializeObject(result);
  216. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  217. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  218. this.logEvent($"{sessionId} / http返回时连接已断开!");
  219. #endregion
  220. break;
  221. case "getreport_qualified":
  222. #region
  223. //if (httpListenerContext.Request.HttpMethod != "POST")
  224. // goto case "http_error";
  225. result = getReport_Qualified(joReqData);
  226. respText = JsonConvert.SerializeObject(result);
  227. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  228. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  229. this.logEvent($"{sessionId} / http返回时连接已断开!");
  230. #endregion
  231. break;
  232. case "getchart_qualified_rate"://图表:日月季年 合格率
  233. #region
  234. //if (httpListenerContext.Request.HttpMethod != "POST")
  235. // goto case "http_error";
  236. result = GetChart_Qualified_Rate(joReqData);
  237. respText = JsonConvert.SerializeObject(result);
  238. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  239. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  240. this.logEvent($"{sessionId} / http返回时连接已断开!");
  241. #endregion
  242. break;
  243. case "getchart_qualified_date"://图表:合格率分析
  244. #region
  245. //if (httpListenerContext.Request.HttpMethod != "POST")
  246. // goto case "http_error";
  247. result = GetChart_Qualified_Date(joReqData);
  248. respText = JsonConvert.SerializeObject(result);
  249. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  250. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  251. this.logEvent($"{sessionId} / http返回时连接已断开!");
  252. #endregion
  253. break;
  254. case "getchart_defects_date"://图表:按日期统计各缺陷数
  255. #region
  256. //if (httpListenerContext.Request.HttpMethod != "POST")
  257. // goto case "http_error";
  258. result = GetReport_Defects_Date(joReqData);
  259. respText = JsonConvert.SerializeObject(result);
  260. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  261. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  262. this.logEvent($"{sessionId} / http返回时连接已断开!");
  263. #endregion
  264. break;
  265. case "getchart_defects_total"://图表:缺陷总数
  266. #region
  267. //if (httpListenerContext.Request.HttpMethod != "POST")
  268. // goto case "http_error";
  269. result = GetReport_Defects_Total(joReqData);
  270. respText = JsonConvert.SerializeObject(result);
  271. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  272. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  273. this.logEvent($"{sessionId} / http返回时连接已断开!");
  274. #endregion
  275. break;
  276. //修复台
  277. case "get_defect_from_sn"://读取缺陷文件名列表和JSON数组
  278. #region
  279. //if (httpListenerContext.Request.HttpMethod != "POST")
  280. // goto case "http_error";
  281. result = getDefectFromSN(joReqData);
  282. respText = JsonConvert.SerializeObject(result);
  283. this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  284. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  285. this.logEvent($"{sessionId} / http返回时连接已断开!");
  286. #endregion
  287. break;
  288. case "get_defect_pic"://读取缺陷文件base64
  289. #region
  290. //if (httpListenerContext.Request.HttpMethod != "POST")
  291. // goto case "http_error";
  292. result = getDefectBmpBase64(joReqData);
  293. respText = JsonConvert.SerializeObject(result);
  294. this.logEvent($"{sessionId} / 返回BaseLen:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
  295. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  296. this.logEvent($"{sessionId} / http返回时连接已断开!");
  297. #endregion
  298. break;
  299. default:
  300. HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "未知请求!");
  301. break;
  302. }
  303. break;
  304. case "http_error":
  305. result.Add("code", -1);
  306. result.Add("msg", "不支持的请求协议!");
  307. respText = JsonConvert.SerializeObject(result);
  308. this.logEvent( $"{sessionId} / 返回:{respText}" );
  309. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  310. {
  311. this.logEvent( $"{sessionId} / http返回时连接已断开!" );
  312. //this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
  313. //if (callback_url != null && callback_url != "")
  314. // HttpUtil.post(callback_url, respText);
  315. }
  316. break;
  317. case "url_error":
  318. result.Add("code", -2);
  319. result.Add("msg", "URL地址错误!");
  320. respText = JsonConvert.SerializeObject(result);
  321. this.logEvent( $"{sessionId} / 返回:{respText}" );
  322. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  323. {
  324. this.logEvent( $"{sessionId} / http返回时连接已断开!" );
  325. //this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
  326. //if (callback_url != null && callback_url != "")
  327. // HttpUtil.post(callback_url, respText);
  328. }
  329. break;
  330. case "param_error":
  331. result.Add("code", -3);
  332. result.Add("msg", "参数错误!");
  333. respText = JsonConvert.SerializeObject(result);
  334. this.logEvent( $"{sessionId} / 返回:{respText}" );
  335. if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
  336. {
  337. this.logEvent( $"{sessionId} / http返回时连接已断开!" );
  338. //this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
  339. //if (callback_url != null && callback_url != "")
  340. // HttpUtil.post(callback_url, respText);
  341. }
  342. break;
  343. default:
  344. HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "未知请求!");
  345. break;
  346. }
  347. }
  348. catch (Exception ex)
  349. {
  350. this.logEvent( $"{sessionId} / 异常:{ex.Message}\r\n{ex.StackTrace}" );
  351. httpListenerContext.Response.StatusCode = 500;
  352. }
  353. finally
  354. {
  355. try
  356. {
  357. httpListenerContext.Response.OutputStream.Close();//客户端断开时会异常
  358. }
  359. catch { }
  360. }
  361. }
  362. //----
  363. private JObject getTableList(JObject req)
  364. {
  365. JObject res = new JObject();
  366. try
  367. {
  368. string model, fields = "", domain = "", order = "";
  369. int pageNum = 0, pageSize = 0, totalCount = 0;
  370. model = req.Value<string>("model");
  371. if (req.ContainsKey("fields")) fields = req.Value<string>("fields");
  372. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  373. if (req.ContainsKey("order")) order = req.Value<string>("order");
  374. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  375. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  376. //创建表达式
  377. var exp1 = Expressionable.Create<Order>()
  378. //.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue)
  379. //.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue)
  380. //.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value)
  381. //.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value)
  382. .ToExpression();//注意 这一句 不能少
  383. var list = svcOrder.GetList(model, fields, domain, order, pageNum, pageSize, ref totalCount);
  384. //var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1);
  385. res.Add("code", 200);
  386. res.Add("data", JArray.FromObject(list));
  387. res.Add("totalCount", totalCount);
  388. }
  389. catch (Exception ex)
  390. {
  391. res.Add("code", -9);
  392. res.Add("data", ex.Message);
  393. }
  394. return res;
  395. }
  396. private JObject delTableList(JObject req)
  397. {
  398. JObject res = new JObject();
  399. try
  400. {
  401. string model = req.Value<string>("model");
  402. string domain = req.Value<JArray>("domain").ToString();
  403. //var idArr = req.Value<JArray>("idList");
  404. //List<int> ids = new List<int>();
  405. //foreach (int id in idArr) ids.Add(id);
  406. int result = svcOrder.DeleteList(model, domain);
  407. res.Add("code", 200);
  408. res.Add("data", result);
  409. }
  410. catch (Exception ex)
  411. {
  412. res.Add("code", -9);
  413. res.Add("data", ex.Message);
  414. }
  415. return res;
  416. }
  417. private JObject updateTableList(JObject req)
  418. {
  419. JObject res = new JObject();
  420. try
  421. {
  422. string model = req.Value<string>("model");
  423. var list = req.Value<JArray>("datas");
  424. string[] updateColumns = null;
  425. if (req.ContainsKey("columns"))
  426. updateColumns = req.Value<JArray>("columns").ToObject<List<string>>().ToArray();
  427. int result = svcOrder.UpdateableList(model, list.ToString(), updateColumns);
  428. res.Add("code", 200);
  429. res.Add("data", result);
  430. }
  431. catch (Exception ex)
  432. {
  433. res.Add("code", -9);
  434. res.Add("data", ex.Message);
  435. }
  436. return res;
  437. }
  438. private JObject getReport_Qualified(JObject req)
  439. {
  440. JObject res = new JObject();
  441. try
  442. {
  443. string domain = "", order = "";
  444. int pageNum = 0, pageSize = 0, totalCount = 0;
  445. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  446. if (req.ContainsKey("order")) order = req.Value<string>("order");
  447. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  448. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  449. //创建表达式
  450. var list = svcOrder.GetReport_Qualified( domain, order, pageNum, pageSize, ref totalCount);
  451. res.Add("code", 200);
  452. res.Add("data", list);
  453. res.Add("totalCount", totalCount);
  454. }
  455. catch (Exception ex)
  456. {
  457. res.Add("code", -9);
  458. res.Add("data", ex.Message);
  459. }
  460. return res;
  461. }
  462. /// <summary>
  463. /// 获取缺陷数据
  464. /// </summary>
  465. /// <param name="req"></param>
  466. /// <returns>{文件名:[["4","3.9","-0.8","dk","0.39"],["index","X","Y","缺陷类型","缺陷的置信度"],...]}</returns>
  467. private JObject getDefectFromSN(JObject req)
  468. {
  469. JObject res = new JObject();
  470. try
  471. {
  472. string date = req.Value<string>("date");
  473. string sn = req.Value<string>("sn");
  474. JObject data = new JObject();
  475. string path, key;
  476. string[] files;
  477. //文件名格式:$"Size_SN{order.SN}_I{res.index}_X{res.Defects_X}_Y{res.Defects_Y}_.....json/bmp
  478. //--缺陷
  479. path = $"{Defect_Compress_SavePath}\\{date}\\{sn}\\";
  480. if (Directory.Exists(path))
  481. {
  482. files = Directory.GetFiles(path, $"Defect_SN{sn}_*.json", SearchOption.TopDirectoryOnly);
  483. //对文件名中的数字(index)进行大小排序
  484. files = files.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Split('_')[2].Substring(1))).ToArray();
  485. foreach (string file in files)
  486. {
  487. key = Path.GetFileNameWithoutExtension(file);
  488. if (File.Exists(path + key + ".bmp"))
  489. data.Add(key, JArray.Parse(File.ReadAllText(file)));
  490. }
  491. }
  492. //--比对
  493. path = $"{SizeBmp_Zoom_Image_SavePath}\\{date}\\{sn}\\";
  494. if (Directory.Exists(path))
  495. {
  496. files = Directory.GetFiles(path, $"Size_SN{sn}_*.json", SearchOption.TopDirectoryOnly);
  497. //对文件名中的数字(index)进行大小排序
  498. files = files.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Split('_')[2].Substring(1))).ToArray();
  499. foreach (string file in files)
  500. {
  501. key = Path.GetFileNameWithoutExtension(file);
  502. if (File.Exists(path + key + ".bmp"))
  503. data.Add(key, JArray.Parse(File.ReadAllText(file)));
  504. }
  505. }
  506. res.Add("code", 200);
  507. res.Add("data", data);
  508. }
  509. catch (Exception ex)
  510. {
  511. res.Add("code", -9);
  512. res.Add("data", ex.Message);
  513. }
  514. return res;
  515. }
  516. private JObject getDefectBmpBase64(JObject req)
  517. {
  518. JObject res = new JObject();
  519. try
  520. {
  521. string date = req.Value<string>("date");
  522. string sn = req.Value<string>("sn");
  523. string file_name = req.Value<string>("file_name");
  524. string file_path;
  525. //--缺陷
  526. if (file_name.ToLower().IndexOf("defect") == 0)
  527. {
  528. file_path = $"{Defect_Compress_SavePath}\\{date}\\{sn}\\{file_name}.bmp";
  529. if (!File.Exists(file_path))
  530. throw new Exception(file_name + " 缺陷文件不存在!");
  531. res.Add("code", 200);
  532. res.Add("data", Convert.ToBase64String(File.ReadAllBytes(file_path)));
  533. }
  534. //--比对
  535. else if (file_name.ToLower().IndexOf("size") == 0)
  536. {
  537. file_path = $"{SizeBmp_Zoom_Image_SavePath}\\{date}\\{sn}\\{file_name}.bmp";
  538. if (!File.Exists(file_path))
  539. throw new Exception(file_name + " 比对文件不存在!");
  540. res.Add("code", 200);
  541. res.Add("data", Convert.ToBase64String(File.ReadAllBytes(file_path)));
  542. }
  543. else
  544. throw new Exception($"文件类型错误:file_name={file_name}");
  545. }
  546. catch (Exception ex)
  547. {
  548. res.Add("code", -9);
  549. res.Add("data", ex.Message);
  550. }
  551. return res;
  552. }
  553. private JObject GetChart_Qualified_Rate(JObject req)
  554. {
  555. JObject res = new JObject();
  556. try
  557. {
  558. var list = svcOrder.GetReport_Qualified_Total();
  559. res.Add("code", 200);
  560. res.Add("data", JArray.FromObject(list));
  561. }
  562. catch (Exception ex)
  563. {
  564. res.Add("code", -9);
  565. res.Add("data", ex.Message);
  566. }
  567. return res;
  568. }
  569. private JObject GetReport_Defects_Date(JObject req)
  570. {
  571. JObject res = new JObject();
  572. try
  573. {
  574. string domain = "", order = "";
  575. int pageNum = 0, pageSize = 0, totalCount = 0;
  576. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  577. if (req.ContainsKey("order")) order = req.Value<string>("order");
  578. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  579. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  580. //创建表达式
  581. var list = svcOrder.GetReport_Defects_Date(domain, order, pageNum, pageSize, ref totalCount);
  582. res.Add("code", 200);
  583. res.Add("data", list);
  584. }
  585. catch (Exception ex)
  586. {
  587. res.Add("code", -9);
  588. res.Add("data", ex.Message);
  589. }
  590. return res;
  591. }
  592. private JObject GetReport_Defects_Total(JObject req)
  593. {
  594. JObject res = new JObject();
  595. try
  596. {
  597. string domain = "", order = "";
  598. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  599. var list = svcOrder.GetReport_Defects_Total(domain);
  600. res.Add("code", 200);
  601. res.Add("data", list);
  602. }
  603. catch (Exception ex)
  604. {
  605. res.Add("code", -9);
  606. res.Add("data", ex.Message);
  607. }
  608. return res;
  609. }
  610. private JObject GetChart_Qualified_Date(JObject req)
  611. {
  612. JObject res = new JObject();
  613. try
  614. {
  615. string domain = "", order = "";
  616. int pageNum = 0, pageSize = 0, totalCount = 0;
  617. if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
  618. if (req.ContainsKey("order")) order = req.Value<string>("order");
  619. if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
  620. if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
  621. //创建表达式
  622. var list = svcOrder.GetReport_Qualified_Date( domain, order, pageNum, pageSize, ref totalCount);
  623. res.Add("code", 200);
  624. res.Add("data", list);
  625. res.Add("totalCount", totalCount);
  626. }
  627. catch (Exception ex)
  628. {
  629. res.Add("code", -9);
  630. res.Add("data", ex.Message);
  631. }
  632. return res;
  633. }
  634. }
  635. }