using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service; public class WomcaaManager : Repository { private readonly WomcabManager _womcabManager = new(); public bool SaveList(List rohIns) { var result = rohIns.Select(Save).ToList(); return result.All(b => b); } public bool Save(ErpWOM wom) { var womErpCaa = wom.ErpCaa; var mesWomcaa = MapErpCAAtoWomcaa(womErpCaa); var mesWomcabs = MapErpCABtoWomcab(wom.ErpCabs); return UseTransaction(db => { switch (womErpCaa.Type) { case "3": return UpdateData(db, mesWomcaa, mesWomcabs) ? 1 : 0; case "2": case "4": case "5": return SaveOrUpdateData(db, mesWomcaa, mesWomcabs) ? 1 : 0; default: throw new NotImplementedException( $"type类型为{womErpCaa.Type}的不存在"); } }) > 0; } private bool SaveOrUpdateData(SqlSugarScope db, Womcaa mesWomcaa, List mesWomcabs) { if (mesWomcaa.Id != null) base.DeleteById(mesWomcaa.Id); if (mesWomcabs.Count > 0) db.Deleteable() .Where(s => s.Eid == mesWomcaa.Erpid).ExecuteCommand(); var orUpdate = db.Insertable(mesWomcaa) .IgnoreColumns(true).ExecuteCommand() > 0; var baOrUpdate = db.Insertable(mesWomcabs).PageSize(1) .IgnoreColumnsNull() .ExecuteCommand() > 0; if (orUpdate && baOrUpdate) { //定义输入参数 var inputParam1 = new SugarParameter("P_WORK_NO", mesWomcaa.Caa001); // 定义输出参数 var outParam1 = new SugarParameter("c_Result", null, true); var outParam2 = new SugarParameter("C_MSG", null, true); // 使用 SqlSugar 执行存储过程 Db.Ado.ExecuteCommand("BEGIN PRC_UPDATE_DAA(:P_WORK_NO,:c_Result,:C_MSG); END;", inputParam1, outParam1, outParam2); // 获取输出参数的值 int result = int.Parse((string)outParam1.Value); string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value; if (result == 1) { //存储过程失败则事务进行回滚 //db.Ado.RollbackTran(); throw new Exception(message); } // 提交事务 //db.Ado.CommitTran(); return true; } throw new NotImplementedException("更新失败"); } private bool UpdateData(SqlSugarScope db, Womcaa mesWomcaa, List mesWomcabs) { var decimals = mesWomcabs.Select(s => s.Id).ToArray(); var update = base.DeleteById(mesWomcaa.Id); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } private Womcaa MapErpCAAtoWomcaa(ErpCAA dto) { var entity = new Womcaa { Erpid = Convert.ToInt64(dto.Id), Caa001 = dto.FBillNo, Caa021 = dto.FWorkShopID, DepotCode = dto.FStockId, CreateDate = dto.FDate, Caa004 = dto.FBillType, Caa023 = dto.FStatus, Caa006 = dto.FMaterialId, Caa009 = dto.FUnitId, Caa012 = !string.IsNullOrEmpty(dto.FQty) ? Convert.ToDecimal(dto.FQty) : null, WorkGroupId = dto.FWorkGroupId, PlanId = dto.FPlannerID, Caa010 = dto.FPlanStartDate, Caa011 = dto.FPlanFinishDate, Caa005 = dto.FConveyDate, StockInlimith = dto.FStockInLimitH, StockInlimitl = dto.FStockInLimitL, Mtono = dto.FMTONO, Lot = dto.FLot, Caa013 = dto.FBomId, CreateType = dto.FCreateType, Caa020 = dto.FBillNo, SrcBillType = dto.FSrcBillType, SrcBillNo = dto.FSrcBillNo, SrcBillentryseq = dto.FSrcBillEntrySeq, SaleOrderNo = dto.FSaleOrderNo, SaleOrderEntryseq = dto.FSaleOrderEntrySeq, ForceCloserid = dto.FForceCloserId, CloseType = dto.FCloseType, SrcSplitBillno = dto.FSrcSplitBillNo, Caa016 = dto.FDescription, PrdOrg = dto.FPrdOrgId, TrustOrg = dto.FEnTrustOrgId, Bomtype = dto.FBOMType, Bommaster = dto.FBOMMaster, Bomaltrnate = dto.FBOMAlternate, Bomeffedate = dto.FBOMEffeDate, Routingalternate = dto.FRoutingAlternate, Routingeffedate = dto.FRoutingEffeDate, Mrpqty = dto.FMRPQty, Actualstartdate = dto.FActualStartDate, Actualcompletedate = dto.FActualCompleteDate, Mosourcedoctype = dto.FMOSourceDocType, Project = dto.FProject, Ownerorg = dto.FOwnerOrg, Createdby = dto.FCreatedBy, Createdon = dto.FCreatedOn, Totalstartqty = dto.FTotalStartQty, Totalcompleteqty = dto.FTotalCompleteQty, Totalrcvqty = dto.FTotalRcvQty, Totalreworkingqty = dto.FTotalReworkingQty, Reasonforrework = dto.FReasonForRework, Isforcewholeset = dto.FIsForceWholeSet, PREVMO = dto.FPrevMO, Typea = dto.TypeA }; var single = base.GetSingle(it => it.Erpid == entity.Erpid); if (single != null) entity.Id = single.Id; //Caa006 = dto.FMaterialId, var mesLinkU9 = Db.Queryable() .Where(x => x.U9Id == dto.FMaterialId && x.OrgId == dto.FPrdOrgId && x.TableType == "MES_ITEMS").First(); var mesLinkU9_xm = Db.Queryable() .Where(x => x.U9Id == Convert.ToString(dto.FProject) && x.OrgId == dto.FPrdOrgId && x.TableType == "MES_PROJECT").First(); if (mesLinkU9 != null) entity.Caa006 = mesLinkU9.MesId; if (mesLinkU9_xm != null) entity.Project = Convert.ToInt64(mesLinkU9_xm.MesId); return entity; } private List MapErpCABtoWomcab(List dtoList) { var womcabList = new List(); foreach (var dto in dtoList) { var womcab = new Womcab { Erpid = !string.IsNullOrEmpty(dto.ID) ? Convert.ToDecimal(dto.ID) : throw new Exception("子表id不允许为空"), Cab001 = dto.FBillNo, Cab002 = dto.FSeq, Cab003 = dto.FMaterialID, Cab006 = !string.IsNullOrEmpty(dto.FNeedQty) ? Convert.ToDecimal(dto.FNeedQty) : null, MustQty = !string.IsNullOrEmpty(dto.FMustQty) ? Convert.ToDecimal(dto.FMustQty) : null, Cab007 = !string.IsNullOrEmpty(dto.FPickedQty) ? Convert.ToDecimal(dto.FPickedQty) : null, PositionNo = dto.FPositionNO, SupplyOrganization = dto.FChildSupplyOrgId, IssuingOrganization = dto.FSupplyOrg, Mtono = dto.FMTONO, Lot = dto.FLot, DepotCode = dto.FStockID, IssueType = dto.FIssueType, Cab009 = dto.FUnitID, SupplyType = dto.FSupplyType, Cab012 = !string.IsNullOrEmpty(dto.FStdQty) ? Convert.ToDecimal(dto.FStdQty) : null, FreplaceGroup = !string.IsNullOrEmpty(dto.FReplaceGroup) ? Convert.ToInt64(dto.FReplaceGroup) : null, UseRate = !string.IsNullOrEmpty(dto.FUseRate) ? Convert.ToDecimal(dto.FUseRate) : null, Cab014 = !string.IsNullOrEmpty(dto.FIsKeyItem) ? Convert.ToInt64(dto.FIsKeyItem) : null, Numerator = !string.IsNullOrEmpty(dto.FNumerator) ? Convert.ToDecimal(dto.FNumerator) : null, Denominator = !string.IsNullOrEmpty(dto.FDenominator) ? Convert.ToDecimal(dto.FDenominator) : null, Pid = !string.IsNullOrEmpty(dto.FID) ? Convert.ToDecimal(dto.FID) : throw new Exception("父id不允许为空"), Eid = !string.IsNullOrEmpty(dto.FID) ? Convert.ToDecimal(dto.FID) : throw new Exception("父id不允许为空"), Scrapqty = !string.IsNullOrEmpty(dto.FFixScrapQty) ? Convert.ToDecimal(dto.FFixScrapQty) : null, Scraprate = !string.IsNullOrEmpty(dto.FScrapRate) ? Convert.ToDecimal(dto.FScrapRate) : null, Project = dto.FProject, Bomreqqty = dto.FBOMReqQty, Materialtype = dto.FMaterialType, IsOverIssue = dto.FIsOverIssue, StandardMaterialscale = dto.FStandardMaterialScale, Fixedmaterialnum = dto.FFixedMaterialNum, IsSubstitute = dto.FIsSubstitute, Substituteditem = dto.FSubstitutedItem, Issueuom = dto.FIssueUOM, Qpa = dto.FQPA, Scraptype = dto.FScrapType, Bfopportunity = dto.FBFOpportunity, Supplywh = dto.FSupplyWh, Mocompletesetcheck = dto.FMOCompleteSetCheck, Mostartsetcheck = dto.FMOStartSetCheck, Iscoupleissue = dto.FIsCoupleIssue, FDescription = dto.FDescription, TypeB = dto.TypeB }; var entity = Db.Queryable() .Where(s => s.Erpid == womcab.Erpid).Single(); if (entity != null) womcab.Id = entity.Id; //Cab003 = dto.FMaterialID var mesLinkU9 = Db.Queryable() .Where(x => x.U9Id == dto.FMaterialID && x.OrgId == "1002011210000095" && x.TableType == "MES_ITEMS").First(); var mesLinkU9_xm = Db.Queryable() .Where(x => x.U9Id == Convert.ToString(dto.FProject) && x.OrgId == "1002011210000095" && x.TableType == "MES_PROJECT").First(); if (mesLinkU9 != null) womcab.Cab003 = mesLinkU9.MesId; if (mesLinkU9_xm != null) womcab.Project = mesLinkU9_xm.MesId; womcabList.Add(womcab); } return womcabList; } }