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": 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.LineNumber }).ToList(); db.Deleteable() .Where(it => mesSalesOrderDetails .Any(p => p.OrderId == it.OrderId && p.LineNumber == it.LineNumber)) .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.LineNumber }).ToList(); var insertOrUpdate = db.Deleteable().Where(it => mesSalesOrderDetail.Any(p => p.OrderId == it.OrderId && p.LineNumber==it.LineNumber)).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 = DateTime.TryParseExact(dto.FDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime documentDate) ? (DateTime?)documentDate : null, CustomerId = dto.FCustId, CustomerOrderId= dto.F_UNW_Text_KHDD, DepartmentId= dto.FSaleDeptId, TotalQuantity = long.TryParse(dto.FNote, out long quantity) ? (long?)quantity : null, Remarks =dto.F_UNW_LargeText_TBKHBZ, ApprovalDate = DateTime.TryParse(dto.FApproveDate, out DateTime approveDate) ? (DateTime?)approveDate : null, Approver = dto.FApproverId }; 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, LineNumber = dto.LineNumber, ProductCode =dto.FMaterialId, ProductName =dto.FMaterialName, ProductSpec=dto.FMaterialModel, ScheduledDeliveryDate = DateTime.TryParse(dto.FMinPlanDeliveryDate, out DateTime scheduledDeliveryDate) ? (DateTime?)scheduledDeliveryDate : null, OrderQuantity = long.TryParse(dto.FQty, out long quantity) ? (long?)quantity : null, Unit = dto.FUnitID, UnitPrice = long.TryParse(dto.FPrice, out long price) ? (long?)price : null, Amount = long.TryParse(dto.FAmount, out long amount) ? (long?)amount : null, }; 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.LineNumber == data.FBillTypeID) .ExecuteCommand() > 0; if (update && insertOrUpdate) return 1; throw new NotImplementedException("删除失败"); }) > 0; } }