11
cjs
2025-06-18 cb5c4a6e74c9cc070a67051256692b82c3c8b8f0
HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs
@@ -35,84 +35,16 @@
        }
        /// <summary>
        /// 遍历分拣单明细创建出库作业
        /// </summary>
        internal static void CheckSortingTask()
        {
            var db = new SqlHelper<object>().GetInstance();
            //new SortingOrder().N_B_STATE
            //遍历N_B_STATE = 3的分拣单创建作业
            //或 遍历分拣单明细创建分拣作业,因为一个分拣单里面的明细都是批量生成的
            var list = WMSHelper.GetWaitingSortingOperationList();
            LogHelper.Info($"获取配盘数量 {list.Count}");
            if (list.Count > 0)
            {
                list.ForEach(a =>
                {
                    var startloc = db.Queryable<Location>().Where(it => it.S_CODE == a.S_LOC_CODE).First();
                    if (startloc != null && startloc.S_LOCK_STATE == "其它锁")
                    {
                        Location endbit = null;
                        //计算托盘进行出库
                        if (endbit != null)
                        {
                            var optask = new WMSTask
                            {
                                S_CODE = WMSHelper.GenerateTaskNo(),
                                S_START_LOC = a.S_LOC_CODE,
                                S_START_AREA = startloc.S_AREA_CODE,
                                S_START_WH = startloc.S_WH_CODE,
                                S_END_LOC = endbit.S_CODE,
                                S_END_AREA = endbit.S_AREA_CODE,
                                S_END_WH = endbit.S_WH_CODE,
                                S_STATION_LOC = a.S_OUT_TO,
                                S_TYPE = "出库",
                                N_TYPE = 2,
                                N_B_STATE = 0,
                                S_CNTR_CODE = a.S_CNTR_CODE,
                                S_OP_DEF_NAME = a.S_BS_TYPE
                            };
                            var note = Settings.Tasktypes.Where(it => it.StartArea == optask.S_START_AREA && it.EndArea == optask.S_END_AREA).FirstOrDefault();
                            if (note != null)
                            {
                                optask.S_NOTE = note.TaskType;
                            }
                            var res = db.Insertable(optask).ExecuteCommand() > 0;
                            if (res)
                            {
                                startloc.N_LOCK_STATE = 2;
                                startloc.S_LOCK_STATE = "出库锁";
                                db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                LocationHelper.LockLoc(endbit.S_CODE, 1);
                                a.N_B_STATE = 2;
                                a.S_B_STATE = "作业启动";
                                db.Updateable(a).UpdateColumns(it => new { it.S_B_STATE, it.N_B_STATE }).ExecuteCommand();
                            }
                        }
                        else LogHelper.Info($"配盘 未找到可用分拣货位");
                    }
                    else LogHelper.Info($"配盘 未找到出库口库区编码{a.S_EXIT_AREA_CODE} 对应的配置文件");
                });
            }
        }
        /// <summary>
        /// 作业启动,创建子任务
        /// </summary>
        internal static void Start()
        {
            LogHelper.Info($"作业启动 创建子任务");
            //LogHelper.Info($"作业启动 创建子任务");
            var db = new SqlHelper<object>().GetInstance();
            List<WMSTask> list = WMSHelper.GetWaitingOperationList();
            LogHelper.Info($"获取任务数据 数量{list.Count}");
            if (list.Count > 0)
            {
                LogHelper.Info($"获取任务数据 数量{list.Count}");
                //如果是出库的作业锁定托盘的时候已经明确起点了,如果发货单或分拣单指定了终点,
                //如果没有作业、任务的顺序限制就可以启动,创建子任务了
                foreach (var a in list)
@@ -131,6 +63,13 @@
                                LocationHelper.LockLoc(end.S_CODE, 1);
                                var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == a.S_START_LOC).First();
                                var endinfo = db.Queryable<Location>().Where(it => it.S_CODE == end.S_CODE).First();
                                int startLayer = startinfo.N_CURRENT_NUM;
                                int endlayer = endinfo.N_CURRENT_NUM + 1;
                                if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库" || a.S_OP_DEF_NAME == "瓶坯非急产补满框" || a.S_OP_DEF_NAME == "瓶盖非急产补满框")
                                {
                                    startLayer = 1;
                                    endlayer = 1;
                                }
                                var wcsTask = new WCSTask
                                {
                                    S_OP_CODE = a.S_CODE,
@@ -144,6 +83,7 @@
                                    S_END_AREA = endinfo.S_AREA_CODE,
                                    S_END_WH = endinfo.S_WH_CODE,
                                    S_SCHEDULE_TYPE = "NDC",
                                    S_WORK_MODE = "agv",
                                    N_CNTR_COUNT = 1,
                                    S_CNTR_CODE = a.S_CNTR_CODE,
                                    N_START_LAYER = startinfo.N_CURRENT_NUM,
@@ -188,11 +128,17 @@
                                    S_END_AREA = endinfo.S_AREA_CODE,
                                    S_END_WH = endinfo.S_WH_CODE,
                                    S_SCHEDULE_TYPE = "NDC",
                                    S_WORK_MODE = "agv",
                                    N_CNTR_COUNT = 1,
                                    S_CNTR_CODE = a.S_CNTR_CODE,
                                    N_START_LAYER = startinfo.N_CURRENT_NUM,
                                    N_END_LAYER = endinfo.N_CURRENT_NUM + 1
                                    N_END_LAYER = endinfo.N_CURRENT_NUM + 1,
                                    S_TRAY_TYPE = a.S_TRAY_TYPE,
                                    S_WORK_NO = a.S_WORK_NO,
                                    S_ITEM_CODE = a.S_ITEM_CODE,
                                    S_NOTE = a.S_NOTE
                                };
                                if (WCSHelper.CreateTask(wcsTask))
                                {