using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Diagnostics;
|
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;
|
using WIDESEA_Services.IRepositories;
|
using WIDESEA_Services.Repositories;
|
using WIDESEA_Services.Services;
|
using WIDESEA_WCS.WCSClient;
|
|
namespace WIDESEA_WCS.Jobs
|
{
|
public partial class EquipmentExecutor : SchedulerExecuteBase
|
{
|
private static int _readZFQDownSignalso = 0;
|
|
public static void Z_FQSB_DownTask()
|
{
|
if (Interlocked.Exchange(ref _readZFQDownSignalso, 1) == 0)
|
{
|
try
|
{
|
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);
|
Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context);
|
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
|
Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context);
|
IequipmentRepository equipmentRepository = new equipmentRepository(Context);
|
List<string> FQSBS = new List<string> { "正机1号分切机", "正机2号分切机5010" };
|
//List<string> FQSBS = new List<string> { "正机2号分切机5010" };
|
PLCClient zagvplc = WCSService.Clients.Find(v => v.PLCName == "正极1号AGV");
|
foreach (var FQSB in FQSBS)
|
{
|
WriteLog.Info($"{FQSB}下料").Write($"{FQSB}开始,时间:" + DateTime.Now + " ----------", $"{FQSB}下料");
|
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == FQSB);
|
if (plc==null)
|
{
|
continue;
|
}
|
var task = agvRepository.FindFirst(f => f.agv_toaddress == "" && f.agv_fromaddress.Substring(0, 2) == "ZJ");
|
if (task == null)
|
{
|
//读取下料请求信号
|
string isWork = plc.ReadValue(ConveyorLineInfoDBName.R_FQSB_DOWNrequest.ToString(), plc.PLCDescroption).ToString();
|
//获取工单号
|
string batchNo = plc.ReadValue(ConveyorLineInfoDBName.R_FQSB_DOWNbatchNo.ToString(), plc.PLCDescroption).ToString();
|
GetEquipmentInfo(plc.PLCDownLoc, isWork, batchNo, "", "");
|
WriteLog.Info($"{FQSB}下料").Write($"isWork:{isWork},batchNo:{batchNo},时间:" + DateTime.Now + " ----------", $"{FQSB}下料");
|
if (bool.Parse(isWork))
|
{
|
//调用MES接口获取下料信息
|
MESback material = MESAPIInvoke.EquipUnloading(plc.PLCDownLoc, batchNo);
|
WriteLog.Info($"{FQSB}下料").Write($"MES返回数据:{JsonConvert.SerializeObject(material)},时间:" + DateTime.Now + "", $"{FQSB}下料");
|
if (material.Code == 0)
|
{
|
//查询路由信息
|
var routes = routingRepository.Find(v => v.route_began == plc.PLCDownLoc).ToList();
|
foreach (var route in routes)
|
{
|
string ismaterial = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), route.route_end).ToString();
|
GetEquipmentInfo(plc.PLCDownLoc, isWork, batchNo, "", route.route_end + "的货位状态是" + ismaterial);
|
if (ismaterial == "1")
|
continue;
|
var location = locRepository.FindFirst(v => v.upper_code == route.route_end);
|
if (location.location_state != LocationStateEnum.LocationState_Wait.ToString())
|
continue;
|
float width = float.Parse(plc.ReadValue(ConveyorLineInfoDBName.width.ToString(), plc.PLCDescroption).ToString());
|
int Anumber = int.Parse(plc.ReadValue(ConveyorLineInfoDBName.Anumber.ToString(), plc.PLCDescroption).ToString());
|
int Bnumber = int.Parse(plc.ReadValue(ConveyorLineInfoDBName.Bnumber.ToString(), plc.PLCDescroption).ToString());
|
GetEquipmentInfo(plc.PLCDownLoc, isWork, batchNo, "宽度:" + width + ",A轴卷数:" + Anumber + ",B轴卷数:" + Bnumber, route.route_end + "的货位状态是" + ismaterial);
|
int Asum = Convert.ToInt32(width) * Anumber;
|
int Bsum = Convert.ToInt32(width) * Bnumber;
|
string taskId = "KH-" + tasknumber.GetTaskNumber(tasknumberRep);
|
if (Asum + Bsum > 750 && Bsum != 0)
|
{
|
//条件全部通过,生成AGV任务
|
dt_agvtask agvtask = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "B",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_began,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":1",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 1
|
};
|
agvRepository.Add(agvtask, true);
|
dt_agvtask agvtask2 = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_end,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":2,END",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 3
|
};
|
agvRepository.Add(agvtask2, true);
|
location.location_state = LocationStateEnum.LocationState_Lock.ToString();
|
locRepository.Update(location, true);
|
}
|
else if (Bsum == 0 && Asum != 0)
|
{
|
//条件全部通过,生成AGV任务
|
dt_agvtask agvtask = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "A",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_began,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":1",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 1
|
};
|
agvRepository.Add(agvtask, true);
|
dt_agvtask agvtask2 = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_end,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":2,END",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 3
|
};
|
agvRepository.Add(agvtask2, true);
|
location.location_state = LocationStateEnum.LocationState_Lock.ToString();
|
locRepository.Update(location, true);
|
}
|
else if (Asum + Bsum <= 750)
|
{
|
dt_agvtask agvtask = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "A",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_began,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":1",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 1
|
};
|
agvRepository.Add(agvtask, true);
|
dt_agvtask agvtask2 = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "B",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_began,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":2",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 1
|
};
|
agvRepository.Add(agvtask2, true);
|
dt_agvtask agvtask3 = new dt_agvtask
|
{
|
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
|
agv_barcode = "",
|
agv_code = "正极1号AGV",
|
agv_createtime = DateTime.Now,
|
agv_fromaddress = route.route_end,
|
agv_grade = 1,
|
agv_materielid = material.MaterialType,
|
agv_qty = 1,
|
agv_tasknum = taskId + ":3,END",
|
agv_taskstate = "Create",
|
agv_tasktype = "TaskType_Outbound",
|
agv_toaddress = "",
|
agv_userid = "WCS",
|
agv_worktype = 3
|
};
|
agvRepository.Add(agvtask3, true);
|
location.location_state = LocationStateEnum.LocationState_Lock.ToString();
|
locRepository.Update(location, true);
|
}
|
break;
|
}
|
}
|
else
|
{
|
WriteLog.Info("Z_FQSB_DownTask").Write("调用MES接口EquipUnloading失败" + material.Message, "Z_FQSB_DownTask");
|
}
|
}
|
}
|
WriteLog.Info($"{FQSB}下料").Write($"{FQSB}结束,时间:" + DateTime.Now + $" ----------{Environment.NewLine}", $"{FQSB}下料");
|
}
|
}
|
catch (Exception ex)
|
{
|
WriteLog.Info("Z_FQSB_DownTask").Write("Z_FQSB_DownTask" + ex.Message, "Z_FQSB_DownTask");
|
}
|
finally
|
{
|
Interlocked.Exchange(ref _readZFQDownSignalso, 0);
|
}
|
}
|
}
|
}
|
}
|