From 14f9c8378bde7d9a8d8f1fcc393e0e8d49eced82 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周五, 09 5月 2025 17:44:29 +0800
Subject: [PATCH] 查找空库位,查找库存

---
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs |  161 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 156 insertions(+), 5 deletions(-)

diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs
index 5be0b4f..097119d 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs
@@ -1,4 +1,15 @@
 锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.BindInstockDto;
+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.WmsContainerPlace;
+using CMS.Plugin.HIAWms.Domain.WmsContainers;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialContainer;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Domain.WmsMaterials;
+using CMS.Plugin.HIAWms.Domain.WmsPlaces;
+using CMS.Plugin.HIAWms.Domain.WmsTask;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -13,21 +24,161 @@
     /// </summary>
     public class WmsBindInStockAssService : CMSPluginAppService
     {
-        public async Task BindMaterialContaienrAsync(BindMaterialInput input)
+        private readonly IWmsMaterialRepository _wmsMaterialRepository;
+        private readonly IWmsContainerRepository _wmsContainerRepository;
+        private readonly IWmsPlaceRepository _wmsPlaceRepository;
+        private readonly IWmsMaterialContainerRepository _wmsMaterialContainerRepository;
+        private readonly IWmsContainerPlaceRepository _wmsContainerPlaceRepository;
+        private readonly IWmsMaterialInfoRepository _wmsMaterialInfoRepository;
+        private readonly IWmsMaterialStockAppService _wmsMaterialStockAppService;
+        private readonly IWmsCommonAppService _wmsCommonAppService;
+        private readonly IWmsTaskRepository _wmsTaskRepository;
+        private readonly IWmsTaskAppService _wmsTaskAppService;
+
+        public WmsBindInStockAssService(IWmsMaterialRepository wmsMaterialRepository,
+            IWmsContainerRepository wmsContainerRepository,
+            IWmsPlaceRepository wmsPlaceRepository
+,
+            IWmsMaterialContainerRepository wmsMaterialContainerRepository,
+            IWmsContainerPlaceRepository wmsContainerPlaceRepository,
+            IWmsMaterialInfoRepository wmsMaterialInfoRepository,
+            IWmsMaterialStockAppService wmsMaterialStockAppService,
+            IWmsCommonAppService wmsCommonAppService,
+            IWmsTaskRepository wmsTaskRepository,
+            IWmsTaskAppService wmsTaskAppService)
+        {
+            _wmsMaterialRepository = wmsMaterialRepository;
+            _wmsContainerRepository = wmsContainerRepository;
+            _wmsPlaceRepository = wmsPlaceRepository;
+            _wmsMaterialContainerRepository = wmsMaterialContainerRepository;
+            _wmsContainerPlaceRepository = wmsContainerPlaceRepository;
+            _wmsMaterialInfoRepository = wmsMaterialInfoRepository;
+            _wmsMaterialStockAppService = wmsMaterialStockAppService;
+            _wmsCommonAppService = wmsCommonAppService;
+            _wmsTaskRepository = wmsTaskRepository;
+            _wmsTaskAppService = wmsTaskAppService;
+        }
+
+        public async Task BindMaterialContaienrAsync(BindInstockInput input)
         {
             if (string.IsNullOrEmpty(input.MaterialModel)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); }
             if (string.IsNullOrEmpty(input.MaterialBatch)) { throw new UserFriendlyException("璇疯緭鍏ユ壒娆″彿"); }
-            if (input.MaterialStockNumber<=0) { throw new UserFriendlyException("鍏ュ簱鏁伴噺蹇呴』澶т簬0"); }
+            if (input.StockNumber <= 0) { throw new UserFriendlyException("鍏ュ簱鏁伴噺蹇呴』澶т簬0"); }
+            #region 搴熷純
+            //string containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
 
+            //// 5. 鍒涘缓鎵樼洏
+            //var container = new WmsContainer
+            //{
+            //    ContainerNo = containerNo,
+            //    ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI,
+            //    ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG,
+            //};
+            //await _wmsContainerRepository.InsertAsync(container);
 
+            //var materialContainerList = new List<WmsMaterialContainer>();
+            //var materialInfoList = new List<WmsMaterialInfo>();
+            //for (int i = 0; i < input.MaterialStockNumber; i++)
+            //{
+            //    string materialId = Guid.NewGuid().ToString("N");
+            //    var materialContainer = new WmsMaterialContainer
+            //    {
+            //        MaterialId = materialId,
+            //        ContainerNo = containerNo,
+            //    };
+            //    materialContainerList.Add(materialContainer);
+
+            //    var materialInfo = new WmsMaterialInfo
+            //    {
+
+            //    };
+            //    materialInfoList.Add(materialInfo);
+            //}
+
+            //await _wmsMaterialContainerRepository.InsertManyAsync(materialContainerList);
+            //await _wmsMaterialInfoRepository.InsertManyAsync(materialInfoList);
+            #endregion
+
+            var material = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel);
+            if (material == null)
+            {
+                throw new UserFriendlyException($"鐗╂枡鍨嬪彿 {input.MaterialModel} 涓嶅瓨鍦紒");
+            }
+
+            // 5. 鍒涘缓鎵樼洏
+            var containerNo = input.ContainerNo;
+            if (string.IsNullOrEmpty(containerNo))
+            {
+                containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
+            }
+            var container = new WmsContainer
+            {
+                ContainerNo = containerNo,
+                ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI,
+                ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG,
+            };
+            await _wmsContainerRepository.InsertAsync(container);
+
+            var materialStock = new WmsMaterialStockCreateDto
+            {
+                MaterialNo = material.MaterialNo,
+                MaterialName = material.MaterialName,
+                MaterialBatch = input.MaterialBatch,
+                StockNumber = input.StockNumber,
+                CheckStatus = Domain.Shared.Enums.MaterialCheckStatusEnum.HEGE,
+                IsLock = Domain.Shared.Enums.YesNoEnum.N,
+                PlaceNo = input.PlaceNo,
+                ContainerNo = containerNo,
+                EmptyContainer = Domain.Shared.Enums.YesNoEnum.N,
+            };
+            await _wmsMaterialStockAppService.CreateAsync(materialStock);
         }
 
+
+        /// <summary>
+        /// 缁勭洏鍏ュ簱
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
         public async Task BindInStockAsync(BindInstockInput input)
         {
-            if(string.IsNullOrEmpty(input.PlaceNo)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); }
+            if (string.IsNullOrEmpty(input.PlaceNo)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); }
 
-            var bindInput = ObjectMapper.Map<BindInstockInput, BindMaterialInput>(input);
-            await BindMaterialContaienrAsync(bindInput);
+            input.ContainerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
+            await BindMaterialContaienrAsync(input);
+
+            // 鐢熸垚浠诲姟
+            var plactDict = await _wmsCommonAppService.FindAvailablePlacesAsync(input.MaterialNo, input.StockNumber);
+            var taskList = new List<WmsTask>();
+            foreach (var kvp in plactDict)
+            {
+                var place = kvp.Key;    // WmsPlace瀵硅薄
+                var quantity = kvp.Value; // 鍒嗛厤鏁伴噺
+
+                for (int i = 0; i < quantity; i++)
+                {
+                    var task = new WmsTask
+                    {
+                        TaskNo = $"RK_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid().ToString("N").Substring(0, 6)}",
+                        ContainerNo = input.ContainerNo,
+                        SourcePlace = input.PlaceNo,
+                        ToPlace = place.PlaceNo,
+                        TaskType = TaskTypeEnum.RUKU,
+                        SonTaskType = SonTaskTypeEnum.RGRUKU,
+                        TaskStatus = WmsTaskStatus.WEIZHIXING,
+                        TaskLevel = 999,
+                        Aisle = 1,
+                        DodeviceId = 0,
+                        TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart,
+                        IsNextTask = (int)YesNoEnum.Y,
+                        IsRead = true,
+                        MutableParam1 = input.MaterialModel,
+                    };
+                    taskList.Add(task);
+                }
+            }
+            await _wmsTaskRepository.InsertManyAsync(taskList);
         }
     }
 }

--
Gitblit v1.9.3