Exemplo n.º 1
0
        public IActionResult GetProfits()
        {
            DateTime          now             = DateTime.Now;
            var               listOrderHeader = _db.OrderHeader.ToList();
            List <ProfitData> chartData       = new List <ProfitData>();

            for (int i = 0; i < 5; i++)
            {
                TimeSpan aInterval        = new System.TimeSpan(i, 0, 0, 0);
                var      considerDate     = now.Subtract(aInterval);
                var      totalProfitInDay = listOrderHeader.Where(a => a.OrderDate.Day == considerDate.Day).Sum(a => a.OrderTotal);

                ProfitData profitData = new ProfitData()
                {
                    Date   = considerDate.ToString(),
                    Profit = totalProfitInDay
                };
                chartData.Add(profitData);
            }

            var json = chartData.ToGoogleDataTable()
                       .NewColumn(new Column(ColumnType.String, "Date"), x => x.Date)
                       .NewColumn(new Column(ColumnType.Number, "Quantity"), x => x.Profit)
                       .Build()
                       .GetJson();

            return(Content(json));
        }
Exemplo n.º 2
0
        private ResolvedProfit <T> FindMostProfitableItem <T>(RoundData data, IProfitResolver <T> resovler)
        {
            IList <T> items = resovler.ResolveAccessibleItems(data);

            if (items.Count == 0)
            {
                return(null);
            }

            T          bestItem   = items.First();
            ProfitData bestProfit = resovler.CalculateProfit(data, bestItem);

            for (int i = 1; i < items.Count; i++)
            {
                // TODO multiple best items
                T          item   = items[i];
                ProfitData profit = resovler.CalculateProfit(data, item);
                if (profit.CompareTo(bestProfit) > 0)
                {
                    bestItem   = item;
                    bestProfit = profit;
                }
            }

            return(new ResolvedProfit <T>(bestItem, bestProfit));
        }
 public RobotCommand ProcessStep(RoundData data, EnergyStation station, ProfitData profit)
 {
     if (DistanceUtils.DistanceFromStation(data.MyPosition, station.Position) <= Constants.CollectingRadius)
     {
         FileLogger.Log("Collecting energy from stations nearby");
         return(new CollectEnergyCommand());
     }
     else
     {
         FileLogger.Log($"Moving to station {station.Format()} at position {profit.MovePosition}");
         return(new MoveCommand()
         {
             NewPosition = profit.MovePosition
         });
     }
 }
        public RobotCommand ProcessStep(RoundData data, Robot robot, ProfitData profit)
        {
            if (data.MyPosition == robot.Position)
            {
                FileLogger.Log($"Attacking robot: {robot.Format()} at position {profit.MovePosition}");
            }
            else
            {
                FileLogger.Log($"Moving to robot {robot} at position {profit.MovePosition}");
            }

            return(new MoveCommand()
            {
                NewPosition = profit.MovePosition
            });
        }
Exemplo n.º 5
0
        private void PerPlanting(string cmd, string[] args)
        {
            string season = "";

            if (args.Length >= 1)
            {
                season = args[0];
            }
            Log.Info((season == "") ? "Doing for all seasons" : $"Doing for season {season}");
            Log.Info("NOTE: This takes into account your farming level");

            var profits    = new List <ProfitData>();
            var objectInfo = Game1.content.Load <Dictionary <int, string> >("Data\\ObjectInformation");
            var cropInfo   = Game1.content.Load <Dictionary <int, string> >("Data\\Crops");

            foreach (var crop in cropInfo)
            {
                string[] seedObjData    = objectInfo[crop.Key].Split('/');
                string[] cropData       = crop.Value.Split('/');
                string[] productObjData = objectInfo[int.Parse(cropData[3])].Split('/');

                string name  = productObjData[0];
                int    cost  = int.Parse(seedObjData[1]);
                int    value = int.Parse(productObjData[1]);

                //Monitor.Log("Doing for " + name);

                if (season != "" && !cropData[1].Split(' ').Contains(season))
                {
                    continue;
                }

                var phases   = cropData[0].Split(' ').Select <string, int>(int.Parse);
                int total    = phases.Sum();
                int regrowth = int.Parse(cropData[4]);

                int profit = (value - cost) * (28 / total);
                if (regrowth != -1)
                {
                    int days     = 28;
                    int harvests = 0;

                    days     -= total + 1; ++harvests;
                    harvests += days / regrowth;
                    //Monitor.Log("harvests for " + name + " " + harvests + " w/ " + total + " " + regrowth);

                    int avgPerHarvest = 1;
                    if (cropData[6].StartsWith("true "))
                    {
                        string[] multiStrs = cropData[6].Split(' ');
                        int      min       = int.Parse(multiStrs[1]);
                        int      max       = int.Parse(multiStrs[2]);

                        // TODO: Integrate chance?

                        /*
                         * int bonus = int.Parse(multiStrs[3]);
                         * double chance = double.Parse(multiStrs[4]);
                         *
                         * int farmLevel = 0;
                         * if (Game1.player != null)
                         *  farmLevel = Game1.player.FarmingLevel;
                         *
                         * int newMax = Math.Min(min + 1, max + 1 + farmLevel / (bonus == 0 ? 1 : bonus));
                         *
                         * while (random.NextDouble() < Math.Min(0.9, (double)((NetFieldBase<double, NetDouble>)this.chanceForExtraCrops)))
                         ++num1;
                         */

                        avgPerHarvest = (min + max) / 2;
                    }

                    //Monitor.Log($"{name} {value} {harvests} {avgPerHarvest} {cost}");
                    profit = (value * harvests * avgPerHarvest) - cost;
                }

                var data = new ProfitData
                {
                    Profit = profit,
                    Crop   = name
                };
                profits.Add(data);
            }

            profits.Sort(Comparer <ProfitData> .Create((p1, p2) => p2.Profit - p1.Profit));
            for (int i = 0; i < profits.Count; ++i)
            {
                var p = profits[i];
                Log.Info($"{i + 1}. {p.Crop,-20}{p.Profit,10}g");
            }
        }
 public ResolvedProfit(T item, ProfitData profit)
 {
     Item   = item;
     Profit = profit;
 }