using HH.WCS.Hexafluo;
|
using HH.WCS.Hexafluo.util;
|
using HH.WCS.Hexafluo.wms;
|
using HH.WCS.SJML.Bll;
|
using HH.WCS.SJML.Comm;
|
using HH.WCS.SJML.Dto;
|
using HH.WCS.ZCQTJ.Entitys;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace HH.WCS.SJML.dispatch
|
{
|
public class WcsTask
|
{
|
private static readonly HttpHelper apiHelper = new HttpHelper();
|
private static readonly string baseUrl = Settings.WcsHelperList;
|
|
/// <summary>
|
/// 任务下达
|
/// </summary>
|
/// <param name="mst"></param>
|
/// <returns></returns>
|
public OperateResult WcsTaskEntity(WMSTask mst, CntrItemRel Item = null)
|
{
|
string Type = "";
|
string TrayType = "";
|
string Traycode = mst.S_CNTRS;
|
string isFull = "";
|
if (mst.S_TYPE == "入库")
|
{
|
Type = "1";
|
|
}
|
else if (mst.S_TYPE == "出库")
|
{
|
Type = "2";
|
}
|
else if (mst.S_TYPE == "移库")
|
{
|
Type = "3";
|
}
|
if (string.IsNullOrEmpty(Item?.S_ITEM_CODE))
|
{
|
isFull = "0";
|
}
|
else
|
{
|
isFull = "1";
|
}
|
if (mst.S_CNTRS.Contains("KJZ"))
|
{
|
TrayType = "KJZ";
|
isFull = "2";
|
}
|
|
|
// return OperateResult.Succeed();
|
var interact = new
|
{
|
requestPk = mst.S_TASK_NO,//任务号
|
contNo = Traycode,//托盘号
|
contType = TrayType,//托盘类型
|
trkType = Type,//任务类型
|
trkPrty = mst.N_PRIORITY,//任务优先级
|
frmPos = mst.S_START_LOC,//起始位置
|
toPos = mst.S_END_LOC,//目的地
|
isFull = isFull,//空托 满托 空架子
|
groupNo = Item?.S_ITEM_NAME,//搬送组号
|
clientCode = "WMS",//操作人
|
operationTime = DateTime.Now.ToString()//操作时间
|
};
|
LogHelper.Info("立库", "给立库下达任务 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", " 给立库下达任务 地址为:" + baseUrl + "/wcs-admin/api/receive");
|
//return OperateResult.Succeed();
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/receive", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达任务 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
throw new Exception("未得到任何来自于立库的反馈信息");
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntity>(result);
|
|
if (data.code == "0")
|
{
|
return OperateResult.Succeed();
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回:" + JsonConvert.SerializeObject(data));
|
if (data.msg != null && data.msg.Contains("已存在执行托盘"))
|
{
|
return OperateResult.Succeed();
|
}
|
return OperateResult.Error(data.msg);
|
}
|
}
|
private static object locko = new object();
|
/// <summary>
|
/// 安全请求
|
/// </summary>
|
/// <param name="mst"></param>
|
/// <returns></returns>
|
public OperateResult WcsCallback(WMSTask mst, int state, string forkliftNo = "")
|
{
|
//查询表数据是否发送过该信号
|
var chi = new SqlHelper<object>().GetInstance();
|
var newDb = chi.CopyNew();
|
var tac = newDb.Queryable<TN_NdcSignEntitys>().Where(a => a.TaskNo == mst.S_TASK_NO && a.Sign == state).ToList();
|
if (tac.Count() > 0)
|
{
|
LogHelper.Info("立库", "查询到安全请求信号记录表已经存在数据,此次信号不下达给立库");
|
return OperateResult.Succeed();
|
}
|
string Type = "";
|
string bit = "";
|
var Meshod = "";
|
if (mst.S_TYPE == "入库")
|
{
|
if (!string.IsNullOrEmpty(mst.mark))
|
{
|
Type = "1";
|
bit = mst.S_END_LOC;
|
if (state == 1101)
|
{
|
Meshod = "AgvRequest";
|
bit = mst.S_START_LOC;
|
}
|
else if (state == 7)
|
{
|
Type = "3";
|
Meshod = "AgvRequestCancel";
|
bit = mst.S_END_LOC;
|
}
|
else if (state == 8)
|
{
|
Type = "3";
|
Meshod = "AgvRequestCancel";
|
bit = mst.S_Jb_Bit;
|
}
|
else if (state == 1102)
|
{
|
Meshod = "Complete";
|
bit = mst.S_START_LOC;
|
}
|
else
|
{
|
Meshod = "Complete";
|
}
|
}
|
else
|
{
|
Type = "2";
|
bit = mst.S_END_LOC;
|
if (state == 1103)
|
{
|
Meshod = "AgvRequest";
|
}
|
else if (state == 7)
|
{
|
Type = "3";
|
Meshod = "AgvRequestCancel";
|
bit = mst.S_END_LOC;
|
}
|
else
|
{
|
Meshod = "Complete";
|
}
|
}
|
}
|
else if (mst.S_TYPE == "出库")
|
{
|
Type = "1";
|
bit = mst.S_START_LOC;
|
if (state == 1101)
|
{
|
Meshod = "AgvRequest";
|
}
|
else if (state == 7)
|
{
|
Meshod = "AgvRequestCancel";
|
}
|
else
|
{
|
Meshod = "Complete";
|
}
|
}
|
else
|
{
|
return OperateResult.Error("除了出入库 其余不需要安全请求");
|
}
|
// return OperateResult.Succeed();
|
var interact = new
|
{
|
requestPk = mst.S_TASK_NO,//任务号
|
trkType = Type,//任务类型
|
method = Meshod,//API名称
|
stnNo = bit,//目的地站台号
|
carNo = forkliftNo,// 车号
|
clientCode = "",//操作人
|
operationTime = DateTime.Now.ToString()//操作时间
|
};
|
|
//return OperateResult.Succeed();
|
try
|
{
|
LogHelper.Info("立库", "给立库下达安全请求 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达安全请求 地址为:" + baseUrl + "/wcs-admin/api/agvCallback");
|
lock (locko)
|
{
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/agvCallback", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result);
|
if ((state == 1102 || state == 1104) && string.IsNullOrEmpty(result))
|
{
|
try
|
{
|
TN_AsyncEntitys As = new TN_AsyncEntitys();
|
As.JsonValue = JsonConvert.SerializeObject(interact);
|
As.S_IsCall = "Y";
|
As.S_PortID = "1";
|
As.S_Note = "返回参数为空";
|
newDb.BeginTran();
|
var B = newDb.Insertable(As).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
}
|
newDb.CommitTran();
|
LogHelper.Info("立库", $"添加异步接口缓存影响行数:{B}");
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Info("立库", $"异步接口缓存报错:{ex.Message}");
|
newDb.RollbackTran();
|
}
|
}
|
if (string.IsNullOrEmpty(result))
|
{
|
return OperateResult.Error("立库未返回参数");
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntity>(result);
|
|
if (data.code == "0")
|
{
|
//通知立库成功后忘表中插入数据
|
TN_NdcSignEntitys Sign = new TN_NdcSignEntitys();
|
Sign.TaskNo = mst.S_TASK_NO;
|
Sign.Sign = state;
|
newDb.BeginTran();
|
var B = newDb.Insertable(Sign).ExecuteCommand();
|
if (B == 0)
|
{
|
newDb.RollbackTran();
|
}
|
newDb.CommitTran();
|
LogHelper.Info("立库", "NDC--是否成功信号记录表:" + JsonConvert.SerializeObject(Sign));
|
return OperateResult.Succeed();
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data));
|
return OperateResult.Error(data.msg);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
if ((state == 1102 || state == 1104))
|
{
|
|
}
|
LogHelper.Info("立库", "安全请求 调立库接口异常 " + JsonConvert.SerializeObject(ex.Message));
|
return OperateResult.Error("调接口异常");
|
}
|
|
}
|
|
|
|
public WcsReturnEntityTwo WcsPositionAvailable(string S_TASK_NO, List<string> SoList)
|
{
|
//查询表数据是否发送过该信号
|
WcsReturnEntityTwo entityTwo = new WcsReturnEntityTwo();
|
entityTwo.code = "1";
|
var chi = new SqlHelper<object>().GetInstance();
|
var newDb = chi.CopyNew();
|
var interact = new
|
{
|
requestPk = S_TASK_NO,//任务号
|
stnNo = SoList,//接驳位
|
operationTime = DateTime.Now.ToString()//操作时间
|
};
|
|
//return OperateResult.Succeed();
|
try
|
{
|
LogHelper.Info("立库", "查询立库接驳位(集合)接口 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位(集合)接口 地址为:" + baseUrl + "/wcs-admin/api/positionAvailable");
|
lock (locko)
|
{
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/positionAvailable", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位(集合) 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
return entityTwo;
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntityTwo>(result);
|
return data;
|
}
|
}
|
catch (Exception ex)
|
{
|
entityTwo.msg = ex.Message;
|
return entityTwo;
|
}
|
|
}
|
|
|
public WcsReturnEntityTwo WcsPositionAvailableCk(string S_TASK_NO)
|
{
|
//查询表数据是否发送过该信号
|
WcsReturnEntityTwo entityTwo = new WcsReturnEntityTwo();
|
entityTwo.code = "1";
|
var chi = new SqlHelper<object>().GetInstance();
|
var newDb = chi.CopyNew();
|
var interact = new
|
{
|
requestPk = S_TASK_NO,//任务号
|
stnNo = new List<string>() { "TMCKJBW-01", "TMCKJBW-02", "TMCKJBW-03", "TMCKJBW-04", "TMCKJBW-05", "TMCKJBW-06", "TMCKHCW-01", "TMCKHCW-02" },//接驳位
|
operationTime = DateTime.Now.ToString()//操作时间
|
};
|
|
//return OperateResult.Succeed();
|
try
|
{
|
LogHelper.Info("立库", "查询立库接驳位(集合)接口 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位(集合)接口 地址为:" + baseUrl + "/wcs-admin/api/positionAvailable");
|
lock (locko)
|
{
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/positionAvailable", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位(集合) 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
return entityTwo;
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntityTwo>(result);
|
return data;
|
}
|
}
|
catch (Exception ex)
|
{
|
entityTwo.msg = ex.Message;
|
return entityTwo;
|
}
|
|
}
|
|
public WcsReturnEntityWtp WcsgetContNo(WMSTask task)
|
{
|
WcsReturnEntityWtp returnEntity = new WcsReturnEntityWtp();
|
returnEntity.code = "1";
|
try
|
{
|
var interact = new
|
{
|
requestPk = task.S_TASK_NO,
|
stnNo = task.S_END_LOC,
|
reqTime = DateTime.Now.ToString()
|
};
|
LogHelper.Info("立库", "获取托盘码 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "获取托盘码 地址为:" + baseUrl + "/wcs-admin/api/getContNo");
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/getContNo", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "获取托盘码 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
throw new Exception("未得到任何来自于立库的反馈信息");
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntityWtp>(result);
|
|
if (data.code == "0")
|
{
|
return data;
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回:" + JsonConvert.SerializeObject(data));
|
return data;
|
}
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Info("立库", " 获取托盘码 报错:" + JsonConvert.SerializeObject(ex));
|
return returnEntity;
|
}
|
}
|
|
|
/// <summary>
|
/// WCS设备信息查询
|
/// </summary>
|
/// <returns></returns>
|
public List<WcsCarryMsg> WcsdataBoard()
|
{
|
List<WcsCarryMsg> WcsCarry = new List<WcsCarryMsg>();
|
try
|
{
|
var interact = new
|
{
|
requestPk = BLLCreator.Create<IdWorker>().nextId("CX"),
|
reqTime = DateTime.Now
|
};
|
LogHelper.Info("立库", "查询立库设备信息 参数为:" + JsonConvert.SerializeObject(interact));
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/dataBoard", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
return WcsCarry;
|
}
|
var data = JsonConvert.DeserializeObject<List<WcsCarryMsg>>(result);
|
return data;
|
|
}
|
catch (Exception ex)
|
{
|
LogHelper.Info("立库", "查询立库设备信息 报错:" + ex.Message);
|
return WcsCarry;
|
}
|
}
|
public OperateResult WcsCallbackAnyc(string JsonValue)
|
{
|
try
|
{
|
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/agvCallback", JsonValue);
|
LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result);
|
if (string.IsNullOrEmpty(result))
|
{
|
return OperateResult.Error("立库未返回参数");
|
}
|
var data = JsonConvert.DeserializeObject<WcsReturnEntity>(result);
|
|
if (data.code == "0")
|
{
|
return OperateResult.Succeed();
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data));
|
return OperateResult.Error(data.msg);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
throw;
|
}
|
}
|
|
/// <summary>
|
/// 取消任务
|
/// </summary>
|
/// <returns></returns>
|
public OperateResult WcsCancellTask(WMSTask mst)
|
{
|
var interact = new
|
{
|
requestPk = mst.S_TASK_NO,
|
contNo = mst.S_CNTRS,//托盘号
|
clientCode = "",
|
reqTime = DateTime.Now.ToString()//操作时间
|
};
|
LogHelper.Info("立库", "给立库下达取消 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达取消 地址为:" + baseUrl + "/wcs-admin/api/cancel");
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/cancel", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "给立库下达取消 立库返回参数为:" + result);
|
var data = JsonConvert.DeserializeObject<WcsReturnEntity>(result);
|
if (data.code == "0")
|
{
|
return OperateResult.Succeed();
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data));
|
return OperateResult.Error(data.msg);
|
}
|
}
|
|
|
/// <summary>
|
/// 输送线状态查询
|
/// </summary>
|
/// <returns></returns>
|
public OperateResult WcsCvstate(AloneWcsTaskUnbingEntitys aloneWcsTask)
|
{
|
var interact = new
|
{
|
requestPk = aloneWcsTask.S_TASK_NO,//请求编号
|
clientCode = "WMS",// 操作人 如WMS/MES等
|
stnNo = aloneWcsTask.JbLocation,
|
reqTime = DateTime.Now.ToString()//操作时间
|
};
|
LogHelper.Info("立库", "查询立库接驳位状态 参数为:" + JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位状态 地址为:" + baseUrl + "/wcs-admin/api/CV-state");
|
var result = apiHelper.Post(baseUrl + "/wcs-admin/api/CV-state", JsonConvert.SerializeObject(interact));
|
LogHelper.Info("立库", "查询立库接驳位状态 立库返回参数为:" + result);
|
var data = JsonConvert.DeserializeObject<WcsReturnEntity>(result);
|
if (data.status == "1")
|
{
|
return OperateResult.Succeed();
|
}
|
else
|
{
|
LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data));
|
return OperateResult.Error(data.msg);
|
}
|
}
|
}
|
public class WcsReturnEntity
|
{
|
public string code { get; set; }
|
public string msg { get; set; }
|
public string requestPk { get; set; }
|
public string status { get; set; }
|
|
}
|
public class WcsReturnEntityTwo
|
{
|
public string code { get; set; }
|
public string msg { get; set; }
|
public string requestPk { get; set; }
|
public List<string> available { get; set; }
|
|
}
|
|
|
public class WcsReturnEntityWtp
|
{
|
public string code { get; set; }
|
public string msg { get; set; }
|
public string contNo { get; set; }
|
public string contType { get; set; }
|
public string requestPk { get; set; }
|
}
|
}
|