|
@@ -1,5 +1,6 @@
|
|
|
using DBHelper;
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
+using Newtonsoft.Json;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
@@ -10,7 +11,6 @@ using WCS.Entity.Protocol.SRM;
|
|
|
using WCS.Service.Extensions;
|
|
|
using WCS.Service.Handlers;
|
|
|
using WCS.Service.Helpers;
|
|
|
-using WCS.Service.Log;
|
|
|
using TaskStatus = WCS.Entity.TaskStatus;
|
|
|
|
|
|
namespace WCS.Service.Works.Station
|
|
@@ -129,12 +129,12 @@ namespace WCS.Service.Works.Station
|
|
|
var res = WMS.GetTunnelList(taskList.Select(v => v.WMSTASK.ToString()).ToList(), code);
|
|
|
if (string.IsNullOrEmpty(res.TunnelNum)) throw new WarnException($"WMS未返回巷道");
|
|
|
|
|
|
- InfoLog.INFO_INFO($"一次分配 任务号:{taskList[0].ID},可用巷道:{res.TunnelNum},设备:{code}");
|
|
|
var tunnelNo = res.TunnelNum.Split(',').Select(v => "TY" + v).ToList();
|
|
|
|
|
|
var tunnels = Device.Where(v => tunnelNo.Contains(v.CODE)).ToList();
|
|
|
|
|
|
var tunnelInfos = new List<TunnelInfo>();
|
|
|
+
|
|
|
foreach (var item in tunnels)
|
|
|
{
|
|
|
//当前巷道的取货点
|
|
@@ -173,8 +173,6 @@ namespace WCS.Service.Works.Station
|
|
|
.Where(v => !db.Default.Set<WCS_TASK>().Any(p => p.Priority > 0 && p.DEVICE == v.SRM.Entity.CODE && p.STATUS < TaskStatus.堆垛机完成)).MinBy(v => tunnelNo.IndexOf(v.Tunnel.CODE));
|
|
|
if (tunnelInfo == null) throw new WarnException("无可用巷道");
|
|
|
|
|
|
- InfoLog.INFO_INFO($"一次分配 任务号:{taskList[0].ID},选择巷道:{tunnelInfo.Tunnel.CODE},设备:{code}");
|
|
|
-
|
|
|
//开始变更任务信息
|
|
|
foreach (var item in devise)
|
|
|
{
|
|
@@ -247,27 +245,29 @@ namespace WCS.Service.Works.Station
|
|
|
var res = WMS.GetTunnelList(taskList.Select(v => v.WMSTASK.ToString()).ToList(), code);
|
|
|
if (string.IsNullOrEmpty(res.TunnelNum)) throw new WarnException($"WMS未返回巷道");
|
|
|
|
|
|
- InfoLog.INFO_INFO($"二次分配 任务号:{taskList[0].ID},可用巷道:{res.TunnelNum},设备:{code}");
|
|
|
var tunnelNo = res.TunnelNum.Split(',').Select(v => "TY" + v).ToList();
|
|
|
|
|
|
var tunnels = Device.Where(v => tunnelNo.Contains(v.CODE)).ToList();
|
|
|
|
|
|
var tunnelInfos = new List<TunnelInfo>();
|
|
|
+ code.infolog($"{res.WMSTaskGroupKey}第二次分配:WMS返回{JsonConvert.SerializeObject(tunnels)}。");
|
|
|
foreach (var item in tunnels)
|
|
|
{
|
|
|
//当前巷道的取货点
|
|
|
var allIn = Device.Where(v => v.Is(DF.SRMBOPP取货))
|
|
|
- .Where(v => v.ROUTES.Any(p => p.NEXT == item)) //下一个点为当前巷道的取货点
|
|
|
+ .Where(v => v.ROUTES.Any(p => p.NEXT.CODE == item.CODE)) //下一个点为当前巷道的取货点
|
|
|
.Select(v => v.CODE)
|
|
|
.ToList();
|
|
|
+ code.infolog($"allIn:{JsonConvert.SerializeObject(allIn)};item:{item.CODE}");
|
|
|
//下一个目标地址包含取货点的设备,此时获得的数据是旋转台
|
|
|
var turntable = Device.Where(v => v.IsConv() && v.ROUTES.Any(p => p.NEXT != null && allIn.Contains(p.NEXT.CODE)))
|
|
|
.Where(v => stationDeviceGroup.Items.Any(p => p.Entity == v))// 筛选出包含在当前设备组的设备
|
|
|
.Distinct()
|
|
|
.FirstOrDefault();//去一次重
|
|
|
+ code.infolog($"turntable:{JsonConvert.SerializeObject(turntable)};item:{item.CODE}");
|
|
|
if (turntable == null) continue;
|
|
|
var dev = Device.Where(p => p.CODE.StartsWith("G") && p.DEVICEGROUP.Any(d => allIn.Contains(d.MEMBER.CODE))).MinBy(p => p.CODE);
|
|
|
-
|
|
|
+ code.infolog($"dev:{JsonConvert.SerializeObject(dev)};item:{item.CODE}");
|
|
|
tunnelInfos.Add(new TunnelInfo
|
|
|
{
|
|
|
Tunnel = item,
|
|
@@ -276,10 +276,18 @@ namespace WCS.Service.Works.Station
|
|
|
});
|
|
|
}
|
|
|
//筛选出优先级最高的可用巷道
|
|
|
- var tunnelInfo = tunnelInfos.Where(v => { try { return v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲; } catch { return false; } }).MinBy(v => tunnelNo.IndexOf(v.Tunnel.CODE));
|
|
|
+ var tunnelInfo = tunnelInfos.Where(v =>
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ return v.SRM.Data3.SCAlarm == 0 && v.SRM.Data2.SRMMode == SCMode.远程 && v.SRM.Data2.SRMStatus == SCRunStatus.空闲;
|
|
|
+ code.infolog($"SCAlarm:{v.SRM.Data3.SCAlarm};SRMMode:{v.SRM.Data2.SRMMode};SRMStatus:{v.SRM.Data2.SRMStatus};CODE:{v.SRM.Entity.CODE}");
|
|
|
+ }
|
|
|
+ catch { return false; }
|
|
|
+ }).MinBy(v => tunnelNo.IndexOf(v.Tunnel.CODE));
|
|
|
+ code.infolog($"tunnelNo:{JsonConvert.SerializeObject(tunnelNo)}。");
|
|
|
if (tunnelInfo == null) throw new WarnException("无可用巷道");
|
|
|
-
|
|
|
- InfoLog.INFO_INFO($"二次分配 任务号:{taskList[0].ID},选择巷道:{tunnelInfo.Tunnel.CODE},设备:{code}");
|
|
|
+ code.infolog($"{res.WMSTaskGroupKey}第二次分配:WCS选择{tunnelInfo.Tunnel.CODE}。");
|
|
|
|
|
|
//开始变更任务信息
|
|
|
foreach (var item in devise)
|