From 96f8501cc973232b340e36a61992ec1ad47e4a31 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期六, 12 七月 2025 11:10:34 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/JiAnLiKu
---
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs | 393 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 337 insertions(+), 56 deletions(-)
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
index 7d59493..eb22505 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -15,6 +15,9 @@
using static WIDESEA_Common.HouseInventoryIn;
using WIDESEA_Common;
using Parameter = WIDESEA_Common.Parameter;
+using WIDESEA_Core.LogHelper;
+using WIDESEA_DTO.Task;
+using WIDESEA_Core.TaskEnum;
namespace WIDESEA_TaskInfoService
{
@@ -28,75 +31,352 @@
/// <param name="stationCode">璧峰鍦板潃</param>
/// <param name="palletCode">鎵樼洏缂栧彿</param>
/// <returns>杩斿洖澶勭悊缁撴灉</returns>
- public WebResponseContent InboundRequest(SaveModel saveModel)
+ public WebResponseContent InboundRequest(string stationCode, string roadwayNo, string palletCode)
{
- string palletCode = saveModel.palletCode;
- if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"璇疯緭鍏ユ纭墭鐩樺彿");
- WebResponseContent content = new WebResponseContent();
+ // 杈撳叆楠岃瘉
+ if (string.IsNullOrWhiteSpace(palletCode))
+ return WebResponseContent.Instance.Error("璇疯緭鍏ユ纭墭鐩樺彿");
+
try
{
- Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First();
- Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First();
+ Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+ if (task != null)
+ {
+ PushTasksToWCS(new List<Dt_Task> { task });
+ return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
+ }
+ // 鑾峰彇鍏ュ簱鍗曟槑缁�
+ var inboundOrderDet = GetInboundOrderDetail(palletCode);
+ if (inboundOrderDet == null)
+ return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫叆搴撳崟鏄庣粏");
+
+ // 鑾峰彇鍏ュ簱鍗�
+ var inboundOrder = GetInboundOrder(inboundOrderDet.OrderId);
if (inboundOrder == null)
- {
return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
- }
- Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
- Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode);
- if (roadwayInfo != null) { }
- if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
- }
- Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
- if (stockInfo1 == null)
- {
- Dt_StockInfo dt_Stock = new()
- {
- BatchNo = inboundOrderDet.BatchNo,
- PalletCode = palletCode,
- IsFull = true,
- StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨,
- Creater = "WMS",
- CreateDate = DateTime.Now,
- MaterialType = (int)InventoryMaterialType.鎴愬搧,
- Materialweight = 0,
- Wlstatus = (int)InventoryMaterialStatus.鍚堟牸,
- Mgeneratetime = DateTime.Now,
- };
- _stockService.StockInfoService.Repository.AddData(dt_Stock);
+ // 楠岃瘉鍏ュ簱鍗曟槑缁�
+ if (inboundOrder.Details == null || inboundOrder.Details.Count == 0)
+ return WebResponseContent.Instance.Error($"鍏ュ簱鍗� {inboundOrder.OrderNo} 娌℃湁鏄庣粏淇℃伅");
- Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
- Dt_StockInfoDetail dt_StockInfoDetail = new()
- {
- StockId = dt_StockInfo.Id,
- MaterielCode = inboundOrderDet.MaterielCode, //鐗╂枡鍙�
- MaterielName = inboundOrderDet.MaterielName, //鐗╂枡鍚嶇О
- OrderNo = inboundOrder.OrderNo, //鐗╂枡璇︽儏
- BatchNo = inboundOrderDet.BatchNo, //鐗╂枡鎵规
- LinId = inboundOrderDet.LinId, //SerialNumber = targetCodes[2].ToString(), //鍖呭彿
- //BatchNoName = dt_Int.OrderNo,
- StockQuantity = inboundOrderDet.OrderQuantity, //閲嶉噺
- //OutboundQuantity = 1, //搴忓垪鍙�
- Status = (int)StockStatusEmun.缁勭洏鏆傚瓨,
- Creater = "WMS",
- CreateDate = DateTime.Now,
- Id = inboundOrderDet.LinId.ObjToInt(),
- };
- _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail);
+ // 鑾峰彇浠撳簱鍜屽贩閬撲俊鎭�
+ var warehouse = GetWarehouse(inboundOrder.WarehouseId);
+ var roadwayInfo = GetRoadwayInfo(warehouse.WarehouseCode);
+
+ // 澶勭悊搴撳瓨淇℃伅
+ //var stockInfo = GetOrCreateStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse);
+ var dt_StockInfoDetail = new Dt_StockInfoDetail
+ {
+ //StockId = stockInfo.Id,
+ MaterielCode = inboundOrderDet.MaterielCode,
+ MaterielName = inboundOrderDet.MaterielName,
+ OrderNo = inboundOrder.OrderNo,
+ BatchNo = inboundOrderDet.BatchNo,
+ LinId = inboundOrderDet.LinId,
+ StockQuantity = inboundOrderDet.OrderQuantity,
+ Status = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ Id = inboundOrderDet.LinId.ObjToInt(),
+ };
+
+ var dt_Stock = new Dt_StockInfo
+ {
+ BatchNo = inboundOrderDet.BatchNo,
+ PalletCode = palletCode,
+ PalletType = GetPalletType(warehouse, palletCode),
+ IsFull = true,
+ StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ MaterialType = (int)InventoryMaterialType.鎴愬搧,
+ Materialweight = 0,
+ Wlstatus = (int)InventoryMaterialStatus.鍚堟牸,
+ Mgeneratetime = DateTime.Now,
+ WarehouseId = warehouse.WarehouseId,
+ Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail }
+ };
+
+ // 妫�鏌ュ叆搴撹姹�
+ var checkResult = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, dt_Stock);
+ if (!checkResult.Item1)
+ return WebResponseContent.Instance.Error(checkResult.Item2);
+
+ // 鍒嗛厤搴撲綅骞舵洿鏂版暟鎹�
+ Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, dt_Stock.PalletType, dt_Stock.WarehouseId);
+ //Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(stationCode, TaskTypeEnum.Inbound.ObjToInt());
+ if (locationInfo == null)
+ {
+ return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
}
- Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
- (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo);
- if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
- content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo);
+
+ Dt_Task newTask = new Dt_Task()
+ {
+ CurrentAddress = stationCode,
+ Grade = 0,
+ NextAddress = locationInfo.LocationCode,
+ PalletCode = palletCode,
+ Roadway = roadwayNo,
+ SourceAddress = stationCode,
+ TargetAddress = locationInfo.LocationCode,
+ TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+ TaskStatus = TaskStatusEnum.New.ObjToInt(),
+ WarehouseId = dt_Stock.WarehouseId,
+ PalletType = dt_Stock.PalletType,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ };
+
+ LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
+ _unitOfWorkManage.BeginTran();
+ Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand();
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus.ObjToInt(), LocationStatusEnum.Lock.ObjToInt(), LocationChangeType.InboundAssignLocation.ObjToInt());
+ //_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, newTask.PalletType, LocationStatusEnum.Lock, newTask.WarehouseId);
+ int taskId = BaseDal.AddData(newTask);
+ newTask.TaskId = taskId;
+ _stockRepository.StockInfoRepository.UpdateData(dt_Stock);
+ _unitOfWorkManage.CommitTran();
+ WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
+
+ PushTasksToWCS(new List<Dt_Task> { newTask });
+ if (newTask.WarehouseId == 5) PutFinish(stationCode);
+ return WebResponseContent.Instance.OK(data: wMSTaskDTO);
}
catch (Exception ex)
{
- content = WebResponseContent.Instance.Error(ex.Message);
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
}
- return content;
}
+
+ private Dt_InboundOrderDetail GetInboundOrderDetail(string palletCode)
+ {
+ return BaseDal.Db.Queryable<Dt_InboundOrderDetail>()
+ .Where(x => x.LPNNo == palletCode)
+ .First();
+ }
+
+ private Dt_InboundOrder GetInboundOrder(int orderId)
+ {
+ return BaseDal.Db.Queryable<Dt_InboundOrder>()
+ .Where(x => x.Id == orderId)
+ .Includes(x => x.Details)
+ .First();
+ }
+
+ private Dt_Warehouse GetWarehouse(int warehouseId)
+ {
+ return _basicService.WarehouseService.Repository
+ .QueryFirst(x => x.WarehouseId == warehouseId);
+ }
+
+ private Dt_RoadwayInfo GetRoadwayInfo(string warehouseCode)
+ {
+ return _basicService.RoadwayInfoService.Repository
+ .QueryFirst(x => x.RoadwayNo == warehouseCode);
+ }
+
+ private Dt_StockInfo GetOrCreateStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse)
+ {
+ var stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>()
+ .Where(x => x.PalletCode == palletCode)
+ .Includes(x => x.Details)
+ .First();
+ decimal beforeQuantity = 0;
+ if (stockInfo == null)
+ {
+ stockInfo = CreateNewStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse);
+ //CreateStockInfoDetail(stockInfo, inboundOrder, inboundOrderDet);
+ }
+ else
+ {
+ if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())
+ {
+ return null;
+ }
+ beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
+ }
+
+ return stockInfo;
+ }
+
+ private Dt_StockInfo CreateNewStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse)
+ {
+ var dt_StockInfoDetail = new Dt_StockInfoDetail
+ {
+ //StockId = stockInfo.Id,
+ MaterielCode = inboundOrderDet.MaterielCode,
+ MaterielName = inboundOrderDet.MaterielName,
+ OrderNo = inboundOrder.OrderNo,
+ BatchNo = inboundOrderDet.BatchNo,
+ LinId = inboundOrderDet.LinId,
+ StockQuantity = inboundOrderDet.OrderQuantity,
+ Status = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ Id = inboundOrderDet.LinId.ObjToInt(),
+ };
+
+ var dt_Stock = new Dt_StockInfo
+ {
+ BatchNo = inboundOrderDet.BatchNo,
+ PalletCode = palletCode,
+ PalletType = GetPalletType(warehouse, palletCode),
+ IsFull = true,
+ StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ MaterialType = (int)InventoryMaterialType.鎴愬搧,
+ Materialweight = 0,
+ Wlstatus = (int)InventoryMaterialStatus.鍚堟牸,
+ Mgeneratetime = DateTime.Now,
+ WarehouseId = warehouse.WarehouseId,
+ Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail }
+ };
+
+ //_stockService.StockInfoService.Repository.AddData(dt_Stock);
+ Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand();
+ return _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
+ }
+
+ private void CreateStockInfoDetail(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet)
+ {
+ var dt_StockInfoDetail = new Dt_StockInfoDetail
+ {
+ StockId = stockInfo.Id,
+ MaterielCode = inboundOrderDet.MaterielCode,
+ MaterielName = inboundOrderDet.MaterielName,
+ OrderNo = inboundOrder.OrderNo,
+ BatchNo = inboundOrderDet.BatchNo,
+ LinId = inboundOrderDet.LinId,
+ StockQuantity = inboundOrderDet.OrderQuantity,
+ Status = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ Creater = "WMS",
+ CreateDate = DateTime.Now,
+ Id = inboundOrderDet.LinId.ObjToInt(),
+ };
+
+ _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail);
+ }
+
+ //鏌ヨ浠撳簱鎵樼洏璐х墿绫诲瀷
+ public int GetPalletType(Dt_Warehouse warehouse, string palletCode)
+ {
+ if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ToString())
+ {
+ if (palletCode.Substring(0, 1) == "6")
+ {
+ return PalletTypeEnum.MediumPallet.ObjToInt();
+ }
+ else
+ {
+ return PalletTypeEnum.LargestPallet.ObjToInt();
+ }
+ }
+ else if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ObjToString())
+ {
+ Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 1));
+ if (palletTypeInfo == null)
+ {
+ throw new Exception($"鎵樼洏鍙烽敊璇�");
+ }
+ return palletTypeInfo.PalletType;
+ }
+ //else if (warehouse.WarehouseCode == WarehouseEnum.HA152.ObjToString())
+ //{
+ // Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2));
+ // if (palletTypeInfo == null)
+ // {
+ // throw new Exception($"鎵樼洏鍙烽敊璇�");
+ // }
+ // return palletTypeInfo.PalletType;
+ //}
+ //else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ObjToString())
+ //{
+ // Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 3));
+ // if (palletTypeInfo == null)
+ // {
+ // throw new Exception($"鎵樼洏鍙烽敊璇�");
+ // }
+ // return palletTypeInfo.PalletType;
+ //}
+ return -1;
+ }
+
+
+
+
+ #region
+ //public WebResponseContent InboundRequest(SaveModel saveModel)
+ //{
+ // string palletCode = saveModel.palletCode;
+ // if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"璇疯緭鍏ユ纭墭鐩樺彿");
+ // WebResponseContent content = new WebResponseContent();
+ // try
+ // {
+ // Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First();
+ // Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First();
+ // if (inboundOrder == null)
+ // {
+ // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅");
+ // }
+ // Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
+ // Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode);
+ // if (roadwayInfo != null) { }
+
+ // if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
+ // {
+ // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅");
+ // }
+ // Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
+ // if (stockInfo1 == null)
+ // {
+ // Dt_StockInfo dt_Stock = new()
+ // {
+ // BatchNo = inboundOrderDet.BatchNo,
+ // PalletCode = palletCode,
+ // IsFull = true,
+ // StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ // Creater = "WMS",
+ // CreateDate = DateTime.Now,
+ // MaterialType = (int)InventoryMaterialType.鎴愬搧,
+ // Materialweight = 0,
+ // Wlstatus = (int)InventoryMaterialStatus.鍚堟牸,
+ // Mgeneratetime = DateTime.Now,
+ // };
+ // _stockService.StockInfoService.Repository.AddData(dt_Stock);
+
+ // Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
+ // Dt_StockInfoDetail dt_StockInfoDetail = new()
+ // {
+ // StockId = dt_StockInfo.Id,
+ // MaterielCode = inboundOrderDet.MaterielCode, //鐗╂枡鍙�
+ // MaterielName = inboundOrderDet.MaterielName, //鐗╂枡鍚嶇О
+ // OrderNo = inboundOrder.OrderNo, //鐗╂枡璇︽儏
+ // BatchNo = inboundOrderDet.BatchNo, //鐗╂枡鎵规
+ // LinId = inboundOrderDet.LinId, //SerialNumber = targetCodes[2].ToString(), //鍖呭彿
+ // //BatchNoName = dt_Int.OrderNo,
+ // StockQuantity = inboundOrderDet.OrderQuantity, //閲嶉噺
+ // //OutboundQuantity = 1, //搴忓垪鍙�
+ // Status = (int)StockStatusEmun.缁勭洏鏆傚瓨,
+ // Creater = "WMS",
+ // CreateDate = DateTime.Now,
+ // Id = inboundOrderDet.LinId.ObjToInt(),
+ // };
+ // _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail);
+ // }
+ // Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
+ // (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo);
+ // if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
+ // content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo);
+ // }
+ // catch (Exception ex)
+ // {
+ // content = WebResponseContent.Instance.Error(ex.Message);
+ // }
+ // return content;
+ //}
+ #endregion
public string ReceiveWMSInventoryIn = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSInventoryIn"];
/// <summary>
/// 鐩樼偣宸紓鏁伴噺鍥炰紶
@@ -290,6 +570,7 @@
return (true, "鎴愬姛");
}
+
/// <summary>
/// 鏍规嵁鎵樼洏鏉$爜锛岃捣鐐逛綅缃紝鐢熸垚鍏ュ簱淇℃伅
/// </summary>
--
Gitblit v1.9.3