From 37faeb3fd7d8f204298d4d24a8a98110992d6b58 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期三, 19 十一月 2025 08:38:28 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 463 +++++++++++++--------------------------------------------
1 files changed, 106 insertions(+), 357 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 159cba4..a60f431 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"
@@ -17,6 +17,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundService;
@@ -43,7 +44,7 @@
private readonly ISplitPackageService _splitPackageService;
private readonly IRepository<Dt_Task> _taskRepository;
private readonly IESSApiService _eSSApiService;
-
+ private readonly IInvokeMESService _invokeMESService;
private readonly ILogger<OutboundPickingService> _logger;
@@ -61,7 +62,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) : base(BaseDal)
+ 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) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
_stockInfoService = stockInfoService;
@@ -75,6 +76,7 @@
_taskRepository = taskRepository;
_eSSApiService = eSSApiService;
_logger = logger;
+ _invokeMESService = invokeMESService;
}
@@ -139,99 +141,6 @@
}
}
- /// <summary>
- /// 鎵爜鎷i�夌‘璁�
- /// </summary>
- public async Task<WebResponseContent> ConfirmPicking(PickingConfirmRequest request)
- {
- try
- {
- _unitOfWorkManage.BeginTran();
-
- // 1. 楠岃瘉鏉$爜鏈夋晥鎬�
- var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(x => x.Barcode == request.Barcode && x.MaterielCode == request.MaterielCode)
- .FirstAsync();
-
- if (stockDetail == null)
- return WebResponseContent.Instance.Error("鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
-
- // 2. 妫�鏌ュ簱瀛樺彲鐢ㄦ暟閲�
- decimal availableQuantity = stockDetail.StockQuantity - stockDetail.OutboundQuantity;
- if (request.PickQuantity > availableQuantity)
- return WebResponseContent.Instance.Error($"鎷i�夋暟閲忚秴杩囧彲鐢ㄥ簱瀛橈紝鍙敤鏁伴噺锛歿availableQuantity}");
-
- // 3. 鏌ユ壘鐩稿叧鐨勫嚭搴撻攣瀹氫俊鎭紙鏀寔鎷嗗寘鍚庣殑鏂版潯鐮侊級
- var lockInfo = await FindLockInfoByBarcode(request.OrderDetailId, request.Barcode, request.MaterielCode);
-
- if (lockInfo == null)
- return WebResponseContent.Instance.Error("鏈壘鍒扮浉鍏崇殑鍑哄簱閿佸畾淇℃伅");
-
- // 4. 妫�鏌ラ攣瀹氭暟閲�
- decimal remainingLockQuantity = lockInfo.AssignQuantity - lockInfo.PickedQty;
- if (request.PickQuantity > remainingLockQuantity)
- return WebResponseContent.Instance.Error($"鎷i�夋暟閲忚秴杩囬攣瀹氭暟閲忥紝鍓╀綑鍙嫞閫夛細{remainingLockQuantity}");
-
- // 5. 鏇存柊閿佸畾淇℃伅鐨勫凡鎷i�夋暟閲�
- lockInfo.PickedQty += request.PickQuantity;
- await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
-
- // 6. 鏇存柊搴撳瓨鍑哄簱鏁伴噺 - 瀹為檯鍑忓皯搴撳瓨
- stockDetail.OutboundQuantity += request.PickQuantity;
- await _stockInfoService.Db.Updateable(stockDetail).ExecuteCommandAsync();
-
- // 7. 鏇存柊鍑哄簱鍗曟槑缁�
- var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.Id == request.OrderDetailId)
- .FirstAsync();
-
- orderDetail.OverOutQuantity += request.PickQuantity;
- orderDetail.LockQuantity -= request.PickQuantity;
-
- // 妫�鏌ユ槸鍚﹀畬鎴愬嚭搴�
- if (Math.Abs(orderDetail.OverOutQuantity - orderDetail.OrderQuantity) < 0.001m)
- {
- orderDetail.OrderDetailStatus = (int)OrderDetailStatusEnum.Over;
- orderDetail.LockQuantity = 0;
-
- // 鏇存柊鐩稿叧鐨勯攣瀹氫俊鎭姸鎬佷负宸插嚭搴�
- var relatedLockInfos = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == request.OrderDetailId &&
- x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
- .ToListAsync();
-
- foreach (var relatedLock in relatedLockInfos)
- {
- relatedLock.Status = (int)OutLockStockStatusEnum.宸插嚭搴�;
- }
- await _outStockLockInfoService.Db.Updateable(relatedLockInfos).ExecuteCommandAsync();
- }
-
- await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
-
- // 8. 璁板綍鎷i�夊巻鍙�
- var pickHistory = new Dt_PickingRecord
- {
- OrderDetailId = request.OrderDetailId,
- Barcode = request.Barcode,
- PickQuantity = request.PickQuantity,
- PickTime = DateTime.Now,
-
- LocationCode = request.LocationCode,
- StockId = stockDetail.StockId
- };
- await Db.Insertable(pickHistory).ExecuteCommandAsync();
-
- _unitOfWorkManage.CommitTran();
-
- return WebResponseContent.Instance.OK("鎷i�夌‘璁ゆ垚鍔�");
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- return WebResponseContent.Instance.Error($"鎷i�夌‘璁ゅけ璐�: {ex.Message}");
- }
- }
public async Task<WebResponseContent> ConfirmPicking(string orderNo, string palletCode, string barcode)
{
@@ -269,6 +178,12 @@
}
if (lockInfo.PalletCode != palletCode)
throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}");
+
+ var outorderdetail = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().First(x => x.Id == lockInfo.OrderDetailId);
+ if (outorderdetail != null && lockInfo.AssignQuantity > outorderdetail.OrderQuantity)
+ {
+ throw new Exception($"鏉$爜{barcode}鐨勫嚭搴撴暟閲忓ぇ浜庤鍗曠殑鏁伴噺");
+ }
var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
.Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId)
@@ -341,10 +256,15 @@
private async Task CheckAndUpdateOrderStatus(string orderNo)
{
+ var orderDetails = _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+ .LeftJoin<Dt_OutboundOrder>((o, item) => o.OrderId == item.Id) // 鍏宠仈鏉′欢锛氱埗琛� Id = 瀛愯〃 OrderId
+ .Where((o, item) => item.OrderNo == orderNo) // 杩囨护鐖惰〃 OrderNo
+ .Select((o, item) => o) // 鍙繑鍥炲瓙琛ㄦ暟鎹�
+ .ToList();
- var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.OrderId == orderNo.ObjToInt())
- .ToListAsync();
+ //var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+ // .Where(x => x.OrderId == orderNo.ObjToInt())
+ // .ToListAsync();
bool allCompleted = true;
foreach (var detail in orderDetails)
@@ -358,10 +278,60 @@
if (allCompleted)
{
- await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
- .SetColumns(x => x.OrderStatus == 2) // 宸插畬鎴�
- .Where(x => x.OrderNo == orderNo)
- .ExecuteCommandAsync();
+ try
+ {
+ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+ .SetColumns(x => x.OrderStatus == 2) // 宸插畬鎴�
+ .Where(x => x.OrderNo == orderNo)
+ .ExecuteCommandAsync();
+
+ var outboundOrder = _stockInfoService.Db.Queryable<Dt_OutboundOrder>().First(x => x.OrderNo == orderNo);
+
+
+ if (outboundOrder != null && outboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+ {
+ var feedmodel = new FeedbackOutboundRequestModel
+ {
+ reqCode = Guid.NewGuid().ToString(),
+ reqTime = DateTime.Now.ToString(),
+ business_type = outboundOrder.BusinessType,
+ factoryArea = outboundOrder.FactoryArea,
+ operationType = 1,
+ Operator = outboundOrder.Operator,
+ orderNo = outboundOrder.UpperOrderNo,
+ status = outboundOrder.OrderStatus,
+ details = new List<FeedbackOutboundDetailsModel>()
+
+ };
+ var lists = _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>().Where(x => x.OrderNo == orderNo).ToList();
+
+ var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.Unit, item.WarehouseCode })
+ .Select(group => new FeedbackOutboundDetailsModel
+ {
+ materialCode = group.Key.MaterielCode,
+ lineNo = group.Key.lineNo,
+ warehouseCode = group.Key.WarehouseCode,
+ currentDeliveryQty = group.Sum(x => x.OrderQuantity),
+ // warehouseCode= "1072",
+ unit = group.Key.Unit,
+ barcodes = group.Select(row => new WIDESEA_DTO.Outbound.BarcodesModel
+ {
+ barcode = row.CurrentBarcode,
+ supplyCode = row.SupplyCode,
+ batchNo = row.BatchNo,
+ unit = row.Unit,
+ qty = row.AssignQuantity
+ }).ToList()
+ }).ToList();
+ feedmodel.details = groupedData;
+
+ _invokeMESService.FeedbackOutbound(feedmodel);
+ }
+ }
+ catch (Exception ex) {
+ _logger.LogError(" OutboundPickingService FeedbackOutbound : " + ex.Message);
+ }
+
}
}
@@ -369,165 +339,18 @@
/// <summary>
/// 鍥炲簱鎿嶄綔
/// </summary>
- //public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason)
- //{
- // try
- // {
- // // 1. 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
- // var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- // .Where(it => it.OrderNo == orderNo && it.Status == 1)
- // .ToListAsync();
-
- // if (!remainingLocks.Any())
- // {
- // return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
- // }
- // var tasks = new List<Dt_Task>();
- // // 鎸夋墭鐩樺垎缁�
- // var palletGroups = remainingLocks.GroupBy(x => x.PalletCode);
- // //鏌ヨ浠诲姟琛�
- // var task = _taskRepository.QueryData(x => x.TaskNum == remainingLocks.First().TaskNum).FirstOrDefault();
- // foreach (var group in palletGroups)
- // {
- // if (group.Key == palletCode)
- // {
- // var totalReturnQty = group.Sum(x => x.AssignQuantity - x.PickedQty);
-
- // if (totalReturnQty <= 0) continue;
-
- // // 鍒嗛厤鏂拌揣浣�
- // var newLocation = _locationInfoService.AssignLocation();
-
- // // 鏇存柊鍑哄簱閿佸畾璁板綍鐘舵��
- // var lockIds = group.Where(x => x.PalletCode == palletCode).Select(x => x.Id).ToList();
- // await _outStockLockInfoService.Db.Updateable<Dt_OutStockLockInfo>()
- // .SetColumns(it => new Dt_OutStockLockInfo { Status = OutLockStockStatusEnum.鍥炲簱涓�.ObjToInt() })
- // .Where(it => lockIds.Contains(it.Id))
- // .ExecuteCommandAsync();
-
- // // 鏇存柊鎷嗗寘鏉$爜璁板綍鐘舵��
- // var splitBarcodes = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
- // .Where(it => lockIds.Contains(it.OutStockLockInfoId))
- // .ToListAsync();
-
- // foreach (var splitBarcode in splitBarcodes)
- // {
- // splitBarcode.Status = 3;
- // await _splitPackageService.Db.Updateable(splitBarcode).ExecuteCommandAsync();
- // }
-
- // foreach (var lockInfo in group)
- // {
- // if (lockInfo.PalletCode == palletCode)
- // {
- // decimal returnQty = lockInfo.AssignQuantity - lockInfo.PickedQty;
-
- // // 妫�鏌ュ簱瀛樿褰曟槸鍚﹀瓨鍦�
- // var existingStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
- // .FirstAsync();
-
- // if (existingStock != null)
- // {
- // // 搴撳瓨璁板綍瀛樺湪锛屾仮澶嶉攣瀹氭暟閲�
- // await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
- // .SetColumns(it => new Dt_StockInfoDetail
- // {
- // OutboundQuantity = it.OutboundQuantity - returnQty
- // })
- // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
- // .ExecuteCommandAsync();
- // }
- // else
- // {
- // // 搴撳瓨璁板綍涓嶅瓨鍦紙鍙兘鏄媶鍖呬骇鐢熺殑鏂版潯鐮侊級锛屽垱寤烘柊鐨勫簱瀛樿褰�
- // var newStockDetail = new Dt_StockInfoDetail
- // {
- // StockId = lockInfo.StockId,
- // MaterielCode = lockInfo.MaterielCode,
- // OrderNo = lockInfo.OrderNo,
- // BatchNo = lockInfo.BatchNo,
- // StockQuantity = returnQty, // 瀹為檯搴撳瓨鏁伴噺
- // OutboundQuantity = 0, // 鍥炲簱鍚庝笉鍐嶉攣瀹�
- // Barcode = lockInfo.CurrentBarcode,
- // InboundOrderRowNo = "0",
- // Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
-
- // };
- // await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
- // }
- // }
- // }
-
-
- // Dt_Task newtask = new()
- // {
- // CurrentAddress = stations[task.TargetAddress],
- // Grade = 0,
- // PalletCode = palletCode,
- // NextAddress = "",
- // OrderNo= task.OrderNo,
- // Roadway = newLocation.RoadwayNo,
- // SourceAddress = stations[task.TargetAddress],
- // TargetAddress = newLocation.LocationCode,
- // TaskStatus = TaskStatusEnum.New.ObjToInt(),
- // TaskType = TaskTypeEnum.InPick.ObjToInt(),
- // // TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
- // PalletType = task.PalletType,
- // WarehouseId = task.WarehouseId,
- // };
- // tasks.Add(newtask);
-
- // }
- // }
- // try
- // {
- // await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync();
- // //鍒犻櫎 鍑哄簱鐨� task
-
-
- // //缁� ess 娴佸姩淇″彿 鍜屽垱寤轰换鍔�
-
-
- // }
- // catch (Exception ex)
- // {
-
- // }
-
-
-
-
- // return WebResponseContent.Instance.OK();
- // }
- // catch (Exception ex)
- // {
- // return WebResponseContent.Instance.Error($"鍥炲簱鎿嶄綔澶辫触: {ex.Message}");
- // }
- //}
public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason)
{
try
{
- // 1. 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
+ // 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
.Where(it => it.OrderNo == orderNo && it.Status == 1)
.ToListAsync();
var stockinfo = _stockInfoService.Db.Queryable<Dt_StockInfo>().First(x => x.PalletCode == palletCode);
- // 2. 妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
- var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(it => it.StockId == stockinfo.Id && it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt())
- .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // 鏈畬鍏ㄥ嚭搴撶殑
- .ToListAsync();
-
- // 3. 濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋級
- if (!remainingLocks.Any() && !palletStockGoods.Any())
- {
- return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
- }
var tasks = new List<Dt_Task>();
@@ -540,6 +363,21 @@
{
return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟淇℃伅");
}
+
+ // 妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
+ var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(it => it.StockId == stockinfo.Id && (it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() || it.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() || it.Status == StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()))
+ .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // 鏈畬鍏ㄥ嚭搴撶殑
+ .ToListAsync();
+
+ // 濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋級
+ if (!remainingLocks.Any() && !palletStockGoods.Any())
+ {
+ //鏄惁鑷姩鍥炲簱锛屾妸涔嬪墠鍑哄簱鐨勪换鍔″垹闄わ紝鐒跺悗缁勪釜绌虹洏鍏ュ簱銆�
+ return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
+ }
+
+
var firstlocation = _locationInfoService.Db.Queryable<Dt_LocationInfo>().First(x => x.LocationCode == task.SourceAddress);
decimal totalReturnQty = 0;
var hasRemainingLocks = remainingLocks.Any(x => x.PalletCode == palletCode);
@@ -631,19 +469,20 @@
totalReturnQty = palletStockGoods.Sum(x => x.StockQuantity - x.OutboundQuantity);
}
- // 淇濆瓨浠诲姟
+ // 淇濆瓨浠诲姟 缁橢SS涓嬪彂浠诲姟
if (tasks.Any())
{
try
{
await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync();
-
+ var targetAddress = task.TargetAddress;
+ _taskRepository.DeleteData(task);
// 缁� ESS 娴佸姩淇″彿鍜屽垱寤轰换鍔�
try
{
var result = await _eSSApiService.MoveContainerAsync(new WIDESEA_DTO.Basic.MoveContainerRequest
{
- slotCode = movestations[task.TargetAddress],
+ slotCode = movestations[targetAddress],
containerCode = palletCode
});
if (result)
@@ -662,7 +501,7 @@
taskDescribe = new TaskDescribeType {
containerCode = palletCode,
containerType = "CT_KUBOT_STANDARD",
- fromLocationCode = stations.GetValueOrDefault(task.TargetAddress) ?? "",
+ fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
toStationCode = "",
toLocationCode = tasks.First().TargetAddress,
deadline = 0, storageTag = ""
@@ -670,7 +509,7 @@
}
}
};
-
+
var resulttask = await _eSSApiService.CreateTaskAsync(esstask);
@@ -682,7 +521,7 @@
_logger.LogInformation("ReturnRemaining 鍒涘缓浠诲姟杩斿洖 catch err: " + ex.Message);
}
-
+
return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛锛屽叡鍥炲簱鏁伴噺锛歿totalReturnQty}");
}
@@ -764,7 +603,7 @@
.Where(x => x.OrderNo == orderNo &&
x.PalletCode == palletCode &&
x.CurrentBarcode == barcode &&
- x.Status == 2)
+ x.Status == 6)
.FirstAsync();
if (outStockInfo == null)
@@ -775,11 +614,15 @@
outStockInfo.Status = 1;
await _outStockLockInfoService.Db.Updateable(outStockInfo).ExecuteCommandAsync();
- //// 杩樺師搴撳瓨鍑哄簱鏁伴噺
- //await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
- // .SetColumns(x => x.OutboundQuantity == x.OutboundQuantity - outStockInfo.AssignQuantity)
- // .Where(x => x.Barcode == barcode)
- // .ExecuteCommandAsync();
+
+ var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+ .Where(x => x.Barcode == barcode && x.StockId == outStockInfo.StockId)
+ .FirstAsync();
+
+ stockDetail.StockQuantity += outStockInfo.AssignQuantity;
+ stockDetail.OutboundQuantity += outStockInfo.AssignQuantity;
+ await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
// 杩樺師鍑哄簱鍗曟槑缁�
var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
@@ -787,6 +630,7 @@
.FirstAsync();
orderDetail.OverOutQuantity -= outStockInfo.AssignQuantity;
+ orderDetail.PickedQty = 0;
await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
// 鍒犻櫎鎷i�夊巻鍙�
@@ -802,19 +646,6 @@
{
return WebResponseContent.Instance.Error($"鍙栨秷鎷i�夊け璐ワ細{ex.Message}");
}
- }
- /// <summary>
- /// 鏍规嵁鏉$爜鏌ユ壘閿佸畾淇℃伅
- /// </summary>
- private async Task<Dt_OutStockLockInfo> FindLockInfoByBarcode(int orderDetailId, string barcode, string materielCode)
- {
- return await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == orderDetailId &&
- x.MaterielCode == materielCode &&
- x.CurrentBarcode == barcode &&
- x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓� &&
- x.AssignQuantity > x.PickedQty)
- .FirstAsync();
}
// 鑾峰彇鏈嫞閫夊垪琛�
@@ -896,88 +727,6 @@
.ToListAsync();
}
- public async Task GetPalletPickingSummary(string orderNo, string palletCode)
- {
- var summary = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderNo == orderNo && x.PalletCode == palletCode)
- .GroupBy(x => new { x.PalletCode, x.Status })
- .Select(x => new
- {
- PalletCode = x.PalletCode,
- Status = x.Status,
- TotalAssignQty = SqlFunc.AggregateSum(x.AssignQuantity),
- TotalPickedQty = SqlFunc.AggregateSum(x.PickedQty)
- })
- .ToListAsync();
-
- // return summary;
- }
-
-
-
- /// <summary>
- /// 鎾ら攢鎷i��
- /// </summary>
- public async Task<WebResponseContent> CancelPicking(CancelPickingRequest request)
- {
- // 瀹炵幇鎾ら攢鎷i�夌殑閫昏緫锛岄渶瑕侊細
- // 1. 鎭㈠搴撳瓨鍑哄簱鏁伴噺
- // 2. 鎭㈠閿佸畾淇℃伅鐨勫凡鎷i�夋暟閲�
- // 3. 鎭㈠鍑哄簱鍗曟槑缁嗙殑宸插嚭鏁伴噺鍜岄攣瀹氭暟閲�
- // 4. 鍒犻櫎鎴栨爣璁版嫞閫夊巻鍙茶褰�
- // 娉ㄦ剰锛氳繖閲岄渶瑕佷簨鍔″鐞�
- try
- {
- _unitOfWorkManage.BeginTran();
-
- var pickHistory = await Db.Queryable<Dt_PickingRecord>()
- .Where(x => x.Id == request.PickingHistoryId)
- .FirstAsync();
-
- if (pickHistory == null)
- return WebResponseContent.Instance.Error("鏈壘鍒版嫞閫夎褰�");
-
- // 鎭㈠搴撳瓨
- var stockDetail = await _stockInfoService.Db.Queryable<Dt_StockInfoDetail>()
- .Where(x => x.Barcode == pickHistory.Barcode && x.StockId == pickHistory.StockId)
- .FirstAsync();
- if (stockDetail != null)
- {
- stockDetail.OutboundQuantity -= pickHistory.PickQuantity;
- await _stockInfoService.Db.Updateable(stockDetail).ExecuteCommandAsync();
- }
- // 鎭㈠閿佸畾淇℃伅
- var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
- .Where(x => x.OrderDetailId == pickHistory.OrderDetailId && x.StockId == pickHistory.StockId)
- .FirstAsync();
- lockInfo.PickedQty -= pickHistory.PickQuantity;
- await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
-
- // 鎭㈠鍑哄簱鍗曟槑缁�
- var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
- .Where(x => x.Id == pickHistory.OrderDetailId)
- .FirstAsync();
- orderDetail.OverOutQuantity -= pickHistory.PickQuantity;
- orderDetail.LockQuantity += pickHistory.PickQuantity;
- if (orderDetail.OverOutQuantity < orderDetail.OrderQuantity)
- {
- orderDetail.OrderDetailStatus = orderDetail.LockQuantity > 0 ?
- (int)OrderDetailStatusEnum.Outbound : (int)OrderDetailStatusEnum.AssignOverPartial;
- }
- await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
-
- // 鍒犻櫎鎷i�夊巻鍙茶褰�
- await Db.Deleteable<Dt_PickingRecord>().Where(x => x.Id == request.PickingHistoryId).ExecuteCommandAsync();
-
- _unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK("鎾ら攢鎴愬姛");
- }
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- return WebResponseContent.Instance.Error($"鎾ら攢澶辫触: {ex.Message}");
- }
- }
/// <summary>
/// 鑾峰彇鎵樼洏鐨勫嚭搴撶姸鎬佷俊鎭�
--
Gitblit v1.9.3