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
};
///
/// UUID生成
///
///
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();
}
///
/// 接口_上传_生产报工
///
/// 变更执行结果上传 父表数据集 只有一条未上传的父表数据
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 reportUploadQualityDataList = new List();
// 遍历子表结果集
// 工单
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(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);
}
///
/// 上传成功更新数据库
///
///
///
///
/// 1成功 2 不成功
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)
{
}
}
///
/// 上传失败更新数据库
///
///
///
///
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)
{
}
}
}
}