杨前锦
2025-06-13 b7308bba3d7ffad271ce7fc7a93c8c45d76be87d
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/api/ApiHelper.cs
@@ -228,43 +228,53 @@
        public static ResponseResult offLineProcess(OffLineRequest model) {
            ResponseResult responseResult = new ResponseResult();
            // 查询起点货位是否存在已存在任务,防止任务重复发起
            var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
            if (existWmsTask == null)
            var areaCodes = Settings.areaPropertyList.Select(a => a.areaCode).ToList();
            var isExistCntr = LocationHelper.checkAreaExistCntr(areaCodes,model.cntrNo);
            if (!isExistCntr)
            {
                // 查询对应机台的物料下线配置信息
                var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
                if (logicConfig != null)
                // 查询起点货位是否存在已存在任务,防止任务重复发起
                var existWmsTask = WMSHelper.GetWmsTaskByStart(model.loc);
                if (existWmsTask == null)
                {
                    Container container = ContainerHelper.GetCntr(model.cntrNo);
                    if (container == null || !model.isNormal)
                    // 查询对应机台的物料下线配置信息
                    var logicConfig = WMSHelper.getLogicConfigByJtCode(model.jtNo);
                    if (logicConfig != null)
                    {
                        ContainerHelper.AddCntr(model.cntrNo);
                        ContainerHelper.UpdateCntrState(model.cntrNo, 1);
                        WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
                    }
                        Container container = ContainerHelper.GetCntr(model.cntrNo);
                        if (container == null || !model.isNormal)
                        {
                            ContainerHelper.AddCntr(model.cntrNo);
                            ContainerHelper.UpdateCntrState(model.cntrNo, 1);
                            WMSHelper.addRfidAnomalyRecord(model.cntrNo, 1, model.loc, null);
                        }
                    // 根据物料下线配置信息,判断任务类型是直连下线还是非直连下线
                    if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
                    {
                        triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
                        // 根据物料下线配置信息,判断任务类型是直连下线还是非直连下线
                        if (logicConfig.S_TASK_TYPE == "1" || logicConfig.S_TASK_TYPE == "2")
                        {
                            triggerItemOffLineFlow(model.loc, model.cntrNo, logicConfig);
                        }
                        else
                        {
                            // 满料下线(非直连)
                            triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
                        }
                    }
                    else
                    {
                        // 满料下线(非直连)
                        triggerItemOffLineFlow4(model.loc, model.cntrNo, logicConfig);
                        WMSHelper.addAlarmRecord("流程异常", "高", $"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员");
                        throw new BusinessException($"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员");
                    }
                }
                else
                {
                    WMSHelper.addAlarmRecord("流程异常", "高", $"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员");
                    throw new BusinessException($"机台号{model.jtNo},没有可用的逻辑线路,请联系管理人员");
                    WMSHelper.addAlarmRecord("流程异常", "低", $"下线货位:{model.loc}已有任务,请勿重复下发任务");
                    throw new BusinessException($"下线货位:{model.loc}已有任务,请勿重复下发任务");
                }
            }
            else 
            {
                WMSHelper.addAlarmRecord("流程异常", "低", $"下线货位:{model.loc}已有任务,请勿重复下发任务");
                throw new BusinessException($"下线货位:{model.loc}已有任务,请勿重复下发任务");
                WMSHelper.addAlarmRecord("流程异常", "高", $"工装:{model.cntrNo}已入库,请勿重复入库");
                throw new BusinessException($"工装:{model.cntrNo}已入库,请勿重复入库");
            }
            return responseResult;
        }
@@ -369,8 +379,8 @@
                        }
                        else
                        {
                            WMSHelper.addAlarmRecord("流程异常", "中", $"空工装出库站台:{logicConfig.S_LKKTJBLOC},没有空工装");
                            photoStatus = false;
                            kgzCntrCode = "虚拟容器";
                            WMSHelper.addAlarmRecord("流程异常", "低", $"空工装出库站台:{logicConfig.S_LKKTJBLOC},没有空工装");
                        }
                    }
@@ -917,7 +927,6 @@
                                // 更新出库任务中间表状态
                                WMSHelper.updateLotOutTask(cst.S_CNTR_CODE, "2");
                            }
                        }
                    }
                }
@@ -941,45 +950,27 @@
                if (mst != null && mst.N_B_STATE < 2) {
                    int emptyFlag = 0;  // 容器空满标识
                    Container cntr = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
                    if (cntr != null && cntr.N_DETAIL_COUNT > 0) {
                    var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
                    if (cntrItemRels.Count > 0) {
                        emptyFlag = 1;
                    }
                    // 1:堆垛机放货异常申请新终点
                    if (model.applyType == 1) {
                        // 报警:流程异常
                        WMSHelper.addAlarmRecord("流程异常", "低", $"堆垛机放货异常,异常货位:{cst.S_END_LOC}");
                        WMSHelper.addAlarmRecord("流程异常", "中", $"堆垛机放货异常,任务号:{cst.S_CODE},异常货位:{cst.S_END_LOC}");
                        // 1.将异常货位上锁,并报警
                        LocationHelper.LockLoc(cst.S_END_LOC, 3);
                        // 2.查询新的入库终点
                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag);
                        Location endLoc = WMSHelper.getInStockEndLoc(cst.S_END_AREA, emptyFlag );
                        cst.S_END_LOC = endLoc.S_CODE;
                        WCSHelper.UpdateEndLoc(cst);
                        LocationHelper.LockLoc(endLoc.S_CODE, 1);
                        applyDest.destLoc = endLoc.S_CODE;
                    }
                    else if (model.applyType == 2)
                    {
                        if (cst.S_END_LOC == "虚拟库位")
                        {
                            var transfeRelevance = WMSHelper.GetTransfeRelevance(model.loc);  // 接驳位关联属性
                            if (transfeRelevance != null)
                            {
                                // 1.查询新的入库终点
                                Location endLoc = WMSHelper.getInStockEndLoc(transfeRelevance.S_RELE_AREA, emptyFlag);
                                cst.S_END_LOC = endLoc.S_CODE;
                                WCSHelper.UpdateEndLoc(cst);
                                LocationHelper.LockLoc(endLoc.S_CODE, 1);
                                applyDest.destLoc = endLoc.S_CODE;
                            }
                        }
                    }
                }
            }
            result.data = applyDest;
@@ -1066,18 +1057,22 @@
            {
                if (mst.S_TYPE == "余料/空工装入库")
                {
                    var mesTask = WMSHelper.GetLjMesTaskById(int.Parse(mst.S_OP_DEF_CODE));
                    if (mesTask.QTY != 0)
                    var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
                    if (bo)
                    {
                        var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
                        if (awaitTask != null)
                        var mesTask = WMSHelper.GetLjMesTaskById(mesId);
                        if (mesTask.QTY != 0)
                        {
                            // 取消任务
                            ApiHelper.cancelTask(awaitTask.S_CODE);
                            // 修改终点
                            agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
                            wmsEndLoc = agvEndLoc;
                            mst.S_TYPE = "叫料出库任务";
                            var awaitTask = WMSHelper.GetAwaitWmsTaskByMaterialCode(mesTask.MATERIAL_CODE);
                            if (awaitTask != null)
                            {
                                // 取消任务
                                ApiHelper.cancelTask(awaitTask.S_CODE);
                                // 修改终点
                                agvEndLoc = LocationHelper.GetLoc(awaitTask.S_END_LOC);
                                wmsEndLoc = agvEndLoc;
                                mst.S_TYPE = "叫料出库任务";
                            }
                        }
                    }
                }
@@ -1199,7 +1194,7 @@
                            }
                            else
                            {
                                WMSHelper.addAlarmRecord("流程异常", "高", $"AGV申请终点失败,未查询到立库接驳位");
                                WMSHelper.addAlarmRecord("流程异常", "高", $"AGV申请终点失败,立库:{wmsEndLoc.S_AREA_CODE}未配置立库接驳位");
                                return null;
                            }
                        }
@@ -1342,118 +1337,112 @@
        /// 成新机叫料
        /// </summary>
        /// <param name="materialCode"></param>
        /// <param name="endLocCode"></param>
        /// <param name="jtNo"></param>
        /// <param name="mesTaskId"></param>
        public static void callMaterial(string materialCode, string endLocCode, int mesTaskId)
        public static void callMaterial(string materialCode, string jtNo, int mesTaskId)
        {
            var oldWmsTask = WMSHelper.GetWmsTaskByEnd(endLocCode);
            if (oldWmsTask == null) {
                string cntrCode = "";
                Location endLoc = LocationHelper.GetLoc(endLocCode);
            string cntrCode = "";
            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
            if (mesTask != null)
            {
                Location endLoc = WMSHelper.getCallMaterialLocCode(jtNo);
                if (endLoc != null)
                {
                    Location middleLoc = null;
                    Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
                    if (startLoc == null)
                    {
                        var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
                        if (mesTask != null)
                        {
                            mesTask.RECEIVE_MSG = "没有库存";
                            WMSHelper.updateLjMesTask(mesTask);
                        }
                        WMSHelper.addAlarmRecord("流程异常", "高", $"叫料失败,物料:{materialCode}没有库存");
                        return;
                    }
                    else
                    if (startLoc != null)
                    {
                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
                        if (locCntrRels.Count > 0)
                        {
                            cntrCode = locCntrRels[0].S_CNTR_CODE;
                        }
                        else
                        {
                            WMSHelper.addAlarmRecord("流程异常", "高", $"查询物料异常,货位:{startLoc.S_CODE}缺少容器信息");
                            return;
                        }
                    }
                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1 , 2);
                    if (middleLoc != null)
                    {
                        // 1.创建成新机叫料作业
                        var wmsTask = new WMSTask()
                        {
                            S_CNTR_CODE = cntrCode,
                            S_CODE = WMSHelper.GenerateTaskNo(),
                            S_START_LOC = startLoc.S_CODE,
                            S_START_AREA = startLoc.S_AREA_CODE,
                            S_END_LOC = endLoc.S_CODE,
                            S_END_AREA = endLoc.S_AREA_CODE,
                            S_TYPE = "叫料出库任务",
                            S_OP_DEF_CODE = mesTaskId.ToString(),
                            S_OP_DEF_NAME = "成型机叫料出库任务",
                            T_START_TIME = DateTime.Now,
                        };
                        if (WMSHelper.CreateWmsTask(wmsTask))
                        {
                            WCSTask wcsTask = new WCSTask()
                            middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
                            if (middleLoc != null)
                            {
                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                S_OP_CODE = wmsTask.S_CODE,
                                S_CODE = WCSHelper.GenerateTaskNo(),
                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                S_TYPE = wmsTask.S_TYPE + "-WCS",
                                S_START_LOC = startLoc.S_CODE,
                                S_START_AREA = startLoc.S_AREA_CODE,
                                S_END_LOC = middleLoc.S_CODE,
                                S_END_AREA = middleLoc.S_AREA_CODE,
                                S_SCHEDULE_TYPE = "WCS",
                                N_PRIORITY = 10,
                                T_START_TIME = DateTime.Now,
                            };
                                // 1.创建成新机叫料作业
                                var wmsTask = new WMSTask()
                                {
                                    S_CNTR_CODE = cntrCode,
                                    S_CODE = WMSHelper.GenerateTaskNo(),
                                    S_START_LOC = startLoc.S_CODE,
                                    S_START_AREA = startLoc.S_AREA_CODE,
                                    S_END_LOC = endLoc.S_CODE,
                                    S_END_AREA = endLoc.S_AREA_CODE,
                                    S_TYPE = "叫料出库任务",
                                    S_OP_DEF_CODE = mesTaskId.ToString(),
                                    S_OP_DEF_NAME = "成型机叫料出库任务",
                                    T_START_TIME = DateTime.Now,
                                };
                                if (WMSHelper.CreateWmsTask(wmsTask))
                                {
                                    WCSTask wcsTask = new WCSTask()
                                    {
                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                        S_OP_CODE = wmsTask.S_CODE,
                                        S_CODE = WCSHelper.GenerateTaskNo(),
                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                        S_TYPE = wmsTask.S_TYPE,
                                        S_START_LOC = startLoc.S_CODE,
                                        S_START_AREA = startLoc.S_AREA_CODE,
                                        S_END_LOC = middleLoc.S_CODE,
                                        S_END_AREA = middleLoc.S_AREA_CODE,
                                        S_SCHEDULE_TYPE = "WCS",
                                        N_PRIORITY = 10,
                                        T_START_TIME = DateTime.Now,
                                    };
                            if (WCSHelper.CreateTask(wcsTask))
                            {
                                // 起点、终点加锁
                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                    if (WCSHelper.CreateTask(wcsTask))
                                    {
                                        // 起点、终点加锁
                                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                // 更新作业任务状态
                                wmsTask.N_B_STATE = 1;
                                WMSHelper.UpdateTaskState(wmsTask);
                                        // 更新作业任务状态
                                        wmsTask.N_B_STATE = 1;
                                        WMSHelper.UpdateTaskState(wmsTask);
                                    }
                                    // 预创建二段任务
                                    WCSTask twoWcsTask = new WCSTask()
                                    {
                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                        S_OP_CODE = wmsTask.S_CODE,
                                        S_CODE = WCSHelper.GenerateTaskNo(),
                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                        S_TYPE = wmsTask.S_TYPE,
                                        S_START_LOC = middleLoc.S_CODE,
                                        S_START_AREA = middleLoc.S_AREA_CODE,
                                        S_END_LOC = endLoc.S_CODE,
                                        S_END_AREA = endLoc.S_AREA_CODE,
                                        S_SCHEDULE_TYPE = "AGV",
                                        N_PRIORITY = 10,
                                        T_START_TIME = DateTime.Now,
                                        N_B_STATE = -1
                                    };
                                    WCSHelper.CreateTask(twoWcsTask);
                                    WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
                                }
                            }
                            // 预创建二段任务
                            WCSTask twoWcsTask = new WCSTask()
                            else
                            {
                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                S_OP_CODE = wmsTask.S_CODE,
                                S_CODE = WCSHelper.GenerateTaskNo(),
                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                S_TYPE = wmsTask.S_TYPE,
                                S_START_LOC = middleLoc.S_CODE,
                                S_START_AREA = middleLoc.S_AREA_CODE,
                                S_END_LOC = endLoc.S_CODE,
                                S_END_AREA = endLoc.S_AREA_CODE,
                                S_SCHEDULE_TYPE = "AGV",
                                N_PRIORITY = 10,
                                T_START_TIME = DateTime.Now,
                                N_B_STATE = -1
                            };
                            WCSHelper.CreateTask(twoWcsTask);
                            WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
                                WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,库区{startLoc.S_AREA_CODE}未查询到可用的接驳位");
                            }
                        }
                        else
                        {
                            WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,开始货位:{startLoc.S_CODE}异常,缺少容器信息");
                        }
                    }
                    else
                    else
                    {
                        WMSHelper.addAlarmRecord("流程异常", "高", $"库区{startLoc.S_AREA_CODE}未查询到可用的接驳位");
                    }
                        mesTask.AWAIT_MSG = "库存不足";
                        WMSHelper.updateLjMesTask(mesTask);
                        WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,物料:{materialCode}库存不足");
                    }
                }
            }
        }
        
        /// <summary>
@@ -1465,14 +1454,142 @@
        /// <param name="materialCode"></param>
        /// <param name="endLocCode"></param>
        /// <param name="mesTaskId"></param>
        public static void callMaterialHDK(string materialCode, string endLocCode, int mesTaskId)
        public static void callMaterialXC(string materialCode, string endLocCode, int mesTaskId)
        {
            // 1.查询环带库物料库存
            DateTime inStockTimeXc = DateTime.MinValue;
            List<CntrItemRel> cntrItemRelsXc = new List<CntrItemRel>();
            if (cntrItemRelsXc.Count > 0)
            {
                inStockTimeXc = cntrItemRelsXc[0].T_INBOUND_TIME;
            }
            // 2.查询中转库库存,根据入库时间 进行先入先出
            // 2.查询中转库库存
            DateTime inStockTime = DateTime.MinValue;
            var cntrItemRels = WMSHelper.getZZKInventoryInfo(materialCode);
            if (cntrItemRels.Count > 0)
            {
                inStockTime = cntrItemRels[0].T_INBOUND_TIME;
            }
            // 3.将MES任务写入环带库任务中间表
            WMSHelper.addLjXcTask(mesTaskId);
            // 3.根据先进先出计算出库的物料是环带库 还是中转库
            var mesTask = WMSHelper.GetLjMesTaskById(mesTaskId);
            if (inStockTime >= inStockTimeXc)
            {
                //斜裁物料出库
                if (cntrItemRelsXc.Count > 0)
                {
                    // 4.将MES任务写入环带库任务中间表
                    WMSHelper.addLjXcTask(mesTask);
                }
            }
            else
            {
                //中转库物料出库
                if (cntrItemRels.Count > 0)
                {
                    var cntrItemRel = cntrItemRels[0];
                    var locCntrRel = LocationHelper.GetLocCntrByCntr(cntrItemRel.S_CNTR_CODE);
                    if (locCntrRel != null)
                    {
                      var endLoc = LocationHelper.GetLoc(locCntrRel.S_LOC_CODE);
                        if (endLoc != null)
                        {
                            Location middleLoc = null;
                            Location startLoc = WMSHelper.getOutStockStartLoc(null, materialCode);
                            if (startLoc != null)
                            {
                                var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
                                if (locCntrRels.Count > 0)
                                {
                                    var cntrCode = cntrItemRel.S_CNTR_CODE;
                                    middleLoc = WMSHelper.GetTransfeRelevanceLoc(startLoc.S_AREA_CODE, 1, 2);
                                    if (middleLoc != null)
                                    {
                                        // 1.创建成新机叫料作业
                                        var wmsTask = new WMSTask()
                                        {
                                            S_CNTR_CODE = cntrCode,
                                            S_CODE = WMSHelper.GenerateTaskNo(),
                                            S_START_LOC = startLoc.S_CODE,
                                            S_START_AREA = startLoc.S_AREA_CODE,
                                            S_END_LOC = endLoc.S_CODE,
                                            S_END_AREA = endLoc.S_AREA_CODE,
                                            S_TYPE = "叫料出库任务",
                                            S_OP_DEF_CODE = mesTaskId.ToString(),
                                            S_OP_DEF_NAME = "成型机叫料出库任务",
                                            T_START_TIME = DateTime.Now,
                                        };
                                        if (WMSHelper.CreateWmsTask(wmsTask))
                                        {
                                            WCSTask wcsTask = new WCSTask()
                                            {
                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                                S_OP_CODE = wmsTask.S_CODE,
                                                S_CODE = WCSHelper.GenerateTaskNo(),
                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                                S_TYPE = wmsTask.S_TYPE,
                                                S_START_LOC = startLoc.S_CODE,
                                                S_START_AREA = startLoc.S_AREA_CODE,
                                                S_END_LOC = middleLoc.S_CODE,
                                                S_END_AREA = middleLoc.S_AREA_CODE,
                                                S_SCHEDULE_TYPE = "WCS",
                                                N_PRIORITY = 10,
                                                T_START_TIME = DateTime.Now,
                                            };
                                            if (WCSHelper.CreateTask(wcsTask))
                                            {
                                                // 起点、终点加锁
                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                                // 更新作业任务状态
                                                wmsTask.N_B_STATE = 1;
                                                WMSHelper.UpdateTaskState(wmsTask);
                                            }
                                            // 预创建二段任务
                                            WCSTask twoWcsTask = new WCSTask()
                                            {
                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                                S_OP_CODE = wmsTask.S_CODE,
                                                S_CODE = WCSHelper.GenerateTaskNo(),
                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
                                                S_TYPE = wmsTask.S_TYPE,
                                                S_START_LOC = middleLoc.S_CODE,
                                                S_START_AREA = middleLoc.S_AREA_CODE,
                                                S_END_LOC = endLoc.S_CODE,
                                                S_END_AREA = endLoc.S_AREA_CODE,
                                                S_SCHEDULE_TYPE = "AGV",
                                                N_PRIORITY = 10,
                                                T_START_TIME = DateTime.Now,
                                                N_B_STATE = -1
                                            };
                                            WCSHelper.CreateTask(twoWcsTask);
                                            WMSHelper.readLjMesCallItemTask(wmsTask.S_CODE, mesTaskId);
                                        }
                                    }
                                    else
                                    {
                                        WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,库区{startLoc.S_AREA_CODE}未查询到可用的接驳位");
                                    }
                                }
                                else
                                {
                                    WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,开始货位:{startLoc.S_CODE}异常,缺少容器信息");
                                }
                            }
                            else
                            {
                                mesTask.AWAIT_MSG = "库存不足";
                                WMSHelper.updateLjMesTask(mesTask);
                                WMSHelper.addAlarmRecord("流程异常", "高", $"成型机叫料失败,物料:{materialCode}库存不足");
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
@@ -1483,12 +1600,12 @@
        /// 3.创建余料回库作业,创建agv搬运任务,虚拟终点
        /// </summary>
        /// <param name="locCode">成型机叫料终点</param>
        public static void returnMaterialOrEmptyTray(string locCode)
        /// <param name="jtNo">成型机叫料终点</param>
        public static void returnMaterialOrEmptyTray(string locCode ,string jtNo)
        {
            if (locCode != null)
            {
                // 2.查询mes任务中间表
                var mesTask = WMSHelper.getLjMesTaskByLoc(locCode);
                var mesTask = WMSHelper.getLjMesTaskByJtNo(jtNo);
                if (mesTask != null)
                {
                    createReturnTask(locCode, mesTask);
@@ -1665,10 +1782,11 @@
                    }
                }
                if (cst.S_TYPE == "叫料出库任务")
                var bo = int.TryParse(mst.S_OP_DEF_CODE, out int mesId);
                if (bo)
                {
                    var mesTask = WMSHelper.GetLjMesTaskByAgvorderId(mst.S_CODE);
                    callMaterial( mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
                    var mesTask = WMSHelper.GetLjMesTaskById(mesId);
                    callMaterial(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
                }
            }
            return result;
@@ -2019,7 +2137,8 @@
        //----------------------------------------------------------------------------------------------------------------------------
        public class LocModel
        {
            public string locCode { get; set; }
            public string locCode { get; set; }  // 返料货位编号
            public string jtNo { get; set; } // 机台号
        }
        public class ApplyDest {