Browse Source

视觉接口修改

dev_DY_CC
lvzb 12 months ago
parent
commit
690e23454a
  1. 221
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  2. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs
  3. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs
  4. 36
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

221
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs

@ -34,10 +34,10 @@ public class InjectionMoldingRequestReader : IReader
private readonly ILogger<InjectionMoldingRequestReader> _logger; private readonly ILogger<InjectionMoldingRequestReader> _logger;
private readonly IOptions<InjectionMoldingTaskOptions> _options; private readonly IOptions<InjectionMoldingTaskOptions> _options;
private readonly IHttpClientFactory _httpClientFactory; private readonly IHttpClientFactory _httpClientFactory;
public InjectionMoldingRequestReader( public InjectionMoldingRequestReader(
IInjectionIssueRequestAppService injectionRequest IInjectionIssueRequestAppService injectionRequest
, ILogger<InjectionMoldingRequestReader> logger , ILogger<InjectionMoldingRequestReader> logger
, IOptions<InjectionMoldingTaskOptions> options , IOptions<InjectionMoldingTaskOptions> options
, IHttpClientFactory httpClientFactory , IHttpClientFactory httpClientFactory
@ -47,21 +47,21 @@ public class InjectionMoldingRequestReader : IReader
) )
{ {
_injectionRequest = injectionRequest; _injectionRequest = injectionRequest;
_logger = logger; _logger = logger;
_options = options; _options = options;
_httpClientFactory = httpClientFactory; _httpClientFactory = httpClientFactory;
_itemService=itemService; _itemService = itemService;
_locService = locService; _locService = locService;
} }
/// <summary> /// <summary>
/// 读取注塑叫料任务 /// 读取注塑叫料任务
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public virtual async Task<List<IncomingFromExternal>> ReadAsync() public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{ {
try try
{ {
#if DEBUG #if DEBUG
@ -69,130 +69,131 @@ public class InjectionMoldingRequestReader : IReader
_options.Value.AutoRemote.Interval = 2; _options.Value.AutoRemote.Interval = 2;
#endif #endif
// var sleepTime = (_options.Value.AutoRemote.TimeCycle*60/ _options.Value.AutoRemote.Interval)-10; // var sleepTime = (_options.Value.AutoRemote.TimeCycle*60/ _options.Value.AutoRemote.Interval)-10;
var invterval = _options.Value.AutoRemote.Interval; var invterval = _options.Value.AutoRemote.Interval;
var successTime = 0;
var guid = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var guid = DateTime.Now.ToString("yyyyMMddHHmmssfff");
for (int i = 0; i <invterval; i++)
{
Stopwatch sw = Stopwatch.StartNew();
Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录 Stopwatch sw = Stopwatch.StartNew();
var flag = await client.GetMacStaticAsync().ConfigureAwait(false); Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录
if (flag != 1)
{ var flag = await client.GetMacStaticAsync().ConfigureAwait(false);
// 记录错误日志并返回空列表 if (flag != 1)
_logger.LogInformation($"读取到摄像头信息为不可用{DateTime.Now},请检查摄像头"); {
return new List<IncomingFromExternal>(); // 记录错误日志并返回空列表
} _logger.LogInformation($"读取到摄像头信息为不可用{DateTime.Now},请检查摄像头");
if (string.IsNullOrEmpty(_options.Value.AutoRemote.AreaIDs)) return new List<IncomingFromExternal>();
{ }
_logger.LogInformation($"没有设置指定区域AutoRemote->AreaIDs"); if (string.IsNullOrEmpty(_options.Value.AutoRemote.AreaIDs))
return new List<IncomingFromExternal>(); {
} _logger.LogInformation($"没有设置指定区域AutoRemote->AreaIDs");
var ids = _options.Value.AutoRemote.AreaIDs.Split(","); return new List<IncomingFromExternal>();
List<ResponCargoItem> camralist = new List<ResponCargoItem>(); }
var ids = _options.Value.AutoRemote.AreaIDs.Split(",");
List<ResponCargoItem> camralist = new List<ResponCargoItem>();
for (int i = 1; i <= invterval; i++)
{
foreach (var itm in ids)//遍历区域查找所有货物 foreach (var itm in ids)//遍历区域查找所有货物
{ {
var idsList = await client.GetCargoStaticAsync(itm).ConfigureAwait(false); var idsList = await client.GetCargoStaticAsync(itm).ConfigureAwait(false);
camralist.AddRange(idsList); //flag 1-有货 0-空闲
camralist.AddRange(idsList.Where(r => r.Flag == 0));
} }
successTime++; _logger.LogInformation($"读取标识{guid}读取成功次数{i},耗时 {sw.ElapsedMilliseconds}毫秒");
sw.Stop(); }
_logger.LogInformation($"读取标识{guid}读取成功次数{successTime},耗时 {sw.ElapsedMilliseconds}毫秒"); sw.Stop();
Thread.Sleep(1000); Thread.Sleep(1000);
//按区域、货位号、零件、标志
var group= camralist.GroupBy(r => new { r.AreaID, r.CargoID, r.PartCode, r.Flag });
//获取和次数相等的空闲数据
var list = group.Where(r => r.Count() == invterval).ToList();
//如果有货位空闲
if (list.Count>0)
{
sw = Stopwatch.StartNew();
if (successTime == invterval) _logger.LogInformation($"开始标识{guid}同步WMS开始");
List<UnCompletedRequestDto> inputdetail = new List<UnCompletedRequestDto>();
foreach (var item in list.Select(r=>r.Key).ToList())
{ {
sw = Stopwatch.StartNew(); UnCompletedRequestDto jobrequestinput = new UnCompletedRequestDto();
jobrequestinput.ItemCode = item.PartCode;
_logger.LogInformation($"开始标识{guid}同步WMS开始"); jobrequestinput.LocCode = item.AreaID.ToString();
List<UnCompletedRequestDto> inputdetail = new List<UnCompletedRequestDto>(); jobrequestinput.PositionCode = item.CargoID.ToString();
foreach (var item in camralist) inputdetail.Add(jobrequestinput);
{ }
UnCompletedRequestDto jobrequestinput = new UnCompletedRequestDto();
jobrequestinput.ItemCode = item.PartCode;
jobrequestinput.LocCode = item.AreaID.ToString();
jobrequestinput.PositionCode = item.CargoID.ToString();
inputdetail.Add(jobrequestinput);
}
var uncompletelist = await _injectionRequest.GetUnCompletedRequestAsync(inputdetail).ConfigureAwait(false);//将所有库位零件信息查找未完成记录 var uncompletelist = await _injectionRequest.Getlist(inputdetail).ConfigureAwait(false);//将所有库位零件信息查找未完成记录
var query = from itm in camralist var query = from itm in list.Select(r => r.Key).ToList()
join itm1 in uncompletelist on new { locCode = itm.AreaID.ToString(), itmCode = itm.PartCode, PositionCode = itm.CargoID.ToString() } join itm1 in uncompletelist on new { locCode = itm.AreaID.ToString(), itmCode = itm.PartCode, PositionCode = itm.CargoID.ToString() }
equals new { locCode = itm1.LocCode, itmCode = itm1.ItemCode, PositionCode = itm1.PositionCode } into temp equals new { locCode = itm1.LocCode, itmCode = itm1.ItemCode, PositionCode = itm1.PositionCode } into temp
from tm in temp.DefaultIfEmpty() from tm in temp.DefaultIfEmpty()
where tm == null where tm == null
select itm; select itm;
var injectionList = query.ToList();//已经完成的记录 var injectionList = query.ToList();//已经完成的记录
foreach (var inject in injectionList) foreach (var inject in injectionList)
{
List<InjectionRequest> cameraList = new List<InjectionRequest>();
InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput();
input.Worker = "Vision";
input.IssueRequestType = EnumIssueRequestType.Vision;
input.AutoSubmit = true;
input.ActiveDate = DateTime.Now;
input.UseOnTheWayLocation = false;
input.Remark = "视觉叫料";
List<InjectionIssueRequestDetailInput> injectionRequestDetails = new List<InjectionIssueRequestDetailInput>();
//foreach (var job in cameraList)
//{
var detailInput = new InjectionIssueRequestDetailInput()
{ {
List<InjectionRequest> cameraList = new List<InjectionRequest>(); ItemCode = inject.PartCode,
ToLocationCode = inject.AreaID.ToString(),
InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); PositionCode = inject.CargoID,
input.Worker = "Vision"; Qty = 1,
input.IssueRequestType = EnumIssueRequestType.Vision; RecommendType = EnumRecommendType.RAW,
input.AutoSubmit = true; IssuedQty = 0,
input.ActiveDate = DateTime.Now; ReceivedQty = 0,
input.UseOnTheWayLocation = false; Status = EnumStatus.Open,
input.Remark = "视觉叫料"; RequestStatus = EnumRequestStatus.New,
List<InjectionIssueRequestDetailInput> injectionRequestDetails = new List<InjectionIssueRequestDetailInput>(); BoxQty = 1
//foreach (var job in cameraList) };
//{ // 添加注塑叫料明细任务数据
var detailInput = new InjectionIssueRequestDetailInput() injectionRequestDetails.Add(detailInput);
{ //}
ItemCode = inject.PartCode, input.Details.AddRange(injectionRequestDetails);
ToLocationCode = inject.AreaID.ToString(), // 通过 BindAsync 方法对零件仓库进行赋值
PositionCode = inject.CargoID, var errors = await BindAsync(input.Details).ConfigureAwait(false);
Qty = 1, if (errors.Count > 0)
RecommendType = EnumRecommendType.RAW, {
IssuedQty = 0, // 记录错误日志并返回空列表
ReceivedQty = 0, foreach (var error in errors)
Status = EnumStatus.Open,
RequestStatus = EnumRequestStatus.New,
BoxQty = 1
};
// 添加注塑叫料明细任务数据
injectionRequestDetails.Add(detailInput);
//}
input.Details.AddRange(injectionRequestDetails);
// 通过 BindAsync 方法对零件仓库进行赋值
var errors = await BindAsync(input.Details).ConfigureAwait(false);
if (errors.Count > 0)
{ {
// 记录错误日志并返回空列表 _logger.LogInformation(error);
foreach (var error in errors)
{
_logger.LogInformation(error);
}
return new List<IncomingFromExternal>();
} }
// 创建新的注塑请求并将数据写入数据库 return new List<IncomingFromExternal>();
await _injectionRequest.CreateAsync(input).ConfigureAwait(false);
} }
_logger.LogInformation($"标识{guid}同步WMS结束,耗时{sw.ElapsedMilliseconds }毫秒"); // 创建新的注塑请求并将数据写入数据库
} await _injectionRequest.CreateAsync(input).ConfigureAwait(false);
else
{
Thread.Sleep(1000);
} }
_logger.LogInformation($"标识{guid}同步WMS结束,耗时{sw.ElapsedMilliseconds}毫秒");
}
else
{
Thread.Sleep(1000);
} }
//Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录 //Client client = new Client(_options.Value.AutoRemote.IpAddress, _httpClientFactory.CreateClient());//调用客户记录
//var flag= await client.GetMacStaticAsync().ConfigureAwait(false); //var flag= await client.GetMacStaticAsync().ConfigureAwait(false);
@ -219,13 +220,13 @@ public class InjectionMoldingRequestReader : IReader
//camralist = camralist.Where(p=>p.Flag==0).ToList(); //camralist = camralist.Where(p=>p.Flag==0).ToList();
//} //}
} }
// 捕获特定异常并记录日志 // 捕获特定异常并记录日志
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogInformation(ex.Message); _logger.LogInformation(ex.Message);
@ -262,7 +263,7 @@ public class InjectionMoldingRequestReader : IReader
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;

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs

@ -1,6 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class UnCompletedRequestDto public class UnCompletedRequestDto: EntityDto
{ {
public string ItemCode { get; set; } public string ItemCode { get; set; }
public string LocCode { get; set; } public string LocCode { get; set; }

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs

@ -13,5 +13,6 @@ public interface IInjectionIssueRequestAppService
Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input); Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input);
Task UpdateStatusCompletedAsync(string number); Task UpdateStatusCompletedAsync(string number);
Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber); Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber);
Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list); Task<List<UnCompletedRequestDto>> GetListForSJ(List<UnCompletedRequestDto> p_list);
Task<List<UnCompletedRequestDto>> Getlist(List<UnCompletedRequestDto> pList);
} }

36
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

@ -401,8 +401,8 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
/// 获取已完成的叫料单数量 /// 获取已完成的叫料单数量
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost("get-uncompleted-request")] [HttpPost("sj")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> pList) public async Task<List<UnCompletedRequestDto>> GetListForSJ(List<UnCompletedRequestDto> pList)
{ {
var returnList = new List<UnCompletedRequestDto>(); var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询 //枚举类型查不到改成SQL查询
@ -427,6 +427,38 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return returnList; return returnList;
} }
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpPost("get")]
public async Task<List<UnCompletedRequestDto>> Getlist(List<UnCompletedRequestDto> pList)
{
var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list = await _repository.GetListAsync(p =>
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision)
.ConfigureAwait(false);
foreach (var itm in list)
{
var query = from detail in itm.Details
join citm in pList on new
{
detail.ItemCode,
locCode = detail.ToLocationCode,
areaCode = detail.PositionCode
} equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
{
ItemCode = detail.ItemCode,
LocCode = detail.ToLocationCode,
PositionCode = detail.PositionCode
};
returnList.AddRange(query.ToList());
}
return returnList;
}
#endregion #endregion
} }

Loading…
Cancel
Save