啊鑫
2025-07-07 79e43ccffd15afcd99934ee43b706f6133398079
MES.Service/service/BOM/MesBomMasterManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,307 @@
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<MesBomMaster>
{
        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<MesBomDetail1> mesMesBomDatas1, List<MesBomDetail2> mesMesBomDatas2)
        {
            //删除相同ERPID相同BOM更新类型的单据
            var query = db.Queryable<MesBomMaster>()
              .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<MesBomDetail1>()
                   .Where(s => s.Mid == ID)
                   .ExecuteCommand() > 0;
                var insertOrUpdate2 = true;
                if (mesMesBomDatas2.Count > 0)
                {
                    insertOrUpdate2 = db.Deleteable<MesBomDetail2>()
                   .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<MesBomDetail1> mesMesBomDatas1, List<MesBomDetail2> mesMesBomDatas2, string type)
        {
            //相同ERPID不同BOM更新类型的单据保留
            var query = db.Queryable<MesBomMaster>()
              .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<MesBomMaster>()
                      .Where(s => s.Id == ID)
                      .ExecuteCommand();
                if (mesMesBomDatas1.Count > 0)
                    db.Deleteable<MesBomDetail1>()
                        .Where(s => s.Mid == ID).ExecuteCommand();
                if (mesMesBomDatas2.Count > 0)
                    db.Deleteable<MesBomDetail2>()
                        .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<MesBomDto> 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<MesBomDetail1> ConvertErpToMesBomDetail1(
            MesBomDto erpDtoList)
        {
            var MesBomOrderSubList =
                new List<MesBomDetail1>();
            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<MesBomDetail2> ConvertErpToMesBomDetail2(
            MesBomDto erpDtoList)
        {
            var MesBomOrderSubList =
                new List<MesBomDetail2>();
            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;
        }
    }
}