From 6695afe1e1c478dbb599a1d382d8d6628b456d03 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 18 一月 2025 17:30:49 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 241 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 224 insertions(+), 17 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 9e6af5c..6ec106d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -13,18 +13,74 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using MailKit.Search;
+using WIDESEA_External.Model;
+using WIDESEA_Core.CodeConfigEnum;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
-
+ /// <summary>
+ /// 閫夋嫨搴撳瓨鐢熸垚鍑哄簱浠诲姟
+ /// </summary>
+ /// <param name="id"></param>
+ /// <returns></returns>
+ public WebResponseContent Outbound(int id)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == id).Includes(x => x.Details).First();
+ if (stockInfo == null)
+ {
+ return content.Error($"鏈壘鍒板簱瀛�");
+ }
+ Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
+ if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+ {
+ List<Dt_Task> tasks = GetTasks(new List<Dt_StockInfo>() { stockInfo }, TaskTypeEnum.Outbound);
+ if (tasks == null || tasks.Count <= 0)
+ {
+ return content.Error($"鐢熸垚浠诲姟澶辫触");
+ }
+ //澶勭悊搴撳瓨鏁版嵁
+ stockInfo.StockStatus = (int)StockStatusEmun.鍑哄簱閿佸畾;
+ LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
+ locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
+ //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
+ _unitOfWorkManage.BeginTran();
+ //鏇存柊搴撳瓨鐘舵��
+ _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+ //鏇存柊璐т綅鐘舵��
+ _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
+ //鏂板缓浠诲姟
+ BaseDal.AddData(tasks);
+ //鍔犲叆璐т綅鍙樺姩璁板綍
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", tasks[0].TaskNum);
+ _unitOfWorkManage.CommitTran();
+ PushTasksToWCS(tasks);
+ content.OK();
+ }
+ else
+ {
+ content.Error($"璐т綅鍑哄簱鏉′欢涓嶆弧瓒�");
+ }
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
/// <summary>
/// 搴撳瓨鏁版嵁杞嚭搴撲换鍔�
/// </summary>
/// <param name="stockInfos"></param>
/// <returns></returns>
- public List<Dt_Task> GetTasks(List<Dt_StockInfo> stockInfos)
+ public List<Dt_Task> GetTasks(List<Dt_StockInfo> stockInfos, TaskTypeEnum taskType)
{
List<Dt_Task> tasks = new List<Dt_Task>();
for (int i = 0; i < stockInfos.Count; i++)
@@ -45,8 +101,8 @@
Roadway = locationInfo.RoadwayNo,
SourceAddress = stockInfo.LocationCode,
TargetAddress = "",
- TaskStatus = TaskOutStatusEnum.OutNew.ObjToInt(),
- TaskType = TaskOutboundTypeEnum.Outbound.ObjToInt(),
+ TaskStatus = TaskStatusEnum.New.ObjToInt(),
+ TaskType = taskType.ObjToInt(),
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
PalletType = stockInfo.PalletType,
WarehouseId = stockInfo.WarehouseId,
@@ -88,7 +144,7 @@
(List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
if (result.Item1 != null && result.Item1.Count > 0)
{
- tasks = GetTasks(result.Item1);
+ tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound);
result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
result.Item3.ForEach(x =>
{
@@ -111,7 +167,7 @@
if (stockLockInfos != null && stockLockInfos.Count > 0)
{
List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
- tasks = GetTasks(stocks);
+ tasks = GetTasks(stocks, TaskTypeEnum.Outbound);
}
}
@@ -134,7 +190,10 @@
{
throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
}
-
+ if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
+ {
+ throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�");
+ }
List<Dt_StockInfo>? stockInfos = null;
List<Dt_OutboundOrderDetail>? orderDetails = null;
List<Dt_OutStockLockInfo>? outStockLockInfos = null;
@@ -144,7 +203,7 @@
(List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
if (result.Item1 != null && result.Item1.Count > 0)
{
- tasks = GetTasks(result.Item1);
+ tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound);
result.Item2.ForEach(x =>
{
x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
@@ -200,6 +259,157 @@
}
/// <summary>
+ /// 骞冲簱鐩存帴鍑哄簱
+ /// </summary>
+ /// <param name="orderDetailId"></param>
+ /// <param name="stockSelectViews"></param>
+ /// <returns></returns>
+ public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+ {
+ try
+ {
+ #region MyRegion
+ Dt_OutboundOrderDetail OrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
+
+ if (OrderDetail == null)
+ {
+ throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+ }
+ if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+ throw new Exception("鍑哄簱鍗曞凡瀹屾垚");
+ Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == OrderDetail.OrderId).Includes(x => x.Details).First();
+ if (outboundOrder == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟淇℃伅");
+ }
+ Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId);
+ List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
+ if (outStocks.Count < 1) return WebResponseContent.Instance.Error($"搴撳瓨涓嶈冻");
+ List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+ List<Dt_StockInfo> upStocks = new List<Dt_StockInfo>();
+ List<Dt_StockInfo> deStocks = new List<Dt_StockInfo>();
+ List<Dt_StockInfoDetail> upstockDetails = new List<Dt_StockInfoDetail>();
+ List<Dt_StockInfoDetail> destockDetails = new List<Dt_StockInfoDetail>();
+ outStocks.ForEach(x =>
+ {
+ x.Details.Where(x => x.MaterielCode == OrderDetail.MaterielCode).ToList().ForEach(v =>
+ {
+ float OriginalQuantity = v.StockQuantity;
+ float assignQuantity = 0;//鍒嗛厤鏁伴噺
+ float assignAmount = OrderDetail.OrderQuantity - OrderDetail.OverOutQuantity;//寰呭嚭鏁伴噺
+ if (assignAmount > 0)
+ {
+ if (v.StockQuantity >= assignAmount)
+ {
+ assignQuantity = assignAmount;
+ v.StockQuantity -= assignAmount;
+ OrderDetail.OverOutQuantity += assignAmount;
+ OrderDetail.LockQuantity += assignAmount;
+ upstockDetails.Add(v);
+ }
+ else
+ {
+ assignQuantity = v.StockQuantity;
+ OrderDetail.OverOutQuantity += v.StockQuantity;
+ OrderDetail.LockQuantity += v.StockQuantity;
+ v.StockQuantity = 0;
+ destockDetails.Add(v);
+ }
+ Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+ {
+ PalletCode = x.PalletCode,
+ AssignQuantity = assignQuantity,
+ MaterielCode = OrderDetail.MaterielCode,
+ BatchNo = v.BatchNo,
+ LocationCode = x.LocationCode,
+ MaterielName = v.MaterielName,
+ OrderDetailId = OrderDetail.Id,
+ OrderNo = outboundOrder.OrderNo,
+ OrderType = outboundOrder.OrderType,
+ OriginalQuantity = OriginalQuantity,
+ Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(),
+ StockId = x.Id,
+ TaskNum = 0,
+ OrderQuantity = OrderDetail.OrderQuantity,
+ Unit = OrderDetail.Unit
+ };
+ outStockLockInfos.Add(outStockLockInfo);
+ }
+ });
+ int overCount = x.Details.Where(x => x.StockQuantity == 0).Count();
+ if (overCount == x.Details.Count) deStocks.Add(x);
+ else upStocks.Add(x);
+ });
+ outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+ OrderDetail.OrderDetailStatus = OrderDetail.OrderQuantity > OrderDetail.OverOutQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.Over.ObjToInt();
+ if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+ {
+ int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+ if (outboundOrder.Details.Count - 1 == overCount)
+ outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ }
+ _unitOfWorkManage.BeginTran();
+ _outboundService.OutboundStockLockInfoService.AddData(outStockLockInfos);
+ _outboundService.OutboundOrderService.UpdateData(outboundOrder);
+ _outboundService.OutboundOrderDetailService.UpdateData(OrderDetail);
+ _stockRepository.StockInfoRepository.UpdateData(upStocks);
+ _stockRepository.StockInfoRepository.DeleteData(deStocks);
+ _stockRepository.StockInfoDetailRepository.UpdateData(upstockDetails);
+ _stockRepository.StockInfoDetailRepository.DeleteData(destockDetails);
+ _unitOfWorkManage.CommitTran();
+ #endregion
+
+ #region 涓婃姤ERP
+ if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ {
+ //List<ERPPickModel> eRPPickModels = new List<ERPPickModel>();
+ //outStockLockInfos.ForEach(x =>
+ //{
+ // ERPPickItemModel pickItemModel = new ERPPickItemModel()
+ // {
+ // Lotno = x.BatchNo,
+ // Qty = x.AssignQuantity.ToString(),
+ // Location = warehouse.WarehouseCode
+ // };
+ // ERPPickModel pickModel = new ERPPickModel()
+ // {
+ // Rowindex = OrderDetail.RowNo,
+ // Material = OrderDetail.MaterielCode,
+ // Qty = pickItemModel.Qty,
+ // Dataitem = new List<ERPPickItemModel> { pickItemModel }
+ // };
+ // eRPPickModels.Add(pickModel);
+ //});
+ //ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
+ //{
+ // Pickcode = outboundOrder.UpperOrderNo,
+ // PickList = eRPPickModels
+ //};
+ //ERPIssueModel issueModel = new ERPIssueModel()
+ //{
+ // UniqueTag = outboundOrder.Id.ToString(),
+ // Code = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)),
+ // WarehouseCode = warehouse.WarehouseCode,
+ // Docremark = "",
+ // Deptno = outboundOrder.DepartmentCode,
+ // Deptname = outboundOrder.DepartmentName,
+ // Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ // Createuser = App.User.UserName,
+ // Issitem = new List<ERPIssueItemModel>() { issueItemModel }
+ //};
+ _invokeERPService.InvokeOutStandardsApi(_outboundService.OutboundOrderService.GetERPIssueModel(outboundOrder, warehouse.WarehouseCode));
+ }
+ #endregion
+
+ return WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ /// <summary>
/// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
/// </summary>
/// <param name="tasks"></param>
@@ -215,19 +425,15 @@
_unitOfWorkManage.BeginTran();
BaseDal.AddData(tasks);
- if (stockInfos != null && outboundOrderDetails != null && outStockLockInfos != null && locationInfos != null)
+ if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
{
WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
- if (content.Status)
- {
- _unitOfWorkManage.CommitTran();
- }
- else
+ if (!content.Status)
{
_unitOfWorkManage.RollbackTran();
+ return content;
}
- return content;
}
else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
{
@@ -239,6 +445,7 @@
_outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
}
_unitOfWorkManage.CommitTran();
+ PushTasksToWCS(tasks);
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -254,7 +461,7 @@
/// </summary>
/// <param name="keys">鍑哄簱鍗曟槑缁嗕富閿�</param>
/// <returns></returns>
- public WebResponseContent GenerateOutboundTask(int[] keys)
+ public WebResponseContent GenerateOutboundTasks(int[] keys)
{
try
{
@@ -308,7 +515,7 @@
{
List<int> keys = _outboundService.OutboundOrderDetailService.Repository.QueryData(x => x.Id, x => x.OrderId == outboundId);
- return GenerateOutboundTask(keys.ToArray());
+ return GenerateOutboundTasks(keys.ToArray());
}
catch (Exception ex)
{
--
Gitblit v1.9.3