From f4078b75fe80f03e58af3217bf642d0de118d1c9 Mon Sep 17 00:00:00 2001
From: liuying <1427574514@qq.com>
Date: 周四, 09 5月 2024 13:01:19 +0800
Subject: [PATCH] 流程图

---
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs |  286 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 182 insertions(+), 104 deletions(-)

diff --git a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
index 83c63b7..16f4aee 100644
--- a/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
+++ b/iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
@@ -13,6 +13,7 @@
 using System.Web;
 using System.ComponentModel;
 using System.Data;
+using Microsoft.CodeAnalysis;
 namespace Admin.NET.Application
 {
     /// <summary>
@@ -28,14 +29,22 @@
         private readonly ISysExcelTemplateService _sysExcelTemplateService;
         private readonly static object _lock = new();
         private readonly IRepository<WmsMaterialCustomer, MasterDbContextLocator> _wmsMaterialCustomerRep;
+        private readonly IRepository<BaseCustomer, MasterDbContextLocator> _baseCustomerRep;
         private readonly IRepository<WmsSubstituteGood, MasterDbContextLocator> _wmsSubstituteGoodRep;
+        private readonly IRepository<WmsControlRuleDetail, MasterDbContextLocator> _wmsControlRuleDetailRep;
+        private readonly IRepository<WmsMaterialType, MasterDbContextLocator> _wmsMaterialTypeRep;
+        private readonly IRepository<WmsUnit, MasterDbContextLocator> _wmsUnitRep;
         public WmsMaterialService(
             IRepository<WmsMaterial,MasterDbContextLocator> wmsMaterialRep
             ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
             ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
             ,ISysExcelTemplateService sysExcelTemplateService
             , IRepository<WmsMaterialCustomer, MasterDbContextLocator> wmsMaterialCustomerRep
+            , IRepository<BaseCustomer, MasterDbContextLocator> baseCustomerRep
             , IRepository<WmsSubstituteGood, MasterDbContextLocator> wmsSubstituteGoodRep
+            , IRepository<WmsControlRuleDetail, MasterDbContextLocator> wmsControlRuleDetailRep
+            , IRepository<WmsMaterialType, MasterDbContextLocator> wmsMaterialTypeRep
+            , IRepository<WmsUnit, MasterDbContextLocator> wmsUnitRep
         )
         {
             _wmsMaterialRep = wmsMaterialRep;
@@ -43,7 +52,11 @@
          _sysDictDataRep = sysDictDataRep;
          _sysExcelTemplateService = sysExcelTemplateService;
             _wmsMaterialCustomerRep = wmsMaterialCustomerRep;
+            _baseCustomerRep = baseCustomerRep;
             _wmsSubstituteGoodRep = wmsSubstituteGoodRep;
+            _wmsControlRuleDetailRep = wmsControlRuleDetailRep;
+            _wmsMaterialTypeRep = wmsMaterialTypeRep;
+            _wmsUnitRep = wmsUnitRep;
         }
         /// <summary>
         /// 鍒嗛〉鏌ヨ鐗╂枡淇℃伅
@@ -156,9 +169,49 @@
         /// <param name="input"></param>
         /// <returns></returns>
         [HttpGet("WmsMaterial/detail")]
-        public async Task<WmsMaterialOutput> Get([FromQuery] QueryeWmsMaterialInput input)
+        public async Task<WmsMaterialInfoOutput> Get([FromQuery] QueryeWmsMaterialInput input)
         {
-            return (await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialOutput>();
+            WmsMaterialInfoOutput resultInfo = new WmsMaterialInfoOutput();
+            //鑾峰彇鐗╂枡淇℃伅
+            var wmsMaterialInfo =(await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsMaterialOutput>();
+            //鑾峰彇鏇挎崲鐗╂枡淇℃伅
+            var wmsSubstituteGoods = await _wmsSubstituteGoodRep.DetachedEntities
+                                         .Where(u => u.MaterialCode == wmsMaterialInfo.MaterialCode)
+                                         .Where(u => u.IsDeleted == false)
+                                         .Where(u => u.IsDisabled == false)
+                                         .OrderBy(o => o.CreatedTime)
+                                         .ProjectToType<WmsSubstituteGoodOutput>()
+                                         .ToListAsync();
+            //鑾峰彇鎺у埗灞炴�ц鍒�
+            var wmsControlRuleDetails = await _wmsControlRuleDetailRep.DetachedEntities
+                                              .Where(u => u.Id == wmsMaterialInfo.ControlRuleId)
+                                              .Where(u => u.IsDeleted == false)
+                                              .Where(u => u.IsDisabled == false)
+                                              .OrderBy(o=>o.CreatedTime)
+                                              .ProjectToType<WmsControlRuleDetailOutput>()
+                                              .ToListAsync();
+
+            //鐗╂枡瀹㈡埛鍏宠仈
+            var wmsMaterialCustomerList = await _wmsMaterialCustomerRep.DetachedEntities
+                                              .Where(u => u.MaterialId == wmsMaterialInfo.Id)
+                                              .Where(u => u.IsDeleted == false)
+                                              .OrderBy(o => o.CreatedTime)
+                                              .ProjectToType<WmsMaterialCustomerOutput>()
+                                              .ToListAsync();
+            List<long> custIds = wmsMaterialCustomerList.Select(s => s.CustId).ToList();
+            //鏍规嵁鐗╂枡瀹㈡埛鍏宠仈琛ㄨ幏鍙栧線鏉ヤ俊鎭�
+            var baseCustomers = await _baseCustomerRep.DetachedEntities
+                                      .Where(p => custIds.Contains(p.Id))
+                                      .OrderBy(o => o.CreatedTime)
+                                      .ProjectToType<BaseCustomerOutput>()
+                                      .ToListAsync();
+
+            
+            resultInfo.MaterialInfo = wmsMaterialInfo;
+            resultInfo.SubstituteGoodList = wmsSubstituteGoods;
+            resultInfo.ControlRuleDetailList = wmsControlRuleDetails;
+            resultInfo.BaseCustomerList = baseCustomers;
+            return resultInfo;
         }
 
         /// <summary>
@@ -190,36 +243,78 @@
             //鎺у埗瑙勫垯淇℃伅
             var controlRuleld = input.ControlRuleld;
             wmsMaterial.ControlRuleId = controlRuleld;
+            
+            //鑾峰彇鐗╂枡绫诲瀷
+            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType && u.IsDeleted == false)).Adapt<WmsMaterialTypeOutput>();
+            if(wmsMaterialType==null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}鐗╂枡绫诲瀷涓嶅瓨鍦�");
 
-            //瀹㈡埛妗f淇℃伅
-            var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
-            //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
-            var materialCustomerList=new List<WmsMaterialCustomer>();
-            foreach (var baseCustomer in baseCustomerList)
+            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
+            var materialCustomerList = new List<WmsMaterialCustomer>();
+            if (input.BaseCustomerList?.Count > 0)
             {
-                materialCustomerList.Add(new WmsMaterialCustomer()
+                //寰�鏉ュ崟浣�
+               var   wmsBaseCustomerList = await _baseCustomerRep.DetachedEntities.Where(u => input.BaseCustomerList.Contains(u.Id) && u.IsDeleted == false).ProjectToType<BaseCustomerOutput>().ToListAsync();
+                if (wmsBaseCustomerList?.Count() <= 0)
                 {
-                    CreatedTime = DateTime.Now,
-                    CreatedUserId = CurrentUserInfo.UserId,
-                    CreatedUserName = CurrentUserInfo.Name,
-                    CustChinaName = baseCustomer.CustChinaName,
-                    CustCode = baseCustomer.CustCode,
-                    CustEnglishName = baseCustomer.CustEnglishName,
-                    CustId = baseCustomer.Id,
-                    MaterialCode = wmsMaterial.MaterialCode,
-                    MaterialId = wmsMaterial.Id,
-                    MaterialName = wmsMaterial.MaterialName,
-                    UpdatedTime = DateTime.Now,
-                    UpdatedUserId = CurrentUserInfo.UserId,
-                    UpdatedUserName = CurrentUserInfo.Name
-                    
-                });
+                    throw Oops.Oh($"寰�鏉ュ崟浣嶄笉瀛樺湪");
+                }
+
+                //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
+                 materialCustomerList = new List<WmsMaterialCustomer>();
+                foreach (var baseCustomer in wmsBaseCustomerList)
+                {
+                    if (baseCustomer.IsDisabled == true)
+                    {
+                        throw Oops.Oh($"涓嶈兘浣跨敤宸茬鐢ㄧ殑寰�鏉ュ崟浣�");
+                    }
+                    materialCustomerList.Add(new WmsMaterialCustomer()
+                    {
+                        CreatedTime = DateTime.Now,
+                        CreatedUserId = CurrentUserInfo.UserId,
+                        CreatedUserName = CurrentUserInfo.Name,
+                        CustChinaName = baseCustomer.CustChinaName,
+                        CustCode = baseCustomer.CustCode,
+                        CustEnglishName = baseCustomer.CustEnglishName,
+                        CustId = baseCustomer.Id,
+                        MaterialCode = wmsMaterial.MaterialCode,
+                        MaterialId = wmsMaterial.Id,
+                        MaterialName = wmsMaterial.MaterialName,
+                        UpdatedTime = DateTime.Now,
+                        UpdatedUserId = CurrentUserInfo.UserId,
+                        UpdatedUserName = CurrentUserInfo.Name
+
+                    });
+                }
             }
+          
             //楠岃瘉
             await CheckExisit(wmsMaterial);
 
             //鏇夸唬鍝佷俊鎭�
             var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
+            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
+
+            if (materialCodes?.Count > 0)
+            {
+                var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
+                if (wmsSubstituteMaterialInfoList?.Count <= 0)
+                {
+                    throw Oops.Oh($"鏇夸唬鍝佺墿鏂欎笉瀛樺湪");
+                }
+
+                foreach (var item in substituteGoodList)
+                {
+                    if (item.IsDisabled == true)
+                    {
+                        throw Oops.Oh($"涓嶈兘浣跨敤宸茬鐢ㄧ殑鏇夸唬鍝佺墿鏂�");
+                    }
+
+                    var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode);
+                    item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.鏇夸唬鍝佺紪鍙�);
+                    item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//鏇夸唬鍝佺墿鏂欏悕绉�
+                }
+            }
+         
 
             wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
             wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
@@ -269,7 +364,11 @@
             //鎺у埗瑙勫垯淇℃伅
             var controlRuleld = input.ControlRuleld;
             wmsMaterial.ControlRuleId = controlRuleld;
+            //鑾峰彇鐗╂枡绫诲瀷
+            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType && u.IsDeleted == false)).Adapt<WmsMaterialTypeOutput>();
+            if (wmsMaterialType == null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}鐗╂枡绫诲瀷涓嶅瓨鍦�");
 
+            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
 
             //鍒犻櫎鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
             var oldaterialCustomerList = await _wmsMaterialCustomerRep.DetachedEntities.Where(w => w.MaterialId == wmsMaterial.Id).ToListAsync();
@@ -278,31 +377,44 @@
                 await _wmsMaterialCustomerRep.DeleteAsync(oldaterialCustomerList);
             }
 
-
-            //瀹㈡埛妗f淇℃伅
-            var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
-            //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
             var materialCustomerList = new List<WmsMaterialCustomer>();
-            foreach (var baseCustomer in baseCustomerList)
+            if (input.BaseCustomerList?.Count > 0)
             {
-                materialCustomerList.Add(new WmsMaterialCustomer()
+                //寰�鏉ュ崟浣�
+                var wmsBaseCustomerList = await _baseCustomerRep.DetachedEntities.Where(u => input.BaseCustomerList.Contains(u.Id) && u.IsDeleted == false).ProjectToType<BaseCustomerOutput>().ToListAsync();
+                if (wmsBaseCustomerList?.Count() <= 0)
                 {
-                    CreatedTime = DateTime.Now,
-                    CreatedUserId = CurrentUserInfo.UserId,
-                    CreatedUserName = CurrentUserInfo.Name,
-                    CustChinaName = baseCustomer.CustChinaName,
-                    CustCode = baseCustomer.CustCode,
-                    CustEnglishName = baseCustomer.CustEnglishName,
-                    CustId = baseCustomer.Id,
-                    MaterialCode = wmsMaterial.MaterialCode,
-                    MaterialId = wmsMaterial.Id,
-                    MaterialName = wmsMaterial.MaterialName,
-                    UpdatedTime = DateTime.Now,
-                    UpdatedUserId = CurrentUserInfo.UserId,
-                    UpdatedUserName = CurrentUserInfo.Name
+                    throw Oops.Oh($"寰�鏉ュ崟浣嶄笉瀛樺湪");
+                }
 
-                });
+                //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
+                 materialCustomerList = new List<WmsMaterialCustomer>();
+                foreach (var baseCustomer in wmsBaseCustomerList)
+                {
+                    if (baseCustomer.IsDisabled == true)
+                    {
+                        throw Oops.Oh($"涓嶈兘浣跨敤宸茬鐢ㄧ殑寰�鏉ュ崟浣�");
+                    }
+                    materialCustomerList.Add(new WmsMaterialCustomer()
+                    {
+                        CreatedTime = DateTime.Now,
+                        CreatedUserId = CurrentUserInfo.UserId,
+                        CreatedUserName = CurrentUserInfo.Name,
+                        CustChinaName = baseCustomer.CustChinaName,
+                        CustCode = baseCustomer.CustCode,
+                        CustEnglishName = baseCustomer.CustEnglishName,
+                        CustId = baseCustomer.Id,
+                        MaterialCode = wmsMaterial.MaterialCode,
+                        MaterialId = wmsMaterial.Id,
+                        MaterialName = wmsMaterial.MaterialName,
+                        UpdatedTime = DateTime.Now,
+                        UpdatedUserId = CurrentUserInfo.UserId,
+                        UpdatedUserName = CurrentUserInfo.Name
+
+                    });
+                }
             }
+            
 
             //鍒犻櫎鏇夸唬鍝佷俊鎭�
             var oldSubstituteGoodList = await _wmsSubstituteGoodRep.DetachedEntities.Where(w => w.MaterialCode == wmsMaterial.MaterialCode).ToListAsync();
@@ -314,7 +426,28 @@
 
             //鏇夸唬鍝佷俊鎭�
             var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
+            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
 
+            if(materialCodes?.Count > 0)
+            {
+                var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
+                if (wmsSubstituteMaterialInfoList?.Count <= 0)
+                {
+                    throw Oops.Oh($"鏇夸唬鍝佺墿鏂欎笉瀛樺湪");
+                }
+                foreach (var item in substituteGoodList)
+                {
+                    if (item.IsDisabled == true)
+                    {
+                        throw Oops.Oh($"涓嶈兘浣跨敤宸茬鐢ㄧ殑鏇夸唬鍝佺墿鏂�");
+                    }
+                    var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode);
+                    item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.鏇夸唬鍝佺紪鍙�);
+                    item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//鏇夸唬鍝佺墿鏂欏悕绉�
+                }
+            }
+          
+           
             if (materialCustomerList?.Count > 0)
             {
                 await _wmsMaterialCustomerRep.InsertAsync(materialCustomerList);
@@ -389,11 +522,8 @@
                 var _MaterialName = "";//鐗╂枡鍚嶇О
                 var _MaterialCode = "";//鐗╂枡缂栧彿
                 var _ErpCode = "";//ERP缂栧彿
-                var _MaterialTypeName = "";//鐗╂枡绫诲瀷鍚嶇О
-                var _MaterialTypeDescr = "";//鐗╂枡绫诲瀷鎻忚堪
                 var _MaterialType = "";//鐗╂枡绫诲瀷
                 var _MaterialGroup = "";//鐗╂枡缁�
-                var _ABCClassName = "";//ABC鍒嗙被鍚嶇О
                 var _ABCClass = "";//ABC鍒嗙被
                 var _MaterialSpec = "";//鐗╂枡瑙勬牸
                 var _InPlaceCode = "";//榛樿鍏ュ簱搴撲綅
@@ -415,11 +545,8 @@
                 _MaterialName = row["鐗╂枡鍚嶇О"]?.ToString();
                 _MaterialCode = row["鐗╂枡缂栧彿"]?.ToString();
                 _ErpCode = row["ERP缂栧彿"]?.ToString();
-                _MaterialTypeName = row["鐗╂枡绫诲瀷鍚嶇О"]?.ToString();
-                _MaterialTypeDescr = row["鐗╂枡绫诲瀷鎻忚堪"]?.ToString();
                 _MaterialType = row["鐗╂枡绫诲瀷"]?.ToString();
                 _MaterialGroup = row["鐗╂枡缁�"]?.ToString();
-                _ABCClassName = row["ABC鍒嗙被鍚嶇О"]?.ToString();
                 _ABCClass = row["ABC鍒嗙被"]?.ToString();
                 _MaterialSpec = row["鐗╂枡瑙勬牸"]?.ToString();
                 _InPlaceCode = row["榛樿鍏ュ簱搴撲綅"]?.ToString();
@@ -462,14 +589,7 @@
                 {
                     addItem.ErpCode = (string)_ErpCode;
                 }
-                if (!string.IsNullOrEmpty(_MaterialTypeName))
-                {
-                    addItem.MaterialTypeName = (string)_MaterialTypeName;
-                }
-                if (!string.IsNullOrEmpty(_MaterialTypeDescr))
-                {
-                    addItem.MaterialTypeDescr = (string)_MaterialTypeDescr;
-                }
+              
 
                 if (string.IsNullOrEmpty(_MaterialType))
                 {
@@ -478,26 +598,15 @@
 
                 if (!string.IsNullOrEmpty(_MaterialType))
                 {
-                    System.Int32 enumMaterialType = default(System.Int32);
-
-                    if (!Enum.TryParse<System.Int32>(_MaterialType, out enumMaterialType) && !string.IsNullOrEmpty(_MaterialType))
-                    {
-                        throw Oops.Oh($"绗瑊index}琛孾鐗╂枡绫诲瀷]{_MaterialType}鍊间笉姝g‘锛�");
-                    }
-                    else
-                    {
-                        addItem.MaterialType = enumMaterialType;
-                    }
-
+                    //TODO  鏍规嵁鐗╂枡绫诲瀷ID鑾峰彇鐗╂枡绫诲瀷
+                    addItem.MaterialType = 0;
+                    addItem.MaterialTypeName = "";
                 }
                 if (!string.IsNullOrEmpty(_MaterialGroup))
                 {
                     addItem.MaterialGroup = (string)_MaterialGroup;
                 }
-                if (!string.IsNullOrEmpty(_ABCClassName))
-                {
-                    addItem.ABCClassName = (string)_ABCClassName;
-                }
+              
                 if (!string.IsNullOrEmpty(_ABCClass))
                 {
                     Admin.NET.Core.ABCClassEnum enumABCClass = default(Admin.NET.Core.ABCClassEnum);
@@ -567,38 +676,7 @@
                     }
 
                 }
-                if (!string.IsNullOrEmpty(_BatchRuleId))
-                {
-                    if (!long.TryParse(_BatchRuleId, out long outBatchRuleId) && !string.IsNullOrEmpty(_BatchRuleId))
-                    {
-                        throw Oops.Oh($"绗瑊index}琛孾鎵规灞炴�ц鍒橾{_BatchRuleId}鍊间笉姝g‘锛�");
-                    }
-                    if (outBatchRuleId <= 0 && !string.IsNullOrEmpty(_BatchRuleId))
-                    {
-                        throw Oops.Oh($"绗瑊index}琛孾鎵规灞炴�ц鍒橾{_BatchRuleId}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
-                    }
-                    else
-                    {
-                        addItem.BatchRuleId = outBatchRuleId;
-                    }
-
-                }
-                if (!string.IsNullOrEmpty(_ControlRuleId))
-                {
-                    if (!long.TryParse(_ControlRuleId, out long outControlRuleId) && !string.IsNullOrEmpty(_ControlRuleId))
-                    {
-                        throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橾{_ControlRuleId}鍊间笉姝g‘锛�");
-                    }
-                    if (outControlRuleId <= 0 && !string.IsNullOrEmpty(_ControlRuleId))
-                    {
-                        throw Oops.Oh($"绗瑊index}琛孾鎺у埗灞炴�ц鍒橾{_ControlRuleId}鍊间笉鑳藉皬浜庣瓑浜�0锛�");
-                    }
-                    else
-                    {
-                        addItem.ControlRuleId = outControlRuleId;
-                    }
-
-                }
+             
                 if (!string.IsNullOrEmpty(_IsDisabled))
                 {
                     if (!_IsDisabled.Equals("鏄�") && !_IsDisabled.Equals("鍚�"))

--
Gitblit v1.9.3