From cdb8a4354d8ddaecec8f9d53c7bb9ccf3fc86192 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 10 十二月 2025 18:32:17 +0800
Subject: [PATCH] 111
---
StandardPda/MES.Service/Dto/service/MesPalletBinding.cs | 6
StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs | 387 +++++++++++++++++++++++++++++++-----------------------
2 files changed, 224 insertions(+), 169 deletions(-)
diff --git a/StandardPda/MES.Service/Dto/service/MesPalletBinding.cs b/StandardPda/MES.Service/Dto/service/MesPalletBinding.cs
index 4346776..ac7ee05 100644
--- a/StandardPda/MES.Service/Dto/service/MesPalletBinding.cs
+++ b/StandardPda/MES.Service/Dto/service/MesPalletBinding.cs
@@ -8,7 +8,7 @@
/// <summary>
/// 鎿嶄綔锛欰缁戝畾锛孎瑙g粦
/// </summary>
- public string Type { get; set; }
+ public string? Type { get; set; }
/// <summary>
/// 鏍堟澘鐮�
@@ -18,12 +18,12 @@
/// <summary>
/// 鐧诲綍鍙�
/// </summary>
- public string LoginId { get; set; }
+ public string? LoginId { get; set; }
/// <summary>
/// sn鍒楄〃
/// </summary>
- public List<snList1> SnList { get; set; }
+ public List<snList1>? SnList { get; set; }
public class snList1
{
diff --git a/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs b/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
index bfe59f7..634aaab 100644
--- a/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
+++ b/StandardPda/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
@@ -28,21 +28,21 @@
throw new Exception("姣忛〉鏉℃暟蹇呴』涓�10銆�20鎴�50");
}
- // 1. 鏌ヨXB_RACKING_TASK_SYXT_LOG涓璉temBarcode鍜孭alletCode鐨勬槧灏勫叧绯�
- var allRackingTaskData = Db.Queryable<XbRackingTaskSyxtLog>()
- .Where(x => !string.IsNullOrEmpty(x.ItemBarcode))
- .Select(x => new { x.ItemBarcode, x.PalletCode, x.Code, x.Id })
- .ToList();
-
- // ReturnableStockDto澧炲姞涓�涓簱瀛樼姸鎬佺殑瀛楁
- // 褰揳llRackingTaskData涓殑Code涓簄ull鏃讹紝搴撳瓨鐘舵�佷负绔嬪簱鍏ュ簱涓�
- // 褰揳llRackingTaskData涓殑Code涓�200鏃讹紝搴撳瓨鐘舵�佷负宸茬粡鍦ㄧ珛搴撳唴
- // 瀵规瘡涓潯鐮侊紝鍙栨渶鏂癐D鐨勮褰曪紝骞惰繃婊ゆ帀Code涓�500锛堣〃绀哄け璐ワ級鐨勮褰�
- var rackingTaskData = allRackingTaskData
- .GroupBy(x => x.ItemBarcode) // 鎸夋潯鐮佸垎缁�
- .Select(g => g.OrderByDescending(x => x.Id).First()) // 鍙栨瘡涓潯鐮佹渶鏂扮殑涓�鏉¤褰�
- .Where(x => x.Code != "500") // 杩囨护鎺塁ode涓�500鐨勫け璐ヨ褰�
- .ToList();
+ // 1. 浼樺寲锛氫娇鐢ㄥ師鐢烻QL鑾峰彇姣忎釜鏉$爜鐨勬渶鏂拌褰曪紙閬垮厤鍏ㄨ〃鍔犺浇鍒板唴瀛橈級
+ // 浣跨敤绐楀彛鍑芥暟ROW_NUMBER鍦ㄦ暟鎹簱灞傞潰瀹屾垚鍒嗙粍鍙栨渶鏂拌褰�
+ var sql = @"
+ SELECT ITEM_BARCODE, PalletCode, Code, Id
+ FROM (SELECT ITEM_BARCODE,
+ PalletCode,
+ Code,
+ Id,
+ ROW_NUMBER() OVER (PARTITION BY ITEM_BARCODE ORDER BY Id DESC) as rn
+ FROM XB_RACKING_TASK_SYXT_LOG
+ WHERE ITEM_BARCODE IS NOT NULL
+ AND Code != '500') t
+ WHERE rn = 1";
+
+ var rackingTaskData = Db.Ado.SqlQuery<RackingTaskInfo>(sql);
if (rackingTaskData == null || !rackingTaskData.Any())
{
@@ -63,160 +63,182 @@
var distinctBarcodes = rackingTaskData.Select(x => x.ItemBarcode)
.Distinct().ToList();
- // 2. 鏋勫缓鏌ヨ鏉′欢
- var query = Db.Queryable<MesInvItemStocks>()
- .LeftJoin<MesItems>((stock, item) => stock.ItemId == item.Id)
- .LeftJoin<MesDepots>((stock, item, depot) =>
- stock.DepotsCode == depot.DepotCode)
- .LeftJoin<Organize>((stock, item, depot, org) =>
- item.UseOrg == org.Id.ToString())
- .LeftJoin<MesUnit>((stock, item, depot, org, unit) =>
- item.ItemUnit == unit.Id.ToString())
- .Where((stock, item, depot, org, unit) =>
- (distinctBarcodes.Contains(stock.ItemBarcode) ||
- distinctBarcodes.Contains(stock.StackCode)) &&
- stock.Quantity > 0);
-
- // 3. 搴旂敤鎼滅储鏉′欢
+ // 1.2 鎻愬彇鎼滅储鏉′欢锛堟彁鍗囦綔鐢ㄥ煙锛�
var conditions = searchDto.Conditions;
- if (conditions != null)
+
+ // 2. 浼樺寲锛氬垎鎵瑰鐞嗘潯鐮佸垪琛紙閬垮厤IN鏌ヨ杩囧ぇ锛�
+ const int batchSize = 500; // 姣忔壒澶勭悊500鏉�
+ var allQueryResults = new List<StockQueryResult>();
+
+ for (int i = 0; i < distinctBarcodes.Count; i += batchSize)
{
- //褰揷onditions.IqcStatus涓�1鏃舵煡璇㈢殑鍊煎氨瑕佹槸鐗归噰鐩存帴浣跨敤锛屽凡妫�锛屽厤妫�锛�1鐨勫��
- // 绮剧‘鍖归厤鏉′欢
- if (!string.IsNullOrEmpty(conditions.IqcStatus))
+ var batchBarcodes = distinctBarcodes.Skip(i).Take(batchSize).ToList();
+
+ // 2.1 鏋勫缓鏌ヨ鏉′欢
+ var query = Db.Queryable<MesInvItemStocks>()
+ .LeftJoin<MesItems>((stock, item) => stock.ItemId == item.Id)
+ .LeftJoin<MesDepots>((stock, item, depot) =>
+ stock.DepotsCode == depot.DepotCode)
+ .LeftJoin<Organize>((stock, item, depot, org) =>
+ item.UseOrg == org.Id.ToString())
+ .LeftJoin<MesUnit>((stock, item, depot, org, unit) =>
+ item.ItemUnit == unit.Id.ToString())
+ .Where((stock, item, depot, org, unit) =>
+ (batchBarcodes.Contains(stock.ItemBarcode) ||
+ batchBarcodes.Contains(stock.StackCode)) &&
+ stock.Quantity > 0);
+
+ // 2.2 搴旂敤鎼滅储鏉′欢锛堝湪鏁版嵁搴撳眰闈㈣繃婊わ級
+ if (conditions != null)
{
- if (conditions.IqcStatus == "1")
+ //褰揷onditions.IqcStatus涓�1鏃舵煡璇㈢殑鍊煎氨瑕佹槸鐗归噰鐩存帴浣跨敤锛屽凡妫�锛屽厤妫�锛�1鐨勫��
+ // 绮剧‘鍖归厤鏉′欢
+ if (!string.IsNullOrEmpty(conditions.IqcStatus))
{
- // 褰揑qcStatus涓�"1"鏃讹紝鏌ヨ鐗归噰鐩存帴浣跨敤銆佸凡妫�銆佸厤妫�鐘舵��
- query = query.Where((stock, item, depot, org, unit) =>
- stock.IqcStatus == "鐗归噰鐩存帴浣跨敤" ||
- stock.IqcStatus == "宸叉" ||
- stock.IqcStatus == "鍏嶆");
+ if (conditions.IqcStatus == "1")
+ {
+ // 褰揑qcStatus涓�"1"鏃讹紝鏌ヨ鐗归噰鐩存帴浣跨敤銆佸凡妫�銆佸厤妫�鐘舵��
+ query = query.Where((stock, item, depot, org, unit) =>
+ stock.IqcStatus == "鐗归噰鐩存帴浣跨敤" ||
+ stock.IqcStatus == "宸叉" ||
+ stock.IqcStatus == "鍏嶆");
+ }
+ else
+ {
+ // 鍏朵粬鎯呭喌鎸夊師鍊煎尮閰�
+ query = query.Where((stock, item, depot, org, unit) =>
+ stock.IqcStatus == conditions.IqcStatus);
+ }
}
- else
+
+ if (conditions.Quantity.HasValue)
{
- // 鍏朵粬鎯呭喌鎸夊師鍊煎尮閰�
query = query.Where((stock, item, depot, org, unit) =>
- stock.IqcStatus == conditions.IqcStatus);
+ stock.Quantity == conditions.Quantity.Value);
+ }
+
+ // 妯$硦鍖归厤鏉′欢
+
+ if (!string.IsNullOrEmpty(conditions.DepotName))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ depot.DepotName != null &&
+ depot.DepotName.Contains(conditions.DepotName));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.DepotSectionsCode))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ stock.DepotSectionsCode != null &&
+ stock.DepotSectionsCode.Contains(conditions
+ .DepotSectionsCode));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.ItemNo))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ item.ItemNo != null &&
+ item.ItemNo.Contains(conditions.ItemNo));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.ItemName))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ item.ItemName != null &&
+ item.ItemName.Contains(conditions.ItemName));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.ItemModel))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ item.ItemModel != null &&
+ item.ItemModel.Contains(conditions.ItemModel));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.ItemUnitName))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ unit.Fname != null &&
+ unit.Fname.Contains(conditions.ItemUnitName));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.OrgCode))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ org.Fnumber != null &&
+ org.Fnumber.Contains(conditions.OrgCode));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.OrgName))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ org.Fname != null &&
+ org.Fname.Contains(conditions.OrgName));
+ }
+
+ if (!string.IsNullOrEmpty(conditions.ItemBarcode))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ (stock.ItemBarcode != null &&
+ stock.ItemBarcode.Contains(conditions.ItemBarcode)) ||
+ (stock.StackCode != null &&
+ stock.StackCode.Contains(conditions.ItemBarcode)));
+ }
+
+ // 鏃ユ湡鑼冨洿鏉′欢
+ if (!string.IsNullOrEmpty(conditions.IndepDateStart))
+ {
+ if (DateTime.TryParse(conditions.IndepDateStart,
+ out var startDate))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ stock.IndepDate >= startDate);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(conditions.IndepDateEnd))
+ {
+ if (DateTime.TryParse(conditions.IndepDateEnd, out var endDate))
+ {
+ query = query.Where((stock, item, depot, org, unit) =>
+ stock.IndepDate <= endDate);
+ }
}
}
- if (conditions.Quantity.HasValue)
- {
- query = query.Where((stock, item, depot, org, unit) =>
- stock.Quantity == conditions.Quantity.Value);
- }
-
- // 妯$硦鍖归厤鏉′欢
-
- if (!string.IsNullOrEmpty(conditions.DepotName))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- depot.DepotName != null &&
- depot.DepotName.Contains(conditions.DepotName));
- }
-
- if (!string.IsNullOrEmpty(conditions.DepotSectionsCode))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- stock.DepotSectionsCode != null &&
- stock.DepotSectionsCode.Contains(conditions
- .DepotSectionsCode));
- }
-
- if (!string.IsNullOrEmpty(conditions.ItemNo))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- item.ItemNo != null &&
- item.ItemNo.Contains(conditions.ItemNo));
- }
-
- if (!string.IsNullOrEmpty(conditions.ItemName))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- item.ItemName != null &&
- item.ItemName.Contains(conditions.ItemName));
- }
-
- if (!string.IsNullOrEmpty(conditions.ItemModel))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- item.ItemModel != null &&
- item.ItemModel.Contains(conditions.ItemModel));
- }
-
- if (!string.IsNullOrEmpty(conditions.ItemUnitName))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- unit.Fname != null &&
- unit.Fname.Contains(conditions.ItemUnitName));
- }
-
- if (!string.IsNullOrEmpty(conditions.OrgCode))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- org.Fnumber != null &&
- org.Fnumber.Contains(conditions.OrgCode));
- }
-
- if (!string.IsNullOrEmpty(conditions.OrgName))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- org.Fname != null &&
- org.Fname.Contains(conditions.OrgName));
- }
-
- if (!string.IsNullOrEmpty(conditions.ItemBarcode))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- stock.ItemBarcode != null &&
- stock.ItemBarcode.Contains(conditions.ItemBarcode));
- }
-
- // 鏃ユ湡鑼冨洿鏉′欢
- if (!string.IsNullOrEmpty(conditions.IndepDateStart))
- {
- if (DateTime.TryParse(conditions.IndepDateStart,
- out var startDate))
+ // 2.3 鎵ц褰撳墠鎵规鏌ヨ
+ var batchQueryResult = query
+ .OrderByDescending((stock, item, depot, org, unit) =>
+ stock.IndepDate)
+ .Select((stock, item, depot, org, unit) => new StockQueryResult
{
- query = query.Where((stock, item, depot, org, unit) =>
- stock.IndepDate >= startDate);
- }
- }
-
- if (!string.IsNullOrEmpty(conditions.IndepDateEnd))
- {
- if (DateTime.TryParse(conditions.IndepDateEnd, out var endDate))
- {
- query = query.Where((stock, item, depot, org, unit) =>
- stock.IndepDate <= endDate);
- }
- }
+ IqcStatus = stock.IqcStatus,
+ DepotCode = stock.DepotsCode,
+ DepotName = depot.DepotName,
+ DepotSectionsCode = stock.DepotSectionsCode,
+ ItemNo = item.ItemNo,
+ ItemName = item.ItemName,
+ ItemModel = item.ItemModel,
+ Quantity = stock.Quantity,
+ ItemUnit = item.ItemUnit,
+ ItemUnitName = unit.Fname,
+ IndepDate = stock.IndepDate,
+ OrgCode = org.Fnumber,
+ OrgName = org.Fname,
+ ItemBarcode = stock.ItemBarcode,
+ StockStackCode = stock.StackCode
+ })
+ .ToList();
+
+ allQueryResults.AddRange(batchQueryResult);
}
+
+ // 3. 鍚堝苟鎵�鏈夋壒娆$殑鏌ヨ缁撴灉
+ var queryResult = allQueryResults;
- // 4. 鏌ヨ鎵�鏈夌鍚堟潯浠剁殑鏁版嵁锛堜笉鍒嗛〉锛�
- var queryResult = query
- .OrderByDescending((stock, item, depot, org, unit) =>
- stock.IndepDate)
- .Select((stock, item, depot, org, unit) => new
- {
- stock.IqcStatus,
- DepotCode = stock.DepotsCode,
- depot.DepotName,
- stock.DepotSectionsCode,
- item.ItemNo,
- item.ItemName,
- item.ItemModel,
- stock.Quantity,
- item.ItemUnit,
- ItemUnitName = unit.Fname,
- stock.IndepDate,
- OrgCode = org.Fnumber,
- OrgName = org.Fname,
- stock.ItemBarcode,
- StockStackCode = stock.StackCode
- })
- .ToList();
+ // 4. 浼樺寲锛氭瀯寤烘潯鐮佹槧灏勫瓧鍏革紙鎻愰珮鏌ユ壘鏁堢巼锛�
+ var rackingTaskDict = rackingTaskData
+ .ToDictionary(x => x.ItemBarcode, x => x);
// 5. 鍦ㄥ唴瀛樹腑杞崲涓篋TO锛屽叧鑱擯alletCode骞惰祴鍊糏temBarcode锛堜紭鍏堜娇鐢ㄧ鏉$爜StockStackCode锛�
var tempDataList = queryResult.Select(x =>
@@ -225,12 +247,12 @@
var barcodeToMatch = !string.IsNullOrEmpty(x.StockStackCode)
? x.StockStackCode
: x.ItemBarcode;
- var rackingTask = rackingTaskData
- .Where(r => r.ItemBarcode == barcodeToMatch)
- .FirstOrDefault();
+
+ // 浣跨敤瀛楀吀鏌ユ壘锛屾�ц兘鏇翠紭
+ rackingTaskDict.TryGetValue(barcodeToMatch, out var rackingTask);
// 鏍规嵁Code鍊肩‘瀹氬簱瀛樼姸鎬�: null涓虹珛搴撳叆搴撲腑(0), 200涓哄凡鍦ㄧ珛搴撳唴(1)
- string stockStatus = "杩涘叆绔嬪簱鐨勮矾涓�"; // 榛樿涓虹珛搴撳叆搴撲腑
+ string? stockStatus = "杩涘叆绔嬪簱鐨勮矾涓�"; // 榛樿涓虹珛搴撳叆搴撲腑
if (rackingTask?.Code != null)
{
stockStatus = rackingTask.Code == "200" ? "宸插湪绔嬪簱涓�" : "杩涘叆绔嬪簱鐨勮矾涓�";
@@ -349,6 +371,39 @@
}
/// <summary>
+ /// 杈呭姪绫伙細绔嬪簱浠诲姟淇℃伅
+ /// </summary>
+ private class RackingTaskInfo
+ {
+ public string? ItemBarcode { get; set; }
+ public string? PalletCode { get; set; }
+ public string? Code { get; set; }
+ public decimal Id { get; set; }
+ }
+
+ /// <summary>
+ /// 杈呭姪绫伙細搴撳瓨鏌ヨ涓棿缁撴灉
+ /// </summary>
+ private class StockQueryResult
+ {
+ public string? IqcStatus { get; set; }
+ public string? DepotCode { get; set; }
+ public string? DepotName { get; set; }
+ public string? DepotSectionsCode { get; set; }
+ public string? ItemNo { get; set; }
+ public string? ItemName { get; set; }
+ public string? ItemModel { get; set; }
+ public decimal? Quantity { get; set; }
+ public string? ItemUnit { get; set; }
+ public string? ItemUnitName { get; set; }
+ public DateTime? IndepDate { get; set; }
+ public string? OrgCode { get; set; }
+ public string? OrgName { get; set; }
+ public string? ItemBarcode { get; set; }
+ public string? StockStackCode { get; set; }
+ }
+
+ /// <summary>
/// 鏌ヨ鍙互閫�璐х殑鐗╂枡(鏃х増鏈�,淇濈暀鍏煎)
/// </summary>
/// <returns>鍙��璐х墿鏂欏簱瀛樺垪琛�</returns>
@@ -418,7 +473,7 @@
.FirstOrDefault();
// 鏍规嵁Code鍊肩‘瀹氬簱瀛樼姸鎬�: null涓虹珛搴撳叆搴撲腑(0), 200涓哄凡鍦ㄧ珛搴撳唴(1)
- string stockStatus = "0"; // 榛樿涓虹珛搴撳叆搴撲腑
+ string? stockStatus = "0"; // 榛樿涓虹珛搴撳叆搴撲腑
if (rackingTask?.Code != null)
{
stockStatus =
@@ -487,7 +542,7 @@
}
decimal messageId = 0;
- string taskCode = "";
+ string? taskCode = "";
// 鏍规嵁鏉$爜鏌ヨXB_RACKING_TASK_SYXT_LOG琛紝鏌ヨmax(PALLETCODE)鍜屽搴旂殑widthType
var rackingTaskInfo = Db.Queryable<XbRackingTaskSyxtLog>()
@@ -592,8 +647,8 @@
throw new Exception($"瑙f瀽鍝嶅簲澶辫触: {responseStr}");
}
- var code = responseJson?.Code?.ToString();
- var jsonMessage = responseJson?.JsonMessage?.ToString();
+ var code = responseJson?.Code?.ToString()();
+ var jsonMessage = responseJson?.JsonMessage?.ToString()();
// 7. 鏍规嵁Code鍒ゆ柇鎴愬姛鎴栧け璐�
if (code == "200")
@@ -633,7 +688,7 @@
? "浠诲姟璇锋眰澶辫触"
: jsonMessage;
var failureMessage =
- (string)("绔嬪簱浠诲姟涓嬪彂澶辫触: " + errorMessage);
+ (string?)("绔嬪簱浠诲姟涓嬪彂澶辫触: " + errorMessage);
Db.Updateable<MessageCenter>()
.SetColumns(it => it.Result == 0)
@@ -652,7 +707,7 @@
if (messageId > 0)
{
var exceptionMessage =
- (string)("绔嬪簱浠诲姟寮傚父: " + ex.Message);
+ (string?)("绔嬪簱浠诲姟寮傚父: " + ex.Message);
Db.Updateable<MessageCenter>()
.SetColumns(it => it.Result == 0)
.SetColumns(it =>
--
Gitblit v1.9.3