using SqlSugar; using System; using System.Collections.Generic; using MES.Service.DB; using MES.Service.Modes; using MES.Service.Dto.service; using System.Globalization; namespace MES.Service.service { public class MesBomMasterManager : Repository { private readonly MesBomDetail1Manager MesBomDetail1Manager = new(); private readonly MesBomDetail2Manager MesBomDetail2Manager = new(); public bool Save(MesBomDto MesBom) { // var MesBomDto = MesBom.Main; var mesMesBom = ConvertErpToMesBom(MesBom); var mesMesBomDatas1 = ConvertErpToMesBomDetail1(MesBom); var mesMesBomDatas2 = ConvertErpToMesBomDetail2(MesBom); return UseTransaction(db => { switch (MesBom.Type) { // case "2": // return InsertData(db, mesSalesReturn, mesSalesReturnDatas, // rohInErpRohIn.FBILLTYPE) // ? 1 // : 0; case "3": return UpdateData(db, mesMesBom, mesMesBomDatas1, mesMesBomDatas2) ? 1 : 0; case "2": case "4": return SaveOrUpdateData(db, mesMesBom, mesMesBomDatas1, mesMesBomDatas2, MesBom.Type) ? 1 : 0; default: throw new NotImplementedException( $"type没有{MesBom.Type}这个类型"); } }) > 0; } private bool UpdateData(SqlSugarScope db, MesBomMaster mesMesBom, List mesMesBomDatas1, List mesMesBomDatas2) { //删除相同ERPID相同BOM更新类型的单据 var query = db.Queryable() .Where(s => s.Erpid == mesMesBom.Erpid); if (mesMesBom.BomUpdateType != "1") { if (string.IsNullOrEmpty(mesMesBom.BomUpdateType)) { query = query.Where(s => string.IsNullOrEmpty(s.BomUpdateType)); } else { query = query.Where(s => s.BomUpdateType == mesMesBom.BomUpdateType); } decimal? ID = query.Select(s => s.Id).First(); var update = base.DeleteById(ID); var insertOrUpdate1 = db.Deleteable() .Where(s => s.Mid == ID) .ExecuteCommand() > 0; var insertOrUpdate2 = true; if (mesMesBomDatas2.Count > 0) { insertOrUpdate2 = db.Deleteable() .Where(s => s.Mid == ID) .ExecuteCommand() > 0; ; // deleted 为 true 表示有记录被删除 } if (update && insertOrUpdate1 && insertOrUpdate2) return true; throw new NotImplementedException("更新失败"); } return true; } // 插入或更新数据的方法 private bool SaveOrUpdateData(SqlSugarScope db, MesBomMaster mesMesBom, List mesMesBomDatas1, List mesMesBomDatas2, string type) { //相同ERPID不同BOM更新类型的单据保留 var query = db.Queryable() .Where(s => s.Erpid == mesMesBom.Erpid); if (string.IsNullOrEmpty(mesMesBom.BomUpdateType)) { query = query.Where(s => string.IsNullOrEmpty(s.BomUpdateType)); } else { query = query.Where(s => s.BomUpdateType == mesMesBom.BomUpdateType); } decimal? ID = query.Select(s => s.Id).First(); if (ID != null) { if (mesMesBom.Erpid != null) db.Deleteable() .Where(s => s.Id == ID) .ExecuteCommand(); if (mesMesBomDatas1.Count > 0) db.Deleteable() .Where(s => s.Mid == ID).ExecuteCommand(); if (mesMesBomDatas2.Count > 0) db.Deleteable() .Where(s => s.Mid == ID).ExecuteCommand(); } //var orUpdate = base.Insert(mesMesBom); //var baOrUpdate = MesBomDetail1Manager.InsertRange(mesMesBomDatas1); //if (orUpdate && baOrUpdate) return true; var update_res = UseTransaction(db => { //获取主表插入后的主键 var insertedId = db.Insertable(mesMesBom).ExecuteReturnIdentity(); for (int i = 0; i < mesMesBomDatas1.Count; i++) { var item = mesMesBomDatas1[i]; item.Mid = insertedId; db.Insertable(item).IgnoreColumns(true).ExecuteCommand(); } for (int i = 0; i < mesMesBomDatas2.Count; i++) { var item = mesMesBomDatas2[i]; item.Mid = insertedId; db.Insertable(item).IgnoreColumns(true).ExecuteCommand(); } return 1; }); if (update_res == 1) return true; throw new NotImplementedException("插入或更新失败"); } // 批量保存记录的方法 public bool SaveList(List MesBomOrder) { var result = MesBomOrder.Select(Save).ToList(); return result.All(b => b); } private MesBomMaster ConvertErpToMesBom( MesBomDto erpDto) { DateTime parsedDate; var main = erpDto.Main; var MesBomOrder = new MesBomMaster { Erpid = main.Erpid, Fbilltype = main.Fbilltype, Fbomcategory = main.Fbomcategory, Fbomuse = main.Fbomuse, Fgroup = main.Fgroup, Fnumber = main.Fnumber, FUnwBomBb = main.FUnwBomBb, EffectiveDate = main.EffectiveDate, ExpirationDate = main.ExpirationDate, Fmaterialid = main.Fmaterialid, Fitemname = main.Fitemname, Fbaseunitid = main.Fbaseunitid, Fcreatorid = main.Fcreatorid, Fcreatedate = main.Fcreatedate, Fitempproperty = main.Fitempproperty, Fdescription = main.Fdescription, Fmodifierid = main.Fmodifierid, Fmodifydate = main.Fmodifydate, Fapproverid = main.Fapproverid, Fapprovedate = main.Fapprovedate, Fforbidreson = main.Fforbidreson, Fforbidstatus = main.Fforbidstatus, Fforbidderid = main.Fforbidderid, Fforbiddate = main.Fforbiddate, CreateOrganization = main.CreateOrganization, UsingOrganization = main.UsingOrganization, Routing = main.Routing, FUnwTextTpgy = main.FUnwTextTpgy, BomUpdateType = main.BomUpdateType }; // var single = base.GetSingle(it => it.Erpid == main.Erpid); // if (single != null) MesBomOrder.Erpid = single.Erpid; return MesBomOrder; } private List ConvertErpToMesBomDetail1( MesBomDto erpDtoList) { var MesBomOrderSubList = new List(); foreach (var erpDto in erpDtoList.DT1) { var MesBomOrderSub = new MesBomDetail1 { Erpid = erpDto.Erpid, Erphid = erpDto.Erphid, Freplacegroup = erpDto.Freplacegroup, Fscraprate = erpDto.Fscraprate, Fpositionno = erpDto.Fpositionno, Fmaterialidchild = erpDto.Fmaterialidchild, Fnumerator = erpDto.Fnumerator, Fdenominator = erpDto.Fdenominator, Fchilditemname = erpDto.Fchilditemname, Fchilditemproperty = erpDto.Fchilditemproperty, Fsupplytype = erpDto.Fsupplytype, Fmaterialtype = erpDto.Fmaterialtype, FUnwBzds1 = erpDto.FUnwBzds1, Fchildunitid = erpDto.Fchildunitid, Fdosagetype = erpDto.Fdosagetype, Fbomid = erpDto.Fbomid, Fmemo = erpDto.Fmemo, Fstockid = erpDto.Fstockid, Fisskip = erpDto.Fisskip, Fismulcsd = erpDto.Fismulcsd, Feffectdate = erpDto.Feffectdate, Fexpiredate = erpDto.Fexpiredate, Fissuetype = erpDto.Fissuetype, Fnetdemandrate = erpDto.Fnetdemandrate, FUnwTextTpgyZ = erpDto.FUnwTextTpgyZ, Fbackflushtype = erpDto.Fbackflushtype, Fovercontrolmode = erpDto.Fovercontrolmode, Fbpminissueqty = erpDto.Fbpminissueqty, Fisminissueqty = erpDto.Fisminissueqty, Fisgetscrap = erpDto.Fisgetscrap, Foptqueue = erpDto.Foptqueue, Foperid = erpDto.Foperid, Fprocessid = erpDto.Fprocessid, FUnwJjds1 = erpDto.FUnwJjds1 }; /*var single = MesBomDetail1Manager.GetSingle(it => it.Erpid == MesBomOrderSub.Erpid); if (single != null) MesBomOrderSub.Erpid = single.Erpid;*/ MesBomOrderSubList.Add(MesBomOrderSub); } return MesBomOrderSubList; } private List ConvertErpToMesBomDetail2( MesBomDto erpDtoList) { var MesBomOrderSubList = new List(); foreach (var erpDto in erpDtoList.DT2) { var MesBomOrderSub = new MesBomDetail2 { Erpid = erpDto.Erpid, Erphid = erpDto.Erphid, Fstartqty = erpDto.Fstartqty, Fendqty = erpDto.Fendqty, Funitidlot = erpDto.Funitidlot, Ffixscrapqtylot = erpDto.Ffixscrapqtylot, Fscrapratelot = erpDto.Fscrapratelot, Fnumeratorlot = erpDto.Fnumeratorlot, Fdenominatorlot = erpDto.Fdenominatorlot, Fmaterialidlotbased = erpDto.Fmaterialidlotbased, LineNumber = erpDto.LineNumber }; /*var single = MesBomDetail2Manager.GetSingle(it => it.Erpid == MesBomOrderSub.Erpid); if (single != null) MesBomOrderSub.Erpid = single.Erpid;*/ MesBomOrderSubList.Add(MesBomOrderSub); } return MesBomOrderSubList; } } }