using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_BasicInfoService { public class ApiInfoService : ServiceBase>, IApiInfoService { private readonly IInterfaceLogService _interfaceLogService; public ApiInfoService(IRepository BaseDal, IInterfaceLogService interfaceLogService) : base(BaseDal) { _interfaceLogService = interfaceLogService; } public IRepository Repository => BaseDal; /// /// Post接口请求 /// /// 接口编号 /// 请求内容 /// 备注 /// 是否添加日志 /// public WebResponseContent PostInterfaceRequest(string apiCode, string requestParameters, string remark, bool isAdd = true) { WebResponseContent content = new WebResponseContent(); string response = string.Empty; string requestHash = string.Empty; string responseHash = string.Empty; Dt_ApiInfo? apiInfo = null; try { apiInfo = BaseDal.QueryFirst(x => x.ApiCode == apiCode) ?? throw new Exception($"未找到{remark}接口配置信息!请检查接口配置"); response = HttpHelper.Post(apiInfo.ApiAddress, requestParameters); requestHash = ComputeHash(requestParameters); responseHash = ComputeHash(response); if (apiInfo.Remark.Contains("四向穿梭车")) { FOURBOTReturn fOURBOTReturn = response.DeserializeObject(); if (fOURBOTReturn == null) throw new Exception($"{apiInfo.Remark}响应内容转换实体失败!"); if (fOURBOTReturn.returnCode != 0) throw new Exception(fOURBOTReturn.returnUserMsg); content.Data = fOURBOTReturn; } else if (apiInfo.Remark.Contains("凯乐士")) { } else if (apiInfo.Remark.Contains("海康")) { } else if (apiInfo.Remark.Contains("WMS")) { } content.OK(); } catch (Exception ex) { content.Error(ex.Message); } finally { if (isAdd && !string.IsNullOrEmpty(response) && apiInfo != null) { #region 查询当天是否存在相同记录 var today = DateTime.Now.Date; var existingLog = _interfaceLogService.Repository.QueryFirst(x => x.ApiCode == apiCode && x.RequestParametersHash == requestHash && x.ResponseParametersHash == responseHash && x.CreateDate.Date == today); if (existingLog != null) { existingLog.PushFrequency = existingLog.PushFrequency + 1; existingLog.PushState = content.Status ? 1 : 2; existingLog.ResponseParameters = response; existingLog.Remark = content.Status ? remark : content.Message; existingLog.Modifier = App.User?.UserName ?? "System"; existingLog.ModifyDate = DateTime.Now; _interfaceLogService.Repository.UpdateData(existingLog); } #endregion else { Dt_InterfaceLog interfaceLog = new Dt_InterfaceLog() { ApiCode = apiCode, RequestParameters = requestParameters, ApiAddress = apiInfo.ApiAddress, ApiName = apiInfo.ApiName, RequestParametersHash = requestHash, ResponseParametersHash = responseHash, PushFrequency = 1, PushState = content.Status ? 1 : 2, Requestor = "WCS", Recipient = apiInfo.Remark, ResponseParameters = response, Creater = "System", Remark = content.Status ? remark : content.Message, }; _interfaceLogService.Repository.AddData(interfaceLog); } } } return content; } /// /// 计算字符串的SHA256哈希值 /// private static string ComputeHash(string input) { if (string.IsNullOrEmpty(input)) return string.Empty; using (SHA256 sha256 = SHA256.Create()) { byte[] bytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha256.ComputeHash(bytes); return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); } } } }