lss
2025-06-06 e638b99adf48183d173dec500c9cf29020947354
HH.WCS.Mobox3/HH.WCS.Mobox3.DaYang/core/WMSCore.cs
@@ -1,4 +1,5 @@
using HH.WCS.DaYang.wms;
using HH.WCS.DaYang.util;
using HH.WCS.DaYang.wms;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -6,12 +7,15 @@
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.DaYang.core {
    internal class WMSCore {
namespace HH.WCS.DaYang.core
{
    internal class WMSCore
    {
        /// <summary>
        /// 遍历定版的发货单,生产分拣单主表和子表(也可以手动调接口触发)
        /// </summary>
        internal static void CheckShippingOrder() {
        internal static void CheckShippingOrder()
        {
            //1.0、获取已经定版的发货单,生产分拣单子表和主表,设置【发货单】的业务状态 N_B_STATE = 1(待分拣)
            //2.0、如果发货单C_AUTO_SORTING=Y,则自动将分拣单状态设置为开始配货
@@ -19,7 +23,8 @@
        /// <summary>
        /// 开始配货创建分拣单明细(改成调接口触发)
        /// </summary>
        internal static void CheckSortingOrder() {
        internal static void CheckSortingOrder()
        {
            //new SortingOrder().N_B_STATE
            //1.0、获取 N_B_STATE = 1 (开始配货)状态的分拣单
            //2.0、遍历分拣单子表,创建分拣单明细,更新分拣单子表的明细汇总F_ACC_S_QTY
@@ -29,20 +34,26 @@
        }
        /// <summary>
        /// 作业启动,创建子任务
        /// </summary>
        internal static void Start() {
        internal static void Start()
        {
            List<WMSTask> list = WMSHelper.GetWaitingOperationList();
            if (list.Count > 0) {
            if (list.Count > 0)
            {
                var db = new SqlHelper<WCSTask>().GetInstance();
                //空托回库任务创建
                list.ForEach(a => {
                    if (a.N_TYPE == 1) {
                        if (!string.IsNullOrEmpty(a.S_END_LOC))
                list.ForEach(a =>
                {
                    //空托回库
                    if (a.N_TYPE == 1)
                    {
                        if (!string.IsNullOrEmpty(a.S_END_LOC))
                        {
                            string JbwLoc = "";
                            //创建agv搬运任务
@@ -54,7 +65,7 @@
                                S_TYPE = "空托回库",
                                S_START_LOC = a.S_START_LOC,
                                S_END_LOC = JbwLoc,
                                S_SCHEDULE_TYPE = "1",
                                N_SCHEDULE_TYPE = 1,
                                N_CNTR_COUNT = 1,
                                S_CNTR_CODE = a.S_CNTR_CODE,
@@ -68,21 +79,105 @@
                                S_TYPE = "空托回库",
                                S_START_LOC = JbwLoc,
                                S_END_LOC = a.S_END_LOC,
                                S_SCHEDULE_TYPE = "2",
                                N_SCHEDULE_TYPE = 2,
                                N_CNTR_COUNT = 1,
                                S_CNTR_CODE = a.S_CNTR_CODE,
                            };
                            if (WCSHelper.CreateTask(wcsTask1)&& WCSHelper.CreateTask(wcsTask2))
                            if (WCSHelper.CreateTask(wcsTask1) && WCSHelper.CreateTask(wcsTask2))
                            {
                                //更新作业状态为执行
                                a.N_B_STATE = 1;
                                a.S_B_STATE = "执行";
                                LocationHelper.LockLoc(a.S_START_LOC, 2);
                                LocationHelper.LockLoc(a.S_END_LOC, 1);
                                WMSHelper.UpdateTaskState(a);
                            }
                        }
                    }
                    else if (a.N_TYPE == 2)
                    {
                        #region MyRegion
                        //判断外侧有没有托盘,需不需要移库
                        var StartLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_START_AREA && b.S_CODE == a.S_START_LOC).First();
                        var OutLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == StartLoc.S_AREA_CODE && b.N_LAYER == StartLoc.N_LAYER && b.N_POS == 1 && b.N_CURRENT_NUM == 1 && b.N_LOCK_STATE == 0).First();
                        if (OutLoc != null)
                        {
                            var YiKuLoc = LocationHelper.InStorage(OutLoc);
                            if (YiKuLoc != null)
                            {
                                var wcsTask = new WCSTask
                                {
                                    S_OP_CODE = a.S_CODE,
                                    S_OP_NAME = "出库",
                                    S_CODE = WCSHelper.GenerateTaskNo(),
                                    S_TYPE = "移库",
                                    S_START_LOC = OutLoc.S_CODE,
                                    S_END_LOC = YiKuLoc.S_CODE,
                                    N_SCHEDULE_TYPE = 2,
                                    N_CNTR_COUNT = 1,
                                    S_CNTR_CODE = a.S_CNTR_CODE,
                                };
                                if (WCSHelper.CreateTask(wcsTask) )
                                {
                                    //更新作业状态为执行
                                    LocationHelper.LockLoc(OutLoc.S_CODE, 2);
                                    LocationHelper.LockLoc(YiKuLoc.S_CODE, 1);
                                }
                            }
                            else
                            {
                                LogHelper.Info($"作业:{a.S_CODE}外侧货位{OutLoc.S_CODE},未计算到移库货位,作业不启动");
                                return;
                            }
                            ;
                        }
                        #endregion
                        string JbwLoc = "";
                        //创建wcs任务
                        var wcsTask1 = new WCSTask
                        {
                            S_OP_CODE = a.S_CODE,
                            S_OP_NAME = "出库",
                            S_CODE = WCSHelper.GenerateTaskNo(),
                            S_TYPE = "出库",
                            S_START_LOC = a.S_START_LOC,
                            S_END_LOC = JbwLoc,
                            N_SCHEDULE_TYPE = 2,
                            N_CNTR_COUNT = 1,
                            S_CNTR_CODE = a.S_CNTR_CODE,
                        };
                        //创建wcs回库任务
                        var wcsTask2 = new WCSTask
                        {
                            S_OP_CODE = a.S_CODE,
                            S_OP_NAME = "出库",
                            S_CODE = WCSHelper.GenerateTaskNo(),
                            S_TYPE = "出库",
                            S_START_LOC = JbwLoc,
                            S_END_LOC = a.S_END_LOC,
                            N_SCHEDULE_TYPE = 1,
                            N_CNTR_COUNT = 1,
                            S_CNTR_CODE = a.S_CNTR_CODE,
                        };
                        if (WCSHelper.CreateTask(wcsTask1) && WCSHelper.CreateTask(wcsTask2))
                        {
                            //更新作业状态为执行
                            a.N_B_STATE = 1;
                            a.S_B_STATE = "执行";
                            LocationHelper.LockLoc(a.S_START_LOC, 2);
                            LocationHelper.LockLoc(a.S_END_LOC, 1);
                            WMSHelper.UpdateTaskState(a);
                        }
                    }
                });
            }