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": case "4": case "5": return SaveOrUpdateData(db, mesRohIn, mesRohInDatas) ? 1 : 0; case "3": return UpdateData(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 decimals = mesRohInDatas.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesRohIn.Id); var insertOrUpdate = db .Deleteable().In(decimals) .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); 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(); var single = base.GetSingle(it => it.EbelnK3id == eid); if (single != null) mesRohIn.Id = single.Id; 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.Supplier = rohIn.FSupplierId; mesRohIn.CloseStatus = rohIn.FCloseStatus; mesRohIn.PurchaseOrg = rohIn.FPurchaseOrgId; mesRohIn.PurchaseDept = rohIn.FPurchaseDeptId; mesRohIn.PurchaseGroup = rohIn.FPurchaserGroupId; mesRohIn.QtyAcceptance = rohIn.Facctype; mesRohIn.Purchaser = rohIn.FPurchaserId; //mesRohIn.QualityReq = rohIn.F_UNW_Remarks_zlyq; mesRohIn.SettlementParty = rohIn.FSettleId; mesRohIn.PaymentParty = rohIn.FChargeId; // mesRohIn.Email = rohIn.FProviderEMail; // mesRohIn.TransportMethod = rohIn.F_UNW_Text_ysfs; mesRohIn.Remarks = rohIn.F_XIFG_Text_qtr1; // mesRohIn.FixtureMoldProcurement = rohIn.F_UNW_Combo_zjmj; 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.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.FCHANGEREASON; mesRohIn.FPREARRIVALDATE = rohIn.FPREARRIVALDATE != null ? DateTime.ParseExact(rohIn.FPREARRIVALDATE, "yyyy-MM-dd HH:mm:ss", null) : null; mesRohIn.FRECEIVEORGID = rohIn.FRECEIVEORGID; mesRohIn.remark1 = rohIn.F_XIFG_PrintTimes_qtr; return mesRohIn; } // 将 ErpRohinData 对象转换为 MesRohInData 对象的方法 public List GetMesRohInDatas( List erpRohinDatas, string type) { return erpRohinDatas.Select(s => { var entity = new MesRohInData { EbelnK3id = Convert.ToDecimal(s.id), ErpId = Convert.ToDecimal(s.Eid), BillNo = s.FBillNo, SalesOrderId = s.F_XIFG_Text_k79, OrderLineId = s.FSEQ, ItemId = s.FMaterialId, PurchaseUnit = s.FUnitId, PurchaseQty = Convert.ToDecimal(s.FQty), InventoryUnit = s.FStockUnitID, DeliveryDate = s.FDeliveryDate != null ? DateTime.ParseExact(s.FDeliveryDate, "yyyy-MM-dd HH:mm:ss", null) : null, EarliestDeliveryDate = s.FDeliveryEarlyDate != null ? DateTime.ParseExact(s.FDeliveryEarlyDate, "yyyy-MM-dd HH:mm:ss", null) : null, LatestDeliveryDate = s.FDeliveryLastDate != null ? DateTime.ParseExact(s.FDeliveryLastDate, "yyyy-MM-dd HH:mm:ss", null) : null, IsGift = s.FGiveAway, Remarks = s.Fnote, SupplierItemCode = s.FSupMatId, SupplierItemName = s.FSupMatName, OutsourcingOrderId = s.FSUBREQBILLNO, BatchNumber = s.FLot, BusinessClose = s.FMRPCloseStatus, BusinessFreeze = s.FMRPFreezeStatus, Freezer = s.FFreezerId, FreezeTime = s.FFreezeDate != null ? DateTime.ParseExact(s.FFreezeDate, "yyyy-MM-dd HH:mm:ss", null) : null, BusinessTerminate = s.FMRPTerminateStatus, Terminator = s.FTerminaterId, TerminateTime = s.FTerminateDate != null ? DateTime.ParseExact(s.FTerminateDate, "yyyy-MM-dd HH:mm:ss", null) : null, 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, DemandTrackingId = s.FReqTraceNo, PlanTrackingId = s.FMtoNo, ChangeFlag = s.FChangeFlag, DemandSource = s.FDEMANDTYPE, DemandDocumentId = s.FDEMANDBILLNO, DemandDocumentLineId = s.FDEMANDBILLENTRYSEQ, DemandOrg = s.FRequireOrgId, ReceivingOrg = s.FReceiveOrgId, SettlementOrg = s.FEntrySettleOrgId, PurchaseOrderLineNumber = s.FSEQ, Demand = s.FRequireOrgId, Receiving = s.FReceiveOrgId, Settlement = s.FSETTLEORGID, DemandDepartment = s.FRequireDeptId, ReceivingDepartment = s.FReceiveDeptId, FPREARRIVALDATE = s.FPREARRIVALDATE != null ? DateTime.ParseExact(s.FPREARRIVALDATE, "yyyy-MM-dd HH:mm:ss", null) : null, Remark1 = s.F_XIFG_Text_ne1, Remark2 = s.F_XIFG_Text_6oq, Remark3 = s.F_XIFG_Base_c1c, Remark4 = s.F_XIFG_Text_qtr4, FdemandbillnoLine = s.FdemandbillnoLine, ElectricalProductModel = s.ElectricalProductModel, ElectricalProductName = s.ElectricalProductName }; var single = rohInDataManager.GetSingle(it => it.EbelnK3id == entity.EbelnK3id); if (single != null) entity.Id = single.Id; return entity; }).ToList(); } }