using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ExternalDataSync;
using MesServerWork;
using MisDataSaveDate;
using System.Net.Http;
using System.Web.Http;
using MisDataSaveDate.MOM;
using System.Data.SqlClient;
using static MisDataSaveDate.Helper.ApiLogHelper;
using WebApi;
using System.Security.Policy;
using System.Data;
using MisDataFunDll;
using System.Net;
namespace MisDataSaveDate
{
///
/// WEB业务处理类
///
public class WEB_BusinessLogic
{
///
/// WEB端发来的请求
///
/// 请求URL
/// 请求的JSON对象
/// 处理结果
public static string WEB_Request(string url, [FromBody] JObject jobj)
{
var result = new MsgResHeader();
result.code = 200;
result.message = "";
if (jobj == null)
{
result.code = 500;
result.message = "参数格式不正确!";
string retString1 = JsonConvert.SerializeObject(result);
SaveMesLog("WEB进入请求", "参数格式不正确!", Helper.MesLogType.ERROR);
MyLog4Net.MyLogHelper.Info("WEB请求进入接口res:", retString1);
return retString1;
}
string str = jobj.ToString();
//存储请求日志
SaveLog_Interface_Request(url, 2, str, out int AID);
try
{
// 解析WEB请求内容
WEB_Request webRequest = JsonConvert.DeserializeObject(str);
// 必填字段校验
if (string.IsNullOrWhiteSpace(webRequest.type))
{
throw new Exception("请求类型(type)不能为空");
}
switch (webRequest.type)
{
case "OperAtion_JobStart":
// 手动重新开始工作
// 使用JObject的索引器或Value方法来获取值
string workStation1 = webRequest.paramObj?["工位号"]?.ToString() ?? "";
string orderNo1 = webRequest.paramObj?["订单号"]?.ToString() ?? "";
string workpieceNo1 = webRequest.paramObj?["工件编号"]?.ToString() ?? "";
// 验证必要参数
if (string.IsNullOrWhiteSpace(workStation1) ||
string.IsNullOrWhiteSpace(orderNo1) ||
string.IsNullOrWhiteSpace(workpieceNo1))
{
throw new Exception("OperAtion_JobStart 缺少必要参数:工位号、订单号或工件编号");
}
CALL_Inerface_DataHandle.CALL_Inerface_JobStart(workStation1, workpieceNo1, orderNo1);
break;
case "OperAtion_JobFinished":
// 手动完成工作
// 使用JObject的索引器或Value方法来获取值
string workStation2 = webRequest.paramObj?["工位号"]?.ToString() ?? "";
string orderNo2 = webRequest.paramObj?["订单号"]?.ToString() ?? "";
string workpieceNo2 = webRequest.paramObj?["工件编号"]?.ToString() ?? "";
// 验证必要参数
if (string.IsNullOrWhiteSpace(workStation2) ||
string.IsNullOrWhiteSpace(orderNo2) ||
string.IsNullOrWhiteSpace(workpieceNo2))
{
throw new Exception("OperAtion_JobFinished 缺少必要参数:工位号、订单号或工件编号");
}
CALL_Inerface_DataHandle.CALL_Inerface_JobFinished(workStation2, orderNo2, workpieceNo2);
break;
default:
result.code = 500;
result.message = "无此类型~";
break;
}
}
catch (Exception err)
{
// 记录错误日志
SaveMesLog("WEB端调用接口", err.Message, Helper.MesLogType.ERROR);
result.code = 500;
result.message = err.Message;
}
string retString = JsonConvert.SerializeObject(result);
// 存储响应日志
SaveLog_Interface_Response(retString, AID);
return retString;
}
///
/// 批量读取PLC点位值
///
/// 请求URL
/// 请求的JSON对象,包含OpName和TagTypeCodeIDs数组
/// 处理结果
public static string WEB_ReadPLCValues(string url, [FromBody] JObject jobj)
{
var result = new MsgResHeader>
{
code = 200,
message = "",
Data = new List()
};
if (jobj == null)
{
result.code = 500;
result.message = "参数格式不正确!";
string retString1 = JsonConvert.SerializeObject(result);
SaveMesLog("WEB批量读取PLC点位值", "参数格式不正确!", Helper.MesLogType.ERROR);
MyLog4Net.MyLogHelper.Info("WEB_ReadPLCValues res:", retString1);
return retString1;
}
string str = jobj.ToString();
// 存储请求日志
SaveLog_Interface_Request(url, 2, str, out int AID);
try
{
string opName = jobj["OpName"]?.ToString() ?? "";
JArray tagTypeCodeIDsArray = jobj["TagTypeCodeIDs"] as JArray;
// 参数校验
if (string.IsNullOrEmpty(opName))
{
throw new Exception("工位号(OpName)不能为空");
}
if (tagTypeCodeIDsArray == null || tagTypeCodeIDsArray.Count == 0)
{
throw new Exception("TagTypeCodeID数组不能为空");
}
int[] tagTypeCodeIDs = tagTypeCodeIDsArray.Select(x => (int)x).ToArray();
// 读取工位全部数据
var rtList = MIS_BASE.ReadPLC_OpName(opName);
if (rtList == null)
{
throw new Exception($"读取工位[{opName}]数据失败");
}
var pp = JsonConvert.SerializeObject(rtList);
// 使用 dynamic 类型避免程序集引用问题
var tagValues = JsonConvert.DeserializeObject>(pp);
// 根据传入的TagTypeCodeID数组过滤并返回对应的值
foreach (var tagTypeCodeID in tagTypeCodeIDs)
{
var tagResult = new PLCTagValueResult
{
TagTypeCodeID = tagTypeCodeID,
Success = false,
TagValue = null,
Message = ""
};
try
{
var matchedTag = tagValues.Where(x => (int)x.Value.TagTypeCodeID == tagTypeCodeID).FirstOrDefault();
if (matchedTag.Value != null)
{
tagResult.Success = true;
tagResult.TagValue = (int)matchedTag.Value.TagValue;
tagResult.TagName = (string)matchedTag.Value.TagName;
tagResult.OpName = (string)matchedTag.Value.OpName;
tagResult.TimeStamp = (string)matchedTag.Value.TimeStamp;
}
else
{
tagResult.Message = $"未找到TagTypeCodeID={tagTypeCodeID}的点位";
}
}
catch (Exception ex)
{
tagResult.Message = $"读取TagTypeCodeID={tagTypeCodeID}失败: {ex.Message}";
}
result.Data.Add(tagResult);
}
result.message = "读取成功";
}
catch (Exception err)
{
// 记录错误日志
SaveMesLog("WEB批量读取PLC点位值", err.Message, Helper.MesLogType.ERROR);
result.code = 500;
result.message = err.Message;
result.Data = null;
}
string retString = JsonConvert.SerializeObject(result);
// 存储响应日志
SaveLog_Interface_Response(retString, AID);
return retString;
}
///
/// 写入PLC点位值
///
/// 请求URL
/// 请求的JSON对象,包含TagTypeCodeID、OpName和TagValue
/// 处理结果
public static string WEB_WritePLC(string url, [FromBody] JObject jobj)
{
var result = new MsgResHeader