Guest User

Untitled

a guest
Jul 22nd, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.75 KB | None | 0 0
  1. package db;
  2.  
  3. import java.sql.*;
  4. import java.util.Vector;
  5.  
  6.  
  7. public class BestellTransaktionen {
  8.  
  9. private Connection conn;
  10.  
  11. public BestellTransaktionen() {
  12. try {
  13. DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
  14. this.conn = DriverManager.getConnection("jdbc:oracle:thin:@flores.dbs.ifi.lmu.de:1521:dbprakt","spanner","");
  15. //this.neueBestellung("11.01.10");
  16. //this.bestellpositionEinfuegen(37971, 10, 1244);
  17. //this.bestelltextEinfuegen("Bestellung f�r Cospa", 37971);
  18. //this.positionstextEinfuegen("Erste Position", 1, 37971);
  19. //this.bestellungSpeichern(37971);
  20. //this.bestellungBestaetigen(37971);
  21. //this.bestellungVerwerfen(37971);
  22. this.bestellungBeliefern(37971);
  23. } catch (SQLException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. /**
  29. * Diese Prozedur legt eine neue Bestellung an mit dem eingegebenen Bestelltermin
  30. *
  31. * @param bestelltermin
  32. */
  33. public void neueBestellung(String bestelltermin) {
  34. int bstid = 0;
  35. try {
  36. Statement stmt = this.conn.createStatement();
  37. // Check ob das Eingabedatum wirklich ein Datum ist
  38. // TODO Ist das wirklich die �berpr�fung ob ein richtiges Datum eingegeben wurde?
  39. try {
  40. stmt.executeQuery("select * from bestellung where to_char(bestelltermin, 'dd.mm.yy') = '" + bestelltermin + "'");
  41. } catch (Exception e) {
  42. System.out.println("fehlerhaftes Datum! ");
  43. }
  44.  
  45. // Testen ob das Datum in der Zukunft ist mit der Hilfsfunktion vgl_datum (in pl sql)
  46. // TODO Bestellung wird trotzdem eingef�gt
  47. ResultSet rsZukDatum = stmt.executeQuery("select vgl_datum('"+ bestelltermin + "') from dual");
  48. rsZukDatum.next();
  49. int zukDatum = rsZukDatum.getInt(1);
  50. rsZukDatum.close();
  51. if (zukDatum == 0) {
  52. System.out.println("Datum nicht in der Zukunft! ");
  53. }
  54.  
  55. System.out.println("Bestelltermin: " + bestelltermin);
  56.  
  57. // N�chste eindeutige bstid erzeugen lassen
  58. bstid = this.createBSTID();
  59. System.out.println("BestellID: " + bstid);
  60. stmt.executeQuery("insert into Bestellung (Bstid, Bestelltermin) values(" + bstid + ",'" + bestelltermin + "')");
  61. stmt.close();
  62. this.conn.close();
  63.  
  64. } catch (SQLException evt) {
  65. evt.printStackTrace();
  66. }
  67. }
  68.  
  69. /**
  70. * Erzeugt eine Sequence f�r die BestellID
  71. * Sequence wird am Schluss wieder gel�scht
  72. *
  73. * @return bstid BestellID
  74. */
  75. public int createBSTID() {
  76. int maxId = 0;
  77. int bstid = 0;
  78. try {
  79. Statement stmt = this.conn.createStatement();
  80. // H�chste BSTID herausfinden, BSTID+1 in maxId speichern
  81. ResultSet rsMaxId = stmt.executeQuery("select max(bstid) from bestellung");
  82. rsMaxId.next();
  83. maxId = rsMaxId.getInt(1) + 1;
  84. rsMaxId.close();
  85. // Sequence erzeugen, beginnt bei h�chster BSTID+1
  86. stmt.executeUpdate("create sequence bstid_seq increment by " + 1 + " start with " + maxId);
  87. // N�chste BSTID holen, in BSTID speichern
  88. ResultSet rs = stmt.executeQuery("select bstid_seq.nextval from dual");
  89. rs.next();
  90. bstid = rs.getInt(1);
  91. rs.close();
  92. // Sequence l�schen
  93. stmt.executeUpdate("drop sequence bstid_seq");
  94. stmt.close();
  95. } catch (SQLException e) {
  96. e.printStackTrace();
  97. }
  98. return bstid;
  99. }
  100.  
  101. /**
  102. * F�gt einzelne Positionen der Bestellung zu
  103. *
  104. * @param bstId ID der Bestellung in die eine Position eingef�gt werden soll
  105. * @param bestellMenge
  106. * @param prod ID der Produkts das als Position eingef�gt werden soll
  107. */
  108. public void bestellpositionEinfuegen(int bstId , int bestellMenge, int prod) {
  109. //int p;
  110. double evp; // Einzelverkaufspreis
  111. double preis; // Gesamtpreis
  112. int countPos;
  113. int pos; // Bestellposition
  114. int maxPos; // bisher h�chste Bestellposition in der Bestellung
  115.  
  116. try {
  117. Statement stmt = this.conn.createStatement();
  118. //testen ob die Bestellmenge > 0 ist:
  119. if (bestellMenge < 0) {
  120. System.out.println("ung�ltige Mengenangabe");
  121. }
  122. //testen ob es diese Produkt ID gibt:
  123. try {
  124. // Herausfinden des Lagers
  125. ResultSet rs = stmt.executeQuery("select produkt from lagert where produkt = " + prod);
  126. rs.next();
  127. int p = rs.getInt(1);
  128. rs.close();
  129. } catch (Exception e) {
  130. System.out.println("Dieses Produkt mit er PID " + prod + " existiert nicht! Bitte neue Eingabe.");
  131. }
  132.  
  133. //Herausfinden des EVP's von prod
  134. ResultSet rsEvp = stmt.executeQuery("select einzelverkaufspreis from produkt where pid = " + prod);
  135. rsEvp.next();
  136. evp = rsEvp.getInt(1);
  137. rsEvp.close();
  138.  
  139. // Preis f�r diese Bestellposition
  140. preis = evp * bestellMenge;
  141. System.out.println("EvPreis: " + evp);
  142. System.out.println("Menge: " + bestellMenge);
  143. System.out.println("Preis: " + preis);
  144.  
  145. //Herausfinden der Bestellposition pos
  146. ResultSet rsCountPos = stmt.executeQuery("select count(posnr) from bestellposition where bstid = " + bstId);
  147. rsCountPos.next();
  148. countPos = rsCountPos.getInt(1);
  149. rsCountPos.close();
  150. //testen ob es schon bestellpositionen zu dieser Bestell ID gibt, sonst pos = 1
  151. if (countPos == 0) {
  152. pos = 1;
  153. System.out.println("es gibt also noch keinen Eintrag in Bestellposition mit dieser Bestell ID");
  154. }
  155. else {
  156. System.out.println("es gibt schon einen Eintrag");
  157. ResultSet rsMaxPos = stmt.executeQuery("select max(posnr) from bestellposition where bstid = " + bstId);
  158. rsMaxPos.next();
  159. maxPos = rsMaxPos.getInt(1);
  160. rsMaxPos.close();
  161. pos = maxPos + 1;
  162. }
  163.  
  164. //einf�gen in Bestellposition
  165. stmt.executeQuery("insert into Bestellposition (posnr, bstid, anzahl, preis, produkt) values (" + pos + "," + bstId + "," + bestellMenge + "," + preis + "," + prod + ")") ;
  166. System.out.println("Eingef�gt");
  167. stmt.close();
  168. this.conn.close();
  169. } catch (SQLException evt) {
  170. evt.printStackTrace();
  171. }
  172. }
  173.  
  174. /**
  175. * F�gt einen Bestelltext in eine Bestellung ein
  176. * @param bestellText
  177. * @param bstId
  178. */
  179. public void bestelltextEinfuegen(String bestellText, int bstId) {
  180. try {
  181. Statement stmt = this.conn.createStatement();
  182. try {
  183. stmt.executeQuery("update bestellung set bestelltext = '" + bestellText + "' where bstid = " + bstId) ;
  184. } catch (Exception e) {
  185. System.out.println("Entweder ung�ltige Bestell ID, oder der Text war zu lang.");
  186. }
  187. System.out.println("Text eingef�gt");
  188. stmt.close();
  189. this.conn.close();
  190. } catch (SQLException evt) {
  191. evt.printStackTrace();
  192. }
  193. }
  194.  
  195. /**
  196. * F�gt Positionstext einer Bestellposition hinzu
  197. * @param posText
  198. * @param posNr
  199. * @param bstId
  200. */
  201. public void positionstextEinfuegen(String posText, int posNr, int bstId) {
  202. try {
  203. Statement stmt = this.conn.createStatement();
  204. try {
  205. stmt.executeQuery("update bestellposition set positionstext = '" + posText + "' where posnr = " + posNr + " and bstid = " + bstId) ;
  206. } catch (Exception e) {
  207. System.out.println("Entweder ung�ltige Positionsnummer oder Bestell ID, oder der Text war zu lang.");
  208. }
  209. System.out.println("Text eingef�gt");
  210. stmt.close();
  211. this.conn.close();
  212. } catch (SQLException evt) {
  213. evt.printStackTrace();
  214. }
  215. }
  216.  
  217. /**
  218. * Setzt den Status der Bestellung auf 'Offen'
  219. * @param bstId
  220. */
  221. public void bestellungSpeichern(int bstId) {
  222. try {
  223. Statement stmt = this.conn.createStatement();
  224. try {
  225. ResultSet rs = stmt.executeQuery("select bstid from bestellung where bstid = " + bstId);
  226. rs.next();
  227. int b = rs.getInt(1);
  228. rs.close();
  229. } catch (Exception e) {
  230. System.out.println("Ung�ltige Bestell ID");
  231. }
  232. stmt.executeQuery("update bestellung set status = 'OFFEN' where bstid = " + bstId) ;
  233. System.out.println("Bestellung gespeichert");
  234. stmt.close();
  235. this.conn.close();
  236. } catch (SQLException evt) {
  237. evt.printStackTrace();
  238. }
  239. }
  240.  
  241. /**
  242. * Setzt den Status der Bestellung auf 'BESTAETIGT' falls Bestelltermin eingehalten werden kann
  243. * @param bstId
  244. */
  245. public void bestellungBestaetigen(int bstId) {
  246. int offen = 0;
  247. try {
  248. Statement stmt = this.conn.createStatement();
  249. try {
  250. ResultSet rs = stmt.executeQuery("select bstid from bestellung where bstid = " + bstId);
  251. rs.next();
  252. int b = rs.getInt(1);
  253. rs.close();
  254. } catch (Exception e) {
  255. e.printStackTrace();
  256. }
  257.  
  258. // Falls m�glich wird Bestellung best�tigt
  259. CallableStatement cstmt = this.conn.prepareCall("{call bestellung_status(?)}");
  260. cstmt.setInt(1,bstId);
  261. cstmt.execute();
  262. System.out.println("Bestellung best�tigt");
  263.  
  264. // Test ob die Bestellung noch immer offen ist -> Bestelltermin kann nicht eingehalten werden
  265. ResultSet status = stmt.executeQuery("select count(*) from bestellung where status = 'OFFEN' and bstid = " + bstId);
  266. status.next();
  267. offen = status.getInt(1);
  268. status.close();
  269. if (offen == 1){
  270. System.out.println("Bestelltermin kann nicht eingehalten werden!");
  271. }
  272.  
  273. stmt.close();
  274. this.conn.close();
  275. } catch (SQLException evt) {
  276. evt.printStackTrace();
  277. }
  278. }
  279.  
  280. /**
  281. * L�scht alle Positionen der Bestellung und die Bestellung selber
  282. * @param bstId
  283. */
  284. public void bestellungVerwerfen(int bstId) {
  285. try {
  286. Statement stmt = this.conn.createStatement();
  287. stmt.executeUpdate("delete from bestellposition where bstid = " + bstId) ;
  288. stmt.executeUpdate("delete from bestellung where bstid = " + bstId) ;
  289. stmt.close();
  290. System.out.println("Bestellung verworfen");
  291. this.conn.close();
  292. } catch (SQLException evt) {
  293. evt.printStackTrace();
  294. }
  295. }
  296.  
  297. /**
  298. * Testet ob Bestelltermin erreicht wurde, wenn ja wird ausgebucht
  299. * @param bstId
  300. */
  301. public void bestellungBeliefern(int bstId) {
  302. String bestellTermin = "";
  303. int zukDatum = 0;
  304. try {
  305. Statement stmt = this.conn.createStatement();
  306.  
  307. //Herausfinden des Bestelltermins
  308. ResultSet rsBstTermin = stmt.executeQuery("select to_char(bestelltermin,'dd.mm.yy') from bestellung where bstid = " + bstId);
  309. rsBstTermin.next();
  310. bestellTermin = rsBstTermin.getString(1);
  311. rsBstTermin.close();
  312.  
  313. //Testen ob der Bestelltermin bereits erreicht wurde
  314. System.out.println("Test ob Termin bereits erreicht");
  315. ResultSet rsZukDatum = stmt.executeQuery("select vgl_datum('" + bestellTermin + "') from dual");
  316. rsZukDatum.next();
  317. zukDatum = rsZukDatum.getInt(1);
  318. rsZukDatum.close();
  319. if (zukDatum == 1) {
  320. System.out.println("Die Bestellung kann noch nicht beliefert werden, da das Bestelldatum noch in der Zukunft liegt!");
  321. }
  322. else {
  323. // ausbuchen
  324. this.ausbuchen(bstId);
  325. }
  326. stmt.close();
  327. this.conn.close();
  328.  
  329. } catch (SQLException evt) {
  330. evt.printStackTrace();
  331. }
  332. }
  333.  
  334. /**
  335. * Bucht Produkte einer Bestellung aus dem Lager aus, aktualisiert Status
  336. * @param bstId
  337. */
  338. public void ausbuchen(int bstId) {
  339. int maxLager = 0; // Lager mit h�chster Nummer
  340. int genug = 0;
  341. Vector<Integer> v1 = new Vector<Integer>();
  342. Vector<Integer> v2 = new Vector<Integer>();
  343. try {
  344. Statement stmt = this.conn.createStatement();
  345. ResultSet rsProd = stmt.executeQuery("select produkt, anzahl from bestellposition where bstid = " + bstId);
  346. while (rsProd.next()) {
  347. // mit Vector arbeiten da auch mehrere Tupel ausgew�hlt werden k�nnen
  348. v1.add(new Integer(rsProd.getInt("produkt")));
  349. v1.add(new Integer(rsProd.getInt("anzahl")));
  350. }
  351. rsProd.close();
  352.  
  353. for (int i=0; i<v1.size(); i+=2) {
  354.  
  355. //System.out.println("Produkt: " + (int)v1.elementAt(i));
  356. //System.out.println("Anzahl: " + (int)v1.elementAt(i+1));
  357.  
  358. // H�chstes Lager ermitteln
  359. ResultSet rsMaxLager = stmt.executeQuery("select max(lager) from lagert where produkt = " + (int)v1.elementAt(i));
  360. rsMaxLager.next();
  361. maxLager = rsMaxLager.getInt(1);
  362. rsMaxLager.close();
  363.  
  364. // Ist im h�chsten Lager genug vorhanden?
  365. ResultSet rsGenug = stmt.executeQuery("select anzahl from lagert where lager = " + maxLager + " and produkt =" + (int)v1.elementAt(i));
  366. rsGenug.next();
  367. genug = rsGenug.getInt(1);
  368. rsGenug.close();
  369.  
  370. // wenn ja, ausbuchen
  371. if((int)v1.elementAt(i+1) <= genug) {
  372. stmt.executeQuery("update lagert set anzahl = anzahl - " + (int)v1.elementAt(i+1) + " where lager = " + maxLager + " and produkt = " + (int)v1.elementAt(i));
  373. stmt.executeQuery("update lagert set reserviert = reserviert - " + (int)v1.elementAt(i+1) + " where lager =" + maxLager + " and produkt = " + (int)v1.elementAt(i));
  374. }
  375. // wenn nicht -> von allen Lagern dieses Produkt auf h�chstes Lager umgbuchen und von dort ausgeliefern
  376. // mit Vector arbeiten da auch mehrere Tupel ausgew�hlt werden k�nnen
  377. else {
  378. //System.out.println("Nicht genug in h�chstem Lager -> umbuchen");
  379. ResultSet rs = stmt.executeQuery("select lager, anzahl from lagert where produkt = " + (int)v1.elementAt(i));
  380. while(rs.next()) {
  381. v2.add(new Integer(rs.getInt("lager")));
  382. v2.add(new Integer(rs.getInt("anzahl")));
  383. }
  384. rs.close();
  385. for (int j=0; j<v2.size(); j+=2) {
  386. //System.out.println("Produkt in v2: " + (int)v2.elementAt(i));
  387. //System.out.println("Anzahl in v2: " + (int)v2.elementAt(i+1));
  388. if ((int)v2.elementAt(j) != maxLager) {
  389. //ProduktTransaktionen.bestandUmbuchen((int)v2.elementAt(j), maxLager, prod ,(int)v2.elementAt(j+1));
  390. }
  391. }
  392.  
  393. stmt.executeQuery("update lagert set anzahl = anzahl - " + (int)v1.elementAt(i+1) + " where Lager = " + maxLager + " and produkt = " + (int)v1.elementAt(i));
  394. stmt.executeQuery("update lagert set reserviert = reserviert - " + (int)v1.elementAt(i+1) + " where Lager =" + maxLager + " and produkt = " + (int)v1.elementAt(i));
  395. }
  396.  
  397. }
  398.  
  399. // Stauts aktualisieren
  400. stmt.executeUpdate("update bestellung set status = 'ERLEDIGT' where bstid = " + bstId) ;
  401. stmt.executeUpdate("update bestellung set erledigt_termin = sysdate where bstid = " + bstId) ;
  402. stmt.close();
  403. } catch (SQLException e) {
  404. e.printStackTrace();
  405. }
  406. }
  407.  
  408. public static void main(String[] args) {
  409. new BestellTransaktionen();
  410. }
  411. }
Add Comment
Please, Sign In to add comment