From 33846b73b1f13d6d6632e6755a94d7d0fe05508d Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期四, 18 十二月 2025 14:12:15 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ISchedulerCenter.cs                |   71 ++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Quartz/JobConfig.cs                        |   16 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs        |  279 +++++-----
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs                           |   19 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs      |   44 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs         |   58 +-
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobSetup.cs                        |   26 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ResponseContent.cs                 |   45 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobFactory.cs                      |   51 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundBatchPickingService.cs |   44 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TasksQz.cs                         |   80 +++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs              |    6 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/AgvTaskJob.cs                   |   72 ++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/SchedulerCenterServer.cs           |  470 ++++++++++++++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TaskInfoDto.cs                     |   38 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                 |  143 ++--
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs               |   59 ++
 17 files changed, 1,233 insertions(+), 288 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
index 38a980e..d45c3bc 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
@@ -19,6 +19,12 @@
         New = 100,
 
         /// <summary>
+        /// 宸插彂閫�
+        /// </summary>
+        [Description("宸插彂閫�")]
+        HasSent = 105,
+
+        /// <summary>
         /// 鍫嗗灈鏈哄緟鎵ц
         /// </summary>
         [Description("鍫嗗灈鏈哄緟鎵ц")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ISchedulerCenter.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ISchedulerCenter.cs"
new file mode 100644
index 0000000..5d250f6
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ISchedulerCenter.cs"
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA.QuartzJob
+{
+    public interface ISchedulerCenter
+    {
+        /// <summary>
+        /// 寮�鍚换鍔¤皟搴�
+        /// </summary>
+        /// <returns></returns>
+        Task<ResponseContent> StartScheduleAsync();
+        /// <summary>
+        /// 鍋滄浠诲姟璋冨害
+        /// </summary>
+        /// <returns></returns>
+        Task<ResponseContent> StopScheduleAsync();
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<ResponseContent> AddScheduleJobAsync(TasksQz sysSchedule);
+        /// <summary>
+        /// 鍋滄涓�涓换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<ResponseContent> StopScheduleJobAsync(TasksQz sysSchedule);
+        /// <summary>
+        /// 妫�娴嬩换鍔℃槸鍚﹀瓨鍦�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<bool> IsExistScheduleJobAsync(TasksQz sysSchedule);
+        /// <summary>
+        /// 鏆傚仠鎸囧畾鐨勮鍒掍换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<ResponseContent> PauseJob(TasksQz sysSchedule);
+        /// <summary>
+        /// 鎭㈠涓�涓换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<ResponseContent> ResumeJob(TasksQz sysSchedule);
+
+        /// <summary>
+        /// 鑾峰彇浠诲姟瑙﹀彂鍣ㄧ姸鎬�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        Task<List<TaskInfoDto>> GetTaskStaus(TasksQz sysSchedule);
+        /// <summary>
+        /// 鑾峰彇瑙﹀彂鍣ㄦ爣璇�
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        string GetTriggerState(string key);
+
+        /// <summary>
+        /// 绔嬪嵆鎵ц 涓�涓换鍔�
+        /// </summary>
+        /// <param name="tasksQz"></param>
+        /// <returns></returns>
+        Task<ResponseContent> ExecuteJobAsync(TasksQz tasksQz);
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobFactory.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobFactory.cs"
new file mode 100644
index 0000000..6ace563
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobFactory.cs"
@@ -0,0 +1,51 @@
+锘縰sing Quartz;
+using Microsoft.Extensions.DependencyInjection;
+using Quartz.Spi;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WIDESEA.QuartzJob
+{
+    public class JobFactory : IJobFactory
+    {
+        /// <summary>
+        /// 娉ㄥ叆鍙嶅皠鑾峰彇渚濊禆瀵硅薄
+        /// </summary>
+        private readonly IServiceProvider _serviceProvider;
+        public JobFactory(IServiceProvider serviceProvider)
+        {
+            _serviceProvider = serviceProvider;
+        }
+        /// <summary>
+        /// 瀹炵幇鎺ュ彛Job
+        /// </summary>
+        /// <param name="bundle"></param>
+        /// <param name="scheduler"></param>
+        /// <returns></returns>
+        public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
+        {
+            try
+            {
+                var serviceScope = _serviceProvider.CreateScope();
+                var job = serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob;
+                return job;
+
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+
+        public void ReturnJob(IJob job)
+        {
+            var disposable = job as IDisposable;
+            if (disposable != null)
+            {
+                disposable.Dispose();
+            }
+
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobSetup.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobSetup.cs"
new file mode 100644
index 0000000..e71cb53
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/JobSetup.cs"
@@ -0,0 +1,26 @@
+锘縰sing Microsoft.Extensions.DependencyInjection;
+using Quartz;
+using Quartz.Spi;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace WIDESEA.QuartzJob
+{
+    /// <summary>
+    /// 浠诲姟璋冨害 鍚姩鏈嶅姟
+    /// </summary>
+    public static class JobSetup
+    {
+        public static void AddJobSetup(this IServiceCollection services)
+        {
+            if (services == null) throw new ArgumentNullException(nameof(services));
+
+            //services.AddSingleton<IJobFactory, JobFactory>();
+            //services.AddTransient<AgvTaskJob>();//Job浣跨敤鐬椂渚濊禆娉ㄥ叆
+            //services.AddSingleton<ISchedulerCenter, SchedulerCenterServer>();
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ResponseContent.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ResponseContent.cs"
new file mode 100644
index 0000000..3029388
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/ResponseContent.cs"
@@ -0,0 +1,45 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WIDESEA.QuartzJob
+{
+    public class ResponseContent
+    {
+        public ResponseContent()
+        {
+        }
+        public ResponseContent(bool status)
+        {
+            Status = status;
+        }
+        public bool Status { get; set; }
+        public string Code { get; set; }
+        public string Message { get; set; }
+        public object Data { get; set; }
+
+        public ResponseContent OK()
+        {
+            Status = true;
+            return this;
+        }
+
+        public static ResponseContent Instance
+        {
+            get { return new ResponseContent(); }
+        }
+        public ResponseContent OK(string message = null, object data = null)
+        {
+            Status = true;
+            Message = message;
+            Data = data;
+            return this;
+        }
+        public ResponseContent Error(string message = null)
+        {
+            Status = false;
+            Message = message;
+            return this;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/SchedulerCenterServer.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/SchedulerCenterServer.cs"
new file mode 100644
index 0000000..733cd88
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/SchedulerCenterServer.cs"
@@ -0,0 +1,470 @@
+锘縰sing Quartz;
+using Quartz.Impl;
+using Quartz.Impl.Triggers;
+using Quartz.Spi;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA.QuartzJob
+{
+    public class SchedulerCenterServer : ISchedulerCenter
+    {
+        private Task<IScheduler> _scheduler;
+        private readonly IJobFactory _iocjobFactory;
+        public SchedulerCenterServer(IJobFactory jobFactory)
+        {
+            _iocjobFactory = jobFactory;
+            _scheduler = GetSchedulerAsync();
+        }
+        private Task<IScheduler> GetSchedulerAsync()
+        {
+            if (_scheduler != null)
+                return _scheduler;
+            else
+            {
+                // 浠嶧actory涓幏鍙朣cheduler瀹炰緥
+                NameValueCollection collection = new NameValueCollection
+                {
+                    { "quartz.serializer.type", "binary" },
+                };
+                StdSchedulerFactory factory = new StdSchedulerFactory(collection);
+                return _scheduler = factory.GetScheduler();
+            }
+        }
+
+        /// <summary>
+        /// 寮�鍚换鍔¤皟搴�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ResponseContent> StartScheduleAsync()
+        {
+            var result = new ResponseContent();
+            try
+            {
+                _scheduler.Result.JobFactory = _iocjobFactory;
+                if (!_scheduler.Result.IsStarted)
+                {
+                    //绛夊緟浠诲姟杩愯瀹屾垚
+                    await _scheduler.Result.Start();
+                    
+                    ConsoleHelper.WriteSuccessLine("浠诲姟璋冨害寮�鍚紒");
+                    result = ResponseContent.Instance.OK($"浠诲姟璋冨害寮�鍚垚鍔�");
+                    return result;
+                }
+                else
+                {
+                    result = ResponseContent.Instance.OK($"浠诲姟璋冨害宸茬粡寮�鍚�");
+                    return result;
+                }
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 鍋滄浠诲姟璋冨害
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ResponseContent> StopScheduleAsync()
+        {
+            var result = new ResponseContent();
+            try
+            {
+                if (!_scheduler.Result.IsShutdown)
+                {
+                    //绛夊緟浠诲姟杩愯瀹屾垚
+                    await _scheduler.Result.Shutdown();
+                    //await Console.Out.WriteLineAsync("浠诲姟璋冨害鍋滄锛�");
+                    result = ResponseContent.Instance.OK($"浠诲姟璋冨害鍋滄鎴愬姛");
+                    return result;
+                }
+                else
+                {
+                    result = ResponseContent.Instance.OK($"浠诲姟璋冨害宸茬粡鍋滄");
+                    return result;
+                }
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞涓�涓鍒掍换鍔★紙鏄犲皠绋嬪簭闆嗘寚瀹欼Job瀹炵幇绫伙級
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="tasksQz"></param>
+        /// <returns></returns>
+        public async Task<ResponseContent> AddScheduleJobAsync(TasksQz tasksQz)
+        {
+            var result = new ResponseContent();
+
+            if (tasksQz != null)
+            {
+                try
+                {
+                    JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
+                    if (await _scheduler.Result.CheckExists(jobKey))
+                    {
+                        result = ResponseContent.Instance.OK($"璇ヤ换鍔¤鍒掑凡缁忓湪鎵ц:銆恵tasksQz.Name}銆�,璇峰嬁閲嶅鍚姩锛�");
+                        return result;
+                    }
+                    #region 璁剧疆寮�濮嬫椂闂村拰缁撴潫鏃堕棿
+
+                    if (tasksQz.BeginTime == null)
+                    {
+                        tasksQz.BeginTime = DateTime.Now;
+                    }
+                    DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.BeginTime, 1);//璁剧疆寮�濮嬫椂闂�
+                    if (tasksQz.EndTime == null)
+                    {
+                        tasksQz.EndTime = DateTime.MaxValue.AddDays(-1);
+                    }
+                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(tasksQz.EndTime, 1);//璁剧疆鏆傚仠鏃堕棿
+
+                    #endregion
+
+                    #region 閫氳繃鍙嶅皠鑾峰彇绋嬪簭闆嗙被鍨嬪拰绫�   
+
+                    Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName));
+                    Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName);
+
+                    #endregion
+                    //鍒ゆ柇浠诲姟璋冨害鏄惁寮�鍚�
+                    //if (!_scheduler.Result.IsStarted)
+                    //{
+                    //    await StartScheduleAsync();
+                    //}
+
+                    //浼犲叆鍙嶅皠鍑烘潵鐨勬墽琛岀▼搴忛泦
+                    IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType);
+                    job.JobDataMap.Add("JobParam", tasksQz.JobParams);
+                    ITrigger trigger;
+
+                    #region 娉涘瀷浼犻��
+                    //IJobDetail job = JobBuilder.Create<T>()
+                    //    .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup)
+                    //    .Build();
+                    #endregion
+
+                    if (tasksQz.Cron != null && CronExpression.IsValidExpression(tasksQz.Cron) && tasksQz.TriggerType > 0)
+                    {
+                        trigger = CreateCronTrigger(tasksQz);
+
+                        ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
+                    }
+                    else
+                    {
+                        trigger = CreateSimpleTrigger(tasksQz);
+                    }
+
+                    // 鍛婅瘔Quartz浣跨敤鎴戜滑鐨勮Е鍙戝櫒鏉ュ畨鎺掍綔涓�
+                    await _scheduler.Result.ScheduleJob(job, trigger);
+                    //await Task.Delay(TimeSpan.FromSeconds(120));
+                    //await Console.Out.WriteLineAsync("鍏抽棴浜嗚皟搴﹀櫒锛�");
+                    //await _scheduler.Result.Shutdown();
+                    result = ResponseContent.Instance.OK($"銆恵tasksQz.Name}銆戞垚鍔�");
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    result = ResponseContent.Instance.Error($"浠诲姟璁″垝寮傚父:銆恵ex.Message}銆�");
+                    return result;
+                }
+            }
+            else
+            {
+                result = ResponseContent.Instance.Error($"浠诲姟璁″垝涓嶅瓨鍦�:銆恵tasksQz?.Name}銆�");
+                return result;
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟鏄惁瀛樺湪?
+        /// </summary>
+        /// <returns></returns>
+        public async Task<bool> IsExistScheduleJobAsync(TasksQz sysSchedule)
+        {
+            JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
+            if (await _scheduler.Result.CheckExists(jobKey))
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        /// <summary>
+        /// 鏆傚仠涓�涓寚瀹氱殑璁″垝浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ResponseContent> StopScheduleJobAsync(TasksQz sysSchedule)
+        {
+            var result = new ResponseContent();
+            try
+            {
+                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
+                if (!await _scheduler.Result.CheckExists(jobKey))
+                {
+                    result = ResponseContent.Instance.Error($"鏈壘鍒拌鏆傚仠鐨勪换鍔�:銆恵sysSchedule.Name}銆�");
+                    return result;
+                }
+                else
+                {
+                    await _scheduler.Result.DeleteJob(jobKey);
+                    result = ResponseContent.Instance.OK($"銆恵sysSchedule.Name}銆戞垚鍔�");
+                    return result;
+                }
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+
+        /// <summary>
+        /// 鎭㈠鎸囧畾鐨勮鍒掍换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        public async Task<ResponseContent> ResumeJob(TasksQz sysSchedule)
+        {
+            var result = new ResponseContent();
+            try
+            {
+                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
+                if (!await _scheduler.Result.CheckExists(jobKey))
+                {
+                    result = ResponseContent.Instance.Error($"鏈壘鍒拌鎭㈠鐨勪换鍔�:銆恵sysSchedule.Name}銆�");
+                    return result;
+                }
+                await _scheduler.Result.ResumeJob(jobKey);
+                result = ResponseContent.Instance.OK($"銆恵sysSchedule.Name}銆戞垚鍔�");
+                return result;
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+        /// <summary>
+        /// 鏆傚仠鎸囧畾鐨勮鍒掍换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        public async Task<ResponseContent> PauseJob(TasksQz sysSchedule)
+        {
+            var result = new ResponseContent();
+            try
+            {
+                JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
+                if (!await _scheduler.Result.CheckExists(jobKey))
+                {
+                    result = ResponseContent.Instance.Error($"鏈壘鍒拌鏆傚仠鐨勪换鍔�:銆恵sysSchedule.Name}銆�");
+                    return result;
+                }
+                await _scheduler.Result.PauseJob(jobKey);
+                result = ResponseContent.Instance.Error($"銆恵sysSchedule.Name}銆戞垚鍔�");
+                return result;
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+        #region 鐘舵�佺姸鎬佸府鍔╂柟娉�
+        public async Task<List<TaskInfoDto>> GetTaskStaus(TasksQz sysSchedule)
+        {
+
+            var ls = new List<TaskInfoDto>();
+            var noTask = new List<TaskInfoDto>{ new TaskInfoDto {
+                jobId = sysSchedule.Id.ToString(),
+                jobGroup = sysSchedule.JobGroup,
+                triggerId = "",
+                triggerGroup = "",
+                triggerStatus = "涓嶅瓨鍦�"
+            } };
+            JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
+            IJobDetail job = await _scheduler.Result.GetJobDetail(jobKey);
+            if (job == null)
+            {
+                return noTask;
+            }
+            //info.Append(string.Format("浠诲姟ID:{0}\r\n浠诲姟鍚嶇О:{1}\r\n", job.Key.Name, job.Description)); 
+            var triggers = await _scheduler.Result.GetTriggersOfJob(jobKey);
+            if (triggers == null || triggers.Count == 0)
+            {
+                return noTask;
+            }
+            foreach (var trigger in triggers)
+            {
+                var triggerStaus = await _scheduler.Result.GetTriggerState(trigger.Key);
+                string state = GetTriggerState(triggerStaus.ToString());
+                ls.Add(new TaskInfoDto
+                {
+                    jobId = job.Key.Name,
+                    jobGroup = job.Key.Group,
+                    triggerId = trigger.Key.Name,
+                    triggerGroup = trigger.Key.Group,
+                    triggerStatus = state
+                });
+                //info.Append(string.Format("瑙﹀彂鍣↖D:{0}\r\n瑙﹀彂鍣ㄥ悕绉�:{1}\r\n鐘舵��:{2}\r\n", item.Key.Name, item.Description, state));
+
+            }
+            return ls;
+        }
+        public string GetTriggerState(string key)
+        {
+            string state = null;
+            if (key != null)
+                key = key.ToUpper();
+            switch (key)
+            {
+                case "1":
+                    state = "鏆傚仠";
+                    break;
+                case "2":
+                    state = "瀹屾垚";
+                    break;
+                case "3":
+                    state = "鍑洪敊";
+                    break;
+                case "4":
+                    state = "闃诲";
+                    break;
+                case "0":
+                    state = "姝e父";
+                    break;
+                case "-1":
+                    state = "涓嶅瓨鍦�";
+                    break;
+                case "BLOCKED":
+                    state = "闃诲";
+                    break;
+                case "COMPLETE":
+                    state = "瀹屾垚";
+                    break;
+                case "ERROR":
+                    state = "鍑洪敊";
+                    break;
+                case "NONE":
+                    state = "涓嶅瓨鍦�";
+                    break;
+                case "NORMAL":
+                    state = "姝e父";
+                    break;
+                case "PAUSED":
+                    state = "鏆傚仠";
+                    break;
+            }
+            return state;
+        }
+        #endregion
+        #region 鍒涘缓瑙﹀彂鍣ㄥ府鍔╂柟娉�
+
+        /// <summary>
+        /// 鍒涘缓SimpleTrigger瑙﹀彂鍣紙绠�鍗曡Е鍙戝櫒锛�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <param name="starRunTime"></param>
+        /// <param name="endRunTime"></param>
+        /// <returns></returns>
+        private ITrigger CreateSimpleTrigger(TasksQz sysSchedule)
+        {
+            if (sysSchedule.CycleRunTimes > 0)
+            {
+                ITrigger trigger = TriggerBuilder.Create()
+                .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
+                .StartAt(sysSchedule.BeginTime.Value)
+                .WithSimpleSchedule(x => x
+                    .WithIntervalInSeconds(sysSchedule.IntervalSecond)
+                    .WithRepeatCount(sysSchedule.CycleRunTimes - 1))
+                .EndAt(sysSchedule.EndTime.Value)
+                .Build();
+                return trigger;
+            }
+            else
+            {
+                ITrigger trigger = TriggerBuilder.Create()
+                .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
+                .StartAt(sysSchedule.BeginTime.Value)
+                .WithSimpleSchedule(x => x
+                    .WithIntervalInSeconds(sysSchedule.IntervalSecond)
+                    .RepeatForever()
+                )
+                .EndAt(sysSchedule.EndTime.Value)
+                .Build();
+                return trigger;
+            }
+            // 瑙﹀彂浣滀笟绔嬪嵆杩愯锛岀劧鍚庢瘡10绉掗噸澶嶄竴娆★紝鏃犻檺寰幆
+
+        }
+        /// <summary>
+        /// 鍒涘缓绫诲瀷Cron鐨勮Е鍙戝櫒
+        /// </summary>
+        /// <param name="m"></param>
+        /// <returns></returns>
+        private ITrigger CreateCronTrigger(TasksQz sysSchedule)
+        {
+            // 浣滀笟瑙﹀彂鍣�
+            return TriggerBuilder.Create()
+                   .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup)
+                   .StartAt(sysSchedule.BeginTime.Value)//寮�濮嬫椂闂�
+                   .EndAt(sysSchedule.EndTime.Value)//缁撴潫鏁版嵁
+                   .WithCronSchedule(sysSchedule.Cron)//鎸囧畾cron琛ㄨ揪寮�
+                   .ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup)//浣滀笟鍚嶇О
+                   .Build();
+        }
+        #endregion
+
+
+        /// <summary>
+        /// 绔嬪嵆鎵ц 涓�涓换鍔�
+        /// </summary>
+        /// <param name="tasksQz"></param>
+        /// <returns></returns>
+        public async Task<ResponseContent> ExecuteJobAsync(TasksQz tasksQz)
+        {
+            var result = new ResponseContent();
+            try
+            {
+                JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
+
+                //鍒ゆ柇浠诲姟鏄惁瀛樺湪锛屽瓨鍦ㄥ垯 瑙﹀彂涓�娆★紝涓嶅瓨鍦ㄥ垯鍏堟坊鍔犱竴涓换鍔★紝瑙﹀彂浠ュ悗鍐� 鍋滄浠诲姟
+                if (!await _scheduler.Result.CheckExists(jobKey))
+                {
+                    //涓嶅瓨鍦� 鍒� 娣诲姞涓�涓鍒掍换鍔�
+                    await AddScheduleJobAsync(tasksQz);
+
+                    //瑙﹀彂鎵ц涓�娆�
+                    await _scheduler.Result.TriggerJob(jobKey);
+
+                    //鍋滄浠诲姟
+                    await StopScheduleJobAsync(tasksQz);
+
+                    result = ResponseContent.Instance.OK($"绔嬪嵆鎵ц璁″垝浠诲姟:銆恵tasksQz.Name}銆戞垚鍔�");
+                }
+                else
+                {
+                    await _scheduler.Result.TriggerJob(jobKey);
+                    result = ResponseContent.Instance.OK($"绔嬪嵆鎵ц璁″垝浠诲姟:銆恵tasksQz.Name}銆戞垚鍔�");
+                }
+            }
+            catch (Exception ex)
+            {
+                result = ResponseContent.Instance.Error($"绔嬪嵆鎵ц璁″垝浠诲姟澶辫触:銆恵ex.Message}銆�");
+            }
+
+            return result;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TaskInfoDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TaskInfoDto.cs"
new file mode 100644
index 0000000..69f43b2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TaskInfoDto.cs"
@@ -0,0 +1,38 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WIDESEA.QuartzJob
+{
+    public class TaskInfoDto
+    {
+        /// <summary>
+        /// 浠诲姟ID
+        /// </summary>
+        public string jobId { get; set; }
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string jobName { get; set; }
+        /// <summary>
+        /// 浠诲姟鍒嗙粍
+        /// </summary>
+        public string jobGroup { get; set; }
+        /// <summary>
+        /// 瑙﹀彂鍣↖D
+        /// </summary>
+        public string triggerId { get; set; }
+        /// <summary>
+        /// 瑙﹀彂鍣ㄥ悕绉�
+        /// </summary>
+        public string triggerName { get; set; }
+        /// <summary>
+        /// 瑙﹀彂鍣ㄥ垎缁�
+        /// </summary>
+        public string triggerGroup { get; set; }
+        /// <summary>
+        /// 瑙﹀彂鍣ㄧ姸鎬�
+        /// </summary>
+        public string triggerStatus { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TasksQz.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TasksQz.cs"
new file mode 100644
index 0000000..66377cc
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Core/Quartz/TasksQz.cs"
@@ -0,0 +1,80 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WIDESEA.QuartzJob
+{
+    /// <summary>
+    /// 浠诲姟璁″垝琛�
+    /// </summary>
+    public class TasksQz
+    {
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 浠诲姟鍒嗙粍
+        /// </summary>
+        public string JobGroup { get; set; }
+        /// <summary>
+        /// 浠诲姟杩愯鏃堕棿琛ㄨ揪寮�
+        /// </summary>
+        public string Cron { get; set; }
+        /// <summary>
+        /// 浠诲姟鎵�鍦―LL瀵瑰簲鐨勭▼搴忛泦鍚嶇О
+        /// </summary>
+        public string AssemblyName { get; set; }
+        /// <summary>
+        /// 浠诲姟鎵�鍦ㄧ被
+        /// </summary>
+        public string ClassName { get; set; }
+        /// <summary>
+        /// 浠诲姟鎻忚堪
+        /// </summary>
+        public string Remark { get; set; }
+        /// <summary>
+        /// 鎵ц娆℃暟
+        /// </summary>
+        public int RunTimes { get; set; }
+        /// <summary>
+        /// 寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime? BeginTime { get; set; }
+        /// <summary>
+        /// 缁撴潫鏃堕棿
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+        /// <summary>
+        /// 瑙﹀彂鍣ㄧ被鍨嬶紙0銆乻imple 1銆乧ron锛�
+        /// </summary>
+        public int TriggerType { get; set; }
+        /// <summary>
+        /// 鎵ц闂撮殧鏃堕棿, 绉掍负鍗曚綅
+        /// </summary>
+        public int IntervalSecond { get; set; }
+        /// <summary>
+        /// 寰幆鎵ц娆℃暟
+        /// </summary>
+        public int CycleRunTimes { get; set; }
+        /// <summary>
+        /// 鏄惁鍚姩
+        /// </summary>
+        public bool IsStart { get; set; } = true;
+        /// <summary>
+        /// 鎵ц浼犲弬
+        /// </summary>
+        public string JobParams { get; set; }
+
+        public bool? IsDeleted { get; set; }
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CreateTime { get; set; } = DateTime.Now;
+        /// <summary>
+        /// 浠诲姟鍐呭瓨涓殑鐘舵��
+        /// </summary>
+        public List<TaskInfoDto> Triggers { get; set; }
+        public int Id { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Quartz/JobConfig.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Quartz/JobConfig.cs"
new file mode 100644
index 0000000..7e74895
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Quartz/JobConfig.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Quartz
+{
+    public class JobConfig
+    {
+        public Type JobType { get; set; }
+        public string Identity { get; set; }
+        public string Group { get; set; }
+        public int IntervalInSeconds { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundBatchPickingService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundBatchPickingService.cs"
index a1e6320..cd12e24 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundBatchPickingService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundBatchPickingService.cs"
@@ -3665,29 +3665,29 @@
                 });
 
               
-                var essTask = new TaskModel()
-                {
-                    taskType = "putaway",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>{  new() {
-                            taskCode = returnTask.TaskNum.ToString(),
-                            taskPriority = 0,
-                            taskDescribe = new TaskDescribeType
-                            {
-                                containerCode = palletCode,
-                                containerType = "CT_KUBOT_STANDARD",
-                                fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
-                                toStationCode = "",
-                                toLocationCode = returnTask.TargetAddress,
-                                deadline = 0,
-                                storageTag = ""
-                            }
-                        } }
-                };
+                //var essTask = new TaskModel()
+                //{
+                //    taskType = "putaway",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>{  new() {
+                //            taskCode = returnTask.TaskNum.ToString(),
+                //            taskPriority = 0,
+                //            taskDescribe = new TaskDescribeType
+                //            {
+                //                containerCode = palletCode,
+                //                containerType = "CT_KUBOT_STANDARD",
+                //                fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
+                //                toStationCode = "",
+                //                toLocationCode = returnTask.TargetAddress,
+                //                deadline = 0,
+                //                storageTag = ""
+                //            }
+                //        } }
+                //};
 
-                var resultTask = await _eSSApiService.CreateTaskAsync(essTask);
-                _logger.LogInformation($"ReturnRemaining 鍒涘缓浠诲姟鎴愬姛: {resultTask}");
+                //var resultTask = await _eSSApiService.CreateTaskAsync(essTask);
+                //_logger.LogInformation($"ReturnRemaining 鍒涘缓浠诲姟鎴愬姛: {resultTask}");
              
             }
             catch (Exception ex)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
index 145c076..19550fb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
@@ -1678,29 +1678,29 @@
                 //if (moveResult)
                 //{
                 //  鍒涘缓鍥炲簱浠诲姟
-                var essTask = new TaskModel()
-                {
-                    taskType = "putaway",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>{  new() {
-                            taskCode = returnTask.TaskNum.ToString(),
-                            taskPriority = 0,
-                            taskDescribe = new TaskDescribeType
-                            {
-                                containerCode = palletCode,
-                                containerType = "CT_KUBOT_STANDARD",
-                                fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
-                                toStationCode = "",
-                                toLocationCode = returnTask.TargetAddress,
-                                deadline = 0,
-                                storageTag = ""
-                            }
-                        } }
-                };
+                //var essTask = new TaskModel()
+                //{
+                //    taskType = "putaway",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>{  new() {
+                //            taskCode = returnTask.TaskNum.ToString(),
+                //            taskPriority = 0,
+                //            taskDescribe = new TaskDescribeType
+                //            {
+                //                containerCode = palletCode,
+                //                containerType = "CT_KUBOT_STANDARD",
+                //                fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
+                //                toStationCode = "",
+                //                toLocationCode = returnTask.TargetAddress,
+                //                deadline = 0,
+                //                storageTag = ""
+                //            }
+                //        } }
+                //};
 
-                var resultTask = await _eSSApiService.CreateTaskAsync(essTask);
-                _logger.LogInformation($"ReturnRemaining 鍒涘缓浠诲姟鎴愬姛: {resultTask}");
+                //var resultTask = await _eSSApiService.CreateTaskAsync(essTask);
+                //_logger.LogInformation($"ReturnRemaining 鍒涘缓浠诲姟鎴愬姛: {resultTask}");
                 //}
             }
             catch (Exception ex)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index eb77ed2..73308c9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -292,7 +292,7 @@
             task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
 
             //  BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
-            var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
+            var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
             if (!result)
             {
                 await Db.Deleteable(task).ExecuteCommandAsync();
@@ -502,27 +502,27 @@
             locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
             _locationInfoService.Repository.UpdateData(locationInfo);
 
-            var outloks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>().Where(x => x.TaskNum == task.TaskNum).ToListAsync();
-
-            var stockids = outloks.Select(x => x.StockId).ToList();
-
-            _stockService.StockInfoService.Db.Updateable<Dt_StockInfo>()
-                                  .SetColumns(it => new Dt_StockInfo
-                                  {
-                                      StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()
-                                  })
-                                  .Where(it => stockids.Contains(it.Id))
-                                  .ExecuteCommand();
-
-            _stockService.StockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
-                                  .SetColumns(it => new Dt_StockInfoDetail
-                                  {
-                                      Status = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()
-                                  })
-                                  .Where(it => stockids.Contains(it.StockId))
-                                  .ExecuteCommand();
+            var stock = _stockService.StockInfoService.Db.Queryable<Dt_StockInfo>()
+                                  .Includes(x => x.Details)
+                                  .Where(x => x.PalletCode == task.PalletCode)
+                                  .First();
 
 
+            stock.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+            stock.LocationCode = "";
+
+            stock.Details.ForEach(x =>
+            {
+                x.Status = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+            });
+
+            _stockService.StockInfoService.Db.UpdateNav(stock).IncludesAllFirstLayer().ExecuteCommand();
+
+            var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+            if (!result)
+            {
+                await Db.Deleteable(task).ExecuteCommandAsync();
+            }
 
             return WebResponseContent.Instance.OK();
 
@@ -566,10 +566,9 @@
                 stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                 _stockRepository.UpdateData(stockInfo);
 
-                var outboundOrder = _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().First(x => x.OrderNo == task.OrderNo);
+                //var outboundOrder = _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().First(x => x.OrderNo == task.OrderNo);
 
                 task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
-                // BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? WIDESEA_Core.Enums.OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
                 var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
                 if (!result)
                 {
@@ -584,14 +583,14 @@
                     _logger.LogInformation($"InEmptyTaskCompleted AddLocationStatusChangeRecord : {ex.Message} ");
                 }
 
-                if (outboundOrder != null)
-                {
-                    await HandleOutboundOrderToMESCompletion(outboundOrder, outboundOrder.OrderNo);
-                }
-                else
-                {
-                    _logger.LogInformation($"TaskService  InEmptyTaskCompleted: {task.TaskNum} ,鏈壘鍒板嚭搴撳崟銆�  ");
-                }
+                //if (outboundOrder != null)
+                //{
+                //    await HandleOutboundOrderToMESCompletion(outboundOrder, outboundOrder.OrderNo);
+                //}
+                //else
+                //{
+                //    _logger.LogInformation($"TaskService  InEmptyTaskCompleted: {task.TaskNum} ,鏈壘鍒板嚭搴撳崟銆�  ");
+                //}
 
                 return content;
             }
@@ -636,23 +635,23 @@
                 var beforelocationStatus = locationInfo.LocationStatus;
 
                 // 鑾峰彇鎵�鏈夊洖搴撲腑鐨勫嚭搴撻攣瀹氳褰�
-                var returnLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(it => it.OrderNo == task.OrderNo &&
-                               it.PalletCode == task.PalletCode &&
-                               it.Status == (int)OutLockStockStatusEnum.鍥炲簱涓�)
-                    .ToListAsync();
+                //var returnLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                //    .Where(it => it.OrderNo == task.OrderNo &&
+                //               it.PalletCode == task.PalletCode &&
+                //               it.Status == (int)OutLockStockStatusEnum.鍥炲簱涓�)
+                //    .ToListAsync();
 
                 // 鏇存柊鍑哄簱閿佸畾璁板綍鐘舵�佷负鍥炲簱瀹屾垚
-                foreach (var lockInfo in returnLocks)
-                {
-                    lockInfo.Status = (int)OutLockStockStatusEnum.宸插洖搴�;
-                }
+                //foreach (var lockInfo in returnLocks)
+                //{
+                //    lockInfo.Status = (int)OutLockStockStatusEnum.宸插洖搴�;
+                //}
 
-                if (returnLocks.Any())
-                {
-                    await _outStockLockInfoService.Db.Updateable(returnLocks).ExecuteCommandAsync();
-                    _logger.LogInformation($"鏇存柊{returnLocks.Count}鏉¢攣瀹氳褰曚负宸插洖搴撶姸鎬�");
-                }
+                //if (returnLocks.Any())
+                //{
+                //    await _outStockLockInfoService.Db.Updateable(returnLocks).ExecuteCommandAsync();
+                //    _logger.LogInformation($"鏇存柊{returnLocks.Count}鏉¢攣瀹氳褰曚负宸插洖搴撶姸鎬�");
+                //}
 
                 // 鏇存柊搴撳瓨淇℃伅
                 stockInfo.LocationCode = task.TargetAddress;
@@ -664,7 +663,7 @@
                     foreach (var detail in stockInfo.Details)
                     {
                         detail.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
-                        detail.OutboundQuantity = 0; // 鍏ュ簱瀹屾垚鏃跺嚭搴撴暟閲忔竻闆�
+                        detail.OutboundQuantity = 0;
                     }
                     _stockService.StockInfoDetailService.Repository.UpdateData(stockInfo.Details);
                 }
@@ -673,7 +672,7 @@
                 // 鍒犻櫎闆跺簱瀛樻暟鎹�
                 await DeleteZeroQuantityStockDetails(stockInfo.Id);
 
-                await UpdateAffectedOrderDetails(task.OrderNo, returnLocks);
+                //await UpdateAffectedOrderDetails(task.OrderNo, returnLocks);
                 // 鏇存柊璐т綅鐘舵��
                 if (stockInfo.PalletType == PalletTypeEnum.Empty.ObjToInt())
                 {
@@ -697,7 +696,7 @@
                     await Db.Deleteable(task).ExecuteCommandAsync();
                 }
 
-                await RecalculateOrderStatus(task.OrderNo);
+                //await RecalculateOrderStatus(task.OrderNo);
                 try
                 {
                     // 璁板綍璐т綅鐘舵�佸彉鏇�
@@ -714,32 +713,32 @@
                     _logger.LogInformation($"InPickTaskCompleted AddLocationStatusChangeRecord : {ex.Message} ");
                 }
 
-                _logger.LogInformation($"鎵樼洏鍥炲簱瀹屾垚澶勭悊鎴愬姛 - 浠诲姟鍙�: {task.TaskNum}, 鎵樼洏: {task.PalletCode}, 璁㈠崟: {task.OrderNo} 璐т綅鐘舵�侊細{locationInfo.LocationStatus}");
-                _ = Task.Run(async () =>
-                {
-                    try
-                    {
-                        var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>()
-                            .FirstAsync(x => x.OrderNo == task.OrderNo);
+                //_logger.LogInformation($"鎵樼洏鍥炲簱瀹屾垚澶勭悊鎴愬姛 - 浠诲姟鍙�: {task.TaskNum}, 鎵樼洏: {task.PalletCode}, 璁㈠崟: {task.OrderNo} 璐т綅鐘舵�侊細{locationInfo.LocationStatus}");
+                //_ = Task.Run(async () =>
+                //{
+                //    try
+                //    {
+                //        var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+                //            .FirstAsync(x => x.OrderNo == task.OrderNo);
 
-                        if (outboundOrder != null)
-                        {
-                            // 妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚锛屽彧鏈夊畬鎴愭椂鎵嶅悜MES鍙嶉
-                            if (outboundOrder.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
-                            {
-                                await HandleOutboundOrderToMESCompletion(outboundOrder, outboundOrder.OrderNo);
-                            }
-                            else
-                            {
-                                _logger.LogInformation($"璁㈠崟{task.OrderNo}鐘舵�佷负{outboundOrder.OrderStatus}锛屾殏涓嶅悜MES鍙嶉");
-                            }
-                        }
-                    }
-                    catch (Exception ex)
-                    {
-                        _logger.LogError($"寮傛MES鍙嶉澶勭悊澶辫触 - OrderNo: {task.OrderNo}, Error: {ex.Message}");
-                    }
-                });
+                //        if (outboundOrder != null)
+                //        {
+                //            // 妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚锛屽彧鏈夊畬鎴愭椂鎵嶅悜MES鍙嶉
+                //            if (outboundOrder.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+                //            {
+                //                await HandleOutboundOrderToMESCompletion(outboundOrder, outboundOrder.OrderNo);
+                //            }
+                //            else
+                //            {
+                //                _logger.LogInformation($"璁㈠崟{task.OrderNo}鐘舵�佷负{outboundOrder.OrderStatus}锛屾殏涓嶅悜MES鍙嶉");
+                //            }
+                //        }
+                //    }
+                //    catch (Exception ex)
+                //    {
+                //        _logger.LogError($"寮傛MES鍙嶉澶勭悊澶辫触 - OrderNo: {task.OrderNo}, Error: {ex.Message}");
+                //    }
+                //});
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 2028d49..1966a7b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -127,33 +127,33 @@
                     _stockRepository.UpdateData(stockInfo);
                     _unitOfWorkManage.CommitTran();
                 }
-                TaskModel esstask = new TaskModel()
-                {
-                    taskType = "putaway",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>
-                    {
-                            new()
-                            {
-                                taskCode=newTask.TaskNum.ToString(),
-                                taskPriority=0,
-                                taskDescribe=new TaskDescribeType{
-                                containerCode=palletCode,
-                                containerType= "CT_KUBOT_STANDARD",
-                                fromLocationCode=stations.GetValueOrDefault(stationCode)??"",
-                                toStationCode="",
-                                toLocationCode=locationInfo.LocationCode,
-                                deadline=0,storageTag=""
-                                }
-                            }
-                    }
-                };
+                //TaskModel esstask = new TaskModel()
+                //{
+                //    taskType = "putaway",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>
+                //    {
+                //            new()
+                //            {
+                //                taskCode=newTask.TaskNum.ToString(),
+                //                taskPriority=0,
+                //                taskDescribe=new TaskDescribeType{
+                //                containerCode=palletCode,
+                //                containerType= "CT_KUBOT_STANDARD",
+                //                fromLocationCode=stations.GetValueOrDefault(stationCode)??"",
+                //                toStationCode="",
+                //                toLocationCode=locationInfo.LocationCode,
+                //                deadline=0,storageTag=""
+                //                }
+                //            }
+                //    }
+                //};
  
-                var result = await _eSSApiService.CreateTaskAsync(esstask);
+                //var result = await _eSSApiService.CreateTaskAsync(esstask);
 
-                _logger.LogInformation("鍒涘缓浠诲姟杩斿洖:  " + result);
-                if (result)
+                //_logger.LogInformation("鍒涘缓浠诲姟杩斿洖:  " + result);
+                //if (result)
                 {
                     try
                     {
@@ -169,10 +169,10 @@
                     }
                     return WebResponseContent.Instance.OK();
                 }
-                else
-                {
-                    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
-                }
+                //else
+                //{
+                //    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
+                //}
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index e5090c9..e85a591 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -88,31 +88,33 @@
 
                     _unitOfWorkManage.CommitTran();
 
-                    TaskModel esstask = new TaskModel()
-                    {
-                        taskType = "carry",
-                        taskGroupCode = "",
-                        groupPriority = 0,
-                        tasks = new List<TasksType>
-                        {
-                                new()
-                                {
-                                    taskCode=task.TaskNum.ToString(),
-                                    taskPriority=0,
-                                    taskDescribe=new TaskDescribeType{
-                                    containerCode=stockInfo.PalletCode,
-                                    containerType= "CT_KUBOT_STANDARD",
-                                    fromLocationCode=stockInfo.LocationCode??"",
-                                    toStationCode="",
-                                    toLocationCode="1-2",
-                                    deadline=0,storageTag=""
-                                    }
-                                }
-                        }
-                    };
-                    var result = await _eSSApiService.CreateTaskAsync(esstask);
+                    //TaskModel esstask = new TaskModel()
+                    //{
+                    //    taskType = "carry",
+                    //    taskGroupCode = "",
+                    //    groupPriority = 0,
+                    //    tasks = new List<TasksType>
+                    //    {
+                    //            new()
+                    //            {
+                    //                taskCode=task.TaskNum.ToString(),
+                    //                taskPriority=0,
+                    //                taskDescribe=new TaskDescribeType
+                    //                {
+                    //                    containerCode=stockInfo.PalletCode,
+                    //                    containerType= "CT_KUBOT_STANDARD",
+                    //                    fromLocationCode=stockInfo.LocationCode??"",
+                    //                    toStationCode="",
+                    //                    toLocationCode="1-2",
+                    //                    deadline=0,
+                    //                    storageTag=""
+                    //                }
+                    //            }
+                    //    }
+                    //};
+                    //var result = await _eSSApiService.CreateTaskAsync(esstask);
 
-                    _logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
+                    //_logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
                 }
                 return content.OK("绌烘墭鍑哄簱鎴愬姛!");
             }
@@ -314,45 +316,46 @@
                     _outboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                 }
                 _unitOfWorkManage.CommitTran();
-                TaskModel esstask = new TaskModel()
-                {
-                    taskType = "carry",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>()
-                };
+                return WebResponseContent.Instance.OK();
+                //TaskModel esstask = new TaskModel()
+                //{
+                //    taskType = "carry",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>()
+                //};
 
-                foreach (var task in tasks)
-                {
-                    esstask.
-                       tasks.Add(new TasksType
-                       {
-                           taskCode = task.TaskNum.ToString(),
-                           taskPriority = 0,
-                           taskDescribe = new TaskDescribeType
-                           {
-                               containerCode = task.PalletCode,
-                               containerType = "CT_KUBOT_STANDARD",
-                               fromLocationCode = task.SourceAddress ?? "",
-                               toStationCode = "",
-                               toLocationCode = task.TargetAddress,
-                               deadline = 0,
-                               storageTag = ""
-                           }
-                       }
-                   );
-                }
-                var result = await _eSSApiService.CreateTaskAsync(esstask);
+                //foreach (var task in tasks)
+                //{
+                //    esstask.
+                //       tasks.Add(new TasksType
+                //       {
+                //           taskCode = task.TaskNum.ToString(),
+                //           taskPriority = 0,
+                //           taskDescribe = new TaskDescribeType
+                //           {
+                //               containerCode = task.PalletCode,
+                //               containerType = "CT_KUBOT_STANDARD",
+                //               fromLocationCode = task.SourceAddress ?? "",
+                //               toStationCode = "",
+                //               toLocationCode = task.TargetAddress,
+                //               deadline = 0,
+                //               storageTag = ""
+                //           }
+                //       }
+                //   );
+                //}
+                //var result = await _eSSApiService.CreateTaskAsync(esstask);
 
-                _logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
-                if (result)
-                {
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
-                }
+                //_logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
+                //if (result)
+                //{
+                //    return WebResponseContent.Instance.OK();
+                //}
+                //else
+                //{
+                //    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
+                //}
             }
             catch (Exception ex)
             {
@@ -776,46 +779,47 @@
                     _outboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                 }
                 _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
                 //PushTasksToWCS(tasks);
-                TaskModel esstask = new TaskModel()
-                {
-                    taskType = "carry",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>()
-                };
+                //TaskModel esstask = new TaskModel()
+                //{
+                //    taskType = "carry",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>()
+                //};
 
-                foreach (var task in tasks)
-                {
-                    esstask.
-                       tasks.Add(new TasksType
-                       {
-                           taskCode = task.TaskNum.ToString(),
-                           taskPriority = 0,
-                           taskDescribe = new TaskDescribeType
-                           {
-                               containerCode = task.PalletCode,
-                               containerType = "CT_KUBOT_STANDARD",
-                               fromLocationCode = task.SourceAddress ?? "",
-                               toStationCode = "",
-                               toLocationCode = task.TargetAddress,
-                               deadline = 0,
-                               storageTag = ""
-                           }
-                       }
-                   );
-                }
-                var result = await _eSSApiService.CreateTaskAsync(esstask);
+                //foreach (var task in tasks)
+                //{
+                //    esstask.
+                //       tasks.Add(new TasksType
+                //       {
+                //           taskCode = task.TaskNum.ToString(),
+                //           taskPriority = 0,
+                //           taskDescribe = new TaskDescribeType
+                //           {
+                //               containerCode = task.PalletCode,
+                //               containerType = "CT_KUBOT_STANDARD",
+                //               fromLocationCode = task.SourceAddress ?? "",
+                //               toStationCode = "",
+                //               toLocationCode = task.TargetAddress,
+                //               deadline = 0,
+                //               storageTag = ""
+                //           }
+                //       }
+                //   );
+                //}
+                //var result = await _eSSApiService.CreateTaskAsync(esstask);
 
-                _logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
-                if (result)
-                {
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
-                }
+                //_logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
+                //if (result)
+                //{
+                //    return WebResponseContent.Instance.OK();
+                //}
+                //else
+                //{
+                //    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
+                //}
 
             }
             catch (Exception ex)
@@ -1173,46 +1177,47 @@
                 BaseDal.AddData(tasks);
                 _locationInfoService.UpdateData(locationInfos);
                 _unitOfWorkManage.CommitTran();
-                TaskModel esstask = new TaskModel()
-                {
-                    taskType = "carry",
-                    taskGroupCode = "",
-                    groupPriority = 0,
-                    tasks = new List<TasksType>()
-                };
-
-                foreach (var task in tasks)
-                {
-                    esstask.
-                       tasks.Add(new TasksType
-                       {
-                           taskCode = task.TaskNum.ToString(),
-                           taskPriority = 0,
-                           taskDescribe = new TaskDescribeType
-                           {
-                               containerCode = task.PalletCode,
-                               containerType = "CT_KUBOT_STANDARD",
-                               fromLocationCode = task.SourceAddress ?? "",
-                               toStationCode = "",
-                               toLocationCode = task.TargetAddress,
-                               deadline = 0,
-                               storageTag = ""
-                           }
-                       }
-                   );
-                }
-                var result = await _eSSApiService.CreateTaskAsync(esstask);
-
-                _logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
-                if (result)
-                {
-                    return WebResponseContent.Instance.OK();
-                }
-                else
-                {
-                    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
-                }
                 content.OK();
+                //TaskModel esstask = new TaskModel()
+                //{
+                //    taskType = "carry",
+                //    taskGroupCode = "",
+                //    groupPriority = 0,
+                //    tasks = new List<TasksType>()
+                //};
+
+                //foreach (var task in tasks)
+                //{
+                //    esstask.
+                //       tasks.Add(new TasksType
+                //       {
+                //           taskCode = task.TaskNum.ToString(),
+                //           taskPriority = 0,
+                //           taskDescribe = new TaskDescribeType
+                //           {
+                //               containerCode = task.PalletCode,
+                //               containerType = "CT_KUBOT_STANDARD",
+                //               fromLocationCode = task.SourceAddress ?? "",
+                //               toStationCode = "",
+                //               toLocationCode = task.TargetAddress,
+                //               deadline = 0,
+                //               storageTag = ""
+                //           }
+                //       }
+                //   );
+                //}
+                //var result = await _eSSApiService.CreateTaskAsync(esstask);
+
+                //_logger.LogInformation("鍒涘缓浠诲姟PalletOutboundTask 杩斿洖:  " + result);
+                //if (result)
+                //{
+                //    return WebResponseContent.Instance.OK();
+                //}
+                //else
+                //{
+                //    return WebResponseContent.Instance.Error("涓嬪彂鏈哄櫒浜轰换鍔″け璐ワ紒");
+                //}
+                //content.OK();
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/AgvTaskJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/AgvTaskJob.cs"
new file mode 100644
index 0000000..4cc8dd5
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/AgvTaskJob.cs"
@@ -0,0 +1,72 @@
+锘縰sing Quartz;
+using SqlSugar;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_DTO.Basic;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer
+{
+    [DisallowConcurrentExecution]
+    public class AgvTaskJob : IJob
+    {
+        private readonly ILogger<AgvTaskJob> _logger;
+        private readonly ISqlSugarClient _db;
+        private readonly IESSApiService _eSSApiService;
+        // 閫氳繃鏋勯�犲嚱鏁扮洿鎺ユ敞鍏ヤ緷璧�
+        public AgvTaskJob(ILogger<AgvTaskJob> logger, ISqlSugarClient db, IESSApiService eSSApiService)
+        {
+            _logger = logger;
+            _db = db;
+            _eSSApiService = eSSApiService;
+        }
+
+        public async Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                var tasks = await _db.Queryable<Dt_Task>()
+                    .Where(x => x.TaskStatus == (int)TaskStatusEnum.New)
+                    .ToListAsync();
+                foreach (var item in tasks)
+                {
+                    TaskModel esstask = new TaskModel()
+                    {
+                        taskType = item.TaskType.GetTaskTypeGroup()==TaskTypeGroup.InboundGroup? "putaway": "carry",
+                        taskGroupCode = "",
+                        groupPriority = 0,
+                        tasks = new List<TasksType>
+                        {
+                                new()
+                                {
+                                    taskCode=item.TaskNum.ToString(),
+                                    taskPriority=0,
+                                    taskDescribe = new TaskDescribeType
+                                    {
+                                        containerCode = item.PalletCode,
+                                        containerType = "CT_KUBOT_STANDARD",
+                                        fromLocationCode = item.SourceAddress,
+                                        toStationCode = "",
+                                        toLocationCode = item.TargetAddress,
+                                        deadline = 0,
+                                    }
+                                }
+                        }
+                    };
+
+                    var result = await _eSSApiService.CreateTaskAsync(esstask);
+                    if (result)
+                    {
+                        item.TaskStatus = (int)TaskStatusEnum.HasSent;
+                        await _db.Updateable(item).ExecuteCommandAsync();
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "瀹氭椂浠诲姟鎵ц澶辫触");
+            }
+        }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs"
new file mode 100644
index 0000000..cdd7ef8
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs"
@@ -0,0 +1,59 @@
+锘�
+using Microsoft.AspNetCore.Builder;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using WIDESEA.QuartzJob;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_WMSServer
+{
+    /// <summary>
+    /// Quartz 鍚姩鏈嶅姟
+    /// </summary>
+    public static class QuartzJobMiddleWare
+    {
+        public static void UseQuartzJobMildd(this IApplicationBuilder app)
+        {
+            if (app == null) throw new ArgumentNullException(nameof(app));
+            var schedulerCenter = app.ApplicationServices.GetService(typeof(ISchedulerCenter)) as ISchedulerCenter;
+            try
+            {
+                var allQzServices = new List<TasksQz>()
+                {
+                    new TasksQz()
+                    {
+                         Id = 1,
+                         AssemblyName = "WIDESEA_WMSServer",
+                         ClassName = "AgvTaskJob",
+                         CreateTime = DateTime.Now,
+                         IntervalSecond = 3,
+                         IsDeleted = false,
+                         IsStart = false,
+                         JobGroup = "WIDESEA_WMSServer",
+                         Name = "AgvTaskJob",
+                         TriggerType = 0
+                    },
+                   
+                };
+                foreach (var item in allQzServices)
+                {
+                    var ResuleModel = schedulerCenter.AddScheduleJobAsync(item).Result;
+                    if (ResuleModel.Status)
+                    {
+                        ConsoleHelper.WriteSuccessLine($"{item.ClassName}鍚姩鎴愬姛");
+                    }
+                    else
+                    {
+                        Console.Out.WriteLine($"QuartzNetJob{item.Name}鍚姩澶辫触锛侀敊璇俊鎭細{ResuleModel.Message}");
+                    }
+                }
+                schedulerCenter.StartScheduleAsync();
+            }
+            catch (Exception e)
+            {
+                throw;
+            }
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
index 26711fb..540eeae 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs"
@@ -10,11 +10,14 @@
 using Newtonsoft.Json.Converters;
 using Newtonsoft.Json.Serialization;
 using Quartz;
+using Quartz.Impl;
+using Quartz.Spi;
 using Serilog;
 using System.Net.Security;
 using System.Reflection;
 using System.Runtime.ConstrainedExecution;
 using System.Text;
+using WIDESEA.QuartzJob;
 using WIDESEA_Core;
 using WIDESEA_Core.Authorization;
 using WIDESEA_Core.BaseServices;
@@ -24,8 +27,11 @@
 using WIDESEA_Core.Helper;
 //using WIDESEA_Core.HostedService;
 using WIDESEA_Core.Middlewares;
+using WIDESEA_DTO.Quartz;
+using WIDESEA_WMSServer;
 using WIDESEA_WMSServer.Filter;
 using WIDESEA_WMSServer.Jobs;
+using static Quartz.Logging.OperationName;
 
 var builder = WebApplication.CreateBuilder(args);
 
@@ -149,14 +155,16 @@
     client.BaseAddress = new Uri(erpurl!);
     client.Timeout = TimeSpan.FromSeconds(30);
 
-})  ;
- 
+});
+builder.Services.AddSingleton<IJobFactory, JobFactory>();
+builder.Services.AddTransient<AgvTaskJob>();//Job使用瞬时依赖注入
+builder.Services.AddSingleton<ISchedulerCenter, SchedulerCenterServer>();
+
 builder.Services.AddQuartz(q =>
 {
     
     var jobKey = new JobKey("ErpJob");
     q.AddJob<ErpJob>(opts => opts.WithIdentity(jobKey));
-
 
     // 添加触发器 - 每天10:00, 14:00, 20:00执行
     q.AddTrigger(opts => opts
@@ -171,14 +179,13 @@
         .ForJob(inventoryLockJobKey)
         .WithIdentity("InventoryLockJob-trigger")
         .WithCronSchedule("0 0/10 * * * ?")); // 每10分钟执行一次
-
 });
 
- 
 builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);
 var app = builder.Build();
 
- 
+app.UseQuartzJobMildd();
+
 app.UseMiniProfiler();//性能分析器
 app.ConfigureApplication();//配置文件
 app.UseApplicationSetup();//启动配置

--
Gitblit v1.9.3