| | |
| | | using System.Diagnostics.Eventing.Reader; |
| | | using System.IdentityModel.Protocols.WSTrust; |
| | | using System.Linq; |
| | | using System.Net.NetworkInformation; |
| | | using System.Security.Cryptography; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | |
| | | else |
| | | { |
| | | LogHelper.Info($"任务{mst.S_CODE} 托盘为空 ,只解锁货位"); |
| | | LocationHelper.UnlockLoc(mst.S_START_LOC); |
| | | LocationHelper.UnlockLocDeleteCntrs(mst.S_START_LOC); |
| | | } |
| | | } |
| | | else |
| | |
| | | { |
| | | //根据客户现场要求,如果取货完成任务失败人工拉到终点,我们就当卸货完成处理;如果是人工拉走到其它区域,我们就解锁终点,删除托盘。 |
| | | //终点绑定 |
| | | //物料到位通知 |
| | | if (mst.S_TYPE == "出平库" || mst.S_TYPE == "余料返回") |
| | | { |
| | | string urlitem = Settings.tableUrls.Find(a => a.id == 5).url; |
| | | TaskProcess.MESIteminfoback(mst, urlitem); |
| | | } |
| | | if ((mst.S_NOTE == "出库" || mst.S_NOTE == "异常库区入库") && !string.IsNullOrEmpty(mst.S_MES_NO)) |
| | | { |
| | | string urlitem = Settings.tableUrls.Find(a => a.id == 5).url; |
| | | TaskProcess.MESIteminfoback(mst, urlitem); |
| | | } |
| | | CacheBitUpdate(mst, false); |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | | } |
| | | else |
| | | { |
| | | |
| | | //起点终点解锁 |
| | | LocationHelper.UnLockLoc(mst.S_START_LOC); |
| | | LocationHelper.UnLockLoc(mst.S_END_LOC); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="model">请求参数</param> |
| | | /// <param name="url">地址</param> |
| | | /// <param name="TN_Task">任务</param> |
| | | internal static void OperateReq(AgvTaskState model, string url, WCSTask TN_Task) |
| | | internal static void OperateReq(AgvTaskState model, string url, WCSTask TN_Task, string name) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state)) |
| | | if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name)) |
| | | { |
| | | // NDCHelper.ChangeParam(TN_Task.S_CODE.Trim(), 1101, 18); |
| | | NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1"); |
| | |
| | | } |
| | | else |
| | | { |
| | | if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state)) |
| | | if (OperateReqByPost(url, TN_Task.S_EQ_NO, TN_Task.S_CODE, loc, type, model.state, name)) |
| | | { |
| | | NDCApi.ChangeOrderParam(TN_Task.S_CODE.Trim(), 6, "1"); |
| | | } |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | LogHelper.Info($"OperateReq Error ==》{ex.ToString()}"); |
| | | } |
| | | |
| | |
| | | /// <param name="type"></param> |
| | | /// <param name="taskStatus"></param> |
| | | /// <returns></returns> |
| | | internal static bool OperateReqByPost(string url, string tasknum, string ordernum, string station, int type, int taskStatus) |
| | | internal static bool OperateReqByPost(string url, string tasknum, string ordernum, string station, int type, int taskStatus, string name) |
| | | { |
| | | bool permit = false; |
| | | try |
| | |
| | | LogHelper.Info($"安全请求失败=>msg:{result.msg}"); |
| | | ApiHelper.AddErrorInfo("安全交互失败", result.msg, "", tasknum); |
| | | } |
| | | ApiHelper.AddInfo(name, "安全请求", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | return permit; |
| | | } |
| | | catch (Exception) |
| | |
| | | LogHelper.Info($"安全请求失败=>msg:{result.err_msg}"); |
| | | ApiHelper.AddErrorInfo("安全交互失败", result.err_msg, "", no); |
| | | } |
| | | ApiHelper.AddInfo("YCL", "安全请求", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | return permit; |
| | | } |
| | | catch (Exception) |
| | |
| | | if (taskLimit != null) |
| | | { |
| | | Console.WriteLine($"任务:{mst.S_CODE},起点仓库:{mst.S_START_WH}已经禁用推送"); |
| | | return result; |
| | | return false; |
| | | } |
| | | |
| | | var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == mst.S_EQ_NO).ToList(); |
| | |
| | | { |
| | | var mst2 = mstbyEqno.Where(a => a.S_TYPE == "电梯1").First(); |
| | | if (mst2 == null) |
| | | { |
| | | { |
| | | return result; |
| | | } |
| | | else |
| | |
| | | internal static bool SendTask(WCSTask mst) |
| | | { |
| | | |
| | | |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var result = false; |
| | | var start = "0"; var end = "0"; |
| | | var taskType = mst.S_TYPE.Trim(); |
| | | var list = db.Queryable<Location>().ToList().Count; |
| | | |
| | | // if (mst.N_B_STATE == 0) { |
| | | if (mst.N_SCHEDULE_TYPE == 1) |
| | | { |
| | | LogHelper.Info($"任务推送数据:{JsonConvert.SerializeObject(mst)}"); |
| | | if (string.IsNullOrEmpty(mst.S_START_LOC) || string.IsNullOrEmpty(mst.S_END_LOC)) |
| | | { |
| | | LogHelper.Info($"任务{mst.S_CODE},起点终点有空参数,不推送任务"); |
| | | } |
| | | |
| | | |
| | | start = LocationHelper.GetAgvSite(mst.S_START_LOC); |
| | | end = LocationHelper.GetAgvSite(mst.S_END_LOC); |
| | | //if (mst.N_START_LAYER > 1) |
| | |
| | | // } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托等待任务 超时5分组直接推送 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <returns></returns> |
| | | internal static void WaitSend(WCSTask mst) |
| | | { |
| | | // 计算与当前时间的差值 |
| | | TimeSpan timeDifference = DateTime.Now - mst.T_CREATE; |
| | | if (timeDifference.TotalMinutes > 5) |
| | | { |
| | | var db = new SqlHelper<WCSTask>().GetInstance(); |
| | | mst.S_B_STATE = "等待"; |
| | | db.Updateable(mst).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand(); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 任务状态回报 |
| | | /// </summary> |
| | |
| | | /// <param name="orderNum">单号</param> |
| | | /// <param name="taskStatus">任务状态</param> |
| | | /// <param name="url">上报接口</param> |
| | | public static void Reportback(string taskNum, string orderNum, int taskStatus, string url) |
| | | public static void Reportback(string taskNum, string orderNum, int taskStatus, string url, string ly) |
| | | { |
| | | LogHelper.Info($"------------开始任务回报-----------"); |
| | | try |
| | |
| | | { |
| | | LogHelper.Info($"任务回报失败=>msg:{result.msg}"); |
| | | } |
| | | ApiHelper.AddInfo(ly, "任务状态回报", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | LogHelper.Info($"任务回报失败="); |
| | | } |
| | | ApiHelper.AddInfo("Wms", "任务状态回报", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | LogHelper.Info($"任务回报失败=>msg:{result.err_msg}"); |
| | | } |
| | | ApiHelper.AddInfo("YCL", "任务状态回报", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | //获取时间戳 |
| | | var time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); |
| | | statusarrive.RequestId = "杭叉AGV" + time; |
| | | |
| | | string info = ""; |
| | | switch (status) |
| | | { |
| | | case 1: |
| | | info = "agv已接受原料库下发的任务"; |
| | | break; |
| | | case 4: |
| | | info = "agv已取货完成"; |
| | | break; |
| | | case 6: |
| | | info = "agv已卸货到指定位置"; |
| | | break; |
| | | case 2: |
| | | info = "agv已完成送料任务"; |
| | | break; |
| | | } |
| | | string message = "1"; |
| | | if (status == 7) { message = "agv任务已取消"; } |
| | | int flag = 0; |
| | | if (mst.S_NOTE == "粉料") |
| | | { |
| | |
| | | statusArrive.Status = status.ToString(); |
| | | statusArrive.Rfid = mst.S_CNTR_CODE; |
| | | statusArrive.Flag = flag; |
| | | statusArrive.Info = info; |
| | | statusArrive.Message = message; |
| | | |
| | | //statusArrives.Add(statusArrive); |
| | | statusarrive.data = statusArrive; |
| | |
| | | { |
| | | LogHelper.Info($"任务回报失败=>msg:{result.imsg}"); |
| | | } |
| | | ApiHelper.AddInfo("Mes", "任务状态回报", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | //粉料回库不需要回报 |
| | | if (cntritem != null && mst.S_TYPE == "余料返回" && cntritem.S_ITEM_CODE.StartsWith("4X")) |
| | | { |
| | | LogHelper.Info("粉料回库不需要到位发送物料到位"); |
| | | return; |
| | | } |
| | | //获取时间戳 |
| | |
| | | |
| | | if (cntritem != null) |
| | | { |
| | | string curBagNum = null; |
| | | string weightBag = null; |
| | | string initBagNum = null; |
| | | if ((int)cntritem.F_QTY > 0) |
| | | { |
| | | curBagNum = cntritem.F_QTY.ToString(); |
| | | } |
| | | if (!string.IsNullOrEmpty(cntritem.F_WEIGHT1) && int.Parse(cntritem.F_WEIGHT1) > 0) |
| | | { |
| | | weightBag = cntritem.F_WEIGHT1; |
| | | } |
| | | if (!string.IsNullOrEmpty(cntritem.F_QTY1) && int.Parse(cntritem.F_QTY1) > 0) |
| | | { |
| | | initBagNum = cntritem.F_QTY1; |
| | | } |
| | | list.Add(new MesItemBackInfoModel() |
| | | { |
| | | |
| | | LotNumber = cntritem.S_BATCH_NO, |
| | | PartNumber = cntritem.S_ITEM_CODE, |
| | | Subpool = cntritem.Subpool, |
| | |
| | | Rfid = cntritem.S_CNTR_CODE, |
| | | Qty = cntritem.F_WEIGHT, |
| | | PartLevel = cntritem.LEV, |
| | | WmsLot = cntritem.WmsLot |
| | | WmsLot = cntritem.WmsLot, |
| | | WeightBag = weightBag, |
| | | CurBagNum = curBagNum, |
| | | InitBagNum = initBagNum |
| | | }); |
| | | |
| | | |
| | |
| | | { |
| | | LogHelper.Info($"物料到位回报失败=>msg:{result.imsg}"); |
| | | } |
| | | ApiHelper.AddInfo("Mes", "物料到位回报", date, JsonConvert.SerializeObject(result), "Post", url); |
| | | } |
| | | catch (Exception ex) |
| | | { |