public DataResult GetSmartCapacityList([FromQuery] int qId, int capacityId, int categoryId) { var result = new DataResult(); result.datas.AddRange(SmartCapacityListHelper.GetDetail(qId, capacityId, categoryId)); if (qId != 0 && !result.datas.Any()) { result.errno = Error.SmartCapacityListNotExist; return(result); } return(result); }
public object PostSmartSchedulePreview([FromBody] IEnumerable <SmartTaskOrderCapacity> taskOrders) { if (taskOrders == null) { return(Result.GenError <Result>(Error.ParamError)); } var taskIds = taskOrders.GroupBy(x => x.Id).Select(y => y.Key); if (taskIds.Count() != taskOrders.Count()) { return(Result.GenError <Result>(Error.SmartTaskOrderDuplicate)); } var result = new SmartTaskOrderNeedWithOrderPreviewResult(); var wId = taskOrders.FirstOrDefault()?.WorkshopId ?? 0; if (taskOrders.Any()) { var tOrders = SmartTaskOrderHelper.Instance.GetByIds <SmartTaskOrderCapacity>(taskIds); if (taskIds.Count() != tOrders.Count()) { result.errno = Error.SmartTaskOrderNotExist; result.datas.AddRange(taskOrders.Where(x => tOrders.All(y => y.Id != x.Id)).Select(x => x.TaskOrder.IsNullOrEmpty() ? x.Id.ToString() : x.TaskOrder)); return(result); } foreach (var task in taskOrders) { var t = tOrders.FirstOrDefault(x => x.Id == task.Id); if (t == null) { result.errno = Error.SmartTaskOrderNotExist; result.datas.Add(task.TaskOrder); } else { task.TaskOrder = t.TaskOrder; task.Target = t.Target; task.DeliveryTime = t.DeliveryTime; task.ProductId = t.ProductId; task.CapacityId = t.CapacityId; } } } if (result.errno != Error.Success) { return(result); } var productIds = taskOrders.GroupBy(x => x.ProductId).Select(y => y.Key); if (!productIds.Any()) { return(Result.GenError <Result>(Error.SmartProductNotExist)); } var products = SmartProductHelper.Instance.GetByIds <SmartProduct>(productIds); if (products.Count() != productIds.Count()) { return(Result.GenError <Result>(Error.SmartProductNotExist)); } var productCapacities = SmartProductCapacityHelper.GetSmartProductCapacities(productIds); if (!productCapacities.Any()) { return(Result.GenError <Result>(Error.SmartProductCapacityNotExist)); } var capacityIds = products.GroupBy(x => x.CapacityId).Select(y => y.Key); if (!capacityIds.Any()) { return(Result.GenError <Result>(Error.SmartCapacityNotExist)); } var capacityLists = SmartCapacityListHelper.GetSmartCapacityListsWithOrder(capacityIds); foreach (var productId in productIds) { var tasks = taskOrders.Where(x => x.ProductId == productId); var product = products.FirstOrDefault(x => x.Id == productId); var pCapacities = productCapacities.Where(x => x.ProductId == productId); var cLists = capacityLists.Where(x => x.CapacityId == product.CapacityId); if (cLists.Count() != pCapacities.Count()) { result.errno = Error.SmartProductCapacityNotExist; result.datas.AddRange(tasks.Select(x => x.TaskOrder)); } } if (result.errno != Error.Success) { return(result); } //设备型号 var deviceModels = SmartDeviceModelHelper.Instance.GetAll <SmartDeviceModel>(); //设备型号数量 var deviceList = SmartDeviceHelper.GetNormalSmartDevices(wId); var modelCounts = deviceList.GroupBy(x => new { x.CategoryId, x.ModelId }).Select(y => new SmartDeviceModelCount { CategoryId = y.Key.CategoryId, ModelId = y.Key.ModelId, Count = y.Count() }); //人员等级 var operatorLevels = SmartOperatorLevelHelper.Instance.GetAll <SmartOperatorLevel>(); //人员等级数量 var operatorList = SmartOperatorHelper.GetNormalSmartOperators(wId); var operatorCounts = operatorList.GroupBy(x => new { x.ProcessId, x.LevelId }).Select(y => new SmartOperatorCount { ProcessId = y.Key.ProcessId, LevelId = y.Key.LevelId, Count = y.Count() }); var taskNeeds = SmartTaskOrderNeedHelper.GetSmartTaskOrderNeedsByTaskOrderIds(wId, taskIds); foreach (var task in taskOrders) { var needs = taskNeeds.Where(need => need.TaskOrderId == task.Id); if (task.Needs.Any()) { task.Needs = task.Needs.Select(x => { var need = needs.FirstOrDefault(y => y.TaskOrderId == x.TaskOrderId && y.PId == x.PId); if (need != null) { x.DoneTarget = need.DoneTarget; x.HavePut = need.HavePut; } return(x); }).ToList(); } var oldNeeds = task.Needs.ToList(); task.Needs.Clear(); var productId = task.ProductId; var product = products.FirstOrDefault(x => x.Id == productId); task.Product = product.Product; var pCapacities = productCapacities.Where(x => x.ProductId == productId); var cLists = capacityLists.Where(x => x.CapacityId == product.CapacityId); var target = task.Target; foreach (var cList in cLists.Reverse()) { var need = oldNeeds.FirstOrDefault(x => x.Id == cList.Id); var stock = need?.Stock ?? 0; var doneTarget = need?.DoneTarget ?? 0; var havePut = need?.HavePut ?? 0; if (target < stock) { stock = target; target = 0; } else { target -= stock; } if (!task.All) { target = target > doneTarget ? target - doneTarget : 0; } var pCapacity = pCapacities.FirstOrDefault(x => x.ProcessId == cList.ProcessId); var rate = 0m; var y = pCapacity; if (y.DeviceList.Any()) { rate = y.DeviceList.First().Rate; } else if (y.OperatorList.Any()) { rate = y.OperatorList.First().Rate; } var put = rate != 0 ? (int)Math.Ceiling((target) * 100 / rate) : 0; var newNeed = new SmartTaskOrderCapacityNeed { Id = cList.Id, TaskOrderId = task.Id, ProductId = productId, ProcessId = cList.ProcessId, CategoryId = cList.CategoryId, PId = cList.PId, Target = target, DoneTarget = doneTarget, Stock = stock, Rate = rate, Put = put, HavePut = havePut, Process = cList.Process, Order = cList.Order }; if (need != null) { newNeed.Devices = need.Devices; newNeed.NeedDCapacity = newNeed.DCapacity != 0 ? ((decimal)put / newNeed.DCapacity).ToRound() : 0; foreach (var device in need.DeviceList) { var modelCount = modelCounts.FirstOrDefault(x => x.ModelId == device.Key)?.Count ?? 0; newNeed.TotalDCapacity += modelCount * device.Value.Item1 * device.Value.Item2; } newNeed.HaveDCapacity = newNeed.DCapacity != 0 ? ((decimal)newNeed.TotalDCapacity / newNeed.DCapacity).ToRound() : 0; newNeed.Operators = need.Operators; newNeed.NeedOCapacity = newNeed.OCapacity != 0 ? ((decimal)put / newNeed.OCapacity).ToRound() : 0; foreach (var op in need.OperatorsList) { var operatorCount = operatorCounts.FirstOrDefault(x => x.LevelId == op.Key)?.Count ?? 0; newNeed.TotalOCapacity += operatorCount * op.Value.Item1 * op.Value.Item2; } newNeed.HaveOCapacity = newNeed.OCapacity != 0 ? ((decimal)newNeed.TotalOCapacity / newNeed.OCapacity).ToRound() : 0; } task.Needs.Insert(0, newNeed); target = put; } } result.datas.AddRange(taskOrders); var orders = taskOrders.SelectMany(x => x.Needs).GroupBy(y => new { y.PId, y.Order, y.Process }).Select(z => new SmartTaskOrderNeedWithOrderPreview { Id = z.Key.PId, Process = z.Key.Process, Order = z.Key.Order }).ToList(); foreach (var task in taskOrders) { foreach (var newNeed in task.Needs) { var order = orders.FirstOrDefault(x => x.Id == newNeed.PId); if (order != null) { order.Stock += newNeed.Stock; order.Put += newNeed.Put; order.Target += newNeed.Target; if (newNeed.DeviceList.Any()) { foreach (var device in newNeed.DeviceList) { var modelDevice = order.Devices.FirstOrDefault(x => x.Id == device.Key); if (modelDevice == null) { order.Devices.Add(new SmartTaskOrderNeedCapacityPreview { Id = device.Key, Name = deviceModels.FirstOrDefault(x => x.Id == device.Key)?.Model ?? "", }); } modelDevice = order.Devices.FirstOrDefault(x => x.Id == device.Key); modelDevice.NeedCapacity += newNeed.NeedDCapacity; var modelCount = modelCounts.FirstOrDefault(x => x.ModelId == device.Key)?.Count ?? 0; modelDevice.HaveCapacity = modelCount; } } if (newNeed.OperatorsList.Any()) { foreach (var op in newNeed.OperatorsList) { var levelOp = order.Operators.FirstOrDefault(x => x.Id == op.Key); if (levelOp == null) { order.Operators.Add(new SmartTaskOrderNeedCapacityPreview { Id = op.Key, Name = operatorLevels.FirstOrDefault(x => x.Id == op.Key)?.Level ?? "", }); } levelOp = order.Operators.FirstOrDefault(x => x.Id == op.Key); levelOp.NeedCapacity += newNeed.NeedOCapacity; var operatorCount = operatorCounts.FirstOrDefault(x => newNeed.PId == x.ProcessId && x.LevelId == op.Key)?.Count ?? 0; levelOp.HaveCapacity = operatorCount; } } } } } result.Orders.AddRange(orders.OrderBy(z => z.Order).Select(x => { x.Devices = x.Devices.OrderBy(y => y.Id).ToList(); x.Operators = x.Operators.OrderBy(y => y.Id).ToList(); return(x); })); return(result); }
public object PostSmartSchedulePreview([FromBody] SmartTaskOrderArrangeParam arrange) { var taskOrders = arrange.Previews; var wId = arrange.WorkshopId; if (taskOrders == null) { return(Result.GenError <Result>(Error.ParamError)); } var taskIds = taskOrders.GroupBy(x => x.Id).Select(y => y.Key); if (taskIds.Count() != taskOrders.Count()) { return(Result.GenError <Result>(Error.SmartTaskOrderDuplicate)); } var result = new DataResult(); var allTasks = new List <SmartTaskOrderPreview>(); if (taskOrders.Any()) { var tOrders = SmartTaskOrderHelper.Instance.GetByIds <SmartTaskOrderPreview>(taskIds); if (taskIds.Count() != tOrders.Count()) { result.errno = Error.SmartTaskOrderNotExist; result.datas.AddRange(taskOrders.Where(x => tOrders.All(y => y.Id != x.Id)).Select(x => x.TaskOrder.IsNullOrEmpty() ? x.Id.ToString() : x.TaskOrder)); return(result); } //var arranged = tOrders.Where(x => x.Arranged); //if (arranged.Any()) //{ // result.errno = Error.SmartTaskOrderArranged; // result.datas.AddRange(arranged.Select(x => x.TaskOrder)); // return result; //} foreach (var task in tOrders) { var t = taskOrders.FirstOrDefault(x => x.Id == task.Id); if (t == null) { result.errno = Error.SmartTaskOrderNotExist; result.datas.Add(task.TaskOrder); } else { //页面选择顺序 task.Order = !t.Arranged && t.Order == 0 ? int.MaxValue : t.Order; task.StartTime = t.StartTime; task.EndTime = t.EndTime; task.Needs = t.Needs; } } allTasks.AddRange(tOrders); } if (result.errno != Error.Success) { return(result); } var otherTasks = SmartTaskOrderHelper.GetArrangedButNotDoneSmartTaskOrders(wId); if (otherTasks.Any()) { taskIds = otherTasks.Select(x => x.Id); var taskNeeds = SmartTaskOrderNeedHelper.GetSmartTaskOrderNeedsByTaskOrderIds(wId, taskIds); foreach (var otherTask in otherTasks) { var aTask = allTasks.FirstOrDefault(x => x.Id == otherTask.Id); var needs = taskNeeds.Where(need => need.TaskOrderId == otherTask.Id); if (aTask != null) { aTask.Arranged = true; if (!aTask.Needs.Any()) { aTask.Needs.AddRange(needs); } else { aTask.Needs = aTask.Needs.Select(x => { var need = needs.FirstOrDefault(y => y.TaskOrderId == x.TaskOrderId && y.PId == x.PId); if (need != null) { x.DoneTarget = need.DoneTarget; x.HavePut = need.HavePut; } return(x); }).ToList(); } } else { var t = ClassExtension.ParentCopyToChild <SmartTaskOrder, SmartTaskOrderPreview>(otherTask); t.Arranged = true; t.Needs.AddRange(needs); allTasks.Add(t); } } } if (result.errno != Error.Success) { return(result); } var productIds = allTasks.GroupBy(x => x.ProductId).Select(y => y.Key); if (!productIds.Any()) { return(Result.GenError <Result>(Error.SmartProductNotExist)); } var products = SmartProductHelper.Instance.GetByIds <SmartProduct>(productIds); if (products.Count() != productIds.Count()) { return(Result.GenError <Result>(Error.SmartProductNotExist)); } var productCapacities = SmartProductCapacityHelper.GetSmartProductCapacities(productIds); if (!productCapacities.Any()) { return(Result.GenError <Result>(Error.SmartProductCapacityNotExist)); } var capacityIds = products.GroupBy(x => x.CapacityId).Select(y => y.Key); if (!capacityIds.Any()) { return(Result.GenError <Result>(Error.SmartCapacityNotExist)); } var capacityLists = SmartCapacityListHelper.GetSmartCapacityListsWithOrder(capacityIds); foreach (var productId in productIds) { var tasks = allTasks.Where(x => x.ProductId == productId); var product = products.FirstOrDefault(x => x.Id == productId); var pCapacities = productCapacities.Where(x => x.ProductId == productId); var cLists = capacityLists.Where(x => x.CapacityId == product.CapacityId); if (cLists.Count() != pCapacities.Count()) { result.errno = Error.SmartProductCapacityNotExist; result.datas.AddRange(tasks.Select(x => x.TaskOrder)); } } if (result.errno != Error.Success) { return(result); } var data = allTasks.ToDictionary(x => x.Id, x => { var t = ClassExtension.ParentCopyToChild <SmartTaskOrder, SmartTaskOrderPreview>(x); t.Product = products.FirstOrDefault(y => y.Id == x.ProductId)?.Product ?? ""; return(t); }); foreach (var task in allTasks) { var productId = task.ProductId; var product = products.FirstOrDefault(x => x.Id == productId); var pCapacities = productCapacities.Where(x => x.ProductId == productId); var cLists = capacityLists.Where(x => x.CapacityId == product.CapacityId); var target = task.Target; foreach (var list in cLists.Reverse()) { var need = task.Needs.FirstOrDefault(x => x.Order == list.Order && x.ProcessId == list.ProcessId); var stock = need?.Stock ?? 0; var doneTarget = need?.DoneTarget ?? 0; var havePut = need?.HavePut ?? 0; if (target < stock) { stock = target; target = 0; } else { target -= stock; } var pCapacity = pCapacities.FirstOrDefault(x => x.ProcessId == list.ProcessId); var rate = 0m; var y = pCapacity; if (y.DeviceList.Any()) { rate = y.DeviceList.First().Rate; } else if (y.OperatorList.Any()) { rate = y.OperatorList.First().Rate; } var put = rate != 0 ? (int)Math.Ceiling((target) * 100 / rate) : 0; data[task.Id].Needs.Insert(0, new SmartTaskOrderNeedDetail { TaskOrderId = task.Id, ProductId = productId, ProcessId = list.ProcessId, PId = list.PId, Target = target, DoneTarget = doneTarget, Stock = stock, Rate = rate, Put = put, HavePut = havePut, Process = list.Process, Order = list.Order }); target = put; } } var r = new SmartTaskOrderNeedWithOrderResult(); r.datas.AddRange(data.Values.OrderBy(x => x.Arranged).ThenBy(x => x.ModifyId)); var orders = data.Values.SelectMany(x => x.Needs).GroupBy(y => new { y.PId, y.Order, y.Process }).Select(z => new SmartTaskOrderNeedWithOrder { Id = z.Key.PId, Process = z.Key.Process, Order = z.Key.Order }); r.Orders.AddRange(orders.OrderBy(z => z.Order)); return(r); }
public object GetSmartCapacityListInfo([FromQuery] int qId, int processId) { var result = new DataResult(); var deviceCategoryId = 0; SmartCapacityListDetail capacityList = null; if (qId != 0) { capacityList = SmartCapacityListHelper.GetDetail(qId); if (capacityList == null) { return(Result.GenError <Result>(Error.SmartCapacityListNotExist)); } var capacity = SmartCapacityHelper.Instance.Get <SmartCapacity>(capacityList.CapacityId); if (capacity == null) { return(Result.GenError <Result>(Error.SmartCapacityNotExist)); } deviceCategoryId = capacityList.CategoryId; } else if (processId != 0) { var process = SmartProcessCodeCategoryProcessHelper.GetDetailByProcessId(processId); if (process == null) { return(Result.GenError <Result>(Error.SmartProcessCodeCategoryProcessNotExist)); } capacityList = new SmartCapacityListDetail { ProcessId = process.Id }; deviceCategoryId = process.CategoryId; } else { return(Result.GenError <Result>(Error.ParamError)); } capacityList.PId = SmartProcessCodeCategoryProcessHelper.Instance.Get <SmartProcessCodeCategoryProcess>(capacityList.ProcessId)?.ProcessId ?? 0; var actDevices = new List <SmartDeviceCapacity>(); if (deviceCategoryId != 0) { var models = SmartDeviceModelHelper.GetDetail(0, deviceCategoryId); var devices = capacityList.DeviceList; if (models.Any()) { var modelCount = SmartDeviceHelper.GetNormalDeviceModelCount(models.Select(x => x.Id)); foreach (var model in models) { var device = devices.FirstOrDefault(x => x.ModelId == model.Id) ?? new SmartDeviceCapacity(); device.Category = model.Category; device.CategoryId = model.CategoryId; device.ModelId = model.Id; device.Model = model.Model; device.Count = modelCount.FirstOrDefault(x => x.ModelId == model.Id) != null ? modelCount.FirstOrDefault(x => x.ModelId == model.Id).Count : 0; actDevices.Add(device); } } } var actOperators = new List <SmartOperatorCapacity>(); var levels = SmartOperatorLevelHelper.Instance.GetAll <SmartOperatorLevel>().OrderBy(x => x.Order); if (levels.Any()) { var operatorCount = SmartOperatorHelper.GetNormalOperatorCount(capacityList.ProcessId); var operators = capacityList.OperatorList; if (levels.Any()) { foreach (var level in levels) { var op = operators.FirstOrDefault(x => x.LevelId == level.Id) ?? new SmartOperatorCapacity(); op.Level = level.Level; op.LevelId = level.Id; op.Count = operatorCount.FirstOrDefault(x => x.ProcessId == capacityList.PId && x.LevelId == op.LevelId) != null ? operatorCount.FirstOrDefault(x => x.ProcessId == capacityList.PId && x.LevelId == level.Id).Count : 0; actOperators.Add(op); } } } result.datas.Add(capacityList); return(new { errno = 0, errmsg = "成功", Devices = actDevices, Operators = actOperators }); }
public Result PutSmartCapacityList([FromBody] IEnumerable <SmartCapacityList> capacityLists) { if (capacityLists == null || !capacityLists.Any()) { return(Result.GenError <Result>(Error.ParamError)); } if (capacityLists.Any(x => !x.IsSet())) { return(Result.GenError <Result>(Error.SmartCapacityListNotEmpty)); } var capacityId = capacityLists.FirstOrDefault()?.CapacityId ?? 0; if (capacityId == 0) { return(Result.GenError <Result>(Error.ParamError)); } var capacity = SmartCapacityHelper.Instance.Get <SmartCapacity>(capacityId); if (capacity == null) { return(Result.GenError <Result>(Error.SmartCapacityNotExist)); } var processes = SmartProcessCodeCategoryProcessHelper.GetDetailByCategoryId(capacity.CategoryId); if (!processes.Any()) { return(Result.GenError <Result>(Error.SmartProcessCodeCategoryProcessNotExist)); } if (capacityLists.Count() != processes.Count()) { return(Result.GenError <Result>(Error.SmartCapacityListCountError)); } var capacityListIds = capacityLists.Select(x => x.Id); var data = SmartCapacityListHelper.Instance.GetByIds <SmartCapacityList>(capacityListIds); if (data.Count() != capacityLists.Count()) { return(Result.GenError <Result>(Error.SmartCapacityListNotExist)); } if (capacityLists.Count() != processes.Count()) { return(Result.GenError <Result>(Error.SmartCapacityListCountError)); } var userId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; foreach (var capacityList in capacityLists) { capacityList.CreateUserId = userId; capacityList.MarkedDateTime = markedDateTime; capacityList.CapacityId = capacityId; } var oldSmartCapacityLists = SmartCapacityListHelper.GetSmartCapacityLists(capacityId); //删除 var delete = oldSmartCapacityLists.Where(z => capacityLists.Where(x => x.Id != 0).All(y => y.Id != z.Id)); if (delete.Any()) { SmartCapacityListHelper.Instance.Delete(delete.Select(x => x.Id)); } //更新 var update = capacityLists.Where(x => x.Id != 0); if (update.Any()) { SmartCapacityListHelper.Instance.Update(update); } //新增 var add = capacityLists.Where(x => x.Id == 0); if (add.Any()) { SmartCapacityListHelper.Instance.Add(add); } OldWorkFlowHelper.Instance.OnSmartCapacityListChanged(capacityLists); return(Result.GenError <Result>(Error.Success)); }
public object PutSmartCapacityList([FromBody] OpSmartCapacity capacity) { var capacityId = capacity.Id; var oldCapacity = SmartCapacityHelper.Instance.Get <SmartCapacity>(capacityId); if (oldCapacity == null) { return(Result.GenError <Result>(Error.SmartCapacityNotExist)); } var capacityLists = capacity.List; if (capacityLists == null) { return(Result.GenError <Result>(Error.SmartCapacityListNotSet)); } var processes = SmartProcessCodeCategoryProcessHelper.GetDetailByCategoryId(capacity.CategoryId); if (!processes.Any()) { return(Result.GenError <Result>(Error.SmartProcessCodeCategoryProcessNotExist)); } if (capacityLists.Count() != processes.Count()) { return(Result.GenError <Result>(Error.SmartCapacityListCountError)); } if (capacityLists.Any(x => !x.IsSet())) { return(Result.GenError <Result>(Error.SmartCapacityListNotEmpty)); } var smartCapacityListIds = capacityLists.Select(x => x.Id).Where(y => y != 0); if (smartCapacityListIds.Any()) { var data = SmartCapacityListHelper.Instance.GetByIds <SmartCapacityList>(smartCapacityListIds); if (data.Count() != smartCapacityListIds.Count()) { return(Result.GenError <Result>(Error.SmartCapacityListNotExist)); } } var createUserId = Request.GetIdentityInformation(); var markedDateTime = DateTime.Now; if (oldCapacity.CategoryId != capacity.CategoryId) { capacity.MarkedDateTime = markedDateTime; SmartCapacityHelper.UpdateCategoryId(capacity); } foreach (var smartCapacityList in capacityLists) { smartCapacityList.CreateUserId = createUserId; smartCapacityList.MarkedDateTime = markedDateTime; smartCapacityList.CapacityId = capacityId; } var oldSmartCapacityLists = SmartCapacityListHelper.GetSmartCapacityLists(capacityId); //删除 var delete = oldSmartCapacityLists.Where(z => capacityLists.Where(x => x.Id != 0).All(y => y.Id != z.Id)); if (delete.Any()) { SmartCapacityListHelper.Instance.Delete(delete.Select(x => x.Id)); } //更新 var update = capacityLists.Where(x => x.Id != 0); if (update.Any()) { SmartCapacityListHelper.Instance.Update(update); } //新增 var add = capacityLists.Where(x => x.Id == 0); if (add.Any()) { SmartCapacityListHelper.Instance.Add(add); } OldWorkFlowHelper.Instance.OnSmartCapacityListChanged(capacityLists); return(Result.GenError <Result>(Error.Success)); }