From edca9fd026f88d4edad94b528694d95d62246c67 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周五, 16 5月 2025 16:19:33 +0800
Subject: [PATCH] 添加记录

---
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs                           |   35 +++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs               |    3 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs                      |   62 +++++-
 HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs                                  |    2 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs                        |   13 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs                    |   19 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs             |   11 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs                                      |    6 
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx                         |   12 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs                    |   63 +++++++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs |   12 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs                             |  186 +++++++++++++++++++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput{.cs                 |   59 ++++++
 13 files changed, 445 insertions(+), 38 deletions(-)

diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx
index 4e33776..9ac1ac1 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx
@@ -68,12 +68,12 @@
   const formItems = reactive([
     // 鍩虹淇℃伅
     {
-      label: '鐗╂枡缂栧彿',
-      prop: 'materialNo',
+      label: '鐗╂枡鍨嬪彿',
+      prop: 'materialModel',
       el: 'input',
-      placeholder: '璇疯緭鍏ョ墿鏂欑紪鍙�',
+      placeholder: '璇疯緭鍏ョ墿鏂欏瀷鍙�',
       rules: [
-        { required: true, message: '鐗╂枡缂栧彿涓嶈兘涓虹┖', trigger: 'blur' },
+        { required: true, message: '鐗╂枡鍨嬪彿涓嶈兘涓虹┖', trigger: 'blur' },
         { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' },
       ],
     },
@@ -210,7 +210,7 @@
   const onConfirm = async () => {
     await formRef.value?.validate()
     const data = {
-      materialNo: formData.value.materialNo,
+      materialModel: formData.value.materialModel,
       materialName: formData.value.materialName,
       containerNo: formData.value.containerNo,
       stockNumber: formData.value.stockNumber,
@@ -302,7 +302,7 @@
       )
       const res = data?.items[0]
       formData.value = {
-        materialNo: res.materialNo,
+        materialModel: res.materialModel,
         materialName: res.materialName,
         containerNo: res.containerNo,
         stockNumber: res.stockNumber,
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs
index f826836..065a84c 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs
@@ -26,4 +26,15 @@
         /// </summary>
         public string? MaterialMode { get; set; }
     }
+
+    /// <summary>
+    /// 鎵e噺搴撳瓨
+    /// </summary>
+    public class ReduceInput: LMesCallMaterialInput
+    {
+        /// <summary>
+        /// 搴撲綅鍙�
+        /// </summary>
+        public string PlaceNo { get; set; }
+    }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs
new file mode 100644
index 0000000..35dbdae
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs
@@ -0,0 +1,63 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto
+{
+    /// <summary>
+    /// 搴撳瓨杞Щ鍙傛暟
+    /// </summary>
+    public class MoveStockInput
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string TaskNo { get; set; }
+        /// <summary>
+        /// 鍗曟嵁鍙�
+        /// </summary>
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterialName { get; set; }
+
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string? ContainerNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        public string MaterialNo { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏁伴噺
+        /// </summary>
+        public int StockNumber { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
+        /// 鏈哄瀷/瑙勬牸
+        /// </summary>
+        public string? MaterialModel { get; set; }
+
+        /// <summary>
+        /// 璧峰搴撲綅
+        /// </summary>
+        public string SourcePlace { get; set; }
+
+        /// <summary>
+        /// 鐩爣搴撲綅
+        /// </summary>
+        public string ToPlace { get; set; }
+    }
+}
diff --git "a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs" "b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs"
new file mode 100644
index 0000000..9b8debf
--- /dev/null
+++ "b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs"
@@ -0,0 +1,59 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto
+{
+    /// <summary>
+    /// 鎵e噺搴撳瓨鍏ュ簱
+    /// </summary>
+    public class ReduceStockInput
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string TaskNo { get; set; }
+        /// <summary>
+        /// 鍗曟嵁鍙�
+        /// </summary>
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterialName { get; set; }
+
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string? ContainerNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        public string MaterialNo { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏁伴噺
+        /// </summary>
+        public int StockNumber { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
+        /// 鏈哄瀷/瑙勬牸
+        /// </summary>
+        public string? MaterialModel { get; set; }
+
+        /// <summary>
+        /// 搴撲綅缂栧彿
+        /// </summary>
+        public string? PlaceNo { get; set; }
+
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs
index 2f89dc8..41df00d 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs
@@ -15,5 +15,15 @@
     /// <summary> 
     /// 鏄惁绂佺敤 
     /// </summary> 
-    public bool? IsDisabled { get; set; } = false; 
+    public bool? IsDisabled { get; set; } = false;
+
+    /// <summary>
+    /// 浠诲姟鍙�
+    /// </summary>
+    public string TaskNo { get; set; }
+
+    /// <summary>
+    /// 鍗曟嵁缂栧彿
+    /// </summary>
+    public string OrderNo { get; set; }
 } 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs
index 795a8fc..d507f61 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs
@@ -1,4 +1,5 @@
 锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.BindInstockDto;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -17,7 +18,7 @@
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        Task BindMaterialContaienrAsync(BindInstockInput input);
+        Task<WmsMaterialStockDto> BindMaterialContaienrAsync(BindInstockInput input);
 
         /// <summary>
         /// 缁勭洏鍏ュ簱
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs
index 44c546f..574c76b 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs
@@ -1,5 +1,7 @@
-锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
+锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace;
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -26,6 +28,19 @@
         /// <param name="requiredNum"></param>
         /// <param name="materialNo"></param>
         /// <returns></returns>
-        Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "");
+        Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string placeNo = "", PlaceTypeEnum placeType = PlaceTypeEnum.YUANLIAOKUWEI, string materialNo = "");
+
+        /// <summary>
+        /// 鎵e噺搴撳瓨
+        /// </summary>
+        /// <returns></returns>
+        Task<List<WmsMaterialStockDto>> ReduceMaterialStockAsync(ReduceStockInput input);
+
+        /// <summary>
+        /// 搴撳瓨杞Щ
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        Task<List<WmsMaterialStockDto>> MoveMaterialStock(MoveStockInput input);
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs
index d9d1571..4549ca4 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs
@@ -2,6 +2,7 @@
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto;
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
 using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
 using CMS.Plugin.HIAWms.Domain.WmsMaterials;
 using CMS.Plugin.HIAWms.Domain.WmsTask;
 using Microsoft.Extensions.DependencyInjection;
@@ -22,6 +23,7 @@
     {
         private readonly IWmsTaskRepository _wmsTaskRepository;
         private readonly IWmsMaterialRepository _wmsMaterialRepository;
+        private readonly IWmsCommonAppService _wmsCommonAppService;
         private readonly IWmsInOutStockOrderAppService _wmsInOutStockOrderAppService;
         private readonly IWmsOutStockAppService _wmsOutStockOrderAppService;
         private readonly IServiceProvider _serviceProvider;
@@ -31,13 +33,15 @@
             IWmsInOutStockOrderAppService wmsInOutStockOrderAppService,
             IWmsOutStockAppService wmsOutStockOrderAppService
 ,
-            IServiceProvider serviceProvider)
+            IServiceProvider serviceProvider,
+            IWmsCommonAppService wmsCommonAppService)
         {
             _wmsTaskRepository = wmsTaskRepository;
             _wmsMaterialRepository = wmsMaterialRepository;
             _wmsInOutStockOrderAppService = wmsInOutStockOrderAppService;
             _wmsOutStockOrderAppService = wmsOutStockOrderAppService;
             _serviceProvider = serviceProvider;
+            _wmsCommonAppService = wmsCommonAppService;
         }
 
         /// <summary>
@@ -116,5 +120,34 @@
 
             return result;
         }
+
+        /// <summary>
+        /// LMes鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public async Task LMesOutStockAsync(ReduceInput input)
+        {
+            if (input == null)
+            {
+                throw new UserFriendlyException("鍑哄簱鍙傛暟閿欒");
+            }
+
+            using var scope = _serviceProvider.CreateScope();
+            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+            using var uow = unitOfWorkManager.Begin(requiresNew: true);
+            if (string.IsNullOrEmpty(input.MaterialMode))
+            {
+                throw new UserFriendlyException("鍑哄簱鍨嬪彿涓嶈兘涓虹┖");
+            }
+            var reduceInput = new ReduceStockInput
+            {
+                MaterialModel = input.MaterialMode,
+                StockNumber = input.Quantity,
+                PlaceNo = input.PlaceNo,
+            };
+            await _wmsCommonAppService.ReduceMaterialStockAsync(reduceInput);
+
+            await uow.SaveChangesAsync();
+        }
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs
index c975a78..0ac4502 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs
@@ -64,7 +64,7 @@
             _serviceProvider = serviceProvider;
         }
 
-        public async Task BindMaterialContaienrAsync(BindInstockInput input)
+        public async Task<WmsMaterialStockDto> BindMaterialContaienrAsync(BindInstockInput input)
         {
             using var scope = _serviceProvider.CreateScope();
             var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
@@ -134,16 +134,19 @@
                 MaterialName = material.MaterialName,
                 MaterialBatch = input.MaterialBatch,
                 StockNumber = input.StockNumber,
-                CheckStatus = Domain.Shared.Enums.MaterialCheckStatusEnum.HEGE,
-                IsLock = Domain.Shared.Enums.YesNoEnum.N,
+                CheckStatus = MaterialCheckStatusEnum.HEGE,
+                IsLock = YesNoEnum.N,
                 PlaceNo = input.PlaceNo,
                 ContainerNo = containerNo,
-                EmptyContainer = Domain.Shared.Enums.YesNoEnum.N,
+                MaterialModel = input.MaterialModel,
+                EmptyContainer = YesNoEnum.N,
             };
-            await _wmsMaterialStockAppService.CreateAsync(materialStock);
+            var result = await _wmsMaterialStockAppService.CreateAsync(materialStock);
 
             await uow.SaveChangesAsync();
             await uow.CompleteAsync();
+
+            return result;
         }
 
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
index 177cf9a..f90eeff 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -2,10 +2,13 @@
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace;
 using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
 using CMS.Plugin.HIAWms.Domain.WmsMaterials;
 using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Domain.WmsPlaces;
 using CmsQueryExtensions.Extension;
+using Microsoft.Extensions.DependencyInjection;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -13,26 +16,33 @@
 using System.Text;
 using System.Threading.Tasks;
 using Volo.Abp;
+using Volo.Abp.Uow;
 
 namespace CMS.Plugin.HIAWms.Application.Implements
 {
     /// <summary>
     /// 鍏叡鎿嶄綔鏈嶅姟
     /// </summary>
-    public class WmsCommonAppService : CMSPluginAppService,IWmsCommonAppService
+    public class WmsCommonAppService : CMSPluginAppService, IWmsCommonAppService
     {
         private readonly IWmsMaterialRepository _wmsMaterialRepository;
         private readonly IWmsPlaceRepository _wmsPlaceRepository;
         private readonly IWmsMaterialStockRepository _wmsMaterialStockRepository;
+        private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository;
+        private readonly IServiceProvider _serviceProvider;
 
         public WmsCommonAppService(IWmsMaterialRepository wmsMaterialRepository,
             IWmsPlaceRepository wmsPlaceRepository,
             IWmsMaterialStockRepository wmsMaterialStockRepository
-            )
+,
+            IServiceProvider serviceProvider,
+            IWmsInOutStockRecordRepository wmsInOutStockRecordRepository)
         {
             _wmsMaterialRepository = wmsMaterialRepository;
             _wmsPlaceRepository = wmsPlaceRepository;
             _wmsMaterialStockRepository = wmsMaterialStockRepository;
+            _serviceProvider = serviceProvider;
+            _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
         }
 
 
@@ -44,14 +54,14 @@
         /// <param name="requiredNum"></param>
         /// <returns></returns>
         /// <exception cref="UserFriendlyException"></exception>
-        public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel,int requiredNum, string materialNo="" )
+        public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel, int requiredNum, string materialNo = "")
         {
 
             var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI });
             // 1. 鑾峰彇鎵�鏈夊簱瀛樺拰搴撲綅淇℃伅
             var stockList = await _wmsMaterialStockRepository.GetListAsync(whereConditions);
 
-            var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI});
+            var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI });
             var allPlaceList = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(placeList.Where(x => !x.IsDisabled).ToList());
 
             // 2. 鏌ユ壘鐩稿悓鐗╂枡鍨嬪彿鍜岀紪鍙风殑搴撳瓨锛堟寜搴撳瓨閲忛檷搴忥級
@@ -114,14 +124,28 @@
         /// <param name="requiredNum"></param>
         /// <param name="materialNo"></param>
         /// <returns></returns>
-        public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
+        public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string placeNo = "", PlaceTypeEnum placeType = PlaceTypeEnum.YUANLIAOKUWEI, string materialNo = "")
         {
+            var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <搴撲綅鍙�, 鍑哄簱鏁�>
             // 1. 鑾峰彇鎵�鏈夊簱瀛橈紙鎺掗櫎閿佸畾搴撳瓨锛�
+            var input = new GetWmsMaterialStockInput();
             var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput());
             var stockList = (await _wmsMaterialStockRepository.GetListAsync(whereConditions))
                 .Where(x => x.IsLock == Domain.Shared.Enums.YesNoEnum.N)
-                .Where(x=>x.StorageTypeNo == Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI)
+                .Where(x => x.StorageTypeNo == placeType)
                 .ToList();
+
+            if (!string.IsNullOrEmpty(placeNo))
+            {
+                var stock = stockList.Where(x => x.PlaceNo == placeNo).FirstOrDefault();
+                if (stock.StockNumber < requiredNum)
+                {
+                    throw new UserFriendlyException($"搴撲綅{placeNo}搴撳瓨涓嶈冻,鍙敤: {stock.StockNumber}, 缂�: {requiredNum - stock.StockNumber}");
+                }
+
+                allocation.Add(ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(stock), requiredNum);
+                return allocation;
+            }
 
             // 2. 绛涢�夊尮閰嶇墿鏂�
             var availableStocklist = stockList
@@ -141,7 +165,6 @@
             }
 
             // 4. 璁$畻鍚勫簱浣嶅嚭搴撴暟閲�
-            var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <搴撲綅鍙�, 鍑哄簱鏁�>
             int remaining = requiredNum;
 
             foreach (var stock in availableStocks)
@@ -173,5 +196,154 @@
 
             return whereConditions;
         }
+
+
+        /// <summary>
+        /// 鎵e噺搴撳瓨
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<WmsMaterialStockDto>> ReduceMaterialStockAsync(ReduceStockInput input)
+        {
+            using var scope = _serviceProvider.CreateScope();
+            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+            using var uow = unitOfWorkManager.Begin(requiresNew: true);
+
+            var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel);
+            if (materialModel == null)
+            {
+                throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�");
+            }
+            var placeInfo = await _wmsPlaceRepository.FindByNameAsync(input.PlaceNo);
+            if (placeInfo == null)
+            {
+                throw new UserFriendlyException("搴撲綅淇℃伅涓嶅瓨鍦�");
+            }
+            var stockresult = await FindStockAsync(input.MaterialModel, input.StockNumber, input.PlaceNo, placeInfo.StorageTypeNo);
+            if (stockresult == null)
+            {
+                throw new UserFriendlyException("褰撳墠鏃犲簱瀛�");
+            }
+            var recordList = new List<WmsInOutStockRecord>();
+            var delStock = new List<WmsMaterialStock>();
+            foreach (var kvp in stockresult)
+            {
+                var stock = kvp.Key;    // WmsPlace瀵硅薄
+                var quantity = kvp.Value; // 鍒嗛厤鏁伴噺
+
+                // 鎵e噺搴撳瓨
+                var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = input.MaterialModel, PlaceNo = stock.PlaceNo });
+                var reduceStockList = stockList.OrderBy(x => x.InStockTime).Take(quantity).ToList();
+                delStock.AddRange(reduceStockList);
+
+                // 鍑哄叆搴撹褰�
+                foreach (var item in reduceStockList)
+                {
+                    var record = new WmsInOutStockRecord
+                    {
+                        TaskNo = input.TaskNo,
+                        OrderNo = input.OrderNo,
+                        StockType = StockTypeEnum.Move,
+                        ContainerNo = item.ContainerNo,
+                        MaterialId = item.MaterialId,
+                        MaterialModel = item.MaterialModel,
+                        MaterialName = item.MaterialName,
+                        MaterialNo = item.MaterialNo,
+                        MaterialBatch = item.MaterialBatch,
+                        SourcePlace = item.PlaceNo,
+                        ToPlace = "鍑哄簱",
+                        OperateTime = DateTime.Now,
+                        Remark = "鍑哄簱鎵e噺",
+                    };
+                    recordList.Add(record);
+                }
+            }
+            await _wmsMaterialStockRepository.DeleteManyAsync(delStock);
+            await _wmsInOutStockRecordRepository.InsertManyAsync(recordList);
+
+            await uow.SaveChangesAsync();
+            await uow.CompleteAsync();
+
+            var result = ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(delStock);
+            return result;
+        }
+
+        /// <summary>
+        /// 搴撳瓨杞Щ
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<List<WmsMaterialStockDto>> MoveMaterialStock(MoveStockInput input)
+        {
+            using var scope = _serviceProvider.CreateScope();
+            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+            using var uow = unitOfWorkManager.Begin(requiresNew: true);
+
+            var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel);
+            if (materialModel == null)
+            {
+                throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�");
+            }
+
+            var placeInfo = await _wmsPlaceRepository.FindByNameAsync(input.SourcePlace);
+            if (placeInfo == null)
+            {
+                throw new UserFriendlyException("鏉ユ簮搴撲綅淇℃伅涓嶅瓨鍦�");
+            }
+            var toPlace = await _wmsPlaceRepository.FindByNameAsync(input.ToPlace);
+            if (toPlace == null)
+            {
+                throw new UserFriendlyException("鐩爣搴撲綅淇℃伅涓嶅瓨鍦�");
+            }
+            var stockresult = await FindStockAsync(input.MaterialModel, input.StockNumber, input.SourcePlace, placeInfo.StorageTypeNo);
+            if (stockresult == null)
+            {
+                throw new UserFriendlyException("褰撳墠鏃犲簱瀛�");
+            }
+
+            var recordList = new List<WmsInOutStockRecord>();
+            var result = new List<WmsMaterialStockDto>();
+            foreach (var kvp in stockresult)
+            {
+                var stock = kvp.Key;    // WmsPlace瀵硅薄
+                var quantity = kvp.Value; // 鍒嗛厤鏁伴噺
+
+                // 鎵e噺杞Щ
+                var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = input.MaterialModel, PlaceNo = stock.PlaceNo });
+                var reduceStockList = stockList.OrderBy(x => x.InStockTime).Take(quantity).ToList();
+
+                // 鍑哄叆搴撹褰�
+                foreach (var item in reduceStockList)
+                {
+                    var record = new WmsInOutStockRecord
+                    {
+                        TaskNo = input.TaskNo,
+                        OrderNo = input.OrderNo,
+                        StockType = StockTypeEnum.Move,
+                        ContainerNo = item.ContainerNo,
+                        MaterialId = item.MaterialId,
+                        MaterialModel = item.MaterialModel,
+                        MaterialName = item.MaterialName,
+                        MaterialNo = item.MaterialNo,
+                        MaterialBatch = item.MaterialBatch,
+                        SourcePlace = item.PlaceNo,
+                        ToPlace = input.ToPlace,
+                        OperateTime = DateTime.Now,
+                        Remark = "鍑哄簱鎵e噺",
+                    };
+                    recordList.Add(record);
+                    item.PlaceNo = input.ToPlace;
+                }
+
+                await _wmsMaterialStockRepository.UpdateManyAsync(reduceStockList);
+                await _wmsInOutStockRecordRepository.InsertManyAsync(recordList);
+
+                result.AddRange(ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(reduceStockList));
+            }
+
+            await uow.SaveChangesAsync();
+            await uow.CompleteAsync();
+
+            return result;
+        }
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
index 6cb1570..f8d424b 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
@@ -1,9 +1,13 @@
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
 using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
 using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Domain.WmsAreas;
 using CMS.Plugin.HIAWms.Domain.WmsContainers;
+using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
 using CMS.Plugin.HIAWms.Domain.WmsMaterials;
 using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Domain.WmsPlaces;
@@ -11,8 +15,10 @@
 using CmsQueryExtensions;
 using CmsQueryExtensions.Extension;
 using Microsoft.Extensions.DependencyInjection;
+using SqlKata;
 using System.Linq.Expressions;
 using System.Text.Json;
+using System.Threading.Tasks;
 using Volo.Abp;
 using Volo.Abp.Application.Dtos;
 using Volo.Abp.Data;
@@ -29,6 +35,8 @@
     private readonly IWmsContainerRepository _wmscontainerRepository;
     private readonly IWmsPlaceRepository _wmsplaceRepository;
     private readonly IWmsAreaRepository _wmsareaRepository;
+    private readonly IWmsInOutStockRecordAppService _wmspInOutStockRecordAppService;
+    private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository;
     private readonly IServiceProvider _serviceProvider;
 
     /// <summary>
@@ -41,7 +49,10 @@
         IWmsPlaceRepository wmsplaceRepository,
         IWmsAreaRepository wmsareaRepository
 ,
-        IServiceProvider serviceProvider)
+        IServiceProvider serviceProvider,
+        IWmsInOutStockRecordAppService wmspInOutStockRecordAppService,
+        IWmsInOutStockRecordRepository wmsInOutStockRecordRepository
+        )
     {
         _wmsmaterialstockRepository = wmsmaterialstockRepository;
         _wmsMaterialRepository = wmsMaterialRepository;
@@ -49,6 +60,8 @@
         _wmsplaceRepository = wmsplaceRepository;
         _wmsareaRepository = wmsareaRepository;
         _serviceProvider = serviceProvider;
+        _wmspInOutStockRecordAppService = wmspInOutStockRecordAppService;
+        _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
     }
 
     /// <inheritdoc />
@@ -162,12 +175,13 @@
         using var uow = unitOfWorkManager.Begin(requiresNew: true);
         await CheckCreateOrUpdateDtoAsync(input);
 
-        //var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo);
-        //if (exist)
-        //{
-        //    throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
-        //}
-        var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo);
+        var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel);
+        if(materialModel == null)
+        {
+            throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�");
+        }
+
+        var material = await _wmsMaterialRepository.FindByNameAsync(materialModel.MaterialNo);
         if (material == null)
         {
             throw new UserFriendlyException("鐗╂枡淇℃伅涓嶅瓨鍦�");
@@ -183,10 +197,10 @@
         wmsmaterialstock.MaterialId = Guid.NewGuid().ToString("N");
         wmsmaterialstock.MaterialName = material.MaterialName;
 
-        wmsmaterialstock.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
-        wmsmaterialstock.ContainerType = container == null ? Domain.Shared.Enums.ContainerTypeEnum.XUNI : container.ContainerType;
-        wmsmaterialstock.StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.XUNIKUWEI;
-        wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.DAIRU;
+        wmsmaterialstock.ContainerStatus = ContainerStatusEnum.KUWEI;
+        wmsmaterialstock.ContainerType = container == null ? ContainerTypeEnum.XUNI : container.ContainerType;
+        wmsmaterialstock.StorageTypeNo = PlaceTypeEnum.XUNIKUWEI;
+        wmsmaterialstock.PlaceStatus = PlaceStatusEnum.DAIRU;
         if (!string.IsNullOrEmpty(input.PlaceNo))
         {
             var place = await _wmsplaceRepository.FindByNameAsync(input.PlaceNo);
@@ -200,12 +214,12 @@
                 throw new UserFriendlyException("搴撲綅搴撳尯淇℃伅涓嶅瓨鍦�");
             }
 
-            wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+            wmsmaterialstock.PlaceStatus = PlaceStatusEnum.CUNHUO;
             wmsmaterialstock.StorageTypeNo = place.StorageTypeNo;
             wmsmaterialstock.AreaCode = place.AreaCode;
             wmsmaterialstock.AreaName = area.AreaName;
 
-            place.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+            place.PlaceStatus = PlaceStatusEnum.CUNHUO;
             place.Islock = input.IsLock;
 
             await _wmsplaceRepository.UpdateAsync(place);
@@ -229,6 +243,7 @@
         wmsmaterialstock.InStockTime = DateTime.Now;
 
         var stockList = new List<WmsMaterialStock>();
+        var recordList = new List<WmsInOutStockRecord>();
         for (int i = 0; i < input.StockNumber; i++)
         {
             var stock = new WmsMaterialStock();
@@ -237,8 +252,27 @@
             stock.MaterialId = Guid.NewGuid().ToString("N");
             stock.StockNumber = 1;
             stockList.Add(stock);
-        }
 
+            // 娣诲姞搴撳瓨璁板綍
+            var record = new WmsInOutStockRecord
+            {
+                TaskNo = input.TaskNo,
+                OrderNo = input.OrderNo,
+                StockType = StockTypeEnum.InBound,
+                ContainerNo = stock.ContainerNo,
+                MaterialId = stock.MaterialId,
+                MaterialModel = stock.MaterialModel,
+                MaterialName = stock.MaterialName,
+                MaterialNo = stock.MaterialNo,
+                MaterialBatch = stock.MaterialBatch,
+                SourcePlace = "娣诲姞搴撳瓨",
+                ToPlace = stock.PlaceNo,
+                OperateTime = DateTime.Now,
+                Remark = "鍏ュ簱",
+            };
+            recordList.Add(record);
+        }
+        await _wmsInOutStockRecordRepository.InsertManyAsync(recordList);
         await _wmsmaterialstockRepository.InsertManyAsync(stockList);
 
         if (container == null)
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs
index a7d0926..6fe1a52 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs
@@ -24,5 +24,11 @@
         /// </summary>
         [Description("鍑哄簱")]
         OutBound = 2,
+
+        /// <summary>
+        /// 杞Щ
+        /// </summary>
+        [Description("杞Щ")]
+        Move = 3,
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
index c84b892..6e670be 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
@@ -58,7 +58,7 @@
         }
 
         /// <summary>
-        /// 鍝嚭鏉ユ槑缁�
+        /// 搴撳瓨鏄庣粏
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>

--
Gitblit v1.9.3