From 76a3bc5b62fda60af2a6edaa3f10632bd3134137 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周三, 14 5月 2025 08:53:30 +0800
Subject: [PATCH] 库位及实体

---
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs |  261 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 260 insertions(+), 1 deletions(-)

diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
index 5faca56..d09721c 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
@@ -12,6 +12,14 @@
 using Volo.Abp.ObjectMapping;
 using CMS.Plugin.HIAWms.Domain.WmsContainers;
 using CMS.Plugin.HIAWms.Domain.WmsPlaces;
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
+using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
+using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
+using Volo.Abp.Uow;
+using Microsoft.Extensions.DependencyInjection;
 
 namespace CMS.Plugin.HIAWms.Application.Implements;
 
@@ -23,16 +31,40 @@
     private readonly IWmsTaskRepository wmsTaskRepository;
     private readonly IWmsContainerRepository _wmsContainerRepository;
     private readonly IWmsPlaceRepository _wmsPlaceRepository;
+    private readonly IWmsMaterialStockRepository _wmsMaterialStockRepository;
+    private readonly IWmsInOutStockOrderRepository _wmsInOutStockOrderRepository;
+    private readonly IWmsInOutStockOrderDetailRepository _wmsInOutStockOrderDetailRepository;
+    private readonly IWmsContainerRepository _wmsContainerRepository1;
+    private readonly IWmsInOutStockOrderDetailAppService _wmsInOutStockOrderDetailAppService;
+    private readonly IWmsInOutStockRecordAppService _wmsInOutStockRecordAppService;
+    private readonly IServiceProvider _serviceProvider;
 
     /// <summary> 
     /// Initializes a new instance of the <see cref="WmsTaskAppService"/> class. 
     /// </summary> 
     /// <param name="WmsTaskRepository">The task job repository.</param> 
-    public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository, IWmsContainerRepository wmsContainerRepository, IWmsPlaceRepository wmsPlaceRepository)
+    public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository,
+        IWmsContainerRepository wmsContainerRepository,
+        IWmsPlaceRepository wmsPlaceRepository,
+        IWmsMaterialStockRepository wmsMaterialStockRepository,
+        IWmsInOutStockOrderRepository wmsInOutStockOrderRepository,
+        IWmsInOutStockOrderDetailRepository wmsInOutStockOrderDetailRepository
+,
+        IWmsContainerRepository wmsContainerRepository1,
+        IWmsInOutStockOrderDetailAppService wmsInOutStockOrderDetailAppService,
+        IWmsInOutStockRecordAppService wmsInOutStockRecordAppService,
+        IServiceProvider serviceProvider = null)
     {
         wmsTaskRepository = _WmsTaskRepository;
         _wmsContainerRepository = wmsContainerRepository;
         _wmsPlaceRepository = wmsPlaceRepository;
+        _wmsMaterialStockRepository = wmsMaterialStockRepository;
+        _wmsInOutStockOrderRepository = wmsInOutStockOrderRepository;
+        _wmsInOutStockOrderDetailRepository = wmsInOutStockOrderDetailRepository;
+        _wmsContainerRepository1 = wmsContainerRepository1;
+        _wmsInOutStockOrderDetailAppService = wmsInOutStockOrderDetailAppService;
+        _wmsInOutStockRecordAppService = wmsInOutStockRecordAppService;
+        _serviceProvider = serviceProvider;
     }
 
     /// <summary> 
@@ -135,6 +167,7 @@
         var insertObj = ObjectMapper.Map<WmsTaskCreateDto, WmsTask>(input);
         insertObj.Sort = sort;
         input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
+        insertObj.PlcTaskId = new Random(Guid.NewGuid().GetHashCode()).Next(101, 99999);
 
         await wmsTaskRepository.InsertAsync(insertObj);
 
@@ -165,6 +198,11 @@
         }
 
         updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+        if (input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.WANCHENG || input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.QUXIAO)
+        {
+            throw new UserFriendlyException("瀹屾垚鎴栬�呭彇娑堢殑浠诲姟涓嶅厑璁告洿鏀�");
+        }
+
         input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
 
         updateObj.TaskNo = input.TaskNo;
@@ -479,4 +517,225 @@
 
         return Task.CompletedTask;
     }
+
+    /// <summary>
+    /// 浠诲姟寮哄埗瀹屾垚
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public async Task FinishTaskAsync(WmsTaskStatusDto input)
+    {
+        using var scope = _serviceProvider.CreateScope();
+        var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+        using var uow = unitOfWorkManager.Begin(requiresNew: true);
+
+        var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo);
+        if (task == null)
+        {
+            throw new UserFriendlyException("浠诲姟涓嶅瓨鍦�");
+        }
+        if (task.TaskStatus == WmsTaskStatus.WANCHENG || task.TaskStatus == WmsTaskStatus.QUXIAO)
+        {
+            throw new UserFriendlyException("鍙栨秷鎴栬�呭畬鎴愮殑浠诲姟涓嶅厑璁告搷浣�");
+        }
+        task.TaskStatus = WmsTaskStatus.WANCHENG;
+        task.TaskDodeviceStatus = TaskDodeviceStatus.SrmFinish;
+        await wmsTaskRepository.UpdateAsync(task);
+
+        var place = await _wmsPlaceRepository.FindByNameAsync(task.ToPlace);
+        if (place == null)
+        {
+            throw new UserFriendlyException("鐩爣搴撲綅涓嶅瓨鍦�");
+        }
+
+        // 鏇存柊搴撳瓨
+        var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = task.MutableParam1, PlaceNo = task.SourcePlace });
+        if (stockList == null || stockList.Count <= 0)
+        {
+            throw new UserFriendlyException("鍘熷簱浣嶄俊鎭笉瀛樺湪");
+        }
+        var stock = stockList.FirstOrDefault();
+        stock.PlaceNo = task.ToPlace;
+        stock.StorageTypeNo = place.StorageTypeNo;
+        stock.InStockTime = DateTime.Now;
+        stock.ContainerNo = "TP" + task.ToPlace;
+
+        await _wmsMaterialStockRepository.UpdateAsync(stock);
+
+        place.PlaceStatus = PlaceStatusEnum.CUNHUO;
+        await _wmsPlaceRepository.UpdateAsync(place);
+
+
+        var container = await _wmsContainerRepository.FindByNameAsync(stock.ContainerNo);
+        if (container == null)
+        {
+            await _wmsContainerRepository.InsertAsync(new WmsContainer
+            {
+                ContainerNo = stock.ContainerNo,
+                ContainerStatus = ContainerStatusEnum.KUWEI,
+                ContainerType = ContainerTypeEnum.XUNI,
+            });
+        }
+        else
+        {
+            container.ContainerStatus = ContainerStatusEnum.KUWEI;
+            await _wmsContainerRepository.UpdateAsync(container);
+        }
+
+        var oldContainer = await _wmsContainerRepository.FindByNameAsync(task.ContainerNo);
+        if (oldContainer != null)
+        {
+            await _wmsContainerRepository.DeleteAsync(oldContainer);
+        }
+
+        if (!string.IsNullOrEmpty(task.SourceOrderNo))
+        {
+            // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺
+            var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo);
+            if (orderNo != null)
+            {
+                orderNo.CompleteNumber += 1;
+                orderNo.OrderStatus = OrderStatusEnum.Executing;
+            }
+            if (orderNo.MaterialNumber <= orderNo.CompleteNumber)
+            {
+                orderNo.OrderStatus = OrderStatusEnum.Finish;
+            }
+
+            await _wmsInOutStockOrderRepository.UpdateAsync(orderNo);
+            // 璁板綍涓�鏉¤鎯�
+            var detail = new WmsInOutStockOrderDetailCreateDto
+            {
+                OrderNo = orderNo.OrderNo,
+                OrderType = orderNo.OrderType,
+                MaterialId = stock.MaterialId,
+                MaterialBatch = stock.MaterialBatch,
+                MaterialModel = stock.MaterialModel,
+                MaterialName = stock.MaterialName,
+                MaterialNo = stock.MaterialNo,
+            };
+            await _wmsInOutStockOrderDetailAppService.CreateAsync(detail);
+        }
+
+        // 鍑哄叆搴撹褰�
+        var record = new WmsInOutStockRecordCreateDto
+        {
+            TaskNo = task.TaskNo,
+            OrderNo = task.SourceOrderNo,
+            StockType = task.TaskType == TaskTypeEnum.CHUKU ? StockTypeEnum.OutBound : StockTypeEnum.InBound,
+            ContainerNo = task.ContainerNo,
+            MaterialId = stock.MaterialId,
+            MaterialModel = stock.MaterialModel,
+            MaterialName = stock.MaterialName,
+            MaterialNo = stock.MaterialNo,
+            MaterialBatch = stock.MaterialBatch,
+            SourcePlace = task.SourcePlace,
+            ToPlace = task.ToPlace,
+            OperateTime = DateTime.Now,
+        };
+        await _wmsInOutStockRecordAppService.CreateAsync(record);
+
+        await uow.SaveChangesAsync();
+        await uow.CompleteAsync();
+    }
+
+    /// <summary>
+    /// 鍙栨秷浠诲姟
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public async Task CancelTaskAysnc(WmsTaskStatusDto input)
+    {
+
+        using var scope = _serviceProvider.CreateScope();
+        var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+        using var uow = unitOfWorkManager.Begin(requiresNew: true);
+
+        var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo);
+        if (task == null)
+        {
+            throw new UserFriendlyException("浠诲姟涓嶅瓨鍦�");
+        }
+        if (task.TaskStatus == WmsTaskStatus.WANCHENG || task.TaskStatus == WmsTaskStatus.QUXIAO)
+        {
+            throw new UserFriendlyException("鍙栨秷鎴栬�呭畬鎴愮殑浠诲姟涓嶅厑璁告搷浣�");
+        }
+        task.TaskStatus = WmsTaskStatus.QUXIAO;
+
+        // 鏇存柊搴撳瓨
+        var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = task.MutableParam1, PlaceNo = task.SourcePlace });
+        if (stockList == null || stockList.Count <= 0)
+        {
+            throw new UserFriendlyException("鍘熷簱浣嶄俊鎭笉瀛樺湪");
+        }
+        var stock = stockList.FirstOrDefault();
+        await _wmsMaterialStockRepository.DeleteAsync(stock);
+
+        if (!string.IsNullOrEmpty(task.SourceOrderNo))
+        {
+            // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺
+            var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo);
+            if (orderNo != null)
+            {
+                orderNo.CompleteNumber -= 1;
+                orderNo.OrderStatus = OrderStatusEnum.NoStart;
+            }
+            if (orderNo.CompleteNumber > 0)
+            {
+                orderNo.OrderStatus = OrderStatusEnum.Executing;
+            }
+
+            await _wmsInOutStockOrderRepository.UpdateAsync(orderNo);
+
+        }
+
+        await uow.SaveChangesAsync();
+        await uow.CompleteAsync();
+    }
+
+    /// <summary>
+    /// 淇敼鐩爣搴撲綅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input)
+    {
+        var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); 
+        if (task == null)
+        {
+            throw new UserFriendlyException("浠诲姟淇℃伅涓嶅瓨鍦�");
+        }
+
+        if (task.TaskStatus != WmsTaskStatus.WEIZHIXING)
+        {
+            throw new UserFriendlyException("宸插紑濮嬫垨鑰呯粨鏉熺殑浠诲姟涓嶅厑璁镐慨鏀�");
+        }
+
+        var toPlaceInfo = await _wmsPlaceRepository.FindByNameAsync(input.ToPlace);
+        if (toPlaceInfo == null)
+        {
+            throw new UserFriendlyException("鐩爣搴撲綅淇℃伅涓嶅瓨鍦�");
+        }
+
+        if(toPlaceInfo.IsDisabled)
+        {
+            throw new UserFriendlyException("鐩爣搴撲綅宸茶绂佺敤");
+        }
+
+        var toplaceStock = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.ToPlace });
+        if (toplaceStock != null && toplaceStock.Count>0)
+        {
+            var model = toplaceStock.FirstOrDefault();
+            if (model.MaterialModel != input.MutableParam1)
+            {
+                throw new UserFriendlyException("鐩爣搴撲綅鍨嬪彿涓庡綋鍓嶅瀷鍙蜂笉涓�鑷翠笉鍏佽淇敼");
+            }
+        }
+        task.ToPlace = input.ToPlace;
+
+        await wmsTaskRepository.UpdateAsync(task);
+    }
 }

--
Gitblit v1.9.3