19598c8162599f635fb340cf6981bf21f11745ae..9b55b6b09630c2874229cdd2a9771a5e290e2f60
2025-06-21 czw
1
9b55b6 对比 | 目录
2025-06-21 czw
清溪。
680743 对比 | 目录
1个文件已添加
5个文件已修改
220 ■■■■ 已修改文件
HH.WCS.QingXiNongfu/HH.WCS.QingXigongchang.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/core/Monitor.cs 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/process/TaskProcess.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/wms/TaskHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/wms/WCSModel.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/原物料方法概述.txt 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.QingXiNongfu/HH.WCS.QingXigongchang.csproj
@@ -170,6 +170,7 @@
    <Compile Include="wms\TaskHelper.cs" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="原物料方法概述.txt" />
    <None Include="App.config" />
    <None Include="packages.config" />
    <Content Include="Static\css\app.d545ec97.css">
HH.WCS.QingXiNongfu/core/Monitor.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls.WebParts;
namespace HH.WCS.QingXigongchang.core
{
@@ -1308,7 +1309,7 @@
            {
                try
                {
                    var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
                    if (!yuworders.Any())
                    {
                        YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ);
@@ -1316,7 +1317,7 @@
                    else
                    {
                        LogHelper.Info($" æ— èŒå‡ºåº“  å·¥å•开启中 ");
                       // æ ‡ç­¾å‡ºåº“。货架直接出到线边
                        // æ ‡ç­¾å‡ºåº“。货架直接出到线边
                        YwlBQ_CreWJOutOrder();
                    }
@@ -1335,7 +1336,7 @@
                try
                {
                    string pline = "T2提升机-标签";
                    var Syuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var Syuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
                    //yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == plc.deviceName && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                    var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 1 && x.SQL_State == "执行中");
@@ -1496,7 +1497,7 @@
                    //YwlPETKOutOrder("YWLTKMKQ", "", "PE叉运");// PE小出库
                    {
                        LogHelper.Info("-收缩膜  å‡ºåº“!");
                        var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
                        var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
                        if (!yuworders.Any())
                        {
                            LogHelper.Info("-收缩膜  å‡ºåº“!没有出库单。");
@@ -2179,6 +2180,7 @@
                    //LogHelper.Info($"{plc.deviceName}-标签{tagLoc.S_LOC_CODE}//{DeviceProcess.doorStatus[ploc]?.info}-----{(!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1")}");
                    if (tagLoc != null)
                    {
                        // è¿™é‡Œéƒ½æ˜¯1层的,所以必走  current_num =1
                        if (tagLoc.N_LAYER == 1 || tagLoc.N_CURRENT_NUM == 1)
                        {
                            // ç›´æŽ¥å‡ºæå‡æœºä½
@@ -2610,7 +2612,7 @@
            }
            ///第一段:出库 -到拆垛或者 æŽ¥é©³ã€‚
            var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList();
            var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => x.TagOverTime).ToList();
        //foreach (var order in yuworders)
        retuse:
@@ -2624,6 +2626,7 @@
                    yuworders.Remove(order);
                    goto retuse;
                }
                var oto = new List<string>();
                //if (!string.IsNullOrEmpty(order.TagOver))
                //    oto = order.TagOver.Split(',').ToList();
@@ -3556,7 +3559,10 @@
            public string area { get; set; }
            public string Row { get; set; }
            /// <summary>
            /// æŽ’
            /// </summary>
            public int Row { get; set; }
        }
        /// <summary>
@@ -3564,7 +3570,60 @@
        /// </summary>
        public static void AutoRun13TSJ()
        {
            var list = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" };
            Action<YWLWorkOrder> _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好 = (od) =>
            {
                LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}对应工单的{od.S_ROW} ç‰©æ–™æ•°é‡ä¸è¶³ã€‚触发转运。");
                // å…ˆçœ‹æ˜¯å¦æœ‰åˆ°è¯¥åº“区的转运任务。
                var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "执行" && X.S_END_AREA == od.S_ROW);
                //1.查看物料是否匹配。
                var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME);
                if (itemTRUN)
                {  //有到该库区的 ç‰©æ–™è½¬è¿ä»»åŠ¡äº†ã€‚ ä¸éœ€è¦ç»§ç»­äº† ã€‚
                    LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}已经存在转运了无需触发转运。");
                    return;
                }
                //人工转运没指定物料,我会自动写回转运单 ç‰©æ–™æ•°æ®ã€‚
                //找CD åŒº å“ªé‡Œæœ‰è¿™ä¸ªç‰©æ–™ã€‚
                Dictitems TrunStart = null;
                foreach (var area in CDlist)
                {
                    if (dsi.TryGetValue(area, out var dictitems1))
                    {
                        var arearowsloc = LocationHelper.GetAreaNormalLocList(area);
                        foreach (var d in dictitems1.FindAll(x => x.ItemCode == od.SQL_ItemCode && x.ItemName == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME))
                        {
                            if (arearowsloc.Exists(x => x.N_ROW == d.Row))
                            {
                                TrunStart = d;
                                break;
                            }
                        }
                    }
                }
                LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}触发转运。转运来源是{JsonConvert.SerializeObject(TrunStart)}");
                if (TrunStart != null)
                    WCSHelper.Do(db =>
                    {
                        db.Insertable(new YWLZXtake
                        {
                            S_START_AREA = TrunStart.area,
                            N_START_ROW = TrunStart.Row,
                            S_END_AREA = od.S_ROW,
                            S_ZX_STATE = "执行",
                            S_ITEM_CODE = od.SQL_ItemCode,
                            S_ITEM_NAME = od.SQL_ItemName,
                            S_CJ_NAME = od.S_CJ_NAME,
                            S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW)
                        }).ExecuteCommand();
                    });
            };
            //var TaskSiggg = Settings.GetTimeStamp();
            //var list = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" };
            //var WorkOrder = new List<YWLWorkOrder>();
            foreach (var PLC in Settings.GetDeviceInfoList().FindAll(X => X.deviceType == 13 && X.enable == 1))
            {
@@ -3619,13 +3678,17 @@
                    foreach (var od in orkOrd.OrderBy(x => x.TagOverTime).ThenBy(x => x.OutNum))
                    //foreach (var od in od2.ToList())
                    {
                        var l2 = new List<string>() { "YWLAQWJ", "YWLBQWJ", "YWLCQSX", "YWLDQWJ" };
                        var l2 = new List<string>() { "YWLAQWJ", "YWLBQWJ" };//, "YWLCQSX", "YWLDQWJ" };
                        l2.Remove(od.S_ROW);
                        var odsr = new List<string> { od.S_ROW }.Concat(l2).Distinct().ToList();
                        l2.Remove(od.TagOver);
                        var odsr = new List<string> { od.TagOver, od.S_ROW }.Concat(l2).Distinct().ToList();
                        ///汇总仓库里最大层是几层。
                        Dictitems Lart = null;
                        foreach (var area in odsr)//od.S_ROW.Split('$'))
                        {
                            if (string.IsNullOrEmpty(area)) continue;
                            if (dsi.TryGetValue(area, out var dictitems1))
                            {
                                foreach (var d in dictitems1.FindAll(x => x.ItemCode == od.SQL_ItemCode && x.ItemName == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME))
@@ -3638,13 +3701,14 @@
                                            Lart = d;
                                    }
                                }
                            }
                        }
                        //等下要检测,如果没有可用排,或者AB库区内物料数<5 å°±è¦ä»ŽCD å¼€å§‹è½¬è¿ã€‚
                        var autoTurn = false;
                        LogHelper.Info($"AutoRun13TSJ ç­›é€‰ç‰©æ–™ åº“区排数据.  {od.SQL_PLineNo} >>{od.OutNum}> {JsonConvert.SerializeObject(Lart)}");
                        // éœ€è¦æ•°é‡ >= ä»“库最大数量。 å°±å¼€å§‹å‡ºåº“。
                        if (Lart != null)
                        {
                            if (od.OutNum >= Lart?.ItemLayer)
                            {
                                var v = new List<string>() { Lart.area };
@@ -3661,15 +3725,14 @@
                                        _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE);
                                        //板型相同
                                        var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First();
                                        LogHelper.Info(rl.S_LOC_CODE + "识别托盘类型。" + JsonConvert.SerializeObject(_clrel0));
                                        LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘类型。" + JsonConvert.SerializeObject(_clrel0));
                                        var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault();
                                        LogHelper.Info(rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem));
                                        LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem));
                                        if (_clcntitem != null)
                                        {
                                            LogHelper.Info("相互是否匹配 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME);
                                            LogHelper.Info("AutoRun13TSJ" + "相互是否匹配 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME + "结果:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME));
                                            if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)
                                            {
                                                StartBit = rl;
                                                break;
                                            }
@@ -3680,18 +3743,40 @@
                                }
                                if (StartBit == null)
                                {
                                    LogHelper.Info($"{od.SQL_PLineNo} å‡ºåº“ {Lart.area}区域没有物料可用起点");
                                    autoTurn = true;
                                    LogHelper.Info("AutoRun13TSJ" + $"{od.SQL_PLineNo} å‡ºåº“ {Lart.area}区域没有物料可用起点");
                                    continue;
                                }
                                else
                                {
                                    //检测指定库区的物料排总数量
                                    if (dsi.TryGetValue(od.S_ROW, out var dictitems1))
                                    {
                                        var rows = dictitems1.Select(x => x.Row).Distinct();
                                        var loclist = LocationHelper.GetLocList(x => x.S_AREA_CODE == od.S_ROW && rows.Contains(x.N_ROW));
                                        var count = loclist.FindAll(x => x.N_CURRENT_NUM > 0 && x.S_LOCK_STATE == "无").Sum(x => x.N_CURRENT_NUM);
                                        LogHelper.Info("AutoRun13TSJ" + $"od.S_ROW å‡ºåº“余量判断是否需要转运。-{count}< 5");
                                        if (count < 5)
                                        {
                                            autoTurn = true;
                                            _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好(od);
                                        }
                                    }
                                }
                                Location Endbit = null;
                                var loc = LocationHelper.GetLoc(PLC.location[0]);
                                if (loc?.N_CURRENT_NUM == 0 && StartBit.N_CURRENT_NUM == 1 && DeviceProcess.doorStatus.ContainsKey(PLC.location[0]))
                                if (StartBit.N_CURRENT_NUM == 1)
                                {
                                    if (DeviceProcess.doorStatus[PLC.location[0]].info == "1")
                                    if (loc?.N_CURRENT_NUM == 0 && DeviceProcess.doorStatus.ContainsKey(PLC.location[0]))
                                    {
                                        Endbit = LocationHelper.GetLoc(PLC.location[0]);
                                        if (DeviceProcess.doorStatus[PLC.location[0]].info == "1")
                                        {
                                            Endbit = LocationHelper.GetLoc(PLC.location[0]);
                                        }
                                    }
                                    if (Endbit == null)
                                        break;
                                }
                                else
                                {
@@ -3702,7 +3787,7 @@
                                {
                                    var crs = _clrel.Select(x => x.S_CNTR_CODE).ToList();
                                    var jbbit = "";
                                    if (od.S_ROW == "YWLCQSX" || od.S_ROW == "YWLDQWJ")
                                    if (od.S_ROW == "YWLCQSX" || od.S_ROW == "YWLDQWJ" || Endbit.S_AREA_CODE == "YWLDQWJ" || Endbit.S_AREA_CODE == "YWLCQSX")
                                    {
                                        var locs1 = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLWJJB" && x.S_LOCK_STATE != "报废" && x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM == 0).ToList();
                                        if (locs1.Count() > 0)
@@ -3717,7 +3802,8 @@
                                    var b = false;
                                    if (!string.IsNullOrEmpty(jbbit))
                                        b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, jbbit, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri, "", Endbit.S_LOC_CODE);
                                    else b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, Endbit.S_LOC_CODE, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri);
                                    else
                                        b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, Endbit.S_LOC_CODE, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri);
                                    if (b)
                                    {
                                        var r = new RowLock { S_LOCK_SRC = od.SQL_ItemCode, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW };
@@ -3743,7 +3829,8 @@
                                        //}
                                        //else db.Insertable(r).ExecuteCommand();
                                        od.TagOverTime = DateTime.Now;
                                        db.Updateable(od).UpdateColumns(it => new { it.TagOverTime }).ExecuteCommand();
                                        od.TagOver = StartBit.S_AREA_CODE;
                                        db.Updateable(od).UpdateColumns(it => new { it.TagOverTime, it.TagOver }).ExecuteCommand();
                                        //break;
                                    }
                                }
@@ -3753,6 +3840,11 @@
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好(od);
                        }
                    }
            }
        }
@@ -3804,14 +3896,14 @@
                    {
                        if (dsi.TryGetValue(area, out dictitems))
                        {
                            var ill = dictitems.Find(x => x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME && _clcntitem.S_CJ_NAME == x.S_CJ_NAME);
                            var ill = dictitems.Find(x => x.Row == rl.N_ROW && x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME && _clcntitem.S_CJ_NAME == x.S_CJ_NAME);
                            if (ill != null)
                            {
                                if (rl.N_CURRENT_NUM > ill.ItemLayer)
                                {
                                    ill.ItemLayer = rl.N_CURRENT_NUM;
                                    ill.area = area;
                                    ill.Row = $"{rl.S_LOC_CODE}";
                                    ill.Row = rl.N_ROW;
                                }
                                else continue;
                            }
@@ -3822,7 +3914,7 @@
                                ItemLayer = rl.N_CURRENT_NUM,
                                S_CJ_NAME = _clcntitem.S_CJ_NAME,
                                area = area,
                                Row = $"{rl.S_LOC_CODE}"
                                Row = rl.N_ROW
                            });
                            dsi[area] = dictitems;
                        }
@@ -3836,7 +3928,7 @@
                                ItemLayer = rl.N_CURRENT_NUM,
                                S_CJ_NAME = _clcntitem.S_CJ_NAME,
                                area = area,
                                Row = $"{rl.S_LOC_CODE}"
                                Row = rl.N_ROW
                            });
                            dsi.Add(area, dictitems);
                        }
@@ -3983,6 +4075,14 @@
                                    //生成接驳区任务,标记为终点库区。
                                    var b = TaskProcess.CreateTransport(od.S_ID, lastful.S_LOC_CODE, Endbit.S_LOC_CODE, "原物料搬运-纸箱", crs.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, crs.Count, 50, nextarea == od.S_END_AREA ? "" : od.S_END_AREA);
                                    if (od.S_ZZ_AREA == "YWLWJJB") InworkLock = false;
                                    if (!string.IsNullOrEmpty(od.S_ITEM_CODE))
                                    {
                                        ///给移库单 å†™ä¸Šè½¬è¿çš„物料数据。
                                        od.S_ITEM_CODE = cir1.S_ITEM_CODE;
                                        od.S_ITEM_NAME = cir1.S_ITEM_NAME;
                                        od.S_CJ_NAME = cir1.S_CJ_NAME;
                                        WCSHelper.Do(db => db.Updateable(od).UpdateColumns(it => new { it.S_ITEM_NAME, it.S_ITEM_CODE, it.S_CJ_NAME }).ExecuteCommand());
                                    }
                                    break;
                                }
                                else if (od.S_ZZ_AREA == "YWLWJJB") InworkLock = false;
HH.WCS.QingXiNongfu/process/TaskProcess.cs
@@ -1416,6 +1416,7 @@
                //}
                else
                {
                    if (start == 0)
                    {
                        //bool flag3 = ;
HH.WCS.QingXiNongfu/wms/TaskHelper.cs
@@ -245,7 +245,7 @@
            //plg 2025å¹´6月13日 10:42:24
            if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD")
            if (task.S_END_LAREA == "YWLWJJB" && task.S_START_LAREA != "YWLRGDD" && !string.IsNullOrEmpty(task.S_TWO_END_LOC))
            {
                var model = db.Queryable<Location>().Where(a => a.S_LOC_CODE == task.S_TWO_END_LOC).First();
                if (model != null)
HH.WCS.QingXiNongfu/wms/WCSModel.cs
@@ -271,7 +271,11 @@
        /// </summary>
        public int WorkType { get; internal set; } = 0;
        public string MidArea { get; internal set; }
        public string TagOver { get; internal set; }
        /// <summary>
        /// å¼ƒç”¨ï¼Œ æ”¹ä¸ºè®°å½•上次库区-
        /// </summary>
        public string TagOver { get; internal set; } = "";
        public DateTime? TagOverTime { get; internal set; }
        public string S_BQ_TRAY_TYPE { get; internal set; } = "";
        /// <summary>
@@ -505,6 +509,16 @@
        public string S_END_AREA { get; set; }
        public string S_ZX_STATE { get; set; }
        /// <summary>
        /// ç¼–码 åç§° åŽ‚å®¶ï¼Œ æœ¬æ¥ä¸éœ€è¦ï¼Œ  ä¸ºäº†ab区不足时,触发转运。 é˜²æ­¢é‡å¤ç‰©æ–™å•据
        /// </summary>
        public string S_ITEM_CODE { get; set; }
        public string S_ITEM_NAME { get; set; }
        /// <summary>
        /// åނ家
        /// </summary>
        public string S_CJ_NAME { get; set; }
    }
    [SuGG("移库工单表")]
HH.WCS.QingXiNongfu/Ô­ÎïÁÏ·½·¨¸ÅÊö.txt
New file
@@ -0,0 +1,48 @@
原物料纸箱入库:
1    Monitor BottTask æ–¹æ³•,
    æ–¹æ³•说明:
        1.1    äººå·¥å †å  ä¸­é—´æŽ¥é©³çš„æ£€æµ‹è½¬è¿ä»»åŠ¡ã€‚
        1.2    æå‡æœºæ‰˜ç›˜æ ‡è®°çš„退库任务。
        1.3    é€€åº“中间库区的检测转运任务。
    åšæ³•思路        åœ¨æ‰˜ç›˜è´§ä½æ ‡è®°ä¸­ï¼Œè®°å½•目标库区,如果通过中间库区需要转运  å°±åœ¨æ ‡è®°ä¸­è®°å½• ä¸­é—´åº“区,目标库区。
                æ‰˜ç›˜åœ¨æ‰§è¡Œå‰å¾€ä¸‹ä¸€åº“区任务,卸货时打上下次库区标记。
2      Monitor AutoRunABD         <-除原来 åº“区,物料 åç§°ï¼Œåނ家 çš„æ•°æ®ã€‚外,新增排数据,记录库区每一排的物料数据 --2025å¹´6月21日16:09:06变更开发新增。
    æ–¹æ³•说明:
        æŒç»­æ£€æµ‹ABCD å››ä¸ªåº“区中,物料+名称+厂家(新增所在排,为了新需求出库只从AB出,AB数量不足5时开始转运到工单指定的A或B) çš„层数数据(防止领料数<单次出库任务的托盘数量)
        è¯¥æ–¹æ³•仅为便利性缓存。实际出库可直接改成ABCD进行遍历。
        æœ‰ä¸ªæ£€æµ‹å¼€å…³ReadCCK,该检测开关位于 AutoRun13TSJ æå‡æœºçº¸ç®±å‡ºåº“处理流程。第一次拆垛空了就会开始持续性检测物料,直到程序停止。
        ReadCCK = true时,开始方法流程。
3    Monitor AutoRun13TSJ      --- < 2025å¹´6月21日16:10:28 æ–°å¢žå˜æ›´ç¬¬å››å¼€å‘。没有货,或者剩余物料数量<5 è‡ªåЍCD è½¬è¿åˆ°AB
    æ–¹æ³•说明:
        {
        éåŽ†æå‡æœº
            èŽ·å–å½“å‰æå‡æœºçš„æ‰€æœ‰å‡ºåº“å·¥å•ï¼ˆT1和T2纸箱)。
            æå‡æœºæ‹†åž›ç©ºäº†ï¼ŒReadCCK = true,否则continue到下一提升机。。
        }
        éåŽ†å·¥å•ï¼Œä»Žç¼“å­˜èŽ·å–AB2个库区中物料最高叠层(目的查找是否有2层的,因为优先出库拆垛,1层的只能算是零头)
        ä»Žä¸Šä¸€æ­¥éª¤ä¸­çš„æœ€é«˜å±‚物料所在库区进行出库。
        å¦‚果起点库区有货     1层根据信号出提升机。 2层上拆垛区。
        å¦‚果没有货,或者剩余物料数量<5
            è§¦å‘ è½¬è¿ç”Ÿæˆé€»è¾‘。
4    DeviceProcess Analysis13 -提升机信号处理。   éžå¿…要情况,基本无需变动。
    æ–¹æ³•说明:
        é€€æ–™
            1.T2纸箱人工处理的,只有T1有拆垛在用。
            2.纸箱退库是根据提升机工单,生成标记,工单MidArea是转运中间库区,S_ROW é€€åº“目标库区。 åŽç”±BottTask æ–¹æ³•进行处理。
            3.标签,收缩膜 æœ‰é›¶å¤´å’Œæ»¡æ¿çš„处理。
        T1上料
            1.包含T1,T2信号+10秒清托盘功能。
            2.T1从拆拆垛上托盘。
5    Monitor YwlTKPEBQ_Auto æ–¹æ³•,
    è¯´æ˜Žï¼š è¿™é‡Œæ˜¯ææ‰£ æ ‡ç­¾ PE膜的出入退库。  é€€åº“标识,都是托盘物料表标识 BQ_PRA.B(BACK)
    é‡Œé¢æ˜¯å››ä¸ªçº¿ç¨‹
    task1:无菌标签出库单筛选。 è¿™é‡Œå‡ºå…¥ä¸åŒæ—¶ã€‚仓库是货架,1层是零头1,2层是零头2  3层是满板。
        æ— èŒçš„出库和退库,已经略过了接驳区。 æ‰€ä»¥ç›´å‡ºçº¿è¾¹ï¼Œ ç›´é€€è´§æž¶ã€‚
    task2:    T2提升机-标签, ä»Žæ°´çº¿æ ‡ç­¾è´§æž¶ï¼Œæ ¹æ®ä¿¡å·ï¼Œç›´å‡ºçº¿è¾¹ï¼Œç›´é€€è´§æž¶ã€‚ æš‚无空托退库流程。
    task3: ææ‰£ å’ŒPE中水膜  çš„出库,库内直出线边 å’Œ çº¿è¾¹ç›´æŽ¥é€€åº“。
    task4  ææ‰£å’ŒPE膜的入库流程。
            PE膜小水 ä¸ŠT2提升机的 ä¿¡å·å‡ºåº“和退库。