using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using MES.Service.util; 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 => { return rohInErpRohIn.Type switch { "2" or "4" or "5" => SaveOrUpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0, "3" => DeleteData(db, mesRohIn, mesRohInDatas) ? 1 : 0, _ => throw new NotImplementedException( $"type没有{rohInErpRohIn.Type}这个类型") }; }) > 0; } // 更新数据的方法 private bool DeleteData(SqlSugarScope db, MesRohIn mesRohIn, List mesRohInDatas) { var decimals = mesRohInDatas.Select(s => s.Id).ToArray(); //var update = base.DeleteById(mesRohIn.Id); //var insertOrUpdate = db // .Deleteable().In(decimals) // .ExecuteCommand() > 0; var update = db.Deleteable() .Where(a => a.Id == mesRohIn.Id) .ExecuteCommand() > 0; var insertOrUpdate = db .Deleteable() .Where(s => decimals.Contains(s.Id)) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, MesRohIn mesRohIn, List mesRohInDatas) { if (mesRohIn.Id != null) base.DeleteById(mesRohIn.Id); if (mesRohInDatas.Count > 0) db.Deleteable() .Where(s => s.ErpId == mesRohIn.EbelnK3id).ExecuteCommand(); //var orUpdate = base.Insert(mesRohIn); //var baOrUpdate = rohInDataManager.InsertRange(mesRohInDatas); var orUpdate = db.Insertable(mesRohIn) .IgnoreColumns(true).ExecuteCommand() > 0; var baOrUpdate = db.Insertable(mesRohInDatas).PageSize(1) .IgnoreColumnsNull() .ExecuteCommand() > 0; 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 对象的方法 private MesRohIn GetMesRohIn(ErpRohIn rohIn) { var eid = rohIn.id; var mesRohIn = new MesRohIn(); var single = base.GetSingle(it => it.EbelnK3id == eid); if (single != null) mesRohIn.Id = single.Id; var mesLinkU9 = Db.Queryable() .Where(s => s.U9Id == rohIn.FSupplierId && s.OrgId == rohIn.FReceiveOrgId && s.TableType == "MES_SUPPLIER").First(); if (mesLinkU9 != null) mesRohIn.Supplier = mesLinkU9.MesId; mesRohIn.EbelnK3id = eid; 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.CloseStatus = rohIn.FCloseStatus; mesRohIn.PurchaseOrg = rohIn.FPurchaseOrgId; mesRohIn.PurchaseDept = rohIn.FPurchaseDeptId; mesRohIn.Purchaser = rohIn.FPurchaserId; mesRohIn.CreateBy = rohIn.FCreatorId; if (rohIn.FCreateDate != null) mesRohIn.CreateDate = DateTime.ParseExact(rohIn.FCreateDate, "yyyy-MM-dd HH:mm:ss", null); mesRohIn.LastupdateBy = rohIn.FModifierId; if (rohIn.FModifyDate != null) mesRohIn.LastupdateDate = DateTime.ParseExact(rohIn.FModifyDate, "yyyy-MM-dd HH:mm:ss", null); mesRohIn.ErpCheckBy = rohIn.FApproverId; mesRohIn.ErpCheckDate = rohIn.FApproveDate; mesRohIn.Changereason = rohIn.PubDescSeg2; mesRohIn.ReceiveOrg = rohIn.FReceiveOrgId; mesRohIn.Remarks = rohIn.Remarks; mesRohIn.SrcDocType = rohIn.FSrcDocType; mesRohIn.SrcDoc = rohIn.FSrcDoc; mesRohIn.TradePathName = rohIn.FTradePathName; mesRohIn.SubType = rohIn.FSubType; mesRohIn.IsReDo = short.Parse(rohIn.FIsReDo ?? "0"); mesRohIn.PrivateDescSeg1 = rohIn.PrivateDescSeg1; mesRohIn.Version = rohIn.FVersion; //作废的相关字段 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); return mesRohIn; } // 将 ErpRohinData 对象转换为 MesRohInData 对象的方法 private List GetMesRohInDatas( List erpRohinDatas, string type) { return erpRohinDatas.DistinctByConcurrent(x => x.id).Select(s => { var entity = new MesRohInData { EbelnK3id = s.id, ErpId = s.Eid, BillNo = s.FBillNo, OrderLineId = s.FSeq, BusinessFreeze = s.FStatus, PurchaseOrderLineNumber = s.FSeq, SalesOrderId = s.FDemandBillEntrySeq, PurchaseUnit = s.FUnitId, PurchaseQty = Convert.ToDecimal(s.FQty), PricingUnit = s.FPriceUnitId, PricingQty = Convert.ToDecimal(s.FPriceUnitQty), Demand = s.FRequireOrgId, Receiving = s.FReceiveOrgId, ReceivingDept = s.FReceiveDeptId, DemandOrg = s.FRequireOrgId, ReceivingOrg = s.FReceiveOrgId, IsGift = s.FGiveAway, Remarks = s.FEntryNote, BatchNumber = s.FLot, 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), //收料可退数 ReturnableStoredQty = Convert.ToDecimal(s.FSTOCKRETQTY), //库存可退数 SourceDocumentType = s.FSrcBillTypeId, SourceDocumentId = s.FSrcBillNo, DemandSource = s.FDemandType, DemandDocumentId = s.FDemandBillNo, DemandDocumentLineId = s.FDemandBillEntrySeq, RdProject = s.RdProject, ProjectPurchaser = s.ProjectPurchaser }; if (s.FDeliveryDate != null) entity.DeliveryDate = DateTime.ParseExact(s.FDeliveryDate, "yyyy-MM-dd HH:mm:ss", null); var single = rohInDataManager.GetSingle(it => it.EbelnK3id == entity.EbelnK3id); if (single != null) entity.Id = single.Id; //ItemId = s.FMaterialId, var mesLinkU9 = Db.Queryable() .Where(x => x.U9Id == s.FMaterialId && x.OrgId == s.FReceiveOrgId && x.TableType == "MES_ITEMS").First(); if (mesLinkU9 != null) entity.ItemId = mesLinkU9.MesId; var mesLinkU92 = Db.Queryable() .Where(x => x.U9Id == s.Project && x.OrgId == s.FReceiveOrgId && x.TableType == "MES_PROJECT").First(); if (mesLinkU92 != null) entity.Project = mesLinkU92.MesId; return entity; }).ToList(); } }