From d741e7a7ad7de5045e5c6b6145d9da1783cadecd Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期二, 13 一月 2026 09:55:03 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs | 859 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 598 insertions(+), 261 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 d244dd5..534a7df 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,5 +1,8 @@
锘縰sing MailKit.Search;
using Microsoft.Extensions.Logging;
+using Microsoft.IdentityModel.Tokens;
+using Newtonsoft.Json.Serialization;
+using Newtonsoft.Json;
using SqlSugar;
using WIDESEA_BasicService;
using WIDESEA_Common.CommonEnum;
@@ -15,6 +18,7 @@
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
+using WIDESEA_DTO.ReturnMES;
using WIDESEA_IAllocateService;
using WIDESEA_IBasicService;
using WIDESEA_ICheckService;
@@ -26,6 +30,12 @@
using WIDESEA_Model.Models.Basic;
using WIDESEA_Model.Models.Check;
using WIDESEA_Model.Models.Outbound;
+using Org.BouncyCastle.Asn1.Ocsp;
+using WIDESEA_BasicService.MESOperation;
+using WIDESEA_Core.Util;
+using WIDESEA_DTO.Allocate;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using WIDESEA_IRecordService;
namespace WIDESEA_OutboundService
{
@@ -58,6 +68,12 @@
private readonly ITask_HtyService _task_HtyService;
private readonly ILogger<OutboundPickingService> _logger;
private readonly IRepository<Dt_InterfaceLog> _interfaceLog;
+ private readonly IInboundService _inboundService;
+ private readonly IFeedbackMesService _feedbackMesService;
+ private readonly HttpClientHelper _httpClientHelper;
+ private readonly IRepository<Dt_MesReturnRecord> _mesReturnRecord;
+ private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecordService;
+ private readonly IInboundOrderService _inboundOrderService;
private Dictionary<string, string> stations = new Dictionary<string, string>
{
@@ -76,7 +92,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, ITask_HtyService task_HtyService, IRepository<Dt_InterfaceLog> interfaceLog) : 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, IInboundService inboundService, IFeedbackMesService feedbackMesService, HttpClientHelper httpClientHelper, IRepository<Dt_MesReturnRecord> mesReturnRecord,IStockQuantityChangeRecordService stockQuantityChangeRecordService,IInboundOrderService inboundOrderService) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
_stockInfoService = stockInfoService;
@@ -99,6 +115,13 @@
_reCheckOrderService = reCheckOrderService;
_task_HtyService = task_HtyService;
_interfaceLog = interfaceLog;
+ _inboundService = inboundService;
+ _feedbackMesService = feedbackMesService;
+ _httpClientHelper = httpClientHelper;
+ _mesReturnRecord = mesReturnRecord;
+ _stockQuantityChangeRecordService = stockQuantityChangeRecordService;
+ _inboundOrderService = inboundOrderService;
+
}
#endregion
@@ -2292,12 +2315,21 @@
return WebResponseContent.Instance.OK("鎴愬姛", data: InOderCodes);
}
- public WebResponseContent GetAvailablePickingOrders()
+ public WebResponseContent GetAvailablePickingOrders(string outOrder)
{
- List<Dt_OutboundOrder> outOders = _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).ToList();
-
- List<string> outOderCodes = outOders.Select(x => x.UpperOrderNo).ToList();
- return WebResponseContent.Instance.OK("鎴愬姛", data: outOderCodes);
+ Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == outOrder && x.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).Includes(x=>x.Details).First();
+ if(outboundOrder == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒版弧瓒冲嚭搴撴潯浠剁殑鍑哄簱鍗�");
+ }
+ //鍏堟竻绌哄崟鎹櫄鎷熷嚭鍏ュ簱鏁伴噺杩涜璁$畻
+ foreach (var item in outboundOrder.Details)
+ {
+ item.NoStockOutQty = 0;
+ item.documentsNO = "";
+ }
+ _outboundOrderDetailService.UpdateData(outboundOrder.Details);
+ return WebResponseContent.Instance.OK("鎴愬姛");
}
public WebResponseContent BarcodeValidate(NoStockOutModel noStockOut)
@@ -2309,53 +2341,158 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟锛歿noStockOut.inOder}");
}
- var matchedDetail = inboundOrder.Details.FirstOrDefault(detail => detail.Barcode == noStockOut.barCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
-
- if (matchedDetail == null)
- {
- return WebResponseContent.Instance.Error($"鍦ㄩ噰璐崟 {noStockOut.inOder} 涓湭鎵惧埌鏉$爜涓� {noStockOut.barCode} 鐨勬槑缁嗐��");
- }
- matchedDetail.NoStockOutQty = 0;
-
Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == noStockOut.outOder && x.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).Includes(x => x.Details).First();
if (outboundOrder == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟锛歿noStockOut.inOder}");
}
- var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == matchedDetail.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
- if (matchedCode == null)
- {
- return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓matchedDetail.MaterielCode} 瀵瑰簲鐨勭墿鏂欍��");
- }
- matchedCode.NoStockOutQty = 0;
+ //瀛樺偍鍏ュ簱鍗曟嵁鏄庣粏淇℃伅
+ var detailLists = new List<Dt_InboundOrderDetail>();
- //鍓╀綑鍏ュ簱鏁伴噺鍗宠櫄鎷熷嚭鍏ュ簱鍓╀綑鍙嚭鏁伴噺
- decimal outQuantity = matchedDetail.OrderQuantity - matchedDetail.ReceiptQuantity;
- if (outQuantity == 0)
- {
- return WebResponseContent.Instance.Error($"璇ラ噰璐崟涓殑鏉$爜瀵瑰簲鐨勫彲鍑烘暟閲忎负0");
- }
- if (matchedCode.OrderQuantity < outQuantity)
- {
- return WebResponseContent.Instance.Error($"璇ラ噰璐崟涓殑鏉$爜瀵瑰簲鐨勫彲鍑烘暟閲忚秴鍑哄嚭搴撳崟鍑哄簱鏁伴噺{matchedDetail.OrderQuantity - matchedCode.OrderQuantity},涓嶆弧瓒虫暣鍖呭嚭搴�");
- }
- //鍗曟嵁鍑哄簱閿佸畾鏁伴噺
- matchedDetail.NoStockOutQty += outQuantity;
- matchedCode.NoStockOutQty += outQuantity;
+ var matchedDetail = inboundOrder.Details.FirstOrDefault(detail =>
+ detail.Barcode == noStockOut.barCode &&
+ detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
- if ((matchedCode.LockQuantity + matchedCode.NoStockOutQty) > matchedCode.OrderQuantity)
+ if (matchedDetail == null)
{
- return WebResponseContent.Instance.Error($"鍑哄簱鍗曟槑缁嗘暟閲忔孩鍑簕matchedCode.LockQuantity - matchedCode.OrderQuantity}");
+ matchedDetail = inboundOrder.Details.FirstOrDefault(detail =>
+ detail.OutBoxbarcodes == noStockOut.barCode &&
+ detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
+
+ if (matchedDetail == null)
+ {
+ return WebResponseContent.Instance.Error($"鍦ㄩ噰璐崟 {noStockOut.inOder} 涓湭鎵惧埌鏉$爜涓� {noStockOut.barCode} 鐨勬槑缁嗐��");
+ }
+ else
+ {
+
+ // 娣诲姞鎵�鏈夐潪瀹屾垚鐘舵�佺殑鏄庣粏鏉$爜
+ foreach (var detail in inboundOrder.Details)
+ {
+ if (detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() &&
+ !string.IsNullOrEmpty(detail.Barcode)&& detail.OutBoxbarcodes == noStockOut.barCode)
+ {
+ detailLists.Add(detail);
+ }
+ }
+ }
}
- matchedDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt();
- matchedCode.OrderDetailStatus = OrderDetailStatusEnum.AssignOver.ObjToInt();
+ else
+ {
+ if (!string.IsNullOrEmpty(noStockOut.barCode))
+ {
+ detailLists.Add(matchedDetail);
+ }
+ }
+
+ var outDetails = new List<Dt_OutboundOrderDetail>();
+
+ foreach (var item in detailLists)
+ {
+ item.NoStockOutQty = 0;
+
+ var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == item.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()&& detail.OrderQuantity - detail.LockQuantity - detail.MoveQty - detail.NoStockOutQty > 0);
+
+ if (matchedCode != null)
+ {
+ if(matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty - matchedCode.NoStockOutQty < 0)
+ {
+ return WebResponseContent.Instance.Error($"鐗╂枡{item.MaterielCode}鍙嚭鏁伴噺婧㈠嚭{(matchedCode.LockQuantity + matchedCode.MoveQty + matchedCode.NoStockOutQty) - matchedCode.OrderQuantity}");
+ }
+ }
+ else
+ {
+ return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓item.MaterielCode} 瀵瑰簲鐨勭墿鏂�");
+ }
+ if (!matchedCode.BatchNo.IsNullOrEmpty() && matchedCode.BatchNo != "")
+ {
+ var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.BatchNo == item.BatchNo);
+ if (matcheBatch == null)
+ {
+ return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曟壒娆′腑鐨剓item.BatchNo} 瀵瑰簲鐨勭墿鏂欍��");
+ }
+ }
+ if (!matchedCode.SupplyCode.IsNullOrEmpty() && matchedCode.SupplyCode != "")
+ {
+ var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.SupplyCode == item.SupplyCode);
+ if (matcheBatch == null)
+ {
+ return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚緵搴斿晢涓殑{item.SupplyCode} 瀵瑰簲鐨勭墿鏂欍��");
+ }
+ }
+ if (!outboundOrder.FactoryArea.IsNullOrEmpty() && outboundOrder.FactoryArea != "" && !inboundOrder.FactoryArea.IsNullOrEmpty() && inboundOrder.FactoryArea != "")
+ {
+ if (inboundOrder.FactoryArea != outboundOrder.FactoryArea)
+ {
+ return WebResponseContent.Instance.Error($"璇ユ潯鐮亄item.Barcode}瀵瑰簲鐨勫崟鎹巶鍖轰笌鍑哄簱鍗曟嵁涓嶄竴鑷达紒涓嶅厑璁稿嚭搴撱��");
+ }
+ }
+ if(inboundOrder.BusinessType != "11")
+ {
+ if (!matchedCode.WarehouseCode.IsNullOrEmpty() && matchedCode.WarehouseCode != "")
+ {
+ var matcheBatch = outboundOrder.Details.FirstOrDefault(detail => detail.WarehouseCode == item.WarehouseCode);
+ if (matcheBatch == null)
+ {
+ return WebResponseContent.Instance.Error($"浠撳簱涓嶄竴鑷达紒鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚粨搴撲腑鐨剓item.WarehouseCode} 瀵瑰簲鐨勭墿鏂欍��");
+ }
+ }
+ }
+ else
+ {
+ item.WarehouseCode = matchedCode.WarehouseCode;
+ }
+
+ //鍓╀綑鍏ュ簱鏁伴噺鍗宠櫄鎷熷嚭鍏ュ簱鍓╀綑鍙嚭鏁伴噺
+ decimal outQuantity = item.OrderQuantity - item.ReceiptQuantity;
+ if (outQuantity == 0)
+ {
+ return WebResponseContent.Instance.Error($"璇ラ噰璐崟涓殑鏉$爜瀵瑰簲鐨勫彲鍑烘暟閲忎负0");
+ }
+ if (matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty - matchedCode.NoStockOutQty < outQuantity)
+ {
+ return WebResponseContent.Instance.Error($"璇ラ噰璐崟涓殑鏉$爜瀵瑰簲鐨勫彲鍑烘暟閲忚秴鍑哄嚭搴撳崟鍑哄簱鏁伴噺{item.OrderQuantity - (matchedCode.OrderQuantity - matchedCode.LockQuantity - matchedCode.MoveQty)},涓嶆弧瓒虫暣鍖呭嚭搴�");
+ }
+ //鍗曟嵁鍑哄簱閿佸畾鏁伴噺
+ item.NoStockOutQty += outQuantity;
+ matchedCode.NoStockOutQty += outQuantity;
+
+ //鍥炰紶MES鍙傛暟
+ List<Barcodes> barcodesList = new List<Barcodes>();
+ Barcodes barcodes = new Barcodes
+ {
+ Barcode = item.Barcode,
+ Qty = item.OrderQuantity,
+ SupplyCode = item?.SupplyCode ?? "",
+ BatchNo = item?.BatchNo ?? "",
+ Unit = item?.Unit ?? ""
+ };
+ if (!string.IsNullOrEmpty(matchedCode.documentsNO))
+ {
+ barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(matchedCode.documentsNO) ?? new List<Barcodes>();
+ }
+ barcodesList.Add(barcodes);
+ JsonSerializerSettings settings = new JsonSerializerSettings
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver()
+ };
+ matchedCode.documentsNO = JsonConvert.SerializeObject(barcodesList, settings);
+
+
+ if ((matchedCode.LockQuantity + matchedCode.NoStockOutQty+matchedCode.MoveQty) > matchedCode.OrderQuantity)
+ {
+ return WebResponseContent.Instance.Error($"鍑哄簱鍗曟槑缁嗘暟閲忔孩鍑簕matchedCode.OrderQuantity - matchedCode.LockQuantity-matchedCode.NoStockOutQty-matchedCode.MoveQty}");
+ }
+
+ outDetails.Add(matchedCode);
+ }
_unitOfWorkManage.BeginTran();
- _inboundOrderDetailService.UpdateData(matchedDetail);
- _outboundOrderDetailService.UpdateData(matchedCode);
+ _inboundOrderDetailService.UpdateData(detailLists);
+ _outboundOrderDetailService.UpdateData(outDetails);
_unitOfWorkManage.CommitTran();
- return WebResponseContent.Instance.OK();
+ return WebResponseContent.Instance.OK("鎴愬姛",data:detailLists);
}
catch (Exception ex)
{
@@ -2392,13 +2529,42 @@
{
return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟锛歿noStockOut.inOder}");
}
- var matchedCode = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == matchedDetail.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
+
+ // 鎾ら攢鍥炰紶MES鍙傛暟
+ List<Barcodes> barcodesList = new List<Barcodes>();
+ Barcodes barcodes = new Barcodes
+ {
+ Barcode = matchedDetail.Barcode,
+ Qty = matchedDetail.OrderQuantity,
+ SupplyCode = matchedDetail?.SupplyCode ?? "",
+ BatchNo = matchedDetail?.BatchNo ?? "",
+ Unit = matchedDetail?.Unit ?? ""
+ };
+ var matchedCode = outboundOrder.Details.FirstOrDefault(detail =>
+ detail.documentsNO.Contains(barcodes.Barcode) &&
+ detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()
+ );
if (matchedCode == null)
{
return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓matchedDetail.MaterielCode} 瀵瑰簲鐨勭墿鏂欍��");
}
- matchedCode.NoStockOutQty = 0;
+
+ if (!string.IsNullOrEmpty(matchedCode.documentsNO))
+ {
+ barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(matchedCode.documentsNO) ?? new List<Barcodes>();
+ }
+ barcodesList.RemoveAll(b =>
+ string.Equals(b.Barcode, barcodes.Barcode, StringComparison.OrdinalIgnoreCase)
+ );
+
+ JsonSerializerSettings settings = new JsonSerializerSettings
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver()
+ };
+ matchedCode.documentsNO = JsonConvert.SerializeObject(barcodesList, settings);
+
+ matchedCode.NoStockOutQty -= matchedDetail.OrderQuantity;
if (matchedCode.LockQuantity == 0 && matchedCode.OverOutQuantity == 0)
{
matchedCode.OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt();
@@ -2421,256 +2587,196 @@
{
try
{
- Dt_InboundOrder inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == noStockOutSubmit.InOderSubmit && x.OrderStatus != InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()).Includes(x => x.Details).First();
- if (inboundOrder == null)
- {
- return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟锛歿noStockOutSubmit.InOderSubmit}");
- }
Dt_OutboundOrder outboundOrder = _inboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == noStockOutSubmit.OutOderSubmit && x.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).Includes(x => x.Details).First();
if (outboundOrder == null)
{
return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟锛歿noStockOutSubmit.OutOderSubmit}");
}
- List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
+
List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
- foreach (var BarCode in noStockOutSubmit.BarCodeSubmit)
+
+ Dictionary<int, List<string>> orderIdBarCodeDict = new Dictionary<int, List<string>>();
+
+ List<Dt_InboundOrderDetail> updateInboundDetails = new List<Dt_InboundOrderDetail>();
+
+ Dictionary<int, Dt_InboundOrder> updateInboundOrders = new Dictionary<int, Dt_InboundOrder>();
+
+ List<Dt_StockQuantityChangeRecord> changeRecords = new List<Dt_StockQuantityChangeRecord>();
+ _unitOfWorkManage.BeginTran();
+
+ List<Dt_InboundOrderDetail> allInboundDetails = _inboundOrderDetailService.Db
+ .Queryable<Dt_InboundOrderDetail>()
+ .Where(detail => noStockOutSubmit.BarCodeSubmit.Contains(detail.Barcode)
+ && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt())
+ .ToList();
+
+ var detailGroupByOrderId = allInboundDetails.GroupBy(d => d.OrderId).ToList();
+ foreach (var group in detailGroupByOrderId)
{
- var inboundOrderDetail = inboundOrder.Details.FirstOrDefault(detail => detail.Barcode == BarCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
+ int orderId = group.Key;
+ List<Dt_InboundOrderDetail> groupDetails = group.ToList();
+ List<string> groupBarCodes = groupDetails.Select(d => d.Barcode).ToList();
- if (inboundOrderDetail == null)
+ orderIdBarCodeDict[orderId] = groupBarCodes;
+
+ Dt_InboundOrder currentInboundOrder = null;
+ if (!updateInboundOrders.TryGetValue(orderId, out currentInboundOrder))
{
- return WebResponseContent.Instance.Error($"鍦ㄩ噰璐崟 {noStockOutSubmit.InOderSubmit} 涓湭鎵惧埌鏉$爜涓� {BarCode} 鐨勬槑缁嗐��");
+ currentInboundOrder = _inboundOrderRepository.Db
+ .Queryable<Dt_InboundOrder>()
+ .Where(x => x.Id == orderId)
+ .Includes(x => x.Details)
+ .First();
+
+ if (currentInboundOrder == null)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟ID涓� {orderId} 鐨勫崟鎹�");
+ }
+ updateInboundOrders[orderId] = currentInboundOrder;
}
- var outboundOrderDetail = outboundOrder.Details.FirstOrDefault(detail => detail.MaterielCode == inboundOrderDetail.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
- if (outboundOrderDetail == null)
+ foreach (var detail in groupDetails)
{
- return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟鐨勭墿鏂欑紪鐮佷腑鏈壘鍒颁笌閲囪喘鍗曚腑鐨剓inboundOrderDetail.MaterielCode} 瀵瑰簲鐨勭墿鏂欍��");
+ detail.ReceiptQuantity = detail.NoStockOutQty;
+ detail.OverInQuantity = detail.NoStockOutQty;
+
+ if (detail.OrderQuantity == detail.OverInQuantity)
+ {
+ detail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ updateInboundDetails.Add(detail);
+
+ //娣诲姞搴撳瓨鍙樺姩璁板綍
+ Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord
+ {
+ StockDetailId = detail.Id,
+ PalleCode = DateTime.Now.ToString(),
+ MaterielCode = detail.MaterielCode,
+ MaterielName = detail.MaterielName ?? "",
+ BatchNo = detail.BatchNo ?? "",
+ OriginalSerilNumber = detail.Barcode,
+ NewSerilNumber = "",
+ OrderNo = currentInboundOrder.InboundOrderNo,
+ TaskNum = 0,
+ ChangeType = (int)StockChangeTypeEnum.Inbound,
+ ChangeQuantity = detail.NoStockOutQty,
+ BeforeQuantity = detail.OverInQuantity - detail.NoStockOutQty,
+ AfterQuantity = detail.OverInQuantity,
+ SupplyCode = detail.SupplyCode ?? "",
+ WarehouseCode = detail.WarehouseCode ?? "",
+ Remark = $"铏氭嫙鍏ュ簱"
+ };
+ changeRecords.Add(changeRecord);
}
- inboundOrderDetail.ReceiptQuantity += inboundOrderDetail.NoStockOutQty;
- inboundOrderDetail.OverInQuantity = inboundOrderDetail.ReceiptQuantity;
- inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
- inboundOrderDetails.Add(inboundOrderDetail);
- outboundOrderDetail.LockQuantity += outboundOrderDetail.NoStockOutQty;
- outboundOrderDetail.OverOutQuantity = outboundOrderDetail.LockQuantity;
- if (outboundOrderDetail.OrderQuantity == outboundOrderDetail.OverOutQuantity)
+ var inboundOrder = updateInboundOrders[orderId];
+ int totalDetailCount = inboundOrder.Details.Count;
+
+ int finishedDetailCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+ + groupDetails.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+
+ inboundOrder.OrderStatus = totalDetailCount == finishedDetailCount
+ ? InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()
+ : InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
+ }
+
+ if (updateInboundDetails.Any())
+ {
+ _inboundOrderDetailService.Db.Updateable(updateInboundDetails).ExecuteCommand();
+ }
+ if (updateInboundOrders.Any())
+ {
+ // 鎵归噺鏇存柊鍏ュ簱涓诲崟
+ _inboundOrderService.Db.Updateable(updateInboundOrders.Values.ToList()).ExecuteCommand();
+ }
+
+ // 7. 寰幆鍒嗙粍缁撴灉锛岃皟鐢∕ES鍥炰紶鏂规硶锛堟寜鍏ュ簱鍗曞垎缁勫洖浼狅級
+ foreach (var kvp in orderIdBarCodeDict)
+ {
+ int orderId = kvp.Key;
+ List<string> barCodeList = kvp.Value;
+ //鍏ュ簱鍥炰紶MES
+ NoStockOutBatchInOrderFeedbackToMes(orderId, barCodeList);
+ }
+
+ //鍙鍑哄簱鏉$爜鐨勫嚭搴撳崟鏄庣粏杩涜璁$畻鍥炰紶
+ List<Dt_OutboundOrderDetail> outboundOrderDetail = outboundOrder.Details
+ .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO)
+ && noStockOutSubmit.BarCodeSubmit.Any(barcode =>
+ x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0))
+ .ToList();
+
+ foreach (var item in outboundOrderDetail)
+ {
+ item.LockQuantity += item.NoStockOutQty;
+ item.OverOutQuantity += item.NoStockOutQty;
+ item.CurrentDeliveryQty = item.NoStockOutQty;
+ //娣诲姞鍥炰紶MES鍙傛暟
+ List<Barcodes> barcodesList = new List<Barcodes>();
+ List<Barcodes> documentsNOList = new List<Barcodes>();
+ if (!string.IsNullOrEmpty(item.ReturnJsonData))
{
- outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ barcodesList = JsonConvert.DeserializeObject<List<Barcodes>>(item.documentsNO) ?? new List<Barcodes>();
}
- outboundOrderDetails.Add(outboundOrderDetail);
-
- var newLockInfo = new Dt_OutStockLockInfo
+ if (!string.IsNullOrEmpty(item.documentsNO) && item.documentsNO!="")
{
- 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.BarcodeQty,
- BarcodeUnit = outboundOrderDetail.BarcodeUnit,
- BatchNo = outboundOrderDetail.BatchNo
+ documentsNOList = JsonConvert.DeserializeObject<List<Barcodes>>(item.documentsNO) ?? new List<Barcodes>();
+ }
+ foreach (var documentsNO in documentsNOList)
+ {
+ barcodesList.Add(documentsNO);
+ }
+ JsonSerializerSettings settings = new JsonSerializerSettings
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver()
};
- _outStockLockInfoService.AddData(newLockInfo);
+ item.ReturnJsonData = JsonConvert.SerializeObject(barcodesList, settings);
+ //娣诲姞搴撳瓨鍙樺姩璁板綍
+ Dt_StockQuantityChangeRecord changeRecord = new Dt_StockQuantityChangeRecord
+ {
+ StockDetailId = item.Id,
+ PalleCode = DateTime.Now.ToString(),
+ MaterielCode = item.MaterielCode,
+ MaterielName = item.MaterielName ?? "",
+ BatchNo = item.BatchNo ?? "",
+ OriginalSerilNumber = item.ReturnJsonData,
+ NewSerilNumber = "",
+ OrderNo = outboundOrder.OrderNo,
+ TaskNum = 0,
+ ChangeType = (int)StockChangeTypeEnum.Inbound,
+ ChangeQuantity = -item.NoStockOutQty,
+ BeforeQuantity = item.OrderQuantity,
+ AfterQuantity = item.OrderQuantity - item.OverOutQuantity,
+ SupplyCode = item.SupplyCode ?? "",
+ WarehouseCode = item.WarehouseCode ?? "",
+ Remark = $"铏氭嫙鍑哄簱"
+ };
+ changeRecords.Add(changeRecord);
+ outboundOrderDetails.Add(item);
}
- //鍒ゆ柇鍏ュ簱鍗曟嵁鏄庣粏鏄惁鍏ㄩ儴鏄畬鎴愮姸鎬�
- int e = inboundOrder.Details.Count();
- int w = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
- bool inoderOver = inboundOrder.Details.Count() == inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
- if (inoderOver)
+
+ _outboundOrderDetailService.UpdateData(outboundOrderDetails);
+ //鎵归噺娣诲姞搴撳瓨鍙樺姩璁板綍
+ if (changeRecords.Any())
{
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+ _stockQuantityChangeRecordService.Db.Insertable(changeRecords).ExecuteCommand();
}
- else
- {
- inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt();
- }
- //鍒ゆ柇鍑哄簱鍗曟嵁鏄庣粏鏄惁鍏ㄩ儴鏄畬鎴愮姸鎬�
- bool outOderOver = outboundOrder.Details.Count() == outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
- if (outOderOver)
+ // 妫�鏌ュ嚭搴撳崟鏄惁瀹屾垚
+ if (CheckOutboundOrderCompleted(outboundOrder.OrderNo))
{
outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+
}
else
{
outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
}
- //鏁版嵁澶勭悊
- _unitOfWorkManage.BeginTran();
- _inboundOrderDetailService.UpdateData(inboundOrderDetails);
- _outboundOrderDetailService.UpdateData(outboundOrderDetails);
- _inboundOrderRepository.UpdateData(inboundOrder);
_outboundOrderService.UpdateData(outboundOrder);
_unitOfWorkManage.CommitTran();
-
- //鍏ュ簱鍥炰紶MES
- var infeedmodel = 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
- {
- 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 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, Remark = "" })
- .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
- }
- _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
- .Where(it => orderIds.Contains(it.Id)).ExecuteCommand();
- }
- else
- {
- _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
+ _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
- 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);
-
- _outStockLockInfoService.DeleteData(detailLocks);
- }
- //瀛樺偍鍥炰紶鍙傛暟锛屼繚璇佸紓甯告墜鍔ㄥ洖浼�
- 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)
@@ -2680,6 +2786,232 @@
}
}
+
+ public WebResponseContent NoStockOutBatchInOrderFeedbackToMes(int id,List<string> barCodeList)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>()
+ .Where(x => x.Id == id)
+ .First();
+
+ List<Dt_MesReturnRecord> returnRecords = _mesReturnRecord.QueryData(x => x.OrderNo == inboundOrder.InboundOrderNo && x.OrderId == inboundOrder.Id && x.ReturnStatus == 2);
+ foreach (var item in returnRecords)
+ {
+ HttpResponseResult<MesResponseDTO> httpResponse = _httpClientHelper.Post<MesResponseDTO>(item.ApiUrl, item.RequestData);
+ item.ReturnCount += 1;
+ bool success = httpResponse.IsSuccess && httpResponse.Data.Code == "200";
+ item.ReturnStatus = success ? 1 : 2;
+ item.HttpStatusCode = httpResponse.StatusCode.ObjToInt();
+ item.LastReturnTime = DateTime.Now;
+ item.ResponseData = httpResponse.Content;
+ item.SuccessTime = httpResponse.IsSuccess ? DateTime.Now : null;
+
+ //List<Dt_InboundOrderDetail> details=new List<Dt_InboundOrderDetail>();
+ //foreach (var y in item.DetailsId.Split(','))
+ //{
+ // details.Add( _inboundOrderDetailRepository.QueryFirst(x => x.Id == Convert.ToInt32(y)));
+ //}
+ }
+ _mesReturnRecord.UpdateData(returnRecords);
+
+ var inboundOrderDetail = _inboundOrderRepository.Db.Queryable<Dt_InboundOrderDetail>()
+ .Where(x => x.OrderId == inboundOrder.Id && x.OrderDetailStatus == (int)OrderDetailStatusEnum.Over && x.ReturnToMESStatus == 0)
+ .ToList();
+
+ var detail = inboundOrderDetail.Where(x => barCodeList.Contains(x.Barcode)).ToList();
+
+ if (inboundOrder.OrderType == (int)InOrderTypeEnum.AllocatInbound)//璋冩嫧鍏ュ簱
+ {
+ var allocate = _inboundOrderRepository.Db.Queryable<Dt_AllocateOrder>().Where(x => x.OrderNo == inboundOrder.InboundOrderNo).First();
+ var allocatefeedmodel = new AllocateDto
+ {
+ ReqCode = Guid.NewGuid().ToString(),
+ ReqTime = DateTime.Now.ToString(),
+ BusinessType = "3",
+ FactoryArea = inboundOrder.FactoryArea,
+ OperationType = 1,
+ Operator = App.User.UserName,
+ OrderNo = inboundOrder.UpperOrderNo,
+ fromWarehouse = allocate?.FromWarehouse ?? "",
+ toWarehouse = allocate?.ToWarehouse ?? "",
+ Details = NoStockOutGetAllocateDtoDetails(detail)
+ };
+
+ if (allocatefeedmodel.Details.Count <= 0)
+ {
+ throw new Exception("鏈壘鍒伴渶瑕佸洖浼犵殑鏁版嵁");
+ }
+
+ var response = NoStockOutresponseModel(inboundOrder, 3, null, allocatefeedmodel);
+
+ if (response != null && response.IsSuccess)
+ {
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
+ .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+ .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+ }
+ else
+ {
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 })
+ .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus =2})
+ .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+ return content.Error("鍥炰紶MES澶辫触");
+ }
+ }
+ else
+ {
+ 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 = NoStockOutFeedbackInboundDetailsModelDto(detail)
+ };
+
+ if (feedmodel.details.Count <= 0)
+ {
+ throw new Exception("鏈壘鍒伴渶瑕佸洖浼犵殑鏁版嵁");
+ }
+ var response = NoStockOutresponseModel(inboundOrder, 3, feedmodel);
+
+ if (response != null && response.IsSuccess)
+ {
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
+ .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+ .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+ }
+ else
+ {
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }).Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
+ _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 })
+ .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+ return content.Error("鍥炰紶MES澶辫触");
+ }
+ }
+
+ return content.OK("鍥炰紶MES鎴愬姛");
+ }
+ catch (Exception ex)
+ {
+ return content.Error(ex.Message);
+ }
+ }
+
+ public List<AllocateDtoDetail> NoStockOutGetAllocateDtoDetails(List<Dt_InboundOrderDetail> inboundOrderDetails)
+ {
+ var groupedData = inboundOrderDetails.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.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();
+ return groupedData;
+ }
+ public List<FeedbackInboundDetailsModel> NoStockOutFeedbackInboundDetailsModelDto(List<Dt_InboundOrderDetail> inboundOrderDetails )
+ {
+ var groupedData = inboundOrderDetails.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
+ .Select(group => new FeedbackInboundDetailsModel
+ {
+ materialCode = group.Key.MaterielCode,
+ lineNo = group.Key.lineNo,
+ warehouseCode = group.Key.WarehouseCode,
+ qty = group.Sum(x => x.BarcodeQty),
+ unit = group.Key.BarcodeUnit,
+ barcodes = group.Select(row => new FeedbackBarcodesModel
+ {
+ barcode = row.Barcode,
+ qty = row.BarcodeQty
+ }).ToList()
+ }).ToList();
+ return groupedData;
+ }
+
+ public HttpResponseResult<MesResponseDTO> NoStockOutresponseModel(Dt_InboundOrder order, int InterfaceType, FeedbackInboundRequestModel model = null, AllocateDto allocateDto = null)
+ {
+ HttpResponseResult<MesResponseDTO> httpResponseResult = new HttpResponseResult<MesResponseDTO>();
+ string reqCode = Guid.NewGuid().ToString();
+ string reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ string requestData = string.Empty;
+ string apiUrl = string.Empty;
+ if (model != null)
+ {
+ apiUrl = AppSettings.GetValue("AldMaterialWarehousing");
+ httpResponseResult = _httpClientHelper.Post<MesResponseDTO>(apiUrl, model.Serialize());
+ requestData = model.Serialize();
+ }
+ else
+ {
+ apiUrl = AppSettings.GetValue("AldAllocationOperation");
+ httpResponseResult = _httpClientHelper.Post<MesResponseDTO>(apiUrl, allocateDto.Serialize());
+ requestData = allocateDto.Serialize();
+ }
+ httpResponseResult.ApiUrl = apiUrl;
+ bool isSuccess = httpResponseResult.IsSuccess && httpResponseResult.Data.Code == "200";
+ string message = "鎴愬姛";
+ if (!isSuccess)
+ {
+ if (!httpResponseResult.IsSuccess)
+ {
+ message = $"MES鎺ュ彛杩斿洖閿欒锛孒TTP浠g爜锛歿httpResponseResult.StatusCode}锛屼俊鎭細{httpResponseResult.ErrorMessage}";
+ }
+ else if (httpResponseResult?.Data?.Code != "200")
+ {
+ message = $"璋冪敤MES鎺ュ彛澶辫触锛屼唬鐮侊細{httpResponseResult?.Data?.Code}锛屼俊鎭細{httpResponseResult?.Data?.Message}";
+ }
+ }
+ Dt_MesReturnRecord mesReturnRecord = new Dt_MesReturnRecord()
+ {
+ ApiUrl = httpResponseResult.ApiUrl,
+ InterfaceType = InterfaceType,
+ OrderId = order.Id,
+ OrderNo = order.InboundOrderNo,
+ RequestCode = reqCode,
+ RequestData = requestData,
+ FailureReason = message,
+ LastReturnTime = DateTime.Now,
+ HttpStatusCode = httpResponseResult.StatusCode.ObjToInt(),
+ ResponseData = httpResponseResult.Content,
+ ReturnType = 0,
+ ReturnCount = 1,
+ ReturnStatus = httpResponseResult.IsSuccess ? 1 : 2,
+ SuccessTime = httpResponseResult.IsSuccess ? DateTime.Now : null
+ };
+ _unitOfWorkManage.Db.Insertable(mesReturnRecord).ExecuteCommand();
+
+ return httpResponseResult;
+ }
+ public bool CheckOutboundOrderCompleted(string orderNo)
+ {
+ Dt_OutboundOrder outboundOrder = _outboundOrderService.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderNo).First();
+ if (outboundOrder == null) return false;
+
+ List<Dt_OutboundOrderDetail> details = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.OrderId == outboundOrder.Id).ToList();
+
+ // 妫�鏌ユ墍鏈夋槑缁嗙殑宸插嚭鏁伴噺鏄惁閮界瓑浜庡崟鎹暟閲�
+ return details.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty);
+ }
+
public WebResponseContent GetPurchaseOrderByBarcode(string barcode)
{
try
@@ -2687,7 +3019,12 @@
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}鐨勫叆搴撴槑缁嗘垨鑰呮槑缁嗙姸鎬佸凡鍏ユ櫤浠撳畬鎴�");
+ inboundOrderDetail = _stockInfoDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OutBoxbarcodes == 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)
--
Gitblit v1.9.3