Guest User

Untitled

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