11
cjs
7 天以前 1b4deb836c68efb689e13d3512888ae04fc99f09
11
4个文件已修改
206 ■■■■■ 已修改文件
HH.WCS.Mobox3.NongFuLinZhi/Program.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/Program.cs
@@ -100,6 +100,7 @@
                tasks.Add(GetTask(Monitor.BottleBlankTransportation)); //接驳位入库
                tasks.Add(GetTask(Monitor.PPFDFullIn)); //瓶坯翻斗机非急产满框区补满托
                tasks.Add(GetTask(Monitor.PGFDFullIn)); //瓶盖翻斗机非急产满框区补满托
                tasks.Add(GetTask(Monitor.PGFDFullInJC)); //瓶盖翻斗机急产满框区补满托 空托区域补空托
                tasks.Add(GetTask(Monitor.PPFDFullInEmpty)); //瓶坯注塑机非急产空框区补空托
HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
@@ -307,29 +307,111 @@
        /// </summary>
        internal static void PPFDFullInEmpty()
        {
            //瓶坯非即产空框区堆叠库区一共四个货位,如果有三个货位是满的,就开始转运到瓶坯库区
            //如果满货位小于等于一就开始从满框缓存区空框区域转运,如果满框缓存区空框区域无空托,则从瓶坯库转运
            var db = new SqlHelper<object>().GetInstance();
            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "N" && a.S_WorkState == "执行中").First();
            if(workInfo != null)
            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产空框" && a.enable == 1).FirstOrDefault();
            if (areaInfo != null)
            {
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产空框" && a.enable == 1).FirstOrDefault();
                if(areaInfo != null)
                var LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY).ToList();
                if(LocList.Count <= 1)
                {
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First();
                    if(locInfo != null)
                    //需要从库区补充空托
                    Location location = TaskProcess.FJCKTLoc();
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").First();
                    if(location != null && locInfo != null)
                    {
                        //生成任务
                        Location location = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", "");
                        if (location != null)
                        string cntrCode = getCntrCode(db, location);
                        //创建作业
                        WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯");
                    }
                }
                if (LocList.Count >= 2)
                {
                    //需要将空托转运到库区
                    foreach (var a in LocList)
                    {
                        if(a.S_LOCK_STATE == "无")
                        {
                            string cntrCode = getCntrCode(db, location);
                            //生成任务
                            string cntrCode = getCntrCode(db, a);
                            //创建作业
                            WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯");
                            WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "瓶坯非急产空框入库", cntrCode, "瓶坯");
                            break;
                        }
                    }
                }
                else
            }
            #region
            //var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "N" && a.S_WorkState == "执行中").First();
            //if(workInfo != null)
            //{
            //    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产空框" && a.enable == 1).FirstOrDefault();
            //    if(areaInfo != null)
            //    {
            //        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First();
            //        if(locInfo != null)
            //        {
            //            //生成任务
            //            Location location = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", "");
            //            if (location != null)
            //            {
            //                string cntrCode = getCntrCode(db, location);
            //                //创建作业
            //                WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯");
            //            }
            //        }
            //    }
            //    else
            //    {
            //        LogHelper.Info("瓶坯非即产空框 未配置");
            //    }
            //}
            #endregion
        }
        internal static void PGFDFullInJC()
        {
            var db = new SqlHelper<object>().GetInstance();
            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "Y" && a.S_WorkState == "执行中").First();
            if(workInfo != null)
            {
                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框" && a.enable == 1).FirstOrDefault();
                if(areaInfo != null)
                {
                    LogHelper.Info("瓶坯非即产空框 未配置");
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First();
                    if (locInfo != null)
                    {
                        //开始转运
                        Location startLoca = TaskProcess.BCPInOrOut(db, false, "瓶坯即产满框缓存", workInfo.S_ItemCode);
                        if (startLoca != null)
                        {
                            //创建作业
                            string cntrCode = getCntrCode(db, startLoca);
                            WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo.S_CODE, "出库", "瓶坯急产补满框", cntrCode, "");
                        }
                    }
                }
                areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产空框" && a.enable == 1).FirstOrDefault();
                if (areaInfo != null)
                {
                    var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").ToList();
                    if (locInfo.Count == 2)
                    {
                        //开始转运
                        Location startLoca = TaskProcess.BCPInOrOut(db, false, "瓶坯即产满框缓存", "");
                        if (startLoca != null)
                        {
                            //创建作业
                            string cntrCode = getCntrCode(db, startLoca);
                            WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo[0].S_CODE, "出库", "瓶坯急产补空框", cntrCode, "");
                        }
                    }
                }
            }
        }
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -1306,6 +1306,10 @@
                                    .ToList();
                                if (locInfo.Count > 0)
                                {
                                    if(areaName == "瓶坯即产满框缓存")
                                    {
                                        locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList();
                                    }
                                    LogHelper.Info($"入库算法02:查询到可入货位的数量为:{locInfo.Count}");
                                    foreach (var a in locInfo)
                                    {
@@ -1437,6 +1441,10 @@
                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
                        if (locList.Count > 0)
                        {
                            if(areaName == "瓶坯即产满框缓存" && string.IsNullOrEmpty(itemCode))
                            {
                                locList = locList.Where(a => a.N_ROW == 3).ToList();
                            }
                            LogHelper.Info($"出库算法02:查询到可出货位数量:{locList.Count}");
                            foreach (var a in locList)
                            {
@@ -1629,7 +1637,60 @@
            {
                LogHelper.Info($"{endAreaName}未配置");
            }
            if(result == null)
            {
                if(endAreaName == "翻斗机库存空托下线(瓶坯)")
                {
                    //瓶坯非即产空托下线 如果非即产空框库区无法入库,则下线到瓶坯即产满框缓存 4 5 排
                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
                        if (locList.Count > 0)
                        {
                            foreach (var a in locList)
                            {
                                var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && a.S_LOCK_STATE == "无").First();
                                if (rowInfo != null && a.S_LOCK_STATE == "无")
                                {
                                    result = a;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        LogHelper.Info("瓶坯即产满框缓存未配置");
                    }
                }
                if(endAreaName == "翻斗机即产空托下线(瓶坯)")
                {
                    //瓶坯即产空托下线 如果即产空框库区无法入库,则下线到瓶坯即产满框缓存 3 排
                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault();
                    if (areaInfo != null)
                    {
                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_ROW == 3 && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_COL).First();
                        if (locInfo != null )
                        {
                            var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == locInfo.S_AREA_CODE && b.S_ROW == locInfo.S_ROW && locInfo.S_LOCK_STATE == "无").First();
                            if (rowInfo != null && locInfo.S_LOCK_STATE == "无")
                            {
                                result = locInfo;
                            }
                        }
                    }
                    else
                    {
                        LogHelper.Info("瓶坯即产满框缓存未配置");
                    }
                    if(result == null)
                    {
                        BCPEmptyOut(db, "翻斗机库存空托下线(瓶坯)");
                    }
                }
            }
            return result;
        }
@@ -2394,6 +2455,38 @@
            }
        }
        /// <summary>
        /// 计算瓶坯非即产空托起点
        /// </summary>
        /// <returns></returns>
        internal static Location FJCKTLoc()
        {
            var db = new SqlHelper<object>().GetInstance();
            Location result = null;
            //在瓶坯即产满框 查询 4 5两排的空框
            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault();
            if(areaInfo != null)
            {
                var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
                if(locList.Count > 0)
                {
                    foreach (var a in locList)
                    {
                        var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "无").First();
                        if(rowInfo != null && a.S_LOCK_STATE == "无")
                        {
                            result = a;
                            break;
                        }
                    }
                }
            }
            if(result == null)
            {
                result = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", "");
            }
            return result;
        }
    }
}
HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
@@ -703,7 +703,7 @@
                else
                {
                    LogHelper.Info($"入库任务 计算终点,任务类型:{a.S_OP_DEF_NAME}");
                    if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库")
                    if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库" || a.S_OP_DEF_NAME == "瓶坯非急产空框入库")
                    {
                        string itemCode = "";
                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_START_LOC).First();