using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
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 _readFTBDOWNSignalso = 0;
///
/// 涂布机下料工作逻辑
///
///
public static void F_TBSB_DownTask()
{
if (Interlocked.Exchange(ref _readFTBDOWNSignalso, 1) == 0)
{
try
{
VOLContext Context = new VOLContext();
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 TBSB = new List { "负极1号涂布机", "负极2号涂布机", "负极3号涂布机" };
PLCClient zagvplc = WCSService.Clients.Find(v => v.PLCName == "负极1号AGV");
foreach (var item in TBSB)
{
WriteLog.Info($"{TBSB}下料").Write($"{TBSB}开始,时间:" + DateTime.Now + " ----------", $"{TBSB}下料");
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == item);
if (plc == null)
continue;
var task = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDownLoc);
if (task == null)
{
//获取下料请求
string isWork = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_DOWNrequest.ToString(), plc.PLCDescroption).ToString();
//获取工单号
string batchNo = plc.ReadValue(ConveyorLineInfoDBName.R_TBSB_DOWNbatchNo.ToString(), plc.PLCDescroption).ToString();
GetEquipmentInfo(plc.PLCDownLoc, isWork, batchNo, "", "");
if (bool.Parse(isWork))
{
WriteLog.Info($"{TBSB}下料").Write($"{TBSB}叫料,时间:" + DateTime.Now + " ----------", $"{TBSB}下料");
//调用MES接口获取下料信息
MESback material = MESAPIInvoke.EquipUnloading(plc.PLCDownLoc, batchNo);
WriteLog.Info($"{TBSB}下料").Write($"{TBSB}叫料,MES接口返回数据{JsonConvert.SerializeObject(material)}时间:" + DateTime.Now + " ----------", $"{TBSB}下料");
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 == "2")
continue;
var location = locRepository.FindFirst(v => v.upper_code == route.route_end);
if (location.location_state != LocationStateEnum.LocationState_Empty.ToString())
continue;
//条件全部通过,生成AGV任务
dt_agvtask agvtask = new dt_agvtask
{
agv_materbarcode = "daiding",//下料任务预先没有条码,PDA在缓存架绑定时接收新的条码
agv_barcode = "",
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 = "KH-" + tasknumber.GetTaskNumber(tasknumberRep),
agv_taskstate = "Create",
agv_tasktype = "TaskType_Outbound",
agv_toaddress = route.route_end,
agv_userid = "WCS",
agv_worktype = 1
};
location.location_state = LocationStateEnum.LocationState_Lock.ToString();
locRepository.Update(location, true);
agvRepository.Add(agvtask, true);
WriteLog.Info("F_TBSB_DownTask").Write("F_TBSB_DownTask" + agvtask.agv_tasknum + DateTime.Now, "F_TBSB_DownTask");
break;
}
}
else
{
WriteLog.Info("F_TBSB_DownTask").Write("调用MES接口EquipUnloading失败" + material.Message, "F_TBSB_DownTask");
}
}
}
WriteLog.Info($"{TBSB}下料").Write($"{TBSB}结束,时间:" + DateTime.Now + $" ----------{Environment.NewLine}", $"{TBSB}下料");
}
}
catch (Exception ex)
{
WriteLog.Info("F_TBSB_DownTask").Write("F_TBSB_DownTask" + ex.Message, "F_TBSB_DownTask");
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
string str = "";
foreach (var item in stackFrames)
{
str += "方法名:" + item.GetMethod().Name + ",行号:" + item.GetFileLineNumber() + ",文件名:" + item.GetFileName() + Environment.NewLine;
}
WIDESEA_Common.Tools.WriteLog.GetLog("负极涂布设备下料").Write($"错误信息:{ex.Message},{str}", "负极涂布设备下料");
throw;
}
finally
{
Interlocked.Exchange(ref _readFTBDOWNSignalso, 0);
}
}
}
}
}