111
jinxin
2025-06-03 d0c1502a17c8d945e16b498792bd8e50ea9fea9f
HH.WCS.Mobox3.WeiLi/api/ApiHelper.cs
@@ -207,6 +207,30 @@
            return result;
        }
        internal static SimpleResult ErrorOperation(MoboxOperationBase model)
        {
            var result = new SimpleResult();
            var db = new SqlHelper<object>().GetInstance();
            var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_CODE == model.OperationNo).First();
            if (wmsTask != null)
            {
                LogHelper.Info($"清除错误作业 解绑托盘 托盘{wmsTask.S_CNTR_CODE}");
                db.Deleteable<LocCntrRel>().Where(a => a.S_CNTR_CODE == wmsTask.S_CNTR_CODE).ExecuteCommand();
                db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == wmsTask.S_CNTR_CODE).ExecuteCommand();
                var locInfo = db.Queryable<Location>().Where(a => a.S_CODE == wmsTask.S_START_LOC).First();
                if (locInfo != null)
                {
                    LogHelper.Info($"清除错误作业 重置货位状态 货位{locInfo.S_CODE}");
                    locInfo.N_CURRENT_NUM = 0;
                    locInfo.N_LOCK_STATE = 0;
                    locInfo.S_LOCK_STATE = "无";
                    db.Updateable(locInfo).UpdateColumns(it => new { it.N_CURRENT_NUM, it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                }
            }
            return result;
        }
        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
        {
            var db = new SqlHelper<object>().GetInstance();
@@ -785,9 +809,13 @@
                            //if (task.S_B_STATE != "取消" && task.S_B_STATE != "完成" && task.S_B_STATE != "关闭" && task.S_B_STATE != "强制完成")
                            //{
                            TaskProcess.OperateStatus(task, 6);
                            if (task.S_TYPE.Contains("入库"))
                            if (task.S_OP_NAME =="入库")
                            {
                                WMSHelper.AddChange(task);
                            }
                            if (task.S_OP_NAME == "出库")
                            {
                                WMSHelper.DeleteChange(task);
                            }
                            if (task.S_TYPE == "分拣回")
                            {
@@ -849,28 +877,28 @@
                }
            }
            else
            {
                LogHelper.Info($"{locinfo.N_ROADWAY} 巷道找不到可入货位 随机分配货位");
                endbit = WMSHelper.GetLiKuLocationIn(locinfo.S_AREA_CODE, 0, locinfo.S_TYPE);
                if (endbit != null)
                {
                    LogHelper.Info($"查找到改道货位为{endbit.S_CODE}");
                    //修改任务数据 终点 备注:改位
                    LocationHelper.LockLoc(endbit.S_CODE, 1);
                    wmstask.S_END_LOC = endbit.S_CODE;
                    db.Updateable(wmstask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
                    task.S_END_LOC = endbit.S_CODE;
                    task.S_NOTE = "改位";
                    db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_NOTE }).ExecuteCommand();
                    var agvBit = db.Queryable<PeiZhi>().Where(it => it.BitCode == endbit.S_CODE).First();
                    if (agvBit != null)
                    {
                        result.new_locate_no = agvBit.PlcLocation;
                    }
                }
            }
            //else
            //{
            //    LogHelper.Info($"{locinfo.N_ROADWAY} 巷道找不到可入货位 随机分配货位");
            //    endbit = WMSHelper.GetLiKuLocationIn(locinfo.S_AREA_CODE, 0, locinfo.S_TYPE);
            //    if (endbit != null)
            //    {
            //        LogHelper.Info($"查找到改道货位为{endbit.S_CODE}");
            //        //修改任务数据 终点 备注:改位
            //        LocationHelper.LockLoc(endbit.S_CODE, 1);
            //        wmstask.S_END_LOC = endbit.S_CODE;
            //        db.Updateable(wmstask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
            //        task.S_END_LOC = endbit.S_CODE;
            //        task.S_NOTE = "改位";
            //        db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_NOTE }).ExecuteCommand();
            //
            //        var agvBit = db.Queryable<PeiZhi>().Where(it => it.BitCode == endbit.S_CODE).First();
            //        if (agvBit != null)
            //        {
            //            result.new_locate_no = agvBit.PlcLocation;
            //        }
            //    }
            //}
        }
        internal static SimpleResult OutboundOrderExecute(OutboundOrderCheck model)
        {
@@ -1631,46 +1659,98 @@
        {
            WeiLiResult result = new WeiLiResult();
            var db = new SqlHelper<object>().GetInstance();
            var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).ToList();
            if (tasks.Count >= 1)
            {
                //流程任务数量执行超过一条 任务不允许取消
                result.code = 500;
                result.msg = "流程任务执行中途不允许取消";
                return result;
            }
            //var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).ToList();
            //if (tasks.Count >= 1)
            //{
            //    //流程任务数量执行超过一条 任务不允许取消
            //    result.code = 500;
            //    result.msg = "流程任务执行中途不允许取消";
            //    return result;
            //}
            //var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).OrderByDescending(a => a.T_CREATE).First();
            //if (task != null)
            //{
            //    if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
            //    {
            //        result.code = 500;
            //        result.msg = "任务已取货完成 不允许取消";
            //        return result;
            //    }
            //    if (task.N_B_STATE == 0)
            //    {
            //        //等待直接修改状态为取消
            //        WCSHelper.UpdateStatus(model.orderNo, 5);
            //        //result.msg = "任务等待,直接取消";
            //    }
            //    else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
            //    {
            //        if (task.S_TYPE == "杭奥")
            //        {
            //            //通知立库取消任务
            //        }
            //        else
            //        {
            //            //已推送但是没有完成或者取消,通知hosttoagv
            //            NDCHelper.Cancel(task.S_CODE.Trim());
            //            //result.msg = "任务取消已经发送给小车";
            //        }
            //    }
            //    else
            //    {
            //        result.code = 500;
            //        result.msg = "任务已结束";
            //    }
            //}
            //else
            //{
            //    result.code = 500;
            //    result.msg = "任务不存在";
            //}
            var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).OrderByDescending(a => a.T_CREATE).First();
            if (task != null)
            {
                if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
                var wmsTask = WMSHelper.GetWmsTask(task.S_OP_CODE);
                if (wmsTask != null)
                {
                    result.code = 500;
                    result.msg = "任务已取货完成 不允许取消";
                    return result;
                }
                if (task.N_B_STATE == 0)
                {
                    //等待直接修改状态为取消
                    WCSHelper.UpdateStatus(model.orderNo, 5);
                    //result.msg = "任务等待,直接取消";
                }
                else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
                {
                    if (task.S_TYPE == "杭奥")
                    if (task.N_B_STATE == 0)
                    {
                        //通知立库取消任务
                        //等待直接修改状态为取消
                        WCSHelper.UpdateStatus(task.S_CODE, 4);
                        wmsTask.N_B_STATE = 6;
                        WMSHelper.UpdateTaskState(wmsTask);
                        LocationHelper.UnLockLoc(task.S_START_LOC);
                        LocationHelper.UnLockLoc(task.S_END_LOC);
                        LocationHelper.UnLockLoc(wmsTask.S_END_LOC);
                        result.msg = "任务等待,直接取消";
                    }
                    else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
                    {
                        if (task.S_SCHEDULE_TYPE == "NDC")
                        {
                            //已推送但是没有完成或者取消,通知hosttoagv
                            NDCApi.CancelOrder(task.S_CODE.Trim());
                        }
                        else
                        {
                            TaskProcess.Cancel(task);
                            TaskProcess.OperateStatus(task, 7);
                            WCSHelper.Fail(task);
                            WMSHelper.Fail(task);
                        }
                        result.msg = "任务取消已经发送给小车";
                    }
                    else
                    {
                        //已推送但是没有完成或者取消,通知hosttoagv
                        NDCHelper.Cancel(task.S_CODE.Trim());
                        //result.msg = "任务取消已经发送给小车";
                        result.msg = "任务已结束";
                    }
                }
                else
                {
                    result.code = 500;
                    result.msg = "任务已结束";
                    result.msg = "任务所处的作业不存在";
                }
            }
            else
@@ -1678,6 +1758,7 @@
                result.code = 500;
                result.msg = "任务不存在";
            }
            return result;
        }