using System.Data; using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; using DbType = System.Data.DbType; 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) db.Deleteable() .Where(s => s.Eid == mesWomcaa.Erpid).ExecuteCommand(); //var orUpdate = base.Insert(mesWomcaa); //var baOrUpdate = _womcabManager.InsertRange(mesWomcabs); //单条插入忽略空字段 var orUpdate = db.Insertable(mesWomcaa) .IgnoreColumns(true).ExecuteCommand() > 0; //批量插入数据库时忽略空字段 var baOrUpdate = db.Insertable(mesWomcabs).PageSize(1) .IgnoreColumnsNull() .ExecuteCommand() > 0; // 定义输入参数 var inputParam = mesWomcaa.Erpid; // // 2024-12-09定义输出参数 var outputResult = new SugarParameter("p_flag", null, DbType.Int32, ParameterDirection.Output, 4000); var outputMessage = new SugarParameter("p_text", null, DbType.String, ParameterDirection.Output, 4000); // // 2024-12-09定义输入参数 var parameters = new List { new("P_ID", inputParam, DbType.String, ParameterDirection.Input), outputResult, outputMessage }; // 使用 SqlSugar 执行存储过程 Db.Ado.ExecuteCommand("BEGIN PRC_UPDATE_DAA1(:P_ID,:p_flag,:p_text); END;", // new SugarParameter("P_ID", inputParam, DbType.Decimal) parameters.ToArray()); // 2024-12-09获取输出参数的值 var resultValue = outputResult.Value?.ToString(); var messageValue = outputMessage.Value?.ToString(); // 2024-12-09 Console.WriteLine(messageValue); if ("1".Equals(resultValue)) throw new Exception(messageValue); if (orUpdate && baOrUpdate) return true; throw new NotImplementedException("插入或更新失败"); } private bool UpdateData(SqlSugarScope db, Womcaa mesWomcaa, List mesWomcabs) { var decimals = mesWomcabs.Select(s => s.Id).Distinct().ToArray(); var update = false; if (mesWomcaa.Id != null) { update = base.DeleteById(mesWomcaa.Id); } var array = decimals.Where(s => s.HasValue).Select(s => s.Value).ToArray(); var insertOrUpdate = false; if (array.Length > 0) { 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.ToDecimal(dto.Id), /// ERPID Caa001 = dto.FBillNo, /// 单号 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, /// 生成方式 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, /// 备注 Caa018 = !string.IsNullOrEmpty(dto.PLAN_ID) ? Convert.ToDecimal(dto.PLAN_ID) : null, /// ERP源单ID Caa019 = !string.IsNullOrEmpty(dto.PLAN_SEQ) ? Convert.ToDecimal(dto.PLAN_SEQ) : null, /// ERP源单行号 Caa020 = dto.PLAN_NUM, /// ERP源单单号(任务单号) Caa015 = dto.F_UNW_Text_xsddh, /// 销售订单号 Caa024 = !string.IsNullOrEmpty(dto.Caa024) ? Convert.ToDecimal(dto.Caa024) : null, //已入库数量 EerSczz = dto.erP_SCZZ, /// 生产组织ID EerWtzz = dto.erP_WTZZ, /// 委托组织ID Caa015Head = dto.F_XIFG_Integer_tzk, /// 销售订单行号 MainProductNo = dto.F_XIFG_Base_w5c, /// 主产品编码 MainProductQty = dto.F_XIFG_Qty_yrr, /// 主产品生产数量 CustomerItemNumber = dto.F_XIFG_Text_fg2, /// 客户货号 PackingListNumber = dto.F_XIFG_Text_yrr, /// 包装单号 CustomerName = dto.F_XIFG_Text_qtr1, /// 客户名称 Customer = dto.F_XIFG_Base_83g1, /// 客户 Yjwg = dto.FPlanFinishDate, /// 预计完工时间备份 //Caa024 = !string.IsNullOrEmpty(dto.FStockInQuaAuxQty) //? Convert.ToDecimal(dto.FStockInQuaAuxQty) // : null,//合格品入库数量 ErpUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), //当前时间 FbillNo = dto.F_XIFG_Text_zzjxqd //组织间需求单 }; 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.FENTRYID), /// ERPID Cab001 = dto.FBillNo, /// 工单单号 Cab002 = dto.FSeq, /// 序号 Cab003 = dto.FMaterialID, /// 材料编码 /*Cab006 = !string.IsNullOrEmpty(dto.FNeedQty) ? Convert.ToDecimal(dto.FNeedQty) : null, /// 需领用量*/ /*Cab007 = !string.IsNullOrEmpty(dto.FPickedQty) ? Convert.ToDecimal(dto.FPickedQty) : null, /// 已领用量 */ /* Cab012 = !string.IsNullOrEmpty(dto.FStdQty) ? Convert.ToDecimal(dto.FStdQty) : null, /// 组成用量 */ //Cab009 = dto.FUnitID,/// 单位 //2024-11-15 14:05 用料清单克转千克 Cab006 = !string.IsNullOrEmpty(dto.FNeedQty) && int.TryParse(dto.FUnitID, out int unitId) ? (unitId == 10097 ? Convert.ToDecimal(dto.FNeedQty) / 1000 : Convert.ToDecimal(dto.FNeedQty)) : (decimal?)null, Cab007 = !string.IsNullOrEmpty(dto.FPickedQty) && int.TryParse(dto.FUnitID, out int pickedQty) ? (pickedQty == 10097 ? Convert.ToDecimal(dto.FPickedQty) / 1000 : Convert.ToDecimal(dto.FPickedQty)) : (decimal?)null, Cab009 = int.TryParse(dto.FUnitID, out int unitId1) ? (unitId1 == 10097 ? (10095).ToString() : (Convert.ToDecimal(dto.FUnitID)).ToString()) : null, Cab012 = !string.IsNullOrEmpty(dto.FStdQty) && int.TryParse(dto.FUnitID, out int fStdQty) ? (fStdQty == 10097 ? Convert.ToDecimal(dto.FStdQty) / 1000 : Convert.ToDecimal(dto.FStdQty)) : (decimal?)null, PositionNo = dto.FPositionNO, /// 位置号 SupplyOrganization = dto.FChildSupplyOrgId, /// 供应组织 IssuingOrganization = dto.FSUPPLYORG, /// 发料组织 OwnerId = dto.FOwnerID, /// 货主 Mtono = dto.FMTONO, /// 计划跟踪号 Lot = dto.FLot, /// 批号 DepotCode = dto.FStockID, /// 仓库 IssueType = dto.FIssueType, /// 发料方式 Cab008 = dto.F_UNW_Text_tpgy, /// 工艺 SupplyType = dto.FSupplyType, /// 供应类型(C采购 Z自制 W委外) Cab014 = dto.FIsKeyItem, /// 是否替料 Numerator = dto.FNumerator, /// 分子 Denominator = dto.FDenominator, /// 分母 Eid = Convert.ToDecimal(dto.FID), /// ERP头ID Scrapqty = dto.FFixScrapQty, /// 固定损耗 Scraprate = dto.FScrapRate, /// 变动损耗率 Fsaleorderno = dto.FSALEORDERNO, /// 销售订单 CustomerItemNumber = dto.F_XIFG_Text_re5, /// 客户货号 PackingListNumber = dto.F_XIFG_Text_apv, /// 包装单号 MainProduct = dto.F_XIFG_Base_re5, /// 主产品 MainProductQty = Convert.ToDecimal(dto.F_XIFG_Qty_apv), /// 主产品数量 ParentItemName = dto.F_XIFG_Base_apv, /// 父项物料名称 Cab020 = !string.IsNullOrEmpty(dto.FACTUALPICKOTY) ? Convert.ToDecimal(dto.FACTUALPICKOTY) : null, //实领数量 }; var entity = Db.Queryable() .Where(s => s.Erpid == womcab.Erpid).Single(); if (entity != null) womcab.Id = entity.Id; womcabList.Add(womcab); } return womcabList; } }