|
@ -59,10 +59,12 @@ public class InjectionMoldingRequestReader : IReader |
|
|
/// 读取注塑叫料任务
|
|
|
/// 读取注塑叫料任务
|
|
|
/// </summary>
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
/// <returns></returns>
|
|
|
|
|
|
|
|
|
public virtual async Task<List<IncomingFromExternal>> ReadAsync() |
|
|
public virtual async Task<List<IncomingFromExternal>> ReadAsync() |
|
|
{ |
|
|
{ |
|
|
try |
|
|
try |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 创建 SfsStoreRequestInputBase 对象以设定作业条件
|
|
|
var jobCondition = new SfsStoreRequestInputBase(); |
|
|
var jobCondition = new SfsStoreRequestInputBase(); |
|
|
Filter filter = new Filter() |
|
|
Filter filter = new Filter() |
|
|
{ |
|
|
{ |
|
@ -71,6 +73,7 @@ public class InjectionMoldingRequestReader : IReader |
|
|
Logic = EnumFilterLogic.And.ToString(), |
|
|
Logic = EnumFilterLogic.And.ToString(), |
|
|
Value = (EnumRequestStatus.Completed).ToString() |
|
|
Value = (EnumRequestStatus.Completed).ToString() |
|
|
}; |
|
|
}; |
|
|
|
|
|
// 添加筛选条件:请求状态不等于已完成
|
|
|
jobCondition.Condition.Filters.Add(filter); |
|
|
jobCondition.Condition.Filters.Add(filter); |
|
|
filter = new Filter() |
|
|
filter = new Filter() |
|
|
{ |
|
|
{ |
|
@ -79,26 +82,32 @@ public class InjectionMoldingRequestReader : IReader |
|
|
Logic = EnumFilterLogic.And.ToString(), |
|
|
Logic = EnumFilterLogic.And.ToString(), |
|
|
Value = "Vision" |
|
|
Value = "Vision" |
|
|
}; |
|
|
}; |
|
|
|
|
|
// 添加筛选条件:类型为 Vision
|
|
|
jobCondition.Condition.Filters.Add(filter); |
|
|
jobCondition.Condition.Filters.Add(filter); |
|
|
|
|
|
// 通过筛选条件获取作业列表
|
|
|
var jobs = await _injectionRequest.GetAllListByFilterAsync(jobCondition).ConfigureAwait(false); |
|
|
var jobs = await _injectionRequest.GetAllListByFilterAsync(jobCondition).ConfigureAwait(false); |
|
|
List<InjectionRequestEditInput> joblist = new List<InjectionRequestEditInput>(); |
|
|
List<InjectionRequestEditInput> joblist = new List<InjectionRequestEditInput>(); |
|
|
if (jobs.Count == 0) |
|
|
if (jobs.Count == 0) |
|
|
{ |
|
|
{ |
|
|
string camera =await ReaderCameraApi().ConfigureAwait(false); |
|
|
// 调用 ReaderCameraApi 方法获取摄像头信息
|
|
|
|
|
|
string camera = await ReaderCameraApi().ConfigureAwait(false); |
|
|
|
|
|
|
|
|
List<InjectionRequest> cameraList = new List<InjectionRequest>(); |
|
|
List<InjectionRequest> cameraList = new List<InjectionRequest>(); |
|
|
|
|
|
|
|
|
if (camera == "Error occured") |
|
|
if (camera == "Error occured") |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 记录错误日志并返回空列表
|
|
|
_logger.LogError($"没有读取到摄像头信息{DateTime.Now},请检查网络"); |
|
|
_logger.LogError($"没有读取到摄像头信息{DateTime.Now},请检查网络"); |
|
|
return new List<IncomingFromExternal>(); |
|
|
return new List<IncomingFromExternal>(); |
|
|
} |
|
|
} |
|
|
cameraList = System.Text.Json.JsonSerializer.Deserialize<List<InjectionRequest>>(camera);//camera转注塑叫料明细任务数据
|
|
|
// 将摄像头信息转换为注塑叫料明细任务数据
|
|
|
|
|
|
cameraList = System.Text.Json.JsonSerializer.Deserialize<List<InjectionRequest>>(camera); |
|
|
|
|
|
|
|
|
InjectionRequestEditInput input=new InjectionRequestEditInput(); |
|
|
InjectionRequestEditInput input = new InjectionRequestEditInput(); |
|
|
List<InjectionRequestDetailInput> injectionRequestDetails = new List<InjectionRequestDetailInput>(); |
|
|
List<InjectionRequestDetailInput> injectionRequestDetails = new List<InjectionRequestDetailInput>(); |
|
|
|
|
|
|
|
|
foreach (var job in cameraList) { |
|
|
foreach (var job in cameraList) |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
var detailInput = new InjectionRequestDetailInput() |
|
|
var detailInput = new InjectionRequestDetailInput() |
|
|
{ |
|
|
{ |
|
@ -106,24 +115,30 @@ public class InjectionMoldingRequestReader : IReader |
|
|
ToLocationCode = job.ToLocCode, |
|
|
ToLocationCode = job.ToLocCode, |
|
|
Qty = job.Qty, |
|
|
Qty = job.Qty, |
|
|
}; |
|
|
}; |
|
|
|
|
|
// 添加注塑叫料明细任务数据
|
|
|
injectionRequestDetails.Add(detailInput); |
|
|
injectionRequestDetails.Add(detailInput); |
|
|
} |
|
|
} |
|
|
input.Details.AddRange(injectionRequestDetails); |
|
|
input.Details.AddRange(injectionRequestDetails); |
|
|
var errors=await BindAsync(input.Details).ConfigureAwait(false);//零件仓库赋值
|
|
|
// 通过 BindAsync 方法对零件仓库进行赋值
|
|
|
|
|
|
var errors = await BindAsync(input.Details).ConfigureAwait(false); |
|
|
if (errors.Count > 0) |
|
|
if (errors.Count > 0) |
|
|
{ |
|
|
{ |
|
|
foreach (var error in errors) { |
|
|
// 记录错误日志并返回空列表
|
|
|
|
|
|
foreach (var error in errors) |
|
|
|
|
|
{ |
|
|
_logger.LogError(error); |
|
|
_logger.LogError(error); |
|
|
} |
|
|
} |
|
|
return new List<IncomingFromExternal>(); |
|
|
return new List<IncomingFromExternal>(); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
// 创建新的注塑请求并将数据写入数据库
|
|
|
await _injectionRequest.CreateAsync(input).ConfigureAwait(false); |
|
|
await _injectionRequest.CreateAsync(input).ConfigureAwait(false); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
// 捕获特定异常并记录日志
|
|
|
catch (AbpException ex) |
|
|
catch (AbpException ex) |
|
|
{ |
|
|
{ |
|
|
_logger.LogError(ex.Message); |
|
|
_logger.LogError(ex.Message); |
|
|
} |
|
|
} |
|
|
catch (JsonException ex) |
|
|
catch (JsonException ex) |
|
|
{ |
|
|
{ |
|
@ -133,32 +148,45 @@ public class InjectionMoldingRequestReader : IReader |
|
|
{ |
|
|
{ |
|
|
_logger.LogError(ex.Message); |
|
|
_logger.LogError(ex.Message); |
|
|
} |
|
|
} |
|
|
|
|
|
// 返回空列表
|
|
|
return new List<IncomingFromExternal>(); |
|
|
return new List<IncomingFromExternal>(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 绑定零件库位信息,如果对错误返回错误新列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="p_list"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
private async Task<List<string>> BindAsync(List<InjectionRequestDetailInput> p_list) |
|
|
private async Task<List<string>> BindAsync(List<InjectionRequestDetailInput> p_list) |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 异步方法,将输入的请求绑定到对应的零件和库位信息,返回错误列表
|
|
|
List<string> errors = new List<string>(); |
|
|
List<string> errors = new List<string>(); |
|
|
foreach (var request in p_list) |
|
|
foreach (var request in p_list) |
|
|
{ |
|
|
{ |
|
|
var itm =await _itemService.GetByCodeAsync(request.ItemCode).ConfigureAwait(false); |
|
|
// 获取对应零件信息
|
|
|
if(itm == null) { errors.Add($"编号:{request.ItemCode}零件表中没找到!" ); } |
|
|
var itm = await _itemService.GetByCodeAsync(request.ItemCode).ConfigureAwait(false); |
|
|
|
|
|
if (itm == null) { errors.Add($"编号:{request.ItemCode}零件表中没找到!"); } |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 更新请求中的零件描述和名称
|
|
|
request.ItemDesc1 = itm.Desc1; |
|
|
request.ItemDesc1 = itm.Desc1; |
|
|
request.ItemDesc2 = itm.Desc2; |
|
|
request.ItemDesc2 = itm.Desc2; |
|
|
request.ItemName = itm.Name; |
|
|
request.ItemName = itm.Name; |
|
|
} |
|
|
} |
|
|
|
|
|
// 获取对应库位信息
|
|
|
var loc = await _locService.GetByCodeAsync(request.ToLocationCode).ConfigureAwait(false); |
|
|
var loc = await _locService.GetByCodeAsync(request.ToLocationCode).ConfigureAwait(false); |
|
|
if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到!"); } |
|
|
if (loc == null) { errors.Add($"编号:{request.ToLocationCode}库位表中没找到!"); } |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 更新请求中的库位相关信息
|
|
|
request.ToLocationCode = loc.Code; |
|
|
request.ToLocationCode = loc.Code; |
|
|
request.ToLocationGroup = loc.LocationGroupCode; |
|
|
request.ToLocationGroup = loc.LocationGroupCode; |
|
|
request.ToLocationErpCode = loc.ErpLocationCode; |
|
|
request.ToLocationErpCode = loc.ErpLocationCode; |
|
|
request.ToWarehouseCode= loc.WarehouseCode; |
|
|
request.ToWarehouseCode = loc.WarehouseCode; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
// 返回错误列表
|
|
|
return errors; |
|
|
return errors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -169,28 +197,34 @@ public class InjectionMoldingRequestReader : IReader |
|
|
/// <returns></returns>
|
|
|
/// <returns></returns>
|
|
|
public async Task<string> ReaderCameraApi() |
|
|
public async Task<string> ReaderCameraApi() |
|
|
{ |
|
|
{ |
|
|
|
|
|
// 从配置中获取远程摄像头的地址、用户名、密码和令牌
|
|
|
var address = _options.Value.AutoRemote.IpAddress; |
|
|
var address = _options.Value.AutoRemote.IpAddress; |
|
|
var username = _options.Value.AutoRemote.UserName; |
|
|
var username = _options.Value.AutoRemote.UserName; |
|
|
var password = _options.Value.AutoRemote.Password; |
|
|
var password = _options.Value.AutoRemote.Password; |
|
|
var token = _options.Value.AutoRemote.Token; |
|
|
var token = _options.Value.AutoRemote.Token; |
|
|
var client = _httpClientFactory.CreateClient(); |
|
|
|
|
|
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); |
|
|
// 创建一个HttpClient实例
|
|
|
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); |
|
|
var client = _httpClientFactory.CreateClient(); |
|
|
var response = await client.GetAsync(address).ConfigureAwait(false); |
|
|
|
|
|
if (response.IsSuccessStatusCode) |
|
|
// 将用户名和密码转换为Base64编码的凭据,并设置请求的身份验证信息
|
|
|
{ |
|
|
var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")); |
|
|
return await response.Content.ReadAsStringAsync().ConfigureAwait(false); |
|
|
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials); |
|
|
} |
|
|
|
|
|
|
|
|
// 发送GET请求到远程摄像头地址并等待响应
|
|
|
|
|
|
var response = await client.GetAsync(address).ConfigureAwait(false); |
|
|
|
|
|
|
|
|
|
|
|
// 如果请求成功,则返回响应内容,否则返回错误信息
|
|
|
|
|
|
if (response.IsSuccessStatusCode) |
|
|
|
|
|
{ |
|
|
|
|
|
return await response.Content.ReadAsStringAsync().ConfigureAwait(false); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return "Error occurred"; |
|
|
return "Error occurred"; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private List<InjectionRequest> Parse(string p_str) |
|
|
private List<InjectionRequest> Parse(string p_str) |
|
|
{ |
|
|
{ |
|
|
List<InjectionRequest> requests = new List<InjectionRequest>(); |
|
|
List<InjectionRequest> requests = new List<InjectionRequest>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return System.Text.Json.JsonSerializer.Deserialize<List<InjectionRequest>>(p_str); |
|
|
return System.Text.Json.JsonSerializer.Deserialize<List<InjectionRequest>>(p_str); |
|
|
} |
|
|
} |
|
|