using AngleSharp.Dom; using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; using System.Data; using System.Globalization; using DbType = System.Data.DbType; namespace MES.Service.service; public class MesSalesOrderManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 //这里面写的代码不会给覆盖,如果要重新生成请删除 SalesOrderManager.cs private readonly MesSalesOrderDetailManager _MesSalesOrderDetailManagerManager = new(); public bool SaveList(List rohIns) { var result = rohIns.Select(Save).ToList(); return result.All(b => b); } public bool Save(ErpSales sales) { var salesErpOrder = sales.ErpOrder; var mesSalesOrder = MapErpORDERtoMesSalesOrder(salesErpOrder); var mesSalesOrderDetails = MapErpDETAILtoMesSalesOrderDetail(sales.ErpDetails); return UseTransaction(db => { switch (salesErpOrder.Type) { case "3": return UpdateData(db, mesSalesOrder, mesSalesOrderDetails) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesSalesOrder, mesSalesOrderDetails) ? 1 : 0; default: throw new NotImplementedException( $"type没有{salesErpOrder.Type}这个类型"); } }) > 0; } private bool SaveOrUpdateData(SqlSugarScope db, MesSalesOrder mesSalesOrder, List mesSalesOrderDetails) { if (mesSalesOrder.OrderId != null && mesSalesOrder.OrderType != null) { db.Deleteable() .Where(it => it.OrderId == mesSalesOrder.OrderId && it.OrderType == mesSalesOrder.OrderType) .ExecuteCommand(); }; if (mesSalesOrderDetails.Count > 0) { var mesSalesOrderDetail = mesSalesOrderDetails.Select(s => new { s.OrderId, s.OrderType }).ToList(); db.Deleteable() .Where(it => mesSalesOrderDetails .Any(p => p.OrderId == it.OrderId && p.OrderType == it.OrderType)) .ExecuteCommand(); }; var orUpdate = db.Insertable(mesSalesOrder).ExecuteCommand(); var baOrUpdate = db.Insertable(mesSalesOrderDetails).ExecuteCommand(); return orUpdate > 0 && baOrUpdate > 0; throw new NotImplementedException("插入或更新失败"); } private bool UpdateData(SqlSugarScope db, MesSalesOrder mesSalesOrder, List mesSalesOrderDetails) { //根据单别和单号进行删除 var update = db.Deleteable() .Where(it => it.OrderId == mesSalesOrder.OrderId && it.OrderType == mesSalesOrder.OrderType) .ExecuteCommand() > 0; var mesSalesOrderDetail = mesSalesOrderDetails.Select(s => new { s.OrderId, s.OrderType }).ToList(); var insertOrUpdate = db.Deleteable(). Where(it => mesSalesOrderDetail.Any(p => p.OrderId == it.OrderId && p.OrderType == it.OrderType)).ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } private MesSalesOrder MapErpORDERtoMesSalesOrder(ErpORDER dto) { var entity = new MesSalesOrder { OrderId = dto.FBillNo, OrderType = dto.FBillTypeID, DocumentDate = !string.IsNullOrEmpty(dto.FDate) && DateTime.TryParseExact(dto.FDate, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime documentDate) ? (DateTime?)documentDate : null, CustomerId = dto.FCustId, OrderDate = !string.IsNullOrEmpty(dto.FOrderDate) && (DateTime.TryParseExact(dto.FOrderDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime orderDate) || DateTime.TryParseExact(dto.FOrderDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out orderDate)) ? (DateTime?)orderDate : null, DeliveryDate = !string.IsNullOrEmpty(dto.FDeliveryDate) && (DateTime.TryParseExact(dto.FDeliveryDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime deliveryDate) || DateTime.TryParseExact(dto.FDeliveryDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out deliveryDate)) ? (DateTime?)deliveryDate : null, 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 }; return entity; } private List MapErpDETAILtoMesSalesOrderDetail(List dtoList) { var detailList = new List(); foreach (var dto in dtoList) { var mesSalesOrderDetail = new MesSalesOrderDetail { OrderId = dto.F_UNW_Text_xsddh, OrderType = dto.FOrderType, OrderNumber = dto.FOrderNumber, ProductCode = dto.FMaterialId, ProductName = dto.FMaterialName, ProductSpec = dto.FMaterialModel, Warehouse = dto.FWarehouse, GiftQuantity=dto.FGiftQuantity, UnsettledBorrowedQty=dto.FUnsettledBorrowedQty, ConfigurationPlan=dto.FConfigurationPlan, ScheduledDeliveryDate = !string.IsNullOrEmpty(dto.FMinPlanDeliveryDate) && (DateTime.TryParseExact(dto.FMinPlanDeliveryDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime scheduledDeliveryDate) || DateTime.TryParseExact(dto.FMinPlanDeliveryDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out scheduledDeliveryDate)) ? (DateTime?)scheduledDeliveryDate : null, OrderQuantity = dto.FQty, DeliveredGiftQuantity = dto.FDeliveredGiftQuantity, Remarks = dto.FEntryNote, DeviceModel = dto.FDeviceModel, CustomerProductId = dto.FCustomerProductId, CustomerProductName = dto.FCustomerProductName, CustomerSpec = dto.FCustomerSpec, CustomerOrderId = dto.FCustomerOrderId, Unit=dto.FUnitID, DeliveredQuantity=dto.FDeliCommitQty, IsClosed=dto.FIsClosed }; detailList.Add(mesSalesOrderDetail); } return detailList; } public bool Delete(YFDelete data) { return UseTransaction(db => { var update = db.Deleteable() .Where(it => it.OrderId == data.FBillNo && it.OrderType == data.FBillTypeID) .ExecuteCommand() > 0; var insertOrUpdate = db.Deleteable() .Where(it => it.OrderId == data.FBillNo && it.OrderType == data.FBillTypeID) .ExecuteCommand() > 0; if (update && insertOrUpdate) return 1; throw new NotImplementedException("删除失败"); }) > 0; } }