海波 张
13 小时以前 5321419f5fddb4e877fe90ccd90ebdc1a115af64
dispatch/WcsTask.cs
@@ -41,79 +41,87 @@
            string Traycode = mst.S_CNTR_CODE;
            var isFu = "0";
            var cntr = ContainerHelper.GetCntr(Traycode);
            if (cntr!=null)
            try
            {
                if (cntr.N_DETAIL_COUNT>0)
                var cntr = ContainerHelper.GetCntr(Traycode);
                if (cntr != null)
                {
                    isFu = "1";
                    if (cntr.N_DETAIL_COUNT > 0)
                    {
                        isFu = "1";
                    }
                }
            }
            var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE);
                var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE);
            if (workFlow != null)
            {
                if (workFlow.INOROUT.Contains("入库"))
                if (workFlow != null)
                {
                    Type = "1";
                    if (workFlow.INOROUT.Contains("入库"))
                    {
                        Type = "1";
                    }
                    if (workFlow.INOROUT.Contains("出库"))
                    {
                        Type = "2";
                        var count = TaskHelper.GetConnectionTask(mst.S_END_LOC);
                        if (count >= 2)
                        {
                            return false;
                        }
                    }
                }
                if (workFlow.INOROUT.Contains("出库"))
                if (mst.S_CNTR_CODE.Contains("KJZ"))
                {
                    Type = "2";
                    var count = TaskHelper.GetConnectionTask(mst.S_END_LOC);
                    if (count>=2)
                    TrayType = "KJZ";
                }
                var interact = new
                {
                    requestPk = mst.S_CODE,//任务号
                    contNo = Traycode,//托盘号
                    contType = TrayType,//托盘类型
                    trkType = Type,//任务类型
                    trkPrty = mst.N_PRIORITY,//任务优先级
                    frmPos = mst.S_START_LOC,//起始位置
                    toPos = mst.S_END_LOC,//目的地
                    isFull = isFu,//空托 满托
                    groupNo = Item?.S_ITEM_NAME,//搬送组号
                    clientCode = "WMS",//操作人
                    operationTime = DateTime.Now.ToString()//操作时间
                };
                LogHelper.Info("Wcs立库下发任务 地址信息:" + baseUrl + "receive", "立库下发任务");
                LogHelper.Info("Wcs立库下发任务 参数信息:" + JsonConvert.SerializeObject(interact), "立库下发任务");
                var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact));
                LogHelper.Info("Wcs立库下发任务 返回信息:" + JsonConvert.SerializeObject(result), "立库下发任务");
                if (!string.IsNullOrEmpty(result))
                {
                    var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result);
                    if (res.code == "0")
                    {
                        TaskHelper.UpdateStatus(mst, "已推送");
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            if (mst.S_CNTR_CODE.Contains("KJZ"))
            {
                TrayType = "KJZ";
            }
            var interact = new
            {
                requestPk = mst.S_CODE,//任务号
                contNo = Traycode,//托盘号
                contType = TrayType,//托盘类型
                trkType = Type,//任务类型
                trkPrty = mst.N_PRIORITY,//任务优先级
                frmPos = mst.S_START_LOC,//起始位置
                toPos = mst.S_END_LOC,//目的地
                isFull = isFu,//空托 满托
                groupNo = Item?.S_ITEM_NAME,//搬送组号
                clientCode = "WMS",//操作人
                operationTime = DateTime.Now.ToString()//操作时间
            };
            LogHelper.Info("Wcs立库下发任务 地址信息:" + baseUrl + "receive", "立库下发任务");
            LogHelper.Info("Wcs立库下发任务 参数信息:" + JsonConvert.SerializeObject(interact), "立库下发任务");
            var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact));
            LogHelper.Info("Wcs立库下发任务 返回信息:" + JsonConvert.SerializeObject(result), "立库下发任务");
            if (!string.IsNullOrEmpty(result))
            {
                var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result);
                if (res.code == "0")
                {
                    TaskHelper.UpdateStatus(mst, "已推送");
                    return true;
                }
                else
                {
                    LogHelper.Info("Wcs立库下发任务 返回信息为空", "立库下发任务");
                    return false;
                }
            }
            else
            catch (Exception)
            {
                LogHelper.Info("Wcs立库下发任务 返回信息为空", "立库下发任务");
                return false;
                throw;
            }
        }
@@ -598,7 +606,6 @@
            try
            {
                var taskNo = "";
            
                if (string.IsNullOrEmpty(model.requestPk))
@@ -618,6 +625,13 @@
                    throw new Exception("未查询到对应的任务");
                }
                if (transportTask.S_B_STATE == "完成" || transportTask.S_B_STATE == "取消")
                {
                    throw new Exception($"{transportTask}任务已{transportTask.S_B_STATE},不允许操作");
                }
                TaskHelper.WcsAddActionRecord(model.requestPk, model.noticeType, "WCS");
                switch (model.noticeType)
@@ -667,30 +681,29 @@
                                RfidChek.S_RESULT = "RFID校验失败";
                                if (WcsCancellTask(transportTask))
                                {
                                    ContainerHelper.delCntr(transportTask.S_CNTR_CODE);
                                    ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE);
                                    TaskHelper.Fail(transportTask);
                                    TaskProcess.OperateStatus(transportTask, 7);
                                    var agvTask = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv");
                                    if (agvTask == null)
                                    {
                                        LogHelper.Info($"RFID校验失败,没找到对应{transportTask.S_OP_CODE}的agv任务", "Wcs任务执行通知");
                                        throw new Exception($"RFID校验失败,没找到对应{transportTask.S_OP_CODE }的agv任务");
                                        throw new Exception($"RFID校验失败,没找到对应{transportTask.S_OP_CODE}的agv任务");
                                    }
                                    var workFlow = TaskHelper.selectWorkFlowByType(agvTask.N_TYPE.ToString(), agvTask.TOOLSTYPE);
                                        if (workFlow == null)
                                        {
                                            LogHelper.Info($"RFID校验失败,没找到对应作业流程", "Wcs任务执行通知");
                                            throw new Exception($"RFID校验失败,没找到对应作业流程");
                                        }
                                    if (workFlow == null)
                                    {
                                        LogHelper.Info($"RFID校验失败,没找到对应作业流程", "Wcs任务执行通知");
                                        throw new Exception($"RFID校验失败,没找到对应作业流程");
                                    }
                                    //查找终点
                                    var endList = LocationHelper.GetAllLocList1(workFlow.ERRORAREA);
                                    //var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ERRORAREA,workFlow.ROADWAY);
                                    var  end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA);
                                    var end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA);
                                    LogHelper.Info($"RFID校验失败下发异常终点信息" + JsonConvert.SerializeObject(end), "Wcs任务执行通知");
@@ -709,12 +722,21 @@
                                    agvTask.S_TYPE = workFlow.FLOWNAME;
                                    newDb.BeginTran();
                                    var I = newDb.Updateable(agvTask).UpdateColumns(it => new { it.S_START_LOC, it.S_START_AREA,it.S_END_LOC,it.S_END_AREA,it.S_TYPE,it.S_B_STATE, it.S_START_AREA_NAME, it.S_END_AREA_NAME }).ExecuteCommand();
                                    var I = newDb.Updateable(agvTask).UpdateColumns(it => new { it.S_START_LOC, it.S_START_AREA, it.S_END_LOC, it.S_END_AREA, it.S_TYPE, it.S_B_STATE, it.S_START_AREA_NAME, it.S_END_AREA_NAME }).ExecuteCommand();
                                    if (I == 0)
                                    {
                                        throw new Exception("修改任务表失败");
                                    }
                                    newDb.CommitTran();
                                    var agvTask1 = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv");
                                    TaskHelper.opMesTask(agvTask1, 3);
                                    ContainerHelper.delCntr(transportTask.S_CNTR_CODE);
                                    ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE);
                                }
                                else {
                                    LogHelper.Info($"RFID校验失败,通知Wcs取消任务失败", "Wcs任务执行通知");
                                    throw new Exception($"RFID校验失败,通知Wcs取消任务失败");
                                }
                            }
                            newDb.BeginTran();
@@ -728,9 +750,8 @@
                        break;
                    //取货完成
                    case "5":
                        if (transportTask.S_TYPE.Contains("出库")) {
                            LocationHelper.UnBindingLoc(transportTask.S_START_LOC, transportTask.S_CNTR_CODE.Split(',').ToList());
                        }
                        TaskHelper.UpdateStatus(transportTask, "取货完成");
                        LocationHelper.UnBindingLoc(transportTask.S_START_LOC, transportTask.S_CNTR_CODE.Split(',').ToList());
                        break;
                    //7取消
@@ -766,11 +787,13 @@
            }
            catch (Exception ex)
            {
                newDb.RollbackTran();
                LogHelper.Info("Wcs任务执行通知异常" + ex.Message, "Wcs任务执行通知");
                result.msg = "Wcs任务执行通知异常";
                result.code = "1";
                result.requestPk = model.requestPk;
                LogHelper.Info("Wcs任务执行通知异常" + ex.Message, "Wcs任务执行通知");
                newDb.RollbackTran();
                return result;
            }
            return result;
@@ -978,93 +1001,112 @@
            string bit = "";
            var Meshod = "";
            var newDb = new SqlHelper<object>().GetInstance();
            var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList();
            if (tac.Count() > 0)
            {
                LogHelper.Info("查询到安全请求信号记录表已经存在数据,此次信号不下达给立库", "agv执行通知");
                return true;
            }
            switch (state)
            {
                case 1101:
                    Type = "1";
                    bit = mst.S_START_LOC;
                    Meshod = "AgvRequest";
                    break;
                case 1102:
                    Type = "1";
                    bit = mst.S_START_LOC;
                    Meshod = "Complete";
                    break;
                case 1103:
                    Type = "2";
                    bit = mst.S_END_LOC;
                    Meshod = "AgvRequest";
                    break;
                case 1104:
                    Type = "2";
                    bit = mst.S_END_LOC;
                    Meshod = "Complete";
                    break;
                case 7:
                    Type = "5";
                    if (mst.S_TYPE.Contains("出库"))
                    {
                        bit = mst.S_START_LOC;
                    }
                    else {
                        bit = mst.S_END_LOC;
                    }
                    Meshod = "AgvRequestCancel";
                    break;
            }
            var interact = new
            try
            {
                requestPk = mst.S_CODE,//任务号
                trkType = Type,//任务类型
                method = Meshod,//API名称
                stnNo = bit,//目的地站台号
                carNo = forkliftNo,// 车号
                clientCode = "WMS",//操作人
                operationTime = DateTime.Now.ToString()//操作时间
            };
            LogHelper.Info("agv执行通知 地址信息:" + baseUrl + "agvCallback", "agv执行通知");
            LogHelper.Info("agv执行通知 参数信息:" + JsonConvert.SerializeObject(interact), "agv执行通知");
            var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact));
            LogHelper.Info("agv执行通知 返回信息:" + JsonConvert.SerializeObject(result), "agv执行通知");
            if (!string.IsNullOrEmpty(result))
            {
                var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result);
                if (res.code == "0")
                var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList();
                if (tac.Count() > 0)
                {
                    WcsSafety Sign = new WcsSafety();
                    Sign.TaskNo = mst.S_CODE;
                    Sign.Sign = state;
                    newDb.BeginTran();
                    var B = newDb.Insertable(Sign).ExecuteCommand();
                    if (B == 0)
                    {
                        newDb.RollbackTran();
                    }
                    newDb.CommitTran();
                    LogHelper.Info("agv执行通知成功:", "agv执行通知");
                    LogHelper.Info("查询到安全请求信号记录表已经存在数据,此次信号不下达给立库", "agv执行通知");
                    return true;
                }
                switch (state)
                {
                    case 1101:
                        Type = "1";
                        bit = mst.S_START_LOC;
                        Meshod = "AgvRequest";
                        break;
                    case 1102:
                        Type = "1";
                        bit = mst.S_START_LOC;
                        Meshod = "Complete";
                        break;
                    case 1103:
                        Type = "2";
                        bit = mst.S_END_LOC;
                        Meshod = "AgvRequest";
                        break;
                    case 1104:
                        Type = "2";
                        bit = mst.S_END_LOC;
                        Meshod = "Complete";
                        break;
                    case 7:
                        Type = "5";
                        if (mst.S_TYPE.Contains("出库"))
                        {
                            bit = mst.S_START_LOC;
                        }
                        else
                        {
                            bit = mst.S_END_LOC;
                        }
                        //退库取消发agv起点
                        if (LocationHelper.GetErroArea(mst.S_END_AREA))
                        {
                            bit = mst.S_START_LOC;
                        }
                        Meshod = "AgvRequestCancel";
                        break;
                }
                var interact = new
                {
                    requestPk = mst.S_CODE,//任务号
                    trkType = Type,//任务类型
                    method = Meshod,//API名称
                    stnNo = bit,//目的地站台号
                    carNo = forkliftNo,// 车号
                    clientCode = "WMS",//操作人
                    operationTime = DateTime.Now.ToString()//操作时间
                };
                LogHelper.Info("agv执行通知 地址信息:" + baseUrl + "agvCallback", "agv执行通知");
                LogHelper.Info("agv执行通知 参数信息:" + JsonConvert.SerializeObject(interact), "agv执行通知");
                var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact));
                LogHelper.Info("agv执行通知 返回信息:" + JsonConvert.SerializeObject(result), "agv执行通知");
                if (!string.IsNullOrEmpty(result))
                {
                    var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result);
                    if (res.code == "0")
                    {
                        WcsSafety Sign = new WcsSafety();
                        Sign.TaskNo = mst.S_CODE;
                        Sign.Sign = state;
                        newDb.BeginTran();
                        var B = newDb.Insertable(Sign).ExecuteCommand();
                        if (B == 0)
                        {
                            newDb.RollbackTran();
                        }
                        newDb.CommitTran();
                        LogHelper.Info("agv执行通知成功:", "agv执行通知");
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    LogHelper.Info("agv执行通知成功 返回信息为空", "agv执行通知");
                    return false;
                }
            }
            else
            catch (Exception)
            {
                LogHelper.Info("agv执行通知成功 返回信息为空", "agv执行通知");
                return false;
                throw;
            }
        }
@@ -1200,12 +1242,15 @@
                            LogHelper.Info($"任务号{task.S_CODE},取消任务成功,起点{task.S_START_LOC}设为异常", "放货有货");
                            TaskHelper.Fail(task);
                            TaskProcess.OperateStatus(task, 7);
                            LocationHelper.updateLocLock(task.S_START_LOC, 4, "异常锁");
                            LocationHelper.updateLocLock(task.S_START_LOC, 3, "其他锁");
                            var agvTask = TaskHelper.GetTaskByWorkNo(task.S_OP_CODE, "agv");
                            if (agvTask != null)
                            {
                                if (agvTask.S_B_STATE!="未执行")
                                {
                                    NDCApi.CancelOrder(agvTask.S_CODE.Trim());
                                }
                                TaskHelper.Fail(agvTask);
                                NDCApi.CancelOrder(agvTask.S_CODE.Trim());
                                TaskProcess.CacheBitCancelUpdate(agvTask);
                            }
                        }
@@ -1227,8 +1272,8 @@
                        if (end != null)
                        {
                            newDb.BeginTran();
                            endLoc.N_LOCK_STATE = 4;
                            endLoc.S_LOCK_STATE = "异常锁";
                            endLoc.N_LOCK_STATE = 3;
                            endLoc.S_LOCK_STATE = "其他锁";
                            newDb.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand();
                            task.S_END_LOC = end.S_CODE;
                            newDb.Updateable(task).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
@@ -1244,8 +1289,10 @@
                        }
                    }
                        result.msg = "Wcs放货有货/取货无货处理成功";
                        result.code = "0";
                        result.requestPk = model.requestPk;
                        return result;
                    }
                    catch (Exception ex)
                    {
@@ -1268,7 +1315,6 @@
            public static WcsWarningReurn agvResponse(agvResponseParme model) {
            var result = new WcsWarningReurn();
            var newDb = new SqlHelper<object>().GetInstance();
            try
            {
                newDb.BeginTran();
@@ -1304,8 +1350,6 @@
                return result;
            }
        }
    }
    
    
@@ -1331,7 +1375,7 @@
        public string code { get; set; }
        public string msg { get; set; }
        public bool success { get; set; }
        public DataItem lastTime { get; set; }
        public DateTime lastTime { get; set; }
    }
    /// <summary>