/// <summary> /// 安排生产, 增加产能指数 /// </summary> /// <param name="schedule"></param> /// <param name="arrangeInfos"></param> public SmartTaskOrderScheduleDetail AddTaskOrderSchedule(SmartTaskOrderScheduleDetail schedule, List <ArrangeInfo> arrangeInfos) { if (schedule.ProcessTime == ProcessTime) { if (!Needs.ContainsKey(schedule.PId)) { Needs.Add(schedule.PId, new List <SmartTaskOrderScheduleDetail>()); } if (arrangeInfos.Any()) { var productType = schedule.ProductType; int item; Dictionary <int, List <ArrangeInfo> > use; //是否设备 if (productType == 0) { item = schedule.CategoryId; use = DeviceUse; } else if (productType == 1) { item = schedule.PId; use = OperatorUse; } else { return(null); } foreach (var arrangeInfo in arrangeInfos) { if (!use.ContainsKey(item)) { use.Add(item, new List <ArrangeInfo>()); use[item].Add(new ArrangeInfo(arrangeInfo.Item, arrangeInfo.Id)); } var first = use[item].FirstOrDefault(x => x.Id == arrangeInfo.Id); if (first == null) { use[item].Add(new ArrangeInfo(arrangeInfo.Item, arrangeInfo.Id)); first = use[item].FirstOrDefault(x => x.Id == arrangeInfo.Id); } foreach (var arrange in arrangeInfo.Arranges) { if (arrange.Count > 0) { var productArrange = first.Arranges.FirstOrDefault(x => x.ProductId == arrange.ProductId && x.PId == arrange.PId); if (productArrange != null) { productArrange.Count += arrange.Count; } else { first.Arranges.Add(arrange); } } } } var arranges = arrangeInfos.ToDictionary(x => x.Id, info => info.Arranges.Sum(y => y.Count)); if (productType == 0) { schedule.DeviceList = arranges; } else if (productType == 1) { schedule.OperatorsList = arranges; } } var oldSchedule = Needs[schedule.PId] .FirstOrDefault(x => x.TaskOrderId == schedule.TaskOrderId && x.PId == schedule.PId); if (oldSchedule == null) { schedule.ArrangeOrder = Needs[schedule.PId].Count + 1; Needs[schedule.PId].Add(schedule); } else { schedule.ArrangeOrder = oldSchedule.ArrangeOrder; if (schedule.Target < oldSchedule.Target) { return(oldSchedule); } oldSchedule.Stock = schedule.Stock; oldSchedule.Target = schedule.Target; oldSchedule.Put = schedule.Put; if (schedule.ProductType == 0) { foreach (var(deviceId, count) in schedule.DeviceList) { if (oldSchedule.DeviceList.Any(x => x.Key == deviceId)) { var cnt = oldSchedule.DeviceList[deviceId]; if (cnt < count) { oldSchedule.DeviceList[deviceId] = count; } } else { oldSchedule.DeviceList.Add(deviceId, count); } } } else if (schedule.ProductType == 1) { foreach (var(opId, count) in schedule.OperatorsList) { if (oldSchedule.OperatorsList.Any(x => x.Key == opId)) { var cnt = oldSchedule.OperatorsList[opId]; if (cnt < count) { oldSchedule.OperatorsList[opId] = count; } } else { oldSchedule.OperatorsList.Add(opId, count); } } } } } return(null); }