dengjunjie
2024-11-14 c827fe7b0c5b3b444d76ba0d96a2649c764630dd
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -8,6 +8,9 @@
using WIDESEA_DTO.Stock;
using WIDESEA_Model.Models;
using WIDESEA_Core.Helper;
using Newtonsoft.Json;
using WIDESEA_DTO.WCSInfo;
using WIDESEAWCS_DTO.WCSInfo;
namespace WIDESEA_TaskInfoService
{
@@ -43,7 +46,8 @@
                            TargetAddress = roadwayInfo.OutStationCode,
                            TaskState = OutTaskStatusEnum.OutNew.ObjToInt(),
                            TaskType = TaskTypeEnum.Outbound.ObjToInt(),
                            TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                            //TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum))
                            TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                        };
                        tasks.Add(task);
                    }
@@ -53,7 +57,7 @@
        }
        /// <summary>
        /// å‡ºåº“任务数据处理
        /// å‡ºåº“任务数据处理/指定出库单出库
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
@@ -99,9 +103,9 @@
                    throw new Exception("无库存");
                }
            }
            else
            else if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.AssignOverPartial.ObjToInt() || outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.AssignOver.ObjToInt())
            {
                List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId);
                List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.Id);
                if (stockLockInfos != null && stockLockInfos.Count > 0)
                {
                    List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
@@ -149,10 +153,72 @@
            {
                _unitOfWorkManage.BeginTran();
                #region ç”Ÿæˆç§»åº“任务
                List<Dt_Task> taskList = new List<Dt_Task>();
                List<Dt_StockInfo> dt_StockInfos = _stockService.StockInfoService.Repository.LocationCodesGetStockInfos(tasks.Select(x => x.SourceAddress).ToList());
                List<Dt_StockInfo> dt_stockInfos = dt_StockInfos.Where(x => x.StockStatus == StockStatusEmun.出库锁定.ObjToInt() || tasks.Select(x => x.PalletCode).ToList().Contains(x.PalletCode)).ToList();//待出库库存
                dt_StockInfos = dt_StockInfos.Where(x => !dt_stockInfos.Select(x => x.Id).ToList().Contains(x.Id)).ToList();//排除待出库库存
                if (dt_StockInfos.Count > 0)
                {
                    foreach (var dt_stockInfo in dt_stockInfos)
                    {
                        foreach (var dt_StockInfo in dt_StockInfos.Where(x => x.LocationCode == dt_stockInfo.LocationCode))
                        {
                            if (dt_StockInfo.InDate > dt_stockInfo.InDate)
                            {
                                dt_StockInfo.StockStatus = StockStatusEmun.移库中.ObjToInt();
                                dt_stockInfo.Details.ForEach(x =>
                                {
                                    x.Status = StockStatusEmun.移库中.ObjToInt();
                                });
                            }
                        }
                    }
                    List<Dt_StockInfoDetail> stockInfoDetails = dt_StockInfos.Where(x => x.StockStatus == StockStatusEmun.移库中.ObjToInt()).Select(x => x.Details).ToList().OfType<Dt_StockInfoDetail>().ToList();//待移库详情
                    foreach (var stockInfoDetail in stockInfoDetails.GroupBy(x => x.MaterielCode))
                    {
                        foreach (var item in stockInfoDetail.GroupBy(x => x.BatchNo))
                        {
                            var locationInfo = _basicService.LocationInfoService.AssignLocation(item.Count());//重新分配货位
                            var stockInfo = dt_StockInfos.Where(x => x.Id == item.First().StockId).First();
                            foreach (var infoDetail in item)
                            {
                                Dt_Task task = new Dt_Task()
                                {
                                    CurrentAddress = stockInfo.LocationCode,
                                    Grade = 2,
                                    PalletCode = stockInfo.PalletCode,
                                    NextAddress = locationInfo.LocationCode,
                                    Roadway = locationInfo.RoadwayNo,
                                    SourceAddress = stockInfo.LocationCode,
                                    TargetAddress = locationInfo.LocationCode,
                                    TaskState = InTaskStatusEnum.RelocationNew.ObjToInt(),
                                    TaskType = TaskTypeEnum.Relocation.ObjToInt(),
                                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                                };
                                taskList.Add(task);
                            }
                            stockInfo.LocationCode = locationInfo.LocationCode;
                        }
                    }
                }
                tasks.AddRange(taskList);
                #endregion
                BaseDal.AddData(tasks);
                #region ä¸‹å‘任务给WCS
                List<WMSTaskDTO> wMSTaskDTOs = _mapper.Map<List<WMSTaskDTO>>(tasks);
                var ResultData = HttpHelper.PostAsync(WCSInterfaceAddress.ReceiveTask, wMSTaskDTOs.ToJson(), headers: new Dictionary<string, string>());
                if (ResultData.Result == null) throw new Exception($"向WCS下发出库任务超时");
                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(ResultData.Result);
                if (content == null) throw new Exception($"下发出库任务WCS无响应");
                if (!content.Status) throw new Exception(content.Message);
                #endregion
                if (stockInfos != null && outboundOrderDetails != null && outStockLockInfos != null && locationInfos != null)
                {
                    WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    if (content.Status)
                    {