From 696edbff3c8812e4b820f624d66a02ae6ddb1a06 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期四, 16 四月 2026 13:40:18 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 135 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 120 insertions(+), 15 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index b905ce3..418c05f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -7,6 +7,7 @@
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -47,9 +48,12 @@
private readonly IRepository<Dt_StockInfo> _stockRepository;
private readonly IRepository<Dt_LocationInfo> _locationInfoRepository;
private readonly IBasicService _basicService;
+ private readonly IRepository<Dt_AllocateOrder> _allocateOrderRepository;
+ private readonly IRepository<Dt_OutboundOrder> _outboundOrderRepository;
+ private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository;
public IRepository<Dt_InboundOrder> Repository => BaseDal;
- public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository) : base(BaseDal)
+ public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService, IBasicService basicService, IRepository<Dt_LocationInfo> locationInfoRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_OutboundOrder> outboundOrderRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository) : base(BaseDal)
{
_mapper = mapper;
_unitOfWorkManage = unitOfWorkManage;
@@ -66,6 +70,9 @@
_materielInfoService = materielInfoService;
_basicService = basicService;
_locationInfoRepository = locationInfoRepository;
+ _allocateOrderRepository = allocateOrderRepository;
+ _outboundOrderRepository = outboundOrderRepository;
+ _outboundOrderDetailRepository = outboundOrderDetailRepository;
}
public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType)
@@ -106,9 +113,10 @@
foreach (var item in model.Details)
{
+ Dt_MaterielInfo materielInfo = materielInfos.First(x => x.MaterielCode == item.MaterielCode);
//var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
- UnitConvertResultDTO totalResult = _basicService.UnitQuantityConvert(item.MaterielCode, item.Unit, item.BarcodeUnit, item.OrderQuantity);
+ UnitConvertResultDTO totalResult = _basicService.UnitQuantityConvert(item.MaterielCode, item.Unit, materielInfo.inventoryUOM, item.OrderQuantity);
item.Unit = totalResult.ToUnit;
item.OrderQuantity = totalResult.ToQuantity;
if (materielInfos.Any())
@@ -697,9 +705,10 @@
{
_unitOfWorkManage.BeginTran();
- // 鏅鸿兘璇嗗埆杈撳叆绫诲瀷
+
string palletCode = null;
string barcode = null;
+ int stockStatus = 0;
// 1. 鍏堝皾璇曟寜鎵樼洏鍙锋煡璇�
var stockByPallet = _stockRepository.Db.Queryable<Dt_StockInfo>()
@@ -712,6 +721,18 @@
{
// 璇嗗埆涓烘墭鐩樺彿
palletCode = code;
+ stockStatus = stockByPallet.StockStatus;
+
+ var task = _taskRepository.Db.Queryable<Dt_Task>().Where(t => t.PalletCode == palletCode).ToList();
+ if (task != null && task.Any())
+ {
+ return WebResponseContent.Instance.Error($"鎵樼洏鍙� {palletCode} 瀛樺湪鏈畬鎴愮殑浠诲姟锛屾棤娉曟挙閿�");
+ }
+
+ if (stockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error($"鎵樼洏鍙� {palletCode} 澶勪簬鍏ュ簱纭鐘舵�侊紝绂佹鏁存墭鐩樻挙閿�锛岃鍗曠嫭鎾ら攢鏉$爜");
+ }
}
else
{
@@ -721,13 +742,14 @@
{
var stockInfo = _stockRepository
.Db.Queryable<Dt_StockInfo>()
- .Where(s => s.Id == detail.StockId&& (s.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨 || s.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()))
+ .Where(s => s.Id == detail.StockId && (s.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨 || s.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()))
.First();
if (stockInfo != null)
{
barcode = code;
palletCode = stockInfo.PalletCode;
+ stockStatus = stockInfo.StockStatus;
}
}
else
@@ -760,6 +782,16 @@
return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 涓嬫湭鎵惧埌鏉$爜 {barcode} 鐨勬槑缁嗚褰�");
}
+ if (stockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt())
+ {
+ var totalDetails = stock.Details?.Count ?? 0;
+ if (totalDetails <= 1)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 澶勪簬鍏ュ簱纭鐘舵�侊紝褰撳墠浠呭墿浣欐渶鍚�1鏉℃槑缁嗭紝绂佹鎾ら攢锛堝繀椤讳繚鐣欒嚦灏�1鏉″簱瀛樻槑缁嗭級");
+ }
+ }
+
ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode });
_stockDetailRepository.DeleteData(targetDetail);
@@ -769,10 +801,13 @@
if (!remainingDetails.Any())
{
- ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList());
- _stockRepository.DeleteData(stock);
+ if (stockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨)
+ {
+ ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList());
+ _stockRepository.DeleteData(stock);
+ }
_unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡鍒犻櫎鎵樼洏骞堕噸缃叧鑱斿叆搴撳崟鐘舵��");
+ return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曠姸鎬�");
}
_unitOfWorkManage.CommitTran();
@@ -780,7 +815,6 @@
}
else
{
- // ===== 鎾ら攢鏁翠釜鎵樼洏 =====
var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
.Includes(o => o.Details)
.First(x => x.PalletCode == palletCode
@@ -905,6 +939,15 @@
{
sugarQueryable1 = sugarQueryable1.Where(x => x.OrderType.Equals(searchParameters.Value.ToString()));
}
+
+ var detailMaterielCode = searchParametersList.FirstOrDefault(x => x.Name == "materielCode");
+ if(detailMaterielCode!=null && !string.IsNullOrEmpty(detailMaterielCode.Value?.ToString()))
+ {
+ string materielCode = detailMaterielCode.Value.ToString().Trim();
+ sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(d => d.MaterielCode.Contains(materielCode)));
+
+ }
+
//var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
//return new PageGridData<Dt_InboundOrder>(totalCount, dataList);
}
@@ -967,19 +1010,81 @@
return content.OK(data: details);
}
- public WebResponseContent HandCloseOrder(List<int> orderIds)
+ public WebResponseContent GetLocationType(string code)
+ {
+ var warehouseAreaName = _warehouseAreaRepository.QueryFirst(x => x.Code == code);
+ if(string.IsNullOrWhiteSpace(warehouseAreaName.ToString()))
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒颁粨搴撳悕绉�");
+ }
+ var locationTypeDesc = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => string.Equals(x.LocationTypeDesc, warehouseAreaName.Name, StringComparison.OrdinalIgnoreCase)).First();
+
+ return WebResponseContent.Instance.OK(data:locationTypeDesc.LocationType);
+ }
+
+ public WebResponseContent HandCloseOrder(List<string> orderNos)
{
try
{
- foreach (int id in orderIds)
+ foreach (var orderNo in orderNos)
{
- var inbound = _inboundOrderRepository.QueryFirst(x => x.Id == id);
- if(inbound.OrderStatus !=(int)InOrderStatusEnum.鏈紑濮� && inbound.OrderStatus != (int)InOrderStatusEnum.鍏ュ簱涓�)
+ var inbound = _inboundOrderRepository.QueryFirst(x => x.InboundOrderNo == orderNo);
+ var outbound = _outboundOrderRepository.QueryFirst(x=>x.OrderNo == orderNo);
+
+ if (inbound != null)
{
- return WebResponseContent.Instance.Error($"璇ュ崟鎹姸鎬佷笉鍙互鍏抽棴");
+ if (inbound.OrderStatus != (int)InOrderStatusEnum.鏈紑濮� && inbound.OrderStatus != (int)InOrderStatusEnum.鍏ュ簱涓�)
+ {
+ return WebResponseContent.Instance.Error($"璇ュ崟鎹姸鎬佷笉鍙互鍏抽棴");
+ }
+ inbound.OrderStatus = (int)InOrderStatusEnum.鎵嬪姩鍏抽棴;
+ inbound.Operator = App.User.UserName;
+ _inboundOrderRepository.UpdateData(inbound);
+
+ var inboundItems = _inboundOrderDetailRepository.QueryData(x => x.OrderId == inbound.Id);
+ if(inboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New)
+ {
+ foreach (var item in inboundItems)
+ {
+ item.OrderDetailStatus = (int)InOrderStatusEnum.鎵嬪姩鍏抽棴;
+ item.Modifier = App.User.UserName;
+ BaseDal.Db.Updateable<Dt_InboundOrderDetail>(item).ExecuteCommand();
+ }
+ }
}
- inbound.OrderStatus = (int)InOrderStatusEnum.鎵嬪姩鍏抽棴;
- _inboundOrderRepository.UpdateData(inbound);
+ else if (outbound != null)
+ {
+ if(outbound.OrderStatus ==(int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+ {
+ return WebResponseContent.Instance.Error($"璇ュ崟鎹姸鎬佷笉鍙互鍏抽棴");
+ }
+ if(outbound.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱涓�)
+ {
+ var outboundDetails = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outbound.Id);
+ if (outboundDetails == null)
+ {
+ return WebResponseContent.Instance.Error("璇ュ崟鎹姸鎬佷笉鑳藉叧闂�");
+ }
+ var detailStatus = outboundDetails.All(x => x.LockQuantity == x.OverOutQuantity);
+ if (!detailStatus)
+ {
+ return WebResponseContent.Instance.Error("璇ュ崟鎹湁姝e湪鍑哄簱鐨勭墿鏂欙紝涓嶈兘鍏抽棴");
+ }
+ }
+ outbound.OrderStatus = (int)OutOrderStatusEnum.鍏抽棴;
+ outbound.Operator = App.User.UserName;
+ _outboundOrderRepository.UpdateData(outbound);
+
+ var outboundItems = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == outbound.Id).ToList();
+ if(outboundItems.FirstOrDefault().OrderDetailStatus == (int)OrderDetailStatusEnum.New)
+ foreach(var item in outboundItems)
+ {
+ item.OrderDetailStatus = (int)OutOrderStatusEnum.鍏抽棴;
+ item.Modifier = App.User.UserName;
+ BaseDal.Db.Updateable<Dt_OutboundOrderDetail>(item).ExecuteCommand();
+ }
+ }
+
}
return WebResponseContent.Instance.OK($"鍗曟嵁鍏抽棴鎴愬姛");
}
--
Gitblit v1.9.3