You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

272 lines
10 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Models;
using Nancy;
using SlnMesnac.Model.AirportApiEntity;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Repository.service;
using SlnMesnac.Repository.service.@base;
using SlnMesnac.Rfid;
using SlnMesnac.Rfid.Factory;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using TouchSocket.Rpc;
using TouchSocket.WebApi;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本4.0.30319.42000
* 机器名称T14-GEN3-7895
* 命名空间SlnMesnac.TouchSocket
* 唯一标识649766cc-308e-4bf3-8d69-dea48ec40642
*
* 创建者WenJY
* 电子邮箱:
* 创建时间2024-09-04 10:51:54
* 版本V1.0.0
* 描述:
*
*--------------------------------------------------------------------
* 修改人:
* 时间:
* 修改说明:
*
* 版本V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.TouchSocket
{
public class ApiServer: RpcServer
{
private ILogger<ApiServer> _logger;
private List<RfidAbsractFactory> rfidAbsractFactory;
private List<Base_sensor_info> base_Sensor_Infos;
public static Action<string> _RefreshLogMessageAction;
public static Action<string, string> RefreshStateEvent;
private IReal_mesdataService _real_MesdataService;
private IReal_workdataService _real_WorkdataService;
public ApiServer(ILogger<ApiServer> logger, List<RfidAbsractFactory> rfidAbsractFactory, IReal_mesdataService real_MesdataService, IReal_workdataService real_WorkdataService)
{
_logger = logger;
this.rfidAbsractFactory = rfidAbsractFactory;
_real_MesdataService = real_MesdataService;
_real_WorkdataService = real_WorkdataService;
}
/// <summary>
/// 测试
/// </summary>
/// <param name="mesParaData"></param>
/// <returns></returns>
[WebApi(Method = HttpMethodType.POST)]
public async Task<ApiResponse<MesParaData>> autoread()
{
return new ApiResponse<MesParaData>
{
Code = 200,
Data = null,
Msg = "sucess",
};
}
/// <summary>
/// 查询设备信息
/// </summary>
/// <param name="Requesttime"></param>
/// <returns></returns>
[WebApi(Method = HttpMethodType.POST)]
public async Task<RFIDDeviceApiResponse<DeviceInfo>> basedata(string Requesttime)
{
List<DeviceInfo> rFIDDeviceInfos = _real_WorkdataService.GetDeviceInfos();
return new RFIDDeviceApiResponse<DeviceInfo>
{
Code = 200,
Data = rFIDDeviceInfos,
Msg = "sucess",
};
}
private bool iFlag = false;
/// <summary>
/// MES主动请求读取标签
/// </summary>
/// <param name="EQUID"></param>
/// <param name="requesttime"></param>
/// <returns></returns>
[WebApi(Method = HttpMethodType.POST)]
public async Task<ApiResponse<MesReadRespon>> read(MesReadPara mesReadPara)
{
ApiResponse<MesReadRespon> response = new ApiResponse<MesReadRespon>();
int code = 400;
string Msg = "error";
MesReadRespon mesReadRespon = new MesReadRespon();
try
{
if (iFlag)
{
response = new ApiResponse<MesReadRespon>()
{
Code = code,
Data = mesReadRespon,
Msg = Msg,
};
return response;
}
// 设置标志位为 true表示方法正在执行
iFlag = true;
_RefreshLogMessageAction?.Invoke("接收MES主动读取指令" + JsonSerializer.Serialize(mesReadPara));
_logger.LogInformation("接收MES主动读取指令{0}", JsonSerializer.Serialize(mesReadPara));
string FilterData = rfidAbsractFactory.Find(x => x.ConfigKey == mesReadPara.EQUID).FilterData;
List<TagInfo> rfid = await rfidAbsractFactory.Find(x => x.ConfigKey == mesReadPara.EQUID).GetRFIDAsync();
rfid = rfid.Where((x, i) => rfid.FindIndex(z => z.EPCstring == x.EPCstring) == i).ToList();
//新增工位过滤
if (!string.IsNullOrEmpty(FilterData))
{
rfid = FilterByEPCString(rfid, FilterData);
}
if (rfid != null && rfid.Count > 0)
{
if (rfid.Count > 1)
{
if (rfid != null && rfid.Any())
{
mesReadRespon.EPCID = string.Join(",", rfid.Select(item => item.EPCstring));
//mesReadRespon.EPCID = "MORE";
Msg = "multiple EPC";
}
}
else
{
mesReadRespon.EPCID = rfid[0].EPCstring;
code = 200;
Msg = "sucess";
}
mesReadRespon.Respontime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Real_workdata real_Workdata = new Real_workdata()
{
Combineid = mesReadPara.EQUID.ToString(),
Data = mesReadRespon.EPCID,
Tm = DateTime.Now,
Deleteflag = 0,
Reportmode = 0,
Edittime = DateTime.Now,
};
await _real_WorkdataService.AddAsync(real_Workdata);
}
else
{
Msg = "nodata";
}
response = new ApiResponse<MesReadRespon>()
{
Code = code,
Data = mesReadRespon,
Msg = Msg,
};
_RefreshLogMessageAction?.Invoke("发送MES主动读取指令" + JsonSerializer.Serialize(response));
_logger.LogInformation("发送MES主动读取指令{0}", JsonSerializer.Serialize(response));
Real_mesdata real_Mesdata = new Real_mesdata()
{
Combineid = mesReadPara.EQUID.ToString(),
Data = JsonSerializer.Serialize(mesReadPara),
Response = JsonSerializer.Serialize(response),
Reportmode = 0,
Edittime = DateTime.Now,
Tm = DateTime.Now,
Deleteflag = 0,
};
//InsertRealMesData(mesReadPara.EQUID.ToString(), JsonSerializer.Serialize(mesReadPara), JsonSerializer.Serialize(response), 0);
RefreshStateEvent?.Invoke(mesReadPara.EQUID, mesReadRespon.EPCID);
await _real_MesdataService.AddAsync(real_Mesdata);
return response;
}
catch (Exception ex)
{
_logger.LogInformation("read接口异常" + ex.ToString());
return response;
}
finally
{
iFlag = false;
}
}
private static List<TagInfo> FilterByEPCString(List<TagInfo> tagList, string searchText)
{
return tagList
.Where(tag => tag.EPCstring != null && tag.EPCstring.Contains(searchText))
.ToList();
}
/// <summary>
/// MES主动回复处理结果控制报警灯
/// </summary>
/// <param name="EQUID"></param>
/// <param name="requesttime"></param>
/// <returns></returns>
[WebApi(Method = HttpMethodType.POST)]
public async Task<ApiResponse<MesParaData>> revresult(MesAlarmLightPara mesAlarmLightPara)
{
ApiResponse<MesParaData> response = new ApiResponse<MesParaData>();
_RefreshLogMessageAction?.Invoke("接收MES控制报警灯指令" + JsonSerializer.Serialize(mesAlarmLightPara));
_logger.LogInformation("接收MES控制报警灯指令{0}", JsonSerializer.Serialize(mesAlarmLightPara));
if (mesAlarmLightPara.Code == "0")
{
mesAlarmLightPara.Code = "2";
}
else if (mesAlarmLightPara.Code == "1")
{
mesAlarmLightPara.Code = "3";
}
else
{
mesAlarmLightPara.Code = "1";
}
await rfidAbsractFactory.Find(x => x.ConfigKey == mesAlarmLightPara.EQUID).WriteAlarmLight(int.Parse(mesAlarmLightPara.Code),10000);
//m_EquipClient.WriteAlarmLight(mesAlarmLightPara.EQUID, mesAlarmLightPara.Code);
response = new ApiResponse<MesParaData>()
{
Code = 200,
Data = null,
Msg = "sucess",
};
_RefreshLogMessageAction?.Invoke("发送MES控制报警灯指令" + JsonSerializer.Serialize(response));
_logger.LogInformation("发送MES控制报警灯指令{0}", JsonSerializer.Serialize(response));
Real_mesdata real_Mesdata = new Real_mesdata()
{
Combineid = mesAlarmLightPara.EQUID.ToString(),
Data = JsonSerializer.Serialize(mesAlarmLightPara),
Response = JsonSerializer.Serialize(response),
Reportmode = 1,
Edittime = DateTime.Now,
Tm = DateTime.Now,
Deleteflag = 0,
};
await _real_MesdataService.AddAsync(real_Mesdata);
//InsertRealMesData(mesAlarmLightPara.EQUID.ToString(), JsonSerializer.Serialize(mesAlarmLightPara), JsonSerializer.Serialize(response), 1);
return response;
}
}
}