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_OutboundService/OutStockLockInfoService.cs | 74 +++++++++++++++++++++++++++---------
1 files changed, 55 insertions(+), 19 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_OutboundService/OutStockLockInfoService.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/OutStockLockInfoService.cs"
index 0e84c80..a24c5a0 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/OutStockLockInfoService.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/OutStockLockInfoService.cs"
@@ -43,7 +43,7 @@
Dt_OutboundOrderDetail outboundOrderDetail,
Dt_StockInfo outStock,
decimal assignQuantity,
- string barcode = null)
+ string barcode = null,string outboundBatchNo = "")
{
// 鑾峰彇搴撳瓨鏄庣粏淇℃伅
var stockDetails = outStock.Details
@@ -57,22 +57,24 @@
// 纭畾鏉$爜
string targetBarcode;
+ var firstAvailableDetail=new Dt_StockInfoDetail();
if (!string.IsNullOrEmpty(barcode))
{
// 楠岃瘉鎸囧畾鐨勬潯鐮佹槸鍚﹀瓨鍦�
- var specifiedBarcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == barcode);
- if (specifiedBarcodeDetail == null)
+ firstAvailableDetail = stockDetails.FirstOrDefault(x => x.Barcode == barcode);
+ if (firstAvailableDetail == null)
{
throw new Exception($"鎸囧畾鐨勬潯鐮乕{barcode}]鍦ㄥ簱瀛樹腑涓嶅瓨鍦�");
}
+
targetBarcode = barcode;
}
else
{
// 浣跨敤绗竴涓彲鐢ㄦ潯鐮�
- var firstAvailableDetail = stockDetails
+ firstAvailableDetail = stockDetails
.Where(x => x.StockQuantity > x.OutboundQuantity)
- .OrderBy(x => x.CreateDate)
+ .OrderByDescending(x => x.CreateDate)
.FirstOrDefault();
if (firstAvailableDetail == null)
@@ -83,13 +85,9 @@
}
return new Dt_OutStockLockInfo()
- {
- lineNo= outboundOrderDetail.lineNo,
-
+ {
PalletCode = outStock.PalletCode,
- AssignQuantity = assignQuantity,
- MaterielCode = outboundOrderDetail.MaterielCode,
- BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
+ AssignQuantity = assignQuantity,
LocationCode = outStock.LocationCode,
MaterielName = outboundOrderDetail.MaterielName,
OrderDetailId = outboundOrderDetail.Id,
@@ -99,25 +97,63 @@
.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode)
.Sum(x => x.StockQuantity),
Status = (int)OutLockStockStatusEnum.宸插垎閰�,
- StockId = outStock.Id,
- Unit = outboundOrderDetail.Unit,
- FactoryArea = outboundOrder.FactoryArea,
+ StockId = outStock.Id,
OrderType=outboundOrder.OrderType,
- SupplyCode = outboundOrderDetail.SupplyCode,
- WarehouseCode = outboundOrderDetail.WarehouseCode,
+ SupplyCode = firstAvailableDetail.SupplyCode,
+ WarehouseCode = firstAvailableDetail.WarehouseCode,
// 鏂板瀛楁
CurrentBarcode = targetBarcode,
OriginalLockQuantity = assignQuantity,
- IsSplitted = 0
+ IsSplitted = 0,
+ MaterielCode = outboundOrderDetail.MaterielCode,
+ BatchNo = firstAvailableDetail.BatchNo,
+ Unit = firstAvailableDetail.Unit,
+ BarcodeQty = firstAvailableDetail.BarcodeQty,
+ BarcodeUnit = firstAvailableDetail.BarcodeUnit,
+ FactoryArea = firstAvailableDetail.FactoryArea,
+ lineNo = outboundOrderDetail.lineNo,
+ OutboundBatchNo= outboundBatchNo
};
}
+
+
+ public List<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_StockInfo> outStocks, int? taskNum = null)
+ {
+ List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+
+ foreach (var item in outStocks)
+ {
+ Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+ {
+ PalletCode = item.PalletCode,
+ AssignQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.OutboundQuantity),
+ MaterielCode = outboundOrderDetail.MaterielCode,
+ BatchNo = outboundOrderDetail.BatchNo,
+ LocationCode = item.LocationCode,
+ MaterielName = outboundOrderDetail.MaterielName,
+ OrderDetailId = outboundOrderDetail.Id,
+ OrderNo = outboundOrder.OrderNo,
+ OrderType = outboundOrder.OrderType,
+ OriginalQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
+ Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(),
+ StockId = item.Id,
+ TaskNum = taskNum,
+
+
+ };
+ outStockLockInfos.Add(outStockLockInfo);
+ }
+
+ return outStockLockInfos;
+ }
+
/// <summary>
/// 鏍规嵁璁㈠崟鏄庣粏ID鑾峰彇鍑哄簱閿佸畾淇℃伅
/// </summary>
public async Task<List<Dt_OutStockLockInfo>> GetByOrderDetailId(int orderDetailId)
{
return await Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == orderDetailId)
+ .Where(x => x.OrderDetailIds.Contains(orderDetailId.ToString()))
.OrderBy(x => x.Id)
.ToListAsync();
}
@@ -219,7 +255,7 @@
public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus)
{
- return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && outStockStatus == null ? true : x.Status == outStockStatus.ObjToInt());
+ return BaseDal.QueryData(x => x.OrderDetailIds.Contains(orderDetailId.ToString()));
}
}
--
Gitblit v1.9.3