コード例 #1
0
        public Result PostSmartTaskOrder([FromBody] IEnumerable <SmartTaskOrder> taskOrders)
        {
            if (taskOrders == null || !taskOrders.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            if (taskOrders.Any(x => x.TaskOrder.IsNullOrEmpty()))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderNotEmpty));
            }
            if (taskOrders.GroupBy(x => x.TaskOrder).Any(y => y.Count() > 1))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderDuplicate));
            }

            var wId   = taskOrders.FirstOrDefault()?.WorkshopId ?? 0;
            var sames = taskOrders.Select(x => x.TaskOrder);

            if (SmartTaskOrderHelper.GetHaveSame(wId, sames))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderIsExist));
            }

            var userId         = Request.GetIdentityInformation();
            var markedDateTime = DateTime.Now;

            foreach (var taskOrder in taskOrders)
            {
                taskOrder.CreateUserId   = userId;
                taskOrder.MarkedDateTime = markedDateTime;
                taskOrder.Remark         = taskOrder.Remark ?? "";
            }
            SmartTaskOrderHelper.Instance.Add(taskOrders);
            return(Result.GenError <Result>(Error.Success));
        }
コード例 #2
0
        public DataResult GetSmartWorkOrder([FromQuery] int qId, int wId, bool menu)
        {
            var result = new DataResult();

            if (menu)
            {
                var data = SmartWorkOrderHelper.GetMenu(qId, wId);
                if (qId != 0 && !data.Any())
                {
                    result.errno = Error.SmartWorkOrderNotExist;
                    return(result);
                }
                result.datas.AddRange(data);
            }
            else
            {
                var data = SmartWorkOrderHelper.GetDetail(qId, wId).Select(ClassExtension.ParentCopyToChild <SmartWorkOrder, SmartWorkOrderDetail>);
                if (qId != 0 && !menu)
                {
                    var d = data.First();
                    if (d.State != SmartWorkOrderState.未加工)
                    {
                        var taskOrders = SmartTaskOrderHelper.GetDetailByWorkOrderId(d.Id);
                        var flowCards  = SmartFlowCardHelper.GetSmartFlowCardsByTaskOrderIds(taskOrders.Select(x => x.Id));
                        var processes  = SmartFlowCardProcessHelper.GetSmartFlowCardProcessesByFlowCardIds(flowCards.Select(x => x.Id));
                        if (processes.Any())
                        {
                            var st = processes.Where(x => x.StartTime != default(DateTime)).Min(y => y.StartTime);
                            var et = processes.Where(x => x.EndTime != default(DateTime)).Min(y => y.EndTime);
                            if (d.State == SmartWorkOrderState.已完成 || d.State == SmartWorkOrderState.已取消)
                            {
                                d.Consume = (int)(et - st).TotalSeconds;
                            }
                            else
                            {
                                d.Consume = (int)(DateTime.Now - st).TotalSeconds;
                            }
                        }
                    }
                }
                result.datas.AddRange(data);
            }
            if (qId != 0 && !result.datas.Any())
            {
                result.errno = Error.SmartWorkOrderNotExist;
                return(result);
            }
            return(result);
        }
コード例 #3
0
        public Result PutSmartTaskOrder([FromBody] IEnumerable <SmartTaskOrder> taskOrders)
        {
            if (taskOrders == null || !taskOrders.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }
            if (taskOrders.Any(x => x.TaskOrder.IsNullOrEmpty()))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderNotEmpty));
            }
            if (taskOrders.GroupBy(x => x.TaskOrder).Any(y => y.Count() > 1))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderDuplicate));
            }

            var wId   = taskOrders.FirstOrDefault()?.WorkshopId ?? 0;
            var sames = taskOrders.Select(x => x.TaskOrder);
            var ids   = taskOrders.Select(x => x.Id);

            if (SmartTaskOrderHelper.GetHaveSame(wId, sames, ids))
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderIsExist));
            }

            var cnt = SmartTaskOrderHelper.Instance.GetCountByIds(ids);

            if (cnt != taskOrders.Count())
            {
                return(Result.GenError <Result>(Error.SmartTaskOrderNotExist));
            }

            var markedDateTime = DateTime.Now;

            foreach (var taskOrder in taskOrders)
            {
                taskOrder.MarkedDateTime = markedDateTime;
                taskOrder.Remark         = taskOrder.Remark ?? "";
            }
            SmartTaskOrderHelper.Instance.Update(taskOrders);
            return(Result.GenError <Result>(Error.Success));
        }
コード例 #4
0
        public object PostSmartTaskOrderLevel([FromBody] IEnumerable <SmartTaskOrder> taskOrders)
        {
            if (taskOrders == null || !taskOrders.Any())
            {
                return(Result.GenError <Result>(Error.ParamError));
            }

            var wId     = taskOrders.FirstOrDefault()?.WorkshopId ?? 0;
            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 tOrders = SmartTaskOrderHelper.Instance.GetByIds <SmartTaskOrder>(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));
                return(result);
            }

            var notArranged = tOrders.Where(x => !x.Arranged);

            if (notArranged.Any())
            {
                result.errno = Error.SmartTaskOrderNotArranged;
                result.datas.AddRange(notArranged.Select(x => x.TaskOrder));
                return(result);
            }

            SmartTaskOrderHelper.ArrangedUpdate(taskOrders);
            return(Result.GenError <Result>(Error.Success));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }