using Magicodes.IE.Core; 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 { switch (productionlineDTO.traytype) { case 1://放空托 case 3://放空盒 //case 5://放满盒 { //查找物料所有库存 var stockInfos = _stockService.StockInfoService.Repository.GetStockInfos(productionlineDTO.traytype.ToString()); //查找先入物料货位最后入库物料 var stockInfo = stockInfos.Where(x => x.LocationCode == stockInfos.OrderBy(x => x.InDate).FirstOrDefault()?.LocationCode).OrderByDescending(x => x.InDate).FirstOrDefault(); if (stockInfo == null) throw new Exception($"无物料编号【{productionlineDTO.traytype}】的库存"); var location = _basicService.LocationInfoService.GetLocation(stockInfo.LocationCode); #region 生成出库任务 Dt_Task dt_Task = new Dt_Task() { CurrentAddress = stockInfo.LocationCode, NextAddress = "SC01", SourceAddress = stockInfo.LocationCode, TargetAddress = productionlineDTO.stationCode, Creater = "System", PalletCode = stockInfo.PalletCode, OrderNo = null, Roadway = "SC01", TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), TaskState = OutTaskStatusEnum.OutNew.ObjToInt(), TaskType = productionlineDTO.traytype == 1 ? TaskTypeEnum.PalletOutbound.ObjToInt() : TaskTypeEnum.PalletFillOutbound.ObjToInt(), IsPickPlace = location.MaxQty - location.CurrentQty == 0, CreateDate = DateTime.Now, Dispatchertime = DateTime.Now, }; #endregion location.CurrentQty--; location.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt(); stockInfo.StockStatus = StockStatusEmun.出库锁定.ObjToInt(); stockInfo.Details.FirstOrDefault().Status = StockStatusEmun.出库锁定.ObjToInt(); Db.Ado.BeginTran(); AddData(dt_Task); _basicService.LocationInfoService.UpdateData(location); _stockService.StockInfoService.Repository.UpdateDataWithDetail(stockInfo); content.OK(data: dt_Task); Db.Ado.CommitTran(); } break; case 2://取空托 case 4://取满盒 case 6://取空盒 { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(productionlineDTO.Barcode); if (stockInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息"); productionlineDTO.QtySum = Array.ConvertAll(productionlineDTO.productQty.Split(","), s => decimal.Parse(s)).Sum();//入库总数 stockInfo = new Dt_StockInfo(); stockInfo.Details = new List(); Dt_InboundOrder inboundOrder = null; #region 生成入库任务 Dt_Task dt_Task = new Dt_Task() { CurrentAddress = productionlineDTO.stationCode, NextAddress = "SC01", SourceAddress = productionlineDTO.stationCode, TargetAddress = "SC01", Creater = "System", PalletCode = productionlineDTO.Barcode, Roadway = "SC01", TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), TaskState = InTaskStatusEnum.InNew.ObjToInt(), TaskType = productionlineDTO.traytype == 2 ? TaskTypeEnum.PalletInbound.ObjToInt() : TaskTypeEnum.PalletReturnInbound.ObjToInt(), CreateDate = DateTime.Now, Dispatchertime = DateTime.Now, }; #endregion if (productionlineDTO.traytype == 4) { var OrderNo = productionlineDTO.batchNo.Split('T')[0]; inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo); if (inboundOrder == null) throw new Exception($"未找到入库单【{OrderNo}】"); Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == productionlineDTO.batchNo); if (inboundOrderDetail == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库详情"); if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{productionlineDTO.batchNo}】组盘数量超出"); dt_Task.OrderNo = OrderNo; dt_Task.TaskType = TaskTypeEnum.Inbound.ObjToInt(); } content = _stockService.StockInfoService.AddStockInfo(ref stockInfo, ref inboundOrder, productionlineDTO); if (!content.Status) throw new Exception(content.Message); Db.Ado.BeginTran(); if (inboundOrder != null) _inboundService.InbounOrderService.UpdateDataWithDetail(inboundOrder); _stockService.StockInfoService.AddMaterielGroup(stockInfo); AddData(dt_Task); content.OK(data: dt_Task); Db.Ado.CommitTran(); } break; default: throw new Exception("未定义托盘类型"); } } 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 = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), 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; } } }