using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using MES.Service.util; 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, wom.ErpCabs[0].FBillNo); 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 (StringUtil.CheckGuid(mesWomcaa.Guid)) base.DeleteById(mesWomcaa.Guid); if (mesWomcabs.Count > 0) db.Deleteable() .Where(s => s.Pid == 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) { var decimals = mesWomcabs.Select(s => s.Guid).ToArray(); var update = base.DeleteById(mesWomcaa.Guid); var insertOrUpdate = db .Deleteable().In(decimals) .ExecuteCommand() > 0; if (update && insertOrUpdate) return true; throw new NotImplementedException("更新失败"); } private Womcaa MapErpCAAtoWomcaa(ErpCAA dto,string PPBOMNO) { var entity = new Womcaa { Erpid = Convert.ToInt32(dto.Id), /// ERPID Caa001 = PPBOMNO, /// 单号 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 = DateTime.TryParse(dto.FConveyDate, out var conveyDate) ? (conveyDate <= new DateTime(1900, 1, 1) ? null : conveyDate.ToString()) : null, /// 开单日期 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.ToInt32(dto.PLAN_ID) : null, /// ERP源单ID Caa019 = !string.IsNullOrEmpty(dto.PLAN_SEQ) ? Convert.ToInt32(dto.PLAN_SEQ) : null, /// ERP源单行号 Caa020 = dto.PLAN_NUM, /// ERP源单单号(任务单号) //Caa015 = dto.F_UNW_Text_xsddh, /// 销售订单号 ErpSczz = Convert.ToInt32(dto.FPrdOrgId), /// 生产组织ID ErpWtzz = Convert.ToInt32(dto.FEnTrustOrgId), /// 委托组织ID Btbz = dto.Btbz, /// 委托组织ID //Caa015Head = dto.F_XIFG_Integer_tzk, /// 销售订单行号 //MainProductNo = dto.F_XIFG_Base_w5c, /// 主产品编码 // MainProductQty = // Convert.ToInt32(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, /// 客户 Caa0111 = dto.FPlanFinishDate, /// 预计完工时间备份 Typea = dto.TypeA, /// 预计完工时间备份 //Typeb = dto.TypeB /// 预计完工时间备份 SynchronousDate = DateTime.Now }; var single = base.GetSingle(it => it.Erpid == entity.Erpid); if (single != null) entity.Guid = single.Guid; return entity; } private List MapErpCABtoWomcab(List dtoList) { var womcabList = new List(); foreach (var dto in dtoList) { var womcab = new Womcab { Erpid = Convert.ToInt32(dto.Id), /// ERPID Cab001 = dto.FBillNo, /// 工单单号 Cab002 = Convert.ToInt32(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, /// 已领用量 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, /// 工艺 Cab009 = dto.FUnitID, /// 单位 SupplyType = dto.FSupplyType, /// 供应类型(C采购 Z自制 W委外) Cab012 = !string.IsNullOrEmpty(dto.FStdQty) ? Convert.ToDecimal(dto.FStdQty) : null, /// 组成用量 Cab014 = dto.FIsKeyItem, /// 是否替料 Numerator = dto.FNumerator, /// 分子 Denominator = dto.FDenominator, /// 分母 Pid = Convert.ToInt32(dto.PID), /// ERP头ID Eid = Convert.ToInt32(dto.Id), /// ERP ID Scrapqty = dto.FFixScrapQty, /// 固定损耗 Scraprate = dto.FScrapRate, /// 变动损耗率 Freplacegroup = Convert.ToInt32(dto.FReplaceGroup), UseRate = Convert.ToDecimal(dto.FUseRate), MaterialType = dto.FMaterialType, MustQty = Convert.ToDecimal(dto.FMustQty), Typeb = dto.TypeB // Fsaleorderno = dto.FSALEORDERNO, /// 销售订单 // // CustomerItemNumber = dto.F_XIFG_Text_re5, /// 客户货号 // PackingListNumber = dto.F_XIFG_Text_apv, /// 包装单号 // MainProduct = dto.F_XIFG_Base_re5, /// 主产品 // MainProductQty = // Convert.ToInt32(dto.F_XIFG_Qty_apv), /// 主产品数量 // ParentItemName = dto.F_XIFG_Base_apv /// 父项物料名称 }; var entity = Db.Queryable() .Where(s => s.Eid == womcab.Eid).Single(); if (entity != null) womcab.Guid = entity.Guid; womcabList.Add(womcab); } return womcabList; } }