wangxinhui
2025-04-08 dcecb039035f4b2e82e31c39b74db9402444c536
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -18,6 +18,7 @@
using MailKit.Search;
using WIDESEA_External.Model;
using WIDESEA_Core.CodeConfigEnum;
using Microsoft.AspNetCore.Mvc;
namespace WIDESEA_TaskInfoService
{
@@ -81,16 +82,16 @@
        /// <param name="ProOutNo">出库订单号</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        public WebResponseContent OutProductTask(string ProOutNo, string StationCode)
        public WebResponseContent OutProductTask(int[] keys, string StationCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取成品出库订单
                Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
                if (proOutOrder==null)
                List<Dt_ProOutOrderDetail> _ProOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x => keys.Contains(x.Id));
                if (_ProOutOrderDetails.Count<=0)
                {
                    return content.Error("出库订单不存在");
                    return content.Error("勾选订单明细不存在");
                }
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
@@ -99,7 +100,7 @@
                List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) result =
                OutProductTaskDataHandle(proOutOrder);
                OutProductTaskDataHandle(_ProOutOrderDetails);
                if (result.Item2 != null && result.Item2.Count > 0)
                {
                    proStockInfos.AddRange(result.Item2);
@@ -135,6 +136,10 @@
            }
            return content;
        }
        /// <summary>
        /// å¤„理出库数据
        /// </summary>
        public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_ProStockInfo>? proStockInfos = null, List<Dt_ProOutOrderDetail>? proOutOrderDetails = null, List<Dt_OutProStockInfo>? outProStockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
        {
            try
@@ -158,12 +163,19 @@
                }
                else if (proOutOrderDetails != null && proOutOrderDetails.Count > 0)
                {
                    //获取成品出库单主表
                    Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId);
                    if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.未开始.ObjToInt())
                    {
                        proOutOrder.ProOrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                        _outboundRepository.ProOutOrderRepository.UpdateData(proOutOrder);
                    }
                    proOutOrderDetails.ForEach(x =>
                    {
                        x.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    _outboundService.ProOutOrderDetailService.Repository.UpdateData(proOutOrderDetails);
                    _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
@@ -180,17 +192,23 @@
        /// å¤„理成品出库数据
        /// </summary>
        /// <returns></returns>
        public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(Dt_ProOutOrder proOutOrder)
        public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(List<Dt_ProOutOrderDetail> proOutOrderDetails)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
            List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
            List<Dt_ProOutOrderDetail> assignOutOrderDetails = new List<Dt_ProOutOrderDetail>();
            List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>();
            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
            //分配库存
            (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ProOutOrderDetailService.AssignProStockOut(proOutOrder.WarehouseId, proOutOrder);
            (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ProOutOrderDetailService.AssignProStockOut(proOutOrderDetails);
            if (result.Item1!=null&&result.Item1.Count>0)
            {
                //获取成品单
                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId);
                if (proOutOrder==null)
                {
                    throw new Exception("未找到成品订单");
                }
                TaskTypeEnum typeEnum = proOutOrder.ProOrderType switch
                {
                    (int)OutProTypeEnum.ProOut => TaskTypeEnum.OutProduct,
@@ -647,7 +665,11 @@
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                    });
                    Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x=>x.Id== outboundOrderDetails.FirstOrDefault().OrderId);
                    if (outboundOrder.OrderStatus!=OutOrderStatusEnum.出库中.ObjToInt())
                    {
                        _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder);
                    }
                    _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                }
                _unitOfWorkManage.CommitTran();