From 695571c6009ecbc12e7d4a4fb147df7967a1260e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 07 七月 2025 20:21:19 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs | 991 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 938 insertions(+), 53 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
index 7effb11..9ea6759 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
@@ -1,9 +1,11 @@
锘縰sing AutoMapper;
using Castle.Core.Resource;
+using Org.BouncyCastle.Asn1.Cmp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
@@ -15,6 +17,7 @@
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.ERP;
+using WIDESEA_DTO.Outbound;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
@@ -51,24 +54,24 @@
_invokeERPService = invokeERPService;
}
/// <summary>
- /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗�
+ /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗曚俊鎭�(璁㈠崟鍑哄簱/瀵勫敭鍑哄簱)
/// </summary>
/// <returns></returns>
- public WebResponseContent ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
+ public async Task<WebResponseContent> ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
{
try
{
return outOrderDTO.Way switch
{
- 1 => AddDeliveryOrder(outOrderDTO),
- 2 => UpdateDeliveryOrder(outOrderDTO),
- 3 => DeleteDeliveryOrder(outOrderDTO),
- _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{outOrderDTO.Way}"),
+ 1 => await Task.FromResult(AddDeliveryOrder(outOrderDTO)),
+ 2 => await Task.FromResult(UpdateDeliveryOrder(outOrderDTO)),
+ 3 => await Task.FromResult(DeleteDeliveryOrder(outOrderDTO)),
+ _ => await Task.FromResult(WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{outOrderDTO.Way}")),
};
}
catch (Exception ex)
{
- return WebResponseContent.Instance.Error(ex.Message);
+ return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
}
}
/// <summary>
@@ -95,6 +98,7 @@
warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
}
List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
+ Dictionary<string,string> keyValuePairs =new Dictionary<string, string>();
foreach (var item in outOrderDTO.OrderDetails)
{
//鍒ゆ柇瀹㈡埛鏄惁瀛樺湪
@@ -103,7 +107,33 @@
{
return content.Error($"瀹㈡埛{item.Customer}涓嶅瓨鍦�!");
}
- proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item));
+ Dt_ProOutOrderDetail proOutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item);
+ if (!string.IsNullOrEmpty(item.SaleOrder))
+ {
+ if (keyValuePairs!=null && keyValuePairs.ContainsKey(item.SaleOrder))
+ {
+ proOutOrderDetail.EndCustomer = keyValuePairs[item.SaleOrder];
+ }
+ else
+ {
+ string request = _invokeERPService.InvokeProSaleCustomer(item.SaleOrder);
+ ErpSaleCustomResponseContent responseContent=request.DeserializeObject<ErpSaleCustomResponseContent>();
+ if (responseContent.Code!=200)
+ {
+ return content.Error($"璁㈠崟{item.SaleOrder}缁堢瀹㈡埛鑾峰彇澶辫触!");
+ }
+ //鍒ゆ柇缁堢瀹㈡埛鏄惁瀛樺湪
+ Dt_CustomerInfo? customerInfoEnd = customerInfos.Where(x => x.Code == responseContent.Data[0].Endcustomer).FirstOrDefault();
+ if (customerInfoEnd == null)
+ {
+ return content.Error($"缁堢瀹㈡埛{responseContent.Data[0].Endcustomer}涓嶅瓨鍦�!");
+ }
+ proOutOrderDetail.EndCustomer = responseContent.Data[0].Endcustomer;
+ keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer);
+ }
+ }
+ proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty;
+ proOutOrderDetails.Add(proOutOrderDetail);
}
Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder()
{
@@ -133,7 +163,7 @@
WebResponseContent content = new WebResponseContent();
try
{
-
+
}
catch (Exception ex)
{
@@ -150,23 +180,101 @@
WebResponseContent content = new WebResponseContent();
try
{
-
+ Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outOrderDTO.OrderNo).Includes(x => x.Details).First();
+ if (proOutOrder==null)
+ {
+ return content.Error($"鏈壘鍒板嚭搴撳崟{outOrderDTO.OrderNo}");
+ }
+ if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt() || proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt())
+ {
+ return content.Error("鍑哄簱鍗曟墽琛屼腑");
+ }
+ _unitOfWorkManage.BeginTran();
+ _outboundRepository.ProOutOrderRepository.DeleteData(proOutOrder);
+ _outboundRepository.ProOutOrderDetailRepository.DeleteData(proOutOrder.Details);
+ _unitOfWorkManage.CommitTran();
+ content.OK("鎴愬姛");
}
catch (Exception ex)
{
+ _unitOfWorkManage.RollbackTran();
content.Error(ex.Message);
}
return content;
}
/// <summary>
- /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱
+ /// 閿�鍞寚娲�
/// </summary>
/// <returns></returns>
- public WebResponseContent OutProductPK(string[] OutPKCodes,string ProOutNo)
+ public async Task<WebResponseContent> ProductSpecifyVer(ErpProductSpecifyVerDTO erpProductSpecifyVerDTO)
{
WebResponseContent content = new WebResponseContent();
try
{
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==erpProductSpecifyVerDTO.WaType);
+ if (warehouse == null)
+ return await Task.FromResult(content.Error($"鏈壘鍒皗erpProductSpecifyVerDTO.WaType}浠撳簱淇℃伅"));
+ //鏌ヨ鍙寚娲惧簱瀛�
+ List<Dt_ProStockInfo> proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => x.ProStockAttribute == ProStockAttributeEnum.鎴愬搧.ObjToInt())
+ .Includes(x => x.proStockInfoDetails)
+ .Where(x => x.proStockInfoDetails
+ .Any(v =>
+ v.SaleOrder == erpProductSpecifyVerDTO.OrderNo
+ && v.ProductCode == erpProductSpecifyVerDTO.PCode
+ && v.ProductVersion == erpProductSpecifyVerDTO.PVer
+ && v.LotNumber == erpProductSpecifyVerDTO.PLot
+ && v.DateCode == erpProductSpecifyVerDTO.DateCode
+ && (v.SpecifyVer==null||v.SpecifyVer=="")
+ ))
+ .ToList();
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ List<Dt_ProStockInfoDetail> specifyVerDetails = new List<Dt_ProStockInfoDetail>();
+ if (proStockInfos==null)
+ return await Task.FromResult(content.Error("鍙寚娲惧簱瀛樹笉瀛樺湪"));
+ proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.CreateDate).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList();
+ foreach (var item in proStockInfos)
+ {
+ proStockInfoDetails.AddRange(item.proStockInfoDetails);
+ }
+ if (proStockInfoDetails.Sum(x=>x.StockPcsQty)< erpProductSpecifyVerDTO.QtyPcs)
+ return await Task.FromResult(content.Error($"鍙寚娲惧簱瀛樻暟閲忎笉瓒�,鍙敤:{proStockInfoDetails.Sum(x => x.StockPcsQty)}"));
+ float overQty = 0;
+ foreach (var item in proStockInfoDetails)
+ {
+ specifyVerDetails.Add(item);
+ overQty += item.StockPcsQty;
+ //宸叉弧瓒宠幏鍙栨暟閲忎笉鍐嶆洿鏀�
+ if (overQty>= erpProductSpecifyVerDTO.QtyPcs)
+ {
+ break;
+ }
+ }
+ specifyVerDetails.ForEach(x =>
+ {
+ x.SpecifyVer = erpProductSpecifyVerDTO.Ver;
+ });
+ _unitOfWorkManage.BeginTran();
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(specifyVerDetails);
+ _unitOfWorkManage.CommitTran();
+ content.OK("鎸囨淳鎴愬姛");
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
+ }
+ return await Task.FromResult(content);
+ }
+ /// <summary>
+ /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱(缁戝畾浜嗗嚭搴撳崟搴撳瓨)
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent OutProductPK(SaveModel saveModel, string ProOutNo)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ List<string> OutPKCodes = saveModel.DelKeys.Select(x => x.ToString()).ToList();
if (OutPKCodes.IsNullOrEmpty())
{
return content.Error("涓嶈兘涓虹┖");
@@ -183,10 +291,14 @@
string? userName = App.User.UserName;//GSWMS
//鑾峰彇鎵�鏈夊绠辩殑鏁版嵁
List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
- .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
+ .Where(x => OutPKCodes.Contains(x.PalletCode) && x.ShipmentOrder == proOutOrder.ProOutOrderNo && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
.Includes(x => x.proStockInfoDetails).ToList();
+ if (AllproStockInfos.Count<=0)
+ {
+ return content.Error($"鍑哄簱鍗晎ProOutNo}宸叉棤缁戝畾搴撳瓨");
+ }
List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
- List<Dt_ProStockInfoDetail> proStockInfoDetails=new List<Dt_ProStockInfoDetail>();
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
foreach (var item in OutPKCodes)
{
@@ -214,20 +326,24 @@
return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}");
}
List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
- List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
+ List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
if (proOutOrderDetails==null || proOutOrderDetails.Count<=0)
{
return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖");
}
+ int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+ List<Dt_ProOutOrderDetail> newProDetails=new List<Dt_ProOutOrderDetail>();
foreach (var item in proStockInfoDetails)
{
//鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁
- Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.Id==item.OutDetailId && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
if (proOutOrderDetail==null)
{
return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�");
}
proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
+ item.OutboundQuantity = item.StockPcsQty;
+ item.OutSETQty = item.SETQty;
if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs)
{
return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
@@ -235,55 +351,87 @@
if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
{
proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ newProDetails.Add(proOutOrderDetail);
}
- StockOutItemsItem outItemsItem = new StockOutItemsItem()
- {
- PartNum=item.ProductCode,
- Rev=item.ProductVersion,
- SoNumber=item.SaleOrder,
- BatchNumber=item.BagNo,
- QtyPcs=item.StockPcsQty,
- QtySet=item.SETQty
- };
- stockOutItems.Add(outItemsItem);
+
}
- int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
- int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
- if (proOutOrder.Details.Count== (OldOverCount + AddOverCount))
+
+ int AddOverCount = newProDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+ if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
{
proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨
+ List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+ .Where(x => x.ShipmentOrder== ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt())
+ .Includes(x => x.proStockInfoDetails).ToList();
+ AllOutStocks.ForEach(x =>
+ {
+ proStockInfoDetails.AddRange(x.proStockInfoDetails);
+ });
+ proStockInfos.AddRange(AllOutStocks);
+ foreach (var item in proStockInfoDetails)
+ {
+ StockOutItemsItem outItemsItem = new StockOutItemsItem()
+ {
+ PartNum = item.ProductCode,
+ Rev = item.ProductVersion,
+ SoNumber = item.OutDetailSaleNo,
+ BatchNumber = item.BagNo,
+ QtyPcs = item.OutboundQuantity,
+ QtySet = item.OutSETQty
+ };
+ stockOutItems.Add(outItemsItem);
+ }
}
+ _unitOfWorkManage.BeginTran();
Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
//澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
- _unitOfWorkManage.BeginTran();
- _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
- _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
- _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
- BaseDal.UpdateData(proOutOrder);
- //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
- ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+ if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
{
- Way = 1,
- StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
- ConfirmedUserNo=userName,
- AssignUserNo=userName,
- WarehouseCode=warehouse.WarehouseCode,
- ShipDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
- DeliverplanCode=proOutOrder.ProOutOrderNo,
- Remark=proOutOrder.Remark,
- StockOutItems= stockOutItems
- };
- string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
- ErpRequestContent erpRequestContent= response.DeserializeObject<ErpRequestContent>();
- if (erpRequestContent.res==1)
- {
- _unitOfWorkManage.CommitTran();
- content.OK();
+ //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+ ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+ {
+ Way = 1,
+ StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+ ConfirmedUserNo = App.User.UserName,
+ AssignUserNo = App.User.UserName,
+ WarehouseCode = warehouse.WarehouseCode,
+ ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ DeliverplanCode = proOutOrder.ProOutOrderNo,
+ Remark = proOutOrder.Remark,
+ StockOutItems = stockOutItems
+ };
+ _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+ _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
+ //WebResponseContent contentSaveInfos = SaveOutProPKInfos(proStockInfos);
+ //if (!contentSaveInfos.Status)
+ //{
+ // throw new Exception(contentSaveInfos.Message);
+ //};
+ string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+ ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+ if (erpRequestContent.res != 1)
+ {
+ throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+ }
}
else
{
- throw new Exception(erpRequestContent.Data);
+ proStockInfos.ForEach(x =>
+ {
+ x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+ });
+ proStockInfoDetails.ForEach(x =>
+ {
+ x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+ });
+ _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
}
+ _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
+ BaseDal.UpdateData(proOutOrder);
+ _unitOfWorkManage.CommitTran();
+ content.OK();
}
catch (Exception ex)
{
@@ -292,5 +440,742 @@
}
return content;
}
+ /// <summary>
+ /// 鑾峰彇鍑哄簱鎵�鏈夌殑澶栧唴鍖呮槑缁�
+ /// </summary>
+ /// <param name="proStockInfos"></param>
+ /// <returns></returns>
+ public WebResponseContent SaveOutProPKInfos(List<Dt_ProStockInfo> proStockInfos)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ List<Dt_OutProPKStockInfo> outProPKStockInfos = new List<Dt_OutProPKStockInfo>();
+ foreach (var fromItem in proStockInfos)
+ {
+ foreach (var lordItem in fromItem.proStockInfoDetails)
+ {
+ Dt_OutProPKStockInfo outProPKStockInfo = new Dt_OutProPKStockInfo()
+ {
+ PCode = lordItem.ProductCode,
+ PVer=lordItem.ProductVersion,
+ PLot=lordItem.ProductVersion,
+ DateCode=lordItem.DateCode,
+ StockId=fromItem.Id,
+ OriginalQuantity=lordItem.StockPcsQty,
+ AssignQuantity=lordItem.StockPcsQty,
+ PalletCode=fromItem.PalletCode,
+ Unit="PCS"
+ };
+ outProPKStockInfos.Add(outProPKStockInfo);
+ }
+ }
+ Db.InsertNav(outProPKStockInfos).Include(x=>x).ExecuteCommand();
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ //鏍规嵁鍐呭寘鍑哄簱
+ public WebResponseContent BagProductPK(SaveModel saveModel)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ var outOrder = saveModel.MainData["proOutNo"].ToString();
+ var outBags = saveModel.DelKeys.Select(x => x.ToString()).ToList();
+ if (outBags.Count<=0)
+ {
+ return content.Error("鍐呭寘淇℃伅鑾峰彇澶辫触");
+ }
+
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱(鏈粦瀹氬嚭搴撳崟搴撳瓨)
+ /// </summary>
+ /// <returns></returns>
+ //public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo)
+ //{
+ // WebResponseContent content = new WebResponseContent();
+ // try
+ // {
+ // if (OutPKCodes.IsNullOrEmpty())
+ // {
+ // return content.Error("涓嶈兘涓虹┖");
+ // }
+ // Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
+ // if (proOutOrder == null)
+ // {
+ // return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�");
+ // }
+ // if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ // {
+ // return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�");
+ // }
+ // string? userName = App.User.UserName;//GSWMS
+ // //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁
+ // List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+ // .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
+ // .Includes(x => x.proStockInfoDetails).ToList();
+ // List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
+ // List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ // List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
+ // foreach (var item in OutPKCodes)
+ // {
+ // //鑾峰彇搴撳瓨
+ // Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault();
+ // if (proStockInfo == null)
+ // {
+ // return content.Error($"鏈壘鍒皗item}搴撳瓨");
+ // }
+ // if (proStockInfo.ShipmentOrder!=null)
+ // {
+ // return content.Error($"澶栫鍙穥item}涓哄嚭搴撳崟{proStockInfo.ShipmentOrder}鎸囧畾搴撳瓨!");
+ // }
+ // Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault();
+ // if (dt_Warehouse == null)
+ // {
+ // return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨");
+ // }
+ // proStockInfos.Add(proStockInfo);
+ // proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails);
+ // }
+
+ // if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty))
+ // {
+ // return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}");
+ // }
+ // List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
+ // List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
+ // if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0)
+ // {
+ // return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖");
+ // }
+ // int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+ // foreach (var item in proStockInfoDetails)
+ // {
+ // //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁
+ // Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
+ // if (proOutOrderDetail == null)
+ // {
+ // return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�");
+ // }
+ // proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
+ // item.OutboundQuantity = item.StockPcsQty;
+ // item.OutSETQty = item.SETQty;
+ // if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+ // {
+ // return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
+ // }
+ // if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+ // {
+ // proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ // }
+
+ // }
+ // proStockInfos.ForEach(x =>
+ // {
+ // x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+ // });
+ // proStockInfoDetails.ForEach(x =>
+ // {
+ // x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt();
+ // });
+ // int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+ // if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
+ // {
+ // proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ // //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨
+ // List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+ // .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt())
+ // .Includes(x => x.proStockInfoDetails).ToList();
+ // AllOutStocks.ForEach(x =>
+ // {
+ // proStockInfoDetails.AddRange(x.proStockInfoDetails);
+ // });
+ // proStockInfos.AddRange(AllOutStocks);
+ // foreach (var item in proStockInfoDetails)
+ // {
+ // StockOutItemsItem outItemsItem = new StockOutItemsItem()
+ // {
+ // PartNum = item.ProductCode,
+ // Rev = item.ProductVersion,
+ // SoNumber = item.SaleOrder,
+ // BatchNumber = item.BagNo,
+ // QtyPcs = item.OutboundQuantity,
+ // QtySet = item.OutSETQty
+ // };
+ // stockOutItems.Add(outItemsItem);
+ // }
+ // }
+ // Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
+ // _unitOfWorkManage.BeginTran();
+ // //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
+ // if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ // {
+ // //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+ // ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+ // {
+ // Way = 1,
+ // StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+ // ConfirmedUserNo = App.User.UserName,
+ // AssignUserNo = App.User.UserName,
+ // WarehouseCode = warehouse.WarehouseCode,
+ // ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ // DeliverplanCode = proOutOrder.ProOutOrderNo,
+ // Remark = proOutOrder.Remark,
+ // StockOutItems = stockOutItems
+ // };
+ // _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+ // _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
+ // string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+ // ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+ // if (erpRequestContent.res != 1)
+ // {
+ // throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+ // }
+ // }
+ // else
+ // {
+ // _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
+ // _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
+ // }
+ // _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
+ // BaseDal.UpdateData(proOutOrder);
+ // _unitOfWorkManage.CommitTran();
+ // content.OK();
+ // }
+ // catch (Exception ex)
+ // {
+ // content.Error(ex.Message);
+ // }
+ // return content;
+ //}
+ /// <summary>
+ /// PDA鑾峰彇鍑哄簱鍗曟嵁
+ /// </summary>
+ /// <param name="saveModel"></param>
+ /// <returns></returns>
+ public WebResponseContent GetProOutOrders(SaveModel saveModel)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ int pageNo = saveModel.MainData["pageNo"].ObjToInt();
+ int warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
+ string orderNo = saveModel.MainData["orderNo"].ToString();
+ List<Dt_ProOutOrder> proOutOrders = new List<Dt_ProOutOrder>();
+ if (string.IsNullOrEmpty(orderNo))
+ {
+ proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOrderStatus <= OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5);
+ }
+ else
+ {
+ proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => (x.ProOutOrderNo.Contains(orderNo) || x.ProOutOrderNo.Contains(orderNo)) && x.ProOrderStatus <= OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.Id).Includes(x => x.Details).ToPageList(pageNo, 5);
+ }
+
+ content.OK(data: proOutOrders);
+ }
+ catch (Exception)
+ {
+
+ throw;
+ }
+ return content;
+ }
+ /// <summary>
+ /// 鑾峰彇鎵爜鑾峰彇璁㈠崟鏄庣粏淇℃伅
+ /// </summary>
+ public WebResponseContent GetOrderDetails(int keyId)
+ {
+ WebResponseContent content=new WebResponseContent();
+ try
+ {
+ //鑾峰彇鍑哄簱鍗曞彿
+ Dt_ProOutOrder proOutOrder = BaseDal.QueryFirst(x => x.Id == keyId);
+ if (proOutOrder == null)
+ {
+ return content.Error($"鏈壘鍒板嚭搴撳崟{proOutOrder.ProOutOrderNo}");
+ }
+ //鑾峰彇鏄庣粏
+ List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x => x.ProOrderId == keyId).OrderBy(x => x.ProOrderDetailStatus).ThenBy(x => x.Id).ToList();
+ content.OK("鎴愬姛", new { proOutOrderDetails });
+ }
+ catch (Exception ex)
+ {
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+ /// <summary>
+ /// 鏌ヨERP璁㈠崟鎵i櫎搴撳瓨鏁伴噺
+ /// </summary>
+ public WebResponseContent OutProErpSync(string outProOrderNo)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ //鏍规嵁鍑哄簱鍗曞彿鑾峰彇璇ュ嚭搴撹鍗曠殑ERP鍑哄簱搴撳瓨淇℃伅
+ Dt_ProOutOrder proOutOrder = BaseDal.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== outProOrderNo).Includes(x => x.Details).First();
+ if (proOutOrder==null)
+ {
+ return content.Error($"鏈壘鍒版垚鍝佸嚭搴撹鍗晎outProOrderNo}");
+ }
+ if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return content.Error($"鍑哄簱璁㈠崟宸插畬鎴愭垨鍏抽棴");
+ }
+ //璋冪敤erp鍑哄簱璁㈠崟搴撳瓨鏌ヨ鎺ュ彛
+ string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo);
+ ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>();
+ if (erpOutProSyncResponse.Code!=200)
+ {
+ return content.Error($"ERP鍑哄簱璁㈠崟鏌ヨ鎺ュ彛璋冪敤澶辫触,閿欒淇℃伅:{erpOutProSyncResponse.Msg}");
+ }
+ List<OutProStock> outProStocks = erpOutProSyncResponse.Data;
+ if (outProStocks.Count<=0 || outProStocks==null)
+ {
+ return content.Error($"鎴愬搧鍑哄簱璁㈠崟{outProOrderNo}ERP褰撳墠鏈湁鍑哄簱搴撳瓨淇℃伅");
+ }
+ // 楠岃瘉鎵�鏈夊嚭搴撳崟鍙锋槸鍚︿竴鑷�
+ OutProStock? outExist = outProStocks.FirstOrDefault(x => x.ShippingNumber != outProOrderNo);
+ if (outExist != null)
+ {
+ return content.Error($"ERP杩斿洖浜嗗嚭搴撹鍗晎outExist.ShippingNumber}搴撳瓨淇℃伅");
+ }
+ //鑾峰彇骞冲簱搴撳尯
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+ if (warehouse==null)
+ {
+ return content.Error("鏈壘鍒板簱鍖轰俊鎭�");
+ }
+ var productCodes = outProStocks.Select(x => x.Partnum).Distinct().ToList();
+ //鑾峰彇鎵�鏈夊钩搴撳簱瀛�
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
+ .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && productCodes.Contains(detail.ProductCode))
+ .Select((master, detail) => detail)
+ .ToList();
+ proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList();
+ List<int> stockIds = proStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList();
+ //鑾峰彇鎵�鏈夊钩搴撲富琛�
+ List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => stockIds.Contains(x.Id)).Includes(x => x.proStockInfoDetails).ToList();
+ List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>();
+ List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ foreach (var item in outProStocks)
+ {
+ foreach (var itemOut in proStockInfoDetails.Where(x => x.ProductCode == item.Partnum).ToList())
+ {
+ if (item.Quantity==0)
+ {
+ break;
+ }
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum) ?? throw new Exception($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�");
+ if (item.Quantity >= itemOut.StockPcsQty)
+ {
+ //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
+ proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty;
+ item.Quantity -= (int)itemOut.StockPcsQty;
+ delStockInfoDetails.Add(itemOut);
+ proStockInfoDetails.Remove(itemOut);
+ if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+ {
+ return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
+ }
+ if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ }
+ if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ }
+ else if (item.Quantity < itemOut.StockPcsQty)
+ {
+
+ //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
+ proOutOrderDetail.OverQtyPcs += item.Quantity;
+ item.Quantity -= item.Quantity;
+ float Range = itemOut.StockPcsQty / itemOut.SETQty;
+ if (Range == 0)
+ {
+ return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�");
+ }
+ int outSet = (int)(item.Quantity / Range);
+ if (outSet == 0)
+ {
+ return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�");
+ }
+ itemOut.SETQty -= outSet;
+
+ itemOut.StockPcsQty -= item.Quantity;
+ if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+ {
+ return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
+ }
+ if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ }
+ if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ }
+ }
+ if (item.Quantity>0)
+ {
+ return content.Error($"鏈壘鍒皗item.SoNumber}鍙墸鍑忓簱瀛�");
+ }
+ }
+ if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count())
+ {
+ proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ }
+ else
+ {
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt());
+ return content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}");
+ }
+ //鑾峰彇鍒犻櫎鐨勫簱瀛樹富琛�
+ List<int> delStockIds = delStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList();
+ List<int> delStockDetailIds = delStockInfoDetails.Select(x => x.Id).ToList();
+ foreach (var item in delStockIds)
+ {
+ Dt_ProStockInfo proStockInfo = proStockInfos.FirstOrDefault(x => x.Id == item);
+ Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo.proStockInfoDetails.FirstOrDefault(x => !delStockDetailIds.Contains(x.Id));
+ if (proStockInfoDetail == null)
+ {
+ delProStockInfos.Add(proStockInfo);
+ }
+ }
+ //鏇存柊鏁版嵁
+ _unitOfWorkManage.BeginTran();
+ _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.鑷姩鍒犻櫎);
+ _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+ _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
+ BaseDal.UpdateData(proOutOrder);
+ _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details);
+ _unitOfWorkManage.CommitTran();
+ return content.OK();
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return content.Error(ex.Message);
+ }
+ }
+ /// <summary>
+ /// 鍑哄簱鍗曟壂鐮佸悓姝RP
+ /// </summary>
+ /// <returns></returns>
+ public async Task<WebResponseContent> OutProScanCodeSync(SaveModel saveModel)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ string? ProOutNo = saveModel.MainData["outProOrderNo"].ToString();
+ var Codes = saveModel.DelKeys.Select(x=>x.ToString().Trim()).ToList();
+ if (Codes.Count<=0)
+ {
+ return await Task.FromResult(content.Error("鎵弿鍐呭涓嶈兘涓虹┖"));
+ }
+ Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
+ if (proOutOrder == null)
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�"));
+ }
+ if (proOutOrder.ProOrderStatus >= OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴愭垨鍏抽棴"));
+ }
+ string? userName = App.User.UserName;//GSWMS
+ List<OutProInfoDTO> outProInfos= new List<OutProInfoDTO>();
+ foreach (var item in Codes)
+ {
+ string[] proInfoInputs = item.Split(',');
+ if (proInfoInputs.Length!=5)
+ {
+ return await Task.FromResult(content.Error($"澶栧寘{item}鎵弿涓嶅叏"));
+ }
+ OutProInfoDTO outProInfo=new OutProInfoDTO()
+ {
+ ProductCode= proInfoInputs[1],
+ OutQtys = proInfoInputs[4].ObjToInt()
+ };
+ outProInfos.Add(outProInfo);
+ }
+ //鑾峰彇骞冲簱搴撳尯
+ Dt_Warehouse warehouse = await _basicRepository.WarehouseRepository.QueryFirstAsync(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+ if (warehouse == null)
+ {
+ return await Task.FromResult(content.Error("鏈壘鍒板簱鍖轰俊鎭�"));
+ }
+
+ //鑾峰彇鎵�鏈夊钩搴撳簱瀛�
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
+ .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && outProInfos.Select(x=>x.ProductCode).Contains(detail.ProductCode))
+ .Select((master, detail) => detail)
+ .ToList();
+ List<int> stockIds = proStockInfoDetails.Select(x => x.ProStockId).Distinct().ToList();
+ //鑾峰彇鎵�鏈夊钩搴撲富琛�
+ List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => stockIds.Contains(x.Id)).Includes(x=>x.proStockInfoDetails).ToList();
+ proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ThenBy(x=>x.StockPcsQty).ToList();
+
+ List<Dt_Warehouse> warehouses = await _basicRepository.WarehouseRepository.QueryDataAsync(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
+ //灏嗗叾鍒嗙粍
+ outProInfos = outProInfos.GroupBy(x => x.ProductCode).Select(x=>new OutProInfoDTO()
+ {
+ ProductCode=x.Key,
+ OutQtys=x.Sum(x=>x.OutQtys)
+ }).ToList();
+ List<Dt_ProStockInfoDetail> UpStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ List<Dt_ProStockInfo> DelStocks = new List<Dt_ProStockInfo>();
+ foreach (var item in outProInfos)
+ {
+ //鑾峰彇搴撳瓨
+ List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x => x.ProductCode == item.ProductCode && x.OutProNo == null).ToList();
+ if (outStocks.Count <= 0 || outProInfos==null)
+ {
+ return await Task.FromResult(content.Error($"鏈壘鍒颁骇鍝亄item.ProductCode}搴撳瓨"));
+ }
+ if (outStocks.Sum(x=>x.StockPcsQty)< item.OutQtys)
+ {
+ return await Task.FromResult(content.Error($"鍙敤骞冲簱鏁伴噺{outStocks.Sum(x => x.StockPcsQty)}涓嶆弧瓒冲嚭搴撴暟閲弡item.OutQtys}"));
+ }
+ foreach (var outStock in outStocks)
+ {
+ //濡傛灉鎵e噺涓�0璺冲嚭閫昏緫
+ if (item.OutQtys == 0)
+ {
+ break;
+ }
+ //鍒ゆ柇鍑哄簱鏁伴噺鏄惁澶т簬鎴栫瓑浜庡簱瀛樻暟閲�
+ if (item.OutQtys >= outStock.StockPcsQty)
+ {
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt());
+ //鍒ゆ柇鏄惁瀛樺湪鍚屼竴鍨嬪彿涓ゆ潯鏄庣粏
+ if (proOutOrderDetail == null)
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒颁骇鍝亄item.ProductCode}鏄庣粏,璇锋鏌�"));
+ }
+ List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList();
+ float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs;
+ //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
+ proOutOrderDetail.OverQtyPcs += outStock.StockPcsQty;
+
+ //鏄惁瓒呭嚭
+ if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+ {
+ if (outOrderDetails.Count>=1)
+ {
+ proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty;
+ proOutOrderDetail.OverQtyPcs += BeyondQtys;
+ outStock.OutboundQuantity = BeyondQtys;
+ outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
+ outStock.OutProNo = proOutOrder.ProOutOrderNo;
+ float Range = outStock.StockPcsQty / outStock.SETQty;
+ if (outStock.OutboundQuantity== outStock.StockPcsQty)
+ {
+ outStock.OutSETQty = outStock.SETQty;
+ outStock.AssignDel = 1;
+ }
+ else
+ {
+ outStock.OutSETQty = outStock.OutboundQuantity / Range;
+ }
+ if (outStock.OutSETQty==0)
+ {
+ return await Task.FromResult(content.Error($"{outStock.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�"));
+ }
+ item.OutQtys -= (int)BeyondQtys;
+ UpStockInfoDetails.Add(outStock);
+ proStockInfoDetails.Remove(outStock);
+ }
+ else
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}琛屽彿{proOutOrderDetail.RowId}浜у搧鍨嬪彿{item.ProductCode}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
+ }
+ }
+ else
+ {
+ outStock.OutboundQuantity = outStock.StockPcsQty;
+ outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
+ outStock.OutProNo = proOutOrder.ProOutOrderNo;
+ outStock.OutSETQty = outStock.SETQty;
+ outStock.AssignDel = 1;
+ item.OutQtys -= (int)outStock.StockPcsQty;
+ UpStockInfoDetails.Add(outStock);
+ proStockInfoDetails.Remove(outStock);
+ }
+ if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ }
+ if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ }
+ else if (item.OutQtys < outStock.StockPcsQty) //鍓╀綑鏁伴噺灏忎簬
+ {
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt());
+ if (proOutOrderDetail == null)
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒颁骇鍝亄item.ProductCode}鏄庣粏,璇锋鏌�"));
+ }
+ List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList();
+ //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
+ float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs;
+ proOutOrderDetail.OverQtyPcs += item.OutQtys;
+
+ //鏄惁瓒呭嚭
+ if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
+ {
+ if (outOrderDetails.Count >= 1)
+ {
+ proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty;
+ proOutOrderDetail.OverQtyPcs += BeyondQtys;
+ outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
+ outStock.OutProNo = proOutOrder.ProOutOrderNo;
+ outStock.OutboundQuantity = BeyondQtys;
+ float Range = outStock.StockPcsQty / outStock.SETQty;
+ outStock.OutSETQty = outStock.OutboundQuantity / Range;
+ if (outStock.OutSETQty == 0)
+ {
+ return await Task.FromResult(content.Error($"{outStock.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�"));
+ }
+ item.OutQtys = 0;
+ UpStockInfoDetails.Add(outStock);
+ proStockInfoDetails.Remove(outStock);
+ }
+ else
+ {
+ return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}琛屽彿{proOutOrderDetail.RowId}浜у搧鍨嬪彿{item.ProductCode}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"));
+ }
+ }
+ else
+ {
+ outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder;
+ outStock.OutProNo = proOutOrder.ProOutOrderNo;
+ outStock.OutboundQuantity = item.OutQtys;
+ float Range = outStock.StockPcsQty / outStock.SETQty;
+ outStock.OutSETQty = outStock.OutboundQuantity / Range;
+ if (outStock.OutSETQty == 0)
+ {
+ return await Task.FromResult(content.Error($"{outStock.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�"));
+ }
+ item.OutQtys = 0;
+ UpStockInfoDetails.Add(outStock);
+ proStockInfoDetails.Remove(outStock);
+ }
+ if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+ }
+ if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+ {
+ proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+ }
+ }
+ }
+ }
+ if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count())
+ {
+ proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+ }
+ else
+ {
+ Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt());
+ return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}"));
+ }
+ List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
+ //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨
+ List<Dt_ProStockInfoDetail> assOutStocks = _stockRepository.ProStockInfoDetailRepository.Db.Queryable<Dt_ProStockInfoDetail>()
+ .Where(x => x.OutProNo == ProOutNo).ToList();
+ UpStockInfoDetails.AddRange(assOutStocks);
+ foreach (var item in UpStockInfoDetails)
+ {
+ StockOutItemsItem outItemsItem = new StockOutItemsItem()
+ {
+ PartNum = item.ProductCode,
+ Rev = item.ProductVersion,
+ SoNumber = item.OutDetailSaleNo,
+ BatchNumber = item.ProductCode,
+ QtyPcs = item.OutboundQuantity,
+ QtySet = item.OutSETQty
+ };
+ stockOutItems.Add(outItemsItem);
+ }
+ Dt_Warehouse warehouseOut = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
+ //鑾峰彇鍒犻櫎搴撳瓨
+ List<Dt_ProStockInfoDetail> delDetails = UpStockInfoDetails.Where(x => x.AssignDel == 1).ToList();
+ List<Dt_ProStockInfoDetail> UpDetails = UpStockInfoDetails.Where(x => x.AssignDel != 1).ToList();
+ //鑾峰彇鍒犻櫎鐨勫簱瀛樹富琛�
+ List<int> delStockIds = delDetails.Select(x => x.ProStockId).Distinct().ToList();
+ List<int> delStockDetailIds = delDetails.Select(x => x.Id).ToList();
+ foreach (var item in delStockIds)
+ {
+ Dt_ProStockInfo proStockInfo = proStockInfos.FirstOrDefault(x=>x.Id==item);
+ Dt_ProStockInfoDetail? proStockInfoDetail= proStockInfo.proStockInfoDetails.FirstOrDefault(x=> !delStockDetailIds.Contains(x.Id));
+ if (proStockInfoDetail==null)
+ {
+ DelStocks.Add(proStockInfo);
+ }
+ }
+ _unitOfWorkManage.BeginTran();
+ //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
+ //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+ ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+ {
+ Way = 1,
+ StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+ ConfirmedUserNo = App.User.UserName,
+ AssignUserNo = App.User.UserName,
+ WarehouseCode = warehouseOut.WarehouseCode,
+ ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+ DeliverplanCode = proOutOrder.ProOutOrderNo,
+ Remark = proOutOrder.Remark,
+ StockOutItems = stockOutItems
+ };
+ //鏇存柊鏁版嵁
+ UpDetails.ForEach(x =>
+ {
+ x.StockPcsQty -= x.OutboundQuantity;
+ x.SETQty -= x.OutSETQty;
+ x.OutDetailId = 0;
+ x.OutDetailSaleNo = null;
+ x.OutProNo = null;
+ });
+ _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delDetails, OperateTypeEnum.鑷姩瀹屾垚);
+ _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(DelStocks, OperateTypeEnum.鑷姩瀹屾垚);
+ await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(UpDetails);
+ //鍚屾ERP
+ string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+ ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+ if (erpRequestContent.res != 1)
+ {
+ throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+ }
+ await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details);
+ await BaseDal.UpdateDataAsync(proOutOrder);
+ _unitOfWorkManage.CommitTran();
+ return await Task.FromResult(content.OK());
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return await Task.FromResult(content.Error(ex.Message));
+ }
+ }
}
}
--
Gitblit v1.9.3