From 18ca3750ce28d407afb518cadecdd29d79876c8b Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期二, 09 十二月 2025 19:40:15 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 758 +++++++++++++++++++++-------------------------------------
1 files changed, 276 insertions(+), 482 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
index 62d9963..0da15ed 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
@@ -1,17 +1,8 @@
-锘縰sing Dm.filter;
-using MailKit.Search;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
+锘縰sing MailKit.Search;
using Microsoft.Extensions.Logging;
using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
+using WIDESEA_BasicService;
using WIDESEA_Common.CommonEnum;
-using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
@@ -21,7 +12,6 @@
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
-using WIDESEA_DTO.Allocate;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
@@ -31,9 +21,11 @@
using WIDESEA_IInboundService;
using WIDESEA_IOutboundService;
using WIDESEA_IStockService;
+using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using WIDESEA_Model.Models.Basic;
using WIDESEA_Model.Models.Check;
+using WIDESEA_Model.Models.Outbound;
namespace WIDESEA_OutboundService
{
@@ -62,7 +54,9 @@
private readonly IInboundOrderDetailService _inboundOrderDetailService;
private readonly IRepository<Dt_WarehouseArea> _warehouseAreaRepository;
private readonly IReCheckOrderService _reCheckOrderService;
+ private readonly ITask_HtyService _task_HtyService;
private readonly ILogger<OutboundPickingService> _logger;
+ private readonly IRepository<Dt_InterfaceLog> _interfaceLog;
private Dictionary<string, string> stations = new Dictionary<string, string>
{
@@ -81,7 +75,7 @@
public OutboundPickingService(IRepository<Dt_PickingRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, IStockService stockService,
IOutStockLockInfoService outStockLockInfoService, IStockInfoDetailService stockInfoDetailService, ILocationInfoService locationInfoService,
IOutboundOrderDetailService outboundOrderDetailService, ISplitPackageService splitPackageService, IOutboundOrderService outboundOrderService,
- IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService) : base(BaseDal)
+ IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService, IAllocateService allocateService, IRepository<Dt_InboundOrder> inboundOrderRepository, IInboundOrderDetailService inboundOrderDetailService, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IReCheckOrderService reCheckOrderService, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
_stockInfoService = stockInfoService;
@@ -102,6 +96,8 @@
_inboundOrderDetailService = inboundOrderDetailService;
_warehouseAreaRepository = warehouseAreaRepository;
_reCheckOrderService = reCheckOrderService;
+ _task_HtyService = task_HtyService;
+ _interfaceLog = interfaceLog;
}
@@ -290,15 +286,31 @@
return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟淇℃伅");
//鍒嗘瀽闇�瑕佸洖搴撶殑璐х墿
- //var returnAnalysis = await AnalyzeReturnItems(orderNo, palletCode, stockInfo.Id);
- //if (!returnAnalysis.HasItemsToReturn)
- // return await HandleNoReturnItems(orderNo, palletCode, task);
-
var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
if (!statusAnalysis.HasItemsToReturn)
- return await HandleNoReturnItems(orderNo, palletCode, task, stockInfo.Id);
+ {
+ try
+ {
+ var result = await HandleNoReturnItems(orderNo, palletCode, task, stockInfo.Id);
+ _unitOfWorkManage.CommitTran();
+ if (result.Status)
+ {
+ task.PalletType = PalletTypeEnum.Empty.ObjToInt();
+ await CreateReturnTaskAndHandleESS(orderNo, palletCode, task, TaskTypeEnum.InEmpty, PalletTypeEnum.Empty.ObjToInt());
+ }
+ return result;
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ _logger.LogError($"ReturnRemaining 鍥炲簱绌虹澶辫触 - OrderNo: {orderNo}, PalletCode: {palletCode}, Error: {ex.Message}");
+ return WebResponseContent.Instance.Error($"鍥炲簱绌虹鎿嶄綔澶辫触: {ex.Message}");
+ }
- // 4. 妫�鏌ユ槸鍚︽湁杩涜涓殑浠诲姟
+
+ }
+
+ // 妫�鏌ユ槸鍚︽湁杩涜涓殑浠诲姟
if (statusAnalysis.HasActiveTasks)
{
return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 鏈夎繘琛屼腑鐨勪换鍔★紝涓嶈兘鎵ц鍥炲簱鎿嶄綔");
@@ -400,16 +412,16 @@
private async Task<ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>> ValidatePickingRequest(string orderNo, string palletCode, string barcode)
{
- // 1. 鍩虹鍙傛暟楠岃瘉
+ // 鍩虹鍙傛暟楠岃瘉
if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(palletCode) || string.IsNullOrEmpty(barcode))
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error("璁㈠崟鍙枫�佹墭鐩樼爜鍜屾潯鐮佷笉鑳戒负绌�");
- // 2. 鏌ユ壘鏈夋晥鐨勯攣瀹氫俊鎭�
+ // 鏌ユ壘鏈夋晥鐨勯攣瀹氫俊鎭�
var lockInfo = await FindValidLockInfo(orderNo, palletCode, barcode);
if (lockInfo == null)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏈壘鍒版湁鏁堢殑閿佸畾淇℃伅");
- // 3. 妫�鏌ヨ鍗曠姸鎬�
+ // 妫�鏌ヨ鍗曠姸鎬�
var order = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>()
.Where(x => x.OrderNo == orderNo)
.FirstAsync();
@@ -417,18 +429,18 @@
if (order?.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"璁㈠崟{orderNo}宸插畬鎴愶紝涓嶈兘缁х画鍒嗘嫞");
- // 4. 鑾峰彇璁㈠崟鏄庣粏
+ // 鑾峰彇璁㈠崟鏄庣粏
var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
.FirstAsync(x => x.Id == lockInfo.OrderDetailId);
if (orderDetail == null)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏈壘鍒拌鍗曟槑缁�");
- // 5. 妫�鏌ヨ鍗曟槑缁嗘暟閲�
+ // 妫�鏌ヨ鍗曟槑缁嗘暟閲�
if (orderDetail.OverOutQuantity >= orderDetail.NeedOutQuantity)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"璁㈠崟鏄庣粏闇�姹傛暟閲忓凡婊¤冻");
- // 6. 鑾峰彇搴撳瓨鏄庣粏
+ // 鑾峰彇搴撳瓨鏄庣粏
var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
.Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId &&
x.Status != StockStatusEmun.鍏ュ簱纭.ObjToInt())
@@ -437,14 +449,14 @@
if (stockDetail == null)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
- // 7. 妫�鏌ュ簱瀛樼姸鎬佸拰鏁伴噺
+ // 妫�鏌ュ簱瀛樼姸鎬佸拰鏁伴噺
if (stockDetail.StockQuantity <= 0)
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏉$爜{barcode}搴撳瓨涓嶈冻");
if (stockDetail.Status != StockStatusEmun.鍑哄簱閿佸畾.ObjToInt())
return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏉$爜{barcode}鐘舵�佷笉姝g‘锛屾棤娉曞垎鎷�");
- // 8. 妫�鏌ユ槸鍚﹂噸澶嶅垎鎷�
+ //妫�鏌ユ槸鍚﹂噸澶嶅垎鎷�
var existingPicking = await Db.Queryable<Dt_PickingRecord>()
.Where(x => x.Barcode == barcode && x.OrderNo == orderNo && x.PalletCode == palletCode && x.OutStockLockId == lockInfo.Id)
.FirstAsync();
@@ -653,13 +665,13 @@
private async Task HandleFullPicking(Dt_OutStockLockInfo lockInfo, Dt_StockInfoDetail stockDetail,
decimal actualQty, PickingResult result)
{
- // 1. 鏇存柊搴撳瓨
+ // 鏇存柊搴撳瓨
stockDetail.StockQuantity = 0;
stockDetail.OutboundQuantity = 0;
stockDetail.Status = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
- // 2. 鏇存柊閿佸畾淇℃伅
+ // 鏇存柊閿佸畾淇℃伅
lockInfo.PickedQty += actualQty;
lockInfo.Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�;
lockInfo.Operator = App.User.UserName;
@@ -672,19 +684,19 @@
decimal stockOutQty = stockQuantity;
decimal remainingAssignQty = actualQty - stockQuantity;
- // 1. 鏇存柊搴撳瓨
+ // 鏇存柊搴撳瓨
stockDetail.StockQuantity = 0;
stockDetail.OutboundQuantity = 0;
stockDetail.Status = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
- // 2. 鏇存柊閿佸畾淇℃伅
+ // 鏇存柊閿佸畾淇℃伅
lockInfo.PickedQty += stockOutQty;
lockInfo.AssignQuantity = remainingAssignQty;
lockInfo.Operator = App.User.UserName;
await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
- // 3. 鏇存柊鎷嗗寘璁板綍鐘舵��
+ // 鏇存柊鎷嗗寘璁板綍鐘舵��
await UpdateSplitRecordsStatus(stockDetail.Barcode);
result.ActualPickedQty = stockOutQty;
@@ -923,22 +935,7 @@
return ValidationResult<(Dt_PickingRecord, Dt_OutStockLockInfo, Dt_OutboundOrderDetail)>.Success((pickingRecord, lockInfo, orderDetail));
}
- /// <summary>
- /// 妫�鏌ユ潯鐮佹槸鍚﹀凡缁忓洖搴�
- /// </summary>
- private async Task<bool> IsBarcodeReturned(string barcode, int stockId)
- {
- var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(it => it.Barcode == barcode && it.StockId == stockId)
- .FirstAsync();
- if (stockDetail == null)
- return false;
-
- // 濡傛灉鐘舵�佹槸鍏ュ簱纭鎴栧叆搴撳畬鎴愶紝璇存槑宸茬粡鍥炲簱
- return stockDetail.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
- stockDetail.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
- }
/// <summary>
/// 妫�鏌ラ攣瀹氫俊鎭搴旂殑鏉$爜鏄惁宸茬粡鍥炲簱
@@ -1123,7 +1120,7 @@
{
// 鑾峰彇鏈�鏂扮殑璁㈠崟鏄庣粏鏁版嵁锛堝甫閿侊級
var currentOrderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .With(SqlWith.RowLock)
+ //.With(SqlWith.RowLock)
.FirstAsync(x => x.Id == orderDetailId);
decimal newOverOutQuantity = currentOrderDetail.OverOutQuantity - cancelQty;
@@ -1177,11 +1174,6 @@
#region 鍥炲簱鎿嶄綔绉佹湁鏂规硶
- private async Task<Dt_StockInfo> GetStockInfo(string palletCode)
- {
- return await _stockInfoService.Db.Queryable<Dt_StockInfo>()
- .FirstAsync(x => x.PalletCode == palletCode);
- }
/// <summary>
/// 妫�鏌ユ暣涓墭鐩樻槸鍚﹀凡缁忓洖搴�
/// </summary>
@@ -1260,23 +1252,6 @@
private async Task<WebResponseContent> HandleNoReturnItems(string orderNo, string palletCode, Dt_Task originalTask, int stockInfoId)
{
- // 妫�鏌ユ槸鍚︽墍鏈夎揣鐗╅兘宸叉嫞閫夊畬鎴�
- //var allPicked = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- // .Where(it => it.OrderNo == orderNo && it.PalletCode == palletCode)
- // .AnyAsync(it => it.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�);
-
- //if (allPicked)
- //{
- // // 鍒犻櫎鍘熷鍑哄簱浠诲姟 缁勭┖鐩� 绌虹洏鍥炲簱
- // //await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
- // return WebResponseContent.Instance.OK("鎵�鏈夎揣鐗╁凡鎷i�夊畬鎴愶紝鎵樼洏涓虹┖");
- //}
- //else
- //{
- // // 鍒犻櫎鍘熷鍑哄簱浠诲姟
- // //await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
- // return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
- //}
try
{
var locationtype = 0;
@@ -1305,8 +1280,6 @@
_stockInfoService.AddMaterielGroup(emptystockInfo);
//绌烘墭鐩樺浣曞鐞� 杩樻湁涓�涓嚭搴撲换鍔¤澶勭悊銆�
originalTask.PalletType = PalletTypeEnum.Empty.ObjToInt();
-
- await CreateReturnTaskAndHandleESS(orderNo, palletCode, originalTask, TaskTypeEnum.InEmpty, PalletTypeEnum.Empty.ObjToInt());
}
catch (Exception ex)
@@ -1374,16 +1347,16 @@
{
_logger.LogInformation($"寮�濮嬮噴鏀鹃攣瀹氫互渚块噸鏂板垎閰� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
- // 1. 澶勭悊鏈垎鎷g殑鍑哄簱閿佸畾璁板綍 - 瀹屽叏閲婃斁
+ // 澶勭悊鏈垎鎷g殑鍑哄簱閿佸畾璁板綍 - 瀹屽叏閲婃斁
if (analysis.HasRemainingLocks)
{
await ReleaseRemainingLocks(analysis.RemainingLocks);
}
- // 2. 澶勭悊宸插洖搴撶殑閿佸畾璁板綍 - 鍒犻櫎鎴栨爣璁颁负鏃犳晥
+ // 澶勭悊宸插洖搴撶殑閿佸畾璁板綍 - 鍒犻櫎鎴栨爣璁颁负鏃犳晥
await CleanupReturnedLocks(orderNo, palletCode);
- // 3. 閲嶇疆璁㈠崟鏄庣粏鐨勯攣瀹氭暟閲�
+ // 閲嶇疆璁㈠崟鏄庣粏鐨勯攣瀹氭暟閲�
await ResetOrderDetailLockQuantities(analysis);
_logger.LogInformation($"閿佸畾閲婃斁瀹屾垚 - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
@@ -1566,37 +1539,6 @@
}
- private async Task UpdateOrderDetailsOnReturn(List<Dt_OutStockLockInfo> remainingLocks)
- {
- // 鎸夎鍗曟槑缁嗗垎缁�
- var orderDetailGroups = remainingLocks.GroupBy(x => x.OrderDetailId);
-
- foreach (var group in orderDetailGroups)
- {
- var orderDetailId = group.Key;
- var totalReturnQty = group.Sum(x => x.AssignQuantity - x.PickedQty);
-
- // 鑾峰彇褰撳墠璁㈠崟鏄庣粏
- var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .FirstAsync(x => x.Id == orderDetailId);
-
- if (orderDetail != null)
- {
- // 璋冩暣宸叉嫞閫夋暟閲忓拰宸插嚭搴撴暟閲�
- decimal newPickedQty = Math.Max(0, orderDetail.PickedQty - totalReturnQty);
- decimal newOverOutQuantity = Math.Max(0, orderDetail.OverOutQuantity - totalReturnQty);
-
- await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
- .SetColumns(it => new Dt_OutboundOrderDetail
- {
- PickedQty = newPickedQty,
- OverOutQuantity = newOverOutQuantity,
- })
- .Where(it => it.Id == orderDetailId)
- .ExecuteCommandAsync();
- }
- }
- }
private async Task HandlePalletStockGoodsReturn(List<Dt_StockInfoDetail> palletStockGoods)
{
@@ -1683,15 +1625,31 @@
WarehouseId = originalTask.WarehouseId
};
- // 淇濆瓨鍥炲簱浠诲姟
- await _taskRepository.Db.Insertable(returnTask).ExecuteCommandAsync();
+ try
+ {
+ // 淇濆瓨鍥炲簱浠诲姟
+ var insertcount = await _taskRepository.Db.Insertable(returnTask).ExecuteCommandAsync();
+ if (insertcount <= 0)
+ {
+ throw new Exception("鍒涘缓浠诲姟澶辫触锛�");
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogInformation($"CreateReturnTaskAndHandleESS 鍒涘缓浠诲姟澶辫触: {orderNo} 锛� {palletCode}");
+ throw new Exception("鍒涘缓浠诲姟澶辫触锛�");
+ }
var targetAddress = originalTask.TargetAddress;
+ _logger.LogInformation($"CreateReturnTaskAndHandleESS 鍒犻櫎鍘嗗彶浠诲姟: {orderNo} 锛� {originalTask.TaskNum}");
// 鍒犻櫎鍘熷鍑哄簱浠诲姟
- _taskRepository.DeleteAndMoveIntoHty(originalTask, OperateTypeEnum.鑷姩瀹屾垚);
- await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
-
-
+ // _taskRepository.DeleteAndMoveIntoHty(originalTask, OperateTypeEnum.鑷姩瀹屾垚);
+ var result = _task_HtyService.DeleteAndMoveIntoHty(originalTask, OperateTypeEnum.浜哄伐鍒犻櫎);
+ if (!result)
+ {
+ await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
+ }
+ _logger.LogInformation($"CreateReturnTaskAndHandleESS 鍒犻櫎鍘嗗彶浠诲姟: {orderNo} 锛� {originalTask.TaskNum},褰卞搷琛� {result}");
// 缁� ESS 鍙戦�佹祦鍔ㄤ俊鍙峰拰鍒涘缓浠诲姟
await SendESSCommands(palletCode, targetAddress, returnTask);
@@ -1708,7 +1666,7 @@
{
try
{
- // 1. 鍙戦�佹祦鍔ㄤ俊鍙�
+ // 鍙戦�佹祦鍔ㄤ俊鍙�
var moveResult = await _eSSApiService.MoveContainerAsync(new WIDESEA_DTO.Basic.MoveContainerRequest
{
slotCode = movestations[targetAddress],
@@ -1717,7 +1675,7 @@
//if (moveResult)
//{
- // 2. 鍒涘缓鍥炲簱浠诲姟
+ // 鍒涘缓鍥炲簱浠诲姟
var essTask = new TaskModel()
{
taskType = "putaway",
@@ -1938,147 +1896,6 @@
}
}
- private async Task HandleOrderCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
- {
- // 璋冩嫧鍑哄簱鍜岄噸妫�鍑哄簱涓嶉渶瑕佸弽棣圡ES
- if (outboundOrder.OrderType == OutOrderTypeEnum.Allocate.ObjToInt())
- {
- var allocate = _allocateService.Repository.QueryData(x => x.UpperOrderNo == outboundOrder.UpperOrderNo).First();
- var allocatefeedmodel = new AllocateDto
- {
- ReqCode = Guid.NewGuid().ToString(),
- ReqTime = DateTime.Now.ToString(),
- BusinessType = "2",
-
- FactoryArea = outboundOrder.FactoryArea,
- OperationType = 1,
- Operator = App.User.UserName,
- OrderNo = outboundOrder.UpperOrderNo,
- // documentsNO = outboundOrder.OrderNo,
- // status = outboundOrder.OrderStatus,
- fromWarehouse = allocate?.FromWarehouse ?? "",
- toWarehouse = allocate?.ToWarehouse ?? "",
- Details = new List<AllocateDtoDetail>()
-
- };
- // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
- var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderNo == orderNo && x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
- .ToListAsync();
-
- var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new AllocateDtoDetail
- {
- MaterialCode = group.Key.MaterielCode,
- LineNo = group.Key.lineNo,
- WarehouseCode = group.Key.WarehouseCode,
- Qty = group.Sum(x => x.PickedQty),
-
- Unit = group.Key.BarcodeUnit,
- Barcodes = group.Select(row => new BarcodeInfo
- {
- Barcode = row.CurrentBarcode,
- SupplyCode = row.SupplyCode,
- BatchNo = row.BatchNo,
- Unit = row.BarcodeUnit,
- Qty = row.PickedQty
- }).ToList()
-
-
- }).ToList();
- allocatefeedmodel.Details = groupedData;
-
- var result = await _invokeMESService.FeedbackAllocate(allocatefeedmodel);
- if (result != null && result.code == 200)
- {
- await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
- .SetColumns(x => x.ReturnToMESStatus == 1)
- .Where(x => x.OrderId == outboundOrder.Id).ExecuteCommandAsync();
-
- await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
- .SetColumns(x => new Dt_OutboundOrder
- {
- ReturnToMESStatus = 1,
- Operator = App.User.UserName,
- }).Where(x => x.OrderNo == orderNo).ExecuteCommandAsync();
- }
- }
- else if (outboundOrder.OrderType == OutOrderTypeEnum.ReCheck.ObjToInt())
- {
-
- }
- else
- {
- try
- {
- var feedmodel = new FeedbackOutboundRequestModel
- {
- reqCode = Guid.NewGuid().ToString(),
- reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- business_type = outboundOrder.BusinessType,
- factoryArea = outboundOrder.FactoryArea,
- operationType = 1,
- Operator = App.User.UserName,
- orderNo = outboundOrder.UpperOrderNo,
- documentsNO = outboundOrder.OrderNo,
- status = outboundOrder.OrderStatus,
- details = new List<FeedbackOutboundDetailsModel>()
- };
-
- // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
- var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderNo == orderNo && (x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴� || x.Status == (int)OutLockStockStatusEnum.宸插洖搴�))
- .ToListAsync();
-
- var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new FeedbackOutboundDetailsModel
- {
- materialCode = group.Key.MaterielCode,
- lineNo = group.Key.lineNo,
- warehouseCode = group.Key.WarehouseCode,
- qty = group.Sum(x => x.PickedQty),
- currentDeliveryQty = group.Sum(x => x.PickedQty),
- unit = group.Key.BarcodeUnit,
- barcodes = group.Select(row => new WIDESEA_DTO.Outbound.BarcodesModel
- {
- barcode = row.CurrentBarcode,
- supplyCode = row.SupplyCode,
- batchNo = row.BatchNo,
- unit = row.BarcodeUnit,
- qty = row.PickedQty
- }).ToList()
- }).ToList();
-
- feedmodel.details = groupedData;
-
- var result = await _invokeMESService.FeedbackOutbound(feedmodel);
- if (result != null && result.code == 200)
- {
- await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
- .SetColumns(x => x.ReturnToMESStatus == 1)
- .Where(x => x.OrderId == outboundOrder.Id)
- .ExecuteCommandAsync();
-
- await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
- .SetColumns(x => new Dt_OutboundOrder
- {
- ReturnToMESStatus = 1,
- Operator = App.User.UserName,
- })
-
- .Where(x => x.OrderNo == orderNo)
- .ExecuteCommandAsync();
- }
-
- _logger.LogError($"FeedbackOutbound鎴愬姛 - OrderNo: {orderNo}, {JsonSerializer.Serialize(result)}");
- }
- catch (Exception ex)
- {
- _logger.LogError($"FeedbackOutbound澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
- }
- }
- }
-
#endregion
#region 绌烘墭鐩�
@@ -2092,12 +1909,10 @@
{
// 1. 鍒犻櫎搴撳瓨鏁伴噺涓�0鐨勬槑缁嗚褰�
var deleteDetailCount = await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>()
- .Where(x => x.StockId == stockId && x.StockQuantity == 0 && (x.Status == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt() || x.Status ==
- StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()))
+ .Where(x => x.StockId == stockId && x.StockQuantity == 0)
.ExecuteCommandAsync();
- await _stockInfoService.Db.Deleteable<Dt_StockInfo>()
- .Where(x => x.Id == stockId).ExecuteCommandAsync();
+ _stockInfoService.DeleteData(stockId);
_logger.LogInformation($"娓呯悊闆跺簱瀛樻槑缁嗚褰� - StockId: {stockId}, 鍒犻櫎璁板綍鏁�: {deleteDetailCount}");
@@ -2117,7 +1932,7 @@
{
try
{
- // 1. 鏌ユ壘鎵�鏈変笌璇ヨ鍗曞拰鎵樼洏鐩稿叧鐨勪换鍔�
+ // 鏌ユ壘鎵�鏈変笌璇ヨ鍗曞拰鎵樼洏鐩稿叧鐨勪换鍔�
var tasks = await _taskRepository.Db.Queryable<Dt_Task>().Where(x => x.OrderNo == orderNo && x.PalletCode == palletCode).ToListAsync();
if (tasks.Any())
@@ -2170,7 +1985,7 @@
_logger.LogInformation($"璁㈠崟 {orderNo} 杩樻湁鍏朵粬鎵樼洏鍦ㄥ鐞嗭紝涓嶆洿鏂拌鍗曠姸鎬�");
}
- // 3. 鏇存柊鎷i�夎褰曠姸鎬侊紙鍙�夛級
+ // 鏇存柊鎷i�夎褰曠姸鎬侊紙鍙�夛級
await UpdatePickingRecordsStatus(orderNo, palletCode);
}
@@ -2213,8 +2028,6 @@
_logger.LogInformation($"璁㈠崟 {orderNo} 宸叉爣璁颁负鍑哄簱瀹屾垚");
- // 鍚慚ES鍙嶉璁㈠崟瀹屾垚锛堝鏋滈渶瑕侊級
- //await HandleOrderCompletion(outboundOrder, orderNo);
}
}
@@ -2232,7 +2045,6 @@
// 杩欓噷鍙互鏍规嵁闇�瑕佹洿鏂版嫞閫夎褰曠殑鐘舵�佸瓧娈�
// 渚嬪锛歱ickingRecord.Status = (int)PickingStatusEnum.宸插畬鎴�;
-
_logger.LogInformation($"鎵惧埌{pickingRecords.Count}鏉℃嫞閫夎褰� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
}
@@ -2333,88 +2145,6 @@
return result;
}
- /// <summary>
- /// 妫�鏌ユ墭鐩樻槸鍚︿负绌�
- /// </summary>
- private async Task<bool> IsPalletEmpty(string orderNo, string palletCode)
- {
- try
- {
- // 鑾峰彇搴撳瓨淇℃伅
- var stockInfo = await _stockInfoService.Db.Queryable<Dt_StockInfo>()
- .Where(x => x.PalletCode == palletCode)
- .FirstAsync();
-
- if (stockInfo == null)
- return false;
-
- // 浣跨敤缁熶竴鐨勭姸鎬佸垎鏋�
- var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
- return statusAnalysis.IsEmptyPallet;
- }
- catch (Exception ex)
- {
- _logger.LogWarning($"妫�鏌ユ墭鐩樻槸鍚︿负绌哄け璐� - OrderNo: {orderNo}, PalletCode: {palletCode}, Error: {ex.Message}");
- return false;
- }
- }
- /// <summary>
- /// 妫�鏌ュ苟澶勭悊绌烘墭鐩�
- /// </summary>
- private async Task<bool> CheckAndHandleEmptyPallet(string orderNo, string palletCode)
- {
- try
- {
- // 1. 鑾峰彇搴撳瓨淇℃伅
- var stockInfo = await _stockInfoService.Db.Queryable<Dt_StockInfo>()
- .Where(x => x.PalletCode == palletCode)
- .FirstAsync();
-
- if (stockInfo == null)
- {
- _logger.LogWarning($"鏈壘鍒版墭鐩� {palletCode} 鐨勫簱瀛樹俊鎭�");
- return false;
- }
-
- // 2. 浣跨敤缁熶竴鐨勭姸鎬佸垎鏋�
- var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
-
- // 3. 妫�鏌ユ槸鍚︿负绌烘墭鐩樹笖娌℃湁杩涜涓殑浠诲姟
- if (!statusAnalysis.IsEmptyPallet || statusAnalysis.HasActiveTasks)
- {
- return false;
- }
-
- _logger.LogInformation($"妫�娴嬪埌绌烘墭鐩橈紝寮�濮嬭嚜鍔ㄥ鐞� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
-
- //// 娓呯悊闆跺簱瀛樻暟鎹�
- //await CleanupZeroStockData(stockInfo.Id);
-
- //// 鏇存柊搴撳瓨涓昏〃鐘舵�佷负绌烘墭鐩�
- //await UpdateStockInfoAsEmpty(stockInfo);
-
- //// 澶勭悊鍑哄簱閿佸畾璁板綍
- //await HandleOutStockLockRecords(orderNo, palletCode);
-
- //// 澶勭悊浠诲姟鐘舵��
- //await HandleTaskStatusForEmptyPallet(orderNo, palletCode);
-
- //// 鏇存柊璁㈠崟鏁版嵁
- //await UpdateOrderDataForEmptyPallet(orderNo, palletCode);
-
- ////璁板綍鎿嶄綔鍘嗗彶
- //await RecordAutoEmptyPalletOperation(orderNo, palletCode);
-
- _logger.LogInformation($"绌烘墭鐩樿嚜鍔ㄥ鐞嗗畬鎴� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
-
- return true;
- }
- catch (Exception ex)
- {
- _logger.LogError($"鑷姩澶勭悊绌烘墭鐩樺け璐� - OrderNo: {orderNo}, PalletCode: {palletCode}, Error: {ex.Message}");
- return false;
- }
- }
private async Task<string> GenerateNewBarcode()
{
@@ -2525,11 +2255,6 @@
record.Status = (int)SplitPackageStatusEnum.宸叉嫞閫�;
await _splitPackageService.Db.Updateable(record).ExecuteCommandAsync();
}
- }
-
- private async Task<int> GenerateTaskNumber()
- {
- return await _dailySequenceService.GetNextSequenceAsync();
}
private WebResponseContent CreatePickingResponse(PickingResult result, string adjustedReason)
@@ -2736,6 +2461,34 @@
}
outboundOrderDetails.Add(outboundOrderDetail);
+ var newLockInfo = new Dt_OutStockLockInfo
+ {
+ OrderNo = outboundOrder.UpperOrderNo,
+ OrderDetailId = outboundOrderDetail.Id,
+ OutboundBatchNo = outboundOrderDetail.BatchNo,
+ MaterielCode = outboundOrderDetail.MaterielCode,
+ MaterielName = outboundOrderDetail.MaterielName,
+ StockId = 0,
+ OrderQuantity = outboundOrderDetail.OrderQuantity,
+ AssignQuantity = outboundOrderDetail.OverOutQuantity,
+ PickedQty = outboundOrderDetail.NoStockOutQty,
+ LocationCode = "绌�",
+ PalletCode = "绌�",
+ TaskNum = 0,
+ Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�,
+ Unit = outboundOrderDetail.Unit,
+ SupplyCode = outboundOrderDetail.SupplyCode ?? "鏃�",
+ OrderType = outboundOrder.OrderType,
+ CurrentBarcode = inboundOrderDetail.Barcode,
+ IsSplitted = 1,
+ Operator = App.User.UserName,
+ lineNo = outboundOrderDetail.lineNo,
+ WarehouseCode = outboundOrderDetail.WarehouseCode ?? "鏃�",
+ BarcodeQty = outboundOrderDetail.NoStockOutQty,
+ BarcodeUnit = outboundOrderDetail.BarcodeUnit,
+ BatchNo = outboundOrderDetail.BatchNo
+ };
+ _outStockLockInfoService.AddData(newLockInfo);
}
//鍒ゆ柇鍏ュ簱鍗曟嵁鏄庣粏鏄惁鍏ㄩ儴鏄畬鎴愮姸鎬�
int e = inboundOrder.Details.Count();
@@ -2767,118 +2520,185 @@
_outboundOrderService.UpdateData(outboundOrder);
_unitOfWorkManage.CommitTran();
- if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+ //鍏ュ簱鍥炰紶MES
+ var infeedmodel = new FeedbackInboundRequestModel
{
- var feedmodel = new FeedbackInboundRequestModel
+ reqCode = Guid.NewGuid().ToString(),
+ reqTime = DateTime.Now.ToString(),
+ business_type = inboundOrder.BusinessType,
+ factoryArea = inboundOrder.FactoryArea,
+ operationType = 1,
+ Operator = App.User.UserName,
+ orderNo = inboundOrder.UpperOrderNo,
+ status = inboundOrder.OrderStatus,
+ details = new List<FeedbackInboundDetailsModel>()
+
+ };
+
+ var groupedData = inboundOrderDetails.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
+ .Select(group => new FeedbackInboundDetailsModel
{
- reqCode = Guid.NewGuid().ToString(),
- reqTime = DateTime.Now.ToString(),
- business_type = inboundOrder.BusinessType,
- factoryArea = inboundOrder.FactoryArea,
- operationType = 1,
- Operator = inboundOrder.Operator,
- orderNo = inboundOrder.UpperOrderNo,
- status = inboundOrder.OrderStatus,
- details = new List<FeedbackInboundDetailsModel>()
+ materialCode = group.Key.MaterielCode,
+ supplyCode = group.Key.SupplyCode,
+ batchNo = group.Key.BatchNo,
+ lineNo = group.Key.lineNo,
+ warehouseCode = group.Key.WarehouseCode,
+ qty = group.Sum(x => x.BarcodeQty),
+ // warehouseCode= "1072",
+ unit = group.Key.BarcodeUnit,
+ barcodes = group.Select(row => new FeedbackBarcodesModel
+ {
+ barcode = row.Barcode,
+ qty = row.BarcodeQty
+ }).ToList()
+ }).ToList();
+ infeedmodel.details = groupedData;
- };
-
- var groupedData = inboundOrder.Details.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new FeedbackInboundDetailsModel
- {
- materialCode = group.Key.MaterielCode,
- supplyCode = group.Key.SupplyCode,
- batchNo = group.Key.BatchNo,
- lineNo = group.Key.lineNo,
- warehouseCode = group.Key.WarehouseCode,
- qty = group.Sum(x => x.BarcodeQty),
- // warehouseCode= "1072",
- unit = group.Key.BarcodeUnit,
- barcodes = group.Select(row => new FeedbackBarcodesModel
- {
- barcode = row.Barcode,
- qty = row.BarcodeQty
- }).ToList()
- }).ToList();
- feedmodel.details = groupedData;
-
- var result = await _invokeMESService.FeedbackInbound(feedmodel);
- if (result != null && result.code == 200)
+ var result1 = await _invokeMESService.FeedbackInbound(infeedmodel);
+ if (result1 != null && result1.code == 200)
+ {
+ var orderIds = inboundOrderDetails.Select(x => x.Id).Distinct().ToList();
+ if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
{
- _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1, Remark = "" })
.Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
- _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
- .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
}
+ _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
+ .Where(it => orderIds.Contains(it.Id)).ExecuteCommand();
}
- if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ else
{
- var feedmodel = new FeedbackOutboundRequestModel
- {
- reqCode = Guid.NewGuid().ToString(),
- reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- business_type = outboundOrder.BusinessType,
- factoryArea = outboundOrder.FactoryArea,
- operationType = 1,
- Operator = App.User.UserName,
- orderNo = outboundOrder.UpperOrderNo,
- documentsNO = outboundOrder.OrderNo,
- status = outboundOrder.OrderStatus,
- details = new List<FeedbackOutboundDetailsModel>()
- };
-
-
- foreach (var detail in outboundOrder.Details)
- {
- // 鑾峰彇璇ユ槑缁嗗搴旂殑鏉$爜淇℃伅锛堜粠閿佸畾璁板綍锛�
- var detailLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderNo == outboundOrder.OrderNo &&
- x.OrderDetailId == detail.Id &&
- (x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴� || x.Status == (int)OutLockStockStatusEnum.宸插洖搴�))
- .ToListAsync();
-
- var groupdata = detailLocks.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new FeedbackOutboundDetailsModel
- {
-
- materialCode = group.Key.MaterielCode,
- lineNo = group.Key.lineNo,
- warehouseCode = group.Key.WarehouseCode,
- qty = group.Sum(x => x.PickedQty),
- currentDeliveryQty = group.Sum(x => x.PickedQty),
- unit = group.Key.BarcodeUnit,
- barcodes = group.Select(lockInfo => new WIDESEA_DTO.Outbound.BarcodesModel
- {
- barcode = lockInfo.CurrentBarcode,
- supplyCode = lockInfo.SupplyCode,
- batchNo = lockInfo.BatchNo,
- unit = lockInfo.BarcodeUnit,
- qty = lockInfo.PickedQty
- }).ToList()
- }).ToList();
- feedmodel.details.AddRange(groupdata);
- }
- var result = await _invokeMESService.FeedbackOutbound(feedmodel);
- if (result != null && result.code == 200)
- {
- await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
- .SetColumns(x => x.ReturnToMESStatus == 1)
- .Where(x => x.OrderId == outboundOrder.Id)
- .ExecuteCommandAsync();
-
- await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
- .SetColumns(x => x.ReturnToMESStatus == 1)
- .Where(x => x.Id == outboundOrder.Id)
- .ExecuteCommandAsync();
- }
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2, Remark = result1.message })
+ .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+ _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 })
+ .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
}
+ //鍑哄簱鍥炰紶MES
+
+ var documentNo = UniqueValueGenerator.Generate();
+
+ var outfeedmodel = new FeedbackOutboundRequestModel
+ {
+ reqCode = Guid.NewGuid().ToString(),
+ reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ business_type = outboundOrder.BusinessType,
+ factoryArea = outboundOrder.FactoryArea,
+ operationType = 1,
+ Operator = App.User.UserName,
+ orderNo = outboundOrder.UpperOrderNo,
+ documentsNO = documentNo,
+ status = outboundOrder.OrderStatus,
+ details = new List<FeedbackOutboundDetailsModel>()
+ };
+ foreach (var detail in outboundOrderDetails)
+ {
+ // 鑾峰彇璇ユ槑缁嗗搴旂殑鏉$爜淇℃伅锛堜粠閿佸畾璁板綍锛�
+ var detailLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+ .Where(x => x.OrderNo == outboundOrder.UpperOrderNo &&
+ x.OrderDetailId == detail.Id &&
+ (x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴� || x.Status == (int)OutLockStockStatusEnum.宸插洖搴�))
+ .ToListAsync();
+
+ var groupdata = detailLocks.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
+ .Select(group => new FeedbackOutboundDetailsModel
+ {
+
+ materialCode = group.Key.MaterielCode,
+ lineNo = group.Key.lineNo,
+ warehouseCode = group.Key.WarehouseCode,
+ qty = group.Sum(x => x.PickedQty),
+ currentDeliveryQty = group.Sum(x => x.PickedQty),
+ unit = group.Key.BarcodeUnit,
+ barcodes = group.Select(lockInfo => new WIDESEA_DTO.Outbound.BarcodesModel
+ {
+ barcode = lockInfo.CurrentBarcode,
+ supplyCode = lockInfo.SupplyCode,
+ batchNo = lockInfo.BatchNo,
+ unit = lockInfo.BarcodeUnit,
+ qty = lockInfo.PickedQty
+ }).ToList()
+ }).ToList();
+ outfeedmodel.details.AddRange(groupdata);
+ }
+ //瀛樺偍鍥炰紶鍙傛暟锛屼繚璇佸紓甯告墜鍔ㄥ洖浼�
+ Dt_InterfaceLog interfaceLog = new Dt_InterfaceLog
+ {
+ OrderNo = outboundOrder.UpperOrderNo,
+ DocumentNo = documentNo,
+ OrderType = "铏氭嫙鍑哄叆搴�",
+ Content = outfeedmodel.ToJson(),
+ ReturnToMESStatus = 0,
+ IsDeleted = false
+ };
+ _interfaceLog.AddData(interfaceLog);
+
+ var result = await _invokeMESService.FeedbackOutbound(outfeedmodel);
+ if (result != null && result.code == 200)
+ {
+ var orderIds = outboundOrderDetails.Select(x => x.Id).Distinct().ToList();
+ await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+ .SetColumns(x => x.ReturnToMESStatus == 1)
+ .Where(x => orderIds.Contains(x.Id))
+ .ExecuteCommandAsync();
+ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+ .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 1, Remark = "" })
+ .Where(x => x.Id == outboundOrder.Id)
+ .ExecuteCommandAsync();
+
+ await _interfaceLog.Db.Updateable<Dt_InterfaceLog>()
+ .SetColumns(x => x.ReturnToMESStatus == 1)
+ .Where(x => x.DocumentNo == documentNo)
+ .ExecuteCommandAsync();
+ }
+ else
+ {
+ var uporderIds = outboundOrderDetails.Select(x => x.Id).Distinct().ToList();
+ await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+ .SetColumns(x => x.ReturnToMESStatus == 2)
+ .Where(x => uporderIds.Contains(x.Id))
+ .ExecuteCommandAsync();
+
+ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+ .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = result.message })
+ .Where(x => x.Id == outboundOrder.Id)
+ .ExecuteCommandAsync();
+
+ await _interfaceLog.Db.Updateable<Dt_InterfaceLog>()
+ .SetColumns(x => x.ReturnToMESStatus == 2)
+ .Where(x => x.DocumentNo == documentNo)
+ .ExecuteCommandAsync();
+ }
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
_unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent GetPurchaseOrderByBarcode(string barcode)
+ {
+ try
+ {
+ Dt_InboundOrderDetail inboundOrderDetail = _stockInfoDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.Barcode == barcode && x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()).First();
+ if (inboundOrderDetail == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒拌鏉$爜{barcode}鐨勫叆搴撴槑缁嗘垨鑰呮槑缁嗙姸鎬佸凡鍏ユ櫤浠撳畬鎴�");
+ }
+ Dt_InboundOrder inboundOrder = _inboundOrderRepository.QueryFirst(x => x.Id == inboundOrderDetail.OrderId && x.OrderStatus != InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt());
+ if (inboundOrder == null)
+ {
+ return WebResponseContent.Instance.Error($"璇ュ叆搴撳崟{inboundOrder}鐘舵�佸凡鍏ユ櫤浠撳畬鎴�");
+ }
+ var resultData = new { purchaseOrderNo = inboundOrder.UpperOrderNo };
+
+ return WebResponseContent.Instance.OK("鏌ヨ閲囪喘鍗曟垚鍔�", data: resultData);
+ }
+ catch (Exception ex)
+ {
return WebResponseContent.Instance.Error(ex.Message);
}
}
@@ -2950,14 +2770,12 @@
if (materielGroupDTO.orderTypes == InOrderTypeEnum.ReCheck.ObjToInt())
{
var dborder = _reCheckOrderService.Db.Queryable<Dt_ReCheckOrder>().First(x => x.OrderNo == materielGroupDTO.OrderNo);
- if (dborder != null && dborder.SignSeq == 0)
+ if (dborder != null && (dborder.SignSeq == 0 || dborder.SignSeq == 1))
{
return content.Error("鍙湁鎷垮埌閲嶆缁撴灉鎵嶈兘鍏ュ簱锛�");
}
- else
- {
- return content.Error("娌℃湁鎵惧埌閲嶆鍗曟嵁鏁版嵁銆�");
- }
+
+
}
// Dt_InboundOrder inboundOrder = GetInboundOrder(materielGroupDTO.OrderNo);
@@ -2983,7 +2801,8 @@
stockInfo.Details = new List<Dt_StockInfoDetail>();
}
var inboindId = 0; Dt_InboundOrder dt_InboundOrder = null;
- var dbinbound = _inboundOrderRepository.QueryData(x => x.InboundOrderNo == dbinboundOrderDetails.First().OrderNo).First();
+ var orderno = dbinboundOrderDetails.First().OrderNo;
+ var dbinbound = _inboundOrderRepository.QueryData(x => x.InboundOrderNo == orderno).FirstOrDefault();
if (dbinbound == null)
{
dt_InboundOrder = new Dt_InboundOrder
@@ -3026,7 +2845,7 @@
FactoryArea = item.FactoryArea,
Status = 0,
OrderNo = item.OrderNo,
- BusinessType = InOrderTypeEnum.InternalAllocat.ObjToInt().ToString()
+ BusinessType = materielGroupDTO.orderTypes.ToString()
});
item.WarehouseCode = item.WarehouseCode;
@@ -3118,8 +2937,6 @@
#endregion
}
-
-
#region 鏀寔绫诲畾涔�
public class ValidationResult<T>
@@ -3156,20 +2973,6 @@
public List<SplitResult> SplitResults { get; set; } = new List<SplitResult>();
}
- public class ReturnAnalysisResult
- {
- public bool HasItemsToReturn { get; set; }
- public bool HasRemainingLocks { get; set; }
- public bool HasPalletStockGoods { get; set; }
- public bool HasSplitRecords { get; set; }
- public decimal RemainingLocksReturnQty { get; set; }
- public decimal PalletStockReturnQty { get; set; }
- public decimal SplitReturnQty { get; set; }
- public decimal TotalReturnQty { get; set; }
- public List<Dt_OutStockLockInfo> RemainingLocks { get; set; } = new List<Dt_OutStockLockInfo>();
- public List<Dt_StockInfoDetail> PalletStockGoods { get; set; } = new List<Dt_StockInfoDetail>();
- public List<Dt_SplitPackageRecord> SplitRecords { get; set; } = new List<Dt_SplitPackageRecord>();
- }
public class PalletStatusAnalysis
{
public string OrderNo { get; set; }
@@ -3196,6 +2999,8 @@
public List<Dt_StockInfoDetail> PalletStockGoods { get; set; } = new List<Dt_StockInfoDetail>();
public List<Dt_SplitPackageRecord> SplitRecords { get; set; } = new List<Dt_SplitPackageRecord>();
+ // 宸插鐞嗙殑鏉$爜闆嗗悎锛堢敤浜庨伩鍏嶉噸澶嶏級
+ public HashSet<string> ProcessedBarcodes { get; set; } = new HashSet<string>();
public List<string> AllBarcodes { get; set; } = new List<string>();
// 绌烘墭鐩樼浉鍏冲睘鎬�
public bool IsEmptyPallet { get; set; }
@@ -3205,18 +3010,7 @@
public bool CanReturn => HasItemsToReturn && !HasActiveTasks;
public bool CanRemove => IsEmptyPallet && !HasActiveTasks;
}
- public class PickingContext
- {
- public string OrderNo { get; set; }
- public string PalletCode { get; set; }
- public string Barcode { get; set; }
- public string Operator { get; set; }
- public Dt_OutStockLockInfo LockInfo { get; set; }
- public Dt_OutboundOrderDetail OrderDetail { get; set; }
- public Dt_StockInfoDetail StockDetail { get; set; }
- public decimal ActualQuantity { get; set; }
- public string AdjustedReason { get; set; }
- }
+
public class CancelPickingContext
{
public string OrderNo { get; set; }
--
Gitblit v1.9.3