using Microsoft.CodeAnalysis;
|
using Microsoft.EntityFrameworkCore;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading;
|
using WIDESEA_Common;
|
using WIDESEA_Common.Tools;
|
using WIDESEA_Core.EFDbContext;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_Entity.DomainModels;
|
using WIDESEA_Services.IRepositories;
|
using WIDESEA_Services.Repositories;
|
using WIDESEA_Services.Services;
|
using WIDESEA_WCS.JobsPart.Public;
|
using WIDESEA_WCS.WCSClient;
|
|
namespace WIDESEA_WCS
|
{
|
public partial class StackerExecutor
|
{
|
public static object requestQJ = new object();//requestZJJK
|
private static int _readQJSignalso = 0;//_readZTBUPSignalso
|
/// <summary>
|
/// 切卷自动回空
|
/// </summary>
|
/// <param name="client"></param>
|
public static void QJ_ZDHK(PLCClient client)
|
{
|
if (Interlocked.Exchange(ref _readQJSignalso, 1) == 0)
|
{
|
try
|
{
|
string[] zfqjhcj = { "ZJ-QJHCJ", "FJ-QJHCJ" };
|
foreach (var item in zfqjhcj)
|
{
|
ZFQJHLclass(item);
|
}
|
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
finally
|
{
|
Interlocked.Exchange(ref _readQJSignalso, 0);
|
}
|
}
|
}
|
|
public static void ZFQJHLclass(string hcjtype) {
|
VOLContext Context = new VOLContext();
|
WebResponseContent responseContent = new WebResponseContent();
|
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
|
|
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
|
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
|
|
Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context);
|
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
|
|
Idt_agvtask_htyRepository agvhtyRepository = new dt_agvtask_htyRepository(Context);
|
List<base_ware_location> base_Ware_Location = locRepository.Find(d => d.upper_code.Contains(hcjtype) && d.location_state == "LocationState_Stored" && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 1 && d.status == 1 && d.task == 2).ToList();
|
if (base_Ware_Location.Count > 0)
|
{
|
foreach (var item in base_Ware_Location)
|
{
|
List<base_routing_table> routing_table = routingRepository.Find(v => v.route_began == item.upper_code && v.route_end.Contains("GFHCJ")).ToList();
|
foreach (var item1 in routing_table)
|
{
|
//切卷空托盘回流到辊分下料缓存架
|
base_ware_location ware_Location = locRepository.FindFirst(d => d.upper_code == item1.route_end && d.location_state == "LocationState_Empty" && d.tpgd == 0 && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.status == 1 && d.task == 2);
|
if (ware_Location != null)
|
{
|
|
|
dt_agvtask dt_Agvtask = agvRepository.FindFirst(d => d.agv_toaddress == ware_Location.upper_code);
|
if (dt_Agvtask != null)
|
{
|
continue;
|
}
|
//延时10秒实时检测
|
int index = 0;
|
int b = 10;
|
DateTime time = DateTime.Now;
|
Double STAMP = 0;
|
do
|
{
|
DateTime time2 = DateTime.Now;
|
STAMP = (time2 - time).TotalSeconds;
|
base_ware_location DSLocation = locRepository.FindFirst(d => d.upper_code == item.upper_code
|
&& d.location_state == LocationStateEnum.LocationState_Stored.ToString() && d.tpgd == 1 && d.task == 2 && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.status == 1);
|
if (DSLocation == null)
|
{
|
index = 3;
|
break;
|
}
|
|
} while (STAMP < b);
|
if (index == 3)
|
{
|
break;
|
}
|
|
|
//dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == ware_Location1.upper_code).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault();
|
|
//bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 120;
|
//if (interval)
|
//{
|
// continue;
|
//}
|
base_ware_location ware_Location1 = locRepository.FindFirst(d => d.upper_code == item.upper_code && d.location_state == LocationStateEnum.LocationState_Stored.ToString() && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 1 && d.status == 1 && d.task == 2);
|
if (ware_Location1 == null)
|
{
|
continue;
|
}
|
|
dt_agvtask agvtask = new dt_agvtask();
|
agvtask.agv_id = Guid.NewGuid();
|
agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo();
|
agvtask.agv_fromaddress = ware_Location1.upper_code;
|
agvtask.agv_toaddress = ware_Location.upper_code;
|
agvtask.agv_code = "组装AGV调度";
|
agvtask.agv_remark = "切卷上料回空";
|
agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
|
agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString();
|
agvtask.agv_worktype = 1;//工作类型
|
agvtask.agv_materielid = "";
|
agvtask.agv_qty = 1;
|
agvtask.agv_createtime = DateTime.Now;
|
agvtask.agv_grade = 0;//任务优先级
|
agvtask.agv_userid = "WCS";
|
|
ware_Location1.task = 1;
|
var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int begin = locRepository.Update(ware_Location1, d => new { d.task }, true);
|
ware_Location.task = 1;
|
var entry2 = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry2 != null)
|
{
|
entry2.State = EntityState.Detached;
|
}
|
int end = locRepository.Update(ware_Location, d => new { d.task }, true);
|
if (begin == 1 && end == 1)
|
{
|
WCSCommon.freeDB.Add(agvtask);
|
}
|
break;
|
}
|
}
|
|
//判断还有多余未进行回流的切卷空托盘进行回流到极库
|
base_ware_location Location = locRepository.FindFirst(d => d.upper_code == item.upper_code && d.location_state == LocationStateEnum.LocationState_Stored.ToString() && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 1
|
&& d.status == 1 && d.task == 2);
|
if (Location == null)
|
{
|
return;
|
}
|
//切卷空托盘回流到极库
|
List<base_routing_table> routing_table1 = routingRepository.Find(v => v.route_end == item.upper_code).ToList();
|
foreach (var item1 in routing_table1)
|
{
|
base_ware_location ware_Location = locRepository.FindFirst(d => d.upper_code == item1.route_began && d.location_state == "LocationState_Empty" && d.tpgd == 0 && d.status == 1 && d.task == 2);
|
if (ware_Location != null)
|
{
|
dt_agvtask dt_Agvtask = agvRepository.FindFirst(d => d.agv_toaddress == ware_Location.upper_code);
|
if (dt_Agvtask != null)
|
{
|
continue;
|
}
|
int index = 0;
|
int b = 10;
|
DateTime time = DateTime.Now;
|
Double STAMP = 0;
|
do
|
{
|
DateTime time2 = DateTime.Now;
|
STAMP = (time2 - time).TotalSeconds;
|
base_ware_location DSLocation = locRepository.FindFirst(d => d.upper_code == item.upper_code
|
&& d.location_state == LocationStateEnum.LocationState_Stored.ToString() && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 1
|
&& d.status == 1 && d.task == 2);
|
if (DSLocation == null)
|
{
|
index = 3;
|
break;
|
}
|
|
} while (STAMP < b);
|
if (index == 3)
|
{
|
break;
|
}
|
|
//切卷空托回流到极库空位架
|
base_ware_location dwLocation = locRepository.FindFirst(d => d.upper_code == item1.route_began && d.location_state == "LocationState_Empty" && d.tpgd == 0 && d.status == 1 && d.task == 2);
|
dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_toaddress == dwLocation.upper_code).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault();
|
if (agvtask_Hty != null)
|
{
|
bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 60;
|
if (interval)
|
{
|
continue;
|
}
|
}
|
|
if (dwLocation == null)
|
{
|
continue;
|
}
|
|
dt_agvtask agvtask = new dt_agvtask();
|
agvtask.agv_id = Guid.NewGuid();
|
agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo();
|
agvtask.agv_fromaddress = Location.upper_code;
|
agvtask.agv_toaddress = dwLocation.upper_code;
|
agvtask.agv_code = "组装AGV调度";
|
agvtask.agv_remark = "切卷上料回空";
|
agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
|
agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString();
|
agvtask.agv_worktype = 1;//工作类型
|
agvtask.agv_materielid = "";
|
agvtask.agv_qty = 1;
|
agvtask.agv_createtime = DateTime.Now;
|
agvtask.agv_grade = 0;//任务优先级
|
agvtask.agv_userid = "WCS";
|
|
|
Location.task = 1;
|
var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int begin = locRepository.Update(Location, d => new { d.task }, true);
|
|
dwLocation.task = 1;
|
var entry2 = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry2 != null)
|
{
|
entry2.State = EntityState.Detached;
|
}
|
int end = locRepository.Update(dwLocation, d => new { d.task }, true);
|
if (begin == 1 && end == 1)
|
{
|
WCSCommon.freeDB.Add(agvtask);
|
}
|
break;
|
|
|
|
}
|
|
}
|
}
|
}
|
else //从极卷库回空托到辊分下料空位缓存架
|
{
|
|
List<base_ware_location> base_Ware_GFLocation = locRepository.Find(d => d.upper_code.Contains("GFHCJ")
|
&& d.location_state == "LocationState_Empty" && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 0 && d.status == 1 && d.task == 2).ToList();
|
|
if (base_Ware_GFLocation.Count > 0)
|
{
|
foreach (var item in base_Ware_GFLocation)
|
{
|
|
List<base_routing_table> routing_table1 = routingRepository.Find(v => v.route_began == item.upper_code).ToList();
|
foreach (var item1 in routing_table1)
|
{
|
base_ware_location ware_Location = locRepository.FindFirst(d => d.upper_code == item1.route_end && d.location_state == "LocationState_Stored" && d.tpgd == 1 && d.geartype == "暂无" && d.status == 1 && d.task == 2);
|
if (ware_Location != null)
|
{
|
int index = 0;
|
int b = 10;
|
DateTime time = DateTime.Now;
|
Double STAMP = 0;
|
do
|
{
|
DateTime time2 = DateTime.Now;
|
STAMP = (time2 - time).TotalSeconds;
|
base_ware_location DSLocation = locRepository.FindFirst(d => d.upper_code == item.upper_code
|
&& d.location_state == "LocationState_Empty" && d.gd1 == 0 && d.gd2 == 0 && d.gd3 == 0 && d.gd4 == 0 && d.tpgd == 0 && d.status == 1 && d.task == 2);
|
if (DSLocation == null)
|
{
|
|
index = 3;
|
break;
|
}
|
|
} while (STAMP < b);
|
|
if (index == 3)
|
{
|
|
break;
|
}
|
base_ware_location dwLocation = locRepository.FindFirst(d => d.upper_code == item1.route_end && d.location_state == "LocationState_Stored" && d.tpgd == 1 && d.geartype == "暂无" && d.status == 1 && d.task == 2);
|
if (dwLocation == null)
|
{
|
continue;
|
}
|
dt_agvtask dt_Agvtask = agvRepository.FindFirst(d => d.agv_toaddress == item.upper_code);
|
if (dt_Agvtask != null)
|
{
|
continue;
|
}
|
//dt_agvtask_hty agvtask_Hty = agvhtyRepository.Find(d => d.agv_fromaddress == dwLocation.upper_code).OrderByDescending(d => d.agv_finishedtime).FirstOrDefault();
|
|
//bool interval = (DateTime.Now - agvtask_Hty.agv_finishedtime).Value.TotalSeconds < 120;
|
//if (interval)
|
//{
|
// continue;
|
//}
|
|
|
dt_agvtask agvtask = new dt_agvtask();
|
agvtask.agv_id = Guid.NewGuid();
|
agvtask.agv_tasknum = "KH-" + IdenxManager.GetTaskNo();
|
agvtask.agv_fromaddress = dwLocation.upper_code;
|
agvtask.agv_toaddress = item.upper_code;
|
agvtask.agv_code = "组装AGV调度";
|
agvtask.agv_remark = "极库空托回空";
|
agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
|
agvtask.agv_tasktype = AGVTaskTypeEnum.TaskType_Outbound.ToString();
|
agvtask.agv_worktype = 1;//工作类型
|
agvtask.agv_materielid = "";
|
agvtask.agv_qty = 1;
|
agvtask.agv_createtime = DateTime.Now;
|
agvtask.agv_grade = 0;//任务优先级
|
agvtask.agv_userid = "WCS";
|
item.task = 1;
|
|
var entry = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry != null)
|
{
|
entry.State = EntityState.Detached;
|
}
|
int begin = locRepository.Update(item, d => new { d.task }, true);
|
|
dwLocation.task = 1;
|
var entry2 = locRepository.DbContext.ChangeTracker.Entries<base_ware_location>().FirstOrDefault();
|
if (entry2 != null)
|
{
|
entry2.State = EntityState.Detached;
|
}
|
int end = locRepository.Update(dwLocation, d => new { d.task }, true);
|
if (begin == 1 && end == 1)
|
{
|
WCSCommon.freeDB.Add(agvtask);
|
}
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
}
|
|
}
|
}
|
|
}
|
}
|