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; /// /// 任务下达 /// /// /// 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(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(); /// /// 安全请求 /// /// /// public OperateResult WcsCallback(WMSTask mst, int state, string forkliftNo = "") { //查询表数据是否发送过该信号 var chi = new SqlHelper().GetInstance(); var newDb = chi.CopyNew(); var tac = newDb.Queryable().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(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 SoList) { //查询表数据是否发送过该信号 WcsReturnEntityTwo entityTwo = new WcsReturnEntityTwo(); entityTwo.code = "1"; var chi = new SqlHelper().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(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().GetInstance(); var newDb = chi.CopyNew(); var interact = new { requestPk = S_TASK_NO,//任务号 stnNo = new List() { "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(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(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; } } /// /// WCS设备信息查询 /// /// public List WcsdataBoard() { List WcsCarry = new List(); try { var interact = new { requestPk = BLLCreator.Create().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>(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(result); if (data.code == "0") { return OperateResult.Succeed(); } else { LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data)); return OperateResult.Error(data.msg); } } catch (Exception ex) { throw; } } /// /// 取消任务 /// /// 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(result); if (data.code == "0") { return OperateResult.Succeed(); } else { LogHelper.Info("立库", "立库返回" + JsonConvert.SerializeObject(data)); return OperateResult.Error(data.msg); } } /// /// 输送线状态查询 /// /// 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(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 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; } } }