1
pulg
2025-06-30 7d331e13fef4abcec306745dbe9721bafbaf1821
1
2个文件已修改
139 ■■■■■ 已修改文件
HH.WCS.QingXiNongfu/Program.cs 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/Monitor.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/Program.cs
@@ -1,4 +1,5 @@
using HH.WCS.QingXigongchang.api;
using HH.WCS.QingXigongchang.core;
using HH.WCS.QingXigongchang.device;
using HH.WCS.QingXigongchang.process;
using HH.WCS.QingXigongchang.util;
@@ -734,34 +735,34 @@
                {
                    GetTask(Monitor.A),//计数器  清除 控制台
                    //添加任务推送线程
                    //GetTask(TaskCore.Dispatch),
                    //GetTask(TaskCore.Kuronggg),
                    GetTask(TaskCore.Dispatch),
                    GetTask(TaskCore.Kuronggg),
                    //GetTask(TaskCore.ChargeHostAgv),
                    ////手动转运
                    //GetTask(Monitor.BottleCapAuto2),
                    ///// 自动转运
                    //GetTask(Monitor.BottleCapAuto3, 1),
                    ////锁排 - 清除  排空了才解锁。
                    //GetTask(Monitor.BottleCapAuto4),
                    ////自动领料 - 上输送线
                    //GetTask(Monitor.BottleCapAuto5),
                    ////空框中转,转拆框
                    //GetTask(Monitor.BottleCapAuto6),
                    ////出库单批分
                    //GetTask(Monitor.BottleCapAuto7),
                    ////自动中转
                    //GetTask(Monitor.BB7),
                    GetTask(TaskCore.ChargeHostAgv),
                    //手动转运
                    GetTask(Monitor.BottleCapAuto2),
                    /// 自动转运
                    GetTask(Monitor.BottleCapAuto3, 1),
                    //锁排 - 清除  排空了才解锁。
                    GetTask(Monitor.BottleCapAuto4),
                    //自动领料 - 上输送线
                    GetTask(Monitor.BottleCapAuto5),
                    //空框中转,转拆框
                    GetTask(Monitor.BottleCapAuto6),
                    //出库单批分
                    GetTask(Monitor.BottleCapAuto7),
                    //自动中转
                    GetTask(Monitor.BB7),
                    //原材料 自动中转 - 展示流程。 前期测试用的
                    //GetTask(Monitor.AutoRun),
                    GetTask(Monitor.YwlTKPEBQ_Auto),//标签无菌水线出入库。
                    //原材料的 新中转流程。 
                    //GetTask(Monitor.YWL_ZX_Turn),
                    //GetTask(Monitor.BottTask),// 纸箱自动中转
                    //GetTask(Monitor.AutoRunABD),
                    //GetTask(Monitor.AutoRun13TSJ),
                    //GetTask(Monitor.ZdzyABArea),
                    //  GetTask(Monitor.Qchc),
                    GetTask(Monitor.YWL_ZX_Turn),
                    GetTask(Monitor.BottTask),// 纸箱自动中转
                    GetTask(Monitor.AutoRunABD),
                    GetTask(Monitor.AutoRun13TSJ),
                    GetTask(Monitor.ZdzyABArea),
                      GetTask(Monitor.Qchc),
                    
                    //GetTask(Monitor.AutoTK_PE),//提扣 - PE膜出入库
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -2128,7 +2128,6 @@
            }
        }
        /// <summary>
        /// 入库退库。 知道 零头满托。正常匹配。
        /// </summary>
@@ -2139,15 +2138,14 @@
        private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3)
        {
            bool ord = v2.Contains("提扣");
            var chi = new SqlHelper<object>().GetInstance();
            var newDb = chi.CopyNew();
            var yx = klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList();
            foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList())
            foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key))
            {
                Location EndBit = null;
                var rsfull = ptR.OrderBy(X => X.N_COL).ToList().FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();//起点
                var ptrlist = ptR.OrderBy(X => X.N_COL).ToList();
                var rsfull = ptrlist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
                if (rsfull != null)
                {
                    var cntrlist = ptrlist.FindAll(x => x.S_LOC_CODE == rsfull.S_LOC_CODE).Select(x => x.S_CNTR_CODE);
                    var rklist = LocationHelper.GetRowLock(v);
                    var inlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (rsfull.S_NOTE + rsfull.HalfOrFull) && x.S_LOCK_STATE.Contains("入库锁"));
                    var NormalList = LocationHelper.GetAreaNormalLocList(v);
@@ -2159,83 +2157,55 @@
                        {
                            var srloclist = rs.OrderBy(x => x.N_COL).ToList();
                            var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
                            EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0));
                            EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && (x.N_CURRENT_NUM + cntrlist.Count()) <= Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0));
                            if (EndBit != null)
                                break;
                        }
                    }
                    else
                    {
                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct().ToList();
                        var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct();
                        var EptRowlist = NormalList.FindAll(x => !hasNum.Contains(x.N_ROW));
                        if (EptRowlist.Any())
                        {
                            EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault();
                        }
                        else
                        {
                            if (hasNum.Any())
                            {
                                //有相同物料 相同标签的继续入
                                List<Location> lstCanOutL = new List<Location>();
                                if (!string.IsNullOrEmpty(rsfull.S_BATCH_NO))
                                {
                                    lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && t.S_BATCH_NO == rsfull.S_BATCH_NO).ToList();
                                }
                                else
                                {
                                    lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && string.IsNullOrEmpty(t.S_BATCH_NO)).ToList();
                                }
                                if (lstCanOutL.Any())
                                {
                                    var loclist1 = NormalList.FindAll(x => lstCanOutL.Select(f => f.N_ROW).Distinct().ToList().Contains(x.N_ROW));
                                    foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)))
                                    {
                                        var srloclist = rs.OrderBy(x => x.N_COL).ToList();
                                        var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault();
                                        EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0));
                                        if (EndBit != null)
                                            break;
                                    }
                                }
                            }
                        }
                    }
                    if (EndBit != null)
                    {
                        var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-入库", new List<string> { rsfull.S_CNTR_CODE }, rsfull.N_CURRENT_NUM, EndBit.N_CURRENT_NUM + 1, 1, 62);
                        var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-入库", cntrlist.ToList(), rsfull.N_CURRENT_NUM + 1 - cntrlist.Count(), EndBit.N_CURRENT_NUM + 1, 1, 62);
                        LogHelper.CSucessLog($"from {rsfull.S_LOC_CODE} to {EndBit.S_LOC_CODE} {(v2 + "-入库")} ,创建{res} ");
                        //if (res && inlock == null)
                        //{
                        //    var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW };
                        //    var db = new SqlHelper<object>().GetInstance();
                        //    db.Insertable(r).ExecuteCommand();
                        //    //else
                        //    //{
                        //    //    if (inlock.N_ROW != EndBit.N_ROW)
                        //    //    {
                        //    //        db.Deleteable(inlock).ExecuteCommand();
                        //    //        var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First();
                        //    //        if (row != null)
                        //    //        {
                        //    //            if (row.S_LOCK_SRC != r.S_LOCK_SRC)
                        //    //            {
                        //    //                db.Deleteable(row).ExecuteCommand();
                        //    //                db.Insertable(r).ExecuteCommand();
                        //    //            }
                        //    //        }
                        //    //        else db.Insertable(r).ExecuteCommand();
                        //    //    }
                        //    //}
                        //}
                        if (res && inlock == null)
                        {
                            var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW };
                            var db = new SqlHelper<object>().GetInstance();
                            db.Insertable(r).ExecuteCommand();
                            //else
                            //{
                            //    if (inlock.N_ROW != EndBit.N_ROW)
                            //    {
                            //        db.Deleteable(inlock).ExecuteCommand();
                            //        var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First();
                            //        if (row != null)
                            //        {
                            //            if (row.S_LOCK_SRC != r.S_LOCK_SRC)
                            //            {
                            //                db.Deleteable(row).ExecuteCommand();
                            //                db.Insertable(r).ExecuteCommand();
                            //            }
                            //        }
                            //        else db.Insertable(r).ExecuteCommand();
                            //    }
                            //}
                        }
                    }
                    Thread.Sleep(1000);
                }
            }
        }
        private static void YwlBQ_CreSXOutOrder(Settings.deviceInfo plc, List<YWLWorkOrder> yuworders)
        {
            //LogHelper.Info($"{plc.deviceName}-标签 {yuworders.FirstOrDefault()?.SQL_WorkNo}");