杨前锦
17 小时以前 06a8b6963d6d4f229d4e196b4b09ce57e2cbf2dd
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/api/ApiHelper.cs
@@ -28,6 +28,7 @@
        }
        /// <summary>
        /// 1.创建入库任务
        /// </summary>
@@ -36,7 +37,7 @@
            ReturnResult result = new ReturnResult();
            try
            {
                if (model.taskType == "机台半制品入库" || model.taskType == "成型机余料回库")
                if (model.taskType.Contains("机台半制品入库") || model.taskType.Contains("成型机余料入库") || model.taskType.Contains("半制品抽检入库"))
                {
                    var itemInfos = model.itemInfo;
                    if (itemInfos == null || itemInfos.Count == 0)
@@ -44,38 +45,6 @@
                        result.ResultCode = 1;
                        result.ResultMsg = "物料信息不能为空";
                        return result;
                    }
                    else
                    {
                        foreach (var item in itemInfos)
                        {
                            // 将MES的物料状态转化成WMS可识别的物料状态
                            if (item.jdge == "" || item.jdge == null)
                            {
                                item.jdge = "OK";
                            }
                            else if(item.jdge != "OK")
                            {
                                item.jdge = "HOLD";
                            }
                            // 计算生效时间、失效时间
                            var overage = WMSHelper.getOverage(item.bc_entried);
                            if (overage != null)
                            {
                                DateTime txndate = DateTime.Parse(item.txndate);
                                DateTime minTime = txndate.AddHours(overage.MINHOUR);
                                DateTime maxTime = txndate.AddDays(overage.OVERAGE);
                                item.effective_time = minTime.ToString("yyyy-MM-dd HH:mm:ss");
                                item.expiration_time = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
                            }
                            else
                            {
                                result.ResultCode = 1;
                                result.ResultMsg = $"未查询到物料存放时间配置信息,条形码:{item.bc_entried}";
                                return result;
                            }
                        }
                    }
                }
@@ -234,13 +203,6 @@
                        string cntrCode = "";
                        if (startLoc != null)
                        {
                            // 查询接驳位
                            var locCodes = Settings.getAgvJBLocList(startLoc.N_ROADWAY, 2);
                            if (locCodes.Count > 0)
                            {
                                middleLoc = LocationHelper.GetLoc(locCodes[0]);
                            }
                            // 查询货位容器编码 、目标容器编码
                            var locCntrRels = LocationHelper.GetLocCntrRel(startLoc.S_CODE);
                            if (locCntrRels.Count > 0)
@@ -262,56 +224,79 @@
                            LogHelper.Info($"库内没有物料:{model.itemCode}", "WMS");
                            break;
                        }
                        if (endLoc != null)
                        var container = ContainerHelper.GetCntr(descCntrCode);
                        if (container != null)
                        {
                            var wmsTask = new WMSTask()
                            int isExistBaseTray = 2;
                            if (container.N_TYPE == 4)
                            {
                                S_CNTR_CODE = descCntrCode,
                                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 = model.taskNo,
                                S_OP_DEF_NAME = "成型机叫料出库任务",
                                N_PRIORITY = model.priority,
                                T_START_TIME = DateTime.Now,
                            };
                                isExistBaseTray = 1;
                            }
                            if (WMSHelper.CreateWmsTask(wmsTask))
                            // 查询接驳位
                            middleLoc = WMSHelper.getAgvJBLoc(startLoc.N_ROADWAY, 2, isExistBaseTray, 2);
                            if (endLoc != null)
                            {
                                // 创建一段出库任务
                                WCSTask wcsTask = new WCSTask()
                                string taskType = "成型机叫料出库任务";
                                if (model.taskType == 2)
                                {
                                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
                                    S_OP_CODE = wmsTask.S_CODE,
                                    S_CODE = WCSHelper.GenerateTaskNo(),
                                    S_CNTR_CODE = cntrCode,
                                    S_TYPE = wmsTask.S_TYPE + "-1",
                                    taskType = "抽检叫料出库任务";
                                }
                                var wmsTask = new WMSTask()
                                {
                                    S_CNTR_CODE = descCntrCode,
                                    S_CODE = WMSHelper.GenerateTaskNo(),
                                    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 = 1,
                                    S_END_LOC = endLoc.S_CODE,
                                    S_END_AREA = endLoc.S_AREA_CODE,
                                    S_TYPE = taskType,
                                    S_OP_DEF_CODE = model.taskNo,
                                    S_OP_DEF_NAME = "叫料出库任务",
                                    N_PRIORITY = model.priority,
                                    T_START_TIME = DateTime.Now,
                                };
                                if (WCSHelper.CreateTask(wcsTask))
                                if (WMSHelper.CreateWmsTask(wmsTask))
                                {
                                    // 起点、接驳点加锁
                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                    // 创建一段出库任务
                                    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 = cntrCode,
                                        S_TYPE = wmsTask.S_TYPE + "-1",
                                        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 = 1,
                                        T_START_TIME = DateTime.Now,
                                    };
                                    // 更新作业任务状态
                                    wmsTask.N_B_STATE = 1;
                                    WMSHelper.UpdateTaskState(wmsTask);
                                    taskNum++;
                                    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);
                                        taskNum++;
                                    }
                                }
                            }
                        }
                        else
                        {
                            result.ResultCode = 1;
                            result.ResultMsg = $"容器:{cntrCode}不存在";
                        }
                    }
@@ -346,46 +331,14 @@
            ReturnResult result = new ReturnResult();
            try
            {
                if(model.itemInfo != null && model.itemInfo.Count > 0)
                {
                    foreach (var item in model.itemInfo)
                    {
                        // 将MES的物料状态转化成WMS可识别的物料状态
                        if (item.jdge == "" || item.jdge == null)
                        {
                            item.jdge = "OK";
                        }
                        else if (item.jdge != "OK")
                        {
                            item.jdge = "HOLD";
                        }
                        var overage = WMSHelper.getOverage(item.bc_entried);
                        if (overage != null && overage.OVERAGE != 0)
                        {
                            DateTime txndate = DateTime.Parse(item.txndate);
                            DateTime minTime = txndate.AddHours(overage.MINHOUR);
                            DateTime maxTime = txndate.AddDays(overage.OVERAGE);
                            item.effective_time = minTime.ToString("yyyy-MM-dd HH:mm:ss");
                            item.expiration_time = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
                        }
                        else
                        {
                            result.ResultCode = 1;
                            result.ResultMsg = $"未查询到物料存放时间配置信息,条形码:{item.bc_entried}";
                            return result;
                        }
                    }
                }
                var container = ContainerHelper.GetCntr(model.trayCode);
                if (container != null)
                if (container != null)
                {
                    Location startLoc = LocationHelper.GetLoc(model.startLoc);
                    Location endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, model.startLoc, 2);
                    if (endLoc != null)
                    var instockEndLocResult = WMSHelper.GetInstockEndLoc( 0, container.N_TYPE, 0, null, model.startLoc);
                    if (instockEndLocResult.endLoc != null && instockEndLocResult.agvLoc != null)
                    {
                        var endLoc = instockEndLocResult.endLoc;
                        string cntrCode = model.trayCode;
                        var locCntrRels = LocationHelper.GetLocCntr(model.startLoc);
                        if (locCntrRels.Count > 0)
@@ -445,8 +398,13 @@
                    else
                    {
                        result.ResultCode = 1;
                        result.ResultMsg = "没有空余的货位";
                        result.ResultMsg = "立库没有空余的货位";
                    }
                }
                else
                {
                    result.ResultCode = 1;
                    result.ResultMsg = "WMS系统中没有该容器";
                }
            }
            catch (Exception ex)
@@ -564,117 +522,19 @@
            try
            {
                Location startLoc = LocationHelper.GetLoc(loc);
                Location endLoc = WMSHelper.GetInstockEndLoc(0, loc, 2);
                if (endLoc != null && startLoc != null)
                {
                    string trayCode = null;
                    var locCntrRels = LocationHelper.GetLocCntrRel(loc);
                    if (locCntrRels.Count > 0)
                    {
                       var container = ContainerHelper.GetCntr(locCntrRels[0].S_CNTR_CODE);
                        if (container.N_TYPE == 0)
                        {
                            trayCode = container.S_CODE;
                        }
                    }
                    else
                    {
                        trayCode = ContainerHelper.GenerateCntrNo();
                        ContainerHelper.AddCntr(trayCode, 0);
                    }
                    if (trayCode != null)
                    {
                        var wmsTask = new WMSTask()
                        {
                            S_CNTR_CODE = trayCode,
                            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 = taskNo,
                            S_OP_DEF_NAME = "母拖入库任务",
                            N_PRIORITY = 1,
                            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 + "-1",
                                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_SCHEDULE_TYPE = "WCS",
                                N_PRIORITY = 1,
                                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);
                            }
                        }
                    }
                }
                else
                if (startLoc == null)
                {
                    result.ResultCode = 1;
                    result.ResultMsg = "没有空余的货位";
                    result.ResultMsg = "开始货位不存在!";
                    return result;
                }
            }
            catch (Exception ex)
            {
                result.ResultCode = 1;
                result.ResultMsg = "WMS内部错误,请联系开发人员排查";
                LogHelper.Info($"WMS内部错误,错误原因:{ex.Message}", "WMS");
            }
            return result;
        }
        /// <summary>
        /// 6.1.母拖入库任务
        /// </summary>
        /// <param name="loc"></param>
        /// <param name="wmsTaskNo"></param>
        /// <returns></returns>
        public static ReturnResult autoBaseTrayInStock(string loc, string wmsTaskNo)
        {
            ReturnResult result = new ReturnResult();
            try
            {
                var cst = WCSHelper.GetTaskByStart(loc);
                if (cst == null)
                if (cst == null)
                {
                    Location startLoc = LocationHelper.GetLoc(loc);
                    Location endLoc = null;
                    var baseTrayBufferLoc = Settings.baseTrayBufferLocList.Where(a => a.bufferOutLoc == loc).FirstOrDefault();
                    if (baseTrayBufferLoc != null)
                    var instockEndLocResult = WMSHelper.GetInstockEndLoc(0, 0, 0, null, loc);
                    if (instockEndLocResult.endLoc != null && instockEndLocResult.agvLoc != null)
                    {
                        endLoc = LocationHelper.GetLoc(baseTrayBufferLoc.bufferInLoc);
                    }
                    if (endLoc == null || endLoc.N_CURRENT_NUM > 0)
                    {
                        endLoc = WMSHelper.GetInstockEndLoc(0, loc, 2);
                    }
                    if (endLoc != null && startLoc != null)
                    {
                        var endLoc = instockEndLocResult.endLoc;
                        string trayCode = null;
                        var locCntrRels = LocationHelper.GetLocCntrRel(loc);
                        if (locCntrRels.Count > 0)
@@ -693,27 +553,49 @@
                        if (trayCode != null)
                        {
                            // 创建一段入库任务
                            WCSTask wcsTask = new WCSTask()
                            var wmsTask = new WMSTask()
                            {
                                S_OP_CODE = wmsTaskNo,
                                S_CODE = WCSHelper.GenerateTaskNo(),
                                S_CNTR_CODE = trayCode,
                                S_TYPE = "母拖入库任务",
                                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_SCHEDULE_TYPE = "WCS",
                                S_TYPE = "母拖入库任务",
                                S_OP_DEF_CODE = taskNo,
                                S_OP_DEF_NAME = "母拖入库任务",
                                N_PRIORITY = 1,
                                T_START_TIME = DateTime.Now,
                            };
                            if (WCSHelper.CreateTask(wcsTask))
                            if (WMSHelper.CreateWmsTask(wmsTask))
                            {
                                // 起点、终点加锁
                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                // 创建一段入库任务
                                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 + "-1",
                                    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_SCHEDULE_TYPE = "WCS",
                                    N_PRIORITY = 1,
                                    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);
                                }
                            }
                        }
                    }
@@ -723,6 +605,7 @@
                        result.ResultMsg = "没有空余的货位";
                    }
                }
            }
            catch (Exception ex)
            {
@@ -739,106 +622,17 @@
        /// <param name="loc"></param>
        /// <param name="taskNo"></param>
        /// <returns></returns>
        public static ReturnResult baseTrayOutStock(string loc ,string taskNo ,int exclude = 1)
        public static ReturnResult baseTrayOutStock(string loc ,string taskNo)
        {
            LogHelper.Info("【母拖出库任务】开始下发母拖出库任务", "WMS");
            ReturnResult result = new ReturnResult();
            try
            {
                Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0, exclude);
                Location endLoc = LocationHelper.GetLoc(loc);
                var agvJBLoc = Settings.getAgvJBLoc(loc);
                if (startLoc != null)
                {
                    string trayCode = null;
                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
                    if (locCntrRels.Count == 1)
                    {
                        trayCode = locCntrRels[0].S_CNTR_CODE;
                    }
                    if (trayCode != null)
                    {
                        var wmsTask = new WMSTask()
                        {
                            S_CNTR_CODE = trayCode,
                            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 = taskNo,
                            S_OP_DEF_NAME = "母拖出库任务",
                            N_PRIORITY = 1,
                            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 + "-1",
                                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_SCHEDULE_TYPE = "WCS",
                                N_PRIORITY = 1,
                                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);
                            }
                        }
                    }
                }
                else
                {
                    result.ResultCode = 1;
                    result.ResultMsg = "没有空余的母拖";
                    LogHelper.Info("【母拖出库任务】库内没有空余的母拖", "WMS");
                }
            }
            catch (Exception ex)
            {
                result.ResultCode = 1;
                result.ResultMsg = "WMS内部错误,请联系开发人员排查";
                LogHelper.Info($"WMS内部错误,错误原因:{ex.Message}", "WMS");
            }
            return result;
        }
        /// <summary>
        /// 7.1.母拖出库任务(AGV)
        /// </summary>
        /// <param name="loc"></param>
        /// <param name="wmsTaskNo"></param>
        /// <returns></returns>
        public static ReturnResult autoBaseTrayOutStock(string loc, string wmsTaskNo)
        {
            ReturnResult result = new ReturnResult();
            try
            {
                var cst = WCSHelper.GetTaskByEnd(loc);
                if (cst == null)
                if (cst == null)
                {
                    Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0, 0);
                    Location startLoc = WMSHelper.GetEmptyTrayStartLoc(0);
                    Location endLoc = LocationHelper.GetLoc(loc);
                    if (startLoc != null)
                    {
                        string trayCode = null;
@@ -847,30 +641,52 @@
                        {
                            trayCode = locCntrRels[0].S_CNTR_CODE;
                        }
                        if (trayCode != null)
                        {
                            // 创建入库任务
                            WCSTask wcsTask = new WCSTask()
                            var wmsTask = new WMSTask()
                            {
                                S_OP_CODE = wmsTaskNo,
                                S_CODE = WCSHelper.GenerateTaskNo(),
                                S_CNTR_CODE = trayCode,
                                S_TYPE = "母拖出库任务",
                                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_SCHEDULE_TYPE = "WCS",
                                S_TYPE = "母拖出库任务",
                                S_OP_DEF_CODE = taskNo,
                                S_OP_DEF_NAME = "母拖出库任务",
                                N_PRIORITY = 1,
                                T_START_TIME = DateTime.Now,
                            };
                            if (WCSHelper.CreateTask(wcsTask))
                            if (WMSHelper.CreateWmsTask(wmsTask))
                            {
                                // 起点、接驳点、终点加锁
                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                                // 创建一段入库任务
                                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 + "-1",
                                    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_SCHEDULE_TYPE = "WCS",
                                    N_PRIORITY = 1,
                                    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);
                                }
                            }
                        }
                    }
@@ -878,8 +694,9 @@
                    {
                        result.ResultCode = 1;
                        result.ResultMsg = "没有空余的母拖";
                        LogHelper.Info("【母拖出库任务】库内没有空余的母拖", "WMS");
                    }
                }
                }
            }
            catch (Exception ex)
            {
@@ -996,84 +813,6 @@
        }
        /// <summary>
        /// 读码反馈
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static ReturnResult readCodeFeedback(ReadCodeFeedbackModel model)
        {
            ReturnResult responseResult = new ReturnResult();
            var locCntrRels = LocationHelper.GetLocCntr(model.locCode);
            if (locCntrRels.Count > 0)
            {
                foreach (var locCntr in locCntrRels)
                {
                    var container = ContainerHelper.GetCntr(locCntr.S_CNTR_CODE);
                    if (container != null && container.N_TYPE != 0)
                    {
                        var mst = WMSHelper.GetWmsTaskByCntr(locCntr.S_CNTR_CODE);
                        if (mst != null)
                        {
                            int actType = 1;
                            if (locCntr.S_CNTR_CODE == model.trayCode)
                            {
                                if (mst.S_END_LOC == "虚拟货位")
                                {
                                    // 获取入库终点
                                    var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, model.locCode, 1);
                                    if (endLoc != null)
                                    {
                                        mst.S_END_LOC = endLoc.S_CODE;
                                        mst.S_END_AREA = endLoc.S_AREA_CODE;
                                    }
                                    else
                                    {
                                        LogHelper.Info("【WCS读码反馈】,没有获取到终点货位,可能立库没有空余货位", "WMS");
                                        responseResult.ResultCode = 1;
                                        responseResult.ResultMsg = "没有获取到终点货位,可能立库没有空余货位";
                                        return responseResult;
                                    }
                                }
                            }
                            else
                            {
                                LogHelper.Info($"【WCS读码反馈】,托盘码匹配失败,反馈托盘码:{model.trayCode} ,货位{model.locCode}托盘码:{locCntr.S_CNTR_CODE}", "WMS");
                                // 获取入库终点
                                var endLoc = WMSHelper.getErrorBufferAreaLoc();
                                if (endLoc != null)
                                {
                                    actType = 2;
                                    LocationHelper.UnLockLoc(mst.S_END_LOC);
                                    mst.S_END_LOC = endLoc.S_CODE;
                                    mst.S_END_AREA = endLoc.S_AREA_CODE;
                                }
                                else
                                {
                                    LogHelper.Info("【WCS读码反馈】,没有获取到缓存货位", "WMS");
                                    responseResult.ResultCode = 1;
                                    responseResult.ResultMsg = "没有获取到缓存货位";
                                    return responseResult;
                                }
                            }
                            // 创建下个任务
                            if (mst.S_END_LOC != "虚拟货位")
                            {
                                WMSHelper.UpdateTaskEnd(mst);
                                WCSCore.createLastTask(model.locCode, mst, actType);
                            }
                        }
                        else
                        {
                            LogHelper.Info($"【WCS读码反馈】,容器:{model.trayCode}没有查询到执行中任务", "WMS");
                        }
                    }
                }
            }
            return responseResult;
        }
        /// <summary>
        /// 同步物料信息
        /// </summary>
        /// <param name="matls"></param>
@@ -1087,22 +826,19 @@
            {
                ItemBarcodeInfo itemBarcodeInfo = new ItemBarcodeInfo() 
                {
                    N_RECID = matl.recid,
                    S_ITEM = matl.item,
                    S_BC_ENTRIED = matl.bc_entried,
                    S_BC_ENTRIED = matl.barcode,
                    S_TOOLING_CODE = matl.toolineCode,
                    S_MCN = matl.mcn,
                    S_OPR = matl.opr,
                    TXNDATE = DateTime.Parse(matl.txndate, enGB) ,
                    S_SHIFT = matl.shift,
                    N_QTY = matl.qty,
                    N_STOCK = matl.stock,
                    S_LOKASI = matl.lokasi,
                    S_SARANA = matl.sarana,
                    BOM1 = matl.bom1,
                    BOM2 = matl.bom2,
                    BOM3 = matl.bom3,
                    S_FOVRAGE = matl.fovrage,
                    S_JDGE = matl.jdge,
                    LAST_MODIFY_TIME = matl.last_modify_time
                    N_OVERAGE = matl.overagv,
                    N_MINHOUR = matl.minhour,
                    N_PRODUCT_TYPE_CODE = matl.productTypeCode,
                    LAST_MODIFY_TIME = matl.last_modify_time,
                };
                itemBarcodeInfos.Add(itemBarcodeInfo);
            }
@@ -1111,102 +847,89 @@
            if (!bo) 
            {
                responseResult.ResultCode = 1;
                responseResult.ResultMsg = "同步物料条码信息失败";
                responseResult.ResultMsg = "同步GT条码物料信息失败";
            }
            return responseResult;
        }
        /// <summary>
        /// 同步物料状态信息
        /// 同步条码状态信息
        /// </summary>
        /// <param name="updateMatlStatuses"></param>
        /// <returns></returns>
        public static ReturnResult synUpdateMatlStatus(List<UpdateMatlStatus> updateMatlStatuses)
        public static ReturnResult synBarcodeStatus(List<UpdateMatlStatus> updateMatlStatuses)
        {
            ReturnResult responseResult = new ReturnResult();
            var bo = WMSHelper.batchUpdateItemStatus(updateMatlStatuses);
            if (!bo)
            List<IwmsSemiBldBcstatus> list = new List<IwmsSemiBldBcstatus> ();
            if (updateMatlStatuses.Count > 0)
            {
                responseResult.ResultCode = 1;
                responseResult.ResultMsg = "同步物料状态信息失败";
            }
            return responseResult;
        }
        /// <summary>
        /// 同步更新物料存放时间配置信息
        /// </summary>
        /// <param name="overages"></param>
        /// <returns></returns>
        public static ReturnResult synUpdateMatlTimeConfig(List<MatlOverage> overages)
        {
            ReturnResult responseResult = new ReturnResult();
            if (overages != null && overages.Count > 0)
            {
                List<Overage> overageList = new List<Overage>();
                foreach (var item in overages)
                foreach (var item in updateMatlStatuses)
                {
                    Overage overage = new Overage
                    IwmsSemiBldBcstatus bCstatus = new IwmsSemiBldBcstatus()
                    {
                        MCNGRP = item.mcngrp,
                        ITEMPATT = item.itempatt,
                        OVERAGE = item.overage,
                        MINHOUR = float.Parse(item.minhour.ToString()),
                        FLAG_STS = item.flag_sts,
                        RECID = item.recid,
                        N_RECID = item.recid,
                        S_BC_ENTRIED = item.barcode,
                        S_MCNGRP = item.mcngrp,
                        S_JDGE = item.jdge,
                        LAST_MODIFY_TIME = item.last_modify_time
                    };
                    overageList.Add(overage);
                    list.Add(bCstatus);
                }
                var bo = WMSHelper.batchUpdateMatlTimeConfig(overageList);
                var bo = WMSHelper.synBarcodeStatus(list);
                if (!bo)
                {
                    responseResult.ResultCode = 1;
                    responseResult.ResultMsg = "同步物料状态信息失败";
                    responseResult.ResultMsg = "同步条码状态信息失败";
                }
            }
            return responseResult;
        }
        /// <summary>
        /// 记录数据同步时间
        /// 同步条码状态信息
        /// </summary>
        /// <param name="model"></param>
        /// <param name="updateMatlStatuses"></param>
        /// <returns></returns>
        public static ReturnResult recordDataSynTime(RecordDataSynTimeModel model)
        public static ReturnResult synSampleStatus(List<UpdateMatlStatus> updateMatlStatuses)
        {
            ReturnResult responseResult = new ReturnResult();
            SynDataTimeRecord record = new SynDataTimeRecord()
            List<IwmsSemiBldBcsample> list = new List<IwmsSemiBldBcsample>();
            if (updateMatlStatuses.Count > 0)
            {
                S_SYN_TIME = model.sysTime,
                N_SYN_NUM = model.synNum,
                RECORD_TABLE = model.recordTable
            };
            var bo = WMSHelper.addSynDataTimeReord(record);
            if (!bo)
            {
                responseResult.ResultCode = 1;
                responseResult.ResultMsg = "记录数据同步时间失败";
                foreach (var item in updateMatlStatuses)
                {
                    IwmsSemiBldBcsample bCstatus = new IwmsSemiBldBcsample()
                    {
                        N_RECID= item.recid,
                        S_BC_ENTRIED = item.barcode,
                        S_MCNGRP = item.mcngrp,
                        S_JDGE = item.jdge,
                        LAST_MODIFY_TIME = item.last_modify_time
                    };
                    list.Add(bCstatus);
                }
                var bo = WMSHelper.synSamplingStatus(list);
                if (!bo)
                {
                    responseResult.ResultCode = 1;
                    responseResult.ResultMsg = "同步条码状态信息失败";
                }
            }
            return responseResult;
        }
        /// <summary>
        /// 查询上一次的数据同步时间
        /// </summary>
        /// <param name="recordTable"></param>
        /// <param name="tableType"></param>
        /// <returns></returns>
        public static ReturnResult findLastDataSynTime(string recordTable)
        public static ReturnResult findDataLastSynTime(int tableType)
        {
            ReturnResult responseResult = new ReturnResult();
            var synDataTime = WMSHelper.getLastDataSynTime(recordTable);
            if (synDataTime != null)
            {
                Dictionary<string, string> map = new Dictionary<string, string>();
                map.Add("S_SYN_TIME", synDataTime.S_SYN_TIME);
                map.Add("RECORD_TABLE", synDataTime.RECORD_TABLE);
                responseResult.data = map;
            }
            var synDataTime = WMSHelper.getDataLastSynTime(tableType);
            responseResult.data = synDataTime;
            return responseResult;
        }
@@ -1271,10 +994,11 @@
        public class CreateOutOrderModel
        {
            public string taskNo { get; set; } // 任务号
            public string trayCode { get; set; } // 任务号
            public string trayCode { get; set; } // 托盘号
            public string itemCode { get; set; } // 物料编码
            public string endLoc { get; set; } // 终点货位
            public int priority { get; set; } = 0; // 优先级 默认0
            public int taskType { get; set; } = 1; // 1.成型机叫料任务 2.抽检出库任务
        }
        public class EmptyTrayOutOrderModel
@@ -1289,7 +1013,7 @@
        {
            public string taskNo { get; set; } // 任务号
            public string startLoc { get; set; } // 起点货位
            public string taskType { get; set; } // 任务类型 入库回库类型,1:机台半制品入库,2:成型机余料回库,3:成型机空托回库
            public string taskType { get; set; } // 任务类型 入库回库类型,1:机台半制品入库,2:成型机余料入库,3:成型机空托入库,4:半制品抽检入库
            public string trayCode { get; set; } // 托盘号
            public int priority { get; set; } = 0;// 优先级 默认传0
            public List<GTItemInfo> itemInfo { get; set; }
@@ -1299,16 +1023,15 @@
        {
            public string item { get; set; } // 物品代码
            public string bc_entried { get; set; } // 条形码编号
            public string toolineCode { get; set; } // 工装条码
            public string mcn { get; set; } // 机器代码编号
            public string opr { get; set; } // 操作员
            public string txndate { get; set; } // 生产时间
            public string shift { get; set; } // 工作班次
            public int qty { get; set; } // 产品数量
            public string sarana { get; set; } // 产品材料的托盘/盒/推车/货车ID
            public string fovrage { get; set; } // 是否过期的状态 Y=过期,N=未过期
            public string jdge { get; set; } // 质量状态 OK=产品合格,NG=产品不合格,HLM=产品待定
            public string effective_time { get; set; } // 生效时间 (yyyy-MM-dd HH:mm:ss)
            public string expiration_time { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss)
            public string jdge { get; set; } // 质量状态 OK=产品合格,HOLD = 产品待定
            public int overage { get; set; } // 生效时间 (yyyy-MM-dd HH:mm:ss)
            public int minhour { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss)
            public int productTypeCode { get; set; } // 失效时间 (yyyy-MM-dd HH:mm:ss)
        }