From 58a1b8b7db72225e0c2acca4f76399899f1bda4f Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期五, 09 一月 2026 15:14:41 +0800
Subject: [PATCH] 1
---
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 949 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 885 insertions(+), 64 deletions(-)
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index de58589..86d454a 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -80,6 +80,7 @@
using System.Drawing.Printing;
using System;
using WIDESEA_Common.Log;
+using static WIDESEA_Common.HouseInboundPassBack.data.data1;
namespace WIDESEA_TaskInfoService
{
@@ -105,6 +106,7 @@
private readonly IOutboundOrderDetail_HtyService _outboundOrderDetail_HtyService;
private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
+ private readonly INewOutboundOrderDetailRepository _newOutboundOrderDetailRepository;
private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
private readonly IReturnOrderRepository _returnOrderRepository;
private readonly IProductionRepository _productionRepository;
@@ -112,7 +114,7 @@
public ITaskRepository Repository => BaseDal;
- public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository,IInboundRepository inboundRepository) : base(BaseDal)
+ public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository) : base(BaseDal)
{
_mapper = mapper;
_stockRepository = stockRepository;
@@ -137,6 +139,7 @@
_returnOrderRepository = returnOrderRepository;
_productionRepository = productionRepository;
_inboundRepository = inboundRepository;
+ _newOutboundOrderDetailRepository = newOutboundOrderDetailRepository;
}
public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
@@ -167,6 +170,30 @@
return WebResponseContent.Instance.Error($"鏈壘鍒癢CSApi鍦板潃,璇锋鏌ラ厤缃枃浠�");
}
string response = HttpHelper.Post($"{url}/api/Task/ReceiveTask", taskDTOs.Serialize());
+
+ return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent PushTasksWCS(List<Dt_Task> tasks, string agvDescription = "")
+ {
+ try
+ {
+ List<WMSTaskDTO> taskDTOs = _mapper.Map<List<WMSTaskDTO>>(tasks);
+ taskDTOs.ForEach(x =>
+ {
+ x.AGVArea = agvDescription;
+ });
+ string url = AppSettings.app("WCS");
+ if (string.IsNullOrEmpty(url))
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒癢CSApi鍦板潃,璇锋鏌ラ厤缃枃浠�");
+ }
+ string response = HttpHelper.Post($"{url}/api/Task/ReceiveCPTask", taskDTOs.Serialize());
return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
}
@@ -466,36 +493,403 @@
Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
dt_StockInfo.LocationCode = dt_LocationInfo.LocationCode;
-
-
- Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
- Dt_InboundOrderDetail? inboundOrderDetail = null;
-
- // 3. 澶勭悊鍏ュ簱閫昏緫
- if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
+ if (task.TaskType == TaskTypeEnum.InSyncretism.ObjToInt())
{
- return ProcessInbound(task, dt_StockInfo, dt_LocationInfo);
- }
- if (task.TaskType == TaskTypeEnum.SurplusReturn.ObjToInt() || task.TaskType == TaskTypeEnum.ReverseIn.ObjToInt())
- {
- return ReturnInbound(task, dt_StockInfo, dt_LocationInfo);
- }
- if(task.TaskType == TaskTypeEnum.InInventory.ObjToInt())
- {
- int lastStatus = dt_LocationInfo.LocationStatus;
+ int laststatus = dt_LocationInfo.LocationStatus;
dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+ ///鏇存柊搴撳瓨鐘舵��
dt_StockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
// 鏇存柊搴撳瓨鏄庣粏鐘舵��
dt_StockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
- _unitOfWorkManage.BeginTran();
- UpdateTaskStatus(task);
- UpdateLocationStatus(dt_LocationInfo, lastStatus);
- UpdateStockInfo(dt_StockInfo);
- AddRecords(task, dt_StockInfo, dt_LocationInfo, lastStatus);
- _unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK();
+ _unitOfWorkManage.BeginTran();
+
+ // 鏇存柊浠诲姟鐘舵��
+ UpdateTaskStatus(task);
+
+ // 鏇存柊璐т綅鐘舵��
+ UpdateLocationStatus(dt_LocationInfo, laststatus);
+
+ // 鏇存柊搴撳瓨淇℃伅
+ UpdateStockInfo(dt_StockInfo);
+
+ AddRecords(task, dt_StockInfo, dt_LocationInfo, laststatus);
+
+ //杩斿洖smom搴撳瓨绉诲姩鏁版嵁銆傘�傘�傘��
+
+ _unitOfWorkManage.CommitTran();
}
+ else
+ {
+ if (warehouse.WarehouseCode.Contains("CP"))
+ {
+
+ if (task.TaskType == TaskTypeEnum.SurplusReturn.ObjToInt() || task.TaskType == TaskTypeEnum.ReverseIn.ObjToInt())
+ {
+ return ReturnInbound(task, dt_StockInfo, dt_LocationInfo);
+ }
+ // 1. 鑾峰彇鍏ュ簱鍗曚俊鎭�
+ Dt_InboundOrder? inboundOrder = null;
+ if (!string.IsNullOrEmpty(dt_StockInfo.Details.FirstOrDefault()?.OrderNo))
+ {
+ inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>()
+ .Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo)
+ .Includes(x => x.Details)
+ .First();
+ }
+
+ // 3. 澶勭悊鍏ュ簱閫昏緫
+ if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
+ {
+ int lastStatus = dt_LocationInfo.LocationStatus;
+ dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+
+ if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && inboundOrder == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒板叆搴撳崟淇℃伅");
+ }
+ var allBoxCodesForDetail = BaseDal.Db.Queryable<Dt_StockInfoDetailCP>()
+ .Where(x => x.StockDetailId == dt_StockInfo.Details.FirstOrDefault().Id)
+ .Select(x => x.BoxCode)
+ .ToList();
+
+ // 2. 鑾峰彇鎵樼洏涓嬬殑鎵�鏈夌鍙�
+ var boxCodes = new List<string>();
+
+ // 鏂规硶1锛氫粠搴撳瓨鏄庣粏鐨凚oxCodes瀛楁鑾峰彇锛堢粍鐩樻椂淇濆瓨鐨勶級
+ foreach (var detail in allBoxCodesForDetail)
+ {
+ if (!string.IsNullOrEmpty(detail))
+ {
+ var codes = detail.Split(',', StringSplitOptions.RemoveEmptyEntries);
+ boxCodes.AddRange(codes);
+ }
+ }
+
+ // 鏍规嵁鎵樼洏鏄庣粏鑾峰彇瀵瑰簲鐨勫叆搴撳崟鏄庣粏
+ List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
+
+ // 澶勭悊澶氫釜搴撳瓨鏄庣粏鐨勬儏鍐�
+ foreach (var stockDetail in dt_StockInfo.Details)
+ {
+ if (!string.IsNullOrEmpty(stockDetail.OrderNo))
+ {
+ var detail = inboundOrder.Details.FirstOrDefault(x => x.LinId == stockDetail.LinId && x.BatchNo == stockDetail.BatchNo);
+
+ if (detail != null && !inboundOrderDetails.Any(x => x.Id == detail.Id))
+ {
+ inboundOrderDetails.Add(detail);
+ }
+ }
+ }
+
+ if (!inboundOrderDetails.Any())
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍏ュ簱鍗曟槑缁�");
+ }
+
+ // 鏇存柊鍏ュ簱鍗曟槑缁嗙姸鎬�
+ foreach (var inboundOrderDetail in inboundOrderDetails)
+ {
+ // 妫�鏌ヨ鏄庣粏鏄惁宸插叏閮ㄥ叆搴�
+ decimal totalStockQuantity = dt_StockInfo.Details
+ .Where(x => x.LinId == inboundOrderDetail.LinId && x.BatchNo == inboundOrderDetail.BatchNo)
+ .Sum(x => x.StockQuantity);
+
+ decimal orderQuantity = Convert.ToDecimal(inboundOrderDetail.OrderQuantity);
+ decimal receiptQuantity = Convert.ToDecimal(inboundOrderDetail.ReceiptQuantity);
+ decimal overInQuantity = Convert.ToDecimal(inboundOrderDetail.OverInQuantity);
+
+ // 鏇存柊鏀惰揣鏁伴噺
+ inboundOrderDetail.OverInQuantity = totalStockQuantity += overInQuantity;
+
+ // 妫�鏌ユ槸鍚﹀叏閮ㄥ畬鎴�
+ if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
+ {
+ inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ else
+ {
+ inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt();
+ }
+ }
+
+ ///鏇存柊搴撳瓨鐘舵��
+ dt_StockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ // 鏇存柊搴撳瓨鏄庣粏鐘舵��
+ dt_StockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
+
+ // 3. 鏌ヨ鎴愬搧鍏ュ簱鏄庣粏锛圕P鍏ュ簱鍗曟槑缁嗭級
+ List<Dt_CPInboundOrderDetail> cpInboundDetails = new List<Dt_CPInboundOrderDetail>();
+ if (boxCodes.Any())
+ {
+ cpInboundDetails = BaseDal.Db.Queryable<Dt_CPInboundOrderDetail>()
+ .Where(x => boxCodes.Contains(x.BoxCode))
+ .ToList();
+ }
+
+ // 鏇存柊鎴愬搧鍏ュ簱鏄庣粏鐘舵��
+ if (cpInboundDetails.Any())
+ {
+ foreach (var cpDetail in cpInboundDetails)
+ {
+ cpDetail.CPOrderDetailStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ }
+
+ // 4. 鏌ヨ骞舵洿鏂版垚鍝佸簱瀛樻槑缁嗭紙濡傛灉鏈夊崟鐙殑鎴愬搧搴撳瓨琛級
+ List<Dt_StockInfoDetailCP> cpStockDetails = new List<Dt_StockInfoDetailCP>();
+ if (boxCodes.Any())
+ {
+ cpStockDetails = BaseDal.Db.Queryable<Dt_StockInfoDetailCP>()
+ .Where(x => boxCodes.Contains(x.BoxCode))
+ .ToList();
+
+ // 鏇存柊鎴愬搧搴撳瓨鏄庣粏鐘舵��
+ foreach (var cpStockDetail in cpStockDetails)
+ {
+ cpStockDetail.CPStockDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ }
+
+ try
+ {
+ _unitOfWorkManage.BeginTran();
+
+ // 鏇存柊浠诲姟鐘舵��
+ UpdateTaskStatus(task);
+
+ // 鏇存柊璐т綅鐘舵��
+ UpdateLocationStatus(dt_LocationInfo, lastStatus);
+
+ // 鏇存柊搴撳瓨淇℃伅
+ UpdateStockInfo(dt_StockInfo);
+
+ // 娣诲姞璁板綍
+ AddRecords(task, dt_StockInfo, dt_LocationInfo, lastStatus);
+
+ // 鏇存柊鍏ュ簱鍗曟槑缁�
+ if (inboundOrderDetails.Any())
+ {
+ BaseDal.Db.Updateable(inboundOrderDetails).ExecuteCommand();
+
+ // 妫�鏌ュ叆搴撳崟鏄惁鍏ㄩ儴瀹屾垚
+ bool allCompleted = inboundOrder.Details.All(x =>
+ x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+
+ if (allCompleted)
+ {
+ inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+ }
+ else
+ {
+ inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt();
+ }
+ }
+
+ // 鏇存柊鍏ュ簱鍗�
+ UpdateInboundOrder(inboundOrder, inboundOrderDetails.FirstOrDefault());
+
+ // 鏇存柊鎴愬搧鍏ュ簱鏄庣粏鐘舵��
+ if (cpInboundDetails.Any())
+ {
+ BaseDal.Db.Updateable(cpInboundDetails).ExecuteCommand();
+ }
+
+ // 鏇存柊鎴愬搧搴撳瓨鏄庣粏鐘舵��
+ if (cpStockDetails.Any())
+ {
+ BaseDal.Db.Updateable(cpStockDetails).ExecuteCommand();
+ }
+
+ // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
+ if (inboundOrderDetails.Any(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) && inboundOrder.System.Equals("ERP"))
+ {
+ foreach (var detail in inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()))
+ {
+ FeedBackInboundERP(inboundOrder.UpperOrderNo, detail.LinId);
+ }
+ }
+ if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
+ {
+ List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db
+ .Queryable<Dt_StockInfo>()
+ .Includes(x => x.Details, d => d.StockDetails)
+ .Where(x => x.WarehouseId == task.WarehouseId &&
+ x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo))
+ .ToList();
+
+ if (StockInfos.Count == 0) throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
+ var houseInboundPassBack = new HouseInboundPassBack
+ {
+ ApiType = "AsnController",
+ Method = "AsrsGroudingAsn",
+ Parameters = new List<HouseInboundPassBack.data>
+ {
+ new HouseInboundPassBack.data
+ {
+ Value = new List<data.data1>
+ {
+ new data.data1
+ {
+ AsnNo = inboundOrder.OrderNo,
+ //InWarehouse = task.Roadway,
+ TransactionCode = inboundOrder.TransactionCode,
+ InoutType = inboundOrder.OrderType,
+ OrderType = inboundOrder.InoutType,
+ // 閬嶅巻鎵�鏈夊簱瀛樻槑缁嗭紝娣诲姞鍒� DetailList
+ DetailList = StockInfos.Select(d => new data.data1.Inbound
+ {
+ LinId = d.Details.FirstOrDefault()?.LinId?? "",
+ MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
+ OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
+ BatchNo = d.Details.FirstOrDefault()?.BatchNo,
+ LPNNo = d.PalletCode,
+ FinishQty = d.Details.FirstOrDefault().StockQuantity,
+ LocationName = d.LocationCode,
+ LabelList= d.Details
+ .Where(detail => detail.StockDetails != null)
+ .SelectMany(detail => detail.StockDetails)
+ .Where(stockDetail => !string.IsNullOrEmpty(stockDetail.BoxCode))
+ .Select(stockDetail => stockDetail.BoxCode )
+ .ToList()
+ }).ToList()
+ }
+ }
+ }
+ }
+ };
+
+ //var authResult = AuthenticateWithWMS();
+ //if (authResult.IsSuccess)
+ //{
+ // houseInboundPassBack.Context = new Dictionary<string, string>
+ // {
+ // { "Ticket", authResult.Ticket },
+ // { "InvOrgId", authResult.InvOrgId }
+ // };
+
+ // var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseInboundPassBack, "绔嬪簱鍏ュ簱鏁伴噺鍥炰紶WMS");
+ // // 鍒ゆ柇Success鐨勫��
+ // if (!response.Success)
+ // {
+ // throw new Exception($"鎿嶄綔澶辫触: {response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
+ // }
+
+ //}
+
+ }
+ else if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
+ {
+ List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db
+ .Queryable<Dt_StockInfo>()
+ .Includes(x => x.Details, d => d.StockDetails)
+ .Where(x => x.WarehouseId == task.WarehouseId &&
+ x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo))
+ .ToList();
+ if (StockInfos.Count == 0) throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
+ var inventoryAllocate = new InventoryAllocate
+ {
+ ApiType = "InventoryAllocateController",
+ Method = "AsrsFinishedStockCount",
+ Parameters = new List<InventoryAllocate.Allocate>
+ {
+ new InventoryAllocate.Allocate
+ {
+ Value = new List<Allocate.data1>
+ {
+ new Allocate.data1
+ {
+ No = inboundOrder.OrderNo,
+ //InWarehouse = task.Roadway,
+ TransactionCode = inboundOrder.TransactionCode,
+ InoutType = inboundOrder.OrderType,
+ OrderType = inboundOrder.InoutType,
+ ActiveType=1,
+ DetailList = StockInfos.Select(d => new Allocate.data1.Inventory
+ {
+ LinId = d.Details.FirstOrDefault()?.LinId?? "",
+ MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
+ OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
+ BatchNo = d.Details.FirstOrDefault()?.BatchNo,
+ LPNNo = d.PalletCode,
+ FinishQty = d.Details.FirstOrDefault().StockQuantity,
+ LocationName = d.LocationCode,
+ OrinalLocation=d.Details.FirstOrDefault()?.OrinalLocation,
+ LabelList= d.Details
+ .Where(detail => detail.StockDetails != null)
+ .SelectMany(detail => detail.StockDetails)
+ .Where(stockDetail => !string.IsNullOrEmpty(stockDetail.BoxCode))
+ .Select(stockDetail => stockDetail.BoxCode )
+ .ToList()
+ }).ToList()
+ }
+ }
+ }
+ }
+ };
+
+ //var authResult = AuthenticateWithWMS();
+ //if (authResult.IsSuccess)
+ //{
+ // inventoryAllocate.Context = new Dictionary<string, string>
+ // {
+ // { "Ticket", authResult.Ticket },
+ // { "InvOrgId", authResult.InvOrgId }
+ // };
+
+ // var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "璋冩嫧鍏ュ簱鏁伴噺鍥炰紶WMS");
+ // if (!response.Success)
+ // {
+ // throw new Exception($"鎿嶄綔澶辫触锛歿response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
+ // }
+ //}
+ }
+
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ throw new Exception($"鍏ュ簱澶勭悊澶辫触锛歿ex.Message}", ex);
+ }
+ }
+ }
+ else
+ {
+ Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
+ Dt_InboundOrderDetail? inboundOrderDetail = null;
+
+ // 3. 澶勭悊鍏ュ簱閫昏緫
+ if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
+ {
+ return ProcessInbound(task, dt_StockInfo, dt_LocationInfo);
+ }
+ if (task.TaskType == TaskTypeEnum.SurplusReturn.ObjToInt() || task.TaskType == TaskTypeEnum.ReverseIn.ObjToInt())
+ {
+ return ReturnInbound(task, dt_StockInfo, dt_LocationInfo);
+ }
+ if (task.TaskType == TaskTypeEnum.InInventory.ObjToInt())
+ {
+ int lastStatus = dt_LocationInfo.LocationStatus;
+ dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+ dt_StockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ // 鏇存柊搴撳瓨鏄庣粏鐘舵��
+ dt_StockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
+ _unitOfWorkManage.BeginTran();
+ UpdateTaskStatus(task);
+ UpdateLocationStatus(dt_LocationInfo, lastStatus);
+ UpdateStockInfo(dt_StockInfo);
+ AddRecords(task, dt_StockInfo, dt_LocationInfo, lastStatus);
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK();
+
+ }
+ }
+ }
+
+
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -592,7 +986,7 @@
}
if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
{
- SendInboundInfoToWMS(task, inboundOrder, stockInfo);
+ //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
}
else if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
{
@@ -887,7 +1281,7 @@
System = returnOrder.System,
}
}
- }
+ }
}
};
var authResult = AuthenticateWithWMS();
@@ -910,7 +1304,7 @@
// 濡傛灉Success涓篺alse锛屾姏鍑哄紓甯稿苟鍖呭惈閿欒淇℃伅
throw new Exception($"鎿嶄綔澶辫触: {response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
}
-
+
}
return WebResponseContent.Instance.OK();
}
@@ -990,7 +1384,7 @@
MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
BatchNo = d.BatchNo,
- LPN_No = d.PalletCode,
+ LPNNo = d.PalletCode,
FinishQty = d.Details.FirstOrDefault().StockQuantity,
LocationName = d.LocationCode
}).ToList()
@@ -1072,41 +1466,260 @@
if (!validationResult.Status) return validationResult;
int lastStatus = locationInfo.LocationStatus;
- Dt_Task task1 = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
- if (task1 == null)
- {
- return WebResponseContent.Instance.Error("鏈壘鍒拌浠诲姟淇℃伅");
- }
+
///鐩樼偣鍑哄簱浠诲姟瀹屾垚閫昏緫
- if ((task.TaskType == TaskTypeEnum.OutInventory.ObjToInt()))
+ if (task.TaskType == TaskTypeEnum.OutInventory.ObjToInt())
{
return OutInventoryCompleted(task, stockInfo, locationInfo);
}
- Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
- .Where(x => x.OrderNo == task1.OrderNo)
- .Includes(x => x.Details)
- .First();
-
- if (inboundOrder == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
-
- Dt_OutboundOrderDetail outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo)
- .First();
- if (outboundOrderDetails.LocationName != null && outboundOrderDetails.LocationName != "")
+ if (task.TaskType == TaskTypeEnum.OutSyncretism.ObjToInt())
{
- outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo && x.LocationName == stockInfo.LocationCode)
- .First();
+ stockInfo.StockStatus = StockStatusEmun.鍚堟墭鍑哄簱瀹屾垚.ObjToInt();
+ stockInfo.Details.ForEach(x =>
+ {
+ x.Status = StockStatusEmun.鍚堟墭鍑哄簱瀹屾垚.ObjToInt();
+ });
+ _unitOfWorkManage.BeginTran();
+ _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+ _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
+ BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
+ _unitOfWorkManage.CommitTran();
}
- if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+ else
+ {
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
- // 2. 澶勭悊鍑哄簱璁㈠崟璇︽儏
- //var outboundOrderDetails = ProcessOutboundOrderDetails(outStockLockInfos);
+ if (warehouse.WarehouseCode.Contains("CP"))
+ {
+ try
+ {
+ Dt_NewOutboundOrder outboundOrder = _outboundService.NewOutboundOrderService.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details)
+ .First();
- UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
+ Dt_NewOutboundOrderDetail outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
+ .Where(x => x.OrderId == outboundOrder.Id && x.LocationName == stockInfo.LocationCode&&x.LPNNo==stockInfo.PalletCode)
+ .First();
+ //List<Dt_StockInfoDetail> stockInfoDetail = _stockInfoDetailRepository.QueryData(x => x.StockId == stockInfo.Id).ToList();
+ //foreach (var item in stockInfoDetail)
+ //{
+ // outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
+ // .Where(x => x.OrderId == outboundOrder.Id && x.BatchNo == item.BatchNo && x.LocationName == stockInfo.LocationCode)
+ // .First();
- // 3. 鎵ц鏍稿績鍑哄簱閫昏緫
- return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
+ // item.OutboundQuantity += outboundOrderDetails.OverOutQuantity;
+ //}
+
+ int overCount = outboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+
+ foreach (var item in stockInfo.Details)
+ {
+ if (outboundOrderDetails == null) continue;
+
+ outboundOrderDetails.OverOutQuantity += item.OutboundQuantity;
+
+ if (outboundOrderDetails.OverOutQuantity == outboundOrderDetails.OrderQuantity)
+ {
+ outboundOrderDetails.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ overCount++;
+ }
+ }
+ if (outboundOrder.Details.Count == overCount)
+ {
+ outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ }
+
+ _unitOfWorkManage.BeginTran();
+ ///鏇存柊鍑哄簱鍗�
+ _outboundService.NewOutboundOrderService.Repository.UpdateData(outboundOrder);
+ // 鏇存柊鍑哄簱璁㈠崟璇︽儏
+ _outboundService.NewOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+
+ // 鏇存柊搴撳瓨鐘舵��
+ AddCPRetrueOrder(stockInfo, outboundOrder, outboundOrderDetails);
+
+ // 鍖哄垎鍗曟嵁鏁版嵁鏉ユ簮鏇存柊璐т綅鐘舵��
+ if (outboundOrder.System == null)
+ {
+ return WebResponseContent.Instance.Error("鍑哄簱鍗曟暟鎹簮涓虹┖");
+ }
+ if (!outboundOrder.System.Equals("SMOM"))
+ {
+ UpdateLocationStatus(locationInfo);
+ }
+ // 澶勭悊浠诲姟瀹屾垚
+ CompleteTask(task);
+
+ // 娣诲姞鐘舵�佸彉鏇磋褰�
+ AddStatusChangeRecord(task, stockInfo, locationInfo);
+
+ string path = "http://fr.mankun.com:8080/webroot/decision/view/report?viewlet=fr-report\\SMOM/Product/Produce/OutBoundDetileReport.cpt&op=write&format=pdf";
+ string fullPath = AppDomain.CurrentDomain.BaseDirectory;
+ var url = Path.Combine(fullPath, "wwwroot", "Reports");
+ string savePath = Path.Combine(url, "鏈鍑哄簱.pdf");
+
+
+ if (outboundOrderDetails.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && outboundOrder.System.Equals("ERP"))
+ {
+ FeedBackOutERP(outboundOrder.OrderNo, outboundOrderDetails.LinId);
+ DownloadReport(path, savePath, outboundOrderDetails.Id);
+ }
+ ///鍗曟嵁瀹屾垚鎺ㄩ�丼MOM绯荤粺
+ if (outboundOrder.OrderStatus == OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && outboundOrder.System.Equals("SMOM"))
+ {
+ var stockInfoDetail1 = stockInfo.Details.FirstOrDefault();
+ List<Dt_OutStockLockInfo> outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.OrderNo == outboundOrder.OrderNo);
+
+ if (outStockLockInfo.Count == 0) throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
+ //閲囪喘鍑哄簱
+ if (outboundOrder.OrderType == 1)
+ {
+ var passBack = new HouseoutboundPassBack
+ {
+ ApiType = "ShippingOrderController",
+ Method = "AsrsOutboundSO",
+ Parameters = new List<HouseoutboundPassBack.datas>
+ {
+ new HouseoutboundPassBack.datas
+ {
+ Value = new List<HouseoutboundPassBack.datas.data1>
+ {
+ new HouseoutboundPassBack.datas.data1
+ {
+ No = outboundOrder.OrderNo,
+ OutWareHouse = task.Roadway,
+ TransactionCode = outboundOrder.TransactionCode,
+ InoutType = outboundOrder.OrderType,
+ OrderType = outboundOrder.InoutType,
+ DetailList = outStockLockInfo.Select(d => new HouseoutboundPassBack.datas.data1.Inbound
+ {
+ LinId = d.LinId?? "",
+ LPN_No = d.PalletCode,
+ MaterielCode = d.MaterielCode?? "",
+ OrderQuantity = d.OrderQuantity,
+ BatchNo = d.BatchNo,
+ FinishQty = d.OrderQuantity,
+ LocationName = d.LocationCode
+ })
+ .ToList()
+
+ }
+ }
+ }
+ }
+ };
+
+ // var authResult = AuthenticateWithWMS();
+ // if (authResult.IsSuccess)
+ // {
+ // passBack.Context = new Dictionary<string, string>
+ //{
+ // { "Ticket", authResult.Ticket },
+ // { "InvOrgId", authResult.InvOrgId }
+ //};
+ // var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskout, passBack, "绔嬪簱鍑哄簱鏁伴噺鍥炰紶WMS");
+ // if (!response.Success)
+ // {
+ // throw new Exception($"鎿嶄綔澶辫触: {response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
+ // }
+ // }
+ }
+ //璋冩嫧鍑哄簱
+ if (outboundOrder.OrderType == 2)
+ {
+ var allocate = new InventoryAllocate
+ {
+ ApiType = "InventoryAllocateController",
+ Method = "AsrsFinishedStockCount",
+ Parameters = new List<Allocate>
+ {
+ new Allocate
+ {
+ Value = new List<Allocate.data1>
+ {
+ new Allocate.data1
+ {
+ No = outboundOrder.OrderNo,
+ InWarehouse = task.Roadway,
+ TransactionCode = outboundOrder.TransactionCode,
+ InoutType = outboundOrder.OrderType,
+ OrderType = outboundOrder.InoutType,
+ ActiveType=2,
+ DetailList = outStockLockInfo.Select(item =>
+ {
+ return new Allocate.data1.Inventory
+ {
+ LinId = outboundOrderDetails.LinId,
+ LPNNo = item.PalletCode,
+ MaterielCode = outboundOrderDetails.MaterielCode,
+ OrderQuantity = outboundOrderDetails.OrderQuantity,
+ BatchNo = outboundOrderDetails.BatchNo,
+ FinishQty = outboundOrderDetails.OrderQuantity,
+ OrinalLocation=outboundOrderDetails.OrinalLocation,
+ LocationName = task.SourceAddress
+ };
+ }).ToList()
+ }
+ }
+ }
+ }
+ };
+
+ //var authResult = AuthenticateWithWMS();
+ //if (authResult.IsSuccess)
+ //{
+ // allocate.Context = new Dictionary<string, string>
+ //{
+ // { "Ticket", authResult.Ticket },
+ // { "InvOrgId", authResult.InvOrgId }
+ //};
+ // var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, allocate, "绔嬪簱鍏ュ簱鏁伴噺鍥炰紶WMS");
+ // if (!response.Success)
+ // {
+ // throw new Exception($"鎿嶄綔澶辫触: {response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
+ // }
+ //}
+ }
+ }
+
+ if (outboundOrder.OrderType == 240) // 鐩樼偣鍑哄簱
+ {
+ // 鐩樼偣鍑哄簱鐗规畩澶勭悊閫昏緫
+ }
+
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK();
+ }
+ catch
+ {
+ _unitOfWorkManage.RollbackTran();
+ throw;
+ }
+ }
+ else
+ {
+ Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+ .Where(x => x.OrderNo == task.OrderNo)
+ .Includes(x => x.Details)
+ .First();
+
+ if (inboundOrder == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+
+ Dt_OutboundOrderDetail outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
+ .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo)
+ .First();
+ if (outboundOrderDetails.LocationName != null && outboundOrderDetails.LocationName != "")
+ {
+ outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
+ .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo && x.LocationName == stockInfo.LocationCode)
+ .First();
+ }
+ if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+ UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
+ // 3. 鎵ц鏍稿績鍑哄簱閫昏緫
+ return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
+ }
+ }
+ return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
@@ -1136,7 +1749,7 @@
if (stockInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
if (locationInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒拌揣浣嶄俊鎭�");
- if ((outStockLockInfos == null || outStockLockInfos.Count == 0)&& task.TaskType != TaskTypeEnum.OutInventory.ObjToInt())
+ if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && task.TaskType != TaskTypeEnum.OutInventory.ObjToInt())
return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撹鎯呬俊鎭�");
return WebResponseContent.Instance.OK();
@@ -1174,7 +1787,7 @@
// 鏇存柊鍑哄簱璁㈠崟璇︽儏
_outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
- // 鏇存柊搴撳瓨鐘舵��
+ // 鏇存柊搴撳瓨鐘舵�� 鍥炲簱鍗�
AddRetrueOrder(stockInfo, inboundOrder);
// 鍖哄垎鍗曟嵁鏁版嵁鏉ユ簮鏇存柊璐т綅鐘舵��
@@ -1237,7 +1850,7 @@
private void UpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder, ref Dt_OutboundOrderDetail inboundOrderDetail)
{
int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
- inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo);
+ //inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo&&x.LPNNo==stockInfo.PalletCode);
foreach (var item in stockInfo.Details)
{
@@ -1322,7 +1935,7 @@
// 鍙戦�佸嚭搴撲俊鎭埌WMS
if (outboundOrder.OrderStatus == OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && outboundOrder.OrderType == 1)
{
- SendNormalOutboundToWMS(task, outboundOrder, stockInfoDetail, outDetail);
+ //SendNormalOutboundToWMS(task, outboundOrder, stockInfoDetail, outDetail);
}
else if (outboundOrder.OrderStatus == OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && outboundOrder.OrderType == 2)
{
@@ -1482,15 +2095,15 @@
OrderType = outboundOrder.InoutType,
DetailList = outStockLockInfos.Select(item =>
{
- var detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
+ //var detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.StockId);
return new Allocate.data1.Inventory
{
LinId = outDetail.LinId,
- LPN_No = item.PalletCode,
- MaterielCode = detail.MaterielCode,
- OrderQuantity = detail.OutboundQuantity,
- BatchNo = detail.BatchNo,
- FinishQty = detail.OutboundQuantity,
+ LPNNo = item.PalletCode,
+ MaterielCode = outDetail.MaterielCode,
+ OrderQuantity = outDetail.OrderQuantity,
+ BatchNo = outDetail.BatchNo,
+ FinishQty = outDetail.OrderQuantity,
LocationName = task.SourceAddress
};
}).ToList()
@@ -1587,6 +2200,214 @@
}
}
+
+ //鎴愬搧鍥炲簱鍗�
+ private void AddCPRetrueOrder(Dt_StockInfo stockInfo, Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail)
+ {
+ List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.StockId == stockInfo.Id)
+ .ToList();
+
+ if (stockInfoDetails == null || stockInfoDetails.Count == 0)
+ {
+ throw new Exception("寤虹珛鍥炲簱鍗曟椂锛屾湭鎵惧埌璇ュ簱瀛樹俊鎭�");
+ }
+
+ // 鎵惧埌涓庡綋鍓嶅嚭搴撳崟鏄庣粏鍖归厤鐨勫簱瀛樻槑缁�
+ var matchedStockDetail = stockInfoDetails.FirstOrDefault(x =>
+ x.MaterielCode == outboundOrderDetail.MaterielCode &&
+ x.BatchNo == outboundOrderDetail.BatchNo);
+
+ if (matchedStockDetail == null)
+ {
+ throw new Exception($"鏈壘鍒板尮閰嶇殑搴撳瓨鏄庣粏淇℃伅锛岀墿鏂�:{outboundOrderDetail.MaterielCode}, 鎵规:{outboundOrderDetail.BatchNo}");
+ }
+
+ if (outboundOrder.OrderType == OrderTypeEnum.鍙嶆嫞鍑哄簱鍗�.ObjToInt())
+ {
+ Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x =>
+ x.LPNNo == stockInfo.PalletCode &&
+ x.LocationCode == stockInfo.LocationCode &&
+ x.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt());
+
+ if (returnOrder == null)
+ {
+ throw new Exception("鍙嶆嫞鍑哄簱鍚庯紝鏈壘鍒板搴斿弽鎷e洖搴撳崟淇℃伅");
+ }
+
+ // 鍙噺鍘诲崟鎹槑缁嗕腑鐨勬暟閲�
+ matchedStockDetail.OutboundQuantity = 0;
+ matchedStockDetail.StockQuantity = outboundOrderDetail.OrderQuantity;
+ matchedStockDetail.OrderNo = returnOrder.OrderNo;
+
+ // 鏇存柊搴撳瓨鐘舵��
+ stockInfo.LocationCode = "";
+ stockInfo.StockStatus = StockStatusEmun.鍙嶆嫞鍏ュ簱.ObjToInt();
+ stockInfo.Remark = "鍙嶆嫞鍏ュ簱";
+
+ // 鏇存柊鍖归厤鐨勬槑缁�
+ _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail);
+ }
+ else
+ {
+ // 璁$畻褰撳墠鎵规鐨勫墿浣欐暟閲�
+ decimal remainingQuantity = matchedStockDetail.StockQuantity - outboundOrderDetail.OrderQuantity;
+
+ _unitOfWorkManage.BeginTran();
+
+ try
+ {
+ if (remainingQuantity > 0)
+ {
+ // 涓哄綋鍓嶆壒娆″垱寤鸿繑搴撳崟
+ Dt_ReturnOrder returnOrder = new Dt_ReturnOrder
+ {
+ MaterielCode = matchedStockDetail.MaterielCode,
+ MaterielName = matchedStockDetail.MaterielName,
+ BatchNo = matchedStockDetail.BatchNo,
+ OrderQuantity = remainingQuantity,
+ ReceiptQuantity = remainingQuantity,
+ OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ LinId = matchedStockDetail.LinId,
+ LPNNo = stockInfo.PalletCode,
+ Creater = "LK",
+ CreateDate = DateTime.Now,
+ OrderType = OrderTypeEnum.浣欐枡鍥炲簱鍗�.ObjToInt(),
+ System = "WMS"
+ };
+
+ if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
+ {
+ returnOrder.LocationCode = stockInfo.LocationCode;
+ }
+
+ // 娣诲姞杩斿簱鍗�
+ _returnOrderRepository.AddData(returnOrder);
+
+ // 鏇存柊褰撳墠鎵规鏄庣粏锛氬彧淇濈暀鍑哄簱鏁伴噺锛屽叾浣欒繑搴�
+ matchedStockDetail.StockQuantity = outboundOrderDetail.OrderQuantity;
+ matchedStockDetail.OutboundQuantity = outboundOrderDetail.OrderQuantity;
+ matchedStockDetail.OrderNo = returnOrder.OrderNo;
+
+ _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail);
+
+ // 澶勭悊鍏朵粬鎵规鐨勫簱瀛樻槑缁嗭紙鍏ㄩ儴杩斿簱锛�
+ var otherBatchDetails = stockInfoDetails
+ .Where(x => x.Id != matchedStockDetail.Id && x.StockQuantity > 0)
+ .ToList();
+
+ foreach (var otherDetail in otherBatchDetails)
+ {
+ if (otherDetail.StockQuantity > 0)
+ {
+ // 涓哄叾浠栨壒娆″垱寤鸿繑搴撳崟
+ Dt_ReturnOrder otherReturnOrder = new Dt_ReturnOrder
+ {
+ MaterielCode = otherDetail.MaterielCode,
+ MaterielName = otherDetail.MaterielName,
+ BatchNo = otherDetail.BatchNo,
+ OrderQuantity = otherDetail.StockQuantity,
+ ReceiptQuantity = otherDetail.StockQuantity,
+ OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ LinId = otherDetail.LinId,
+ LPNNo = stockInfo.PalletCode,
+ Creater = "LK",
+ CreateDate = DateTime.Now,
+ OrderType = OrderTypeEnum.浣欐枡鍥炲簱鍗�.ObjToInt(),
+ System = "WMS"
+ };
+
+ if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
+ {
+ otherReturnOrder.LocationCode = stockInfo.LocationCode;
+ }
+
+ _returnOrderRepository.AddData(otherReturnOrder);
+
+ // 鍏朵粬鎵规鍏ㄩ儴杩斿簱锛屽簱瀛樻竻闆�
+ otherDetail.StockQuantity = 0;
+ otherDetail.OutboundQuantity = 0;
+ otherDetail.OrderNo = otherReturnOrder.OrderNo;
+
+ _stockService.StockInfoDetailService.Repository.UpdateData(otherDetail);
+ }
+ }
+
+ // 鏇存柊搴撳瓨涓昏〃鐘舵��
+ stockInfo.LocationCode = "";
+ stockInfo.StockStatus = StockStatusEmun.浣欐枡閫�搴�.ObjToInt();
+ stockInfo.Remark = "浣欐枡閫�搴�";
+ _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+ }
+ else if (remainingQuantity == 0)
+ {
+ // 褰撳墠鎵规姝eソ鍑哄畬
+ matchedStockDetail.OutboundQuantity = matchedStockDetail.StockQuantity;
+ _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(matchedStockDetail, App.User.UserId == 0 ? OperateType.鑷姩瀹屾垚 : OperateType.浜哄伐瀹屾垚);
+
+ // 鍏朵粬鎵规鍏ㄩ儴杩斿簱
+ var otherBatchDetails = stockInfoDetails
+ .Where(x => x.Id != matchedStockDetail.Id && x.StockQuantity > 0)
+ .ToList();
+
+ foreach (var otherDetail in otherBatchDetails)
+ {
+ if (otherDetail.StockQuantity > 0)
+ {
+ Dt_ReturnOrder otherReturnOrder = new Dt_ReturnOrder
+ {
+ MaterielCode = otherDetail.MaterielCode,
+ MaterielName = otherDetail.MaterielName,
+ BatchNo = otherDetail.BatchNo,
+ OrderQuantity = otherDetail.StockQuantity,
+ ReceiptQuantity = otherDetail.StockQuantity,
+ OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ LinId = otherDetail.LinId,
+ LPNNo = stockInfo.PalletCode,
+ Creater = "LK",
+ CreateDate = DateTime.Now,
+ OrderType = OrderTypeEnum.浣欐枡鍥炲簱鍗�.ObjToInt(),
+ System = "WMS"
+ };
+
+ if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
+ {
+ otherReturnOrder.LocationCode = stockInfo.LocationCode;
+ }
+
+ _returnOrderRepository.AddData(otherReturnOrder);
+ }
+ }
+
+ // 濡傛灉鎵�鏈夋壒娆¢兘鍑哄畬浜嗭紝鍒犻櫎搴撳瓨
+ var totalRemaining = stockInfoDetails.Sum(x => x.StockQuantity);
+ if (totalRemaining == 0)
+ {
+ DeleteAndMoveIntoHtStockStatus(stockInfo);
+ }
+ else
+ {
+ // 杩樻湁搴撳瓨锛屾洿鏂扮姸鎬�
+ stockInfo.LocationCode = "";
+ stockInfo.StockStatus = StockStatusEmun.浣欐枡閫�搴�.ObjToInt();
+ stockInfo.Remark = "浣欐枡閫�搴�";
+ _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+ }
+ }
+ else
+ {
+ throw new Exception($"鍑哄簱鏁伴噺 {outboundOrderDetail.OrderQuantity} 澶т簬搴撳瓨鏁伴噺 {matchedStockDetail.StockQuantity}");
+ }
+
+ _unitOfWorkManage.CommitTran();
+ }
+ catch
+ {
+ _unitOfWorkManage.RollbackTran();
+ throw;
+ }
+ }
+ }
/// <summary>
/// 鍗曟嵁鏄庣粏鍑哄簱瀹屾垚鍥炶皟ERP(琛ㄥ崟鎻愪氦)
/// </summary>
--
Gitblit v1.9.3