678 lines
34 KiB
C#
678 lines
34 KiB
C#
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading.Tasks;
|
||
using MaiMuControl.Utils;
|
||
using MaiMuControl.Device;
|
||
using System.Reflection;
|
||
using Models;
|
||
|
||
namespace ProductionControl
|
||
{
|
||
public class WebService
|
||
{
|
||
private HttpListener svcHttpListener;
|
||
public Action<WarningEnum, string> LogEvent;
|
||
/// <summary>
|
||
/// 缺陷图片和详情文件路径
|
||
/// </summary>
|
||
public string Defect_Compress_SavePath { get; set; }
|
||
/// <summary>
|
||
/// 比对图片和详情文件路径
|
||
/// </summary>
|
||
public string SizeBmp_Zoom_Image_SavePath { get; set; }
|
||
|
||
Service.OrderService svcOrder = new Service.OrderService();
|
||
private void logEvent(string msg, WarningEnum warn = WarningEnum.Normal)
|
||
{
|
||
LogEvent?.Invoke(warn, msg);
|
||
}
|
||
public void start(string HttpIP, int HttpPort)
|
||
{
|
||
try
|
||
{
|
||
if (HttpPort > 0)
|
||
{
|
||
//logEvent("Web服务启动...");
|
||
this.svcHttpListener = new HttpListener();
|
||
List<string> lstIp = HttpUtil.getLocalIPList();
|
||
//logEvent($"Web服务已启动,运行于端口:{Config.LocalHttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
|
||
//if (!string.IsNullOrWhiteSpace(Config.LocalIp) && lstIp.FindIndex(m => m.Contains(Config.LocalIp)) >= 0)//没指定IP/指定的不对
|
||
//{
|
||
// lstIp.Clear();
|
||
// lstIp.Add(Config.LocalIp);
|
||
//}
|
||
//lstIp.Clear();
|
||
if (lstIp.Count < 1)
|
||
{
|
||
lstIp.Add(HttpIP);
|
||
lstIp.Add("127.0.0.1");
|
||
}
|
||
logEvent($"Web服务已启动,运行于端口:{HttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
|
||
for (int i = 0; i < lstIp.Count; i++)
|
||
this.svcHttpListener.Prefixes.Add("http://" + lstIp[i] + ":" + HttpPort.ToString() + "/");
|
||
//svcHttpListener.Prefixes.Add($"https://+:{HttpPort}");
|
||
this.svcHttpListener.Start();
|
||
//logEvent($"Web服务已启动,运行于端口:{Config.LocalHttpPort.ToString()}, 监听Ip:{string.Join("|", lstIp)}");
|
||
//this.svcHttpListener.GetContext().Response.AppendHeader("Access-Control-Allow-Origin", "*");//后台跨域请求,通常设置为配置文件
|
||
//this.svcHttpListener.GetContext().Response.AppendHeader("Access-Control-Allow-Credentials", "true"); //后台跨域请求
|
||
this.svcHttpListener.BeginGetContext(new AsyncCallback(this.GetContextCallBack), this.svcHttpListener);
|
||
}
|
||
//------WEB Socket
|
||
//if (Config.localIp != "" && Config.localSocketPort > 0)
|
||
//{
|
||
// logEvent( "WebSocket服务启动...");
|
||
// this.wssv = new WebSocketServer(Config.localSocketPort);
|
||
// this.wssv.AddWebSocketService<Socket1>("/socket1");
|
||
// this.wssv.Start();
|
||
// logEvent( "WebSocket服务已启动。");
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logEvent("Web服务启动失败,ex="+ex.Message);
|
||
}
|
||
}
|
||
public void stop()
|
||
{
|
||
logEvent( "正在停止WEB服务...");
|
||
try
|
||
{
|
||
if (this.svcHttpListener != null && this.svcHttpListener.IsListening)
|
||
{
|
||
this.svcHttpListener.Stop();
|
||
this.svcHttpListener.Close();
|
||
this.logEvent("Web服务已停止!");
|
||
}
|
||
//if (this.svcWebSocket != null && this.svcWebSocket.IsListening)
|
||
//{
|
||
// this.svcWebSocket.Stop();
|
||
// this.svcWebSocket = null;
|
||
// this.AddTextEvent("WebSocket", "WebSocket服务已停止!");
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logEvent("Web服务停止失败,ex=" + ex.Message);
|
||
}
|
||
}
|
||
|
||
//
|
||
private void GetContextCallBack(IAsyncResult ar)
|
||
{
|
||
this.svcHttpListener = (ar.AsyncState as HttpListener);
|
||
HttpListenerContext httpListenerContext;
|
||
try
|
||
{
|
||
httpListenerContext = this.svcHttpListener.EndGetContext(ar);
|
||
//httpListenerContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");//后台跨域请求,通常设置为配置文件
|
||
//httpListenerContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true"); //后台跨域请求
|
||
//httpListenerContext.Response.AppendHeader("Access-Control-Allow-Methods", "GET,POST");
|
||
httpListenerContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
|
||
httpListenerContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
|
||
httpListenerContext.Response.AddHeader("Access-Control-Allow-Methods", "*");
|
||
|
||
this.svcHttpListener.BeginGetContext(new AsyncCallback(this.GetContextCallBack), this.svcHttpListener);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logEvent( "ex:" + ex.StackTrace);
|
||
return;
|
||
}
|
||
|
||
//
|
||
string sessionId = Convert.ToInt32(DateTime.Now.ToString("mmssfff")).ToString();//.ToString("X");
|
||
string reqHttpMethod = httpListenerContext.Request.HttpMethod;
|
||
string reqUrl = httpListenerContext.Request.RawUrl;
|
||
string reqData = "";
|
||
try
|
||
{
|
||
this.logEvent( $"{sessionId} / 收到请求:{reqHttpMethod} To Url:{reqUrl}");
|
||
reqData = HttpUtil.getPostData(httpListenerContext.Request);
|
||
this.logEvent( $"{sessionId} / 请求数据:{reqData}");
|
||
var subUrls = reqUrl.Trim(new char[] { '/' }).Split(new char[] { '/' });
|
||
if (subUrls[0].ToLower() == "static")
|
||
{
|
||
#region
|
||
//string InputStream = ""; //上传的数据
|
||
//using (var streamReader = new StreamReader(httpListenerContext.Request.InputStream))
|
||
// InputStream = streamReader.ReadToEnd();
|
||
|
||
// string filePath = Config.appBasePath;
|
||
string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||
foreach (var sub in subUrls)
|
||
filePath += "\\" + sub;
|
||
if (!File.Exists(filePath)) filePath = filePath + "\\index.html";
|
||
if (!File.Exists(filePath))
|
||
{
|
||
httpListenerContext.Response.ContentLength64 = 0;
|
||
httpListenerContext.Response.StatusCode = 404;
|
||
httpListenerContext.Response.Abort();
|
||
}
|
||
else
|
||
{
|
||
httpListenerContext.Response.StatusCode = 200;
|
||
string exeName = Path.GetExtension(filePath);
|
||
httpListenerContext.Response.ContentType = HttpUtil.GetContentType(exeName);
|
||
FileStream fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite);
|
||
int byteLength = (int)fileStream.Length;
|
||
byte[] fileBytes = new byte[byteLength];
|
||
fileStream.Read(fileBytes, 0, byteLength);
|
||
fileStream.Close();
|
||
fileStream.Dispose();
|
||
httpListenerContext.Response.ContentLength64 = byteLength;
|
||
httpListenerContext.Response.OutputStream.Write(fileBytes, 0, byteLength);
|
||
//httpListenerContext.Response.OutputStream.Close();
|
||
}
|
||
#endregion
|
||
return;
|
||
}
|
||
|
||
if (reqData == null)
|
||
throw new Exception("请求数据不可为空!");
|
||
httpListenerContext.Response.StatusCode = 200;
|
||
|
||
JObject joReqData = JObject.Parse(reqData);
|
||
string respText;
|
||
JObject result = new JObject();
|
||
string sourceSessionId;
|
||
switch (subUrls[0].ToLower())
|
||
{
|
||
case "static": //上面已处理
|
||
break;
|
||
case "test":
|
||
HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "测试回应!");
|
||
break;
|
||
case "api":
|
||
switch (subUrls[1].ToLower())
|
||
{
|
||
case "query_table":
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = getTableList(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ?respText.Substring(0,30):respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "update_table"://insert+update
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = updateTableList(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ?respText.Substring(0,30):respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "delete_table":
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = delTableList(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "getreport_qualified":
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = getReport_Qualified(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "getchart_qualified_rate"://图表:日月季年 合格率
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = GetChart_Qualified_Rate(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "getchart_qualified_date"://图表:合格率分析
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = GetChart_Qualified_Date(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "getchart_defects_date"://图表:按日期统计各缺陷数
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = GetReport_Defects_Date(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "getchart_defects_total"://图表:缺陷总数
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = GetReport_Defects_Total(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
//修复台
|
||
case "get_defect_from_sn"://读取缺陷文件名列表和JSON数组
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = getDefectFromSN(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
case "get_defect_pic"://读取缺陷文件base64
|
||
#region
|
||
//if (httpListenerContext.Request.HttpMethod != "POST")
|
||
// goto case "http_error";
|
||
|
||
result = getDefectBmpBase64(joReqData);
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent($"{sessionId} / 返回BaseLen:{(respText.Length > 30 ? respText.Substring(0, 30) : respText)}");
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
this.logEvent($"{sessionId} / http返回时连接已断开!");
|
||
#endregion
|
||
break;
|
||
default:
|
||
HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "未知请求!");
|
||
break;
|
||
}
|
||
break;
|
||
case "http_error":
|
||
result.Add("code", -1);
|
||
result.Add("msg", "不支持的请求协议!");
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent( $"{sessionId} / 返回:{respText}" );
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
{
|
||
this.logEvent( $"{sessionId} / http返回时连接已断开!" );
|
||
//this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
|
||
//if (callback_url != null && callback_url != "")
|
||
// HttpUtil.post(callback_url, respText);
|
||
}
|
||
break;
|
||
case "url_error":
|
||
result.Add("code", -2);
|
||
result.Add("msg", "URL地址错误!");
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent( $"{sessionId} / 返回:{respText}" );
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
{
|
||
this.logEvent( $"{sessionId} / http返回时连接已断开!" );
|
||
//this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
|
||
//if (callback_url != null && callback_url != "")
|
||
// HttpUtil.post(callback_url, respText);
|
||
}
|
||
break;
|
||
case "param_error":
|
||
result.Add("code", -3);
|
||
result.Add("msg", "参数错误!");
|
||
respText = JsonConvert.SerializeObject(result);
|
||
this.logEvent( $"{sessionId} / 返回:{respText}" );
|
||
if (!HttpUtil.writeToHttpContext_json(httpListenerContext.Response, respText))
|
||
{
|
||
this.logEvent( $"{sessionId} / http返回时连接已断开!" );
|
||
//this.logEvent( id + " /http连接已断开," + (string.IsNullOrWhiteSpace(callback_url) ? "无法返回结果!" : "通过回调返回" + callback_url), 1);
|
||
//if (callback_url != null && callback_url != "")
|
||
// HttpUtil.post(callback_url, respText);
|
||
}
|
||
break;
|
||
default:
|
||
HttpUtil.writeToHttpContext_text(httpListenerContext.Response, "未知请求!");
|
||
break;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
this.logEvent( $"{sessionId} / 异常:{ex.Message}\r\n{ex.StackTrace}" );
|
||
httpListenerContext.Response.StatusCode = 500;
|
||
}
|
||
finally
|
||
{
|
||
try
|
||
{
|
||
httpListenerContext.Response.OutputStream.Close();//客户端断开时会异常
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
|
||
//----
|
||
private JObject getTableList(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string model, fields = "", domain = "", order = "";
|
||
int pageNum = 0, pageSize = 0, totalCount = 0;
|
||
|
||
model = req.Value<string>("model");
|
||
if (req.ContainsKey("fields")) fields = req.Value<string>("fields");
|
||
if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
|
||
if (req.ContainsKey("order")) order = req.Value<string>("order");
|
||
|
||
if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
|
||
if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
|
||
|
||
//创建表达式
|
||
var exp1 = Expressionable.Create<Order>()
|
||
//.AndIF((int)cobProductList.SelectedValue > 0, it => it.ProductId == (int)cobProductList.SelectedValue)
|
||
//.AndIF((int)cobStepList.SelectedValue > 0, it => it.StepId == (int)cobStepList.SelectedValue)
|
||
//.AndIF(dateTimePicker1.Checked, it => it.CreateTime >= dateTimePicker1.Value)
|
||
//.AndIF(dateTimePicker2.Checked, it => it.CreateTime < dateTimePicker2.Value)
|
||
.ToExpression();//注意 这一句 不能少
|
||
|
||
|
||
var list = svcOrder.GetList(model, fields, domain, order, pageNum, pageSize, ref totalCount);
|
||
//var list = svcOrder.GetListNav(pageNum, pageSize, ref totalCount, exp1);
|
||
res.Add("code", 200);
|
||
res.Add("data", JArray.FromObject(list));
|
||
res.Add("totalCount", totalCount);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject delTableList(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string model = req.Value<string>("model");
|
||
string domain = req.Value<JArray>("domain").ToString();
|
||
//var idArr = req.Value<JArray>("idList");
|
||
//List<int> ids = new List<int>();
|
||
//foreach (int id in idArr) ids.Add(id);
|
||
int result = svcOrder.DeleteList(model, domain);
|
||
res.Add("code", 200);
|
||
res.Add("data", result);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject updateTableList(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string model = req.Value<string>("model");
|
||
var list = req.Value<JArray>("datas");
|
||
string[] updateColumns = null;
|
||
if (req.ContainsKey("columns"))
|
||
updateColumns = req.Value<JArray>("columns").ToObject<List<string>>().ToArray();
|
||
int result = svcOrder.UpdateableList(model, list.ToString(), updateColumns);
|
||
res.Add("code", 200);
|
||
res.Add("data", result);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject getReport_Qualified(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string domain = "", order = "";
|
||
int pageNum = 0, pageSize = 0, totalCount = 0;
|
||
|
||
if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
|
||
if (req.ContainsKey("order")) order = req.Value<string>("order");
|
||
|
||
if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
|
||
if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
|
||
|
||
//创建表达式
|
||
var list = svcOrder.GetReport_Qualified( domain, order, pageNum, pageSize, ref totalCount);
|
||
res.Add("code", 200);
|
||
res.Add("data", list);
|
||
res.Add("totalCount", totalCount);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取缺陷数据
|
||
/// </summary>
|
||
/// <param name="req"></param>
|
||
/// <returns>{文件名:[["4","3.9","-0.8","dk","0.39"],["index","X","Y","缺陷类型","缺陷的置信度"],...]}</returns>
|
||
private JObject getDefectFromSN(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string date = req.Value<string>("date");
|
||
string sn = req.Value<string>("sn");
|
||
|
||
JObject data = new JObject();
|
||
string path, key;
|
||
string[] files;
|
||
|
||
//文件名格式:$"Size_SN{order.SN}_I{res.index}_X{res.Defects_X}_Y{res.Defects_Y}_.....json/bmp
|
||
//--缺陷
|
||
path = $"{Defect_Compress_SavePath}\\{date}\\{sn}\\";
|
||
if (Directory.Exists(path))
|
||
{
|
||
files = Directory.GetFiles(path, $"Defect_SN{sn}_*.json", SearchOption.TopDirectoryOnly);
|
||
//对文件名中的数字(index)进行大小排序
|
||
files = files.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Split('_')[2].Substring(1))).ToArray();
|
||
foreach (string file in files)
|
||
{
|
||
key = Path.GetFileNameWithoutExtension(file);
|
||
if (File.Exists(path + key + ".bmp"))
|
||
data.Add(key, JArray.Parse(File.ReadAllText(file)));
|
||
}
|
||
}
|
||
//--比对
|
||
path = $"{SizeBmp_Zoom_Image_SavePath}\\{date}\\{sn}\\";
|
||
if (Directory.Exists(path))
|
||
{
|
||
files = Directory.GetFiles(path, $"Size_SN{sn}_*.json", SearchOption.TopDirectoryOnly);
|
||
//对文件名中的数字(index)进行大小排序
|
||
files = files.OrderBy(s => int.Parse(Path.GetFileNameWithoutExtension(s).Split('_')[2].Substring(1))).ToArray();
|
||
foreach (string file in files)
|
||
{
|
||
key = Path.GetFileNameWithoutExtension(file);
|
||
if (File.Exists(path + key + ".bmp"))
|
||
data.Add(key, JArray.Parse(File.ReadAllText(file)));
|
||
}
|
||
}
|
||
|
||
res.Add("code", 200);
|
||
res.Add("data", data);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject getDefectBmpBase64(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string date = req.Value<string>("date");
|
||
string sn = req.Value<string>("sn");
|
||
string file_name = req.Value<string>("file_name");
|
||
|
||
string file_path;
|
||
//--缺陷
|
||
if (file_name.ToLower().IndexOf("defect") == 0)
|
||
{
|
||
file_path = $"{Defect_Compress_SavePath}\\{date}\\{sn}\\{file_name}.bmp";
|
||
if (!File.Exists(file_path))
|
||
throw new Exception(file_name + " 缺陷文件不存在!");
|
||
|
||
res.Add("code", 200);
|
||
res.Add("data", Convert.ToBase64String(File.ReadAllBytes(file_path)));
|
||
}
|
||
//--比对
|
||
else if (file_name.ToLower().IndexOf("size") == 0)
|
||
{
|
||
file_path = $"{SizeBmp_Zoom_Image_SavePath}\\{date}\\{sn}\\{file_name}.bmp";
|
||
if (!File.Exists(file_path))
|
||
throw new Exception(file_name + " 比对文件不存在!");
|
||
|
||
res.Add("code", 200);
|
||
res.Add("data", Convert.ToBase64String(File.ReadAllBytes(file_path)));
|
||
}
|
||
else
|
||
throw new Exception($"文件类型错误:file_name={file_name}");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
|
||
private JObject GetChart_Qualified_Rate(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
var list = svcOrder.GetReport_Qualified_Total();
|
||
res.Add("code", 200);
|
||
res.Add("data", JArray.FromObject(list));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject GetReport_Defects_Date(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string domain = "", order = "";
|
||
int pageNum = 0, pageSize = 0, totalCount = 0;
|
||
|
||
if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
|
||
if (req.ContainsKey("order")) order = req.Value<string>("order");
|
||
|
||
if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
|
||
if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
|
||
|
||
//创建表达式
|
||
var list = svcOrder.GetReport_Defects_Date(domain, order, pageNum, pageSize, ref totalCount);
|
||
res.Add("code", 200);
|
||
res.Add("data", list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject GetReport_Defects_Total(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string domain = "", order = "";
|
||
if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
|
||
|
||
var list = svcOrder.GetReport_Defects_Total(domain);
|
||
res.Add("code", 200);
|
||
res.Add("data", list);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
private JObject GetChart_Qualified_Date(JObject req)
|
||
{
|
||
JObject res = new JObject();
|
||
try
|
||
{
|
||
string domain = "", order = "";
|
||
int pageNum = 0, pageSize = 0, totalCount = 0;
|
||
|
||
if (req.ContainsKey("domain")) domain = req.Value<JArray>("domain").ToString();
|
||
if (req.ContainsKey("order")) order = req.Value<string>("order");
|
||
|
||
if (req.ContainsKey("pageNum")) pageNum = req.Value<int>("pageNum");
|
||
if (req.ContainsKey("pageSize")) pageSize = req.Value<int>("pageSize");
|
||
|
||
//创建表达式
|
||
var list = svcOrder.GetReport_Qualified_Date( domain, order, pageNum, pageSize, ref totalCount);
|
||
res.Add("code", 200);
|
||
res.Add("data", list);
|
||
res.Add("totalCount", totalCount);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res.Add("code", -9);
|
||
res.Add("data", ex.Message);
|
||
}
|
||
return res;
|
||
}
|
||
}
|
||
}
|