From d6e9301f94a391b822b41c29f8813b915d557206 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周日, 11 5月 2025 13:13:43 +0800
Subject: [PATCH] 111
---
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