/// <summary>
        /// 工序相关设备是否剩余产能
        /// </summary>
        /// <param name="categoryId"></param>
        /// <param name="pId"></param>
        /// <param name="capacityList"></param>
        /// <param name="productType">是否设备</param>
        /// <param name="deviceList">设备</param>
        /// <param name="operatorList">人员</param>
        /// <param name="waitIndex">等待消耗的产能</param>
        /// <returns>设备id或人员id  型号 剩余产能 / 流程工序  人员等级 人员id</returns>
        public Dictionary <int, Tuple <int, decimal> > ProcessLeftCapacityIndex(int categoryId, int pId,
                                                                                SmartCapacityListDetail capacityList,
                                                                                IEnumerable <SmartDevice> deviceList,
                                                                                IEnumerable <SmartOperator> operatorList,
                                                                                int productType,
                                                                                decimal waitIndex)
        {
            var defaultIndex = 1;
            //设备id或人员id  型号 剩余产能
            var result = new Dictionary <int, Tuple <int, decimal> >();

            if (productType == 0)
            {
                //设备类型  设备型号 设备id
                if (DeviceUse.ContainsKey(categoryId))
                {
                    var infos = DeviceUse[categoryId].Where(d => capacityList.DeviceList.Any(cd => cd.ModelId == d.Item));
                    foreach (var device in infos)
                    {
                        if (!result.ContainsKey(device.Id))
                        {
                            result.Add(device.Id, new Tuple <int, decimal>(device.Item, defaultIndex - waitIndex));
                        }
                        foreach (var arrange in device.Arranges)
                        {
                            result[device.Id] = new Tuple <int, decimal>(device.Item, result[device.Id].Item2 - arrange.CapacityIndex);
                        }
                    }
                }
            }
            else if (productType == 1)
            {
                //流程工序  人员等级 人员id
                if (OperatorUse.ContainsKey(pId))
                {
                    var infos = OperatorUse[pId].Where(d => capacityList.OperatorList.Any(cd => cd.LevelId == d.Item));
                    foreach (var op in infos)
                    {
                        if (!result.ContainsKey(op.Id))
                        {
                            result.Add(op.Id, new Tuple <int, decimal>(op.Item, defaultIndex - waitIndex));
                        }
                        foreach (var arrange in op.Arranges)
                        {
                            result[op.Id] = new Tuple <int, decimal>(op.Item, result[op.Id].Item2 - arrange.CapacityIndex);
                        }
                    }
                }
            }
            return(result.Where(x => x.Value.Item2 > 0).ToDictionary(y => y.Key, y => new Tuple <int, decimal>(y.Value.Item1, y.Value.Item2)));
        }
        public SmartTaskOrderScheduleDetail(DateTime processTime, SmartTaskOrderConfirm task, SmartCapacityListDetail capacityList, SmartProductCapacity productCapacity)
        {
            ProcessTime = processTime;
            TaskOrderId = task.Id;
            TaskOrder   = task.TaskOrder;
            ProductId   = task.ProductId;
            Product     = task.Product;
            ProcessId   = capacityList.ProcessId;
            PId         = capacityList.PId;
            CategoryId  = capacityList.CategoryId;
            Order       = capacityList.Order;
            var rate = 0m;
            var y    = productCapacity;

            if (y.DeviceList.Any())
            {
                rate = y.DeviceList.First().Rate;
            }
            else if (y.OperatorList.Any())
            {
                rate = y.OperatorList.First().Rate;
            }
            Rate = rate;
        }