public object GetArrangedTaskOrderWarehouseDetail([FromQuery] int wId, int id, int taskOrderId, int pId) { var result = new DataResult(); var sql = string.Empty; IEnumerable <SmartTaskOrderScheduleWarehouseInfoResult> data = null; if (id != 0) { sql = $"SELECT a.ProcessTime, a.TaskOrderId, b.TaskOrder, a.ProductType, a.Target, a.DoneTarget " + $"FROM `t_task_order_schedule` a " + $"JOIN `t_task_order` b ON a.TaskOrderId = b.Id " + $"WHERE a.Id = @id AND a.WorkshopId = @wId;"; data = ServerConfig.ApiDb.Query <SmartTaskOrderScheduleWarehouseInfoResult>(sql, new { wId, id, taskOrderId }); } else if (taskOrderId != 0 && pId != 0) { data = SmartTaskOrderScheduleHelper.GetSmartTaskOrderSchedule(wId, taskOrderId, pId).Select(x => new SmartTaskOrderScheduleWarehouseInfoResult { ProcessTime = x.ProcessTime, TaskOrderId = x.TaskOrderId, TaskOrder = x.TaskOrder, ProductType = x.ProductType, Target = x.Target, DoneTarget = x.DoneTarget }); } if (data == null) { return(result); } data = data.Where(x => x.Target > 0); result.datas.AddRange(data); return(result); }
public object GetArrangedTaskOrderPutAndWarehouse([FromQuery] int wId, DateTime startTime, DateTime endTime, DateTime deliveryTime, bool all) { var result = new SmartTaskOrderNeedOrderTimeResult(); if (startTime == default(DateTime) || endTime == default(DateTime)) { return(result); } var schedules = SmartTaskOrderScheduleHelper.GetSmartTaskOrderSchedule(wId, startTime, endTime); var tasks = SmartTaskOrderHelper.GetAllArrangedButNotDoneSmartTaskOrderDetails(wId, deliveryTime, all); var taskIds = tasks.Select(x => x.Id).Concat(schedules.Select(y => y.TaskOrderId)).Distinct(); if (!taskIds.Any()) { return(result); } tasks = SmartTaskOrderHelper.GetAllArrangedButNotDoneSmartTaskOrderDetails(wId, taskIds); var taskNeeds = SmartTaskOrderNeedHelper.GetSmartTaskOrderNeedsByTaskOrderIds(wId, taskIds, true); var orders = taskNeeds.GroupBy(y => new { y.PId, y.Order, y.Process, y.CategoryId }).Select(z => new SmartTaskOrderNeedWithOrder { Id = z.Key.PId, Process = z.Key.Process, CategoryId = z.Key.CategoryId, Order = z.Key.Order }); result.StartTime = startTime; result.EndTime = endTime; result.Orders.AddRange(orders.OrderBy(z => z.Order)); //设备型号数量 var deviceList = SmartDeviceHelper.GetNormalSmartDevices(wId); //人员等级数量 var operatorList = SmartOperatorHelper.GetNormalSmartOperators(wId); var modelCount = deviceList.GroupBy(x => new { x.CategoryId }).Select(y => new SmartDeviceModelCount { CategoryId = y.Key.CategoryId, Count = y.Count() }); var operatorCount = operatorList.GroupBy(x => new { x.ProcessId }).Select(y => new SmartOperatorCount { ProcessId = y.Key.ProcessId, Count = y.Count() }); //if (schedules.Any()) //{ // var productIds = schedules.Select(x => x.ProductId); // // 任务单计划号 // var products = SmartProductHelper.Instance.GetByIds<SmartProduct>(productIds); // var capacityIds = products.Select(x => x.CapacityId); // // 产能设置 // var smartCapacityLists = SmartCapacityListHelper.Instance.GetAllSmartCapacityListsWithOrder(capacityIds); // //if () // //{ // //} // ////产能配置 // //var capacityList = smartCapacityLists.Where(x => x.CapacityId == task.CapacityId); // ////工序单日产能配置 // //var cList = capacityList.FirstOrDefault(x => x.ProcessId == y.ProcessId); // //sc.Index //} var ts = taskNeeds.Where(n => tasks.Any(task => task.Id == n.TaskOrderId)).Select(x => { var task = tasks.First(t => t.Id == x.TaskOrderId); var need = new SmartTaskOrderScheduleSumInfoResult { Id = x.Id, TaskOrderId = x.TaskOrderId, TaskOrder = x.TaskOrder, ProductId = x.ProductId, Product = x.Product, DeliveryTime = task.DeliveryTime, ArrangedTime = task.ArrangedTime, PId = x.PId, ProcessId = x.ProcessId, Process = x.Process, Order = x.Order, Put = x.Put, HavePut = x.HavePut, Target = x.Target, DoneTarget = x.DoneTarget, }; var schedule = schedules.Where(sc => sc.TaskOrderId == need.TaskOrderId && sc.ProcessId == need.ProcessId && sc.PId == need.PId).ToList(); for (var i = 0; i < (result.EndTime - result.StartTime).TotalDays + 1; i++) { var t = result.StartTime.AddDays(i); if (schedule.All(p => p.ProcessTime != t)) { schedule.Add(new SmartTaskOrderScheduleDetail() { ProcessTime = t }); } } schedule = schedule.OrderBy(sc => sc.ProcessTime).ToList(); need.Schedules.AddRange(schedule.Select(y => new SmartTaskOrderScheduleInfoResult { Id = y.Id, ProductType = y.ProductType, ProcessTime = y.ProcessTime, Put = y.Put, HavePut = y.HavePut, Target = y.Target, DoneTarget = y.DoneTarget, })); return(need); }); result.datas.AddRange(ts.OrderBy(x => x.DeliveryTime).ThenBy(x => x.ArrangedTime)); var indexes = SmartTaskOrderScheduleIndexHelper.GetSmartTaskOrderScheduleIndex(wId, startTime, endTime).ToList(); var arrangeIndexes = new List <SmartTaskOrderScheduleIndex>(); foreach (var order in result.Orders) { for (var i = 0; i < (result.EndTime - result.StartTime).TotalDays + 1; i++) { var t = result.StartTime.AddDays(i); if (!indexes.Any(p => p.ProcessTime == t && p.PId == order.Id)) { arrangeIndexes.Add(new SmartTaskOrderScheduleIndex { ProcessTime = t, PId = order.Id, }); } else { var ins = indexes.Where(p => p.ProcessTime == t && p.PId == order.Id); decimal index = 0; if (ins.Any()) { var cnt = ins.First().ProductType == 0 ? (modelCount.FirstOrDefault(x => x.CategoryId == order.CategoryId)?.Count ?? 0) : (operatorCount.FirstOrDefault(x => x.ProcessId == order.Id)?.Count ?? 0); index = cnt == 0 ? 0 : (ins.Sum(x => x.Index) / cnt).ToRound(2); } arrangeIndexes.Add(new SmartTaskOrderScheduleIndex { ProcessTime = t, PId = order.Id, Index = index }); } } } result.Indexes.AddRange(arrangeIndexes.OrderBy(x => result.Orders.FirstOrDefault(y => y.Id == x.PId)?.Order ?? 0).ThenBy(z => z.ProcessTime)); return(result); }
public object GetArrangedTaskOrderPutDetail([FromQuery] int wId, int id, int taskOrderId, int pId) { var result = new DataResult(); IEnumerable <SmartTaskOrderSchedulePutInfoResult> data = null; if (id != 0) { var sql = $"SELECT a.ProcessTime, a.TaskOrderId, b.TaskOrder, a.ProductId, a.ProductType, a.Put, a.HavePut, a.Devices, a.Operators " + $"FROM `t_task_order_schedule` a " + $"JOIN `t_task_order` b ON a.TaskOrderId = b.Id " + $"WHERE a.Id = @id AND a.WorkshopId = @wId;"; data = ServerConfig.ApiDb.Query <SmartTaskOrderSchedulePutInfoResult>(sql, new { wId, id, taskOrderId }); } else if (taskOrderId != 0 && pId != 0) { data = SmartTaskOrderScheduleHelper.GetSmartTaskOrderSchedule(wId, taskOrderId, pId).Select(x => new SmartTaskOrderSchedulePutInfoResult { ProcessTime = x.ProcessTime, ProductType = x.ProductType, TaskOrderId = x.TaskOrderId, TaskOrder = x.TaskOrder, ProductId = x.ProductId, Put = x.Target, HavePut = x.DoneTarget }); } if (data == null) { return(result); } data = data.Where(x => x.Put > 0); if (!data.Any()) { return(result); } //设备型号数量 var deviceList = SmartDeviceHelper.Instance.GetAll <SmartDevice>(); //人员等级数量 var operatorList = SmartOperatorHelper.GetAllSmartOperators(); //// 任务单计划号 //var productIds = data.Select(x => x.ProductId); //// 任务单计划号 //var products = SmartProductHelper.Instance.GetByIds<SmartProduct>(productIds); //// 计划号产能 //var productCapacities = SmartProductCapacityHelper.Instance.GetAllSmartProductCapacities(productIds); //var capacityIds = products.Select(x => x.CapacityId); //// 产能设置 //var smartCapacityLists = SmartCapacityListHelper.Instance.GetAllSmartCapacityListsWithOrder(capacityIds); foreach (var d in data) { if (d.ProductType == 0) { d.Arranges = d.DeviceList.ToDictionary(de => de.Key, de => { var ope = deviceList.FirstOrDefault(dl => dl.Id == de.Key); //var processId = d.ProcessId; //var productId = d.ProductId; ////计划号工序单日产能 //var pCapacity = productCapacities.FirstOrDefault(x => x.ProductId == productId && x.ProcessId == processId); //var capacityId = pCapacity?.CapacityId ?? 0; //var capacityList = smartCapacityLists.FirstOrDefault(x => x.CapacityId == capacityId && x.ProcessId == processId); //var single = capacityList != null ? capacityList.OperatorList.FirstOrDefault(x => x.LevelId == (ope?.ModelId ?? 0))?.Single ?? 0 : 0; //return new Tuple<string, int, int>(ope?.Code ?? "", de.Value, de.Value * single); //return new Tuple<string, int, int>(ope?.Code ?? "", de.Value.Item1, de.Value.Item2); return(new Tuple <string, int>(ope?.Code ?? "", de.Value)); }); } else if (d.ProductType == 1) { d.Arranges = d.OperatorsList.ToDictionary(op => op.Key, op => { var ope = operatorList.FirstOrDefault(dl => dl.Id == op.Key); //var processId = d.ProcessId; //var productId = d.ProductId; ////计划号工序单日产能 //var pCapacity = productCapacities.FirstOrDefault(x => x.ProductId == productId && x.ProcessId == processId); //var capacityId = pCapacity?.CapacityId ?? 0; //var capacityList = smartCapacityLists.FirstOrDefault(x => x.CapacityId == capacityId && x.ProcessId == processId); //var single = capacityList != null ? capacityList.OperatorList.FirstOrDefault(x => x.LevelId == (ope?.LevelId ?? 0))?.Single ?? 0 : 0; //return new Tuple<string, int, int>(ope?.Name ?? "", op.Value, op.Value * single); return(new Tuple <string, int>(ope?.Name ?? "", op.Value)); }); } ; } result.datas.AddRange(data); return(result); }