using System.Globalization; using Masuit.Tools; using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service.BasicData; public class ProductionOrderManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 private readonly ProductionOrderSubManager _productionOrderSubManager = new(); //ErpWYOrder public bool Save(ErpWYOrder wyOrder) { var erpProductionOrderDto = wyOrder.OrderDto; var mesRohIn = ConvertErpToProductionOrder(erpProductionOrderDto); var mesRohInDatas = ConvertErpToProductionOrderSub(wyOrder.Items); return UseTransaction(db => { switch (erpProductionOrderDto.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, erpProductionOrderDto.Type) ? 1 : 0; default: throw new NotImplementedException( $"type没有{erpProductionOrderDto.Type}这个类型"); } }) > 0; } private bool UpdateData(SqlSugarScope db, Womcaa womcaaWW, List mesRohInDatas) { womcaaWW.Caa001 = mesRohInDatas[0].Cab001; womcaaWW.Erpid = womcaaWW.FSUBENTRYID.ToInt32(); var decimals = mesRohInDatas.Select(s => s.Id).ToArray(); var update = base.DeleteById(womcaaWW.Id); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, Womcaa mesWomcaa, List mesWomcabss, string type) { //if (StringUtil.CheckGuid(mesRohIn.Guid)) // db.Deleteable() // .Where(s => s.Guid == mesRohIn.Guid) // .ExecuteCommand(); if (mesWomcaa.Id != null) base.DeleteById(mesWomcaa.Id); if (mesWomcabss.Count > 0) { mesWomcaa.Caa001 = mesWomcabss[0].Cab001; mesWomcaa.Erpid = mesWomcaa.FSUBENTRYID.ToInt32(); db.Deleteable() .Where(s => s.Eid == mesWomcaa.Erpid).ExecuteCommand(); } var orUpdate = db.Insertable(mesWomcaa) .IgnoreColumns(true).ExecuteCommand() > 0; var baOrUpdate = db.Insertable(mesWomcabss).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); } private Womcaa ConvertErpToProductionOrder( ErpProductionOrderDto erpDto) { DateTime parsedDate; // 时间格式转换函数,ERP时间格式为 "yyyy-MM-dd HH:mm:ss.fff" DateTime? ParseDateTime(string dateStr) { if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) return parsedDate; return null; // 如果转换失败,返回null } var entity = new Womcaa { Caa001 = erpDto.FBillNo, DepotCode = erpDto.FStockID, CreateDate = erpDto.FDate, // ParseDateTime(erpDto.FDate) ?? null, Caa004 = erpDto.FBillType, Caa023 = erpDto.FStatus, Caa006 = erpDto.FMaterialId, Caa009 = erpDto.FUnitID, Caa012 = Convert.ToDecimal(erpDto.FQty), WorkGroupId = erpDto.FWorkGroupId, PlanId = erpDto.FPlannerID, Caa010 = erpDto.FPlanStartDate, //ParseDateTime(erpDto.FPlanStartDate) ?? null, Caa011 = erpDto.FPlanFinishDate, //ParseDateTime(erpDto.FPlanFinishDate) ?? null, PLANCONFIRMATION = erpDto.PlanConfirmation, StockInlimith = erpDto .FStockInLimitH, //Convert.ToDecimal(erpDto.FStockInLimitH), StockInlimitl = erpDto .FStockInLimitL, //Convert.ToDecimal(erpDto.FStockInLimitL), Mtono = erpDto.FMTONO, Lot = erpDto.FLot, Caa013 = erpDto.FBomId, //SalesOrderNo = erpDto.F_UNW_XSDDH, CreateType = erpDto.FCreateType, FSUBID = erpDto.FSUBID, FSUBBILLNOSEQ = erpDto.FSUBBILLNOSEQ, FSUBBILLNO = erpDto.FSUBBILLNO, Caa020 = erpDto.FSUBBILLNO, SrcBillType = erpDto.FSrcBillType, SrcBillNo = erpDto.FSrcBillNo, SrcBillentryseq = erpDto.FSrcBillEntrySeq, FREQSRC = erpDto.FReqSrc, SaleOrderNo = erpDto.FSALEORDERNO, SaleOrderEntryseq = erpDto.FSaleOrderEntrySeq, ForceCloserid = erpDto.FFORCECLOSERID, CloseType = erpDto.FCloseType, SrcSplitBillno = erpDto.FDescription, SRCSPLITSEQ = erpDto.SrcSplitSeq, Erpid = Convert.ToDecimal(erpDto.FID), FSUBENTRYID = erpDto.FSUBENTRYID, FPURORDERNO = erpDto.FPurOrderNo, FPURORDERENTRYSEQ = erpDto .FPurOrderEntrySeq, //Convert.ToInt32(erpDto.FPurOrderEntrySeq), FBASESTOCKINQTY = Convert.ToDecimal(erpDto.FBaseStockInQty), FBASENOSTOCKINQTY = Convert.ToDecimal(erpDto.FBaseNoStockInQty), FINSTOCKOWNERID = erpDto.FInStockOwnerId, //PlanConfirmation = erpDto.PlanConfirmation != null // ? DateTime.ParseExact(erpDto.PlanConfirmation, // "yyyy-MM-dd HH:mm:ss", null) // : null, Typea = erpDto.TypeA }; var single = base.GetSingle(it => it.Erpid == Convert.ToDecimal(entity.FSUBENTRYID)); if (single != null) entity.Id = single.Id; return entity; } private List ConvertErpToProductionOrderSub( List erpDtoList) { var productionOrderSubList = new List(); foreach (var erpDto in erpDtoList) { var productionOrderSub = new Womcab { Cab001 = erpDto.FBillNo, Cab002 = erpDto.FSEQ, //Convert.ToInt32(erpDto.FSEQ), Cab003 = erpDto.FMaterialID2, MustQty = Convert.ToDecimal(erpDto.FMustQty), Cab006 = Convert.ToDecimal(erpDto.FMustQty), Cab007 = Convert.ToDecimal(erpDto.FPickedQty), PositionNo = erpDto.FPositionNO, OwnerId = erpDto.FOwnerID, Mtono = erpDto.FMTONO, Lot = erpDto.FLot, DepotCode = erpDto.FStockID, IssueType = erpDto.FIssueType, //Unit = erpDto.FUnitID2, SupplyType = erpDto.FSupplyType, Numerator = Convert.ToDecimal(erpDto.FNumerator), Denominator = Convert.ToDecimal(erpDto.FDenominator), Erpid = Convert.ToDecimal(erpDto.FPPOMENTRYID), Eid = Convert.ToDecimal(erpDto.FSUBENTRYID), SCRAPQTY = Convert.ToDecimal(erpDto.FFixScrapQty), SCRAPRATE = Convert.ToDecimal(erpDto.FScrapRate), MaterialType = erpDto.FMaterialType, //Unit2 = erpDto.FUnitID3, Freplacegroup = Convert.ToInt32(erpDto.FReplaceGroup), //OwnerType = erpDto.FOwnerTypeId, //Owner = erpDto.FOwnerID2, Fisgetscrap = erpDto.FISGETSCRAP, Fiskeycomponent = erpDto.FISKEYCOMPONENT, Fsrctransorgid = erpDto.FSRCTRANSORGID, Fsrctransstockid = erpDto.FSRCTRANSSTOCKID, Fstockstatusid = erpDto.FSTOCKSTATUSID, Fneeddate = erpDto.FNEEDDATE != null ? DateTime.ParseExact(erpDto.FNEEDDATE, "yyyy-MM-dd HH:mm:ss", null) : null, Freservetype = erpDto.FRESERVETYPE, Fmemo = erpDto.FMEMO, Typeb = erpDto.TypeB, ErpProductionEntryCode = erpDto.FPPOMID, FOWNERTYPEID = erpDto.FOwnerTypeId, FUNITID2 = erpDto.FUnitID2, FUNITID3 = erpDto.FUnitID3 }; var single = Db.Queryable().Where(it => it.Erpid == productionOrderSub.Erpid).Single(); if (single != null) productionOrderSub.Id = single.Id; productionOrderSubList.Add(productionOrderSub); } return productionOrderSubList; } }