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(); StockViewDTO1? stockViewDTO = list.OrderByDescending(x => x.InDate).FirstOrDefault(); if (stockViewDTO == null) throw new Exception("未找到可出库空托"); Dt_LocationInfo locationInfo = _dbBase.Queryable().Where(x => x.LocationCode == stockViewDTO.LocationCode).First(); if (locationInfo == null) throw new Exception($"未找到货位【{stockViewDTO.LocationCode}】信息"); Dt_StockInfo stockInfo = sugarQueryable1.Where(x => x.Id == stockViewDTO.StockId).Includes(x => x.Details).First(); if (stockInfo == null) throw new Exception($"未找到空托库存信息"); stockInfo.StockStatus = StockStatusEmun.出库中.ObjToInt(); stockInfo.Details.ForEach(x => { x.Status = StockStatusEmun.出库中.ObjToInt(); }); locationInfo.CurrentQty--; Dt_Task _Task = new Dt_Task() { CurrentAddress = locationInfo.LocationCode, NextAddress = "SC01", SourceAddress = locationInfo.LocationCode, TargetAddress = "SC01", 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>(_Task); Db.Ado.BeginTran(); _dbBase.Updateable(locationInfo); _stockService.UpdateData(stockInfo); _stockDetailService.UpdateData(stockInfo.Details); _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); } } } }