111
user
3 天以前 802fc04c2d744d08c3e577dd4d91d60a3071e3d7
HH.WCS.Mobox3.NongFuLinZhi/api/ApiHelper.cs
@@ -57,155 +57,6 @@
            return result;
        }
        internal static WeiLiResult AddTask(AddTaskModel model)
        {
            var result = new WeiLiResult();
            var db = new SqlHelper<object>().GetInstance();
            var cntrweight = model.cntrWeight == 1 ? 2 : model.cntrWeight == 2 ? 3 : model.cntrWeight == 3 ? 11 : model.cntrWeight == 4 ? 30 : model.cntrWeight == 5 ? 150 : 0;
            if (!string.IsNullOrEmpty(model.startBit) && !string.IsNullOrEmpty(model.endBit))
            {
                if (!string.IsNullOrEmpty(model.TaskNo))
                {
                    var taskinfo = db.Queryable<WMSTask>().Where(a => a.S_CODE == model.TaskNo).First();
                    if (taskinfo == null)
                    {
                        var startinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.startBit).First();
                        var endinfo = db.Queryable<Location>().Where(a => a.S_CODE == model.endBit).First();
                        if (startinfo != null && endinfo != null)
                        {
                            if (startinfo.N_LOCK_STATE != 0 || endinfo.N_LOCK_STATE != 0)
                            {
                                result.code = 500;
                                result.msg = "起点或终点货位锁定状态异常 不予创建任务";
                                return result;
                            }
                            var startloccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startinfo.S_CODE).First();
                            LogHelper.Info("查询起点是否绑定托盘");
                            if (startloccntr == null)
                            {
                                LogHelper.Info("起点未绑定托盘 准备绑定托盘");
                                //绑定起点托盘
                                LocationHelper.BindingLoc(model.startBit, new List<string>() { model.cntrNo });
                            }
                            else if (startloccntr.S_CNTR_CODE != model.cntrNo)
                            {
                                result.code = 500;
                                result.msg = $"起点已绑定托盘{startloccntr.S_CNTR_CODE} 与任务托盘{model.cntrNo} 不符";
                                return result;
                            }
                            LogHelper.Info("转运任务 创建作业");
                            //创建作业
                            var optask = new WMSTask
                            {
                                S_CODE = model.TaskNo,
                                S_START_LOC = startinfo.S_CODE,
                                S_END_LOC = endinfo.S_CODE,
                                S_END_AREA = endinfo.S_AREA_CODE,
                                S_START_AREA = startinfo.S_AREA_CODE,
                                S_START_WH = startinfo.S_WH_CODE,
                                S_END_WH = endinfo.S_WH_CODE,
                                S_TYPE = "转运",
                                N_TYPE = 3,
                                N_B_STATE = 0,
                                S_CNTR_CODE = model.cntrNo,
                                S_OP_DEF_NAME = "转运",
                                S_BS_NO = model.workNo,
                                N_PRIORITY = model.priority,
                                N_TRAY_WEIGHT = cntrweight
                            };
                            var note = Settings.Tasktypes.Where(a => a.StartArea == optask.S_START_AREA && a.EndArea == optask.S_END_AREA).FirstOrDefault();
                            if (note != null)
                            {
                                optask.S_NOTE = note.TaskType;
                            }
                            db.Insertable(optask).ExecuteCommand();
                            LocationHelper.LockLoc(startinfo.S_CODE, 2);
                            LocationHelper.LockLoc(endinfo.S_CODE, 1);
                        }
                        else
                        {
                            result.code = 500;
                            result.msg = "起点或终点信息有误 查询不到站点信息";
                        }
                    }
                    else
                    {
                        result.code = 500;
                        result.msg = "任务号重复 请勿重复下发任务";
                    }
                }
                else
                {
                    result.code = 500;
                    result.msg = "任务号不能为空";
                }
            }
            else
            {
                result.code = 500;
                result.msg = "起点或终点不能为空";
            }
            return result;
        }
        internal static TaskStateresutl GetTaskState(GetTaskStateModel model)
        {
            var db = new SqlHelper<object>().GetInstance();
            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)
                {
                    var TaskStates = db.Queryable<TaskAction>().Where(a => a.S_TASK_CODE == info.S_CODE).ToList();
                    TaskStates=TaskStates.OrderBy(a => a.T_CREATE).ToList();
                    for (int i = 0; i < TaskStates.Count; i++)
                    {
                        TaskState task = new TaskState
                        {
                            state = TaskStates[i].N_ACTION_CODE.ToString(),
                            errMsg = "",
                            taskNo = model.taskNo,
                            transferTime = TaskStates[i].T_CREATE.ToString()
                        };
                        if (!string.IsNullOrEmpty(TaskStates[i].S_EQ_CODE))
                        {
                            task.agvNo = int.Parse(TaskStates[i].S_EQ_CODE);
                        }
                        result.data.Add(task);
                    }
                    result.success = true ;
                }
                else
                {
                    result.code = 1;
                    result.msg = "该任务号没有状态记录!";
                }
            }
            else
            {
                result.code = 1;
                result.msg = "请求任务号不能为空!";
            }
            return result;
        }
        internal static PlcSendTaskres PlcCallbackState(PlcState model)
        {
            var db = new SqlHelper<object>().GetInstance();
@@ -443,17 +294,11 @@
            db.Updateable(task).UpdateColumns(it => new { it.S_NOTE }).ExecuteCommand();
        }
        internal static WeiLiResult CancelOrder(CancelOrderModel model)
        {
            WeiLiResult result = new WeiLiResult();
            var db = new SqlHelper<object>().GetInstance();
            var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).ToList();
            var tasks = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.task_no).ToList();
            if (tasks.Count >= 1)
            {
                //流程任务数量执行超过一条 任务不允许取消
@@ -461,7 +306,7 @@
                result.msg = "流程任务执行中途不允许取消";
                return result;
            }
            var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.orderNo).OrderByDescending(a => a.T_CREATE).First();
            var task = db.Queryable<WCSTask>().Where(a => a.S_OP_CODE == model.task_no).OrderByDescending(a => a.T_CREATE).First();
            if (task != null)
            {
                if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4))
@@ -473,7 +318,7 @@
                if (task.N_B_STATE == 0)
                {
                    //等待直接修改状态为取消
                    WCSHelper.UpdateStatus(model.orderNo, 5);
                    WCSHelper.UpdateStatus(model.task_no, 5);
                    //result.msg = "任务等待,直接取消";
                }
                else if (task.N_B_STATE != 3 && task.N_B_STATE != 4)
@@ -485,7 +330,8 @@
                    else
                    {
                        //已推送但是没有完成或者取消,通知hosttoagv
                        NDCHelper.Cancel(task.S_CODE.Trim());
                        //NDCHelper.Cancel(task.S_CODE.Trim());
                        NDCApi.CancelOrder(task.S_CODE.Trim());
                        //result.msg = "任务取消已经发送给小车";
                    }
                }
@@ -528,7 +374,8 @@
                    else
                    {
                        //通知杭叉修改优先级
                        NDCHelper.Cancel(task.S_CODE.Trim());
                        //NDCHelper.Cancel(task.S_CODE.Trim());
                        NDCApi.CancelOrder(task.S_CODE.Trim());
                        result.msg = "修改优先级成功";
                    }
                }
@@ -826,6 +673,126 @@
            return result;
        }
        internal static ReturnResult bindCntr(bindModel model)
        {
            ReturnResult result = new ReturnResult() {ResultCode = -1 };
            var db = new SqlHelper<object>().GetInstance();
            if (TaskProcess.BindLocCntr(model.S_LOC_CODE, model.S_CNTR_CODE, model.S_ITEM_CODE, model.S_BATCH_CODE))
            {
                int num = model.S_CNTR_CODE.Split(',').Count();
                var locInfo = db.Queryable<Location>().Where(a => a.S_CODE == model.S_LOC_CODE).First();
                if(locInfo != null)
                {
                    locInfo.N_CURRENT_NUM = locInfo.N_CURRENT_NUM + num > locInfo.N_CAPACITY ? locInfo.N_CAPACITY : locInfo.N_CURRENT_NUM + num;
                    db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand();
                    result.ResultCode = 0;
                }
            }
            return result;
        }
        internal static ReturnResult unBindCntr(unBindModel model)
        {
            ReturnResult result = new ReturnResult() { ResultCode = -1 };
            var db = new SqlHelper<object>().GetInstance();
            var locInfo = db.Queryable<Location>().Where(a => a.S_CODE == model.S_LOC_CODE).First();
            if(locInfo != null)
            {
                var cntrList = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == model.S_LOC_CODE).ToList();
                if(cntrList.Count > 0)
                {
                    for (int i = cntrList.Count - 1; i >= 0; i --)
                    {
                        string cntrCode = cntrList[i].S_CNTR_CODE;
                        db.Deleteable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntrCode).ExecuteCommand();
                        db.Deleteable<LocCntrRel>().Where(a => a.S_CNTR_CODE == cntrCode).ExecuteCommand();
                        db.Deleteable<Container>().Where(a => a.S_CODE == cntrCode).ExecuteCommand();
                    }
                }
                locInfo.N_CURRENT_NUM = locInfo.N_CURRENT_NUM - 1;
                if (locInfo.N_CURRENT_NUM < 0) locInfo.N_CURRENT_NUM = 0;
                db.Updateable(locInfo).UpdateColumns(a => new { a.N_CURRENT_NUM }).ExecuteCommand();
                result.ResultCode = 0;
            }
            return result;
        }
        internal static ReturnResult JBIn(JBInModel model)
        {
            ReturnResult result = new ReturnResult() { ResultCode = -1 };
            var db = new SqlHelper<object>().GetInstance();
            string cntrCode = Guid.NewGuid().ToString("N");
            string batch = "";
            if (model.S_ITEM_TYPE == "小包装盖")
            {
                //小包装盖默认一层
                batch = "小包装盖";
            }
            if (model.S_ITEM_TYPE == "瓶坯")
            {
                //瓶坯默认两层
                cntrCode = cntrCode + ","+ Guid.NewGuid().ToString("N");
            }
            if (model.S_ITEM_TYPE == "大包装盖")
            {
                //大包装盖默认三层
                cntrCode = cntrCode + "," + Guid.NewGuid().ToString("N") + "," + Guid.NewGuid().ToString("N");
                batch = "大包装盖";
            }
            //创建作业
            var locInfo = db.Queryable<Location>().Where(a => a.S_CODE == model.S_LOC_CODE && a.S_LOCK_STATE == "无").First();
            if(locInfo != null)
            {
                LogHelper.Info($"JBIn:{model.S_LOC_CODE},{cntrCode},{"指定库区-" + model.S_END_AREA}");
                if (WMSHelper.CreateOpTask(model.S_LOC_CODE, "", "入库", "接驳位入库", cntrCode, "指定库区-" + model.S_END_AREA))
                {
                    TaskProcess.BindLocCntr(model.S_LOC_CODE, cntrCode, model.S_ITEM_CODE, batch);
                    result.ResultCode = 0;
                }
            }
            else
            {
                result.ResultMsg = $"该点位不存在或者有锁,货位编码:{model.S_LOC_CODE}";
            }
            return result;
        }
        internal static ReturnResult PtpTask(PtpTaskModel model, ReturnResult result)
        {
            var db = new SqlHelper<object>().GetInstance();
            var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.S_START_LOC).First();
            if(startLoc != null && startLoc.S_LOCK_STATE == "无")
            {
                string cntrCode = "";
                var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First();
                if(cntrInfo != null)
                {
                    cntrCode = cntrInfo.S_CNTR_CODE;
                }
                else
                {
                    cntrCode = Guid.NewGuid().ToString("N");
                }
                var endLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.S_END_LOC).First();
                if (endLoc != null && endLoc.S_LOCK_STATE == "无")
                {
                    WMSHelper.CreateOpTask(model.S_START_LOC, model.S_END_LOC, "入库", "点到点转运", cntrCode, "");
                }
                else
                {
                    result.ResultMsg = $"终点货位不存在或者有锁,货位编码:{model.S_END_LOC}";
                }
            }
            else
            {
                result.ResultMsg = $"起点货位不存在或者有锁,货位编码:{model.S_START_LOC}";
            }
            return result;
        }
        //public class AddTaskModel
        //{