Fix a ton of bugs, Some new Features like Aufladen and Exit
This commit is contained in:
parent
f46f43dce2
commit
cdec43f718
@ -7,36 +7,43 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
class Automat
|
class Automat
|
||||||
{
|
{
|
||||||
private User user;
|
|
||||||
private Prod prod;
|
|
||||||
private bool shutdown = false;
|
private bool shutdown = false;
|
||||||
private LCDDisplay lcd;
|
|
||||||
private Input inp;
|
|
||||||
|
|
||||||
public delegate void stopEvent(bool stop);
|
public delegate void stopEvent(bool stop);
|
||||||
|
|
||||||
public event stopEvent stopThread;
|
public event stopEvent stopThread;
|
||||||
|
|
||||||
public Automat() {
|
public Automat() {
|
||||||
lcd = Factory.getLCDDisplay();
|
|
||||||
inp = Factory.getInput();
|
|
||||||
}
|
}
|
||||||
internal void doJob(InputData input)
|
internal void doJob(InputData input)
|
||||||
{
|
{
|
||||||
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
|
Input inp = Factory.getInput();
|
||||||
|
|
||||||
if (input.type == InputData.types.Card)
|
if (input.type == InputData.types.Card)
|
||||||
{
|
{
|
||||||
user = this.findUser(input.id);
|
User user = new User(input.id);
|
||||||
if (!user.vaild())
|
if (!user.vaild())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.showUserInfo(user);
|
this.showUserInfo(user);
|
||||||
lcd.print("Bitte Produkt / Code über den Barcodeleser halten.");
|
|
||||||
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
|
"² Bitte Produkt über den ²" +
|
||||||
|
"² Barcodeleser halten ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²");
|
||||||
|
|
||||||
InputData prodid = inp.getProdInput(20);
|
InputData prodid = inp.getProdInput(20);
|
||||||
if (prodid.type == InputData.types.None)
|
if (prodid.type == InputData.types.None)
|
||||||
return;
|
return;
|
||||||
prod = this.findProd(prodid.id);
|
|
||||||
|
Prod prod = new Prod(prodid.id);
|
||||||
if(!prod.vaild())
|
if(!prod.vaild())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.showProdInfo(prod);
|
this.showProdInfo(prod);
|
||||||
|
|
||||||
if (prod.GetProdType() == Prod.ProdType.product)
|
if (prod.GetProdType() == Prod.ProdType.product)
|
||||||
{
|
{
|
||||||
this.sell(prod, user);
|
this.sell(prod, user);
|
||||||
@ -46,31 +53,71 @@ namespace Matomat
|
|||||||
switch (prod.GetFunctName())
|
switch (prod.GetFunctName())
|
||||||
{
|
{
|
||||||
case "exit();": this.stopThread(true); break;
|
case "exit();": this.stopThread(true); break;
|
||||||
case "aufladen(10);": this.InsAufladen(10); break;
|
case "aufladen(10);": this.InsAufladen(10, user); break;
|
||||||
case "aufladen(20);": this.InsAufladen(20); break;
|
case "aufladen(20);": this.InsAufladen(20, user); break;
|
||||||
case "aufladen(5);": this.InsAufladen(5); break;
|
case "aufladen(5);": this.InsAufladen(5, user); break;
|
||||||
case "addUser();": this.InsAddUser(); break;
|
/*case "addUser();": this.InsAddUser(); break;
|
||||||
case "delUser();": this.InsDelUser(); break;
|
case "delUser();": this.InsDelUser(); break;
|
||||||
case "showStats();": this.InsShowStats(); break;
|
case "showStats();": this.InsShowStats(); break;*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (input.type == InputData.types.Prod)
|
else if (input.type == InputData.types.Prod)
|
||||||
{
|
{
|
||||||
prod = this.findProd(input.id);
|
Prod prod = new Prod(input.id);
|
||||||
if (!prod.vaild())
|
if (!prod.vaild())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (prod.GetFunctName().ToLower() == "exit();")
|
||||||
|
{
|
||||||
|
this.stopThread(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.showProdInfo(prod);
|
this.showProdInfo(prod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InsAufladen(int betrag, User admin)
|
||||||
|
{
|
||||||
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
|
Input inp = Factory.getInput();
|
||||||
|
if (!admin.IsAdmin())
|
||||||
|
{
|
||||||
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
|
"² Du bist kein Admin, ²" +
|
||||||
|
"² du kannst nichts Aufladen! ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²",
|
||||||
|
LCDDisplay.Status.Error, 5);
|
||||||
|
System.Threading.Thread.Sleep(4500);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
|
"² Bitte die Zielkarte auf den ²" +
|
||||||
|
"² RFID Leser auflegen ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²");
|
||||||
|
InputData target = inp.getCardInput(20);
|
||||||
|
if (target.type == InputData.types.None)
|
||||||
|
return;
|
||||||
|
|
||||||
|
User user = new User(target.id);
|
||||||
|
if (!user.vaild())
|
||||||
|
return;
|
||||||
|
|
||||||
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
|
"² Betrag von User " + user.GetUserName().PadRight(8, ' ') + " ²" +
|
||||||
|
"² um "+betrag.ToString().PadLeft(2, ' ')+" € verringert ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²");
|
||||||
|
user.SetUserKonto(user.GetUserKonto()-betrag);
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
}
|
||||||
|
|
||||||
private void sell(Prod prod, User user)
|
private void sell(Prod prod, User user)
|
||||||
{
|
{
|
||||||
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
if (user.GetUserKonto() > 19)
|
if (user.GetUserKonto() > 19)
|
||||||
{
|
{
|
||||||
this.lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
"² Du hast zu viel Geld auf dem Konto ²" +
|
"² Du hast zu viel Geld auf dem Konto ²" +
|
||||||
"² BITTE bezahlen! | Grenze 20€ ²" +
|
"² BITTE bezahlen! | Grenze 20€ ²" +
|
||||||
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²",
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²",
|
||||||
@ -80,12 +127,13 @@ namespace Matomat
|
|||||||
|
|
||||||
private void showProdInfo(Prod prod)
|
private void showProdInfo(Prod prod)
|
||||||
{
|
{
|
||||||
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
if (prod.GetProdType() == Prod.ProdType.product)
|
if (prod.GetProdType() == Prod.ProdType.product)
|
||||||
{
|
{
|
||||||
long id = prod.GetProdId();
|
long id = prod.GetProdId();
|
||||||
double price = prod.GetProdPrice();
|
double price = prod.GetProdPrice();
|
||||||
string name = prod.GetProdName();
|
string name = prod.GetProdName();
|
||||||
this.lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
"² Produkt: " + name.PadRight(27, ' ') + " ²" +
|
"² Produkt: " + name.PadRight(27, ' ') + " ²" +
|
||||||
"² Preis: " + price.ToString(2).PadLeft(6, ' ') + "€ EAN13: " + id.ToString().PadRight(14, ' ') + " ²" +
|
"² Preis: " + price.ToString(2).PadLeft(6, ' ') + "€ EAN13: " + id.ToString().PadRight(14, ' ') + " ²" +
|
||||||
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 2);
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 2);
|
||||||
@ -93,41 +141,40 @@ namespace Matomat
|
|||||||
if (prod.GetProdType() == Prod.ProdType.instruction)
|
if (prod.GetProdType() == Prod.ProdType.instruction)
|
||||||
{
|
{
|
||||||
string name = prod.GetFunctName();
|
string name = prod.GetFunctName();
|
||||||
this.lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
"² Instruktion: " + name.PadRight(23, ' ') + " ²" +
|
"² Instruktion: " + name.PadRight(23, ' ') + " ²" +
|
||||||
"² AdminCard + Instruction + TargetCard ²" +
|
"² AdminCard + Instruction + TargetCard ²" +
|
||||||
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 2);
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Prod findProd(long prodid)
|
|
||||||
{
|
|
||||||
return new Prod(prodid);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showUserInfo(User user)
|
private void showUserInfo(User user)
|
||||||
{
|
{
|
||||||
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
|
|
||||||
string name = user.GetUserName();
|
string name = user.GetUserName();
|
||||||
int konto = user.GetUserKonto();
|
int konto = user.GetUserKonto();
|
||||||
long id = user.GetUserId();
|
long id = user.GetUserId();
|
||||||
int all = user.GetUserAll();
|
long all = user.GetUserAll();
|
||||||
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
"² User: " + name.PadRight(8, ' ') + " Betrag: " + (konto.ToString() + " €").PadRight(7, ' ') + " ²" +
|
"² User: " + name.PadRight(8, ' ') + " Betrag: " + (konto.ToString() + " €").PadRight(7, ' ') + " ²" +
|
||||||
"² UserID: " + id.ToString().PadRight(12, ' ') + " Gesamt: " + (all.ToString() + " €").PadRight(7, ' ') + " ²" +
|
"² UserID: " + id.ToString().PadRight(12, ' ') + " Gesamt: " + (all.ToString() + " €").PadRight(7, ' ') + " ²" +
|
||||||
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 5);
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
private User findUser(long userId)
|
|
||||||
{
|
|
||||||
return new User(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void GetInitStatus()
|
internal void GetInitStatus()
|
||||||
{
|
{
|
||||||
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²abcdef 321" +
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
"² MATOMAT Wilkommen! ²ghijkl 123" +
|
List<TBest> l = new Tables().getBestlist();
|
||||||
"² Frohes genießen der Mate ²mnopqr 066" +
|
string[] p = new string[4];
|
||||||
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²stuvwx 001");
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
p[i] = (l.Count >= i + 1) ? l.ElementAt(i).name.PadRight(6, ' ').Substring(0, 6) + " " + (l.ElementAt(i).num % 1000).ToString().PadLeft(3, '0') : " ";
|
||||||
|
}
|
||||||
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" + p[0] +
|
||||||
|
"² MATOMAT Wilkommen! ²" + p[1] +
|
||||||
|
"² Frohes genießen der Mate ²" + p[2] +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" + p[3]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,22 +8,36 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
class BarcodeReader
|
class BarcodeReader
|
||||||
{
|
{
|
||||||
private TextReader r;
|
private bool _shouldStop;
|
||||||
internal long getCodeID()
|
internal long getCodeID()
|
||||||
{
|
{
|
||||||
r = Console.In;
|
if (Console.KeyAvailable)
|
||||||
string str = r.ReadLine();
|
{
|
||||||
|
string str = "";
|
||||||
|
this._shouldStop = false;
|
||||||
|
while (!this._shouldStop)
|
||||||
|
{
|
||||||
|
if (Console.KeyAvailable)
|
||||||
|
{
|
||||||
|
ConsoleKeyInfo k = Console.ReadKey(true);
|
||||||
|
if (k.Key == ConsoleKey.Enter)
|
||||||
|
break;
|
||||||
|
str = str + k.KeyChar.ToString();
|
||||||
|
}
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Convert.ToInt64(str);
|
return Convert.ToInt64(str);
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception) { }
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Abort()
|
internal void Abort()
|
||||||
{
|
{
|
||||||
r.Close();
|
this._shouldStop = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using MySql.Data;
|
using MySql.Data;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Matomat
|
namespace Matomat
|
||||||
{
|
{
|
||||||
@ -14,6 +15,7 @@ namespace Matomat
|
|||||||
private bool data_b;
|
private bool data_b;
|
||||||
private MySqlDataReader data;
|
private MySqlDataReader data;
|
||||||
private long id;
|
private long id;
|
||||||
|
private Thread pingThread;
|
||||||
public DBDriverMysqli()
|
public DBDriverMysqli()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -31,8 +33,23 @@ namespace Matomat
|
|||||||
}
|
}
|
||||||
this.query("SET NAMES 'UTF8'");
|
this.query("SET NAMES 'UTF8'");
|
||||||
this.query("SET CHARACTER SET 'UTF8'");
|
this.query("SET CHARACTER SET 'UTF8'");
|
||||||
|
this.startPing();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startPing()
|
||||||
|
{
|
||||||
|
this.pingThread = new Thread(this.ping);
|
||||||
|
this.pingThread.Start();
|
||||||
|
}
|
||||||
|
public void ping()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1 * 60 * 1000);
|
||||||
|
this.query("SELECT 1");
|
||||||
|
}
|
||||||
|
}
|
||||||
public override void query(string sql)
|
public override void query(string sql)
|
||||||
{
|
{
|
||||||
this.err = null;
|
this.err = null;
|
||||||
@ -208,8 +225,9 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
~DBDriverMysqli()
|
public override void RequestStop()
|
||||||
{
|
{
|
||||||
|
this.pingThread.Abort();
|
||||||
if (!this.data.IsClosed)
|
if (!this.data.IsClosed)
|
||||||
this.data.Close();
|
this.data.Close();
|
||||||
this.conn.Close();
|
this.conn.Close();
|
||||||
|
@ -5,7 +5,7 @@ using System.Text;
|
|||||||
|
|
||||||
namespace Matomat
|
namespace Matomat
|
||||||
{
|
{
|
||||||
class Database
|
abstract class Database
|
||||||
{
|
{
|
||||||
private class instance
|
private class instance
|
||||||
{
|
{
|
||||||
@ -40,36 +40,13 @@ namespace Matomat
|
|||||||
instances.Add(instance);
|
instances.Add(instance);
|
||||||
return instance.iDatabase;
|
return instance.iDatabase;
|
||||||
}
|
}
|
||||||
public virtual bool connect(string server, string dbs, string user, string pw, int port, string driver)
|
public abstract bool connect(string server, string dbs, string user, string pw, int port, string driver);
|
||||||
{
|
public abstract void query(string sql);
|
||||||
return false;
|
public abstract object[] getResult();
|
||||||
}
|
public abstract List<object[]> getResultList();
|
||||||
public virtual void query(string sql)
|
public abstract Exception getError();
|
||||||
{
|
public abstract long getID();
|
||||||
return;
|
public abstract string quote(string str);
|
||||||
}
|
public abstract void RequestStop();
|
||||||
public virtual object[] getResult()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public virtual List<object[]> getResultList()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public virtual Exception getError()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public virtual long getID()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
public virtual string quote(string str)
|
|
||||||
{
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
~Database()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,5 +57,23 @@ namespace Matomat
|
|||||||
Config c = Factory.getConfig();
|
Config c = Factory.getConfig();
|
||||||
return Database.getInstance(c.mysql_server, c.mysql_db, c.mysql_user, c.mysql_pw, c.mysql_port, c.mysql_driver);
|
return Database.getInstance(c.mysql_server, c.mysql_db, c.mysql_user, c.mysql_pw, c.mysql_port, c.mysql_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static void rmDBO()
|
||||||
|
{
|
||||||
|
if (dbo_i != null)
|
||||||
|
{
|
||||||
|
dbo_i.RequestStop();
|
||||||
|
dbo_i = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void rmLCDDisplay()
|
||||||
|
{
|
||||||
|
if (lcd_i != null)
|
||||||
|
{
|
||||||
|
lcd_i.RequestStop();
|
||||||
|
lcd_i = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,5 +128,23 @@ namespace Matomat
|
|||||||
instances.Add(instance);
|
instances.Add(instance);
|
||||||
return instance.input;
|
return instance.input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal InputData getCardInput(int timeout)
|
||||||
|
{
|
||||||
|
if (timeout == 0)
|
||||||
|
timeout = Int32.MaxValue;
|
||||||
|
data = new InputData();
|
||||||
|
Thread wtCard = new Thread(this.doWorkCard);
|
||||||
|
wtCard.Start();
|
||||||
|
while (!wtCard.IsAlive) ;
|
||||||
|
DateTime time = DateTime.Now.AddSeconds(timeout);
|
||||||
|
while (time.Ticks > DateTime.Now.Ticks && data.type == InputData.types.None)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
|
wtCard.Abort();
|
||||||
|
rfid.Abort();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,8 +34,20 @@ namespace Matomat
|
|||||||
this.time = time;
|
this.time = time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private class Beeb
|
||||||
|
{
|
||||||
|
public int frequency;
|
||||||
|
public int duration;
|
||||||
|
|
||||||
|
public Beeb(int frequency, int duration)
|
||||||
|
{
|
||||||
|
this.frequency = frequency;
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
static List<instance> instances;
|
static List<instance> instances;
|
||||||
private Queue<Message> messages;
|
private Queue<Message> messages;
|
||||||
|
private Queue<Beeb> beeb;
|
||||||
private volatile bool _shouldStop;
|
private volatile bool _shouldStop;
|
||||||
private SerialPort serialPort;
|
private SerialPort serialPort;
|
||||||
private bool disable = false;
|
private bool disable = false;
|
||||||
@ -52,12 +64,25 @@ namespace Matomat
|
|||||||
this.disable = true;
|
this.disable = true;
|
||||||
}
|
}
|
||||||
this.createChars();
|
this.createChars();
|
||||||
messages = new Queue<Message>();
|
this.messages = new Queue<Message>();
|
||||||
Thread workerThread = new Thread(this.DoWork);
|
new Thread(this.DisplayThread).Start();
|
||||||
workerThread.Start();
|
this.beeb = new Queue<Beeb>();
|
||||||
while (!workerThread.IsAlive);
|
new Thread(this.BeebThread).Start();
|
||||||
}
|
}
|
||||||
public void DoWork()
|
private void BeebThread()
|
||||||
|
{
|
||||||
|
Beeb b;
|
||||||
|
while (!_shouldStop)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1);
|
||||||
|
if (this.beeb.Count != 0)
|
||||||
|
{
|
||||||
|
b = this.beeb.Dequeue();
|
||||||
|
Console.Beep(b.frequency, b.duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void DisplayThread()
|
||||||
{
|
{
|
||||||
Message m;
|
Message m;
|
||||||
DateTime timeout = new DateTime();
|
DateTime timeout = new DateTime();
|
||||||
@ -76,20 +101,24 @@ namespace Matomat
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void beep(int frequency, int duration)
|
||||||
|
{
|
||||||
|
Beeb b = new Beeb(frequency, duration);
|
||||||
|
this.beeb.Enqueue(b);
|
||||||
|
}
|
||||||
private void display(string text, Status status)
|
private void display(string text, Status status)
|
||||||
{
|
{
|
||||||
if (status == Status.Warn)
|
if (status == Status.Warn)
|
||||||
{
|
{
|
||||||
Console.Beep(750, 750);
|
this.beep(750, 750);
|
||||||
}
|
}
|
||||||
if (status == Status.Error)
|
if (status == Status.Error)
|
||||||
{
|
{
|
||||||
Console.Beep(750, 500);
|
this.beep(750, 500);
|
||||||
Console.Beep(37, 100);
|
this.beep(37, 100);
|
||||||
Console.Beep(750, 500);
|
this.beep(750, 500);
|
||||||
Console.Beep(37, 100);
|
this.beep(37, 100);
|
||||||
Console.Beep(750, 500);
|
this.beep(750, 500);
|
||||||
}
|
}
|
||||||
Console.WriteLine(text);
|
Console.WriteLine(text);
|
||||||
this.displayClear();
|
this.displayClear();
|
||||||
@ -194,6 +223,9 @@ namespace Matomat
|
|||||||
}
|
}
|
||||||
public void RequestStop()
|
public void RequestStop()
|
||||||
{
|
{
|
||||||
|
while (messages.Count != 0) { Thread.Sleep(10); }
|
||||||
|
while (beeb.Count != 0) { Thread.Sleep(10); }
|
||||||
|
Thread.Sleep(100);
|
||||||
_shouldStop = true;
|
_shouldStop = true;
|
||||||
if (this.serialPort.IsOpen)
|
if (this.serialPort.IsOpen)
|
||||||
this.serialPort.Close();
|
this.serialPort.Close();
|
||||||
|
@ -34,21 +34,8 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="mysql.data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
<Reference Include="MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" />
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<Reference Include="MySql.Data.Entity, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL" />
|
||||||
<HintPath>.\mysql.data.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="mysql.data.entity, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>.\mysql.data.entity.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="mysql.visualstudio">
|
|
||||||
<HintPath>.\mysql.visualstudio.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="mysql.web, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>.\mysql.web.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RfidClass, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="RfidClass, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>.\RfidClass.dll</HintPath>
|
<HintPath>.\RfidClass.dll</HintPath>
|
||||||
@ -75,6 +62,7 @@
|
|||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="RFIDReader.cs" />
|
<Compile Include="RFIDReader.cs" />
|
||||||
|
<Compile Include="Tables\Tables.Best.cs" />
|
||||||
<Compile Include="Tables\Tables.cs" />
|
<Compile Include="Tables\Tables.cs" />
|
||||||
<Compile Include="Tables\Tables.User.cs" />
|
<Compile Include="Tables\Tables.User.cs" />
|
||||||
<Compile Include="User.cs" />
|
<Compile Include="User.cs" />
|
||||||
|
@ -10,6 +10,9 @@ namespace Matomat
|
|||||||
private long prodId;
|
private long prodId;
|
||||||
private bool found;
|
private bool found;
|
||||||
private ProdType type;
|
private ProdType type;
|
||||||
|
private int price;
|
||||||
|
private string name;
|
||||||
|
private string function;
|
||||||
public enum ProdType
|
public enum ProdType
|
||||||
{
|
{
|
||||||
product,
|
product,
|
||||||
@ -35,11 +38,14 @@ namespace Matomat
|
|||||||
if (t.iscommand)
|
if (t.iscommand)
|
||||||
{
|
{
|
||||||
this.type = ProdType.instruction;
|
this.type = ProdType.instruction;
|
||||||
|
this.function = t.name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.type = ProdType.product;
|
this.type = ProdType.product;
|
||||||
|
this.name = t.name;
|
||||||
}
|
}
|
||||||
|
this.price = t.cost;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,17 +76,17 @@ namespace Matomat
|
|||||||
|
|
||||||
internal double GetProdPrice()
|
internal double GetProdPrice()
|
||||||
{
|
{
|
||||||
return 1.0;
|
return this.price;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string GetProdName()
|
internal string GetProdName()
|
||||||
{
|
{
|
||||||
return "Mate-Cola";
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string GetFunctName()
|
internal string GetFunctName()
|
||||||
{
|
{
|
||||||
return "aufladen(10);";
|
return this.function;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,9 @@ namespace Matomat
|
|||||||
|
|
||||||
while (workerThread.IsAlive)
|
while (workerThread.IsAlive)
|
||||||
{
|
{
|
||||||
Thread.Sleep(1);
|
Thread.Sleep(100);
|
||||||
}
|
}
|
||||||
Console.WriteLine("main thread: Worker thread has terminated.");
|
//Console.ReadLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ namespace Matomat
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
return r.readKey();
|
return r.readKey();
|
||||||
|
//return 388914410;
|
||||||
}
|
}
|
||||||
catch (Exception)// e)
|
catch (Exception)// e)
|
||||||
{
|
{
|
||||||
|
53
Matomat/Tables/Tables.Best.cs
Normal file
53
Matomat/Tables/Tables.Best.cs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Data;
|
||||||
|
|
||||||
|
namespace Matomat
|
||||||
|
{
|
||||||
|
class TBest : Tables
|
||||||
|
{
|
||||||
|
public TBest(long num, string name)
|
||||||
|
{
|
||||||
|
this._num = num;
|
||||||
|
this._name = name;
|
||||||
|
}
|
||||||
|
public TBest()
|
||||||
|
{
|
||||||
|
this._name = "";
|
||||||
|
this._num = 0;
|
||||||
|
}
|
||||||
|
private long _num;
|
||||||
|
public long num
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _num;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_num != value)
|
||||||
|
{
|
||||||
|
_num = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _name;
|
||||||
|
public string name
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_name != value)
|
||||||
|
{
|
||||||
|
_name = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,17 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
class TProduct : Tables
|
class TProduct : Tables
|
||||||
{
|
{
|
||||||
|
public TProduct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public TProduct(int id, long barcode, string name, int cost, bool iscommand)
|
||||||
|
{
|
||||||
|
this._id = id;
|
||||||
|
this._barcode = barcode;
|
||||||
|
this._name = name;
|
||||||
|
this._cost = cost;
|
||||||
|
this._iscommand = iscommand;
|
||||||
|
}
|
||||||
private int _id;
|
private int _id;
|
||||||
public int id
|
public int id
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,19 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
class TUser : Tables
|
class TUser : Tables
|
||||||
{
|
{
|
||||||
|
public TUser()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public TUser(int id, long userid, string username, int credits, bool admin, string shortname, string email)
|
||||||
|
{
|
||||||
|
this._id = id;
|
||||||
|
this._userid = userid;
|
||||||
|
this._username = username;
|
||||||
|
this._credits = credits;
|
||||||
|
this._admin = admin;
|
||||||
|
this._shortname = shortname;
|
||||||
|
this._email = email;
|
||||||
|
}
|
||||||
private int _id;
|
private int _id;
|
||||||
public int id
|
public int id
|
||||||
{
|
{
|
||||||
|
@ -14,9 +14,13 @@ namespace Matomat
|
|||||||
public TUser getUserTable(long userid)
|
public TUser getUserTable(long userid)
|
||||||
{
|
{
|
||||||
Database db = Factory.getDBO();
|
Database db = Factory.getDBO();
|
||||||
db.query("SELECT * FROM `user` WHERE `userid` =" + db.quote(userid.ToString()));
|
db.query("SELECT `id`, `userid`, `username`, `credits`, `admin`, `shortname`, `email` FROM `user` WHERE `userid` =" + db.quote(userid.ToString()));
|
||||||
object[] row = db.getResult();
|
object[] row = db.getResult();
|
||||||
return new TUser();
|
if (row == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new TUser((int)row[0], (long)row[1], (string)row[2], (int)row[3], (bool)row[4], (string)row[5], (string)row[6]);
|
||||||
}
|
}
|
||||||
public TProduct getProdTable(int id)
|
public TProduct getProdTable(int id)
|
||||||
{
|
{
|
||||||
@ -31,13 +35,44 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
TProduct ret = new TProduct();
|
return new TProduct((int)row[0], (long)row[1], (string)row[2], (int)row[3], (bool)row[4]);
|
||||||
ret.id = (int)row[0];
|
}
|
||||||
ret.barcode = (long)row[1];
|
|
||||||
ret.name = (string)row[2];
|
internal List<TBest> getBestlist()
|
||||||
ret.cost = (int)row[3];
|
{
|
||||||
ret.iscommand = (bool)row[4];
|
Database db = Factory.getDBO();
|
||||||
|
db.query("SELECT COUNT(*) AS `num`,`u`.`shortname` AS `name` "+
|
||||||
|
"FROM `history` AS `h` "+
|
||||||
|
"LEFT JOIN `product` AS `p` ON `p`.`id` = `h`.`prod` "+
|
||||||
|
"LEFT JOIN `user` AS `u` ON `u`.`id` = `h`.`user` "+
|
||||||
|
"WHERE `p`.`iscommand` = 0 GROUP BY `h`.`user` ORDER BY `num` DESC LIMIT 0,4");
|
||||||
|
List<object[]> rows = db.getResultList();
|
||||||
|
if (rows == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<TBest> ret = new List<TBest>();
|
||||||
|
foreach (object[] row in rows)
|
||||||
|
{
|
||||||
|
ret.Add(new TBest((long)row[0], (string)row[1]));
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal TBest getUserMax(int p)
|
||||||
|
{
|
||||||
|
Database db = Factory.getDBO();
|
||||||
|
db.query("SELECT SUM(`p`.`cost`) AS `num`,`u`.`shortname` AS `name` "+
|
||||||
|
"FROM `history` AS `h` "+
|
||||||
|
"LEFT JOIN `product` AS `p` ON `p`.`id` = `h`.`prod` "+
|
||||||
|
"LEFT JOIN `user` AS `u` ON `u`.`id` = `h`.`user` "+
|
||||||
|
"WHERE `p`.`iscommand` = 0 AND `h`.`user` = " + db.quote(p.ToString()));
|
||||||
|
object[] row = db.getResult();
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new TBest(Decimal.ToInt64((decimal)row[0]), (string)row[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,12 @@ namespace Matomat
|
|||||||
{
|
{
|
||||||
private long userId;
|
private long userId;
|
||||||
private bool found;
|
private bool found;
|
||||||
|
private string username;
|
||||||
|
private string shrotname;
|
||||||
|
private int credits;
|
||||||
|
private long all;
|
||||||
|
private bool admin;
|
||||||
|
private int id;
|
||||||
|
|
||||||
public User(long userId)
|
public User(long userId)
|
||||||
{
|
{
|
||||||
@ -24,7 +30,13 @@ namespace Matomat
|
|||||||
this.found = false;
|
this.found = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
TBest b = new Tables().getUserMax(u.id);
|
||||||
this.found = true;
|
this.found = true;
|
||||||
|
this.shrotname = u.shortname;
|
||||||
|
this.credits = u.credits;
|
||||||
|
this.all = b.num;
|
||||||
|
this.admin = u.admin;
|
||||||
|
this.id = u.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool vaild()
|
internal bool vaild()
|
||||||
@ -32,7 +44,10 @@ namespace Matomat
|
|||||||
LCDDisplay lcd = Factory.getLCDDisplay();
|
LCDDisplay lcd = Factory.getLCDDisplay();
|
||||||
if (!found)
|
if (!found)
|
||||||
{
|
{
|
||||||
lcd.print("User wurde nich gefunden",LCDDisplay.Status.Error,5);
|
lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
|
"² User wurde nicht gefunden ²" +
|
||||||
|
"² UserID: " + (this.GetUserId().ToString() + " unbekannt").PadRight(28, ' ') + " ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²", LCDDisplay.Status.Error, 5);
|
||||||
System.Threading.Thread.Sleep(4500);
|
System.Threading.Thread.Sleep(4500);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -42,12 +57,12 @@ namespace Matomat
|
|||||||
|
|
||||||
internal string GetUserName()
|
internal string GetUserName()
|
||||||
{
|
{
|
||||||
return "pschel2s";
|
return this.shrotname;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int GetUserKonto()
|
internal int GetUserKonto()
|
||||||
{
|
{
|
||||||
return 20;
|
return this.credits;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal long GetUserId()
|
internal long GetUserId()
|
||||||
@ -55,9 +70,22 @@ namespace Matomat
|
|||||||
return this.userId;
|
return this.userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int GetUserAll()
|
internal long GetUserAll()
|
||||||
{
|
{
|
||||||
return 35;
|
return this.all;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal bool IsAdmin()
|
||||||
|
{
|
||||||
|
return this.admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void SetUserKonto(int p)
|
||||||
|
{
|
||||||
|
Database db = Factory.getDBO();
|
||||||
|
this.credits = p;
|
||||||
|
db.query("UPDATE `user` SET `credits` = '" + db.quote(p.ToString())+"' WHERE "+
|
||||||
|
"`id` = '"+db.quote(this.id.ToString())+"'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,8 +31,12 @@ namespace Matomat
|
|||||||
InputData input = inp.getAnyInput(0);
|
InputData input = inp.getAnyInput(0);
|
||||||
automat.doJob(input);
|
automat.doJob(input);
|
||||||
}
|
}
|
||||||
lcd.print("Matomat Beendet!");
|
this.lcd.print("²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²" +
|
||||||
lcd.RequestStop();
|
"² Der Matomat wurde beendet. ²" +
|
||||||
|
"² Einen schönen Tag! ²" +
|
||||||
|
"²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²");
|
||||||
|
Factory.rmLCDDisplay();
|
||||||
|
Factory.rmDBO();
|
||||||
}
|
}
|
||||||
private void RequestStop(bool stop)
|
private void RequestStop(bool stop)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user