MES.Service/Dto/webApi/ErpORDER.cs
@@ -21,6 +21,11 @@ public string? FDebugDate { get; set; } public string? FDeliverAddress { get; set; } /// <summary> /// 完成状态标识 (0-未完成, 1-已完成) /// </summary> public decimal? FOver { get; set; } } } MES.Service/Modes/MesSalesOrder.cs
@@ -76,4 +76,10 @@ /// </summary> [SugarColumn(ColumnName = "DELIVER_ADDRESS")] public string DeliverAddress { get; set; } /// <summary> /// 完成状态标识 (0-未完成, 1-已完成) /// </summary> [SugarColumn(ColumnName = "OVER")] public decimal? Over { get; set; } } MES.Service/Modes/MesSalesOrderDetail.cs
@@ -146,4 +146,10 @@ /// </summary> [SugarColumn(ColumnName = "CUSTOMER_ORDER_ID")] public string CustomerOrderId { get; set; } /// <summary> /// 销退出货数量 /// </summary> [SugarColumn(ColumnName = "XTCH")] public decimal? Xtch { get; set; } } MES.Service/bin/Debug/net8.0/MES.Service.dllBinary files differ
MES.Service/bin/Debug/net8.0/MES.Service.pdbBinary files differ
MES.Service/bin/Release/net8.0/MES.Service.dllBinary files differ
MES.Service/bin/Release/net8.0/MES.Service.pdbBinary files differ
MES.Service/service/MesSalesOrderManager.cs
@@ -112,7 +112,8 @@ Remarks = dto.FNote, Approver = dto.FApproverId, DebugDate = !string.IsNullOrEmpty(dto.FDebugDate) && (DateTime.TryParseExact(dto.FDebugDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime debugDate) || DateTime.TryParseExact(dto.FDebugDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out debugDate)) ? (DateTime?)debugDate : null, DeliverAddress = dto.FDeliverAddress DeliverAddress = dto.FDeliverAddress, Over = dto.FOver }; return entity; } 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状态 /// 使用统一逻辑:ORDER_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} 的over状态为{overValue} ({(allCompleted ? "已完成" : "未完成")})"); } else { Console.WriteLine($"未找到销售订单 {orderInfo.OrderType}-{orderInfo.OrderNo},跳过更新"); } } } catch (Exception ex) { // 记录错误日志,但不影响退货通知单的保存 Console.WriteLine($"更新销售订单over状态时发生错误: {ex.Message}"); } } /// <summary> /// 删除退货通知单后重新计算并更新相关销售订单的over状态 /// 使用与生成时相同的逻辑:ORDER_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} 的over状态为{overValue} ({(allCompleted ? "已完成" : "未完成")})"); } else { Console.WriteLine($"删除退货通知单后,未找到销售订单 {orderInfo.OrderType}-{orderInfo.OrderNo},跳过更新"); } } } catch (Exception ex) { // 记录错误日志,但不影响退货通知单的删除 Console.WriteLine($"删除退货通知单后更新销售订单over状态时发生错误: {ex.Message}"); } } /// <summary> /// 调用存储过程删除检验单 /// </summary> /// <param name="db">数据库连接</param> MESApplication/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@ <Project> <PropertyGroup> <_PublishTargetUrl>E:\Desktop\接口\RD\RD_MES_Api\MESApplication\bin\Release\net8.0\publish\</_PublishTargetUrl> <History>True|2025-09-28T06:01:09.8976598Z||;True|2025-09-27T18:21:38.6643161+08:00||;True|2025-09-25T09:36:17.3207590+08:00||;True|2025-09-24T17:48:11.4770370+08:00||;True|2025-09-24T10:00:27.2652137+08:00||;True|2025-09-22T17:09:16.2235067+08:00||;True|2025-09-07T15:57:42.6492991+08:00||;True|2025-09-02T14:07:59.4933772+08:00||;True|2025-08-22T10:11:31.0216372+08:00||;True|2025-08-18T08:28:20.1447738+08:00||;True|2025-08-12T09:51:50.2822756+08:00||;True|2025-08-10T16:28:17.3559399+08:00||;True|2025-08-06T09:47:19.1451217+08:00||;True|2025-08-06T09:46:51.2621129+08:00||;True|2025-08-03T18:48:37.3295098+08:00||;True|2025-08-01T17:29:02.4576952+08:00||;True|2025-03-27T23:22:42.3501020+08:00||;True|2025-03-10T16:49:08.3476948+08:00||;True|2024-12-24T15:39:58.5366570+08:00||;True|2024-11-26T18:32:03.9568766+08:00||;True|2024-11-21T02:11:35.8050745+08:00||;True|2024-09-21T16:35:22.6651659+08:00||;True|2024-09-21T16:14:11.3450387+08:00||;True|2024-09-19T17:16:11.7338751+08:00||;True|2024-09-19T17:11:21.0116707+08:00||;True|2024-09-19T13:54:25.7455472+08:00||;True|2024-09-15T13:55:51.7095153+08:00||;True|2024-09-12T17:10:20.4734556+08:00||;True|2024-09-10T15:54:07.7463519+08:00||;True|2024-09-06T14:40:56.3762241+08:00||;True|2024-08-20T17:12:00.2924570+08:00||;True|2024-08-17T10:57:05.6670396+08:00||;True|2024-08-17T10:56:46.8068041+08:00||;True|2024-08-16T14:09:17.0526491+08:00||;True|2024-08-15T08:40:32.8134665+08:00||;True|2024-08-14T10:00:27.7017207+08:00||;True|2024-08-14T08:54:44.8284031+08:00||;True|2024-08-07T10:32:10.3689256+08:00||;True|2024-08-05T15:45:03.0864530+08:00||;True|2024-08-03T09:59:13.7916520+08:00||;True|2024-07-31T17:27:28.1965929+08:00||;True|2024-07-31T15:27:34.7943845+08:00||;True|2024-07-30T15:04:50.5849235+08:00||;True|2024-07-30T14:09:06.2877325+08:00||;True|2024-07-29T16:11:30.4493940+08:00||;True|2024-07-23T14:30:34.4591002+08:00||;True|2024-07-22T14:17:39.8186158+08:00||;True|2024-04-10T12:55:31.3963752+08:00||;True|2024-04-08T13:59:25.5487203+08:00||;True|2024-04-06T09:30:09.5350539+08:00||;True|2024-04-06T08:46:05.8814658+08:00||;True|2024-04-05T14:06:52.0448024+08:00||;True|2024-04-05T12:47:46.0561601+08:00||;True|2024-02-26T08:46:22.0988887+08:00||;True|2024-02-24T19:17:13.6770376+08:00||;True|2024-02-24T14:32:37.4450337+08:00||;True|2024-02-23T10:22:06.5150173+08:00||;True|2024-02-22T13:19:56.6997993+08:00||;True|2024-02-22T10:53:17.7929585+08:00||;True|2024-02-21T17:08:06.5553444+08:00||;True|2024-02-19T16:24:37.4912012+08:00||;True|2024-02-02T10:07:23.2726075+08:00||;True|2024-02-02T08:36:49.2904460+08:00||;True|2024-01-29T17:44:43.6800769+08:00||;True|2024-01-23T09:47:26.7811926+08:00||;True|2024-01-18T16:23:30.3373836+08:00||;True|2024-01-17T14:22:04.2552286+08:00||;True|2024-01-16T16:54:42.2316892+08:00||;True|2024-01-16T16:37:23.8028858+08:00||;True|2024-01-16T09:25:24.4007775+08:00||;True|2024-01-15T10:18:57.3362616+08:00||;True|2024-01-15T10:07:14.2044763+08:00||;True|2024-01-10T14:03:36.4451130+08:00||;True|2024-01-09T16:45:32.9601815+08:00||;True|2024-01-06T14:16:34.2732220+08:00||;True|2024-01-06T14:11:45.2134717+08:00||;True|2024-01-06T11:30:58.9198887+08:00||;</History> <History>True|2025-10-24T02:18:03.9765680Z||;True|2025-10-22T09:45:29.8581213+08:00||;True|2025-09-28T14:01:09.8976598+08:00||;True|2025-09-27T18:21:38.6643161+08:00||;True|2025-09-25T09:36:17.3207590+08:00||;True|2025-09-24T17:48:11.4770370+08:00||;True|2025-09-24T10:00:27.2652137+08:00||;True|2025-09-22T17:09:16.2235067+08:00||;True|2025-09-07T15:57:42.6492991+08:00||;True|2025-09-02T14:07:59.4933772+08:00||;True|2025-08-22T10:11:31.0216372+08:00||;True|2025-08-18T08:28:20.1447738+08:00||;True|2025-08-12T09:51:50.2822756+08:00||;True|2025-08-10T16:28:17.3559399+08:00||;True|2025-08-06T09:47:19.1451217+08:00||;True|2025-08-06T09:46:51.2621129+08:00||;True|2025-08-03T18:48:37.3295098+08:00||;True|2025-08-01T17:29:02.4576952+08:00||;True|2025-03-27T23:22:42.3501020+08:00||;True|2025-03-10T16:49:08.3476948+08:00||;True|2024-12-24T15:39:58.5366570+08:00||;True|2024-11-26T18:32:03.9568766+08:00||;True|2024-11-21T02:11:35.8050745+08:00||;True|2024-09-21T16:35:22.6651659+08:00||;True|2024-09-21T16:14:11.3450387+08:00||;True|2024-09-19T17:16:11.7338751+08:00||;True|2024-09-19T17:11:21.0116707+08:00||;True|2024-09-19T13:54:25.7455472+08:00||;True|2024-09-15T13:55:51.7095153+08:00||;True|2024-09-12T17:10:20.4734556+08:00||;True|2024-09-10T15:54:07.7463519+08:00||;True|2024-09-06T14:40:56.3762241+08:00||;True|2024-08-20T17:12:00.2924570+08:00||;True|2024-08-17T10:57:05.6670396+08:00||;True|2024-08-17T10:56:46.8068041+08:00||;True|2024-08-16T14:09:17.0526491+08:00||;True|2024-08-15T08:40:32.8134665+08:00||;True|2024-08-14T10:00:27.7017207+08:00||;True|2024-08-14T08:54:44.8284031+08:00||;True|2024-08-07T10:32:10.3689256+08:00||;True|2024-08-05T15:45:03.0864530+08:00||;True|2024-08-03T09:59:13.7916520+08:00||;True|2024-07-31T17:27:28.1965929+08:00||;True|2024-07-31T15:27:34.7943845+08:00||;True|2024-07-30T15:04:50.5849235+08:00||;True|2024-07-30T14:09:06.2877325+08:00||;True|2024-07-29T16:11:30.4493940+08:00||;True|2024-07-23T14:30:34.4591002+08:00||;True|2024-07-22T14:17:39.8186158+08:00||;True|2024-04-10T12:55:31.3963752+08:00||;True|2024-04-08T13:59:25.5487203+08:00||;True|2024-04-06T09:30:09.5350539+08:00||;True|2024-04-06T08:46:05.8814658+08:00||;True|2024-04-05T14:06:52.0448024+08:00||;True|2024-04-05T12:47:46.0561601+08:00||;True|2024-02-26T08:46:22.0988887+08:00||;True|2024-02-24T19:17:13.6770376+08:00||;True|2024-02-24T14:32:37.4450337+08:00||;True|2024-02-23T10:22:06.5150173+08:00||;True|2024-02-22T13:19:56.6997993+08:00||;True|2024-02-22T10:53:17.7929585+08:00||;True|2024-02-21T17:08:06.5553444+08:00||;True|2024-02-19T16:24:37.4912012+08:00||;True|2024-02-02T10:07:23.2726075+08:00||;True|2024-02-02T08:36:49.2904460+08:00||;True|2024-01-29T17:44:43.6800769+08:00||;True|2024-01-23T09:47:26.7811926+08:00||;True|2024-01-18T16:23:30.3373836+08:00||;True|2024-01-17T14:22:04.2552286+08:00||;True|2024-01-16T16:54:42.2316892+08:00||;True|2024-01-16T16:37:23.8028858+08:00||;True|2024-01-16T09:25:24.4007775+08:00||;True|2024-01-15T10:18:57.3362616+08:00||;True|2024-01-15T10:07:14.2044763+08:00||;True|2024-01-10T14:03:36.4451130+08:00||;True|2024-01-09T16:45:32.9601815+08:00||;True|2024-01-06T14:16:34.2732220+08:00||;True|2024-01-06T14:11:45.2134717+08:00||;True|2024-01-06T11:30:58.9198887+08:00||;</History> <LastFailureDetails /> </PropertyGroup> </Project> MESApplication/bin/Debug/net8.0/MES.Service.dllBinary files differ
MESApplication/bin/Debug/net8.0/MES.Service.pdbBinary files differ
MESApplication/bin/Debug/net8.0/MESApplication.dllBinary files differ
MESApplication/bin/Debug/net8.0/MESApplication.exeBinary files differ
MESApplication/bin/Debug/net8.0/MESApplication.pdbBinary files differ
MESApplication/bin/Release/net8.0/MES.Service.dllBinary files differ
MESApplication/bin/Release/net8.0/MES.Service.pdbBinary files differ
MESApplication/bin/Release/net8.0/MESApplication.dllBinary files differ
MESApplication/bin/Release/net8.0/MESApplication.exeBinary files differ
MESApplication/bin/Release/net8.0/MESApplication.pdbBinary files differ
MESApplication/bin/Release/net8.0/publish/MES.Service.dllBinary files differ
MESApplication/bin/Release/net8.0/publish/MES.Service.pdbBinary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.dllBinary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.exeBinary files differ
MESApplication/bin/Release/net8.0/publish/MESApplication.pdbBinary files differ