From b6a40a2d8fdcffb3accfc7e424c0726a87a59ddf Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期五, 05 十二月 2025 21:20:59 +0800
Subject: [PATCH] 提交
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs | 309 ++++++++++++++++++++++++++++-----------------------
1 files changed, 171 insertions(+), 138 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_BasicService/InvokeMESService.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_BasicService/InvokeMESService.cs"
index 7d8276f..81b25b0 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_BasicService/InvokeMESService.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_BasicService/InvokeMESService.cs"
@@ -26,6 +26,7 @@
using WIDESEA_IBasicService;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Outbound;
namespace WIDESEA_BasicService
{
@@ -45,13 +46,14 @@
private readonly IOutboundOrderService _outboundOrderService;
private readonly IOutboundOrderDetailService _outboundOrderDetailService;
private readonly IOutStockLockInfoService _outStockLockInfoService;
+ private readonly IRepository<Dt_InterfaceLog> _interfacelogRepository;
// 瀛樺偍璧勬簮ID鍙婂叾瀵瑰簲鐨勯攣瀵硅薄銆備娇鐢� ConcurrentDictionary 纭繚瀵瑰瓧鍏告搷浣滄湰韬殑绾跨▼瀹夊叏銆�
private static readonly ConcurrentDictionary<string, object> _resourceLocks = new ConcurrentDictionary<string, object>();
// 鍏ㄥ眬闈欐�侀攣锛氱敤浜庝繚鎶� _resourceLocks 瀛楀吀涓� GetOrAdd 鎴� TryRemove 鏃剁殑绔炰簤
private static readonly object _globalLocker = new object();
- public InvokeMESService(IHttpClientFactory httpClientFactory, ILogger<InvokeMESService> logger, IRepository<Dt_FeedbackToMes> feedbacktomesRepository, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IOutStockLockInfoService outStockLockInfoService, IMaterialUnitService materialUnitService, IRepository<Dt_PickingRecord> pickingRecoreRepository)
+ public InvokeMESService(IHttpClientFactory httpClientFactory, ILogger<InvokeMESService> logger, IRepository<Dt_FeedbackToMes> feedbacktomesRepository, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IOutStockLockInfoService outStockLockInfoService, IMaterialUnitService materialUnitService, IRepository<Dt_PickingRecord> pickingRecoreRepository, IRepository<Dt_InterfaceLog> interfacelogRepository)
{
_httpClientFactory = httpClientFactory;
_logger = logger;
@@ -64,6 +66,7 @@
_outStockLockInfoService = outStockLockInfoService;
_materialUnitService = materialUnitService;
_pickingRecoreRepository = pickingRecoreRepository;
+ _interfacelogRepository = interfacelogRepository;
}
/// <summary>
@@ -241,159 +244,164 @@
/// <returns></returns>
public async Task<WebResponseContent> BatchOrderFeedbackToMes(List<string> orderNos, int inout)
{
- // 1. 銆愬唴瀛橀攣鎶㈠崰銆�
- if (MemoryLockManager.TryAcquireLock(orderNos[0]))
- {
- try
- {
- if (inout == 1)
- {
- foreach (var orderNo in orderNos)
+ try
+ { // 1. 銆愬唴瀛橀攣鎶㈠崰銆�
+ //if (MemoryLockManager.TryAcquireLock(orderNos[0]))
+ //{
+
+ if (inout == 1)
{
- try
+ foreach (var orderNo in orderNos)
{
- var stockinfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>("info").Where(info => info.StockStatus == 6)
- .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == orderNo).Any())
- .ToList();
- var feeds = _feedbacktomesRepository.Db.Queryable<Dt_FeedbackToMes>().Where(x => x.OrderNo == orderNo && x.ReportStatus == 1).Select(o => o.PalletCode).ToList();
- var unreports = stockinfos.Where(x => !feeds.Contains(x.PalletCode)).ToList();
- if (unreports != null && !unreports.Any())
+ try
{
- return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖浼犵殑鏁版嵁");
- }
- foreach (var item in unreports)
- {
- var lists = _stockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == item.Id).ToList();
- if (lists.Any())
+ var stockinfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>("info").Where(info => info.StockStatus == 6)
+ .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == orderNo).Any())
+ .ToList();
+ var feeds = _feedbacktomesRepository.Db.Queryable<Dt_FeedbackToMes>().Where(x => x.OrderNo == orderNo && x.ReportStatus == 1).Select(o => o.PalletCode).ToList();
+ var unreports = stockinfos.Where(x => !feeds.Contains(x.PalletCode)).ToList();
+ if (unreports != null && !unreports.Any())
{
- var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == lists.FirstOrDefault().OrderNo);
- if (inboundOrder != null)
+ return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖浼犵殑鏁版嵁");
+ }
+ foreach (var item in unreports)
+ {
+ var lists = _stockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == item.Id).ToList();
+ if (lists.Any())
{
- if (inboundOrder.OrderType == (int)InOrderTypeEnum.AllocatInbound)//璋冩嫧鍏ュ簱
+ var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == lists.FirstOrDefault().OrderNo);
+ if (inboundOrder != null)
{
- var allocate = SqlSugarHelper.DbWMS.Queryable<Dt_AllocateOrder>().Where(x => x.OrderNo == inboundOrder.InboundOrderNo).First();
- var allocatefeedmodel = new AllocateDto
+ if (inboundOrder.OrderType == (int)InOrderTypeEnum.AllocatInbound)//璋冩嫧鍏ュ簱
{
- ReqCode = Guid.NewGuid().ToString(),
- ReqTime = DateTime.Now.ToString(),
- BusinessType = "2",
- FactoryArea = inboundOrder.FactoryArea,
- OperationType = 1,
- Operator = inboundOrder.Operator,
- OrderNo = inboundOrder.UpperOrderNo,
- fromWarehouse = allocate?.FromWarehouse ?? "",
- toWarehouse = allocate?.ToWarehouse ?? "",
- Details = new List<AllocateDtoDetail>()
+ var allocate = SqlSugarHelper.DbWMS.Queryable<Dt_AllocateOrder>().Where(x => x.OrderNo == inboundOrder.InboundOrderNo).First();
+ var allocatefeedmodel = new AllocateDto
+ {
+ ReqCode = Guid.NewGuid().ToString(),
+ ReqTime = DateTime.Now.ToString(),
+ BusinessType = "2",
+ FactoryArea = inboundOrder.FactoryArea,
+ OperationType = 1,
+ Operator = inboundOrder.Operator,
+ OrderNo = inboundOrder.UpperOrderNo,
+ fromWarehouse = allocate?.FromWarehouse ?? "",
+ toWarehouse = allocate?.ToWarehouse ?? "",
+ Details = new List<AllocateDtoDetail>()
- };
+ };
- var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new AllocateDtoDetail
- {
- MaterialCode = group.Key.MaterielCode,
- LineNo = group.Key.InboundOrderRowNo,
- WarehouseCode = group.Key.WarehouseCode,
- Qty = group.Sum(x => x.BarcodeQty),
- Unit = group.Key.BarcodeUnit,
- Barcodes = group.Select(row => new BarcodeInfo
+ var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
+ .Select(group => new AllocateDtoDetail
{
- Barcode = row.Barcode,
- Qty = row.BarcodeQty,
- BatchNo = row.BatchNo,
- SupplyCode = row.SupplyCode,
- Unit = row.BarcodeUnit
- }).ToList()
- }).ToList();
- allocatefeedmodel.Details = groupedData;
+ MaterialCode = group.Key.MaterielCode,
+ LineNo = group.Key.InboundOrderRowNo,
+ WarehouseCode = group.Key.WarehouseCode,
+ Qty = group.Sum(x => x.BarcodeQty),
+ Unit = group.Key.BarcodeUnit,
+ Barcodes = group.Select(row => new BarcodeInfo
+ {
+ Barcode = row.Barcode,
+ Qty = row.BarcodeQty,
+ BatchNo = row.BatchNo,
+ SupplyCode = row.SupplyCode,
+ Unit = row.BarcodeUnit
+ }).ToList()
+ }).ToList();
+ allocatefeedmodel.Details = groupedData;
- var result = await FeedbackAllocate(allocatefeedmodel);
- if (result != null && result.code == 200)
- {
- _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
+ var result = await FeedbackAllocate(allocatefeedmodel);
+ if (result != null && result.code == 200)
+ {
+ _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
+ }
}
- }
- else
- {
- var feedmodel = new FeedbackInboundRequestModel
+ else
{
- 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>()
+ var feedmodel = new FeedbackInboundRequestModel
+ {
+ 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>()
- };
+ };
- var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
- .Select(group => new FeedbackInboundDetailsModel
- {
- materialCode = group.Key.MaterielCode,
- supplyCode = group.Key.SupplyCode,
- batchNo = group.Key.BatchNo,
- lineNo = group.Key.InboundOrderRowNo,
- qty = group.Sum(x => x.BarcodeQty),
- // warehouseCode = group.Key.WarehouseCode=="0"?"1072": group.Key.WarehouseCode,
- warehouseCode = group.Key.WarehouseCode,
- unit = group.Key.BarcodeUnit,
- barcodes = group.Select(row => new FeedbackBarcodesModel
+ var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.SupplyCode, item.BatchNo, item.InboundOrderRowNo, item.BarcodeUnit, item.WarehouseCode })
+ .Select(group => new FeedbackInboundDetailsModel
{
- barcode = row.Barcode,
- qty = row.BarcodeQty
- }).ToList()
- }).ToList();
- feedmodel.details = groupedData;
- var result = await FeedbackInbound(feedmodel);
- if (result != null && result.code == 200)
- {
- _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
+ materialCode = group.Key.MaterielCode,
+ supplyCode = group.Key.SupplyCode,
+ batchNo = group.Key.BatchNo,
+ lineNo = group.Key.InboundOrderRowNo,
+ qty = group.Sum(x => x.BarcodeQty),
+ // warehouseCode = group.Key.WarehouseCode=="0"?"1072": group.Key.WarehouseCode,
+ warehouseCode = group.Key.WarehouseCode,
+ unit = group.Key.BarcodeUnit,
+ barcodes = group.Select(row => new FeedbackBarcodesModel
+ {
+ barcode = row.Barcode,
+ qty = row.BarcodeQty
+ }).ToList()
+ }).ToList();
+ feedmodel.details = groupedData;
+ var result = await FeedbackInbound(feedmodel);
+ if (result != null && result.code == 200)
+ {
+ _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand();
+ }
}
}
}
}
}
- }
- catch (Exception ex)
- {
- _logger.LogInformation("InvokeMESService BatchOrderFeedbackToMes 鍥炲啓MES澶辫触: " + ex.Message);
- return WebResponseContent.Instance.Error(ex.Message);
- }
+ catch (Exception ex)
+ {
+ _logger.LogInformation("InvokeMESService BatchOrderFeedbackToMes 鍥炲啓MES澶辫触: " + ex.Message);
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
}
- }
- else if (inout == 2)
- {
- foreach (var orderNo in orderNos)
+ else if (inout == 2)
{
- var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().FirstAsync(x => x.OrderNo == orderNo);
- if (outboundOrder != null && outboundOrder.IsBatch == 0)
+ foreach (var orderNo in orderNos)
{
- var result = await HandleOutboundOrderToMESCompletion(outboundOrder, orderNo);
- return result;
+ var outboundOrder = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().FirstAsync(x => x.OrderNo == orderNo);
+ if (outboundOrder != null && outboundOrder.IsBatch == 0)
+ {
+ var result = await HandleOutboundOrderToMESCompletion(outboundOrder, orderNo);
+ return result;
+ }
+ else if (outboundOrder != null && outboundOrder.IsBatch == 1)
+ {
+ var result = await HandleOutboundOrderBatchToMESCompletion(outboundOrder, orderNo);
+ return result;
+ }
}
- else if (outboundOrder != null && outboundOrder.IsBatch == 1)
- {
- var result = await HandleOutboundOrderBatchToMESCompletion(outboundOrder, orderNo);
- return result;
- }
+
}
+
+ //}
+ //else
+ //{
+ // // 鎶㈤攣澶辫触锛氳鏄庢湁鍙︿竴涓嚎绋嬶紙WCS鍥炶皟鎴栦汉宸ユ搷浣滐級姝e湪澶勭悊
- }
- }
- finally
- {
- // 2. 銆愰噴鏀惧唴瀛橀攣銆戞棤璁烘垚鍔熷け璐ワ紝蹇呴』閲婃斁
- MemoryLockManager.ReleaseLock(orderNos[0]);
- }
+ // return WebResponseContent.Instance.Error("WMS姝e湪澶勭悊姝ゅ洖浼犱换鍔★紝璇峰嬁閲嶅鎿嶄綔銆�");
+ //}
}
- else
+ catch(Exception ex)
{
- // 鎶㈤攣澶辫触锛氳鏄庢湁鍙︿竴涓嚎绋嬶紙WCS鍥炶皟鎴栦汉宸ユ搷浣滐級姝e湪澶勭悊
-
- return WebResponseContent.Instance.OK("WMS姝e湪澶勭悊姝ゅ洖浼犱换鍔★紝璇峰嬁閲嶅鎿嶄綔銆�");
+ _logger.LogInformation("InvokeMESService BatchOrderFeedbackToMes : " +ex.Message);
+ }
+ finally
+ {
+ // 2. 銆愰噴鏀惧唴瀛橀攣銆戞棤璁烘垚鍔熷け璐ワ紝蹇呴』閲婃斁
+ // MemoryLockManager.ReleaseLock(orderNos[0]);
}
return WebResponseContent.Instance.OK();
}
@@ -406,10 +414,10 @@
try
{
// 鏍¢獙锛氬凡鍥炰紶鐩存帴杩斿洖閿欒
- if (outboundOrder.ReturnToMESStatus == 1)
- {
- return WebResponseContent.Instance.Error("璇ュ崟宸茬粡鍥炰紶锛�");
- }
+ //if (outboundOrder.ReturnToMESStatus == 1)
+ //{
+ // return WebResponseContent.Instance.Error("璇ュ崟宸茬粡鍥炰紶锛�");
+ //}
// 鏌ヨ璁㈠崟鏄庣粏锛堜粎鏌ヨ鏈洖浼犳垚鍔熺殑锛�
var orderDetails = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
@@ -433,29 +441,49 @@
var groups = pickingRecords.GroupBy(x => x.FeedBackMesDocumentNo).ToList();
foreach (var group in groups)
{
-
+
List<Dt_PickingRecord> records = group.ToList(); // 璇ュ垎缁勪笅鐨勬墍鏈夎褰�
if (string.IsNullOrEmpty(group.Key))
{
var emptydocumentNo = UniqueValueGenerator.Generate();
records.ForEach(x => { x.FeedBackMesDocumentNo = emptydocumentNo; });
- var result= await _pickingRecoreRepository.Db.Insertable(records).ExecuteCommandAsync();
+ var result = await _pickingRecoreRepository.Db.Updateable(records).ExecuteCommandAsync();
+
+ var interfacelog = new Dt_InterfaceLog
+ {
+ Content = JsonConvert.SerializeObject(records),
+ DocumentNo = emptydocumentNo,
+ OrderNo = orderNo,
+ OrderType = "2",
+ };
+ _interfacelogRepository.AddData(interfacelog);
+
if (result > 0)
{
(bool _flowControl, WebResponseContent _value) = await FeedBackBatchToMes(outboundOrder, orderNo, orderDetails, pickingRecords, emptydocumentNo);
- if (!_flowControl)
- {
- return _value;
- }
+
+ return _value;
+
}
}
else
{
- (bool _flowControl, WebResponseContent _value) = await FeedBackBatchToMes(outboundOrder, orderNo, orderDetails, pickingRecords, group.Key);
- if (!_flowControl)
+ var ilog = _interfacelogRepository.QueryFirst(x => x.DocumentNo == group.Key);
+ if (ilog == null)
{
- return _value;
+ var interfacelog = new Dt_InterfaceLog
+ {
+ Content = JsonConvert.SerializeObject(records),
+ DocumentNo = group.Key,
+ OrderNo = orderNo,
+ OrderType = "2",
+ };
+ _interfacelogRepository.AddData(interfacelog);
}
+ (bool _flowControl, WebResponseContent _value) = await FeedBackBatchToMes(outboundOrder, orderNo, orderDetails, pickingRecords, group.Key);
+
+ return _value;
+
}
}
@@ -594,7 +622,7 @@
// 鏇存柊璁㈠崟鐘舵��
int newStatus = allCompleted ? (int)OutOrderStatusEnum.鍑哄簱瀹屾垚 : (int)OutOrderStatusEnum.鍑哄簱涓�;
- if (outboundOrder.OrderStatus != newStatus)
+ if (allCompleted && outboundOrder.OrderStatus != newStatus)
{
int updateCount = await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
@@ -637,6 +665,11 @@
x.ReturnToMESStatus = 1;
});
await _pickingRecoreRepository.Db.Updateable(updates).ExecuteCommandAsync();
+ await _interfacelogRepository.Db.Updateable<Dt_InterfaceLog>()
+ .SetColumns(x => x.ReturnToMESStatus == 1)
+ .Where(x => x.OrderNo == orderNo)
+ .ExecuteCommandAsync();
+
if (allCompleted)
{
//MES鍥炰紶鎴愬姛锛氭洿鏂版槑缁嗕负鍥炰紶鎴愬姛鐘舵��
--
Gitblit v1.9.3