版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

667 lines
32 KiB

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