using Magicodes.IE.Core; using MailKit.Search; using System; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.WCSInfo; using WIDESEA_Model.Models; using WIDESEAWCS_DTO.WCSInfo; namespace WIDESEA_TaskInfoService { public partial class TaskService { /// /// 产线申请 /// /// /// public WebResponseContent ProductionlineRequest(ProductionlineDTO productionlineDTO) { WebResponseContent content = new WebResponseContent(); try { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(productionlineDTO.Barcode); if (stockInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息"); stockInfo = new Dt_StockInfo(); stockInfo.Details = new List(); #region MyRegion string OrderNo = productionlineDTO.batchNo.Substring(0, 8);// DateTime.Now.ToString("yyMMdd"); Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo); if (inboundOrder == null) throw new Exception($"未找到批号为【{OrderNo}】的入库单"); //var BatchNo = string.Join("", productionlineDTO.batchNo.Except(OrderNo)); var BatchNo = productionlineDTO.batchNo.Substring(8); Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.Where(x => x.BatchNo == BatchNo).FirstOrDefault(); if (inboundOrderDetail == null) throw new Exception($"批号【{OrderNo}】的入库单未找到柜号【{BatchNo}】"); if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{OrderNo}】的柜号【{BatchNo}】可组盘数量不足"); Dt_Task dt_Task = new Dt_Task() { CurrentAddress = productionlineDTO.stationCode, NextAddress = "SC01", SourceAddress = productionlineDTO.stationCode, TargetAddress = "SC01", Creater = "System", PalletCode = productionlineDTO.Barcode, Roadway = "SC01", OrderNo = productionlineDTO.batchNo,// inboundOrder.OrderNo, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), TaskState = InTaskStatusEnum.InNew.ObjToInt(), TaskType = TaskTypeEnum.Inbound.ObjToInt(), CreateDate = DateTime.Now, Dispatchertime = DateTime.Now, }; productionlineDTO.batchNo = BatchNo; content = _stockService.StockInfoService.AddStockInfo(ref stockInfo, ref inboundOrder, productionlineDTO); if (!content.Status) throw new Exception(content.Message); Db.Ado.BeginTran(); _inboundService.InbounOrderService.UpdateDataWithDetail(inboundOrder); _stockService.StockInfoService.AddMaterielGroup(stockInfo); AddData(dt_Task); content.OK(data: dt_Task); Db.Ado.CommitTran(); #endregion } catch (Exception ex) { Db.Ado.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 产线申请 /// /// /// public WebResponseContent ProductionlineRequest(ConveyorLineDTO lineDTO) { WebResponseContent content = new WebResponseContent(); try { var task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode); if (task != null && task.TaskType == TaskTypeEnum.Inbound.ObjToInt()) return content.OK(data: task); if (task != null) throw new Exception($"托盘号[{lineDTO.Barcode}]已存在任务"); Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(lineDTO.Barcode); (bool, string) result = CheckRequestInbound(lineDTO.stationCode, lineDTO.Barcode, true, stockInfo); if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2); var StockInfoDetails = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).ToList(); #region 生成入库任务 Dt_Task dt_Task = new Dt_Task() { CurrentAddress = lineDTO.stationCode, NextAddress = "SC01", SourceAddress = lineDTO.stationCode, TargetAddress = "SC01", CreateDate = DateTime.Now, Creater = "System", PalletCode = lineDTO.Barcode, OrderNo = StockInfoDetails.Count() == 1 ? StockInfoDetails.First().OrderNo : null, Roadway = "SC01", TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), TaskState = InTaskStatusEnum.InNew.ObjToInt(), TaskType = TaskTypeEnum.Inbound.ObjToInt(), }; dt_Task.Dispatchertime = dt_Task.CreateDate; Db.Ado.BeginTran(); BaseDal.AddData(dt_Task); task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt()); //content.Data = dt_Task; Db.Ado.CommitTran(); if (task != null) return content.OK(data: task); #endregion } catch (Exception ex) { Db.Ado.RollbackTran(); content.Error(ex.Message); } return content; } } }