using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service.BasicData; public class MesRohInManager : Repository { private readonly MesRohInDataManager rohInDataManager = new(); // Save 方法用于保存单个 RohIn 记录,根据类型执行不同的操作 public bool Save(RohIn rohIn) { var rohInErpRohIn = rohIn.ErpRohIn; var mesRohIn = GetMesRohIn(rohInErpRohIn); var mesRohInDatas = GetMesRohInDatas(rohIn.ErpRohinDatas, rohInErpRohIn.Type); return UseTransaction(db => { switch (rohInErpRohIn.Type) { // case "2": // return InsertData(db, mesRohIn, mesRohInDatas, // rohInErpRohIn.FBILLTYPE) // ? 1 // : 0; case "3": return UpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0; default: throw new NotImplementedException( $"type没有{rohInErpRohIn.Type}这个类型"); } }) > 0; } // 插入数据的方法 private bool InsertData(SqlSugarScope db, MesRohIn mesRohIn, List mesRohInDatas, string FBILLTYPE) { switch (FBILLTYPE) { case "A": { var decimals = mesRohInDatas.Select(s => s.Id).ToArray(); if (mesRohIn.Id != null) base.DeleteById(mesRohIn.Id); if (decimals.Length > 0) db.Deleteable().In(decimals).ExecuteCommand(); var insert = base.Insert(mesRohIn); var insertRange = rohInDataManager.InsertRange(mesRohInDatas); if (insert && insertRange) return true; throw new NotImplementedException("插入失败"); } case "B": { var decimals = mesRohInDatas.Select(s => s.Id).ToArray(); if (base.DeleteById(mesRohIn.Id) && db .Deleteable().In(decimals) .ExecuteCommand() > 0) { var insert = base.Insert(mesRohIn); var insertRange = rohInDataManager.InsertRange(mesRohInDatas); if (insert && insertRange) return true; throw new NotImplementedException("插入失败"); } break; } } throw new NotImplementedException("采购订单类型错误"); } // 更新数据的方法 private bool UpdateData(SqlSugarScope db, MesRohIn mesRohIn, List mesRohInDatas) { //根据单别和单号进行删除 var update = db.Deleteable() .Where(it => it.BillNo == mesRohIn.BillNo && it.DocumentType == mesRohIn.DocumentType) .ExecuteCommand() > 0; var mesRohInData = mesRohInDatas.Select(s => new { billno = s.BillNo, billnotype = s.Billnotype, seqno = s.OrderLineId }).ToList(); var insertOrUpdate = db.Deleteable().Where(it => mesRohInData.Any(p => p.billno == it.BillNo && p.billnotype == it.Billnotype && p.seqno == it.OrderLineId)).ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn, List mesRohInDatas) { if (mesRohIn.BillNo != null && mesRohIn.DocumentType != null) { db.Deleteable() .Where(it => it.BillNo == mesRohIn.BillNo && it.DocumentType == mesRohIn.DocumentType) .ExecuteCommand(); }; if (mesRohInDatas.Count > 0) { var mesRohInData = mesRohInDatas.Select(s => new { billno = s.BillNo, billnotype = s.Billnotype, seqno = s.OrderLineId }).ToList(); db.Deleteable() .Where(it => mesRohInData.Any(p => p.billno == it.BillNo && p.billnotype == it.Billnotype && p.seqno == it.OrderLineId)) .ExecuteCommand(); }; var orUpdate = base.Insert(mesRohIn); var baOrUpdate = rohInDataManager.InsertRange(mesRohInDatas); if (orUpdate && baOrUpdate) return true; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List rohIns) { var result = rohIns.Select(Save).ToList(); return result.All(b => b); } // 将 ErpRohIn 对象转换为 MesRohIn 对象的方法 public MesRohIn GetMesRohIn(ErpRohIn rohIn) { //var eid = Convert.ToDecimal(rohIn.id); var mesRohIn = new MesRohIn(); mesRohIn.BillNo = rohIn.FBillNo; mesRohIn.DocumentStatus = rohIn.FDocumentStatus; mesRohIn.DocumentType = rohIn.FBillTypeID; mesRohIn.BusinessType = rohIn.FBusinessType; if (rohIn.FDate != null) mesRohIn.PurchaseDate = DateTime.ParseExact(rohIn.FDate, "yyyy-MM-dd HH:mm:ss", null); mesRohIn.Supplier = rohIn.FSupplierId; mesRohIn.CloseStatus = rohIn.FCloseStatus; mesRohIn.Purchaser = rohIn.FPurchaserId; mesRohIn.CancellationStatus = rohIn.FCancelStatus; mesRohIn.CancellationPerson = rohIn.FCancellerId; if (rohIn.FCancelDate != null) mesRohIn.CancellationDate = DateTime.ParseExact(rohIn.FCancelDate, "yyyy-MM-dd HH:mm:ss", null); mesRohIn.CreateBy = rohIn.FCreatorId; if (rohIn.FCreateDate != null) mesRohIn.CreateDate = DateTime.ParseExact(rohIn.FCreateDate, "yyyy-MM-dd HH:mm:ss", null); mesRohIn.ErpCheckBy = rohIn.FApproverId; mesRohIn.ErpCheckDate = rohIn.FApproveDate; mesRohIn.Changereason = rohIn.FCHANGEREASON; return mesRohIn; } // 将 ErpRohinData 对象转换为 MesRohInData 对象的方法 public List GetMesRohInDatas( List erpRohinDatas, string type) { return erpRohinDatas.Select(s => { var entity = new MesRohInData { Billnotype = s.FBillTypeID, //采购单别 BillNo = s.FBillNo, OrderLineId = s.FDEMANDBILLENTRYSEQ, SalesOrderId = s.F_UNW_Text_xsddh, ItemId = s.FMaterialId, PurchaseUnit = s.FUnitId, PurchaseQty = Convert.ToDecimal(s.FQty), InventoryUnit = s.FStockUnitID, DeliveryDate = DateTime.ParseExact(s.FDeliveryDate,"yyyy-MM-dd HH:mm:ss", null), BusinessClose = s.FMRPCloseStatus, TerminateTime = !string.IsNullOrEmpty(s.FTerminateDate) ? DateTime.ParseExact(s.FTerminateDate, "yyyy-MM-dd HH:mm:ss", null) : (DateTime?)null, SourceDocumentType = s.FSrcBillTypeId, Remarks = s.FEntryNote, SupplierItemCode = s.FSupMatId, SupplierItemName = s.FSupMatName, TotalReceivedQty = Convert.ToDecimal(s.FReceiveQty), RemainingReceivedQty = Convert.ToDecimal(s.FRemainReceiveQty), TotalStoredQty = Convert.ToDecimal(s.FStockInQty), RemainingStoredQty = Convert.ToDecimal(s.FRemainStockINQty), TotalReturnedQty = Convert.ToDecimal(s.FMrbQty), ReturnableReceivedQty = Convert.ToDecimal(s.FCHECKRETQTY), SourceDocumentId = s.FSrcBillNo, DemandTrackingId = s.FReqTraceNo, DepotCode = s.FDepotCode, DepotName = s.FDepotName }; return entity; }).ToList(); } public bool Delete(YFDelete data) { return UseTransaction(db => { var update = db.Deleteable() .Where(it => it.BillNo == data.FBillNo && it.DocumentType == data.FBillTypeID) .ExecuteCommand() > 0; var insertOrUpdate = db.Deleteable() .Where(it => it.BillNo == data.FBillNo && it.Billnotype == data.FBillTypeID) .ExecuteCommand() > 0; if (update && insertOrUpdate) return 1; throw new NotImplementedException("删除失败"); }) > 0; } }