Exemplo n.º 1
0
        public ActivityPoint[] GetPointsForActivity(int IUID)
        {
            var preResult = new SortedDictionary<string, DayPoint>();

            var command = connection.CreateCommand();
            command.CommandText = "Select Delta, Time from Activity WHERE IUID = $IUID AND time >= datetime('now','-30 days','localtime')";
            command.Parameters.AddWithValue("$IUID", IUID);
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var delta = reader.GetInt32(0);
                    var day = reader.GetDateTime(1).ToString("yyyy-MM-dd");
                    if (preResult.ContainsKey(day))
                    {
                        if (delta > 0)
                            preResult[day].Added += delta;
                        else
                            preResult[day].Removed -= delta;
                    } else
                    {
                        if (delta > 0)
                            preResult.Add(day, new DayPoint { Added = delta, Removed = 0 });
                        else
                            preResult.Add(day, new DayPoint { Added = 0, Removed = -delta });
                    }
                }
            }
            command.CommandText = "Select Count from Items WHERE UID = $IUID";
            int itemCount;
            using (var reader = command.ExecuteReader())
            {
                reader.Read();
                itemCount = reader.GetInt32(0);
            }

            bool isFirstElement = true;
            DayPoint prevValue = new DayPoint();
            foreach (var x in preResult.Reverse())
            {
                var val = x.Value;
                if (isFirstElement)
                {
                    val.Count = itemCount;
                    isFirstElement = false;
                } else
                {
                    val.Count = prevValue.Count - prevValue.Added + prevValue.Removed;
                }
                prevValue = val;
            }

            var result = new ActivityPoint[30];
            var localDate = DateTime.Now;
            for (var day = 0; day < 30; day++)
            {
                var dayKey = localDate.AddDays(-day).ToString("yyyy-MM-dd");
                if (preResult.ContainsKey(dayKey))
                {
                    var dayData = preResult[dayKey];
                    result[day] = new ActivityPoint { Count = dayData.Count, In = dayData.Added, Out = dayData.Removed };
                } else
                {
                    result[day] = new ActivityPoint { Count = -1, In = 0, Out = 0 };
                }
            }
            result = result.Reverse().ToArray();
            if (result[0].Count == -1)
                result[0].Count = 0;
            var lastCount = result[0].Count;
            for (var day = 1; day < 30; day++)
            {
                var val = result[day];
                if (val.Count == -1)
                    val.Count = lastCount;
                lastCount = val.Count;
            }

            return result;
        }