From 9796651f30deb9eee38c9d846255b293fbba15eb Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周五, 16 5月 2025 09:26:55 +0800
Subject: [PATCH] 333
---
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs | 288 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 287 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..7ede721 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,16 @@
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;
+using NPOI.SS.Formula.Functions;
+using System.Collections.Generic;
namespace CMS.Plugin.HIAWms.Application.Implements;
@@ -23,16 +33,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 +169,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 +200,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 +519,250 @@
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);
+ }
+
+ /// <summary>
+ /// 鑾峰彇闇�瑕佹墽琛岀殑浠诲姟
+ /// </summary>
+ /// <param name="input"></param>
+ /// <returns></returns>
+ public async Task<WmsTaskDto> GetToExecuteTaskAsync(QueryTaskTypeInput input)
+ {
+ var queryInput = new GetWmsTaskInput
+ {
+ TaskStatus = WmsTaskStatus.WEIZHIXING,
+ };
+ var whereConditions = DynamicGetQueryParams(queryInput);
+
+ var NoStartTaskList = await wmsTaskRepository.GetTaskListAsync(whereConditions);
+ if(NoStartTaskList.Count<=0) return null;
+
+ var executeTask = NoStartTaskList.FirstOrDefault(x=>x.TaskType == input.TaskType);
+ if(executeTask == null)
+ {
+ return ObjectMapper.Map<WmsTask, WmsTaskDto>(NoStartTaskList.FirstOrDefault());
+ }
+
+ return ObjectMapper.Map<WmsTask, WmsTaskDto>(executeTask);
+ }
}
--
Gitblit v1.9.3