using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection.Emit;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO;
|
using WIDESEAWCS_DTO.AGV.HIKROBOT;
|
using WIDESEAWCS_IBasicInfoService;
|
using WIDESEAWCS_Model.Models;
|
|
namespace WIDESEAWCS_BasicInfoService
|
{
|
public class AGVCartInfoService : ServiceBase<Dt_AGVCartInfo, IRepository<Dt_AGVCartInfo>>, IAGVCartInfoService
|
{
|
|
IApiInfoService _repository;
|
ITrackloginfoService _trackloginfoService;
|
|
public AGVCartInfoService(IRepository<Dt_AGVCartInfo> BaseDal, IApiInfoService repository, ITrackloginfoService ITrackloginfo) : base(BaseDal)
|
{
|
_repository = repository;
|
_trackloginfoService = ITrackloginfo;
|
}
|
|
public IRepository<Dt_AGVCartInfo> Repository => BaseDal;
|
|
|
/// <summary>
|
/// 查海康小车在那个楼层
|
/// </summary>
|
/// <param name="agvcode"></param>
|
/// <returns></returns>
|
public WebResponseContent CheckTheCar()
|
{
|
WebResponseContent content = new WebResponseContent();
|
List<HIKROBOTQueryData> dataList = new List<HIKROBOTQueryData>();
|
HIKROBOTReturn hIKROBOTReturn = null;
|
|
var apiInfo = _repository.Repository.QueryFirst(it => it.ApiCode == nameof(HIKROBOTQuery));
|
if (apiInfo == null)
|
{
|
throw new Exception("未找到海康小车信息接口配置信息!请检查接口配置!");
|
}
|
|
try
|
{
|
var agvInfo = Repository.QueryData();
|
if (agvInfo == null || !agvInfo.Any())
|
{
|
content.Error("未查询到AGV小车信息");
|
return content;
|
}
|
|
List<string> failedAgvCodes = new List<string>();
|
List<string> successMessages = new List<string>();
|
|
foreach (var item in agvInfo)
|
{
|
var headers = new Dictionary<string, string>
|
{
|
{ "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + item.AGVCode }
|
};
|
|
HIKROBOTQuery hIKROBOTQuery = new HIKROBOTQuery()
|
{
|
singleRobotCode = item.AGVCode
|
};
|
|
string requestData = hIKROBOTQuery.Serialize();
|
|
try
|
{
|
string response = HttpHelper.Post(apiInfo.ApiAddress, requestData, headers: headers);
|
hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
|
|
// 判断接口返回是否成功
|
if (hIKROBOTReturn != null && hIKROBOTReturn.code == "SUCCESS" && hIKROBOTReturn.message == "成功")
|
{
|
// 将 data 反序列化为具体的 HIKROBOTQueryData 类型
|
var queryData = Newtonsoft.Json.JsonConvert.DeserializeObject<HIKROBOTQueryData>(
|
Newtonsoft.Json.JsonConvert.SerializeObject(hIKROBOTReturn.data)
|
);
|
|
dataList.Add(new HIKROBOTQueryData
|
{
|
singleRobotCode = item.AGVCode,
|
mapCode = queryData?.mapCode ?? string.Empty,
|
CarType = item.HkagvType // 从本地数据库获取小车类型
|
});
|
|
successMessages.Add($"AGV小车-{item.AGVCode}所在楼层{queryData?.mapCode}查询成功");
|
}
|
else
|
{
|
// 记录失败的小车
|
failedAgvCodes.Add(item.AGVCode);
|
string errorMsg = hIKROBOTReturn?.message ?? "获取小车信息失败";
|
}
|
}
|
catch (Exception ex)
|
{
|
// 捕获单个小车查询的异常
|
failedAgvCodes.Add(item.AGVCode);
|
string errorMsg = $"查询AGV小车{item.AGVCode}时发生异常:{ex.Message}";
|
|
_trackloginfoService.AddTrackLog(
|
requestData,
|
new WebResponseContent { Status = false, Message = errorMsg },
|
$"查看海康AGV小车信息-异常-{item.AGVCode}",
|
"",
|
errorMsg
|
);
|
}
|
}
|
|
// 根据查询结果设置返回状态
|
if (dataList.Any())
|
{
|
if (failedAgvCodes.Any())
|
{
|
// 部分成功,部分失败
|
string message = $"部分小车查询成功,失败的小车:{string.Join(",", failedAgvCodes)}";
|
content.OK(message, dataList);
|
// 如果需要标记为部分成功,可以在这里设置额外的标志
|
//content.Status = true; // 保持 true,但通过 Message 告知部分失败
|
}
|
else
|
{
|
// 全部成功
|
content.OK("所有AGV小车信息查询成功", dataList);
|
}
|
}
|
else
|
{
|
// 全部失败
|
string errorMsg = failedAgvCodes.Any()
|
? $"所有AGV小车查询失败,失败列表:{string.Join(",", failedAgvCodes)}"
|
: "未查询到任何AGV小车信息";
|
content.Error(errorMsg);
|
}
|
|
return content;
|
}
|
catch (Exception ex)
|
{
|
content.Error($"批量查询AGV小车信息失败:{ex.Message}");
|
return content;
|
}
|
}
|
|
|
|
}
|
}
|