using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using HH.WCS.JingyuNongfu.util;
using HH.WCS.JingyuNongfu.wms;
using static HH.WCS.JingyuNongfu.util.Settings;
namespace HH.WCS.JingyuNongfu.process
{
///
/// 瓶坯流程
///
internal class ProcessHelperPP
{
private static object _lockKkzy1 = new object();
// private static object _lockKkzy2 = new object();
private static object _lockMkzy = new object();
private static object _lockPGFDJ = new object();
private static object _lockPG = new object();
private static object _lockPPFDJSX = new object();
private static object _lockPPFDJXX = new object();
private static object _lockPPZSJSX = new object();
private static object _lockPPZSJXX = new object();
internal static void PpAuto()
{
//int a = 111;
EmptyBagTransport();
FullLineTransportByWord();
FullBagTransportPGFDJ();
DdqTransport();
WjpTransport();
var list = Settings.Gettransport.ToList();
foreach (var item in list)
{
immobilizationLocTask(item.startloc, item.endloc);
}
}
//---------------------------------20240619版本---------------------------------
///
/// 瓶盖翻斗机上满
///
///
///
internal static void PgEmpty1(WorkOrder workOrder, Location location)
{
lock (_lockPG)
{
try
{
Location start = null; int startLayer = 1;
// var cntrCode = string.Empty;
//var iron = false;
zoneInfo startZone = new zoneInfo();
var bussType = "";
LogHelper.Info($"瓶盖翻斗机上满:当前工单产线:{workOrder.S_PLineNo}无可用货位");
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "翻斗机即产满筐上线(瓶盖)";
if (workOrder.S_PLineNo.Contains("二期"))
{
bussType = "二期翻斗机即产满筐上线(瓶盖)";
if (workOrder.S_LinkLineNO.Contains("水盖"))
{
startZone = Settings.ppZones.Where(a => a.zoneType == 15 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
}
else
{
startZone = Settings.ppZones.Where(a => a.zoneType == 15 && a.deviceName == workOrder.S_LinkLineNO).FirstOrDefault();
}
}
else
{
startZone = Settings.ppZones.Where(a => a.zoneType == 0 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
}
}
else
{
bussType = "翻斗机库存满筐上线(瓶盖)";
if (workOrder.S_PLineNo.Contains("二期"))
{
bussType = "二期翻斗机库存满筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 13 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
}
else
{
LogHelper.Info($"当前产线:{workOrder.S_PLineNo}没有非即产急用库区");
}
}
if (startZone != null)
{
LogHelper.Info($"瓶盖翻斗机上满:当前库区:{startZone},计算货位");
//计算开始货位
var StartLocList = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocList.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocList);
}
else
{
LogHelper.Info($"瓶盖翻斗机上满:根据库区{startZone.zone}找不到对应货位");
}
//start = FindStartcolByLoclist(StartLocList);
}
else
{
LogHelper.Info($"瓶盖翻斗机上满:根据工单{workOrder.S_WorkNo}找不到对应库区");
}
//二期即产即用库区无货位 找非即产即用库区
if (start == null && workOrder.S_PLineNo.Contains("二期") && workOrder.S_UsingNow.Trim() == "Y")
{
LogHelper.Info($"瓶盖翻斗机上满:当前库区:{startZone}无可用货位,二期即产急用,切换非即产即用库区");
bussType = "二期翻斗机库存满筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 13).FirstOrDefault();
if (startZone != null)
{
//计算开始货位
var StartLocList = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocList.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocList);
}
}
}
if (start != null)
{
var shelf1Info = LocationHelper.GetLocCntrRel(start.S_LOC_CODE);
if (bussType == "二期翻斗机即产满筐上线(瓶盖)")
{
if (shelf1Info[0].Container.S_TYPE != "铁托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
else
{
if (shelf1Info[0].Container.S_TYPE != "塑料托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
if (shelf1Info.Count > 0)
{
if (start.N_CURRENT_NUM == 2)
{
startLayer = 2;
}
TaskProcess.CreateTransport(start.S_LOC_CODE, location.S_LOC_CODE, bussType, new List { shelf1Info[0].S_CNTR_CODE }, startLayer, 1, 1, 80);
}
}
else
{
LogHelper.Info($"当前库区:{startZone}无可用货位");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjEmpty " + ex.Message);
}
}
}
///
/// 瓶坯翻斗机上满
///
///
///
internal static void PpFdjEmpty(WorkOrder workOrder, Location location)
{
lock (_lockPPFDJSX)
{
try
{
Location start = null; int startLayer = 1; //Location end = null;
var cntrCode = string.Empty;
//var iron = false;
zoneInfo startZone;
//zoneInfo EndZone;
List locLists = null;
var bussType = "瓶坯注塑机下满";
LogHelper.Info($"瓶坯翻斗机上满:当前工单产线:{workOrder.S_PLineNo}无可用货位");
if (workOrder.S_UsingNow.Trim() == "Y")
{
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "二期翻斗机即产满筐上线(瓶胚)";
}
else
{
bussType = "翻斗机即产满筐上线(瓶胚)";
}
}
else
{
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "二期翻斗机库存满筐上线(瓶胚)";
}
else
{
bussType = "翻斗机库存满筐上线(瓶胚)";
}
}
//即产即用和非即产即用流程一样
//找瓶坯线边满框缓存区
startZone = Settings.ppZones.Where(a => a.zoneType == 2 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
if (!string.IsNullOrEmpty(startZone.zone))
{
//根据货位编码获取货位信息
locLists = LocationHelper.GetLocListAny(startZone.zone).Where(a => a.N_CURRENT_NUM == 1).OrderBy(a => a.N_ROW).ToList();
}
//找开始货位
if (locLists.Count > 0)
{
#region MyRegion
//判断空框出库区同排有没有锁
//var rowsStart = locLists.Select(a => a.N_ROW).Distinct().ToList();
//for (int i = 0; i < rowsStart.Count; i++)
//{
// var rowList = locLists.Where(r => r.N_ROW == rowsStart[i]).ToList().OrderByDescending(a => a.N_COL);
// if (rowList.Count(a => a.S_LOCK_STATE.Trim() != "无") == 0 && rowList.Count(a => a.N_CURRENT_NUM == 1) > 0)
// {
// Location other = null;
// //当前排没有锁并且有空位置
// //找到最大的空位(先找满位,然后后面一位要么是空,要么不存在)
// var full = rowList.OrderByDescending(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 1).FirstOrDefault();
// if (full != null)
// {
// other = full;
// }
// if (other != null)
// {
// if (start == null)
// {
// var time = LocationHelper.GetLocListAnybycode(start.S_LOC_CODE).FirstOrDefault();
// var t = int.Parse(Time);
// if (DateTime.Now.Subtract(time.T_MODIFY).TotalSeconds > 60 * t)
// {
// start = other;
// break;
// }
// }
// }
// }
//}
#endregion
//计算开始货位
start = FindStartcolByTime(locLists);
if (start != null)
{
//根据货位编码查货位容器表
var shelf1Info = LocationHelper.GetLocCntrRel(start.S_LOC_CODE);
if (shelf1Info.Count > 0)
{
cntrCode = shelf1Info[0].S_CNTR_CODE;
TaskProcess.CreateTransport(start.S_LOC_CODE, location.S_LOC_CODE, bussType, new List { cntrCode }, startLayer, 1, 1, 90);
}
else
{
LogHelper.Info($"根据货位{start.S_LOC_CODE}找不到货位容器表", "瓶坯");
}
}
}
else
{
LogHelper.Info($"{workOrder.S_PLineNo}上满找不到满框区货位", "瓶坯");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjEmpty " + ex.Message);
}
}
}
///
/// 瓶盖注塑机上空
///
///
///
internal static void PgZsjEmpty(WorkOrder workOrder, Location location)
{
lock (_lockPG)
{
try
{
Location start = null; int startLayer = 1;
// var cntrCode = string.Empty;
//var iron = false;
zoneInfo startZone = new zoneInfo();
var bussType = "";
LogHelper.Info($"瓶盖翻斗机上满:当前工单产线:{workOrder.S_PLineNo}无可用货位");
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "二期注塑机即产空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 16).FirstOrDefault();
}
else
{
bussType = "二期注塑机库存空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 17).FirstOrDefault();
}
//计算开始货位
if (startZone != null)
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},计算货位");
var StartLocList = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocList.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocList);
}
}
else
{
LogHelper.Info($"瓶盖翻斗机上满:根据工单{workOrder.S_WorkNo}找不到对应库区");
}
//start = FindStartcolByLoclist(StartLocList);
//二期即产即用库区无货位 找非即产即用库区
if (start == null && workOrder.S_PLineNo.Contains("二期") && workOrder.S_UsingNow.Trim() == "Y")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone}无可用货位,二期即产急用,切换非即产即用库区");
bussType = "二期注塑机库存空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 14).FirstOrDefault();
if (startZone != null)
{
//计算开始货位
var StartLocListqh = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocListqh.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocListqh);
}
}
}
if (start != null)
{
var shelf1Info = LocationHelper.GetLocCntrRel(start.S_LOC_CODE);
if (bussType.Contains("二期"))
{
if (bussType == "二期注塑机即产空筐上线(瓶盖)")
{
if (shelf1Info[0].Container.S_TYPE != "铁托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
else
{
if (shelf1Info[0].Container.S_TYPE != "塑料托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
}
if (shelf1Info.Count > 0)
{
TaskProcess.CreateTransport(start.S_LOC_CODE, location.S_LOC_CODE, bussType, new List { shelf1Info[0].S_CNTR_CODE }, startLayer, 1, 1, 80);
}
}
else
{
LogHelper.Info($"当前库区:{startZone}无可用货位");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjEmpty " + ex.Message);
}
}
}
///
/// 瓶盖无菌坯上空
///
///
///
internal static void WjEmpty(WorkOrder workOrder, Location location)
{
lock (_lockPG)
{
try
{
Location start = null; int startLayer = 1;
// var cntrCode = string.Empty;
//var iron = false;
zoneInfo startZone = new zoneInfo();
var bussType = "";
LogHelper.Info($"二期无菌上空:当前工单产线:{workOrder.S_PLineNo}无可用货位");
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "二期无菌即产空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 21).FirstOrDefault();
}
else
{
bussType = "二期无菌库存空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 14).FirstOrDefault();
}
LogHelper.Info($"二期无菌上空:当前库区:{startZone},计算货位");
//计算开始货位
var StartLocList = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocList.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocList);
}
//start = FindStartcolByLoclist(StartLocList);
if (start == null && workOrder.S_PLineNo.Contains("二期") && workOrder.S_UsingNow.Trim() == "Y")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone}无可用货位,二期即产急用,切换非即产即用库区");
bussType = "二期无菌库存空筐上线(瓶盖)";
startZone = Settings.ppZones.Where(a => a.zoneType == 14).FirstOrDefault();
if (startZone != null)
{
//计算开始货位
var StartLocListqh = LocationHelper.GetLocListAny(startZone.zone).OrderBy(a => a.N_ROW).ToList();
if (StartLocListqh.Count > 0)
{
start = FindStartcolByLoclistAndCol(StartLocListqh);
}
}
}
if (start != null)
{
var shelf1Info = LocationHelper.GetLocCntrRel(start.S_LOC_CODE);
if (shelf1Info.Count > 0)
{
if (bussType == "二期无菌即产空筐上线(瓶盖)")
{
if (shelf1Info[0].Container.S_TYPE != "铁托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
else
{
if (shelf1Info[0].Container.S_TYPE != "塑料托盘")
{
LogHelper.Info($"瓶盖注塑机上空:当前库区:{startZone.zone},托盘类型{shelf1Info[0].Container.S_TYPE},托盘类型不对,不生成任务");
return;
}
}
TaskProcess.CreateTransport(start.S_LOC_CODE, location.S_LOC_CODE, bussType, new List { shelf1Info[0].S_CNTR_CODE }, startLayer, 1, 1, 80);
}
}
else
{
LogHelper.Info($"当前库区:{startZone}无可用货位");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjEmpty " + ex.Message);
}
}
}
///
/// 瓶盖注塑机下满
///
///
///
///
internal static void PgZsjFull(WorkOrder workOrder, Location location, LocCntrRel lcr)
{
try
{
Location end = null; var endLayer = 1;
var bussType = "注塑机即产满筐下线(瓶盖)";
zoneInfo zone = new zoneInfo();
if (lcr.Container.S_TYPE == "铁托盘")
{
bussType = "注塑机即产满筐下线(瓶盖)";
zone = Settings.ppZones.Where(a => a.zoneType == 15 && a.deviceName == workOrder.S_LinkLineNO).FirstOrDefault();
}
else
{
bussType = "注塑机库存满筐下线(瓶盖)";
zone = Settings.ppZones.Where(a => a.zoneType == 18 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
}
//找空框入库区
if (zone != null)
{
//按排进行排序,优先入库 低排低列
var list = LocationHelper.GetLocListAny(zone.zone).OrderBy(a => a.N_ROW).ToList();
end = FindEndcolByLocList(list);
}
else
{
LogHelper.Info($"瓶盖注塑机下满:根据工单{workOrder.S_WorkNo}找不到对应库区");
}
if (end != null)
{
TaskProcess.CreateTransport(location.S_LOC_CODE, end.S_LOC_CODE, bussType, new List { lcr.S_CNTR_CODE }, 1, endLayer, 1, 80);
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjFull " + ex.Message);
}
}
///
/// 瓶盖无菌坯下满
///
///
///
///
internal static void WjpFull(WorkOrder workOrder, Location location, LocCntrRel lcr)
{
try
{
Location end = null; var endLayer = 1;
var bussType = "瓶盖无菌坯下满";
zoneInfo zone = new zoneInfo();
if (lcr.Container.S_TYPE == "铁托盘")
{
zone = Settings.ppZones.Where(a => a.zoneType == 19).FirstOrDefault();
}
else
{
zone = Settings.ppZones.Where(a => a.zoneType == 18 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
}
//找空框入库区
if (zone != null)
{
//按排进行排序,优先入库 低排低列
var list = LocationHelper.GetLocListAny(zone.zone).OrderBy(a => a.N_ROW).ToList();
end = FindEndcolByLocList2(list);
}
if (end != null)
{
if (end.N_CURRENT_NUM == 1)
{
endLayer = 2;
}
TaskProcess.CreateTransport(location.S_LOC_CODE, end.S_LOC_CODE, bussType, new List { lcr.S_CNTR_CODE }, 1, endLayer, 1, 80);
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjFull " + ex.Message);
}
}
///
/// 瓶坯注塑机上空
///
///
///
internal static void PpZsjEmpty(WorkOrder workOrder, Location location)
{
lock (_lockPPZSJSX)
{
try
{
Location start = null; int startLayer = 1;// Location end = null;
var cntrCode = string.Empty;
// var iron = false;
//zoneInfo startZone;
zoneInfo EndZone = new zoneInfo();
//List locLists = null;
List locendLists = null;
var bussType = "瓶坯注塑机上空";
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "注塑即产空筐上线(瓶胚)";
}
else
{
bussType = "注塑库存空筐上线(瓶胚)";
}
//找空框套袋转运区
EndZone = Settings.ppZones.Where(a => a.zoneType == 11).FirstOrDefault();
locendLists = LocationHelper.GetLocListAny(EndZone.zone).Where(a => a.N_CURRENT_NUM == 1).OrderBy(a => a.N_ROW).ToList();
if (locendLists.Count <= 0)
{
//找瓶坯下空专用空框套袋区
EndZone = Settings.ppZones.Where(a => a.zoneType == 10).FirstOrDefault();
locendLists = LocationHelper.GetLocListAny(EndZone.zone).Where(a => a.N_CURRENT_NUM == 1).OrderBy(a => a.N_ROW).ToList();
}
//找空框套袋货位
if (locendLists.Count > 0)
{
start = FindStartcolByTime(locendLists);
}
if (start != null)
{
var shelf1Info = LocationHelper.GetLocCntrRel(start.S_LOC_CODE);
if (shelf1Info.Count <= 0)
{
Console.WriteLine($"根据{start.S_LOC_CODE}未找到空托盘,请检查货位容器表");
}
else
{
//托盘绑定本来送去区域
var startCntr = LocationHelper.GetLocCntr(start.S_LOC_CODE).FirstOrDefault();
if (startCntr != null)
{
// ProcessHelper.SetTrayInfoFull1(workOrder, startCntr.Container, start.S_LOC_CODE, location.S_LOC_CODE);
TaskProcess.CreateTransport(start.S_LOC_CODE, location.S_LOC_CODE, bussType, new List { shelf1Info[0].S_CNTR_CODE }, startLayer, 1, 1, 80);
}
else
{
LogHelper.Info($"根据货位编码{start.S_LOC_CODE},未找到托盘,请检查货位容器表", "任务");
}
}
}
else
{
LogHelper.Info($"未找到空框套袋区货位", "任务");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
///
/// 瓶盖翻斗机下空
///
///
///
///
internal static void PgFdFull(WorkOrder workOrder, Location location, LocCntrRel lcr)
{
try
{
Location end = null; var endLayer = 1;
var bussType = "翻斗机即产空筐下线(瓶盖)";
zoneInfo zone = new zoneInfo();
if (lcr.Container.S_TYPE == "铁托盘")
{
bussType = "翻斗机即产空筐下线(瓶盖)";
if (workOrder.S_PLineNo.Contains("二期"))
{
zone = Settings.ppZones.Where(a => a.zoneType == 16 && a.deviceName == workOrder.S_LinkLineNO).FirstOrDefault();
}
}
else
{
if (workOrder.S_PLineNo.Contains("二期"))
{
bussType = "翻斗机库存空筐下线(瓶盖)";
zone = Settings.ppZones.Where(a => a.zoneType == 14).FirstOrDefault();
}
}
//找空框入库区
if (zone != null)
{
//按排进行排序,优先入库 低排低列
var list = LocationHelper.GetLocListAny(zone.zone).OrderBy(a => a.N_ROW).ToList();
if (list.Count > 0)
{
end = FindEndcolByLocList(list);
}
else
{
LogHelper.Info($"翻斗机下空,根据库区编码{zone.zone}找不到对应货位+");
}
}
else
{
LogHelper.Info($"翻斗机下空,找不到对应库区");
}
if (end != null)
{
TaskProcess.CreateTransport(location.S_LOC_CODE, end.S_LOC_CODE, bussType, new List { lcr.S_CNTR_CODE }, 1, endLayer, 1, 80);
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjFull " + ex.Message);
}
}
///
/// 瓶坯翻斗机下空
///
///
///
///
internal static void PpFdFull(WorkOrder workOrder, Location location, LocCntrRel lcr)
{
lock (_lockPPFDJXX)
{
try
{
LogHelper.Info($"{workOrder.S_PLineNo}下线货位计算", "任务");
Location end = null; var endLayer = 1;// Location endtd = null;
zoneInfo zone = null; zoneInfo EndZone = null;
List list = null; List locendLists = null;
LogHelper.Info($"瓶坯翻斗机下空:当前工单产线:{workOrder.S_PLineNo}");
var bussType = "瓶坯翻斗机下空入放置区";
//即产即用
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "翻斗机即产空筐下线(瓶胚)";
}
//非即产即用
else
{
bussType = "翻斗机库存空筐下线(瓶胚)";
}
//找空框套袋区
if (workOrder.S_PLineNo.Contains("二期"))
{
EndZone = Settings.ppZones.Where(a => a.zoneType == 12).FirstOrDefault();
locendLists = LocationHelper.GetLocListAny(EndZone.zone).Where(a => a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).ToList();
list = LocationHelper.GetLocListAny(EndZone.zone).OrderBy(a => a.N_ROW).ToList();
end = FindEndcolByLocList(list);
}
else
{
EndZone = Settings.ppZones.Where(a => a.zoneType == 11).FirstOrDefault();
//计算线边是否有可下空货位
locendLists = LocationHelper.GetLocListAny(EndZone.zone).Where(a => a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).ToList();
list = LocationHelper.GetLocListAny(EndZone.zone).OrderBy(a => a.N_ROW).ToList();
end = FindEndcolByLocList(list);
//空框套袋区无可下空货位 找空框入库区
if (end == null)
{
//找瓶坯下空专用空框套袋区
EndZone = Settings.ppZones.Where(a => a.zoneType == 6).FirstOrDefault();
locendLists = LocationHelper.GetLocListAny(EndZone.zone).Where(a => a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).ToList();
if (locendLists.Count > 0)
{
//根据终点库区找下线货位
list = LocationHelper.GetLocListAny(EndZone.zone).OrderBy(a => a.N_ROW).ToList();
if (list.Count > 0)
{
end = FindEndcolByLocList(list);
}
}
}
}
if (end != null)
{
LogHelper.Info($"{workOrder.S_PLineNo}下线货位计算终点{end.S_LOC_CODE}", "任务");
TaskProcess.CreateTransport(location.S_LOC_CODE, end.S_LOC_CODE, bussType, new List { lcr.S_CNTR_CODE }, 1, endLayer, 1, 90);
}
else
{
LogHelper.Info($"{workOrder.S_PLineNo}下空无可用货位,请检查空框线边区和入库区", "任务");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjFull " + ex.Message);
}
}
}
///
/// 瓶坯注塑机下满
///
///
///
///
internal static void PpZsFull(WorkOrder workOrder, Location location, LocCntrRel lcr, int deviceNo)
{
lock (_lockPPZSJXX)
{
try
{
Location end = null; var endLayer = 1;
zoneInfo zone = null;
List list = null;
var bussType = "瓶坯注塑机下满";
//即产即用
if (workOrder.S_UsingNow.Trim() == "Y")
{
bussType = "注塑即产满筐下线(瓶胚)";
zone = Settings.ppZones.Where(a => a.zoneType == 2 && a.deviceName == workOrder.S_LinkLineNO).FirstOrDefault();
//根据终点库区找下线货位
list = LocationHelper.GetLocListAny(zone.zone).OrderBy(a => a.N_ROW).ToList();
}
//非即产即用
else
{
bussType = "注塑库存满筐下线(瓶胚)";
zone = Settings.ppZones.Where(a => a.zoneType == 7 && a.deviceName == workOrder.S_PLineNo).FirstOrDefault();
//根据终点库区找下线货位
list = LocationHelper.GetLocListAny(zone.zone).Where(a => a.N_ROW == deviceNo).ToList();
}
//找终点入库区域
if (list.Count > 0)
{
end = FindEndcolByLocList(list);
}
else
{
LogHelper.Info($"{workOrder.S_PLineNo}找不到满框线边区", "瓶坯");
}
//找转运货位
//var Zyzone = Settings.ppZones.Where(a => a.zoneType == 7).FirstOrDefault();
if (end != null)
{
//托盘绑定本来送去区域
//ProcessHelper.SetTrayInfoZone(lcr.Container, location.S_LOC_CODE, Zyzone.zone);
TaskProcess.CreateTransport(location.S_LOC_CODE, end.S_LOC_CODE, bussType, new List { lcr.S_CNTR_CODE }, 1, endLayer, 1, 80);
}
else
{
LogHelper.Info($"{workOrder.S_PLineNo}容器找不到目的地,请检查满框入库区和瓶坯满框入库区", "瓶坯");
}
}
catch (Exception ex)
{
Console.WriteLine("ZsjFull " + ex.Message);
}
}
}
///
/// 找终点空货位
///
///
///
internal static Location FindEndcolByLocList(List locations)
{
try
{
var db = new SqlHelper