Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
0
        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);
        }