与现场实施测试出入库流程 入库任务下发参数修改测试 称重高度会议讨论重新计算货位 变更终点下发联调
9个文件已修改
539 ■■■■■ 已修改文件
api/AgvController.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiHelper.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiModel.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/WCSTask.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
process/TaskProcess.cs 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/LocationHelper.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WMSHelper.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/AgvController.cs
@@ -74,15 +74,15 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("PlcCallbackState")]
        public PlcSendTaskres PlcCallbackState(PlcState model)
        {
            LogHelper.Info("PlcCallbackState Request:" + JsonConvert.SerializeObject(model), "HosttoagvTask");
            var result = ApiHelper.PlcCallbackState(model);
            LogHelper.Info("PlcCallbackState Return:" + JsonConvert.SerializeObject(result), "HosttoagvTask");
            return result;
        }
        //[HttpPost]
        //[Route("PlcCallbackState")]
        //public PlcSendTaskres PlcCallbackState(PlcState model)
        //{
        //    LogHelper.Info("PlcCallbackState Request:" + JsonConvert.SerializeObject(model), "HosttoagvTask");
        //    //var result = ApiHelper.PlcCallbackState(model);
        //    LogHelper.Info("PlcCallbackState Return:" + JsonConvert.SerializeObject(result), "HosttoagvTask");
        //    return result;
        //}
api/ApiHelper.cs
@@ -58,7 +58,7 @@
        }
        internal static WeiLiResult AddTask(AddTaskModel model)
        {
@@ -162,14 +162,14 @@
        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
        {
            var db = new SqlHelper<object>().GetInstance();
            TaskStateresutl result = new TaskStateresutl { success = false, code = 0};
            TaskStateresutl result = new TaskStateresutl { success = false, code = 0 };
            if (!string.IsNullOrEmpty(model.taskNo))
            {
                var info = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.taskNo).First();
                if (info!=null)
                if (info != null)
                {
                    var TaskStates = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == info.S_CODE).ToList();
                    TaskStates=TaskStates.OrderBy(a => a.T_CREATE).ToList();
                    TaskStates = TaskStates.OrderBy(a => a.T_CREATE).ToList();
                    for (int i = 0; i < TaskStates.Count; i++)
                    {
                        TaskState task = new TaskState
@@ -179,13 +179,13 @@
                            taskNo = model.taskNo,
                            transferTime = TaskStates[i].T_CREATE.ToString()
                        };
                        if (!string.IsNullOrEmpty(TaskStates[i].S_EQ_CODE))
                        if (!string.IsNullOrEmpty(TaskStates[i].S_EQ_CODE))
                        {
                            task.agvNo = int.Parse(TaskStates[i].S_EQ_CODE);
                        }
                        result.data.Add(task);
                    }
                    result.success = true ;
                    result.success = true;
                }
                else
                {
@@ -201,11 +201,11 @@
            return result;
        }
        internal static PlcSendTaskres PlcCallbackState(PlcState model)
        {
            var db = new SqlHelper<object>().GetInstance();
@@ -444,11 +444,11 @@
        }
        internal static WeiLiResult CancelOrder(CancelOrderModel model)
        {
            WeiLiResult result = new WeiLiResult();
@@ -503,7 +503,7 @@
            return result;
        }
        internal static WeiLiResult ChangeOrderPrioryty(ChangeOrderPriorytyModel model)
        {
@@ -546,17 +546,17 @@
            return result;
        }
        internal static SimpleResult PalletSorting(PalletSorting model)
        {
@@ -598,7 +598,7 @@
            return result;
        }
        public class ReceivingNoteSerialNo
api/ApiModel.cs
@@ -28,6 +28,7 @@
        {
            public int State { get; set; }
            public string No { get; set; }
            public string ForkliftNo { get; set; }
            public string ErrCode { get; set; }
            public string LockNo { get; set; }
api/WmsSpaHelper.cs
@@ -1941,7 +1941,7 @@
                        };
                        if (WMSHelper.CreateWmsTask(wmsTask))
                        {
                            LocationHelper.LockLoc(start.S_CODE, 1);
                            LocationHelper.LockLoc(start.S_CODE, 2);
                            result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                        }
core/WCSCore.cs
@@ -69,6 +69,7 @@
                            case 7:
                                TaskProcess.OperateStatus(TN_Task, 7);
                                WCSHelper.Fail(TN_Task);
                                WMSHelper.Fail(TN_Task);
                                //sendsencondtask(TN_Task);
                                //WMSHelper.End(TN_Task);
                                break;
@@ -83,7 +84,7 @@
                    }
                    else {
                        //安全请求等
                        TaskProcess.OperateReq( TN_Task, model.State, model.ForkliftNo, model.ExtData, model.Ext1);
                        TaskProcess.OperateReq( TN_Task, model.State, model.ForkliftNo, model.ExtData);
                    }
                }
            }
models/WCSTask.cs
@@ -41,7 +41,9 @@
        public string S_CODE { get; set; }
        //1前移车 2 堆垛车    
        public int N_ERR { get; set; }
        //高度
        public string S_EQ_TASK_CODE { get; set; }
        //重量
        public string S_STATE_PRE { get; set; }
        public int N_REVIEW_RESULT { get; set; }
process/TaskProcess.cs
@@ -80,211 +80,273 @@
        /// <param name="forkliftNo">车号</param>
        /// <param name="extData">重量</param>
        /// <param name="Ext1">高度</param>
        internal static void OperateReq(WCSTask TN_Task, int state, string forkliftNo, string extData,string Ext1)
        internal static void OperateReq(WCSTask TN_Task, int state, string forkliftNo, string extData)
        {
            if (state == 1002)//信号
            {
                LogHelper.Info($"称重分配入库终点货位高度重量{extData},高度{Ext1}");
                var db = new SqlHelper<object>().GetInstance();
                var WMStask= db.Queryable<WMSTask>().Where(s=>s.S_CODE==TN_Task.S_OP_CODE).First();
                if (WMStask==null)
                {
                    LogHelper.Info($"未找到此任务对应的作业");
                }
                try
                {
                    Location result = null;
                    //var TN_Task = WCSHelper.GetTask(no);
                    //判断当前容器为托盘还是料框
                    //托盘只能放在1-2层 料箱3-9层
                    //获取集合
                    var locklist = db.Queryable<Location>();
                    if (TN_Task.S_CNTR_CODE.Substring(0, 2) == "TP")//托盘
                    {
                        var endlist = locklist
                                   .Where(it => it.N_CURRENT_NUM < it.N_CAPACITY && it.N_LAYER < 3 && it.S_AREA_CODE == "HJQ")
                                   .OrderBy(it => it.N_COL)
                                   .PartitionBy(it => it.N_ROW)
                                   .PartitionBy(it => it.N_LAYER)
                                   .Take(1)
                                   .ToList();
                        foreach (var item in endlist)
                        {
                            LogHelper.Info($"重量{decimal.Parse(extData)}");
                            //大于800kg
                            if (decimal.Parse(extData) > 800)
                            {
                                LogHelper.Info($"高度{decimal.Parse(Ext1)}");
                                //高度大于1050mm 只放在第一层
                                if (decimal.Parse(Ext1) <= 1050)
                                {
                                    var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                    && it.N_LAYER == 1).First();
                                    if (lockinfo == null)
                                    {
                                        result = item;
                                        break;
                                    }
                                    else {
                                        LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                    throw new Exception($"高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                }
                            }
                            else//不超重 即 不超过800kg
                            {
                                //高度<450mm 2-9层
                                if (decimal.Parse(Ext1) < 450)
                                {
                                    var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                    && it.N_LAYER == 2).First();
                                    if (lockinfo == null)
                                    {
                                        result = item;
                                        break;
                                    }
                                    else {
                                        LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                    }
                                }
                                else if (decimal.Parse(Ext1) >= 450 && decimal.Parse(Ext1) < 1050)
                                {
                                    var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                   && it.N_LAYER >= 1 && it.N_LAYER <= 2).First();
                                    if (lockinfo == null)
                                    {
                                        result = item;
                                        db.Updateable<WMSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                                        break;
                                    }
                                    else
                                    {
                                        LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"托盘高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                    throw new Exception($"托盘高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                }
                            }
                        }
                    }
                    else
                    { //容器为料箱 则放到3-9层
                        var endlist = locklist
                                   .Where(it => it.N_CURRENT_NUM < it.N_CAPACITY && it.N_LAYER >=3&&it.S_AREA_CODE== "HJQ")
                                   .OrderBy(it => it.N_COL)
                                   .PartitionBy(it => it.N_ROW)
                                   .PartitionBy(it => it.N_LAYER)
                                   .Take(1)
                                   .ToList();
                        foreach (var item in endlist)
                        {
                            LogHelper.Info($"重量{decimal.Parse(extData)}");
                            //大于800kg
                            if (decimal.Parse(extData) > 800)
                            {
                                LogHelper.Info($"料箱重量超过800kg");
                                throw new Exception($"料箱重量超过800kg");
                            }
                            else
                            {
                                if (decimal.Parse(Ext1) < 1050)
                                {
                                    var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_LOCK_STATE != 0 && it.S_AREA_CODE == item.S_AREA_CODE && it.N_ROW == item.N_ROW
                                                   && it.N_LAYER >= 3 && it.N_LAYER <= 9).First();
                                    if (lockinfo == null)
                                    {
                                        result = item;
                                        TN_Task.S_END_LOC = item.S_CODE;
                                        db.Updateable<WMSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC }).ExecuteCommand();
                                        break;
                                    }
                                    else {
                                        LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"料箱高度 {decimal.Parse(Ext1)} 过高 联系人工处理");
                                    throw new Exception($"料箱高度 {decimal.Parse(Ext1)} 过高 联系人工处理");
                                }
                            }
                        }
                    }
                    if (result==null)
                    {
                        LogHelper.Info($"小车回调未找到可用库位");
                        throw new Exception($"小车回调未找到可用库位");
                    }
                    TN_Task.S_END_LOC = result.S_CODE;
                    TN_Task.S_END_AREA = result.S_AREA_CODE;
                    TN_Task.S_END_WH = result.S_WH_CODE;
                    db.Updateable<WCSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                    WMStask.S_END_LOC = result.S_CODE;
                    WMStask.S_END_AREA = result.S_AREA_CODE;
                    WMStask.S_END_WH = result.S_WH_CODE;
                    db.Updateable<WMSTask>(WMStask).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                    //请求卸货,
                    var dic = new Dictionary<string, string>();
                    dic.Add("No", TN_Task.S_CODE);
                    dic.Add("ParamNo", "2");
                    dic.Add("Param1", TN_Task.S_END_LOC);
                    var res = NDC.ChangeOrder(dic);
                    LogHelper.Info($"修改终点货位"+ JsonConvert.SerializeObject(res));
                    if (res.Res.ErrCode != -1)
                    {
                        var dics = new Dictionary<string, string>();
                        dics.Add("No", TN_Task.S_CODE);
                        dics.Add("ParamNo", "6");
                        dics.Add("Param1", "2");
                      var ss=  NDC.ChangeOrder(dics);
                        LogHelper.Info($"小车前往新库位" + JsonConvert.SerializeObject(ss));
                        LocationHelper.BindingLoc(TN_Task.S_END_LOC, TN_Task.S_CNTR_CODE.Split(',').ToList());
                    }
                    db.CommitTran();
                }
                catch (Exception)
                {
                    db.RollbackTran();
                    throw;
                }
            }
            if (state == 1103)
            else if (state == 2000)//信号
            {
                var db = new SqlHelper<object>().GetInstance();
                TN_Task.S_EQ_TASK_CODE = extData;//高度
                db.Updateable<WCSTask>(TN_Task).UpdateColumns(a => new { a.S_EQ_TASK_CODE }).ExecuteCommand();
                db.CommitTran();
                if (!string.IsNullOrEmpty(TN_Task.S_STATE_PRE) && !string.IsNullOrEmpty(TN_Task.S_EQ_TASK_CODE))
                {
                    weight(TN_Task);
                }
            }
            else if (state == 2001)//信号
            {
                var db = new SqlHelper<object>().GetInstance();
                TN_Task.S_STATE_PRE = extData;//高度
                db.Updateable<WCSTask>(TN_Task).UpdateColumns(a => new { a.S_STATE_PRE }).ExecuteCommand();
                db.CommitTran();
                if (!string.IsNullOrEmpty(TN_Task.S_STATE_PRE) && !string.IsNullOrEmpty(TN_Task.S_EQ_TASK_CODE))
                {
                    weight(TN_Task);
                }
            }
                if (state == 1103)
            {
                //大铁框叉走以后通知,我们要通知输送线
            }
        }
        internal static void weight(WCSTask TN_Task)
        {
                if (!string.IsNullOrEmpty(TN_Task.S_STATE_PRE) && !string.IsNullOrEmpty(TN_Task.S_EQ_TASK_CODE))
                {
                string extData = TN_Task.S_STATE_PRE;
                string Ext1 = TN_Task.S_EQ_TASK_CODE;
                    LogHelper.Info($"称重分配入库终点货位高度重量{extData},高度{Ext1},容器{TN_Task.S_CNTR_CODE}");
                    var db = new SqlHelper<object>().GetInstance();
                    var WMStask = db.Queryable<WMSTask>().Where(s => s.S_CODE == TN_Task.S_OP_CODE).First();
                    if (WMStask == null)
                    {
                        LogHelper.Info($"未找到此任务对应的作业");
                    }
                    try
                    {
                        Location result = null;
                        //var TN_Task = WCSHelper.GetTask(no);
                        //判断当前容器为托盘还是料框
                        //托盘只能放在1-2层 料箱3-9层
                        //获取集合
                        var locklist = db.Queryable<Location>();
                        if (TN_Task.S_CNTR_CODE.Substring(0, 2) == "TP")//托盘
                        {
                            var endlist = locklist
                                       .Where(it => it.N_CURRENT_NUM < it.N_CAPACITY && it.N_LAYER < 3 && it.N_LOCK_STATE ==0 && it.S_AREA_CODE == "HJQ")
                                       .OrderBy(it => it.N_COL)
                                       .PartitionBy(it => it.N_ROW)
                                       .PartitionBy(it => it.N_LAYER)
                                       .Take(1)
                                       .ToList();
                            foreach (var item in endlist)
                            {
                                LogHelper.Info($"重量{decimal.Parse(extData)}");
                                //大于800kg
                                if (decimal.Parse(extData) > 1)
                                {
                                    LogHelper.Info($"高度{Ext1}");
                                    //高度大于1050mm 只放在第一层
                                    if (decimal.Parse(Ext1) <=3)
                                    {
                                        var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                        && it.N_LAYER == 1).First();
                                        if (lockinfo == null)
                                        {
                                            result = item;
                                            break;
                                        }
                                        else
                                        {
                                            LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                            //throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        }
                                    }
                                    else
                                    {
                                        LogHelper.Info($"高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                        throw new Exception($"高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                    }
                                }
                                else//不超重 即 不超过800kg
                                {
                                    //高度<450mm 2-9层
                                    if (decimal.Parse(Ext1) < 2)
                                {
                                    LogHelper.Info($"高度<450mm 2-9层");
                                    var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                        && it.N_LAYER == 2).First();
                                        if (lockinfo == null)
                                        {
                                            result = item;
                                            break;
                                        }
                                        else
                                        {
                                            LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                            //throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        }
                                    }
                                    else if (decimal.Parse(Ext1) >= 2 && decimal.Parse(Ext1) < 4)
                                    {
                                        var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_ROW == item.N_ROW
                                                       && it.N_LAYER >= 1 && it.N_LAYER <= 2).First();
                                        if (lockinfo == null)
                                        {
                                            result = item;
                                            db.Updateable<WMSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                                            break;
                                        }
                                        else
                                        {
                                            LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                            //throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        }
                                    }
                                    else
                                    {
                                        LogHelper.Info($"托盘高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                        throw new Exception($"托盘高度{decimal.Parse(Ext1)}过高 联系人工处理");
                                    }
                                }
                            }
                        }
                        else
                        { //容器为料箱 则放到3-9层
                            var endlist = locklist
                                       .Where(it => it.N_CURRENT_NUM < it.N_CAPACITY && it.N_LAYER >= 3 && it.N_LOCK_STATE == 0 && it.S_AREA_CODE == "HJQ")
                                       .OrderBy(it => it.N_COL)
                                       .PartitionBy(it => it.N_ROW)
                                       .PartitionBy(it => it.N_LAYER)
                                       .Take(1)
                                       .ToList();
                            foreach (var item in endlist)
                            {
                                LogHelper.Info($"重量{decimal.Parse(extData)}");
                                //大于800kg
                                if (decimal.Parse(extData) > 1)
                                {
                                    LogHelper.Info($"料箱重量超过800kg");
                                    throw new Exception($"料箱重量超过800kg");
                                }
                                else
                                {
                                    if (decimal.Parse(Ext1) < 4)
                                    {
                                        var lockinfo = locklist.Where(it => it.N_LOCK_STATE != 0 && it.N_LOCK_STATE != 0 && it.S_AREA_CODE == item.S_AREA_CODE && it.N_ROW == item.N_ROW
                                                       && it.N_LAYER >= 3 && it.N_LAYER <= 9).First();
                                        if (lockinfo == null)
                                        {
                                            result = item;
                                            TN_Task.S_END_LOC = item.S_CODE;
                                            db.Updateable<WMSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC }).ExecuteCommand();
                                            break;
                                        }
                                        else
                                        {
                                            LogHelper.Info($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                            throw new Exception($"货位{lockinfo.S_CODE} 有锁 当排层不可使用");
                                        }
                                    }
                                    else
                                    {
                                        LogHelper.Info($"料箱高度 {decimal.Parse(Ext1)} 过高 联系人工处理");
                                        throw new Exception($"料箱高度 {decimal.Parse(Ext1)} 过高 联系人工处理");
                                    }
                                }
                            }
                        }
                        if (result == null)
                        {
                            LogHelper.Info($"小车回调未找到可用库位");
                            throw new Exception($"小车回调未找到可用库位");
                        }
                        TN_Task.S_END_LOC = result.S_CODE;
                        TN_Task.S_END_AREA = result.S_AREA_CODE;
                        TN_Task.S_END_WH = result.S_WH_CODE;
                        db.Updateable<WCSTask>(TN_Task).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                        WMStask.S_END_LOC = result.S_CODE;
                        WMStask.S_END_AREA = result.S_AREA_CODE;
                        WMStask.S_END_WH = result.S_WH_CODE;
                        db.Updateable<WMSTask>(WMStask).UpdateColumns(a => new { a.S_END_LOC, a.S_END_AREA, a.S_END_WH }).ExecuteCommand();
                    var S_AGV_SITE = "";
                    if (TN_Task.N_ERR==1)//前移车
                    {
                        //前移车
                         S_AGV_SITE = LocationHelper.GetAgvSite(TN_Task.S_END_LOC);
                    }
                    else //堆垛车
                    {
                        //堆垛车
                         S_AGV_SITE = db.Queryable<TN_Location_Ext>().Where(a => a.S_LOC_CODE == TN_Task.S_END_LOC).First()?.S_AGV_SITE;
                    }
                        var dic = new Dictionary<string, string>();
                        dic.Add("No", TN_Task.S_CODE);
                        dic.Add("ParamNo", "3");
                        dic.Add("Param1", S_AGV_SITE);
                    //dic.Add("Pri", TN_Task.N_PRIORITY.ToString());
                    //dic.Add("No", TN_Task.S_CODE.Trim());
                    //dic.Add("From", TN_Task.S_START_LOC);
                    //dic.Add("To", TN_Task.S_END_LOC);
                    //dic.Add("Func", "0");
                    //dic.Add("Data", "512");
                    //dic.Add("FRow", "0");
                    var res = NDC.ChangeOrder(dic);
                        LogHelper.Info($"修改终点货位" + JsonConvert.SerializeObject(res));
                        if (res.Res.ErrCode != -1)
                        {
                            var dics = new Dictionary<string, string>();
                            dics.Add("No", TN_Task.S_CODE);
                            dics.Add("ParamNo", "6");
                            dics.Add("Param1", "2");
                            var ss = NDC.ChangeOrder(dics);
                            LogHelper.Info($"小车前往新库位" + JsonConvert.SerializeObject(ss));
                            LocationHelper.BindingLoc(TN_Task.S_END_LOC, TN_Task.S_CNTR_CODE.Split(',').ToList());
                            LocationHelper.LockLoc(TN_Task.S_END_LOC,1);
                        }
                        db.CommitTran();
                    }
                    catch (Exception)
                    {
                        db.RollbackTran();
                        throw;
                    }
                }
        }
        internal static void UpdateAgvNo(WCSTask mst, string forkliftNo)
        {
@@ -555,7 +617,7 @@
                            dic1.Add("Func", "0");
                            if (mst.S_TYPE.Contains("入库"))
                            {
                                dic1.Add("Data", "0x200");
                                dic1.Add("Data", "512");
                            }
                            else
                            {
wms/LocationHelper.cs
@@ -285,7 +285,8 @@
            var res = false;
            var db = new SqlHelper<object>().GetInstance();
            var model = db.Queryable<Location>().Where(a => a.S_CODE == loc).First();
            if (model != null && model.S_LOCK_STATE.Trim() == "无")
           // if (model != null && model.S_LOCK_STATE.Trim() == "无")
            if (model != null && model.N_LOCK_STATE==0)
            {
                model.N_LOCK_STATE = lockState;
                model.S_LOCK_STATE = Location.GetLockStateStr(lockState);
wms/WMSHelper.cs
@@ -918,7 +918,17 @@
            WMSHelper.UpdateTaskState(wmsTask);
            WCSHelper.UpdateStorStatus(task.S_CNTR_CODE, 4);
        }
        internal static void Fail(WCSTask task)
        {
            var db = new SqlHelper<object>().GetInstance();
            var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_CODE == task.S_OP_CODE).First();
            //修改作业状态 重新启动
            wmsTask.N_B_STATE = 5;
            wmsTask.S_B_STATE = "取消";
            WMSHelper.UpdateTaskState(wmsTask);
           //WCSHelper.UpdateStorStatus(task.S_CNTR_CODE, 4);
        }
        internal static void EndTn(string S_CNTR_CODE)
        {
            var db = new SqlHelper<object>().GetInstance();