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 _logger; private List rfidAbsractFactory; private List base_Sensor_Infos; public static Action _RefreshLogMessageAction; public static Action RefreshStateEvent; private IReal_mesdataService _real_MesdataService; private IReal_workdataService _real_WorkdataService; public ApiServer(ILogger logger, List rfidAbsractFactory, IReal_mesdataService real_MesdataService, IReal_workdataService real_WorkdataService) { _logger = logger; this.rfidAbsractFactory = rfidAbsractFactory; _real_MesdataService = real_MesdataService; _real_WorkdataService = real_WorkdataService; } /// /// 测试 /// /// /// [WebApi(Method = HttpMethodType.POST)] public async Task> autoread() { return new ApiResponse { Code = 200, Data = null, Msg = "sucess", }; } /// /// 查询设备信息 /// /// /// [WebApi(Method = HttpMethodType.POST)] public async Task> basedata(string Requesttime) { List rFIDDeviceInfos = _real_WorkdataService.GetDeviceInfos(); return new RFIDDeviceApiResponse { Code = 200, Data = rFIDDeviceInfos, Msg = "sucess", }; } private bool iFlag = false; /// /// MES主动请求读取标签 /// /// /// /// [WebApi(Method = HttpMethodType.POST)] public async Task> read(MesReadPara mesReadPara) { ApiResponse response = new ApiResponse(); int code = 400; string Msg = "error"; MesReadRespon mesReadRespon = new MesReadRespon(); try { if (iFlag) { response = new ApiResponse() { 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 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() { 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 FilterByEPCString(List tagList, string searchText) { return tagList .Where(tag => tag.EPCstring != null && tag.EPCstring.Contains(searchText)) .ToList(); } /// /// MES主动回复处理结果,控制报警灯 /// /// /// /// [WebApi(Method = HttpMethodType.POST)] public async Task> revresult(MesAlarmLightPara mesAlarmLightPara) { ApiResponse response = new ApiResponse(); _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() { 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; } } }