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 _readZGYDownSignalso = 0;
|
/// <summary>
|
/// 辊压设备下料逻辑
|
/// </summary>
|
public static void Z_GYSB_DownTask()
|
{
|
if (Interlocked.Exchange(ref _readZGYDownSignalso, 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);
|
//List<string> GYSBS = new List<string> { "正极2号辊压机" };
|
List<string> GYSBS = new List<string> { "正极1号辊压机", "正极2号辊压机", "正极3号辊压机" };
|
PLCClient zagvplc = WCSService.Clients.Find(v => v.PLCName == "正极1号AGV");
|
foreach (var GYSB in GYSBS)
|
{
|
WriteLog.Info($"{GYSB}上料").Write($"{GYSB}开始,时间:" + DateTime.Now + " ----------", $"{GYSB}上料");
|
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == GYSB);
|
if (plc==null) { continue; }
|
var task = agvRepository.FindFirst(f => f.agv_fromaddress == plc.PLCDownLoc);
|
if (task == null)
|
{
|
//获取下料请求
|
string isWork = plc.ReadValue(ConveyorLineInfoDBName.R_GYSB_DOWNrequest.ToString(), plc.PLCDescroption).ToString();
|
//获取工单号
|
string batchNo = plc.ReadValue(ConveyorLineInfoDBName.R_GYSB_DOWNbatchNo.ToString(), plc.PLCDescroption).ToString();
|
GetEquipmentInfo(plc.PLCDownLoc, isWork, batchNo, "", "");
|
WriteLog.Info($"{GYSB}下料").Write($"isWork:{isWork},batchNo:{batchNo},时间:" + DateTime.Now + " ----------", $"{GYSB}下料");
|
if (bool.Parse(isWork))
|
{
|
MESback material = MESAPIInvoke.EquipUnloading(plc.PLCDownLoc, batchNo);
|
WriteLog.Info($"{GYSB}下料").Write($"MES返回数据:{JsonConvert.SerializeObject(material)},时间:" + DateTime.Now + "", $"{GYSB}下料");
|
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, "", ismaterial);
|
if (ismaterial == "2")
|
continue;
|
var location = locRepository.FindFirst(v => v.upper_code == route.route_end);
|
if ( location.location_state == LocationStateEnum.LocationState_Empty.ToString())
|
{
|
//条件全部通过,生成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("Z_GYSB_DownTask").Write("Z_GYSB_DownTask" + agvtask.agv_tasknum + DateTime.Now, "Z_GYSB_DownTask");
|
break;
|
}
|
}
|
}
|
}
|
}
|
WriteLog.Info($"{GYSB}下料").Write($"{GYSB}结束,时间:" + DateTime.Now + $" ----------{Environment.NewLine}", $"{GYSB}下料");
|
}
|
}
|
catch (Exception ex)
|
{
|
WriteLog.Info("Z_GYSB_DownTask").Write("Z_GYSB_DownTask" + ex.Message + DateTime.Now, "Z_GYSB_DownTask");
|
}
|
finally
|
{
|
Interlocked.Exchange(ref _readZGYDownSignalso, 0);
|
}
|
}
|
}
|
}
|
|
}
|