From 3e420f0a8da362be4ab54406d7bc7c1309e074da Mon Sep 17 00:00:00 2001
From: 如洲 陈 <1278080563@qq.com>
Date: 星期五, 24 十月 2025 10:25:24 +0800
Subject: [PATCH] 修改销售订单接口和销售退货接口
---
MES.Service/service/Warehouse/MesReturnwareManager.cs | 198 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 198 insertions(+), 0 deletions(-)
diff --git a/MES.Service/service/Warehouse/MesReturnwareManager.cs b/MES.Service/service/Warehouse/MesReturnwareManager.cs
index 7bb85c8..34b1397 100644
--- a/MES.Service/service/Warehouse/MesReturnwareManager.cs
+++ b/MES.Service/service/Warehouse/MesReturnwareManager.cs
@@ -200,6 +200,11 @@
{
return UseTransaction(db =>
{
+ // 鍦ㄥ垹闄ゅ墠锛屽厛鑾峰彇瑕佸垹闄ょ殑閫�璐ч�氱煡鍗曟槑缁嗭紝鐢ㄤ簬鍚庣画閲嶆柊璁$畻閿�鍞鍗曠姸鎬�
+ var returnDetailsToDelete = db.Queryable<MesReturnwareDetails>()
+ .Where(it => it.ReturnNo == data.FBillNo && it.ReturnType == data.FBillTypeID)
+ .ToList();
+
// 鍏堝垹闄ら��璐ч�氱煡鍗曟槑缁�
var detailsDeleted = db.Deleteable<MesReturnwareDetails>()
.Where(it => it.ReturnNo == data.FBillNo &&
@@ -216,6 +221,13 @@
{
// 鍒犻櫎鎴愬姛鍚庯紝璋冪敤瀛樺偍杩囩▼鍒犻櫎瀵瑰簲鐨勬楠屽崟
DeleteInspectionOrder(db, data.FBillTypeID, data.FBillNo);
+
+ // 閲嶆柊璁$畻骞舵洿鏂扮浉鍏抽攢鍞鍗曠殑over鐘舵�侊紙涓庣敓鎴愭椂閫昏緫鐩稿悓锛�
+ if (returnDetailsToDelete.Any())
+ {
+ UpdateSalesOrderOverStatusAfterDelete(db, returnDetailsToDelete);
+ }
+
return 1;
}
@@ -256,6 +268,9 @@
else
{
Console.WriteLine($"鐢熸垚妫�楠屽崟鎴愬姛: {message}");
+
+ // 鐢熸垚妫�楠屽崟鎴愬姛鍚庯紝鏇存柊鐩稿叧閿�鍞鍗曠殑over瀛楁
+ UpdateSalesOrderOverStatus(db, mesReturnwareDetails);
}
}
catch (Exception ex)
@@ -266,6 +281,189 @@
}
/// <summary>
+ /// 鏇存柊閿�鍞鍗曠殑over鐘舵��
+ /// 浣跨敤缁熶竴閫昏緫锛歄RDER_QUANTITY + GIFT_QUANTITY + 閫�璐ф暟閲� = DELIVERED_QUANTITY + DELIVERED_GIFT_QUANTITY + XTCH
+ /// </summary>
+ /// <param name="db">鏁版嵁搴撹繛鎺�</param>
+ /// <param name="mesReturnwareDetails">閫�璐ч�氱煡鍗曟槑缁嗗垪琛�</param>
+ private void UpdateSalesOrderOverStatus(SqlSugarScope db, List<MesReturnwareDetails> mesReturnwareDetails)
+ {
+ try
+ {
+ // 鑾峰彇鎵�鏈夐渶瑕佹洿鏂扮殑璁㈠崟淇℃伅锛堝幓閲嶏級
+ var orderUpdates = mesReturnwareDetails
+ .Where(detail => !string.IsNullOrEmpty(detail.OrderNo) && !string.IsNullOrEmpty(detail.OrderType))
+ .Select(detail => new { detail.OrderNo, detail.OrderType })
+ .Distinct()
+ .ToList();
+
+ foreach (var orderInfo in orderUpdates)
+ {
+ // 鑾峰彇璇ヨ鍗曠殑鎵�鏈夋槑缁�
+ var orderDetails = db.Queryable<MesSalesOrderDetail>()
+ .Where(it => it.OrderId == orderInfo.OrderNo && it.OrderType == orderInfo.OrderType)
+ .ToList();
+
+ if (!orderDetails.Any())
+ {
+ Console.WriteLine($"鏈壘鍒伴攢鍞鍗曟槑缁� {orderInfo.OrderType}-{orderInfo.OrderNo}锛岃烦杩囨洿鏂�");
+ continue;
+ }
+
+ // 妫�鏌ユ瘡涓鍗曟槑缁嗘槸鍚﹀畬鎴�
+ bool allCompleted = true;
+
+ foreach (var orderDetail in orderDetails)
+ {
+ // 鏌ユ壘鍖归厤鐨勯��璐ф槑缁嗭細閫氳繃ORDER_TYPE, ORDER_ID, LINE_NUMBER, PRODUCT_CODE杩涜鍖归厤
+ var matchingReturnDetails = mesReturnwareDetails
+ .Where(detail => detail.OrderType == orderDetail.OrderType &&
+ detail.OrderNo == orderDetail.OrderId &&
+ detail.OrderNumber == orderDetail.OrderNumber &&
+ detail.ItemNo == orderDetail.ProductCode)
+ .ToList();
+
+ // 璁$畻鍖归厤鐨勯��璐ф暟閲�
+ var returnQuantity = matchingReturnDetails.Sum(x => (x.Quantity ?? 0) + (x.ActualQuantity ?? 0));
+
+ // 璁$畻璁㈠崟鎬绘暟閲忥細ORDER_QUANTITY + GIFT_QUANTITY + 閿�鍞��璐ч�氱煡鍗曚腑鐨勬暟閲�
+ var orderTotal = (orderDetail.OrderQuantity ?? 0) +
+ (orderDetail.GiftQuantity ?? 0) +
+ returnQuantity;
+
+ // 璁$畻宸蹭氦浠樻�绘暟閲忥細DELIVERED_QUANTITY + DELIVERED_GIFT_QUANTITY + XTCH(閿�閫�鍑鸿揣鏁伴噺)
+ var deliveredTotal = (orderDetail.DeliveredQuantity ?? 0) +
+ (orderDetail.DeliveredGiftQuantity ?? 0) +
+ (orderDetail.Xtch ?? 0);
+
+ // 濡傛灉璁㈠崟鎬绘暟閲忎笉绛変簬宸蹭氦浠樻�绘暟閲忥紝鍒欒鏄庣粏鏈畬鎴�
+ if (orderTotal != deliveredTotal)
+ {
+ allCompleted = false;
+ Console.WriteLine($"璁㈠崟鏄庣粏 {orderDetail.ProductCode} 鏈畬鎴�: 璁㈠崟鎬绘暟閲�={orderTotal}, 宸蹭氦浠樻�绘暟閲�={deliveredTotal} (璁㈠崟:{orderDetail.OrderQuantity ?? 0} + 璧犲搧:{orderDetail.GiftQuantity ?? 0} + 閫�璐�:{returnQuantity} = 宸蹭氦浠�:{orderDetail.DeliveredQuantity ?? 0} + 宸蹭氦浠樿禒鍝�:{orderDetail.DeliveredGiftQuantity ?? 0} + 閿�閫�鍑鸿揣:{orderDetail.Xtch ?? 0})");
+ break;
+ }
+ }
+
+ // 鏍规嵁鏄惁鍏ㄩ儴瀹屾垚璁剧疆over鍊�
+ decimal overValue = allCompleted ? 1 : 0;
+
+ // 鏇存柊MES_SALES_ORDER琛ㄧ殑over瀛楁
+ var updateCount = db.Updateable<MesSalesOrder>()
+ .SetColumns(it => it.Over == overValue)
+ .Where(it => it.OrderId == orderInfo.OrderNo && it.OrderType == orderInfo.OrderType)
+ .ExecuteCommand();
+
+ if (updateCount > 0)
+ {
+ Console.WriteLine($"鎴愬姛鏇存柊閿�鍞鍗� {orderInfo.OrderType}-{orderInfo.OrderNo} 鐨刼ver鐘舵�佷负{overValue} ({(allCompleted ? "宸插畬鎴�" : "鏈畬鎴�")})");
+ }
+ else
+ {
+ Console.WriteLine($"鏈壘鍒伴攢鍞鍗� {orderInfo.OrderType}-{orderInfo.OrderNo}锛岃烦杩囨洿鏂�");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ // 璁板綍閿欒鏃ュ織锛屼絾涓嶅奖鍝嶉��璐ч�氱煡鍗曠殑淇濆瓨
+ Console.WriteLine($"鏇存柊閿�鍞鍗昽ver鐘舵�佹椂鍙戠敓閿欒: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 鍒犻櫎閫�璐ч�氱煡鍗曞悗閲嶆柊璁$畻骞舵洿鏂扮浉鍏抽攢鍞鍗曠殑over鐘舵��
+ /// 浣跨敤涓庣敓鎴愭椂鐩稿悓鐨勯�昏緫锛歄RDER_QUANTITY + GIFT_QUANTITY + 閫�璐ф暟閲� = DELIVERED_QUANTITY + DELIVERED_GIFT_QUANTITY + XTCH
+ /// </summary>
+ /// <param name="db">鏁版嵁搴撹繛鎺�</param>
+ /// <param name="deletedReturnDetails">宸插垹闄ょ殑閫�璐ч�氱煡鍗曟槑缁嗗垪琛�</param>
+ private void UpdateSalesOrderOverStatusAfterDelete(SqlSugarScope db, List<MesReturnwareDetails> deletedReturnDetails)
+ {
+ try
+ {
+ // 鑾峰彇鎵�鏈夐渶瑕侀噸鏂拌绠楃殑璁㈠崟淇℃伅锛堝幓閲嶏級
+ var orderUpdates = deletedReturnDetails
+ .Where(detail => !string.IsNullOrEmpty(detail.OrderNo) && !string.IsNullOrEmpty(detail.OrderType))
+ .Select(detail => new { detail.OrderNo, detail.OrderType })
+ .Distinct()
+ .ToList();
+
+ foreach (var orderInfo in orderUpdates)
+ {
+ // 鑾峰彇璇ヨ鍗曠殑鎵�鏈夋槑缁�
+ var orderDetails = db.Queryable<MesSalesOrderDetail>()
+ .Where(it => it.OrderId == orderInfo.OrderNo && it.OrderType == orderInfo.OrderType)
+ .ToList();
+
+ if (!orderDetails.Any())
+ {
+ Console.WriteLine($"鏈壘鍒伴攢鍞鍗曟槑缁� {orderInfo.OrderType}-{orderInfo.OrderNo}锛岃烦杩囨洿鏂�");
+ continue;
+ }
+
+ // 妫�鏌ユ瘡涓鍗曟槑缁嗘槸鍚﹀畬鎴�
+ bool allCompleted = true;
+
+ foreach (var orderDetail in orderDetails)
+ {
+ // 鏌ユ壘鎵�鏈夊尮閰嶇殑閫�璐ф槑缁嗭紙鍖呮嫭鍏朵粬鏈垹闄ょ殑閫�璐ч�氱煡鍗曪級
+ // 閫氳繃ORDER_TYPE, ORDER_ID, LINE_NUMBER, PRODUCT_CODE杩涜鍖归厤
+ var matchingReturnDetails = db.Queryable<MesReturnwareDetails>()
+ .Where(detail => detail.OrderType == orderDetail.OrderType &&
+ detail.OrderNo == orderDetail.OrderId &&
+ detail.OrderNumber == orderDetail.OrderNumber &&
+ detail.ItemNo == orderDetail.ProductCode)
+ .ToList();
+
+ // 璁$畻鍖归厤鐨勯��璐ф暟閲�
+ var returnQuantity = matchingReturnDetails.Sum(x => (x.Quantity ?? 0) + (x.ActualQuantity ?? 0));
+
+ // 璁$畻璁㈠崟鎬绘暟閲忥細ORDER_QUANTITY + GIFT_QUANTITY + 閿�鍞��璐ч�氱煡鍗曚腑鐨勬暟閲�
+ var orderTotal = (orderDetail.OrderQuantity ?? 0) +
+ (orderDetail.GiftQuantity ?? 0) +
+ returnQuantity;
+
+ // 璁$畻宸蹭氦浠樻�绘暟閲忥細DELIVERED_QUANTITY + DELIVERED_GIFT_QUANTITY + XTCH(閿�閫�鍑鸿揣鏁伴噺)
+ var deliveredTotal = (orderDetail.DeliveredQuantity ?? 0) +
+ (orderDetail.DeliveredGiftQuantity ?? 0) +
+ (orderDetail.Xtch ?? 0);
+
+ // 濡傛灉璁㈠崟鎬绘暟閲忎笉绛変簬宸蹭氦浠樻�绘暟閲忥紝鍒欒鏄庣粏鏈畬鎴�
+ if (orderTotal != deliveredTotal)
+ {
+ allCompleted = false;
+ Console.WriteLine($"鍒犻櫎閫�璐ч�氱煡鍗曞悗锛岃鍗曟槑缁� {orderDetail.ProductCode} 鏈畬鎴�: 璁㈠崟鎬绘暟閲�={orderTotal}, 宸蹭氦浠樻�绘暟閲�={deliveredTotal} (璁㈠崟:{orderDetail.OrderQuantity ?? 0} + 璧犲搧:{orderDetail.GiftQuantity ?? 0} + 閫�璐�:{returnQuantity} = 宸蹭氦浠�:{orderDetail.DeliveredQuantity ?? 0} + 宸蹭氦浠樿禒鍝�:{orderDetail.DeliveredGiftQuantity ?? 0} + 閿�閫�鍑鸿揣:{orderDetail.Xtch ?? 0})");
+ break;
+ }
+ }
+
+ // 鏍规嵁鏄惁鍏ㄩ儴瀹屾垚璁剧疆over鍊�
+ decimal overValue = allCompleted ? 1 : 0;
+
+ // 鏇存柊MES_SALES_ORDER琛ㄧ殑over瀛楁
+ var updateCount = db.Updateable<MesSalesOrder>()
+ .SetColumns(it => it.Over == overValue)
+ .Where(it => it.OrderId == orderInfo.OrderNo && it.OrderType == orderInfo.OrderType)
+ .ExecuteCommand();
+
+ if (updateCount > 0)
+ {
+ Console.WriteLine($"鍒犻櫎閫�璐ч�氱煡鍗曞悗锛屾垚鍔熸洿鏂伴攢鍞鍗� {orderInfo.OrderType}-{orderInfo.OrderNo} 鐨刼ver鐘舵�佷负{overValue} ({(allCompleted ? "宸插畬鎴�" : "鏈畬鎴�")})");
+ }
+ else
+ {
+ Console.WriteLine($"鍒犻櫎閫�璐ч�氱煡鍗曞悗锛屾湭鎵惧埌閿�鍞鍗� {orderInfo.OrderType}-{orderInfo.OrderNo}锛岃烦杩囨洿鏂�");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ // 璁板綍閿欒鏃ュ織锛屼絾涓嶅奖鍝嶉��璐ч�氱煡鍗曠殑鍒犻櫎
+ Console.WriteLine($"鍒犻櫎閫�璐ч�氱煡鍗曞悗鏇存柊閿�鍞鍗昽ver鐘舵�佹椂鍙戠敓閿欒: {ex.Message}");
+ }
+ }
+
+ /// <summary>
/// 璋冪敤瀛樺偍杩囩▼鍒犻櫎妫�楠屽崟
/// </summary>
/// <param name="db">鏁版嵁搴撹繛鎺�</param>
--
Gitblit v1.9.3