Files
1440WGJ/JY.MES/FMS/MesHelper_EVE.cs
2026-07-14 13:55:17 +08:00

530 lines
22 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace JY.MES.FMS
{
public class MesHelper_EVE
{
/// <summary>
/// 接口地址
/// </summary>
public string UserVerifyUrl = "http://10.6.1.155/core/api/public/equipment/base/user/login/verify";
//public static string InboundUrl = "http://10.6.1.155/core/api/public/in/station/process/true";
//public string OutboundUrl = "http://10.6.1.155/core/api/public/out/station/process/true";
public string ProductParamUrl = "http://10.6.1.155/core/api/public/product/process/param/result";
public string EquipmentStatusUrl = "http://10.6.1.155/core/api/public/eve/pm/eqm/run/status/operation";
public string AlarmStatusUrl = "http://10.6.1.155/core/api/public/equipment/alarm/currency";
public string GetRecipeUrl = "http://10.6.1.155/core/api/public/param/set/request";
public string UnloadRecipeUrl = "http://10.6.1.155/core/api/public/api/public/param/setting/change";
public string 电芯入站 = "http://192.168.1.11:30030/fms/restful/api/v3/process/CheckMaterialStatus";
public string 电芯出站 = "http://192.168.1.11:30030/fms/restful/api/v3/process/MaterialEX";
public string 设备状态 = "http://192.168.1.11:30030/fms/restful/api/v3/device/uploadDeviceStatus";
public string 报警 = "http://192.168.1.11:30030/fms/restful/api/v3/device/uploadDeviceError";
public static string InboundUrl = "http://192.168.1.11:30030/fms/restful/api/v3/process/CheckMaterialStatus";
public static string OutboundUrl = "http://192.168.1.11:30030/fms/restful/api/v3/process/MaterialEX";
public static string StatusUrl = "http://192.168.1.11:30030/fms/restful/api/v3/device/uploadDeviceStatus";
public static string AlarmUrl = "http://192.168.1.11:30030/fms/restful/api/v3/device/uploadDeviceError";
public static string MateriallnStationeUrl = "http://192.168.1.11:30030/fms/restful/api/v3/inventory/materiallnStatione";
/// <summary>
/// 超时
/// </summary>
public int _TimeOut = 3000;
/// <summary>
/// 凭证
/// </summary>
//public Credentials Credentials { get; set; }
MesRequestAndRespondParam mrrp = new MesRequestAndRespondParam();
/// <summary>
/// 初始标记为false(离线文件标记)
/// </summary>
public static bool WriteState { get; set; } = false;
public static List<string> listSource = new List<string>();
///// <summary>
///// 提交登录窗口填写的信息,登录MES
///// </summary>
///// <param name="mParam"></param>
///// <returns></returns>
//public MesRespondParam.MesResult MesPost<T>(T t, int Type) where T : class
//{
// var Start = DateTime.Now;
// MesRespondParam.MesResult _mesResult = new MesRespondParam.MesResult();
// try
// {
// //等待7秒,如果超过7秒未收到MES返回消息,视为超时
// new Task(() =>
// {
// if ((DateTime.Now - Start).TotalMilliseconds > 7000)
// {
// _mesResult.code = "-9999";
// _mesResult.message = "交互超时";
// _mesResult.success = false;
// }
// }).Start();
// var json = JsonHelper.SerializeObject(t);
// if (Type == 0)
// {
// Addlo.WriteEorr($@"【向服务端发送信息】: {Convert.ToString(json)}", "测试日志", "入站服务端数据", Type: "UTF-8");
// }
// else
// {
// SysLog.WriteEorr($@"【向服务端发送信息】: {Convert.ToString(json)}", "测试日志", "出站服务端数据", Type: "UTF-8");
// }
// string jsnstr = PostWebRequest(Type == 0 ? 电芯入站 : 电芯出站, json, Type == 0 ? "入站" : "出站"); //request.GetJsonResponse(UserVerifyUrl, JsonHelper.SerializeObject(mParam));
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRespondParam.MesResult>(jsnstr);
// if (Type == 0)
// {
// SysLog.WriteEorr($@"【接收服务端返回信息】: {Convert.ToString(jsnstr)}", "测试日志", "入站服务端数据", Type: "UTF-8");
// }
// else
// {
// SysLog.WriteEorr($@"【接收服务端返回信息】: {Convert.ToString(jsnstr)}", "测试日志", "出站服务端数据", Type: "UTF-8");
// }
// }
// catch (Exception ex)
// {
// _mesResult.code = "-404";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
/// <summary>
/// 容量分档
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
public static MesReturnParam.MesResult FMS_MateriallnStatione(FMS_Materialln mParam)
{
MesReturnParam.MesResult _mesResult = new FMS.MesReturnParam.MesResult();
try
{
string jsnstr = PostWebRequest(MateriallnStationeUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
_mesResult = Newtonsoft.Json.JsonConvert.DeserializeObject<MesReturnParam.MesResult>(jsnstr);
}
catch (Exception ex)
{
_mesResult.statusCode = -9999;
_mesResult.statusMessage = ex.Message;
}
return _mesResult;
}
/// <summary>
/// 产品进站
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
public static MesReturnParam.MesResult MES_Inbound(FMS_In mParam)
{
MesReturnParam.MesResult _mesResult = new FMS.MesReturnParam.MesResult();
try
{
string jsnstr = PostWebRequest(InboundUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
_mesResult = Newtonsoft.Json.JsonConvert.DeserializeObject<MesReturnParam.MesResult>(jsnstr);
}
catch (Exception ex)
{
_mesResult.statusCode = -9999;
_mesResult.statusMessage = ex.Message;
}
return _mesResult;
}
/// <summary>
/// 产品出站
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
public static MesRequestAndRespondParam.MesRespondParam.MesResult MES_Outbound(FMS_Out mParam)
{
MesRequestAndRespondParam.MesRespondParam.MesResult _mesResult = new MesRequestAndRespondParam.MesRespondParam.MesResult();
string jsnstr = PostWebRequest(OutboundUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
try
{
if (jsnstr.Contains("【链接异常】"))
{
//异常视为离线,如果离线,则将数据保存到本地
SaveOutlineData(jsnstr);
}
_mesResult = Newtonsoft.Json.JsonConvert.DeserializeObject<MesRequestAndRespondParam.MesRespondParam.MesResult>(jsnstr);
}
catch (Exception ex)
{
_mesResult.statusCode = -9999;
_mesResult.statusMessage = ex.Message;
}
return _mesResult;
}
/// <summary>
/// 设备状态上传MES
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
public static MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond MES_Status(FMS_Status mParam)
{
//string jsnstr = PostHelper.HttpPostJsonAPI1(StatusUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
//return Newtonsoft.Json.JsonConvert.DeserializeObject<MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond>(jsnstr);
MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond _mesResult = new MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond();
try
{
string jsnstr = PostWebRequest(StatusUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
_mesResult = Newtonsoft.Json.JsonConvert.DeserializeObject<MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond>(jsnstr);
}
catch (Exception ex)
{
_mesResult.code = "-9999";
_mesResult.message = ex.Message;
_mesResult.success = "失败";
_mesResult.category = "";
}
return _mesResult;
}
/// <summary>
/// 报警上传MES
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
public static MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond MES_Alarm(FMS_Alarm mParam)
{
//string jsnstr = PostHelper.HttpPostJsonAPI1(AlarmUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
//return Newtonsoft.Json.JsonConvert.DeserializeObject<MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond>(jsnstr);
MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond _mesResult = new MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond();
try
{
string jsnstr = PostWebRequest(AlarmUrl, Newtonsoft.Json.JsonConvert.SerializeObject(mParam));
_mesResult = Newtonsoft.Json.JsonConvert.DeserializeObject<MesRequestAndRespondParam.MesRespondParam.GetRecipeRespond>(jsnstr);
}
catch (Exception ex)
{
_mesResult.code = "-9999";
_mesResult.message = ex.Message;
_mesResult.success = "失败";
_mesResult.category = "";
}
return _mesResult;
}
///// <summary>
///// 加工参数采集
///// </summary>
///// <param name="mParam"></param>
///// <returns></returns>
//public MesRequestAndRespondParam.MesRespondParam.MesResult MES_ProductParaColloctUniversal(MesRequestAndRespondParam.MesRequestParam.ProductDataRequest mParam)
//{
// MesRequestAndRespondParam.MesRespondParam.MesResult _mesResult = new MesRequestAndRespondParam.MesRespondParam.MesResult();
// string jsnstPostWebRequestr = (ProductParamUrl, JsonHelper.SerializeObject(mParam));
// try
// {
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRequestAndRespondParam.MesRespondParam.MesResult>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
/// <summary>
/// 加工参数采集(手动或离线传入上传内容)
/// </summary>
/// <param name="JsString"></param>
/// <returns></returns>
//public MesRequestAndRespondParam.MesRespondParam.MesResult MES_ProductParaColloctUniversal(string JsString)
//{
// MesRequestAndRespondParam.MesRespondParam.MesResult _mesResult = new MesRequestAndRespondParam.MesRespondParam.MesResult();
// try
// {
// string jsnstr = JsString;
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRequestAndRespondParam.MesRespondParam.MesResult>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
///// <summary>
///// 设备状态采集
///// </summary>
///// <param name="mParam"></param>
///// <returns></returns>
//public MesRespondParam.MesResult MES_EquipStatusCollect(MesRequestParam.EquipStatusRequest mParam)
//{
// MesRespondParam.MesResult _mesResult = new MesRespondParam.MesResult();
// try
// {
// string jsnstr = PostWebRequest(EquipmentStatusUrl, JsonHelper.SerializeObject(mParam));
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRespondParam.MesResult>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
///// <summary>
///// 设备报警采集
///// </summary>
///// <param name="mParam"></param>
///// <returns></returns>
//public MesRespondParam.MesResult MES_Alarm(MesRequestParam.AlarmRequest mParam)
//{
// MesRespondParam.MesResult _mesResult = new MesRespondParam.MesResult();
// try
// {
// string jsnstr = PostWebRequest(AlarmStatusUrl, JsonHelper.SerializeObject(mParam));
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRespondParam.MesResult>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
/// <summary>
/// 配方修改上传
/// </summary>
/// <param name="mParam"></param>
/// <returns></returns>
//public MesRespondParam.MesResult MES_UploadRecipe(MesRequestParam.SetRecipeRequest mParam)
//{
// MesRespondParam.MesResult _mesResult = new MesRespondParam.MesResult();
// try
// {
// string jsnstr = PostWebRequest(UnloadRecipeUrl, JsonHelper.SerializeObject(mParam));
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRespondParam.MesResult>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
///// <summary>
///// 配方下载
///// </summary>
///// <param name="mParam"></param>
///// <returns></returns>
//public MesRespondParam.GetRecipeRespond MES_GetRecipe(MesRequestParam.GetRecipeRequest mParam)
//{
// MesRespondParam.GetRecipeRespond _mesResult = new MesRespondParam.GetRecipeRespond();
// try
// {
// string jsnstr = PostWebRequest(GetRecipeUrl, JsonHelper.SerializeObject(mParam));
// _mesResult = JsonHelper.DeserializeJsonToObject<MesRespondParam.GetRecipeRespond>(jsnstr);
// }
// catch (Exception ex)
// {
// _mesResult.code = "-9999";
// _mesResult.message = ex.Message;
// _mesResult.success = false;
// }
// return _mesResult;
//}
#region 公共
/// <summary>
/// Post数据接口
/// </summary>
/// <param name="postUrl">接口地址</param>
/// <param name="paramData">提交json数据</param>
/// <param name="dataEncode">编码方式(Encoding.UTF8)</param>
/// <returns></returns>
public static string PostWebRequest(string postUrl, string paramData, string SockAction = "")
{
string responseContent = string.Empty;
try
{
string TypeName = string.Empty;
if (SockAction.Contains("入站"))
{
TypeName = "入站操作";
}
else
{
TypeName = "出站操作";
}
byte[] byteArray = Encoding.UTF8.GetBytes(paramData); //转化
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
//webReq.Timeout = _TimeOut;
webReq.Method = "POST";
webReq.ContentType = "application/json;charset=UTF-8";
//webReq.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
//webReq.ContentLength = byteArray.Length;
if (SockAction.Length > 0)
webReq.Headers.Add("SOAPAction", SockAction);
//if (this.Credentials != null)
{
//(2)设置Headers Authorization
webReq.Headers.Add("Authorization", "Basic " /*+ Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Credentials.UserName}:{Credentials.Password}"))*/);
}
//webReq.CookieContainer = new CookieContainer();
//webReq.ContentType = "application/json;";
////(1)设置请求Credentials
//CredentialCache credentialCache = new CredentialCache();
//credentialCache.Add(new Uri("接口地址"), "Basic", new NetworkCredential("用户名", "密码"));
//webReq.Credentials = credentialCache;
using (Stream reqStream = webReq.GetRequestStream())
{
StreamWriter mySwrite = new StreamWriter(reqStream, Encoding.GetEncoding("UTF-8"));
mySwrite.Write(paramData);//写入参数
mySwrite.Close();
}
using (HttpWebResponse response = (HttpWebResponse)webReq.GetResponse())
{
var code = response.StatusCode.ToString();
//在这里对接收到的页面内容进行处理
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
{
responseContent = sr.ReadToEnd().ToString();
}
}
}
catch (WebException ex)
{
//SysLog.WriteEorr("【操作异常】:" + ex.Message.ToString() + "---------" + ex.StackTrace.ToString(), "测试日志", "服务端数据");
return ex.Message + "【链接异常】";
}
//catch ( Exception ex)
//{
// return "连接远程服务器出错"; ;
//}
return responseContent;
}
/// <summary>
///
/// </summary>
/// <param name="url">目标url</param>
/// <param name="strPost">要发送的post字符串</param>
/// <returns>接收后返回值</returns>
public string PostXML(string url, string strPost)
{
string result = string.Empty;
//生成文件流
byte[] buffer = Encoding.UTF8.GetBytes(strPost);
//向流中写字符串
StreamWriter mywriter = null;
//根据url创建请求对象
HttpWebRequest objrequest = (HttpWebRequest)WebRequest.Create(url);
//设置发送方式
objrequest.Method = "POST";
//提交长度
objrequest.ContentLength = buffer.Length;
//发送内容格式
objrequest.ContentType = "text/xml;charset=UTF-8";
objrequest.Timeout = _TimeOut;
try
{
mywriter = new StreamWriter(objrequest.GetRequestStream());
mywriter.Write(strPost);
mywriter.Close();
HttpWebResponse objresponse;
try
{
//读取服务器返回信息
objresponse = (HttpWebResponse)objrequest.GetResponse();
}
catch (WebException EX)
{
objresponse = (HttpWebResponse)EX.Response;
}
using (StreamReader sr = new StreamReader(objresponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
}
catch (Exception ex)
{
result = "发送文件流失败!";
}
return result;
}
#endregion
/// <summary>
/// 当MES离线时,保存上传数据(MrLin)
/// </summary>
/// <param name="requestJson"></param>
private static void SaveOutlineData(string requestJson)
{
//每次创建一个新的文件文本
string logSite = $@"D:\MESData\ErrData{DateTime.Now.ToString("ffffff")}.txt";
try
{
WriteState = false;
//防止重复数据存入本地的判断
if (!listSource.Contains(requestJson))
{
//SysLog.WriteContext(requestJson, logSite);
//写入记录之后将数据存入到本地结合,防止重复数据存入到本地文件
listSource.Add(requestJson);
}
//文件写完标记
WriteState = true;
}
catch (Exception err)
{
//string str = SysLog.ReadContext(logSite) + "\r\n" + "";
WriteState = true;
}
}
}
}