From 5909649db85ff29faf983154763cc4b7301665e2 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 18 十二月 2025 11:15:31 +0800
Subject: [PATCH] 新增任务调度功能及优化日志处理新增任务状态枚举值 HasSent,表示任务已发送。新增任务调度接口 `ISchedulerCenter`,定义任务调度相关方法。 新增任务工厂 `JobFactory`,通过依赖注入创建任务实例。 新增任务调度服务配置 `JobSetup`,支持依赖注入配置。 新增通用响应类 `ResponseContent`,封装任务调度操作结果。新增任务调度服务实现 `SchedulerCenterServer`,实现任务添加、暂停、恢复等功能。 新增任务信息 DTO `TaskInfoDto` 和任务计划实体类 `TasksQz`。 新增任务配置类 `JobConfig`,描述任务类型及执行间隔。 注释掉部分服务中的旧任务创建逻辑,准备替换为新调度机制。 新增 AGV 任务调度作业 `AgvTaskJob`,处理 AGV 任务调度。 新增 Quartz 中间件 `QuartzJobMiddleWare`,初始化任务调度。 在 `Program.cs` 中集成 Quartz,配置任务调度依赖注入。 优化日志记录和异常处理,提升代码可维护性和调试性。

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs |  320 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 319 insertions(+), 1 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_DTO/Outbound/OutboundOrderGetDTO.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/Outbound/OutboundOrderGetDTO.cs"
index e029706..bbb4ca0 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_DTO/Outbound/OutboundOrderGetDTO.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/Outbound/OutboundOrderGetDTO.cs"
@@ -1,8 +1,12 @@
-锘縰sing System;
+锘縰sing Microsoft.AspNetCore.Components.Forms;
+using Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Model.Models;
 
 namespace WIDESEA_DTO.Outbound
 {
@@ -12,4 +16,318 @@
         public int pageNo { get; set; }
 
     }
+    // 鎷嗗寘閾綝TO
+    public class SplitPackageChainDto
+    {
+        public int Id { get; set; }
+        public DateTime SplitTime { get; set; }
+        public string Operator { get; set; }
+        public string OriginalBarcode { get; set; }
+        public string NewBarcode { get; set; }
+        public decimal SplitQty { get; set; }
+        public decimal RemainQuantity { get; set; }
+        public bool IsReverted { get; set; }
+        public DateTime? RevertTime { get; set; }
+        public int? PreviousSplitRecordId { get; set; }
+
+        public int NewLockInfoId { get; set; }
+        public int Status { get; set; }
+    }
+    // 鎷嗗寘璇锋眰
+    public class SplitPackageRequest
+    {
+        public int OutStockLockInfoId { get; set; }
+        public string MaterielCode { get; set; }
+    
+        public string Operator { get; set; }
+
+        [Required(ErrorMessage = "璁㈠崟鍙蜂笉鑳戒负绌�")]
+        public string OrderNo { get; set; }
+
+        [Required(ErrorMessage = "鎵樼洏鍙蜂笉鑳戒负绌�")]
+        public string PalletCode { get; set; }
+
+        [Required(ErrorMessage = "鍘熸潯鐮佷笉鑳戒负绌�")]
+        public string OriginalBarcode { get; set; }
+
+        [Range(0.001, double.MaxValue, ErrorMessage = "鎷嗗寘鏁伴噺蹇呴』澶т簬0")]
+        public decimal SplitQuantity { get; set; }
+    }
+    public class ConfirmPickingDto
+    {
+        [JsonProperty("orderNo")]
+        public string OrderNo { get; set; }
+        [JsonProperty("palletCode")]
+        public string PalletCode { get; set; }
+        [JsonProperty("barcode")]
+        public string Barcode { get; set; }
+    }
+    public class SummaryPickingDto
+    {
+
+        public string PalletCode { get; set; }
+        public string MaterielCode { get; set; }
+        public int UnpickedCount { get; set; }
+        public decimal UnpickedQuantity { get; set; }
+        public int pickedCount { get; set; }
+
+    }
+    public class PickingConfirmRequest
+    {
+        public int OrderDetailId { get; set; }
+        public string Barcode { get; set; }
+        public string MaterielCode { get; set; }
+        public decimal PickQuantity { get; set; }
+        public string LocationCode { get; set; }
+        public string PalletCode { get; set; }
+        public int StockId { get; set; } // 搴撳瓨ID
+        public int OutStockLockInfoId { get; set; } // 鍑哄簱閿佸畾淇℃伅ID
+    }
+
+    public class DirectOutboundRequest
+    {
+        public string PalletCode { get; set; }
+        public string OrderNo { get; set; }
+    }
+
+ 
+
+    public class BackToStockRequest
+    {
+        public string PalletCode { get; set; }
+        public string CurrentLocation { get; set; }
+        public string TargetLocation { get; set; }
+        public string Operator { get; set; }
+    }
+
+    public class BackToStockCompleteRequest
+    {
+        public string TaskNum { get; set; }
+        public string TargetLocation { get; set; }
+        public DateTime CompleteTime { get; set; }
+    }
+    public class InputDto { }
+
+    public class OutputDto { }
+    #region 鍏ュ弬DTO
+    public class ScanCodeValidateInput : InputDto
+    {
+        public string ScanCode { get; set; } = string.Empty; // 鎵弿鐨勬潯鐮�
+        public string OrderNo { get; set; } = string.Empty; // 鍑哄簱鍗曞彿
+    }
+
+    public class PickingConfirmInput : InputDto
+    {
+        public string TaskNum { get; set; } = string.Empty; // 浠诲姟鍙�
+        public string PalletCode { get; set; } = string.Empty; // 鎵樼洏鐮�
+        public string MaterielBarcode { get; set; } = string.Empty; // 鐗╂枡鏉$爜
+    }
+
+    public class SplitPackageInput : InputDto
+    {
+        public long OutStockLockId { get; set; } // 寰呮媶鍒嗙殑鍑哄簱璇︽儏ID
+        public string NewBarcode { get; set; } = string.Empty; // 鏂版潯鐮�
+        public decimal SplitQty { get; set; } // 鏂版潯鐮佸垎閰嶆暟閲�
+    }
+
+    public class StockReturnInput : InputDto
+    {
+        public string OrderNo { get; set; } = string.Empty; // 鍑哄簱鍗曞彿
+        public string TaskNum { get; set; } = string.Empty; // 浠诲姟鍙凤紙鍙�夛級
+    }
+
+    public class OutStockLockDetailInput : InputDto
+    {
+        public long OutStockLockId { get; set; } // 鍑哄簱璇︽儏ID
+    }
+    #endregion
+
+    #region 鍑哄弬DTO
+    //[AutoMapFrom(typeof(OutStockLockInfo))]
+    public class OutStockLockInfoOutput : OutputDto
+    {
+        public string TaskNum { get; set; } = string.Empty;
+        public string PalletCode { get; set; } = string.Empty;
+        public string CurrentBarcode { get; set; } = string.Empty;
+        public decimal AssignQuantity { get; set; }
+        public decimal PickedQty { get; set; }
+        public int Status { get; set; }
+        public bool IsSplitted { get; set; }
+    }
+
+    //[AutoMapFrom(typeof(OutStockLockInfo))]
+    public class OutStockLockDetailOutput : OutputDto
+    {
+        public string CurrentBarcode { get; set; } = string.Empty;
+        public decimal AssignQuantity { get; set; }
+    }
+    public class LockInfoDetailDto : Dt_OutStockLockInfo
+    {
+        public string MaterielName { get; set; }
+        public string Unit { get; set; }
+    }
+    public class MaterielBarcodeValidateOutput : OutputDto
+    {
+        public bool IsValid { get; set; }
+        public long OutStockLockId { get; set; }
+        public decimal PackageQty { get; set; } // 鍒嗛厤鏁伴噺
+        public string Message { get; set; } = string.Empty;
+    }
+
+    //[AutoMapFrom(typeof(PickingRecord))]
+    public class PickingRecordOutput : OutputDto
+    {
+        public string Barcode { get; set; } = string.Empty;
+        public string PalletCode { get; set; } = string.Empty;
+        public decimal PickQuantity { get; set; }
+        public string PickTime { get; set; } = string.Empty;
+    }
+    #endregion
+
+    public class ScanCodeValidateReq
+    {
+        public string ScanCode { get; set; } = string.Empty; // 鎵弿鐨勬潯鐮�
+        public string OrderNo { get; set; } = string.Empty; // 鍑哄簱鍗曞彿
+    }
+
+
+
+    public class PickingConfirmReq
+    {
+        public string TaskNum { get; set; } = string.Empty; // 浠诲姟鍙�
+        public string PalletCode { get; set; } = string.Empty; // 鎵樼洏鐮�
+        public string MaterielBarcode { get; set; } = string.Empty; // 鐗╂枡鏉$爜
+    }
+
+
+
+    public class SplitPackageReq
+    {
+        public long OutStockLockId { get; set; } // 寰呮媶鍒嗙殑鍑哄簱璇︽儏ID
+        public string NewBarcode { get; set; } = string.Empty; // 鏂版潯鐮�
+        public decimal SplitQty { get; set; } // 鏂版潯鐮佸垎閰嶆暟閲�
+    }
+
+
+
+    public class StockReturnReq
+    {
+        public string OrderNo { get; set; } = string.Empty; // 鍑哄簱鍗曞彿
+        public string TaskNum { get; set; } = string.Empty; // 浠诲姟鍙凤紙鍙�夛級
+    }
+
+
+
+    public class OutStockLockDetailReq
+    {
+        public long OutStockLockId { get; set; } // 鍑哄簱璇︽儏ID
+    }
+
+
+
+    public class MaterielBarcodeValidateResp
+    {
+        public bool IsValid { get; set; }
+        public long OutStockLockId { get; set; }
+        public decimal PackageQty { get; set; } // 鏁村寘鏁伴噺锛堝垎閰嶆暟閲忥級
+        public string Message { get; set; } = string.Empty;
+    }
+
+
+    public class OutStockLockDetailResp
+    {
+        public string CurrentBarcode { get; set; } = string.Empty;
+        public decimal AssignQuantity { get; set; }
+    }
+
+
+
+    public class OutStockLockListResp
+    {
+        public long Id { get; set; }
+        public string TaskNum { get; set; } = string.Empty;
+        public string PalletCode { get; set; } = string.Empty;
+        public string CurrentBarcode { get; set; } = string.Empty;
+        public decimal AssignQuantity { get; set; }
+        public decimal PickedQty { get; set; }
+        public int Status { get; set; }
+        public bool IsSplitted { get; set; }
+    }
+
+
+
+    public class PickedRecordListResp
+    {
+        public string barcode { get; set; } = string.Empty;
+        public string palletCode { get; set; } = string.Empty;
+        public decimal pickQuantity { get; set; }
+        public string pickTime { get; set; } = string.Empty;
+    }
+
+    public class CancelPickingDto
+    {
+        public string OrderNo { get; set; }
+        public string PalletCode { get; set; }
+        public string Barcode { get; set; }
+    }
+
+ 
+
+    public class CancelSplitChainDto
+    {
+        [Required(ErrorMessage = "璁㈠崟鍙蜂笉鑳戒负绌�")]
+        public string OrderNo { get; set; }
+
+        [Required(ErrorMessage = "鎵樼洏鍙蜂笉鑳戒负绌�")]
+        public string PalletCode { get; set; }
+
+        [Required(ErrorMessage = "璧峰鏉$爜涓嶈兘涓虹┖")]
+        public string StartBarcode { get; set; }
+    }
+
+    public class SplitPackageChainInfoRequestDto
+    {
+        [Required(ErrorMessage = "璁㈠崟鍙蜂笉鑳戒负绌�")]
+        public string OrderNo { get; set; }
+
+        [Required(ErrorMessage = "鏉$爜涓嶈兘涓虹┖")]
+        public string Barcode { get; set; }
+    }
+
+    public class SplitPackageDto
+    {
+        public string OrderNo { get; set; }
+        public string PalletCode { get; set; }
+        public string OriginalBarcode { get; set; }
+        public decimal SplitQuantity { get; set; }
+        public string MaterielCode { get; set; }
+    }
+
+    public class RevertSplitDto
+    {
+        public string OriginalBarcode { get; set; }
+    }
+
+    // 鎷嗗寘缁撴灉绫�
+    public class SplitResult
+    {
+        public string materialCode { get; set; }
+        public string supplierCode { get; set; }
+
+        public string quantityTotal { get; set; }
+
+        public string batchNumber { get; set; }
+
+        public string  batch { get; set; }
+        public string factory { get; set; }
+
+        public string date { get; set; }
+
+       // public string OriginalBarcode { get; set; }
+       // public string NewBarcode { get; set; }
+        //public decimal SplitQuantity { get; set; }
+        //public decimal RemainQuantity { get; set; }
+    }
+ 
+
 }

--
Gitblit v1.9.3