Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package transaktionen;
- import java.sql.*;
- import java.util.Vector;
- public class BestellTransaktionen {
- private Connection conn;
- public BestellTransaktionen(String server, Integer port, String db, String user, String pwd) throws Exception{
- DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
- this.conn = DriverManager.getConnection("jdbc:oracle:thin:@"+server+":"+port+":"+db,user,pwd);
- //this.neueBestellung("11.01.10");
- //this.bestellpositionEinfuegen(37971, 10, 1244);
- //this.bestelltextEinfuegen("Bestellung f�r Cospa", 37971);
- //this.positionstextEinfuegen("Erste Position", 1, 37971);
- //this.bestellungSpeichern(37971);
- //this.bestellungBestaetigen(37971);
- //this.bestellungVerwerfen(37971);
- //this.bestellungBeliefern(37971);
- }
- /**
- * Diese Prozedur legt eine neue Bestellung an mit dem eingegebenen Bestelltermin
- *
- * @param bestelltermin
- */
- public void neueBestellung(String bestelltermin) {
- int bstid = 0;
- try {
- Statement stmt = this.conn.createStatement();
- // Check ob das Eingabedatum wirklich ein Datum ist
- // TODO Ist das wirklich die �berpr�fung ob ein richtiges Datum eingegeben wurde?
- try {
- stmt.executeQuery("select * from bestellung where to_char(bestelltermin, 'dd.mm.yy') = '" + bestelltermin + "'");
- } catch (Exception e) {
- System.out.println("fehlerhaftes Datum! ");
- }
- // Testen ob das Datum in der Zukunft ist mit der Hilfsfunktion vgl_datum (in pl sql)
- // TODO Bestellung wird trotzdem eingef�gt
- ResultSet rsZukDatum = stmt.executeQuery("select vgl_datum('"+ bestelltermin + "') from dual");
- rsZukDatum.next();
- int zukDatum = rsZukDatum.getInt(1);
- rsZukDatum.close();
- if (zukDatum == 0) {
- System.out.println("Datum nicht in der Zukunft! ");
- }
- System.out.println("Bestelltermin: " + bestelltermin);
- // N�chste eindeutige bstid erzeugen lassen
- bstid = this.createBSTID();
- System.out.println("BestellID: " + bstid);
- stmt.executeQuery("insert into Bestellung (Bstid, Bestelltermin) values(" + bstid + ",'" + bestelltermin + "')");
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * Erzeugt eine Sequence f�r die BestellID
- * Sequence wird am Schluss wieder gel�scht
- *
- * @return bstid BestellID
- */
- public int createBSTID() {
- int maxId = 0;
- int bstid = 0;
- try {
- Statement stmt = this.conn.createStatement();
- // H�chste BSTID herausfinden, BSTID+1 in maxId speichern
- ResultSet rsMaxId = stmt.executeQuery("select max(bstid) from bestellung");
- rsMaxId.next();
- maxId = rsMaxId.getInt(1) + 1;
- rsMaxId.close();
- // Sequence erzeugen, beginnt bei h�chster BSTID+1
- stmt.executeUpdate("create sequence bstid_seq increment by " + 1 + " start with " + maxId);
- // N�chste BSTID holen, in BSTID speichern
- ResultSet rs = stmt.executeQuery("select bstid_seq.nextval from dual");
- rs.next();
- bstid = rs.getInt(1);
- rs.close();
- // Sequence l�schen
- stmt.executeUpdate("drop sequence bstid_seq");
- stmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return bstid;
- }
- /**
- * F�gt einzelne Positionen der Bestellung zu
- *
- * @param bstId ID der Bestellung in die eine Position eingef�gt werden soll
- * @param bestellMenge
- * @param prod ID der Produkts das als Position eingef�gt werden soll
- */
- public void bestellpositionEinfuegen(int bstId , int bestellMenge, int prod) {
- //int p;
- double evp; // Einzelverkaufspreis
- double preis; // Gesamtpreis
- int countPos;
- int pos; // Bestellposition
- int maxPos; // bisher h�chste Bestellposition in der Bestellung
- try {
- Statement stmt = this.conn.createStatement();
- //testen ob die Bestellmenge > 0 ist:
- if (bestellMenge < 0) {
- System.out.println("ung�ltige Mengenangabe");
- }
- //testen ob es diese Produkt ID gibt:
- try {
- // Herausfinden des Lagers
- ResultSet rs = stmt.executeQuery("select produkt from lagert where produkt = " + prod);
- rs.next();
- int p = rs.getInt(1);
- rs.close();
- } catch (Exception e) {
- System.out.println("Dieses Produkt mit er PID " + prod + " existiert nicht! Bitte neue Eingabe.");
- }
- //Herausfinden des EVP's von prod
- ResultSet rsEvp = stmt.executeQuery("select einzelverkaufspreis from produkt where pid = " + prod);
- rsEvp.next();
- evp = rsEvp.getInt(1);
- rsEvp.close();
- // Preis f�r diese Bestellposition
- preis = evp * bestellMenge;
- System.out.println("EvPreis: " + evp);
- System.out.println("Menge: " + bestellMenge);
- System.out.println("Preis: " + preis);
- //Herausfinden der Bestellposition pos
- ResultSet rsCountPos = stmt.executeQuery("select count(posnr) from bestellposition where bstid = " + bstId);
- rsCountPos.next();
- countPos = rsCountPos.getInt(1);
- rsCountPos.close();
- //testen ob es schon bestellpositionen zu dieser Bestell ID gibt, sonst pos = 1
- if (countPos == 0) {
- pos = 1;
- System.out.println("es gibt also noch keinen Eintrag in Bestellposition mit dieser Bestell ID");
- }
- else {
- System.out.println("es gibt schon einen Eintrag");
- ResultSet rsMaxPos = stmt.executeQuery("select max(posnr) from bestellposition where bstid = " + bstId);
- rsMaxPos.next();
- maxPos = rsMaxPos.getInt(1);
- rsMaxPos.close();
- pos = maxPos + 1;
- }
- //einf�gen in Bestellposition
- stmt.executeQuery("insert into Bestellposition (posnr, bstid, anzahl, preis, produkt) values (" + pos + "," + bstId + "," + bestellMenge + "," + preis + "," + prod + ")") ;
- System.out.println("Eingef�gt");
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * F�gt einen Bestelltext in eine Bestellung ein
- * @param bestellText
- * @param bstId
- */
- public void bestelltextEinfuegen(String bestellText, int bstId) {
- try {
- Statement stmt = this.conn.createStatement();
- try {
- stmt.executeQuery("update bestellung set bestelltext = '" + bestellText + "' where bstid = " + bstId) ;
- } catch (Exception e) {
- System.out.println("Entweder ung�ltige Bestell ID, oder der Text war zu lang.");
- }
- System.out.println("Text eingef�gt");
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * F�gt Positionstext einer Bestellposition hinzu
- * @param posText
- * @param posNr
- * @param bstId
- */
- public void positionstextEinfuegen(String posText, int posNr, int bstId) {
- try {
- Statement stmt = this.conn.createStatement();
- try {
- stmt.executeQuery("update bestellposition set positionstext = '" + posText + "' where posnr = " + posNr + " and bstid = " + bstId) ;
- } catch (Exception e) {
- System.out.println("Entweder ung�ltige Positionsnummer oder Bestell ID, oder der Text war zu lang.");
- }
- System.out.println("Text eingef�gt");
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * Setzt den Status der Bestellung auf 'Offen'
- * @param bstId
- */
- public void bestellungSpeichern(int bstId) {
- try {
- Statement stmt = this.conn.createStatement();
- try {
- ResultSet rs = stmt.executeQuery("select bstid from bestellung where bstid = " + bstId);
- rs.next();
- int b = rs.getInt(1);
- rs.close();
- } catch (Exception e) {
- System.out.println("Ung�ltige Bestell ID");
- }
- stmt.executeQuery("update bestellung set status = 'OFFEN' where bstid = " + bstId) ;
- System.out.println("Bestellung gespeichert");
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * Setzt den Status der Bestellung auf 'BESTAETIGT' falls Bestelltermin eingehalten werden kann
- * @param bstId
- */
- public void bestellungBestaetigen(int bstId) {
- int offen = 0;
- try {
- Statement stmt = this.conn.createStatement();
- try {
- ResultSet rs = stmt.executeQuery("select bstid from bestellung where bstid = " + bstId);
- rs.next();
- int b = rs.getInt(1);
- rs.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- // Falls m�glich wird Bestellung best�tigt
- CallableStatement cstmt = this.conn.prepareCall("{call bestellung_status(?)}");
- cstmt.setInt(1,bstId);
- cstmt.execute();
- System.out.println("Bestellung best�tigt");
- // Test ob die Bestellung noch immer offen ist -> Bestelltermin kann nicht eingehalten werden
- ResultSet status = stmt.executeQuery("select count(*) from bestellung where status = 'OFFEN' and bstid = " + bstId);
- status.next();
- offen = status.getInt(1);
- status.close();
- if (offen == 1){
- System.out.println("Bestelltermin kann nicht eingehalten werden!");
- }
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * L�scht alle Positionen der Bestellung und die Bestellung selber
- * @param bstId
- */
- public void bestellungVerwerfen(int bstId) {
- try {
- Statement stmt = this.conn.createStatement();
- stmt.executeUpdate("delete from bestellposition where bstid = " + bstId) ;
- stmt.executeUpdate("delete from bestellung where bstid = " + bstId) ;
- stmt.close();
- System.out.println("Bestellung verworfen");
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * Testet ob Bestelltermin erreicht wurde, wenn ja wird ausgebucht
- * @param bstId
- */
- public void bestellungBeliefern(int bstId) {
- String bestellTermin = "";
- int zukDatum = 0;
- try {
- Statement stmt = this.conn.createStatement();
- //Herausfinden des Bestelltermins
- ResultSet rsBstTermin = stmt.executeQuery("select to_char(bestelltermin,'dd.mm.yy') from bestellung where bstid = " + bstId);
- rsBstTermin.next();
- bestellTermin = rsBstTermin.getString(1);
- rsBstTermin.close();
- //Testen ob der Bestelltermin bereits erreicht wurde
- System.out.println("Test ob Termin bereits erreicht");
- ResultSet rsZukDatum = stmt.executeQuery("select vgl_datum('" + bestellTermin + "') from dual");
- rsZukDatum.next();
- zukDatum = rsZukDatum.getInt(1);
- rsZukDatum.close();
- if (zukDatum == 1) {
- System.out.println("Die Bestellung kann noch nicht beliefert werden, da das Bestelldatum noch in der Zukunft liegt!");
- }
- else {
- // ausbuchen
- this.ausbuchen(bstId);
- }
- stmt.close();
- this.conn.close();
- } catch (SQLException evt) {
- evt.printStackTrace();
- }
- }
- /**
- * Bucht Produkte einer Bestellung aus dem Lager aus, aktualisiert Status
- * @param bstId
- */
- public void ausbuchen(int bstId) {
- int maxLager = 0; // Lager mit h�chster Nummer
- int genug = 0;
- Vector<Integer> v1 = new Vector<Integer>();
- Vector<Integer> v2 = new Vector<Integer>();
- try {
- Statement stmt = this.conn.createStatement();
- ResultSet rsProd = stmt.executeQuery("select produkt, anzahl from bestellposition where bstid = " + bstId);
- while (rsProd.next()) {
- // mit Vector arbeiten da auch mehrere Tupel ausgew�hlt werden k�nnen
- v1.add(new Integer(rsProd.getInt("produkt")));
- v1.add(new Integer(rsProd.getInt("anzahl")));
- }
- rsProd.close();
- for (int i=0; i<v1.size(); i+=2) {
- //System.out.println("Produkt: " + (int)v1.elementAt(i));
- //System.out.println("Anzahl: " + (int)v1.elementAt(i+1));
- // H�chstes Lager ermitteln
- ResultSet rsMaxLager = stmt.executeQuery("select max(lager) from lagert where produkt = " + (int)v1.elementAt(i));
- rsMaxLager.next();
- maxLager = rsMaxLager.getInt(1);
- rsMaxLager.close();
- // Ist im h�chsten Lager genug vorhanden?
- ResultSet rsGenug = stmt.executeQuery("select anzahl from lagert where lager = " + maxLager + " and produkt =" + (int)v1.elementAt(i));
- rsGenug.next();
- genug = rsGenug.getInt(1);
- rsGenug.close();
- // wenn ja, ausbuchen
- if((int)v1.elementAt(i+1) <= genug) {
- stmt.executeQuery("update lagert set anzahl = anzahl - " + (int)v1.elementAt(i+1) + " where lager = " + maxLager + " and produkt = " + (int)v1.elementAt(i));
- stmt.executeQuery("update lagert set reserviert = reserviert - " + (int)v1.elementAt(i+1) + " where lager =" + maxLager + " and produkt = " + (int)v1.elementAt(i));
- }
- // wenn nicht -> von allen Lagern dieses Produkt auf h�chstes Lager umgbuchen und von dort ausgeliefern
- // mit Vector arbeiten da auch mehrere Tupel ausgew�hlt werden k�nnen
- else {
- //System.out.println("Nicht genug in h�chstem Lager -> umbuchen");
- ResultSet rs = stmt.executeQuery("select lager, anzahl from lagert where produkt = " + (int)v1.elementAt(i));
- while(rs.next()) {
- v2.add(new Integer(rs.getInt("lager")));
- v2.add(new Integer(rs.getInt("anzahl")));
- }
- rs.close();
- for (int j=0; j<v2.size(); j+=2) {
- //System.out.println("Produkt in v2: " + (int)v2.elementAt(i));
- //System.out.println("Anzahl in v2: " + (int)v2.elementAt(i+1));
- if ((int)v2.elementAt(j) != maxLager) {
- //ProduktTransaktionen.bestandUmbuchen((int)v2.elementAt(j), maxLager, prod ,(int)v2.elementAt(j+1));
- }
- }
- stmt.executeQuery("update lagert set anzahl = anzahl - " + (int)v1.elementAt(i+1) + " where Lager = " + maxLager + " and produkt = " + (int)v1.elementAt(i));
- stmt.executeQuery("update lagert set reserviert = reserviert - " + (int)v1.elementAt(i+1) + " where Lager =" + maxLager + " and produkt = " + (int)v1.elementAt(i));
- }
- }
- // Stauts aktualisieren
- stmt.executeUpdate("update bestellung set status = 'ERLEDIGT' where bstid = " + bstId) ;
- stmt.executeUpdate("update bestellung set erledigt_termin = sysdate where bstid = " + bstId) ;
- stmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
Add Comment
Please, Sign In to add comment