From 821397b01a004f8560c987ef83146614a9356ecb Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期六, 03 一月 2026 17:18:36 +0800
Subject: [PATCH] 1
---
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 754 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 691 insertions(+), 63 deletions(-)
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index de58589..49f4eec 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("杩斿洖閿欒");
}
@@ -467,35 +494,367 @@
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 (warehouse.WarehouseCode.Contains("CP"))
{
- 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();
+ // 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,
+ 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,
+ 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 +951,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 +1246,7 @@
System = returnOrder.System,
}
}
- }
+ }
}
};
var authResult = AuthenticateWithWMS();
@@ -910,7 +1269,7 @@
// 濡傛灉Success涓篺alse锛屾姏鍑哄紓甯稿苟鍖呭惈閿欒淇℃伅
throw new Exception($"鎿嶄綔澶辫触: {response.Message ?? "鏈彁渚涢敊璇俊鎭�"}");
}
-
+
}
return WebResponseContent.Instance.OK();
}
@@ -990,7 +1349,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 +1431,242 @@
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()))
{
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();
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
- 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 (warehouse.WarehouseCode.Contains("CP"))
{
- outboundOrderDetails = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == stockInfo.Details.FirstOrDefault().BatchNo && x.LocationName == stockInfo.LocationCode)
- .First();
+ try
+ {
+ Dt_NewOutboundOrder outboundOrder = _outboundService.NewOutboundOrderService.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details)
+ .First();
+
+ Dt_NewOutboundOrderDetail outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
+ .Where(x => x.OrderId == outboundOrder.Id && x.LocationName == stockInfo.LocationCode)
+ .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();
+
+ // 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);
+
+ // 鍖哄垎鍗曟嵁鏁版嵁鏉ユ簮鏇存柊璐т綅鐘舵��
+ 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,
+ DetailList = outStockLockInfos.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,
+ 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;
+ }
}
- if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+ else
+ {
+ Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+ .Where(x => x.OrderNo == task.OrderNo)
+ .Includes(x => x.Details)
+ .First();
- // 2. 澶勭悊鍑哄簱璁㈠崟璇︽儏
- //var outboundOrderDetails = ProcessOutboundOrderDetails(outStockLockInfos);
+ if (inboundOrder == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
- UpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
+ 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);
+ }
- // 3. 鎵ц鏍稿績鍑哄簱閫昏緫
- return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
}
catch (Exception ex)
{
@@ -1136,7 +1696,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();
@@ -1237,7 +1797,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)
{
@@ -1482,15 +2042,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 +2147,74 @@
}
}
+
+ //鎴愬搧鍥炲簱鍗�
+ private void AddCPRetrueOrder(Dt_StockInfo stockInfo, Dt_NewOutboundOrder outboundOrder)
+ {
+ Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.StockId == stockInfo.Id)
+ .First();
+ if (stockInfoDetail == null)
+ {
+ throw new Exception("寤虹珛鍥炲簱鍗曟椂锛屾湭鎵惧埌璇ュ簱瀛樹俊鎭�");
+ }
+ 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洖搴撳崟淇℃伅");
+ }
+ stockInfo.LocationCode = "";
+ stockInfo.StockStatus = StockStatusEmun.鍙嶆嫞鍏ュ簱.ObjToInt();
+ stockInfo.Remark = "鍙嶆嫞鍏ュ簱";
+ stockInfoDetail.OutboundQuantity = 0;
+ stockInfoDetail.StockQuantity += returnOrder.OrderQuantity;
+ stockInfoDetail.OrderNo = returnOrder.OrderNo;
+ }
+ else
+ {
+ decimal returnQuantity = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity;
+ if (returnQuantity > 0)
+ {
+ Dt_ReturnOrder returnOrder = new Dt_ReturnOrder
+ {
+ MaterielCode = stockInfoDetail.MaterielCode,
+ MaterielName = stockInfoDetail.MaterielName,
+ BatchNo = stockInfoDetail.BatchNo,
+ OrderQuantity = returnQuantity,
+ ReceiptQuantity = returnQuantity,
+ OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+ LinId = stockInfoDetail.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;
+ }
+ _unitOfWorkManage.BeginTran();
+ _returnOrderRepository.AddData(returnOrder);
+ stockInfo.LocationCode = "";
+ stockInfo.StockStatus = StockStatusEmun.浣欐枡閫�搴�.ObjToInt();
+ stockInfo.Remark = "浣欐枡閫�搴�";
+ stockInfoDetail.OutboundQuantity = 0;
+ stockInfoDetail.StockQuantity = returnQuantity;
+ stockInfoDetail.OrderNo = returnOrder.OrderNo;
+ _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+ _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
+ _unitOfWorkManage.CommitTran();
+ }
+ else
+ {
+ DeleteAndMoveIntoHtStockStatus(stockInfo);
+ }
+ }
+
+ }
/// <summary>
/// 鍗曟嵁鏄庣粏鍑哄簱瀹屾垚鍥炶皟ERP(琛ㄥ崟鎻愪氦)
/// </summary>
--
Gitblit v1.9.3