From b57f4eca1133a7ecad85abf3cff87fe88c366ec2 Mon Sep 17 00:00:00 2001
From: payne <bzrlw2012@163.com>
Date: 周四, 25 4月 2024 16:10:54 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/iWare_RawMaterialWarehouse

---
 iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs |  261 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 187 insertions(+), 74 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 db9d7b2..2f34e10 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,39 @@
         /// <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 baseCustomers = await _baseCustomerRep.DetachedEntities.Join(_wmsMaterialCustomerRep.DetachedEntities, bc => bc.Id, mc => mc.CustId, (bc, mc) => new { bc, mc })
+                                      .Where(p =>p.mc.MaterialId== wmsMaterialInfo.Id)
+                                      .OrderBy(o => o.mc.CreatedTime)
+                                      .ProjectToType<BaseCustomerOutput>()
+                                      .ToListAsync();
+
+            resultInfo.MaterialInfo = wmsMaterialInfo;
+            resultInfo.SubstituteGoodList = wmsSubstituteGoods;
+            resultInfo.ControlRuleDetailList = wmsControlRuleDetails;
+            return resultInfo;
         }
 
         /// <summary>
@@ -190,8 +233,14 @@
             //鎺у埗瑙勫垯淇℃伅
             var controlRuleld = input.ControlRuleld;
             wmsMaterial.ControlRuleId = controlRuleld;
+            
+            //鑾峰彇鐗╂枡绫诲瀷
+            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>();
+            if(wmsMaterialType==null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}鐗╂枡绫诲瀷涓嶅瓨鍦�");
 
-            //瀹㈡埛妗f淇℃伅
+            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;  
+
+            //寰�鏉ュ叧绯讳俊鎭�
             var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
             //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
             var materialCustomerList=new List<WmsMaterialCustomer>();
@@ -220,10 +269,18 @@
 
             //鏇夸唬鍝佷俊鎭�
             var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
+            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
+            var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode)&&u.IsDeleted==false&&u.IsDisabled==false).ProjectToType<WmsMaterialOutput>().ToListAsync();
+            foreach (var item in substituteGoodList)
+            {
+                var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f=>f.MaterialCode== item.SubstituteMaterialCode);
+                item.SubstituteCode =  await SerialUtil.GetSerial(EnumSerialType.鏇夸唬鍝佺紪鍙�); 
+                item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//鏇夸唬鍝佺墿鏂欏悕绉�
+            }
 
-            wmsMaterial.CreatedUserId = wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
-            wmsMaterial.CreatedUserName = wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
-            wmsMaterial.CreatedTime = wmsMaterial.UpdatedTime = SysHelper.GetNowTime();
+            wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
+            wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
+            wmsMaterial.UpdatedTime = SysHelper.GetNowTime();
 
 
             await _wmsMaterialRep.InsertAsync(wmsMaterial);
@@ -256,19 +313,93 @@
         /// <param name="input"></param>
         /// <returns></returns>
         [HttpPost("WmsMaterial/edit")]
-        public async Task Update(UpdateWmsMaterialInput input)
+        [UnitOfWork]
+        public async Task Update(UpdateWmsMaterialInfoInput input)
         {
-            var isExist = await _wmsMaterialRep.AnyAsync(u => u.Id == input.Id, false);
+            //鐗╂枡淇℃伅
+            var wmsMaterial = input.MaterialInput.Adapt<WmsMaterial>();
+            var isExist = await _wmsMaterialRep.AnyAsync(u => u.Id == wmsMaterial.Id, false);
             if (!isExist) throw Oops.Oh(ErrorCode.D1002);
-
-            var wmsMaterial = input.Adapt<WmsMaterial>();
             //楠岃瘉
             await CheckExisit(wmsMaterial, true);
+
+            //鎺у埗瑙勫垯淇℃伅
+            var controlRuleld = input.ControlRuleld;
+            wmsMaterial.ControlRuleId = controlRuleld;
+            //鑾峰彇鐗╂枡绫诲瀷
+            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).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();
+            if (oldaterialCustomerList?.Count > 0)
+            {
+                await _wmsMaterialCustomerRep.DeleteAsync(oldaterialCustomerList);
+            }
+
+
+            //寰�鏉ュ叧绯讳俊鎭�
+            var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
+            //鐗╂枡瀹㈡埛鍏宠仈鍏崇郴
+            var materialCustomerList = new List<WmsMaterialCustomer>();
+            foreach (var baseCustomer in baseCustomerList)
+            {
+                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();
+            if (oldSubstituteGoodList?.Count > 0)
+            {
+                await _wmsSubstituteGoodRep.DeleteAsync(oldSubstituteGoodList);
+            }
+
+
+            //鏇夸唬鍝佷俊鎭�
+            var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
+            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
+            var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false && u.IsDisabled == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
+            foreach (var item in substituteGoodList)
+            {
+                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);
+            }
+            if (substituteGoodList?.Count > 0)
+            {
+                await _wmsSubstituteGoodRep.InsertAsync(substituteGoodList);
+            }
 
             wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
             wmsMaterial.UpdatedUserName = SysHelper.GetUserName();
             wmsMaterial.UpdatedTime = SysHelper.GetNowTime();
             await _wmsMaterialRep.UpdateAsync(wmsMaterial, ignoreNullValues: true);
+
+
         }
 
         #endregion
@@ -328,11 +459,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 = "";//榛樿鍏ュ簱搴撲綅
@@ -354,11 +482,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();
@@ -401,14 +526,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))
                 {
@@ -417,26 +535,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);
@@ -506,38 +613,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("鍚�"))
@@ -614,9 +690,14 @@
             bool isExist = false;
             if (!isEdit)//鏂板
             {
-                //鏁版嵁鏄惁瀛樺湪閲嶅
+                //鐗╂枡缂栧彿鏄惁瀛樺湪閲嶅
                 isExist = await _wmsMaterialRep.AnyAsync(u =>
                                 u.MaterialCode.Equals(input.MaterialCode)
+                , false);
+
+                //鐗╂枡鍚嶇О鏄惁瀛樺湪閲嶅
+                isExist = await _wmsMaterialRep.AnyAsync(u =>
+                                u.MaterialName.Equals(input.MaterialName)
                 , false);
             }
             else//缂栬緫 
@@ -624,10 +705,15 @@
 
 
 
-                //褰撳墠缂栬緫鏁版嵁浠ュ鏄惁瀛樺湪閲嶅
+                //褰撳墠缂栬緫鐗╂枡缂栧彿浠ュ鏄惁瀛樺湪閲嶅
                 isExist = await _wmsMaterialRep.AnyAsync(u =>
                                   u.Id != input.Id
                                   && u.MaterialCode.Equals(input.MaterialCode)
+                  , false);
+                //褰撳墠缂栬緫鐗╂枡鍚嶇О浠ュ鏄惁瀛樺湪閲嶅
+                isExist = await _wmsMaterialRep.AnyAsync(u =>
+                                  u.Id != input.Id
+                                  && u.MaterialName.Equals(input.MaterialName)
                   , false);
             }
 
@@ -663,7 +749,19 @@
                 throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,鐗╂枡缂栧彿[{item.MaterialCode}]宸插瓨鍦�");
             }
 
-
+           var existExcelItem2 = inputs.GroupBy(g => new {
+                g.MaterialName
+            })
+                                          .Where(g => g.Count() > 1)
+                                          .Select(s => new {
+                                              s.Key.MaterialName
+                                          }).FirstOrDefault();
+            if (existExcelItem2 != null)
+            {
+                var wmsMaterial = existExcelItem2.Adapt<WmsMaterial>();
+                var item = existExcelItem2.Adapt<WmsMaterial>();
+                throw Oops.Oh($"瀵煎叆鐨勮〃鏍间腑,鐗╂枡鍚嶇О[{item.MaterialName}]宸插瓨鍦�");
+            }
 
 
             //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
@@ -680,6 +778,21 @@
                 var item = existExcelItem.Adapt<WmsMaterial>();
                 throw Oops.Oh($"绯荤粺涓�,鐗╂枡缂栧彿[{item.MaterialCode}]宸插瓨鍦�");
             }
+
+            //鏍规嵁鑱斿悎涓婚敭楠岃瘉鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄧ浉鍚屾暟鎹�
+            var existDBItem2 = await _wmsMaterialRep.DetachedEntities.FirstOrDefaultAsync(w =>
+                                                                    inputs.Select(s => ""
+                                                                      + s.MaterialName
+                                                                   )
+                                                                   .Contains(""
+                                                                    + w.MaterialName
+             ));
+            if (existDBItem2 != null)
+            {
+                var wmsMaterial = existExcelItem2.Adapt<WmsMaterial>();
+                var item = existExcelItem.Adapt<WmsMaterial>();
+                throw Oops.Oh($"绯荤粺涓�,鐗╂枡缂栧彿[{item.MaterialName}]宸插瓨鍦�");
+            }
         }
 
         #endregion

--
Gitblit v1.9.3