using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service; public class WomcaaManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 //这里面写的代码不会给覆盖,如果要重新生成请删除 WomcaaManager.cs 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": //kyy 2024-09-13 变更 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) { mesWomcaa.Caa001 = mesWomcabs[0].Cab001; 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) return true; throw new NotImplementedException("插入或更新失败"); } private bool UpdateData(SqlSugarScope db, Womcaa mesWomcaa, List mesWomcabs) { mesWomcaa.Caa001 = mesWomcabs[0].Cab001; //定义输入参数 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(); 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.ToInt32(dto.Id), /// ERPID Caa001 = dto.ppbombillno, /// 单号 Caa021 = dto.FWorkShopID, /// 工作车间 RoutingId = dto.FRoutingId, /// 工艺路线 WorkShopId = dto.FREMWorkShopId, /// 产线 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, /// BOM版次 CreateType = dto.FCreateType, /// 生成方式 Caa018 = !string.IsNullOrEmpty(dto.PLAN_ID) ? Convert.ToInt32(dto.PLAN_ID) : null, /// ERP源单ID Caa019 = dto.PLAN_SEQ, /// ERP源单行号 Caa020 = dto.PLAN_NUM, /// ERP源单单号(任务单号) 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, /// 备注 BTBZ = dto.BTBZ, /// 备注 PrdOrg = dto.FPrdOrgId, /// 生产组织ID TrustOrg = dto.FEnTrustOrgId, /// 委托组织ID Typea = dto.TypeA, /// 单据状态 //沃尔新增 // WR_F_SCDD_SCTZD = dto.F_SCDD_SCTZD //WR_F_SCDD_XH = dto.F_SCDD_XH }; var single = base.GetSingle(it => it.Erpid == entity.Erpid); if (single != null) entity.Id = single.Id; return entity; } private List MapErpCABtoWomcab(List dtoList) { var womcabList = new List(); foreach (var dto in dtoList) { var womcab = new Womcab { Erpid = Convert.ToDecimal(dto.ID), Cab001 = dto.FBillNo, Cab002 = dto.FSeq, Cab003 = dto.FMaterialID, Cab006 = Convert.ToDecimal(dto.FNeedQty), MustQty = Convert.ToDecimal(dto.FMustQty), Cab007 = Convert.ToDecimal(dto.FPickedQty), PositionNo = dto.FPositionNO, SupplyOrganization = dto.FChildSupplyOrgId, IssuingOrganization = dto.FSupplyOrg, OwnerId = dto.FOwnerID, Mtono = dto.FMTONO, Lot = dto.FLot, DepotCode = dto.FStockID, IssueType = dto.FIssueType, Cab009 = dto.FUnitID, SupplyType = dto.FSupplyType, Cab012 = Convert.ToDecimal(dto.FStdQty), Freplacegroup = Convert.ToInt32(dto.FReplaceGroup), UseRate = Convert.ToDecimal(dto.FUseRate), MaterialType = dto.FMaterialType, Cab014 = dto.FIsKeyItem, Numerator = Convert.ToDecimal(dto.FNumerator), Denominator = Convert.ToDecimal(dto.FDenominator), Pid = Convert.ToDecimal(dto.PID), Eid = Convert.ToDecimal(dto.PID), SCRAPQTY = Convert.ToDecimal(dto.FFixScrapQty), SCRAPRATE = Convert.ToDecimal(dto.FScrapRate), Typeb = dto.TypeB, //WR_F_XIFG_Base_qtr = dto.F_XIFG_Base_qtr //WR_F_XIFG_Base_83g = dto.F_XIFG_Base_83g }; var entity = Db.Queryable() .Where(s => s.Erpid == womcab.Erpid).Single(); if (entity != null) womcab.Id = entity.Id; womcabList.Add(womcab); } return womcabList; } }