From 5fc251a847ccc0540da8b112ed2bddba846455d8 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期一, 17 十一月 2025 20:39:49 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/SplitPackageService.cs | 31 ++++--
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 215 +++---------------------------------------
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundPickingService.cs | 9 -
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 4
4 files changed, 43 insertions(+), 216 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_IOutboundService/IOutboundPickingService.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_IOutboundService/IOutboundPickingService.cs"
index 5e9808f..affec24 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_IOutboundService/IOutboundPickingService.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_IOutboundService/IOutboundPickingService.cs"
@@ -15,22 +15,17 @@
{
IRepository<Dt_PickingRecord> Repository { get; }
- Task<WebResponseContent> CancelPicking(CancelPickingRequest request);
Task<WebResponseContent> CancelPicking(string orderNo, string palletCode, string barcode);
- Task<WebResponseContent> ConfirmPicking(PickingConfirmRequest request);
+ Task<bool> CheckPalletNeedReturn(string orderNo, string palletCode);
Task<WebResponseContent> ConfirmPicking(string orderNo, string palletCode, string barcode);
Task<WebResponseContent> DirectOutbound(DirectOutboundRequest request);
-
Task<List<OutStockLockListResp>> GetOutStockLockListAsync(string orderNo);
Task<WebResponseContent> GetPalletOutboundStatus(string palletCode);
- Task GetPalletPickingSummary(string orderNo, string palletCode);
Task<List<Dt_OutStockLockInfo>> GetPickedList(string orderNo, string palletCode);
Task<List<Dt_PickingRecord>> GetPickingHistory(int orderId);
Task<object> GetPickingSummary(ConfirmPickingDto dto);
-
Task<List<Dt_OutStockLockInfo>> GetUnpickedList(string orderNo, string palletCode);
- Task<WebResponseContent> ValidateBarcode(string barcode);
-
Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason);
+ Task<WebResponseContent> ValidateBarcode(string barcode);
}
}
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 159cba4..8c52841 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"
@@ -139,99 +139,6 @@
}
}
- /// <summary>
- /// 鎵爜鎷i�夌‘璁�
- /// </summary>
- public async Task<WebResponseContent> ConfirmPicking(PickingConfirmRequest request)
- {
- try
- {
- _unitOfWorkManage.BeginTran();
-
- // 1. 楠岃瘉鏉$爜鏈夋晥鎬�
- var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(x => x.Barcode == request.Barcode && x.MaterielCode == request.MaterielCode)
- .FirstAsync();
-
- if (stockDetail == null)
- return WebResponseContent.Instance.Error("鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
-
- // 2. 妫�鏌ュ簱瀛樺彲鐢ㄦ暟閲�
- decimal availableQuantity = stockDetail.StockQuantity - stockDetail.OutboundQuantity;
- if (request.PickQuantity > availableQuantity)
- return WebResponseContent.Instance.Error($"鎷i�夋暟閲忚秴杩囧彲鐢ㄥ簱瀛橈紝鍙敤鏁伴噺锛歿availableQuantity}");
-
- // 3. 鏌ユ壘鐩稿叧鐨勫嚭搴撻攣瀹氫俊鎭紙鏀寔鎷嗗寘鍚庣殑鏂版潯鐮侊級
- var lockInfo = await FindLockInfoByBarcode(request.OrderDetailId, request.Barcode, request.MaterielCode);
-
- if (lockInfo == null)
- return WebResponseContent.Instance.Error("鏈壘鍒扮浉鍏崇殑鍑哄簱閿佸畾淇℃伅");
-
- // 4. 妫�鏌ラ攣瀹氭暟閲�
- decimal remainingLockQuantity = lockInfo.AssignQuantity - lockInfo.PickedQty;
- if (request.PickQuantity > remainingLockQuantity)
- return WebResponseContent.Instance.Error($"鎷i�夋暟閲忚秴杩囬攣瀹氭暟閲忥紝鍓╀綑鍙嫞閫夛細{remainingLockQuantity}");
-
- // 5. 鏇存柊閿佸畾淇℃伅鐨勫凡鎷i�夋暟閲�
- lockInfo.PickedQty += request.PickQuantity;
- await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
-
- // 6. 鏇存柊搴撳瓨鍑哄簱鏁伴噺 - 瀹為檯鍑忓皯搴撳瓨
- stockDetail.OutboundQuantity += request.PickQuantity;
- await _stockInfoService.Db.Updateable(stockDetail).ExecuteCommandAsync();
-
- // 7. 鏇存柊鍑哄簱鍗曟槑缁�
- var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.Id == request.OrderDetailId)
- .FirstAsync();
-
- orderDetail.OverOutQuantity += request.PickQuantity;
- orderDetail.LockQuantity -= request.PickQuantity;
-
- // 妫�鏌ユ槸鍚﹀畬鎴愬嚭搴�
- if (Math.Abs(orderDetail.OverOutQuantity - orderDetail.OrderQuantity) < 0.001m)
- {
- orderDetail.OrderDetailStatus = (int)OrderDetailStatusEnum.Over;
- orderDetail.LockQuantity = 0;
-
- // 鏇存柊鐩稿叧鐨勯攣瀹氫俊鎭姸鎬佷负宸插嚭搴�
- var relatedLockInfos = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == request.OrderDetailId &&
- x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
- .ToListAsync();
-
- foreach (var relatedLock in relatedLockInfos)
- {
- relatedLock.Status = (int)OutLockStockStatusEnum.宸插嚭搴�;
- }
- await _outStockLockInfoService.Db.Updateable(relatedLockInfos).ExecuteCommandAsync();
- }
-
- await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
-
- // 8. 璁板綍鎷i�夊巻鍙�
- var pickHistory = new Dt_PickingRecord
- {
- OrderDetailId = request.OrderDetailId,
- Barcode = request.Barcode,
- PickQuantity = request.PickQuantity,
- PickTime = DateTime.Now,
-
- LocationCode = request.LocationCode,
- StockId = stockDetail.StockId
- };
- await Db.Insertable(pickHistory).ExecuteCommandAsync();
-
- _unitOfWorkManage.CommitTran();
-
- return WebResponseContent.Instance.OK("鎷i�夌‘璁ゆ垚鍔�");
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- return WebResponseContent.Instance.Error($"鎷i�夌‘璁ゅけ璐�: {ex.Message}");
- }
- }
public async Task<WebResponseContent> ConfirmPicking(string orderNo, string palletCode, string barcode)
{
@@ -637,13 +544,14 @@
try
{
await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync();
-
+ var targetAddress = task.TargetAddress;
+ _taskRepository.DeleteData(task);
// 缁� ESS 娴佸姩淇″彿鍜屽垱寤轰换鍔�
try
{
var result = await _eSSApiService.MoveContainerAsync(new WIDESEA_DTO.Basic.MoveContainerRequest
{
- slotCode = movestations[task.TargetAddress],
+ slotCode = movestations[targetAddress],
containerCode = palletCode
});
if (result)
@@ -662,7 +570,7 @@
taskDescribe = new TaskDescribeType {
containerCode = palletCode,
containerType = "CT_KUBOT_STANDARD",
- fromLocationCode = stations.GetValueOrDefault(task.TargetAddress) ?? "",
+ fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
toStationCode = "",
toLocationCode = tasks.First().TargetAddress,
deadline = 0, storageTag = ""
@@ -670,7 +578,7 @@
}
}
};
-
+
var resulttask = await _eSSApiService.CreateTaskAsync(esstask);
@@ -682,7 +590,7 @@
_logger.LogInformation("ReturnRemaining 鍒涘缓浠诲姟杩斿洖 catch err: " + ex.Message);
}
-
+
return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛锛屽叡鍥炲簱鏁伴噺锛歿totalReturnQty}");
}
@@ -764,7 +672,7 @@
.Where(x => x.OrderNo == orderNo &&
x.PalletCode == palletCode &&
x.CurrentBarcode == barcode &&
- x.Status == 2)
+ x.Status == 6)
.FirstAsync();
if (outStockInfo == null)
@@ -775,11 +683,15 @@
outStockInfo.Status = 1;
await _outStockLockInfoService.Db.Updateable(outStockInfo).ExecuteCommandAsync();
- //// 杩樺師搴撳瓨鍑哄簱鏁伴噺
- //await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
- // .SetColumns(x => x.OutboundQuantity == x.OutboundQuantity - outStockInfo.AssignQuantity)
- // .Where(x => x.Barcode == barcode)
- // .ExecuteCommandAsync();
+
+ var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.Barcode == barcode && x.StockId == outStockInfo.StockId)
+ .FirstAsync();
+
+ stockDetail.StockQuantity += outStockInfo.AssignQuantity;
+ stockDetail.OutboundQuantity += outStockInfo.AssignQuantity;
+ await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
// 杩樺師鍑哄簱鍗曟槑缁�
var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
@@ -802,19 +714,6 @@
{
return WebResponseContent.Instance.Error($"鍙栨秷鎷i�夊け璐ワ細{ex.Message}");
}
- }
- /// <summary>
- /// 鏍规嵁鏉$爜鏌ユ壘閿佸畾淇℃伅
- /// </summary>
- private async Task<Dt_OutStockLockInfo> FindLockInfoByBarcode(int orderDetailId, string barcode, string materielCode)
- {
- return await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == orderDetailId &&
- x.MaterielCode == materielCode &&
- x.CurrentBarcode == barcode &&
- x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓� &&
- x.AssignQuantity > x.PickedQty)
- .FirstAsync();
}
// 鑾峰彇鏈嫞閫夊垪琛�
@@ -896,88 +795,6 @@
.ToListAsync();
}
- public async Task GetPalletPickingSummary(string orderNo, string palletCode)
- {
- var summary = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderNo == orderNo && x.PalletCode == palletCode)
- .GroupBy(x => new { x.PalletCode, x.Status })
- .Select(x => new
- {
- PalletCode = x.PalletCode,
- Status = x.Status,
- TotalAssignQty = SqlFunc.AggregateSum(x.AssignQuantity),
- TotalPickedQty = SqlFunc.AggregateSum(x.PickedQty)
- })
- .ToListAsync();
-
- // return summary;
- }
-
-
-
- /// <summary>
- /// 鎾ら攢鎷i��
- /// </summary>
- public async Task<WebResponseContent> CancelPicking(CancelPickingRequest request)
- {
- // 瀹炵幇鎾ら攢鎷i�夌殑閫昏緫锛岄渶瑕侊細
- // 1. 鎭㈠搴撳瓨鍑哄簱鏁伴噺
- // 2. 鎭㈠閿佸畾淇℃伅鐨勫凡鎷i�夋暟閲�
- // 3. 鎭㈠鍑哄簱鍗曟槑缁嗙殑宸插嚭鏁伴噺鍜岄攣瀹氭暟閲�
- // 4. 鍒犻櫎鎴栨爣璁版嫞閫夊巻鍙茶褰�
- // 娉ㄦ剰锛氳繖閲岄渶瑕佷簨鍔″鐞�
- try
- {
- _unitOfWorkManage.BeginTran();
-
- var pickHistory = await Db.Queryable<Dt_PickingRecord>()
- .Where(x => x.Id == request.PickingHistoryId)
- .FirstAsync();
-
- if (pickHistory == null)
- return WebResponseContent.Instance.Error("鏈壘鍒版嫞閫夎褰�");
-
- // 鎭㈠搴撳瓨
- var stockDetail = await _stockInfoService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(x => x.Barcode == pickHistory.Barcode && x.StockId == pickHistory.StockId)
- .FirstAsync();
- if (stockDetail != null)
- {
- stockDetail.OutboundQuantity -= pickHistory.PickQuantity;
- await _stockInfoService.Db.Updateable(stockDetail).ExecuteCommandAsync();
- }
- // 鎭㈠閿佸畾淇℃伅
- var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == pickHistory.OrderDetailId && x.StockId == pickHistory.StockId)
- .FirstAsync();
- lockInfo.PickedQty -= pickHistory.PickQuantity;
- await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
-
- // 鎭㈠鍑哄簱鍗曟槑缁�
- var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.Id == pickHistory.OrderDetailId)
- .FirstAsync();
- orderDetail.OverOutQuantity -= pickHistory.PickQuantity;
- orderDetail.LockQuantity += pickHistory.PickQuantity;
- if (orderDetail.OverOutQuantity < orderDetail.OrderQuantity)
- {
- orderDetail.OrderDetailStatus = orderDetail.LockQuantity > 0 ?
- (int)OrderDetailStatusEnum.Outbound : (int)OrderDetailStatusEnum.AssignOverPartial;
- }
- await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
-
- // 鍒犻櫎鎷i�夊巻鍙茶褰�
- await Db.Deleteable<Dt_PickingRecord>().Where(x => x.Id == request.PickingHistoryId).ExecuteCommandAsync();
-
- _unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK("鎾ら攢鎴愬姛");
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- return WebResponseContent.Instance.Error($"鎾ら攢澶辫触: {ex.Message}");
- }
- }
/// <summary>
/// 鑾峰彇鎵樼洏鐨勫嚭搴撶姸鎬佷俊鎭�
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/SplitPackageService.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/SplitPackageService.cs"
index 7635616..54ae514 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/SplitPackageService.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/SplitPackageService.cs"
@@ -57,7 +57,7 @@
return WebResponseContent.Instance.Error("鏈壘鍒版湁鏁堢殑鍑哄簱閿佸畾淇℃伅");
// 2. 妫�鏌ュ墿浣欓攣瀹氭暟閲�
- decimal remainingLockQuantity = lockInfo.AssignQuantity - lockInfo.PickedQty;
+ decimal remainingLockQuantity = lockInfo.OriginalQuantity - lockInfo.PickedQty;
if (request.SplitQuantity > remainingLockQuantity)
return WebResponseContent.Instance.Error($"鎷嗗寘鏁伴噺涓嶈兘澶т簬鍓╀綑閿佸畾鏁伴噺锛屽墿浣欙細{remainingLockQuantity}");
@@ -67,6 +67,11 @@
if (stockDetail == null)
throw new Exception($"鏈壘鍒版潯鐮亄request.OriginalBarcode}瀵瑰簲鐨勫簱瀛樿褰�");
+ stockDetail.StockQuantity = request.SplitQuantity;
+ stockDetail.OutboundQuantity = request.SplitQuantity;
+ _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>(stockDetail).ExecuteCommand();
+
+
var seq = await _dailySequenceService.GetNextSequenceAsync();
// 3. 鐢熸垚鏂版潯鐮�
string newBarcode = "WSLOT" + DateTime.Now.ToString("yyyyMMdd") + seq.ToString()?.PadLeft(5, '0');
@@ -75,23 +80,29 @@
// 涓烘媶鍖呬骇鐢熺殑鏂版潯鐮佸垱寤哄簱瀛樿褰�
var newStockDetail = new Dt_StockInfoDetail
- {
+ {
+ SupplyCode = stockDetail.SupplyCode,
+ WarehouseCode = stockDetail.WarehouseCode,
+ BarcodeQty = stockDetail.BarcodeQty,
+ BarcodeUnit = stockDetail.Barcode,
+ BusinessType = stockDetail.BusinessType,
+ Unit = stockDetail.Unit,
StockId = lockInfo.StockId,
- MaterielCode = lockInfo.MaterielCode,
- OrderNo = lockInfo.OrderNo,
- BatchNo = lockInfo.BatchNo,
+ MaterielCode = stockDetail.MaterielCode,
+ OrderNo = stockDetail.OrderNo,
+ BatchNo = stockDetail.BatchNo,
StockQuantity = remainingQty,
OutboundQuantity = remainingQty, // 閿佸畾鍏ㄩ儴鏁伴噺
Barcode = newBarcode,
InboundOrderRowNo = stockDetail.InboundOrderRowNo,
-
+
};
await _outStockLockInfoService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
// 4. 鍒涘缓鏂扮殑鍑哄簱閿佸畾淇℃伅锛堟柊鏉$爜锛�
var newLockInfo = new Dt_OutStockLockInfo
{
-
+
OrderNo = lockInfo.OrderNo,
OrderDetailId = lockInfo.OrderDetailId,
BatchNo = lockInfo.BatchNo,
@@ -108,7 +119,7 @@
Status = (int)OutLockStockStatusEnum.鍑哄簱涓�,
Unit = lockInfo.Unit,
SupplyCode = lockInfo.SupplyCode,
- OrderType=lockInfo.OrderType,
+ OrderType = lockInfo.OrderType,
CurrentBarcode = newBarcode, // 鏂版潯鐮�
OriginalLockQuantity = request.SplitQuantity,
IsSplitted = 1,
@@ -124,7 +135,7 @@
var splitHistory = new Dt_SplitPackageRecord
{
FactoryArea = lockInfo.FactoryArea,
- TaskNum=lockInfo.TaskNum,
+ TaskNum = lockInfo.TaskNum,
OutStockLockInfoId = lockInfo.Id,
StockId = stockDetail?.StockId ?? 0,
Operator = App.User.UserName,
@@ -132,7 +143,7 @@
OriginalBarcode = lockInfo.CurrentBarcode,
NewBarcode = newBarcode,
SplitQty = request.SplitQuantity,
- RemainQuantity = lockInfo.RemainQuantity - request.SplitQuantity,
+ RemainQuantity = lockInfo.OriginalQuantity - request.SplitQuantity,
MaterielCode = lockInfo.MaterielCode,
SplitTime = DateTime.Now,
OrderNo = request.OrderNo,
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 7d96932..27d5101 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"
@@ -119,6 +119,7 @@
try
{
Dt_Task task;
+
if (int.TryParse(taskNum, out var newTaskNum))
{
task = BaseDal.QueryFirst(x => x.TaskNum == newTaskNum);
@@ -131,6 +132,7 @@
{
return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
}
+ _logger.LogInformation($"TaskService TaskCompleted: {JsonConvert.SerializeObject(task)} , {task.TaskType} ");
MethodInfo? methodInfo = GetType().GetMethod(((TaskTypeEnum)task.TaskType) + "TaskCompleted");
if (methodInfo != null)
@@ -145,6 +147,7 @@
}
catch (Exception ex)
{
+ _logger.LogError($"TaskService TaskCompleted: {ex.Message} ");
return WebResponseContent.Instance.Error(ex.Message);
}
}
@@ -420,6 +423,7 @@
}
catch (Exception ex)
{
+ _logger.LogError($"TaskService OutEmptyTaskCompleted: {ex.Message} ");
return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
}
}
--
Gitblit v1.9.3