Stats
This commit is contained in:
		
							parent
							
								
									e20fc07053
								
							
						
					
					
						commit
						9bb977dedb
					
				| @ -249,7 +249,6 @@ namespace Matomat | ||||
|                                    "²²²²²²²²²²²²²²²²²²²²²²²²²²²²" + p[0] + | ||||
|                                    "²    MATOMAT Wilkommen!    ²" + p[1] + | ||||
|                                    "² Frohes genießen der Mate ²" + p[2]); | ||||
|             Factory.getLCD().print("µ_¶·-¸¹ºµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ"); | ||||
|         } | ||||
| 
 | ||||
|         public static void showUserInfo(User user) | ||||
| @ -303,6 +302,41 @@ namespace Matomat | ||||
| 
 | ||||
|         public static void InsShowStats(User user, bool lastMonth = true) | ||||
|         { | ||||
|             List<Product> products = History.GetDrunkProducts(user, lastMonth); | ||||
|             foreach (Product item in products) | ||||
|             { | ||||
|                 string output=""; | ||||
|                 if (lastMonth) | ||||
|                 { | ||||
|                     output += "   Dein Verbrauch im letzten Monat an   "; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     output += "  Dein Verbrauch seit Anbeginn der Zeit "; | ||||
|                 } | ||||
|                 output += Factory.getLCD().CenterString("\""+item.GetName()+"\""); | ||||
|                 Tuple<int, double> sum = History.GetDrunkProductsSum(user, item, lastMonth); | ||||
|                 output += Factory.getLCD().CenterString(sum.Item1 + " Flaschen mit " + sum.Item2.ToString("N2") + " g Koffein"); | ||||
|                 output += " Verlauf: "; | ||||
|                 List<int> chart = History.GetDrunkProductsChart(user, item, lastMonth); | ||||
|                 foreach (int value in chart) | ||||
|                 { | ||||
|                     switch (value) | ||||
|                     { | ||||
|                         case 0: output += "µ"; break; | ||||
|                         case 1: output += "_"; break; | ||||
|                         case 2: output += "¶"; break; | ||||
|                         case 3: output += "·"; break; | ||||
|                         case 4: output += "-"; break; | ||||
|                         case 5: output += "¸"; break; | ||||
|                         case 6: output += "¹"; break; | ||||
|                         case 7: output += "º"; break; | ||||
|                         default: output += " "; break; | ||||
|                     } | ||||
|                 } | ||||
|                 Factory.getLCD().print(output, 5); | ||||
|                 System.Threading.Thread.Sleep(4500); | ||||
|             } | ||||
|             /** Alle Daten aus der DB Holen die aus dem zeitraum für den user da sind zu Produkt X | ||||
|              * Lege liste mit 40 plätzen an | ||||
|              * Teile Zeit auf die 40 Plätze auf, älteste bewegung = t0, neueste bewegung = t40 | ||||
| @ -311,6 +345,16 @@ namespace Matomat | ||||
|              * Rechne die prozentuale getränke pro platz | ||||
|              * erstelle en Graphen | ||||
|              */ | ||||
| 
 | ||||
|             /*1234567890123456789012345678901234567890 | ||||
|              * Verlauf: -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ | ||||
|              *  Dein Verbrauch seit Anbeginn der Zeit  | ||||
|              *   Dein Verbrauch im letzten Monat an    | ||||
|              *              "Club-Mate" | ||||
|              *   1221 Flaschen mit 101,22 g Koffein | ||||
|              *_-----___--__-_--_----_----_-------___-- | ||||
|              * | ||||
|              */ | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -90,5 +90,117 @@ namespace Matomat.Model | ||||
|             h.bind(k); | ||||
|             h.store(); | ||||
|         } | ||||
| 
 | ||||
|         public static List<Product> GetDrunkProducts(User u, bool lastMonth) | ||||
|         { | ||||
|             DBQuery query = Factory.getDBO().getQuery(true); | ||||
|             query.select(Factory.getDBO().quoteName("p.barcode", "id")); | ||||
|             query.from(Factory.getDBO().quoteName("history", "h")); | ||||
|             query.leftJoin(Factory.getDBO().quoteName("product", "p") + " ON " + Factory.getDBO().quoteName("p.id") + " = " + Factory.getDBO().quoteName("h.prod")); | ||||
|             query.where(Factory.getDBO().quoteName("h.user") + " = " + Factory.getDBO().quote(u.GetId().ToString())); | ||||
|             if (lastMonth) | ||||
|             { | ||||
|                 query.where(Factory.getDBO().quoteName("h.time") + " >= DATE_SUB(NOW(),INTERVAL 30 DAY)"); | ||||
|             } | ||||
|             query.group(Factory.getDBO().quoteName("h.prod")); | ||||
| 
 | ||||
|             Factory.getDBO().setQuery(query); | ||||
| 
 | ||||
|             List<object[]> rows = Factory.getDBO().getResultList(); | ||||
|             List<Product> ret = new List<Product>(); | ||||
|             if (rows == null) | ||||
|             { | ||||
|                 return ret; | ||||
|             } | ||||
|             foreach (object[] row in rows) | ||||
|             { | ||||
|                 ret.Add(new Product((long)row[0])); | ||||
|             } | ||||
|             return ret; | ||||
|         } | ||||
| 
 | ||||
|         public static Tuple<int, double> GetDrunkProductsSum(User u, Product item, bool lastMonth) | ||||
|         { | ||||
|             DBQuery query = Factory.getDBO().getQuery(true); | ||||
|             query.select("COUNT(*) AS " + Factory.getDBO().quoteName("boddles")); | ||||
|             query.select("SUM(" + Factory.getDBO().quoteName("p.caffeine") + ") AS " + Factory.getDBO().quoteName("caffeine")); | ||||
|             query.from(Factory.getDBO().quoteName("history", "h")); | ||||
|             query.leftJoin(Factory.getDBO().quoteName("product", "p") + " ON " + Factory.getDBO().quoteName("p.id") + " = " + Factory.getDBO().quoteName("h.prod")); | ||||
|             query.where(Factory.getDBO().quoteName("h.user") + " = " + Factory.getDBO().quote(u.GetId().ToString())); | ||||
|             if (lastMonth) | ||||
|             { | ||||
|                 query.where(Factory.getDBO().quoteName("h.time") + " >= DATE_SUB(NOW(),INTERVAL 30 DAY)"); | ||||
|             } | ||||
| 
 | ||||
|             Factory.getDBO().setQuery(query); | ||||
| 
 | ||||
|             object[] row = Factory.getDBO().getResult(); | ||||
|             if (row == null) | ||||
|             { | ||||
|                 return new Tuple<int, double>(0,0); | ||||
|             } | ||||
|             return new Tuple<int, double>(int.Parse(row[0].ToString()), double.Parse(row[1].ToString()) / 1000); | ||||
|         } | ||||
| 
 | ||||
|         public static List<int> GetDrunkProductsChart(User u, Product item, bool lastMonth, int days = 30) | ||||
|         { | ||||
|             DBQuery query = Factory.getDBO().getQuery(true); | ||||
|             query.select(Factory.getDBO().quoteName("h.prod", "product")); | ||||
|             query.select(Factory.getDBO().quoteName("h.time", "time")); | ||||
|             query.from(Factory.getDBO().quoteName("history", "h")); | ||||
|             query.order(Factory.getDBO().quoteName("h.time")+" ASC"); | ||||
|             query.where(Factory.getDBO().quoteName("h.user") + " = " + Factory.getDBO().quote(u.GetId().ToString())); | ||||
|             if (lastMonth) | ||||
|             { | ||||
|                 query.where(Factory.getDBO().quoteName("h.time") + " >= DATE_SUB(NOW(),INTERVAL 30 DAY)"); | ||||
|             } | ||||
| 
 | ||||
|             Factory.getDBO().setQuery(query); | ||||
| 
 | ||||
|             List<object[]> rows = Factory.getDBO().getResultList(); | ||||
|             List<DateTime> bottles = new List<DateTime>(); | ||||
|             List<int> ret = new List<int>(); | ||||
|             if (rows == null) | ||||
|             { | ||||
|                 return ret; | ||||
|             } | ||||
|             foreach (object[] row in rows) | ||||
|             { | ||||
|                 bottles.Add((DateTime)row[1]); | ||||
|             } | ||||
|             DateTime first = bottles.ElementAt(0); | ||||
|             DateTime last = DateTime.Now; | ||||
|             if (lastMonth) | ||||
|             { | ||||
|                 first = last.Subtract(TimeSpan.FromDays(30)); | ||||
|             } | ||||
|             double step = (last - first).TotalSeconds / days; | ||||
|             int max = 0; | ||||
|             List<int> tmplist = new List<int>(); | ||||
|             for (int i = 0; i < days; i++) | ||||
|             { | ||||
|                 inRange_f = first.AddSeconds(step * i); | ||||
|                 inRange_t = first.AddSeconds((step * (i + 1)) - 1); | ||||
|                 int v = bottles.FindAll(inRange).Count(); | ||||
|                 tmplist.Add(v); | ||||
|                 if (v > max)  | ||||
|                     max = v; | ||||
|             } | ||||
|             foreach (int point in tmplist) | ||||
|             { | ||||
|                 ret.Add((int)Math.Round(7 * ((double)point / (double)max))); | ||||
|             } | ||||
|             return ret; | ||||
|         } | ||||
|         private static DateTime inRange_f = DateTime.Now; | ||||
|         private static DateTime inRange_t = DateTime.Now; | ||||
|         private static bool inRange(DateTime el) | ||||
|         { | ||||
|             if (el >= inRange_f && el < inRange_t) | ||||
|             { | ||||
|                 return true; | ||||
|             }  | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -165,9 +165,9 @@ namespace Matomat.Output | ||||
|             this.displayEscCode("UDC1@@@@@@@_"); //[1, 0x81] Strich 1te von unten | ||||
|             this.displayEscCode("UDC2@@@@@_@@"); //[2, 0x82] Strich 3te von unten | ||||
|             this.displayEscCode("UDC3@@@@_@@@"); //[3, 0x83] Strich 4te von unten | ||||
|             this.displayEscCode("UDC4@@_@@@@@"); //[4, 0x84] Strich 3te von unten | ||||
|             this.displayEscCode("UDC5@_@@@@@@"); //[5, 0x05] Strich 3te von unten | ||||
|             this.displayEscCode("UDC6_@@@@@@@"); //[6, 0x06] Strich 3te von unten | ||||
|             this.displayEscCode("UDC4@@_@@@@@"); //[4, 0x84] Strich 6te von unten | ||||
|             this.displayEscCode("UDC5@_@@@@@@"); //[5, 0x05] Strich 7te von unten | ||||
|             this.displayEscCode("UDC6_@@@@@@@"); //[6, 0x06] Strich 8te von unten | ||||
|         } | ||||
| 
 | ||||
|         private void displayEscCode(string code) | ||||
| @ -219,6 +219,18 @@ namespace Matomat.Output | ||||
|                          "²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", status, time); | ||||
|         } | ||||
| 
 | ||||
|         public string CenterString(string text, int length = 40) | ||||
|         { | ||||
|             if (text.Length > length) | ||||
|                 text = text.Substring(0, length); | ||||
|             double textlength = ((((double)length) - text.Length) / 2); | ||||
| 
 | ||||
|             text = text.PadLeft((int)Math.Floor(textlength) + text.Length, ' '); | ||||
|             text = text.PadRight((int)Math.Ceiling(textlength) + text.Length, ' '); | ||||
| 
 | ||||
|             return text; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Prints a text on the display with the minimum duration of the time and beebcodes when status is not Status.OK | ||||
|         /// if the text is >= than 160 Chars it will display a border. | ||||
|  | ||||
| @ -17,6 +17,7 @@ namespace Matomat | ||||
| 
 | ||||
|         public static void Main(string[] args) | ||||
|         { | ||||
|             test(); | ||||
|             InitMainThread(); | ||||
|             Thread t = new Thread(MainThread); | ||||
|             t.Start(); | ||||
| @ -27,6 +28,12 @@ namespace Matomat | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private static void test() | ||||
|         { | ||||
|             User u = new User(2855543482); | ||||
|             Instruction.InsShowStats(u, true); | ||||
|         } | ||||
| 
 | ||||
|         #region MainThread | ||||
|         private static void InitMainThread() | ||||
|         { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user