From 79e43ccffd15afcd99934ee43b706f6133398079 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期一, 07 七月 2025 15:29:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 MES.Service/service/BOM/MesBomMasterManager.cs |  307 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 307 insertions(+), 0 deletions(-)

diff --git a/MES.Service/service/BOM/MesBomMasterManager.cs b/MES.Service/service/BOM/MesBomMasterManager.cs
new file mode 100644
index 0000000..cfa4cea
--- /dev/null
+++ b/MES.Service/service/BOM/MesBomMasterManager.cs
@@ -0,0 +1,307 @@
+锘縰sing 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;
+        }
+    }
+
+
+
+}
\ No newline at end of file

--
Gitblit v1.9.3