111
lss
6 天以前 79db8fda0f71b65dfe1e1c72f307b29efc565126
HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/TaskProcess.cs
@@ -15,6 +15,7 @@
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;
@@ -79,6 +80,17 @@
            {
                //根据客户现场要求,如果取货完成任务失败人工拉到终点,我们就当卸货完成处理;如果是人工拉走到其它区域,我们就解锁终点,删除托盘。
                //终点绑定
                //物料到位通知
                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);
            }
@@ -156,6 +168,7 @@
                            //井松叠盘机安全交互
                            if (TN_Task.S_NOTE == "空托回库")
                            {
                                LogHelper.Info($"-------叠盘机安全请求------");
                                var Device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
                                if (Device != null)
                                {
@@ -208,9 +221,20 @@
                        }
                        if (TN_Task.S_NOTE == "空托回库")
                        {
                            LogHelper.Info($"-------叠盘机安全请求------");
                            var Device = Settings.deviceInfos.Where(a => a.TN_Location == TN_Task.S_START_LOC).FirstOrDefault();
                            if (Device != null)
                            {
                                if (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                {
                                    Task.Run(() =>
                                    {
                                        while (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                        {
                                            Thread.Sleep(1000);
                                        }
                                    });
                                }
                                //写入失败重新写入
                                if (!S7Helper.WriteDpj(Device.address, 1001, 1))
                                {
@@ -222,16 +246,7 @@
                                        }
                                    });
                                }
                                if (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                {
                                    Task.Run(() =>
                                    {
                                        while (!S7Helper.WriteDpj(Device.address, 1002, 0))
                                        {
                                            Thread.Sleep(1000);
                                        }
                                    });
                                }
                            }
                            else
                            {
@@ -461,6 +476,17 @@
                Console.WriteLine($"任务:{mst.S_CODE},起点仓库:{mst.S_START_WH}已经禁用推送");
                return false;
            }
            var sendTask = db.Queryable<SendTask>().Where(a => a.AREA_CODE == mst.S_END_AREA && a.able == "1").First();
            if (sendTask != null)
            {
                int taskNumber = WCSHelper.GetTaskByEndArea(sendTask.AREA_CODE, sendTask.loctioncode);
                LogHelper.Info($"任务:{mst.S_CODE},终点仓库:{sendTask.AREA_CODE},货位类型:{sendTask.loctioncode},存在任务数量:{taskNumber},限制任务数量:{sendTask.max}");
                if (taskNumber >= sendTask.max)
                {
                    Console.WriteLine($"任务:{mst.S_CODE},以达到限制推送数量,已经禁用推送");
                    return false;
                }
            }
            var mstbyEqno = db.Queryable<WCSTask>().Where(a => a.S_EQ_NO == mst.S_EQ_NO).ToList();
            if (mstbyEqno.Count() == 1)
@@ -672,7 +698,22 @@
            //  }
            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>
@@ -851,18 +892,30 @@
                        info = "agv已完成送料任务";
                        break;
                }
                string message = "1";
                string message = null;
                if (status == 7) { message = "agv任务已取消"; }
                int flag = 0;
                if (mst.S_NOTE == "粉料")
                {
                    flag = 1;
                }
                string number = mst.S_EQ_NO;
                if (!string.IsNullOrEmpty(mst.S_MES_NO))
                {
                    number = mst.S_MES_NO;
                }
                //List<StatusArrive> statusArrives = new List<StatusArrive>();
                StatusArrive statusArrive = new StatusArrive();
                statusarrive.UseToken = "iFQ5fExGrLYLXliHYWzs";
                statusArrive.TaskNumber = mst.S_EQ_NO;
                statusArrive.LocationNum = mst.S_END_LOC;
                statusArrive.TaskNumber = number;
                if (status == 1 || status == 3 || status == 4)
                {
                    statusArrive.LocationNum = mst.S_START_LOC;
                }
                else
                {
                    statusArrive.LocationNum = mst.S_END_LOC;
                }
                statusArrive.Time = DateTime.Now.ToString();
                statusArrive.Status = status.ToString();
                statusArrive.Rfid = mst.S_CNTR_CODE;
@@ -929,7 +982,7 @@
                //物料到位接口和状态反馈同时调IIOT,为了区分id,物料到位长度加一区分
                request.RequestId = "杭叉AGV" + time + "1";
                request.UseToken = "iFQ5fExGrLYLXliHYWzs";
                MesItemBackModel mesItemBackModel = new MesItemBackModel();
                mesItemBackModel.TaskNumber = MesNo;
@@ -938,7 +991,7 @@
                mesItemBackModel.LocationNum = mst.S_END_LOC;
                mesItemBackModel.Result = "1";
                mesItemBackModel.ArricalTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                if (cntritem != null)
                {
                    string curBagNum = null;
@@ -970,9 +1023,9 @@
                        Qty = cntritem.F_WEIGHT,
                        PartLevel = cntritem.LEV,
                        WmsLot = cntritem.WmsLot,
                        WeightBag = weightBag,
                        WeightBag = initBagNum,
                        CurBagNum = curBagNum,
                        InitBagNum = initBagNum
                        InitBagNum = weightBag
                    });