Files
2026-05-29 13:57:08 +08:00

303 lines
13 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 ExternalDataSync;
using ExternalDataSync.ESB_daq;
using ExternalDataSync.MOM;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Security.Policy;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace SlMesDbIterface
{
public class UpLoadMessage
{
enum InterFaceType
{
passStation = 1,
deviceAlarm = 2
};
/// <summary>
/// UUID生成
/// </summary>
/// <returns></returns>
public static string UuidUtil()
{
string result = Guid.NewGuid().ToString();
return result;
}
public void GetUpLoadMessageButton(string productName)
{
try
{
// 第一个存储过程 查询一个总成号的所有过点信息 第一个表
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(productName + "_查询", Program.ConnectionString, out DataTable dt, out string errorMessage);
//InterFaceType interFaceTypeEnum = (InterFaceType)interFaceType;
if (dt.Rows.Count > 0)
{
switch (productName)
{
case "接口_上传_质量数据":
ReportUploadData(dt,productName);
break;
default:
break;
}
}
}
catch (Exception err)
{
}
}
public void GetUpLoadMessage(string productName, int interFaceType)
{
new Thread(new ThreadStart(delegate ()
{
while (true)
{
try
{
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(productName + "_查询", Program.ConnectionString, out DataTable dt, out string errorMessage);
InterFaceType interFaceTypeEnum = (InterFaceType)interFaceType;
if (dt.Rows.Count > 0)
{
switch (interFaceTypeEnum)
{
case InterFaceType.passStation:
//UpLoadPassStation(dt, productName);
break;
case InterFaceType.deviceAlarm:
//UpLoadDeviceAlarmn(dt);
break;
default:
break;
}
}
}
catch (Exception err)
{
}
Thread.Sleep(Form_MoveSqlTable.upload_Interval);
}
}))
{ IsBackground = true }.Start();
}
/// <summary>
/// 接口_上传_生产报工
/// </summary>
/// <param name="dt" >变更执行结果上传 父表数据集 只有一条未上传的父表数据</param>
public void ReportUploadData(DataTable dt, string productName)
{
string ParentId = dt.Rows[0]["ID"].ToString();
try
{
// 创建父集合
ReportUploadData BaseData = new ReportUploadData();
// 填充基本数据
BaseData.orderNumber = dt.Rows[0]["订单号"].ToString();
BaseData.snCode = dt.Rows[0]["SN号"].ToString();
BaseData.productModel = dt.Rows[0]["产品型号"].ToString();
BaseData.recipeNumber = dt.Rows[0]["配方号"].ToString();
BaseData.qualityResult = dt.Rows[0]["合格标志"].ToString();
BaseData.stationCode = dt.Rows[0]["工位号"].ToString();
BaseData.productionDate = dt.Rows[0]["生产日期"].ToString();
// 通过ParentId 去查找子表数据 获取结果集
var ChildrenParam1 = new SqlParameter[] {
new SqlParameter("@parentId",ParentId)
};
string ChildrenTableName1 = "接口_上传_质量数据_质量";
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(ChildrenTableName1 + "_查询", Program.ConnectionString, ref ChildrenParam1, out DataTable ChildrenDt1, out string errormessage1);
// 创建子对象列表
List<ReportUploadQualityData> reportUploadQualityDataList = new List<ReportUploadQualityData>();
// 遍历子表结果集
// 工单
for (int i = 0; i < ChildrenDt1.Rows.Count; i++)
{
// 子对象
ReportUploadQualityData reportUploadQualityData = new ReportUploadQualityData();
DataRow item = ChildrenDt1.Rows[i];
// 填充数据
reportUploadQualityData.screwPositionNumber = item["螺钉孔号"].ToString();
reportUploadQualityData.torque = item["扭矩"].ToString();
reportUploadQualityData.dowelHeightValue = item["螺桩高度测量值"].ToString();
reportUploadQualityData.qualityResult = item["合格标志"].ToString();
// 添加到集合列表中
reportUploadQualityDataList.Add(reportUploadQualityData);
}
// 将子表结果List加入到父对象中
BaseData.qualityList = reportUploadQualityDataList;
//准备上传的数据 反序列化
string bodydata = JsonConvert.SerializeObject(BaseData);
string urlstr = Program.reportUploadUrl;
string retString;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlstr);
request.Method = "post";
byte[] bytes = Encoding.UTF8.GetBytes(bodydata);
request.Accept = "*/*";
request.ContentType = "application/json;charset=utf-8";
// 反序列化后先把JSON做接口记录
//存储日志
int AID = -1;
var CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
//Event_MOM_Log_Insert,@创建时间,@内容
var reqParam = new SqlParameter[] {
new SqlParameter("@接口地址",urlstr),
new SqlParameter("@接口类型",1), // 1. 主动调用接口 2. 被调用接口
new SqlParameter("@请求内容",bodydata),
new SqlParameter("@请求时间",CreateTime)
};
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure("接口_IOT接口交互日志_请求记录", Program.ConnectionString, ref reqParam, out DataTable reqDt, out string errorMessage);
if (reqDt.Rows.Count > 0)
{
AID = Convert.ToInt32(reqDt.Rows[0]["AID"]);
}
// 根据接口需要 准备Header
msgHeader mHeader = new msgHeader();
mHeader.version = 1; //协议版本,默认1.0
mHeader.taskId = UuidUtil(); //消息ID
mHeader.taskType = ""; //接口类型 固定为接口目录编号,""
// 根据接口需要 添加Header
request.Headers.Add("version", mHeader.version.ToString());
request.Headers.Add("taskId", mHeader.taskId);
request.Headers.Add("taskType", mHeader.taskType);
request.ContentLength = bytes.Length;
// 准备请求体
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
//发送webapi请求 等待相应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
retString = myStreamReader.ReadToEnd();
//响应结果
CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var resParam = new SqlParameter[] {
new SqlParameter("@AID",AID),
new SqlParameter("@响应时间",CreateTime),
new SqlParameter("@响应内容",retString)
};
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure("接口_IOT接口交互日志_响应记录", Program.ConnectionString, ref resParam, out errorMessage);
// 序列化响应内容
msgResHeader mrh = JsonConvert.DeserializeObject<msgResHeader>(retString);
int statusCode = (int)response.StatusCode;
// 对响应内容进行处理 更新数据库标志
if (statusCode == 200)
{
myStreamReader.Close();
myResponseStream.Close();
// 这里的接口不返回任何数据200 直接成功!
updateUpLoadMessage(productName, ParentId, mrh.msg, 1);
//if (response != null)
//{
// // 成功
// if (mrh.code == "0")
// {
// updateUpLoadMessage(productName, ParentId, mrh.msg, 1);
// }
// // 失败
// else
// {
// updateUpLoadMessage(productName, ParentId, mrh.msg, 2);
// }
// response.Close();
//}
if (request != null)
{
request.Abort();
}
MyLog4Net.MyLogHelper.Info("res:", retString);
//
}
else
{
updateUpLoadMessage(productName, ParentId, "请求失败,请求结果码" + statusCode, 2);
MyLog4Net.MyLogHelper.Error(productName + "接口" + ParentId + "上传失败", "请求失败,请求结果码" + statusCode);
}
}
catch (Exception err)
{
updateUpLoadMessage(productName, ParentId, err.Message, 2);
MyLog4Net.MyLogHelper.Error(productName + "接口" + ParentId + "上传失败", err.Message);
}
Thread.Sleep(100);
}
/// <summary>
/// 上传成功更新数据库
/// </summary>
/// <param name="productName"></param>
/// <param name="parentId"></param>
/// <param name="resMsg"></param>
/// <param name="isOk"> 1成功 2 不成功</param>
public void updateUpLoadMessage(string productName, string parentId,string resMsg,int isOk)
{
try
{
var param = new SqlParameter[] {
new SqlParameter("@主键值", parentId),
new SqlParameter("@文本", resMsg),
new SqlParameter("@是否成功", isOk), //1成功 2 不成功
new SqlParameter("@接口表", productName) //1成功 2 不成功
};
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(productName + "_更新", Program.ConnectionString, ref param, out string errorMessage);
}
catch (Exception err)
{
}
}
/// <summary>
/// 上传失败更新数据库
/// </summary>
/// <param name="productName"></param>
/// <param name="ID"></param>
/// <param name="err_msg"></param>
public void updateUpLoadMessage_error(string productName, string ParentId, string err_msg)
{
try
{
var param = new SqlParameter[] {
new SqlParameter("@主键值", ParentId),
new SqlParameter("@接口表", productName),
new SqlParameter("@文本", err_msg),
};
DataLinkMesWork.SQLCommon.ExecuteStoredProcedure("接口_上传_失败日志_增加", Program.ConnectionString, ref param, out string errorMessage);
}
catch (Exception err)
{
}
}
}
}