using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq;
using System.Threading.Tasks;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_WCS;
namespace WIDESEA_WCSServer.Controllers.ToWMS
{
[Route("api/ToWMS")]
[ApiController]
public class ToWMSController : ControllerBase
{
///
/// 添加agv任务
///
///
///
//[HttpPost, Route("AddAgvTask"), AllowAnonymous]
//public WebResponseContent AddAgvTask([FromBody] dt_agvtask task)
//{
// return new WCSHelpServer().AddAgvTask(task);
//}
///
/// WMS修改设备状态调用接口同步WCS设备状态并暂停调度
///
///
///
[HttpPost, HttpGet, Route("UpdateEquipState"), AllowAnonymous]
public async Task UpdateEquipState([FromBody] SaveModel saveModel)
{
return await Task.Run(() =>
{
return WCSService.PauseOrResumeJob(saveModel);
});
}
[HttpPost, Route("WriteOrReadPLCData"), AllowAnonymous]
public object WriteOrReadPLCData([FromBody] PLCInfo info)
{
try
{
var client = WIDESEA_WCS.WCSService.Clients?.FirstOrDefault(t => t.PLCName == info.plcName);
if (client == null)
{
throw new Exception("plcName不存在或未连接!");
}
if (info.type == "r")
{
if (client.PLCType == "SiemensPLC")
{
if (info.dataType == "int")
{
info.value = client.SiemensPLCClient.Read(info.address);
}
else if (info.dataType == "string")
{
info.value = client.SiemensPLCClient.Read(info.address, info.len);
}
else if (info.dataType == "bool")
{
info.value = client.SiemensPLCClient.Read(info.address);
}
else if (info.dataType == "byte[]")
{
info.value = string.Join(',', client.SiemensPLCClient.Read(info.address, info.len).ToArray());
}
else
{
throw new Exception($"数据类型{info.dataType},未定义");
}
}
else if (client.PLCType == "OmronPLC")
{
if (info.dataType == "int")
{
info.value = client.SiemensPLCClient.Read(info.address);
}
else if (info.dataType == "string")
{
info.value = client.SiemensPLCClient.Read(info.address, info.len);
}
else if (info.dataType == "bool")
{
info.value = client.SiemensPLCClient.Read(info.address);
}
else if (info.dataType == "byte[]")
{
info.value = string.Join(',', client.SiemensPLCClient.Read(info.address, info.len).ToArray());
}
else
{
throw new Exception($"操作类型{info.dataType},未定义");
}
}
else
{
throw new Exception($"PLC类型{client.PLCType},未定义");
}
}
else if (info.type == "w")
{
throw new Exception("为安全起见,不能进行写操作!");
}
else
{
throw new Exception("操作类型不存在!");
}
}
catch (Exception ex)
{
return info.Error(ex.Message);
}
return info.Success();
}
///
/// 获取AGV状态
///
///
///
[HttpPost, Route("GetAgvStatusData"), AllowAnonymous]
public WebResponseContent GetAgvStatusData([FromBody] SaveModel model)
{
return AGVData.GetAgvStatusData(model);
}
private static object gvTaskInfozz = new object();
///
/// 树形任务完成量组装
///
///
///
[HttpPost, Route("GetAgvTaskInfozz"), AllowAnonymous]
public WebResponseContent GetAgvTaskInfozz([FromBody] SaveModel model)
{
lock (gvTaskInfozz)
{
return AGVData.GetAgvTaskInfozz(model);
}
}
private static object gvTaskInfozj = new object();
///
/// 树形任务完成量组装
///
///
///
[HttpPost, Route("GetAgvTaskInfozj"), AllowAnonymous]
public WebResponseContent GetAgvTaskInfozj([FromBody] SaveModel model)
{
lock (gvTaskInfozj)
{
return AGVData.GetAgvTaskInfozj(model);
}
}
private static object gvTaskInfofj = new object();
///
/// 树形任务完成量组装
///
///
///
[HttpPost, Route("GetAgvTaskInfofj"), AllowAnonymous]
public WebResponseContent GetAgvTaskInfofj([FromBody] SaveModel model)
{
lock (gvTaskInfofj)
{
return AGVData.GetAgvTaskInfofj(model);
}
}
///
/// 获取空货位或者有货货位
///
///
///
[HttpPost, Route("GetLocationEmptyOrStored"), AllowAnonymous]
public WebResponseContent GetLocationEmptyOrStored([FromBody] SaveModel model)
{
return AGVData.GetLocationEmptyOrStored(model);
}
///
/// 获取区域货位数据
///
///
///
[HttpPost, Route("GetLocationData"), AllowAnonymous]
public WebResponseContent GetLocationData([FromBody] SaveModel model)
{
return AGVData.GetLocationData(model);
}
///
/// 获取AGV任务
///
///
///
[HttpPost, Route("GetAGVTaskData"), AllowAnonymous]
public WebResponseContent GetAGVTaskData([FromBody] SaveModel model)
{
return AGVData.GetAGVTaskData(model);
}
///
/// 获取提升机信息
///
///
///
[HttpPost, Route("GetTSJInfo"), AllowAnonymous]
public WebResponseContent GetTSJInfo([FromBody] SaveModel model)
{
return AGVData.GetTSJInfo(model);
}
///
/// 获取多个提升机信息
///
///
///
//[HttpPost, Route("GetTSJInfos"), AllowAnonymous]
//public WebResponseContent GetTSJInfos([FromBody] SaveModel model)
//{
// return AGVData.GetTSJInfos(model);
//}
}
public class PLCInfo
{
///
/// 读取r,写入w
///
public string type { get; set; } = "r";
///
/// 指令
///
public string address { get; set; }
public int len { get; set; }
///
/// PLC名称
///
public string plcName { get; set; }
public string dataType { get; set; }
///
/// 读取或写入的值
///
public object value { get; set; }
///
/// 操作结果,和错误信息
///
public string msg { get; set; }
public PLCInfo Error(string msg)
{
this.msg = "操作失败," + msg;
return this;
}
public PLCInfo Success(string msg = null)
{
if (msg != null)
this.msg = msg;
return this;
}
}
}