Files
602_FD/JinYuan.MES/MesDataProcess.cs
2026-07-02 17:22:02 +08:00

1955 lines
88 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 JinYuan.Helper;
using JinYuan.MES.Enums;
using JinYuan.MES.Models;
using JinYuan.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace JinYuan.MES
{
public class MesDataProcess : IMes
{
private static LoggerHelp _logger = new LoggerHelp();
#region 1、登录验证
/// <summary>
/// 登录MES验证
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="userName"></param>
/// <param name="passWord"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public bool LoginEnyity(string url, string siteCode, string lineCode, string equipNum, string userName, string passWord, string UserCardID, ref string Mesage)
{
bool res = false;
string resJson = "";
try
{
var webApi = new MESApiHelper();
var model = new LoginEnyity
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
userName = userName,
passWord = passWord,
userCardID = null// UserCardID
};
var nowDate = DateTime.Now;
var postData = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postData);
sw.Stop();
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用员工权限校验接口:{url},请求数据为:{postData},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\员工权限校验\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponse>(result);
if (res1 == null || !res1.success || !string.IsNullOrEmpty(res1.code) || !string.IsNullOrEmpty(res1.message))
{
var resData = res1 == null ? "" : JsonConvert.SerializeObject(res1);
Mesage = res1.message;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用员工权限校验接口:{url},请求数据为:{postData}\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\员工权限校验\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
res = true;
Mesage = res1.message;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用员工权限校验接口:{url},请求数据为:{postData}\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{JsonConvert.SerializeObject(result)}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\员工权限校验\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"调用员工权限校验接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("调用员工权限校验接口", ex);
}
return res;
}
#endregion
#region 2、获取MES参数请求
/// <summary>
/// 获取MES参数请求
/// </summary>
/// <param name="url"></param>
/// <param name="equipNum"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public ParamReturnData GetParamSetRequest(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, ref string Mesage)
{
string resJson = "";
try
{
var model = new
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName
};
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用设备参数设定值请求接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\设备参数设定值请求\{nowDate.ToString("HH")}.txt", resJson);
return null;
}
var res1 = ReturnMesMsg<ParamReturnData>(result);
if (res1.success)
{
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用设备参数设定值请求接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\设备参数设定值请求\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用设备参数设定值请求接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\设备参数设定值请求\{nowDate.ToString("HH")}.txt", resJson);
}
return res1;
}
catch (Exception ex)
{
resJson = $"设备参数设定值请求接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("设备参数设定值请求接口", ex);
}
return null;
}
#endregion
#region 3、参数变更请求
/// <summary>
/// 参数变更请求
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="paramChangeItems"></param>
/// <param name="Mesage"></param>
/// <returns></returns>
public bool ParamChange(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, List<TagListItem> paramChangeItems, ref string Mesage)
{
bool res = false;
string resJson = "";
try
{
var model = new ParamChange
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
changeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
tagGroupCode = "",
tagGroupDescription = "",
};
model.tagList = new List<TagListItem>();
model.tagList.Add(new TagListItem
{
tagCode = "",
unitBefore = "",
});
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
var resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用参数设定值变更接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\MesLogs\{nowDate.ToString("yyyyMMdd")}\参数设定值变更\{nowDate.ToString("HH")}.txt", resJson);
}
catch (Exception ex)
{
resJson = $"参数设定值变更接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("参数设定值变更接口", ex);
}
return res;
}
#endregion
#region 4、单个上传(只上传卷芯码,不上传托杯码)
/// <summary>
/// 单个上传(只上传卷芯码,不上传托杯码)
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="BarCode"></param>
/// <param name="resJson"></param>
/// <param name="mesResType"></param>
/// <returns>{"rows":[{"code":null,"success":true,"message":null,"identification":"InsertAt20231218095755934","containerCode":null,"category":null}],"success":true,"total":1}
/// </returns>
public bool SingleCellInStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, string BarCode, ref string Mesage, ref MesResType mesResType)
{
bool res = false;
string resJson = "";
mesResType = MesResType.D;//默认为OK EVEDL14L2JECX01
try
{
var webApi = new MESApiHelper();
var model = new SingleCellInStation
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
identification = BarCode,
productType = "MB56"
};
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"预焊进站PC<=>MES上传耗时:{outTime}ms,电芯码:{BarCode}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponseIn>(result);
if (res1.success)
{
res = true;
GetInMesResType(res1, BarCode, ref Mesage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
GetInMesResType(res1, BarCode, ref Mesage, ref mesResType);
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
Mesage = "调用进站接口超时或MES无返回信息!";
mesResType = MesResType.B;
resJson = $"产品进站信息(组装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品进站信息(组装)接口", ex);
}
return res;
}
#endregion
#region 5、复投单个上传(只上传条码,不上传卷芯码)
/// <summary>
/// 复投单个上传(只上传条码,不上传卷芯码)
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="BarCode"></param>
/// <param name="resJson"></param>
/// <param name="mesResType"></param>
/// <returns></returns>
public bool SingleFTCellInStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, string BarCode, ref string Mesage, ref MesResType mesResType)
{
bool res = false;
string resJson = "";
try
{
var webApi = new MESApiHelper();
var model = new ManyCellInStation
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
};
//电芯条码
model.identificationList = new List<string>();
model.identificationList.Add(BarCode);
//电芯托杯码
model.containerCodeList = new List<string>();
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"钢壳进站PC<=>MES上传耗时:{outTime}ms,钢壳码:{BarCode}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponseIn>(result);
if (res1.success)
{
res = true;
GetInMesResType(res1, BarCode, ref Mesage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品进站信息(组装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品进站信息(组装)接口", ex);
}
return res;
}
#endregion
#region 6、多个电池进站
/// <summary>
/// 多个电池进站
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="listBar"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
/// <returns></returns>
public bool ManyCellInStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, List<string> listBar, ref List<string> MesMessage, ref List<MesResType> mesResType)
{
bool res = false;
string resJson = "";
MesMessage = GetListString(listBar.Count, "进站失败");
mesResType = GetMesType(listBar.Count);
try
{
var model = new ManyCellInStation
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
productType = "OK",
};
//电芯条码
model.identificationList = new List<string>();
for (int i = 0; i < listBar.Count; i++)
{
model.identificationList.Add(listBar[i]);
}
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"预焊进站PC<=>MES上传耗时:{outTime}ms,电芯码:{listBar[0]},{listBar[1]},{listBar[2]},{listBar[3]}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponseIn>(result);
bool temple = false;
if (res1 != null)
{
temple = true;
}
if (temple)
{
res = true;
//GetInMesResType(res1, listBar, ref MesMessage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品进站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品进站信息(组装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品进站信息(组装)接口", ex);
}
return res;
}
#endregion
#region 7、单个电池出站
/// <summary>
/// 单个电池出站
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="userName"></param>
/// <param name="equipNum"></param>
/// <param name="lineCode"></param>
/// <param name="materialCode"></param>
/// <param name="m"></param>
/// <param name="type"></param>
/// <param name="mesage"></param>
/// <param name="mesResType"></param>
/// <returns></returns>
public bool SingleCellOutStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, BGearEntity m, int type, string materialLotCodeLocator, ref string mesage, ref MesResType mesResType)
{
bool res = false;
string resJson = "";
string[] ngCode = new string[1];
ngCode[0] = "";
try
{
JArray jaContainerCode = new JArray(); //containerCodeAndIdentificationList
JArray jaMaterialLotCodeList = new JArray(); //materialLotCodeList
JObject jo4 = new JObject();
jo4.Add("materialLotCode", "");
jo4.Add("materialLotCodeLocator", materialLotCodeLocator);
jaMaterialLotCodeList.Add(jo4);
JArray jaIdentiftyList = new JArray();//identiftyList
JObject jo3 = new JObject();
jo3.Add("identification", m.BarCode); //卷心码
jo3.Add("qualityStatus", m.Result);
jo3.Add("qrCode", ""); //
jo3.Add("ngMessage", m.Remark);
jo3.Add("materialLotList", jaMaterialLotCodeList);
jaIdentiftyList.Add(jo3);
JObject jo2 = new JObject();
jo2.Add("containerCode", "");//托杯码
jo2.Add("identiftyList", jaIdentiftyList);
jaContainerCode.Add(jo2);
JObject jo1 = new JObject();
jo1.Add("siteCode", siteCode);
jo1.Add("lineCode", lineCode);
jo1.Add("equipNum", equipNum);
jo1.Add("userName", userName);
jo1.Add("productType", "");
jo1.Add("completeQty", "");
jo1.Add("type", 1); //追溯标识替换
jo1.Add("materialCode", materialCode);
jo1.Add("containerCodeAndIdentificationList", jaContainerCode);
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(jo1);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"钢壳进出站PC<=>MES上传耗时:{outTime}ms,钢壳码:{m.BarCode}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponse>(result);
if (res1.success)
{
res = true;
GetOutMesResType(res1, m.BarCode, ref mesage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品出站信息(组装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品出站信息(组装)接口", ex);
}
return res;
}
#endregion
#region 8、进出站一体模式(单电池)
/// <summary>
/// 进出站一体模式(单电池)
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="m"></param>
/// <param name="type"></param>
/// <param name="materialLotCodeLocator"></param>
/// <param name="mesage"></param>
/// <param name="mesResType"></param>
/// <returns></returns>
public bool SingleCellInAndOutStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, BGearEntity m, int type, string materialLotCodeLocator, ref string mesage, ref MesResType mesResType)
{
bool res = false;
string resJson = "";
string[] ngCode = new string[1];
ngCode[0] = "";
try
{
JArray jaContainerCode = new JArray(); //containerCodeAndIdentificationList
JArray jaMaterialLotCodeList = new JArray(); //materialLotCodeList
JObject jo4 = new JObject();
jo4.Add("materialLotCode", "");
jo4.Add("materialLotCodeLocator", materialLotCodeLocator);
jaMaterialLotCodeList.Add(jo4);
JArray jaIdentiftyList = new JArray();//identiftyList
JObject jo3 = new JObject();
jo3.Add("identification", m.BarCode); //卷心码
jo3.Add("qualityStatus", m.Result);
jo3.Add("qrCode", ""); //
jo3.Add("ngMessage", m.Remark);
jo3.Add("materialLotList", jaMaterialLotCodeList);
jaIdentiftyList.Add(jo3);
JObject jo2 = new JObject();
jo2.Add("containerCode", "");//托杯码
jo2.Add("identiftyList", jaIdentiftyList);
jaContainerCode.Add(jo2);
JObject jo1 = new JObject();
jo1.Add("siteCode", siteCode);
jo1.Add("lineCode", lineCode);
jo1.Add("equipNum", equipNum);
jo1.Add("userName", userName);
jo1.Add("productType", "");
jo1.Add("completeQty", "");
jo1.Add("type", 1); //追溯标识替换
jo1.Add("materialCode", materialCode);
jo1.Add("containerCodeAndIdentificationList", jaContainerCode);
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(jo1);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"钢壳进出站PC<=>MES上传耗时:{outTime}ms,钢壳码:{m.BarCode}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用进出站一体信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进出站一体信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponse>(result);
if (res1.success)
{
res = true;
GetOutMesResType(res1, m.BarCode, ref mesage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用进出站一体信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进出站一体信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用进出站一体信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品进出站一体信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品进出站一体信息(组装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品进出站一体信息(组装)接口", ex);
}
return res;
}
#endregion
/// <summary>
/// 多个电芯上传
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public bool OutboundInformations(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, BGearEntity listBar, ref string MesMessage, ref MesResType mesResType, List<string> NGcodeList, List<string> ngMessage)
{
bool res = false;
string resJson = "";
MesMessage = "出站失败";
mesResType = MesResType.B;
//MesMessage = GetListString(listBar.Count, "出站失败");
//mesResType = GetMesType(listBar.Count);
try
{
var model = new ManyCellOutStation
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
userName = userName,
containerCode = "",
materialCode = materialCode,
productType = "MB56",
//completeQty = listBar.Count.ToString(),
type = 1
};
for (int i = 0; i < 1; i++)
{
//先给mes 传OK
model.assembleLineList = new List<assembleLineList>()
{
new assembleLineList()
{
identification=listBar.BarCode,
qualityStatus = listBar.CSBYHOUTSTATIONJUDGMENTRESULT,
qrCode = "",
ngCode = NGcodeList,
ngMessage = string.Join(",",ngMessage),
materialLotList=new List<string>{},
materialLotCode= "",
}
};
}
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"外观检出站PC<=>MES上传耗时:{outTime}ms,电芯码:{listBar.BarCode}", "MESTime");
}
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(包装)\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponse>(result);
if (res1.success)
{
res = true;
GetOutMesResType(res1, listBar.BarCode, ref MesMessage, ref mesResType);
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(包装)\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
GetOutMesResType(res1, listBar.BarCode, ref MesMessage, ref mesResType);
var resData = res1 == null ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(包装)\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品出站信息(包装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品出站信息(包装)接口", ex);
}
return res;
}
//#region 9、多个电池出站
///// <summary>
///// 多个电池出站
///// </summary>
///// <param name="url"></param>
///// <param name="siteCode"></param>
///// <param name="userName"></param>
///// <param name="equipNum"></param>
///// <param name="lineCode"></param>
///// <param name="materialCode"></param>
///// <param name="listBar"></param>
///// <param name="type"></param>
///// <param name="resJson"></param>
///// <param name="mesResType"></param>
///// <returns></returns>
//public bool ManyCellOutStation(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, List<BGearEntity> list, int type, string materialLotCodeLocator, ref List<string> MesMessage, ref List<MesResType> mesResType)
//{
// DateTime nowDate = DateTime.Now;
// string resJson = "";
// bool res = false;
// MesMessage = GetListString(list.Count, "MES出站失败");
// mesResType = GetMesType(list.Count);
// try
// {
// JArray jaContainerCode = new JArray(); //containerCodeAndIdentificationList
// foreach (BGearEntity m in list)
// {
// JArray jaMaterialLotCodeList = new JArray(); //materialLotCodeList
// JObject jo4 = new JObject();
// jo4.Add("materialLotCode", "");
// jo4.Add("materialLotCodeLocator", materialLotCodeLocator);
// jaMaterialLotCodeList.Add(jo4);
// JArray jaIdentiftyList = new JArray();//identiftyList
// JObject jo3 = new JObject();
// jo3.Add("identification", m.BarCode); //电芯码
// jo3.Add("materialLotList", "");
// jo3.Add("materialLotCode", "");
// jo3.Add("materialLotCodeLocator", "");
// jo3.Add("qualityStatus", m.Result);
// jo3.Add("qrCode", ""); //
// jo3.Add("ngCode",m.ngCode);
// jo3.Add("ngMessage", m.Remark);
// jo3.Add("materialLotList", jaMaterialLotCodeList);
// jaIdentiftyList.Add(jo3);
// }
// JObject jo1 = new JObject();
// jo1.Add("siteCode", siteCode);//工厂代码
// jo1.Add("lineCode", lineCode);//产线编号
// jo1.Add("equipNum", equipNum);//设备编号
// jo1.Add("materialCode", materialCode);//物料编码
// jo1.Add("userName", userName);//员工账号
// jo1.Add("productType", "");//产品类型
// jo1.Add("completeQty", "");//完工数
// jo1.Add("containerCode", "");//托盘码
// jo1.Add("type", 1); //追溯标识替换
// jo1.Add("containerCodeAndIdentificationList", jaContainerCode);
// var postcontent = JsonConvert.SerializeObject(jo1);
// var sw = new Stopwatch();
// sw.Start();
// string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
// sw.Stop();
// long outTime = sw.ElapsedMilliseconds;
// if (outTime > 1000)
// {
// LogHelper.Instance.WriteLog($"预焊出站PC<=>MES上传耗时:{outTime}ms,电芯码:{list[0].BarCode},{list[1].BarCode},{list[2].BarCode},{list[3].BarCode},{list[4].BarCode},{list[5].BarCode},{list[6].BarCode},{list[7].BarCode}", "MESTime");
// }
// if (string.IsNullOrEmpty(result))
// {
// string resData = result == "" ? "" : result;
// resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
// TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
// return res;
// }
// var res1 = ReturnMesMsg<MesResponseOut>(result);
// if (res1.success)
// {
// res = true;
// GetOutMesResType(res1, list, ref MesMessage, ref mesResType);
// resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
// TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
// }
// else
// {
// var resData = res1 == null ? "" : result;
// resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品出站信息(组装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
// TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息(组装)\{nowDate.ToString("HH")}.txt", resJson);
// }
// }
// catch (Exception ex)
// {
// resJson = $"产品出站信息(组装)接口发生异常:{ex.Message}";
// LogHelper.Instance.WriteEX("产品出站信息(组装)接口", ex);
// }
// return res;
//}
//#endregion
#region 10、 过程数据上传
/// <summary>
/// 过程数据上传
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="userName"></param>
/// <param name="equipNum"></param>
/// <param name="lineCode"></param>
/// <param name="materialCode"></param>
/// <param name="unloadType"></param>
/// <param name="productProcessParam"></param>
/// <param name="resJson"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool ProductProcessParam(string url, string siteCode, string userName, string equipNum, string lineCode, string materialCode, MesUploadType unloadType, List<ProductProcessParam> productProcessParam, ref string resJson)
{
throw new NotImplementedException();
}
#endregion
#region 11、结果参数上传
/// <summary>
/// 结果参数上传
/// </summary>
/// <param name="url"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="equipNum"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="m"></param>
/// <param name="unloadType"></param>
/// <param name="Mesage"></param>
/// <returns></returns>
public bool ProducResultParam(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, BGearEntity m, MesUploadType unloadType, ref string Mesage)
{
bool res = false;
string resJson = "";
#region 结果上传MES
try
{
var nowDate = DateTime.Now;
string sNowDate = nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff");
var model = new ProductResultParameters
{
equipNum = equipNum,
type = unloadType.ToString(),
payload = ""
};
#region old
//string ZhongliangA = "";
//string ZhongliangB = "";
//string CeHouA = "";
//string CeHouB = "";
//string JiXingA = "";
//string JiXingB = "";
//string HanYingA = "";
//string HanYingB = "";
//string ZhengJiErSiLieA = "";
//string ZhengJiErSiLieB = "";
//string BeiJiErSiLieA = "";
//string BeiJiErSiLieB = "";
//string ZhengJiErFanA = "";
//string ZhengJiErFanB = "";
//string BeiJiErFanA = "";
//string BeiJiErFanB = "";
//for (int i = 0; i < 2; i++)
//{
// //芯包重量1判定结果
// if (m.list_Data1[i, 10] == 1)
// {
// if (i == 0)
// ZhongliangA = "OK";
// else
// ZhongliangB = "OK";
// }
// else if (m.list_Data1[i, 10] == 2)
// {
// if (i == 0)
// ZhongliangA = "NG";
// else
// ZhongliangB = "NG";
// }
// //芯包侧厚判定结果
// if (m.list_Data1[i, 11] == 1)
// {
// if (i == 0)
// CeHouA = "OK";
// else
// CeHouB = "OK";
// }
// else if (m.list_Data1[i, 11] == 2)
// {
// if (i == 0)
// CeHouA = "NG";
// else
// CeHouB = "NG";
// }
// //芯包CCD极性检测结果
// if (m.list_Data1[i, 12] == 1)
// {
// if (i == 0)
// JiXingA = "OK";
// else
// JiXingB = "OK";
// }
// else if (m.list_Data1[i, 12] == 2)
// {
// if (i == 0)
// JiXingA = "NG";
// else
// JiXingB = "NG";
// }
// //芯包焊印位置判定结果
// if (m.list_Data1[i, 15] == 1)
// {
// if (i == 0)
// HanYingA = "OK";
// else
// HanYingB = "OK";
// }
// else if (m.list_Data1[i, 15] == 2)
// {
// if (i == 0)
// HanYingA = "NG";
// else
// HanYingB = "NG";
// }
// //芯包正面极耳撕裂判定结果
// if (m.list_Data1[i, 16] == 1)
// {
// if (i == 0)
// ZhengJiErSiLieA = "OK";
// else
// ZhengJiErSiLieB = "OK";
// }
// else if (m.list_Data1[i, 16] == 2)
// {
// if (i == 0)
// ZhengJiErSiLieA = "NG";
// else
// ZhengJiErSiLieB = "NG";
// }
// //芯包背面极耳撕裂判定结果
// if (m.list_Data1[i, 17] == 1)
// {
// if (i == 0)
// BeiJiErSiLieA = "OK";
// else
// BeiJiErSiLieB = "OK";
// }
// else if (m.list_Data1[i, 17] == 2)
// {
// if (i == 0)
// BeiJiErSiLieA = "NG";
// else
// BeiJiErSiLieB = "NG";
// }
// //芯包正面极耳翻折检测结果
// if (m.list_Data1[i, 18] == 1)
// {
// if (i == 0)
// ZhengJiErFanA = "OK";
// else
// ZhengJiErFanB = "OK";
// }
// else if (m.list_Data1[i, 18] == 2)
// {
// if (i == 0)
// ZhengJiErFanA = "NG";
// else
// ZhengJiErFanB = "NG";
// }
// //芯包背面极耳翻折检测结果
// if (m.list_Data1[i, 19] == 1)
// {
// if (i == 0)
// BeiJiErFanA = "OK";
// else
// BeiJiErFanB = "OK";
// }
// else if (m.list_Data1[i, 19] == 2)
// {
// if (i == 0)
// BeiJiErFanA = "NG";
// else
// BeiJiErFanB = "NG";
// }
//}
#endregion
switch (unloadType)
{
case MesUploadType.DD:
var payload1 = new Payload1
{
siteCode = siteCode,
lineCode = lineCode,
userName = userName,
materialCode = materialCode,
carCode = "",
collection = "JS",
recordDate = sNowDate,
qty = 1,
containerCode = "",
};
payload1.identification = new IdentificationListItem
{
identification = m.BarCode,
qualityStatus = "Y",//m.CSBYHOUTSTATIONJUDGMENTRESULT,
};
payload1.tagDataVOList = GetTagDataVOList(m, equipNum, payload1);
model.payload = JsonConvert.SerializeObject(payload1);
//payload1= JsonConvert.SerializeObject(payload1);
break;
}
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品结果加工参数接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品结果加工参数\{nowDate.ToString("HH")}.txt", resJson);
return res;
}
var res1 = ReturnMesMsg<MesResponse>(result);
if (!res1.success)
{
var resData = res1 == null ? "" : JsonConvert.SerializeObject(res1);
Mesage = res1.message;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品结果加工参数接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品结果加工参数\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
res = true;
Mesage = res1.message;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用产品结果加工参数接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{JsonConvert.SerializeObject(result)}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品结果加工参数\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"产品结果加工参数接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("产品结果加工参数接口", ex);
}
#endregion
return res;
}
private List<TagDataVOListItem> GetTagDataVOList(BGearEntity m, string equipNum, Payload1 payload1)
{
//var AGearList =
string insertTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
List<TagDataVOListItem> datavolist = new List<TagDataVOListItem>();
string strFileName = System.Environment.CurrentDirectory + "\\采集项目表.csv";
FileStream fileStream = new FileStream(strFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader streamReader = new StreamReader(fileStream);
_ = streamReader.ReadLine();
while (!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
string[] keys = line.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (keys.Length == 3)
{
var temp = m.GetType().GetProperty(keys[1]).GetValue(m, null);
datavolist.Add(new TagDataVOListItem()
{
tagCode = keys[0],
tagValue = temp == null ? "0" : temp.ToString(),//m
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "Y",
tagRemark = keys[2]
});
}
}
#region 本地字段没有,手动赋值
{//非Y项//工序名称
// 产线名称
// 设备编号
//操作员
//班次
//生产型号
// 工厂名称
datavolist.Add(new TagDataVOListItem()
{
tagCode = "factory_name",
tagValue = payload1.siteCode,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "工厂名称"
});
// 工序名称
datavolist.Add(new TagDataVOListItem()
{
tagCode = "process_name",
tagValue = m.CSBYHPROCESSNAME,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "工序名称"
});
// 产线名称
datavolist.Add(new TagDataVOListItem()
{
tagCode = "production_line_name",
tagValue = payload1.lineCode,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "工序名称"
});
// 设备编码
datavolist.Add(new TagDataVOListItem()
{
tagCode = "equipment_id",
tagValue = equipNum,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "设备编码"
});
// 操作员
datavolist.Add(new TagDataVOListItem()
{
tagCode = "operator",
tagValue = payload1.userName,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "操作员"
});
// 班次
datavolist.Add(new TagDataVOListItem()
{
tagCode = "work_shift",
tagValue = m.CSBYHSCHEDULE,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "班次"
});
// 生产型号
datavolist.Add(new TagDataVOListItem()
{
tagCode = "product_model",
tagValue = payload1.materialCode,
tagTime = DateTime.Now.ToString(),
tagCalculateResult = "",
tagRemark = "生产型号"
});
}
#endregion
return datavolist;
}
#endregion
#region 12、设备状态
/// <summary>
/// 设备状态
/// </summary>
/// <param name="url"></param>
/// <param name="equipNum"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="statusCode"></param>
/// <param name="materialCode"></param>
/// <param name="userName"></param>
/// <param name="faultCodes"></param>
/// <param name="guid"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public bool UploadEquStatus(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, string guid, string statusCode, List<FaultCodeList> faultCodes, ref string Mesage)
{
bool res = false;
string resJson = "";
try
{
DateTime nowDate = DateTime.Now;
string sNowDate = nowDate.ToString("yyyy/MM/dd HH:mm:ss");
var parameters = new EqpStatusParam
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
seatId = "",
recordDate = sNowDate,
statusCode = statusCode.ToString(),
uploadTime = sNowDate,
guid = guid
};
if (faultCodes != null)
{
parameters.faultCodeList = faultCodes;
}
else
{
parameters.faultCodeList = null;
}
var postcontent = JsonConvert.SerializeObject(parameters);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
res = true;
resJson = $"{sNowDate}:调用设备运行状态接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy/MM/dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{JsonConvert.SerializeObject(result)}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\设备运行状态\{nowDate.ToString("HH")}.txt", resJson);
}
catch (Exception ex)
{
resJson = $"设备运行状态接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("设备运行状态接口", ex);
}
return res;
}
#endregion
#region 13、设备报警上传接口
/// <summary>
/// 设备报警上传接口
/// </summary>
/// <param name="url"></param>
/// <param name="equipNum"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="userName"></param>
/// <param name="materialCode"></param>
/// <param name="alarmObj"></param>
/// <param name="guid"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public bool UploadEquAlarm(string url, string siteCode, string lineCode, string equipNum, string materialCode, string userName, List<AlarmData> alarmObj, string guid, ref string mesage)
{
bool res = false;
string resJson = "";
try
{
var nowDate = DateTime.Now;
if (alarmObj.Count > 0)
{
var model = new UploadAlarmParam
{
siteCode = siteCode,
lineCode = lineCode,
equipNum = equipNum,
materialCode = materialCode,
userName = userName,
recordDate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
guid = guid,
seatId = ""
};
model.alarmLineList = new List<AlarmLineListItem>();
for (int j = 0; j < alarmObj.Count; j++)
{
AlarmLineListItem alarmList = new AlarmLineListItem();
alarmList.alarmEndTime = alarmObj[j].EndTime.ToString();
alarmList.alarmType = alarmObj[j].AlarmType;
alarmList.alarmName = alarmObj[j].AlarmContent;
alarmList.alarmStartTime = alarmObj[j].StartTime.ToString();
alarmList.faultCode = alarmObj[j].AlarmCode;
model.alarmLineList.Add(alarmList);
}
var postcontent = JsonConvert.SerializeObject(model);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
res = true;
resJson = $"{nowDate.ToString("yyyy/MM/dd HH:mm:ss.fff")}:调用设备报警信息接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy/MM/dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{JsonConvert.SerializeObject(result)}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\报警信息\{nowDate.ToString("HH")}.txt", resJson);
}
}
catch (Exception ex)
{
resJson = $"调用设备报警信息接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("调用设备报警信息接口", ex);
}
return res;
}
#endregion
#region 14、上传设备能耗数据
/// <summary>
/// 上传设备能耗数据
/// </summary>
/// <param name="url"></param>
/// <param name="equipNum"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="userName"></param>
/// <param name="electricMeterNum"></param>
/// <param name="wattrs"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public bool UploadEquEnergy(string url, string siteCode, string lineCode, string equipNum, string userName, List<string> electricMeterNum, List<WattrMeter> wattrs, ref string resJson)
{
bool res = false;
try
{
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(wattrs);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
res = true;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用设备能耗信息接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{JsonConvert.SerializeObject(result)}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\设备能耗信息\{nowDate.ToString("HH")}.txt", resJson);
}
catch (Exception ex)
{
resJson = $"调用设备能耗信息接口:{ex.Message}";
LoggerHelp.WriteEX("调用设备能耗信息接口", ex);
}
return res;
}
#endregion
#region 15、风速仪数据上传至MES
/// <summary>
/// 风速仪数据上传至MES
/// </summary>
/// <param name="url"></param>
/// <param name="equipNum"></param>
/// <param name="antiDustAirSpeedNum"></param>
/// <param name="collectData"></param>
/// <param name="resJson"></param>
/// <returns></returns>
public bool UploadDeviceCollectData(string url, string equipNum, List<string> antiDustAirSpeedNum, List<float> collectData, ref string mesage)
{
bool res = false;
string resJson = "";
try
{
if (collectData == null) { return false; }
UploadDeviceCollectData uploadDevice = new UploadDeviceCollectData();
uploadDevice.appid = "e1012966a936170c6fcab98e24042d10";
uploadDevice.device_code = equipNum;
uploadDevice.collect_time = GetUnixTimestamp();
List<Collect_code_value_list> list = new List<Collect_code_value_list>();
for (int i = 0; i < collectData.Count; i++)
{
Collect_code_value_list _Value_List = new Collect_code_value_list();
_Value_List.target_code = 5;
_Value_List.target_value = collectData[i].ToString();
_Value_List.target_value_tag = antiDustAirSpeedNum[i];
list.Add(_Value_List);
}
uploadDevice.collect_code_value_list = list;
var nowDate = DateTime.Now;
string postcontent = JsonConvert.SerializeObject(uploadDevice);
var sw = new Stopwatch();
sw.Start();
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
sw.Stop();
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用风速接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\风速信息\{nowDate.ToString("HH")}.txt", resJson);
}
catch (Exception ex)
{
resJson = $"调用风速接口:{ex.Message}";
LoggerHelp.WriteEX("调用风速接口", ex);
}
return res;
}
#endregion
#region 16、数据处理逻辑
/// <summary>
/// 单电池进站分类
/// </summary>
/// <param name="res1"></param>
/// <param name="BarCode"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
private void GetInMesResType(MesResponseIn res1, string BarCode, ref string MesMessage, ref MesResType mesResType)
{
if (res1 != null && res1 != null)
{
if (res1.success)
{
mesResType = MesResType.D;
MesMessage = "MES进站成功 ";
}
else
{
if (res1.category == null)
{
mesResType = MesResType.B;
MesMessage = res1.message;
}
else
{
switch (res1.category)
{
case "A":
mesResType = MesResType.A;
MesMessage = res1.message;
break;
case "B":
mesResType = MesResType.B;
MesMessage = res1.message;
break;
case "C":
mesResType = MesResType.C;
MesMessage = res1.message;
break;
default:
mesResType = MesResType.UnKnow;
MesMessage = "MES进站失败 ";
break;
}
}
}
}
}
/// <summary>
/// 多电池进站分类
/// </summary>
/// <param name="res1"></param>
/// <param name="listBar"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
//private void GetInMesResType(MesResponseIn res1, List<string> listBar, ref List<string> MesMessage, ref List<MesResType> mesResType)
//{
// if (res1 != null)
// {
// for (int i = 0; i < res1.total; i++)
// {
// for (int j = 0; j < res1.total; j++)
// {
// if (res1.rows[j].identification == listBar[i])
// {
// if (res1.rows[j].success)
// {
// mesResType[i] = MesResType.D;
// MesMessage[i] = "MES进站成功 ";
// }
// else
// {
// if (res1.rows[j].category == null)
// {
// mesResType[i] = MesResType.B;
// MesMessage[i] = res1.rows[j].message;
// }
// else
// {
// switch (res1.rows[j].category)
// {
// case "A":
// mesResType[i] = MesResType.A;
// MesMessage[i] = res1.rows[j].message;
// break;
// case "B":
// mesResType[i] = MesResType.B;
// MesMessage[i] = res1.rows[j].message;
// break;
// case "C":
// mesResType[i] = MesResType.C;
// MesMessage[i] = res1.rows[j].message;
// break;
// default:
// mesResType[i] = MesResType.UnKnow;
// MesMessage[i] = "MES进站失败 ";
// break;
// }
// }
// }
// }
// }
// }
// }
//}
/// <summary>
/// 单电池出站分类
/// </summary>
/// <param name="res1"></param>
/// <param name="BarCode"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
private void GetOutMesResType(MesResponse res1, string BarCode, ref string MesMessage, ref MesResType mesResType)
{
if (res1 != null && res1 != null)
{
if (res1.success)
{
mesResType = MesResType.D;
MesMessage = "MES出站成功 ";
}
else
{
if (res1.category == null)
{
mesResType = MesResType.B;
MesMessage = res1.message;
}
else
{
switch (res1.category)
{
case "A":
mesResType = MesResType.A;
MesMessage = res1.message;
break;
case "B":
mesResType = MesResType.B;
MesMessage = res1.message;
break;
case "C":
mesResType = MesResType.C;
MesMessage = res1.message;
break;
default:
mesResType = MesResType.UnKnow;
MesMessage = "MES出站失败 ";
break;
}
}
}
}
}
/// <summary>
/// 多电池出站结果分类
/// </summary>
/// <param name="res1"></param>
/// <param name="list"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
private void GetOutMesResType(MesResponseOut res1, List<BGearEntity> list, ref List<string> MesMessage, ref List<MesResType> mesResType)
{
if (res1 != null)
{
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < res1.total; j++)
{
if (res1.rows[j].identification == list[i].BarCode)
{
if (res1.rows[j].success)
{
mesResType[i] = MesResType.D;
MesMessage[i] = "MES出站成功 ";
}
else
{
if (res1.rows[j].category == null)
{
mesResType[i] = MesResType.B;
MesMessage[i] = res1.rows[j].message;
}
else
{
switch (res1.rows[i].category)
{
case "A":
mesResType[i] = MesResType.A;
MesMessage[i] = res1.rows[j].message;
break;
case "B":
mesResType[i] = MesResType.B;
MesMessage[i] = res1.rows[j].message;
break;
case "C":
mesResType[i] = MesResType.C;
MesMessage[i] = res1.rows[j].message;
break;
default:
mesResType[i] = MesResType.UnKnow;
MesMessage[i] = "MES出站失败 ";
break;
}
}
}
}
}
}
}
}
/// <summary>
/// 序列化各类返回
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ret"></param>
/// <returns></returns>
private T ReturnMesMsg<T>(string ret)
{
try
{
return JsonConvert.DeserializeObject<T>(ret);
}
catch (System.Exception ex)
{
return default(T);
}
}
public List<MesResType> GetMesType(int Num)
{
List<MesResType> mesResTypes = new List<MesResType>();
for (int i = 0; i < Num; i++)
{
mesResTypes.Add(MesResType.B);
}
return mesResTypes;
}
public List<string> GetListString(int Num, string str)
{
List<string> mesResTypes = new List<string>();
for (int i = 0; i < Num; i++)
{
mesResTypes.Add(str);
}
return mesResTypes;
}
/// <summary>
///本地时间为Unix时间戳
/// </summary>
/// <returns></returns>
public static long GetUnixTimestamp()
{
return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}
#endregion
#region 17、单个电池分档
/// <summary>
/// 单个电池分档
/// </summary>
/// <param name="url"></param>
/// <param name="barCode"></param>
/// <param name="siteCode"></param>
/// <param name="lineCode"></param>
/// <param name="userName"></param>
/// <param name="equipCode"></param>
/// <param name="materialCode"></param>
/// <returns></returns>
public (bool Success, List<string> MesMessage, List<string> MesResType, List<string> mesResFangAnType) MesGrading(
string url, string barCode, string siteCode, string lineCode, string userName, string equipCode, string materialCode)
{
bool res = false; // 操作结果
string resJson = ""; // 日志信息
//string mesage = ""; // 消息
//MesResType mesResType = MesResType.D; // 默认响应类型
var lstbarCode = new List<string>();
lstbarCode.Add(barCode);
List<string> mesage = GetListString(lstbarCode.Count, "分档失败"); // 消息列表
List<string> mesResType = GetListString(lstbarCode.Count, "NULL"); // 响应类型列表
List<string> mesResFangAnType = GetListString(lstbarCode.Count, "NULL"); // 新增分档方案响应类型列表
try
{
// 直接构建电池信息列表(对应materiallotCodeList)
JArray materiallotCodeList = new JArray(lstbarCode);
JObject gradingParam = new JObject();
gradingParam.Add("siteCode", siteCode);
gradingParam.Add("lineCode", lineCode);
gradingParam.Add("userName", userName);
gradingParam.Add("equipCode", equipCode);
gradingParam.Add("recordDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
gradingParam.Add("qty", 1);
gradingParam.Add("containerCode", "");
gradingParam.Add("materialCode", materialCode);
gradingParam.Add("materiallotCodeList", materiallotCodeList);
// 序列化请求数据
var nowDate = DateTime.Now;
var postcontent = JsonConvert.SerializeObject(gradingParam);
// 记录请求开始时间
var sw = Stopwatch.StartNew();
// 调用异步API
string result = MESApiHelper.WepPostAPIAsync(url, postcontent);
// 记录请求结束时间
sw.Stop();
// 如果请求耗时超过1秒,记录日志
long outTime = sw.ElapsedMilliseconds;
if (outTime > 1000)
{
LoggerHelp.WriteLog($"卷芯分档PC<=>MES上传耗时:{outTime}ms,卷芯码:{string.Join(",", lstbarCode)}", "MESTime");
}
// 如果返回结果为空,记录日志并返回
if (string.IsNullOrEmpty(result))
{
string resData = result == "" ? "" : result;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用分档信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{resData}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\产品出站信息\{nowDate.ToString("HH")}.txt", resJson);
return (res, mesage, mesResType, mesResFangAnType);
}
// 解析返回结果 - 修改部分开始
var res1 = ReturnMesMsg<MesGradingResponse>(result);
if (res1.success)
{
// 处理单个电池的结果(当只上传一个电池时)
for (int i = 0; i < lstbarCode.Count; i++)
{
string MesGrading = "NULL";
string MesGradingFangAn = "NULL";
string Mesage = string.Empty;
GetGradingMesResType(res1, barCode, ref Mesage, ref MesGrading,ref MesGradingFangAn);
mesage[i] = Mesage ?? "分档成功";
mesResType[i] = MesGrading;
mesResFangAnType[i] = MesGradingFangAn;
}
res = true;
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用分档信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\调用分档信息\{nowDate.ToString("HH")}.txt", resJson);
}
else
{
// 设置所有电池的错误消息
for (int i = 0; i < lstbarCode.Count; i++)
{
mesage[i] = "分档失败";
mesResType[i] = "NULL";
}
// 如果操作失败,记录日志
resJson = $"{nowDate.ToString("yyyy-MM-dd HH:mm:ss.fff")}:调用分档信息(包装)接口:{url},请求数据为:{postcontent},\n{nowDate.AddMilliseconds(sw.ElapsedMilliseconds).ToString("yyyy-MM-dd HH:mm:ss.fff")}:接口耗时:{sw.ElapsedMilliseconds}ms,返回结果:{result}";
TxtHelper.WriteTxt($@"D:\APILog\Logs\MesLogs\{nowDate.ToString("yyyyMMdd")}\调用分档信息\{nowDate.ToString("HH")}.txt", resJson);
}
// 修改部分结束
}
catch (Exception ex)
{
// 捕获异常并记录日志
resJson = $"调用分档信息(包装)接口发生异常:{ex.Message}";
LoggerHelp.WriteEX("调用分档信息(包装)接口", ex);
}
// 返回结果
return (res, mesage, mesResType, mesResFangAnType);
}
/// <summary>
/// 单电池分档
/// </summary>
/// <param name="res1"></param>
/// <param name="BarCode"></param>
/// <param name="MesMessage"></param>
/// <param name="mesResType"></param>
private void GetGradingMesResType(MesGradingResponse res1, string BarCode, ref string MesMessage, ref string MesGrading,ref string MesGradingFangAn)
{
if (res1 != null && res1.rows != null)
{
rowsListItem row = null;
foreach (var item in res1.rows)
{
if (item.identification == BarCode)
{
row = item;
break;
}
}
if (row != null)
{
MesMessage = "返回为空!";
// MesMessage = row.message.ToString();
MesGrading = row.rank;
MesGradingFangAn = row.sortingScheme;
}
else
{
MesMessage = row.message.ToString();
// MesMessage = "返回为空!";
MesGrading = "NULL";
MesGradingFangAn = "NULL";
}
}
}
#endregion
}
}