From e25dc0d8fad5a2362bf75cf5ca9f26a0fe6c674c Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期四, 26 三月 2026 11:28:15 +0800
Subject: [PATCH] feat(WMS): 增强日志配置与添加事务处理支持
---
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs | 195 +++++++++++++++++++++++++++++++-----------------
1 files changed, 125 insertions(+), 70 deletions(-)
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index 1271ec3..5a531aa 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -1,4 +1,5 @@
-锘縰sing WIDESEA_Common.StockEnum;
+锘縰sing SqlSugar;
+using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_DTO.Stock;
using WIDESEA_IStockService;
@@ -51,6 +52,51 @@
}
/// <summary>
+ /// 鍦ㄤ簨鍔′腑鎵ц鎿嶄綔
+ /// </summary>
+ private async Task<WebResponseContent> ExecuteWithinTransactionAsync(Func<Task<WebResponseContent>> operation)
+ {
+ var db = StockInfoService.Repository.Db as SqlSugarClient;
+ if (db == null)
+ {
+ return WebResponseContent.Instance.Error("Database context does not support transactions");
+ }
+
+ var ownsTransaction = db.Ado.Transaction == null;
+ try
+ {
+ if (ownsTransaction)
+ {
+ db.BeginTran();
+ }
+
+ var result = await operation();
+ if (result?.Status == true)
+ {
+ if (ownsTransaction)
+ {
+ db.CommitTran();
+ }
+ return result;
+ }
+
+ if (ownsTransaction)
+ {
+ db.RollbackTran();
+ }
+ return result ?? WebResponseContent.Instance.Error("Transaction failed");
+ }
+ catch
+ {
+ if (ownsTransaction)
+ {
+ db.RollbackTran();
+ }
+ throw;
+ }
+ }
+
+ /// <summary>
/// 缁勭洏
/// </summary>
public async Task<WebResponseContent> GroupPalletAsync(StockDTO stock)
@@ -72,28 +118,29 @@
Status = StockStatusEmun.缁勭洏鏆傚瓨.GetHashCode(),
}).ToList();
- var existingStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
- var result = false;
- if (existingStock != null)
+ return await ExecuteWithinTransactionAsync(async () =>
{
- details.ForEach(d => d.StockId = existingStock.Id);
- result = await StockInfoDetailService.Repository.AddDataAsync(details) > 0;
- if (result) return content.OK("缁勭洏鎴愬姛");
- return content.Error("缁勭洏澶辫触");
- }
+ var existingStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+ var result = false;
+ if (existingStock != null)
+ {
+ details.ForEach(d => d.StockId = existingStock.Id);
+ result = await StockInfoDetailService.Repository.AddDataAsync(details) > 0;
+ return result ? content.OK("缁勭洏鎴愬姛") : content.Error("缁勭洏澶辫触");
+ }
- var entity = new Dt_StockInfo
- {
- PalletCode = stock.TargetPalletNo,
- WarehouseId = 1,
- StockStatus = 1,
- Creater = "system",
- Details = details
- };
+ var entity = new Dt_StockInfo
+ {
+ PalletCode = stock.TargetPalletNo,
+ WarehouseId = 1,
+ StockStatus = 1,
+ Creater = "system",
+ Details = details
+ };
- result = StockInfoService.Repository.AddData(entity, x => x.Details);
- if (result) return content.OK("缁勭洏鎴愬姛");
- return content.Error("缁勭洏澶辫触");
+ result = StockInfoService.Repository.AddData(entity, x => x.Details);
+ return result ? content.OK("缁勭洏鎴愬姛") : content.Error("缁勭洏澶辫触");
+ });
}
/// <summary>
@@ -110,44 +157,47 @@
return content.Error("婧愭墭鐩樺彿涓庣洰鏍囨墭鐩樺彿鐩稿悓");
}
- var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
- if (sourceStock == null) return content.Error("婧愭墭鐩樹笉瀛樺湪");
-
- var targetStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
- if (targetStock == null)
+ return await ExecuteWithinTransactionAsync(async () =>
{
- var newStock = new Dt_StockInfo
+ var sourceStock = await StockInfoService.Repository.QueryDataNavFirstAsync(s => s.PalletCode == stock.SourcePalletNo);
+ if (sourceStock == null) return content.Error("婧愭墭鐩樹笉瀛樺湪");
+
+ var targetStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+ if (targetStock == null)
{
- PalletCode = stock.TargetPalletNo,
- WarehouseId = sourceStock.WarehouseId,
- StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.GetHashCode(),
- Creater = "system",
- };
+ var newStock = new Dt_StockInfo
+ {
+ PalletCode = stock.TargetPalletNo,
+ WarehouseId = sourceStock.WarehouseId,
+ StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.GetHashCode(),
+ Creater = "system",
+ };
- var newId = StockInfoService.Repository.AddData(newStock);
- if (newId <= 0) return content.Error("鎹㈢洏澶辫触");
+ var newId = StockInfoService.Repository.AddData(newStock);
+ if (newId <= 0) return content.Error("鎹㈢洏澶辫触");
- targetStock = newStock;
- targetStock.Id = newId;
- }
+ targetStock = newStock;
+ targetStock.Id = newId;
+ }
- var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
- if (!serialNumbers.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴忓垪鍙�");
+ var serialNumbers = stock.Details.Select(d => d.Channel).Distinct().ToList();
+ if (!serialNumbers.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴忓垪鍙�");
- var detailEntities = StockInfoDetailService.Repository.QueryData(
- d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
- if (!detailEntities.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴撳瓨鏄庣粏");
+ var detailEntities = StockInfoDetailService.Repository.QueryData(
+ d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.InboundOrderRowNo));
+ if (!detailEntities.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴撳瓨鏄庣粏");
- if (await StockInfoDetail_HtyService.Repository.AddDataAsync(CreateDetailHistory(detailEntities, "鎹㈢洏")) <= 0)
- return content.Error("鎹㈢洏鍘嗗彶璁板綍淇濆瓨澶辫触");
+ if (await StockInfoDetail_HtyService.Repository.AddDataAsync(CreateDetailHistory(detailEntities, "鎹㈢洏")) <= 0)
+ return content.Error("鎹㈢洏鍘嗗彶璁板綍淇濆瓨澶辫触");
- if (await StockInfo_HtyService.Repository.AddDataAsync(CreateStockHistory(new[] { sourceStock, targetStock }, "鎹㈢洏")) <= 0)
- return content.Error("鎹㈢洏鍘嗗彶璁板綍淇濆瓨澶辫触");
+ if (await StockInfo_HtyService.Repository.AddDataAsync(CreateStockHistory(new[] { sourceStock, targetStock }, "鎹㈢洏")) <= 0)
+ return content.Error("鎹㈢洏鍘嗗彶璁板綍淇濆瓨澶辫触");
- detailEntities.ForEach(d => d.StockId = targetStock.Id);
- var result = await StockInfoDetailService.Repository.UpdateDataAsync(detailEntities);
- if (!result) return content.Error("鎹㈢洏澶辫触");
- return content.OK("鎹㈢洏鎴愬姛");
+ detailEntities.ForEach(d => d.StockId = targetStock.Id);
+ var result = await StockInfoDetailService.Repository.UpdateDataAsync(detailEntities);
+ if (!result) return content.Error("鎹㈢洏澶辫触");
+ return content.OK("鎹㈢洏鎴愬姛");
+ });
}
/// <summary>
@@ -159,31 +209,34 @@
if (stock == null || string.IsNullOrWhiteSpace(stock.SourcePalletNo))
return content.Error("婧愭墭鐩樺彿涓嶈兘涓虹┖");
- var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
- if (sourceStock == null) return content.Error("婧愭墭鐩樹笉瀛樺湪");
-
- var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
- if (!serialNumbers.Any())
+ return await ExecuteWithinTransactionAsync(async () =>
{
- serialNumbers = sourceStock.Details
- .Where(x => stock.Details.Any(d => d.Channel == x.InboundOrderRowNo))
- .Select(x => x.SerialNumber)
- .ToList();
- }
+ var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
+ if (sourceStock == null) return content.Error("婧愭墭鐩樹笉瀛樺湪");
- var detailEntities = StockInfoDetailService.Repository.QueryData(
- d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
- if (!detailEntities.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴撳瓨鏄庣粏");
+ var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
+ if (!serialNumbers.Any())
+ {
+ serialNumbers = sourceStock.Details
+ .Where(x => stock.Details.Any(d => d.Channel == x.InboundOrderRowNo))
+ .Select(x => x.SerialNumber)
+ .ToList();
+ }
- if (await StockInfoDetail_HtyService.Repository.AddDataAsync(CreateDetailHistory(detailEntities, "鎷嗙洏")) <= 0)
- return content.Error("鎷嗙洏鍘嗗彶璁板綍淇濆瓨澶辫触");
+ var detailEntities = StockInfoDetailService.Repository.QueryData(
+ d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
+ if (!detailEntities.Any()) return content.Error("鏈壘鍒版湁鏁堢殑搴撳瓨鏄庣粏");
- if (await StockInfo_HtyService.Repository.AddDataAsync(CreateStockHistory(new[] { sourceStock }, "鎷嗙洏")) <= 0)
- return content.Error("鎷嗙洏鍘嗗彶璁板綍淇濆瓨澶辫触");
+ if (await StockInfoDetail_HtyService.Repository.AddDataAsync(CreateDetailHistory(detailEntities, "鎷嗙洏")) <= 0)
+ return content.Error("鎷嗙洏鍘嗗彶璁板綍淇濆瓨澶辫触");
- var result = await StockInfoDetailService.Repository.DeleteDataAsync(detailEntities);
- if (!result) return content.Error("鎷嗙洏澶辫触");
- return content.OK("鎷嗙洏鎴愬姛");
+ if (await StockInfo_HtyService.Repository.AddDataAsync(CreateStockHistory(new[] { sourceStock }, "鎷嗙洏")) <= 0)
+ return content.Error("鎷嗙洏鍘嗗彶璁板綍淇濆瓨澶辫触");
+
+ var result = await StockInfoDetailService.Repository.DeleteDataAsync(detailEntities);
+ if (!result) return content.Error("鎷嗙洏澶辫触");
+ return content.OK("鎷嗙洏鎴愬姛");
+ });
}
/// <summary>
@@ -253,7 +306,9 @@
Creater = s.Creater,
CreateDate = s.CreateDate,
Modifier = s.Modifier,
- ModifyDate = s.ModifyDate
+ ModifyDate = s.ModifyDate,
+ LocationId = s.LocationId,
+ OutboundDate = s.OutboundDate
}).ToList();
}
}
--
Gitblit v1.9.3