using AutoMapper; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Outbound; using WIDESEA_DTO.Stock; using WIDESEA_DTO.WCSInfo; using WIDESEA_IBasicService; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; using WIDESEA_IStockService; using WIDESEA_Model.Models; using WIDESEAWCS_DTO.WCSInfo; namespace WIDESEA_OutboundService { public partial class OutboundOrderService : ServiceBase, IOutboundOrderService { /// /// 空托出库 /// /// /// public WebResponseContent PdaOutEmpty() { try { ISugarQueryable sugarQueryable1 = _dbBase.Queryable(); ISugarQueryable sugarQueryable2 = _dbBase.Queryable(); List list = sugarQueryable1.InnerJoin(sugarQueryable2, (a, b) => a.Id == b.StockId && b.MaterielName.Contains("空托盘") && a.StockStatus == StockStatusEmun.已入库.ObjToInt()).Select((a, b) => new StockViewDTO1 { LocationCode = a.LocationCode, PalletCode = a.PalletCode, MaterielCode = b.MaterielCode, MaterielName = b.MaterielName, InDate = a.InDate, StockId = a.Id }).ToList(); if (list.Count < 1) throw new Exception("未找到空托库存"); var LocationCodes = list.Select(x => x.LocationCode).Distinct().ToList(); StockViewDTO1? stockViewDTO = null; foreach (var item in LocationCodes) { if (_taskRepository.QueryFirst(x => x.SourceAddress == item && x.TaskType != TaskTypeEnum.PalletOutbound.ObjToInt()) == null) { stockViewDTO = list.Where(x => x.LocationCode == item).OrderByDescending(x => x.InDate).FirstOrDefault(); break; } } if (stockViewDTO == null) throw new Exception("暂未找到可出库空托"); #region 判断是否为第一排货位 //var strings = stockViewDTO.LocationCode.ToLower().Split('-'); //var Row = Convert.ToInt32(strings[0]); //if (Row == 1) //{ // var locationcode = 2.ToString("000") + "-" + strings[1] + "-" + strings[2]; // var stockViewDTO1 = list.Where(x => x.LocationCode == locationcode).OrderBy(x => x.InDate).FirstOrDefault(); // if (stockViewDTO1 != null) stockViewDTO = stockViewDTO1; //} #endregion //stockViewDTO = list.Where(x => x.LocationCode == stockViewDTO.LocationCode).OrderByDescending(x => x.InDate).FirstOrDefault(); Dt_LocationInfo locationInfo = _dbBase.Queryable().Where(x => x.LocationCode == stockViewDTO.LocationCode).First(); if (locationInfo == null) throw new Exception($"未找到货位【{stockViewDTO.LocationCode}】信息"); Dt_StockInfo stockInfo = _stockService.Repository.QueryFirst(a => a.Id == stockViewDTO.StockId); if (stockInfo == null) throw new Exception($"未找到空托库存信息"); Dt_StockInfoDetail _StockInfoDetail = _stockDetailService.Repository.QueryFirst(a => a.StockId == stockInfo.Id); if (_StockInfoDetail == null) throw new Exception($"未找到空托库存详情"); stockInfo.StockStatus = StockStatusEmun.出库中.ObjToInt(); _StockInfoDetail.Status = StockStatusEmun.出库中.ObjToInt(); Dt_Task _Task = new Dt_Task() { CurrentAddress = locationInfo.LocationCode, NextAddress = "SC01", SourceAddress = locationInfo.LocationCode, SourceIsPickPlace = locationInfo.Row == 1 ? false : locationInfo.CurrentQty == locationInfo.MaxQty, TargetIsPickPlace = false, TargetAddress = "1008", CreateDate = DateTime.Now, Creater = "System", PalletCode = stockViewDTO.PalletCode, Roadway = locationInfo.RoadwayNo, OrderNo = "", TaskNum = _taskRepository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), TaskState = OutTaskStatusEnum.OutNew.ObjToInt(), TaskType = TaskTypeEnum.PalletOutbound.ObjToInt(), Dispatchertime = DateTime.Now, }; List wMSTaskDTOs = _mapper.Map>(new List() { _Task }); Db.Ado.BeginTran(); _basicRepository.LocationInfoRepository.UpdateData(locationInfo); _stockService.Repository.UpdateData(stockInfo); _stockDetailService.Repository.UpdateData(_StockInfoDetail); _taskRepository.AddData(_Task); var ResultData = HttpHelper.PostAsync(WCSInterfaceAddress.ReceiveTask, wMSTaskDTOs.ToJson(), headers: new Dictionary()); if (ResultData.Result == null) throw new Exception($"向WCS下发空托出库任务超时"); WebResponseContent content = JsonConvert.DeserializeObject(ResultData.Result); if (content == null) throw new Exception($"下发空托出库任务WCS无响应"); if (!content.Status) throw new Exception(content.Message); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } } }