海波 张
2025-07-10 46dc31d4e66e45cde693b9c909691a710fabfcee
process/TaskProcess.cs
@@ -955,7 +955,9 @@
            try
            {
                var task = TaskHelper.GetTaskByWorkNo(model.task_no, "agv");
                var wcsTask = TaskHelper.GetTaskByWorkNo(model.task_no,"wcs");
                if (task != null && wcsTask != null)
                {
                    if (task.S_B_STATE.Trim() == "未执行")
@@ -1340,7 +1342,262 @@
        }
        /// <summary>
        /// 添加mes任务
        /// </summary>
        internal static Result addMesTaskInWorkArea(InWorkAreaParme model)
        {
            var result = new Result();
            var TOOLSTYPE = "";
            try
            {
                if (string.IsNullOrEmpty(model.BUSI_TYPE.ToString()))
                {
                    LogHelper.Info("InWorkArea任务下发失败,缺少参数BUSI_TYPE。", "Mes任务下发");
                    throw new Exception("缺少参数BUSI_TYPE");
                }
                if (string.IsNullOrEmpty(model.PROD_NO))
                {
                    LogHelper.Info("InWorkArea任务下发失败,缺少参数PROD_NO。", "Mes任务下发");
                    throw new Exception("缺少参数PROD_NO");
                }
                if (string.IsNullOrEmpty(model.Location_To))
                {
                    LogHelper.Info("InWorkArea任务下发失败,终点为空。", "Mes任务下发");
                    throw new Exception("缺少终点Location_To");
                }
                if (string.IsNullOrEmpty(model.CHECK_INFO))
                {
                    LogHelper.Info("InWorkArea任务下发失败,缺少参数CHECK_INFO。", "Mes任务下发");
                    throw new Exception("缺少参数CHECK_INFO");
                }
                if (string.IsNullOrEmpty(model.task_no))
                {
                    LogHelper.Info("InWorkArea任务下发失败,缺少参数task_no。", "Mes任务下发");
                    throw new Exception("缺少参数task_no");
                }
                if (model.Task_type==2)
                {
                    //呼叫胶料出库
                  var   workFlow = TaskHelper.selectWorkFlowByType(model.BUSI_TYPE);
                    if (workFlow == null)
                    {
                        LogHelper.Info($"InWorkArea任务下发失败,BUSI_TYpe:{model.BUSI_TYPE},没找到对应作业流程", "Mes任务下发");
                        throw new Exception($"BUSI_TYpe:{model.BUSI_TYPE},没找到对应作业流程");
                    }
                    else
                    {
                        LogHelper.Info($"作业流程信息" + JsonConvert.SerializeObject(workFlow), "Mes任务下发");
                    }
                    //出库任务
                    //接驳位
                    var connection = "";
                    //接驳位库区
                    var connectionArea = "";
                    //查找给定终点
                    var end = LocationHelper.GetLoc(model.Location_To);
                    LogHelper.Info($"InWorkArea出库任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发");
                    if (end == null)
                    {
                        LogHelper.Info($"InWorkArea出库任务下发失败,终点:{model.Location_To},没找到", "Mes任务下发");
                        throw new Exception($"终点:{model.Location_To},没找到");
                    }
                    var unlimitedLocation = TaskHelper.GetMesKtLoc();
                    //标记终点货位是否可以无限制下任务
                    var endLocFlag = true;
                    foreach (var item in unlimitedLocation)
                    {
                        //出库终点货位在配置里 可以无限制下任务
                        if (item.Loc.Contains(model.Location_To))
                        {
                            endLocFlag = false;
                            break;
                        }
                    }
                    if (endLocFlag)
                    {
                        var endTask = TaskHelper.GetTaskByEndLoc(model.Location_To);
                        if (endTask != null)
                        {
                            LogHelper.Info($"InWorkArea出库任务下发失败,终点:{model.Location_To}有任务执行中,任务号:{endTask.S_CODE}", "Mes任务下发");
                            throw new Exception($"终点:{model.Location_To}有任务执行中,任务号:{endTask.S_CODE}");
                        }
                    }
                    //查找起点
                    List<Location> strrtList;
                    Location start = null;
                    if (!string.IsNullOrEmpty(workFlow.ZONECODE))
                    {
                        strrtList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
                    }
                    else
                    {
                        strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                    }
                    if (workFlow.FLOWCODE == "9")
                    {
                            //根据制品编号寻找立库区对应物料托盘
                            start = LocationHelper.FindStartcolByLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA, workFlow.ROADWAY, workFlow.CONNECTION);
                            if (start == null)
                            {
                                strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
                                var itemFlag = LocationHelper.FindStartcolByLoclistAndItemFlag(strrtList, model.PROD_NO, workFlow.STARTAREA);
                                LogHelper.Info($"InWorkArea满托出库任务没找到起点,校验是否有库存但是设备报警{itemFlag}", "Mes任务下发");
                                if (itemFlag)
                                {
                                    result.errMsg = "满托出库作业有库存但设备报警";
                                    result.errCode = 2001;
                                    result.success = true;
                                    return result;
                                }
                            }
                        LogHelper.Info($"InWorkArea出库任务下发起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发");
                        if (start == null)
                        {
                            LogHelper.Info($"InWorkArea出库任务下发失败,起点库区{workFlow.STARTAREA},没找到起点", "Mes任务下发");
                            throw new Exception($"起点库区{workFlow.STARTAREA},没找到起点");
                        }
                        //获取托盘码
                        var cntrCode = LocationHelper.GetLocCntrCode(start.S_CODE);
                        if (workFlow.SENDWCS == "Y")
                        {
                            //正式代码,调用接口寻找可用接驳位
                            var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
                            //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位
                            var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList);
                            foreach (var item in balanceConnectionList)
                            {
                                if (item.loc.CONNEC_ROADWAY == start.N_ROADWAY)
                                {
                                    connection = item.loc.S_CODE;
                                    connectionArea = item.loc.S_AREA_Name;
                                    LogHelper.Info($"InWorkArea出库任务下发寻找到可用接驳位{connection}", "Mes任务下发");
                                    break;
                                }
                            }
                            if (connection == "")
                            {
                                LogHelper.Info($"InWorkArea出库任务下发寻找接驳位失败", "Mes任务下发");
                                throw new Exception($"InWorkArea出库任务下发寻找接驳位失败");
                            }
                        }
                        //起点终点查找成功,创建作业
                        var taskType = int.Parse(workFlow.FLOWCODE);
                        var operation = new WmsWork
                        {
                            // 作业号
                            S_CODE = model.task_no,
                            // 作业类型
                            N_TYPE = taskType,
                            // 作业类型
                            S_TYPE = workFlow.FLOWNAME,
                            // 起点货位
                            S_START_LOC = start.S_CODE,
                            // 起点库区编码
                            S_START_AREA = start.S_AREA_CODE,
                            //接驳位
                            CONNECTION = connection,
                            // 终点货位
                            S_END_LOC = end.S_CODE,
                            // 终点库区编码
                            S_END_AREA = end.S_AREA_CODE,
                            // 容器编码
                            S_CNTR_CODE = cntrCode,
                            // 作业定义名称
                            S_OP_DEF_NAME = workFlow.FLOWNAME,
                            //优先级
                            N_PRIORITY = model.Priority,
                            //工装类型
                            TOOLSTYPE = TOOLSTYPE,
                            //起点库区名称
                            S_START_AREA_NAME = start.S_AREA_Name,
                            //起点库区名称
                            S_END_AREA_NAME = end.S_AREA_Name,
                            //起点库区名称
                            CONNECTION_AREA = connectionArea
                        };
                        //创建作业
                        if (WMSHelper.CreateWmsWork(operation))
                        {
                            if (connection != "")
                            {
                                LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2);
                                LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1);
                                LocationHelper.LockLoc(operation.CONNECTION, "入库锁", 1);
                            }
                            LogHelper.Info($"InWorkArea出库作业创建成功{operation.S_CODE}", "Mes任务下发");
                            result.errMsg = "出库作业创建成功";
                            result.errCode = 0;
                            result.success = true;
                            return result;
                        }
                        else
                        {
                            LogHelper.Info($"InWorkArea出库任务下发创建作业失败", "Mes任务下发");
                            throw new Exception($"InWorkArea出库任务下发创建作业失败");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info("InWorkArea任务下发异常" + ex.Message, "Mes任务下发");
                result.errMsg = "InWorkArea任务下发异常" + ex.Message;
                result.errCode = 1;
                result.success = false;
                throw;
            }
            return result;
        }
            /// <summary>
@@ -1572,7 +1829,7 @@
                        //}
                        if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2")
                        if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11")
                        {
                            //满托入
@@ -1587,7 +1844,7 @@
                            }
                        }
                        else if (workFlow.FLOWCODE == "3")
                        else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10")
                        {
                            //空托入立库区
                            cntrCount = 0;
@@ -1848,7 +2105,7 @@
                    if (workFlow.FLOWCODE == "9" || workFlow.FLOWCODE == "4")
                    if (workFlow.FLOWCODE == "9" || workFlow.FLOWCODE == "4" || workFlow.FLOWCODE == "6")
                    {
                        if (TOOLSTYPE == "85" || TOOLSTYPE == "95")
                        {