From 9a886d711d8b21adc335fdf8c39350584c7ba6fd Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 14 十月 2025 02:12:14 +0800
Subject: [PATCH] 更新代码,取消MES出库单号同步标识,平库转立库功能,寄售周期判断取消,精品标识等
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs | 139 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 137 insertions(+), 2 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs"
index dd8108e..ce55e05 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs"
@@ -3,11 +3,20 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
+using WIDESEA_IRecordService;
+using WIDESEA_IStockService;
using WIDESEA_Model.Models;
+using WIDESEA_OutboundRepository;
namespace WIDESEA_OutboundService
{
@@ -16,10 +25,136 @@
private readonly IUnitOfWorkManage _unitOfWorkManage;
public IProOutOrderDetailRepository Repository => BaseDal;
-
- public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+ private readonly IStockService _stockInfoService;
+ private readonly IBasicService _basicService;
+ private readonly IOutProStockInfoService _outProStockInfoService;
+ private readonly IProOutOrderRepository _proOutOrderRepository;
+ private readonly IRecordService _recordService;
+ public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockInfoService, IBasicService basicService,IOutProStockInfoService outProStockInfoService, IRecordService recordService, IProOutOrderRepository proOutOrderRepository) : base(BaseDal)
{
_unitOfWorkManage = unitOfWorkManage;
+ _stockInfoService = stockInfoService;
+ _basicService = basicService;
+ _outProStockInfoService = outProStockInfoService;
+ _recordService = recordService;
+ _proOutOrderRepository=proOutOrderRepository;
+ }
+ /// <summary>
+ /// 鍑哄簱搴撳瓨鍒嗛厤鍚庯紝鏇存柊鏁版嵁搴撴暟鎹�
+ /// </summary>
+ public WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> proStockInfos, List<Dt_ProOutOrderDetail> proOutOrderDetails, List<Dt_OutProStockInfo> outProStockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null)
+ {
+ try
+ {
+ //鏇存柊搴撳瓨灞炴��
+ _stockInfoService.ProStockInfoService.Repository.UpdateData(proStockInfos);
+ List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+ foreach (var item in proStockInfos)
+ {
+ proStockInfoDetails.AddRange(item.proStockInfoDetails);
+ }
+ //鏇存柊搴撳瓨鏄庣粏
+ proStockInfoDetails.ForEach(x => x.ProOutDetailStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt());
+ _stockInfoService.ProStockInfoDetailService.Repository.UpdateData(proStockInfoDetails);
+ Dt_ProOutOrder proOutOrder = _proOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId);
+ if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鏈紑濮�.ObjToInt())
+ {
+ proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+ _proOutOrderRepository.UpdateData(proOutOrder);
+ }
+ BaseDal.UpdateData(proOutOrderDetails);
+
+ List<Dt_OutProStockInfo> addOutStockLockInfos = outProStockInfos.Where(x => x.Id == 0).ToList();
+ if (addOutStockLockInfos != null && addOutStockLockInfos.Any())
+ {
+ if (tasks != null)
+ {
+ addOutStockLockInfos.ForEach(x =>
+ {
+ x.TaskNum = tasks.FirstOrDefault(v => v.PalletCode == x.PalletCode)?.TaskNum;
+ });
+ }
+
+ _outProStockInfoService.Repository.AddData(addOutStockLockInfos);
+ }
+ List<Dt_OutProStockInfo> updateOutStockLockInfos = outProStockInfos.Where(x => x.Id > 0).ToList();
+ if (updateOutStockLockInfos != null && updateOutStockLockInfos.Any())
+ {
+ _outProStockInfoService.Repository.UpdateData(updateOutStockLockInfos);
+ }
+
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus, LocationChangeType.OutboundAssignLocation, "", tasks?.Select(x => x.TaskNum).ToList());
+ _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
+ return WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+ /// <summary>
+ /// 鍒嗛厤搴撳瓨澶勭悊璐т綅鏁版嵁
+ /// </summary>
+ public (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(List<Dt_ProOutOrderDetail> proOutOrderDetails, bool isFineWorks = false)
+ {
+ List<Dt_ProStockInfo> outStocks = new List<Dt_ProStockInfo>();
+ List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
+ List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+ //鑾峰彇鎴愬搧璁㈠崟
+ Dt_ProOutOrder proOutOrder = _proOutOrderRepository.QueryFirst(x=>x.Id==proOutOrderDetails.FirstOrDefault().ProOrderId);
+ if (proOutOrder==null)
+ {
+ throw new Exception("鏈壘鍒版垚鍝佽鍗�");
+ }
+ foreach (var item in proOutOrderDetails)
+ {
+ float needQty = item.QtyPcs;
+ //鏌ユ壘鍙敤搴撳瓨
+ List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item, isFineWorks);
+ if (!stockInfoss.Any())
+ {
+ throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨");
+ }
+ //鑾峰彇鍑哄簱搴撳瓨
+ List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity);
+ item.LockQtyPcs += needQty - residueQuantity;
+ if (item.QtyPcs > item.LockQtyPcs)
+ {
+ throw new Exception($"浜у搧缂栫爜{item.PCode},鐗堟湰{item.PVer.Substring(0, 1)}鍙垎閰嶆暟閲忎笉瓒�,鍙敤鏁伴噺{item.LockQtyPcs}");
+ }
+ outStocks.AddRange(assignOutStocks);
+ //鍒嗛厤鍑哄簱鐨凱CS鏁伴噺
+ float assignQuantity = needQty;
+ //璁㈠崟鏄庣粏鐨勫嚭搴揚CS鏁伴噺
+ float orderQuantity = item.QtyPcs;
+ for (int j = 0; j < assignOutStocks.Count; j++)
+ {
+ //鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲�
+ float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == item.Id).Sum(x => x.AssignQuantity);
+
+
+ float orderDetailNeedQuantity = item.QtyPcs - detailAssignQuantity;
+ //鐢熸垚鍑哄簱璇︽儏
+ if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
+ {
+ item.LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+ Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
+ outProStockInfos.Add(outStockLockInfo);
+ }
+ else
+ {
+ Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], item.QtyPcs - detailAssignQuantity);
+ outProStockInfos.Add(outStockLockInfo);
+ item.LockQtyPcs = item.QtyPcs;
+ break;
+ }
+ }
+ List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList();
+
+ locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
+
+ }
+ return (outStocks, proOutOrderDetails, outProStockInfos, locationInfos);
}
}
}
--
Gitblit v1.9.3