1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.fhw.cabaweb.calculation.threads;
20
21 import java.util.ArrayList;
22
23 import org.apache.commons.logging.Log;
24 import org.apache.commons.logging.LogFactory;
25 import org.fhw.cabaweb.calculation.ErstelleDatentabellen;
26 import org.fhw.cabaweb.calculation.common.CommonCalculation;
27 import org.fhw.cabaweb.data.DataInterfaceErgebnissdaten;
28 import org.fhw.cabaweb.data.DataInterfaceVoreinstellungen;
29 import org.fhw.cabaweb.data.constants.Constants;
30 import org.fhw.cabaweb.data.dataobjects.Ergebniss;
31 import org.fhw.cabaweb.data.dataobjects.ProduktartAbhaengigkeiten;
32 import org.fhw.cabaweb.data.dataobjects.Voreinstellung;
33 import org.fhw.cabaweb.math.Produktion;
34 import org.fhw.cabaweb.math.Vertrieb;
35
36 /***
37 * Die Klasse berechnet die Bewertung der Unternehmen.
38 *
39 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
40 * @version Version 1.0 26.08.2004
41 */
42 public final class BerechneBewertung extends Thread
43 {
44 /*** Commons Logging Instanz */
45 private Log log = LogFactory.getLog("org.fhw.cabaweb.calculation.threads.BerechneBewertung");
46 /*** Das LOCK Objekt */
47 private Lock lock;
48 /*** Die Projektnummer */
49 private Integer projektnummer;
50 /*** Die Gruppennummer */
51 private Integer gruppennummer;
52 /*** Das Quartal */
53 private Integer quartal;
54
55
56
57 /***
58 * Standardkonstruktor der nicht zugänglich sein soll
59 */
60 private BerechneBewertung()
61 {
62 log.error("!!! DEFAULT CONSTRUCTOR NOT TO BE USED !!!");
63 }
64
65 /***
66 * Standardkonstruktor der das "Lock" Objekt übergeben bekommt
67 *
68 * @param lock Das Lock Objekt
69 */
70 public BerechneBewertung(Lock lock)
71 {
72 this.lock = lock;
73 }
74
75 /***
76 * Standardkonstruktor der das "Lock" Objekt übergeben bekommt
77 * Zusätzlich auch noch die nötigen Parameter
78 *
79 * @param lock Das Lock Objekt
80 * @param projektnummer Die Projektnummer
81 * @param gruppennummer Die Gruppennummer
82 * @param quartal Das Quartal
83 */
84 public BerechneBewertung(Lock lock, Integer projektnummer, Integer gruppennummer, Integer quartal)
85 {
86 this.lock = lock;
87 this.projektnummer = projektnummer;
88 this.gruppennummer = gruppennummer;
89 this.quartal = quartal;
90 }
91
92
93
94 /***
95 * Methode die beim Start des Threads ausgeführt wird
96 *
97 * Aufruf:
98 *
99 * Object lock = new Object ();
100 * BerechneBewertung mt1 = new BerechneBewertung(lock, PROJEKTNUMMER, GRUPPENNUMMER, QUARTAL);
101 * mt1.setName ("Name XYZ");
102 * // DEFAULT PRIORITY IS 5, MIN(IDLE) = 1, MAX(REALTIME) = 10
103 * mt1.setPriority(5);
104 * mt1.start();
105 *
106 * while(Thread.activeCount() > 1)
107 * {
108 * synchronized (lock)
109 * {
110 * try
111 * {
112 * lock.wait();
113 * }
114 * catch (Exception e)
115 * {
116 * // Error Handling
117 * }
118 * }
119 * }
120 */
121 public synchronized void run()
122 {
123 if (lock != null && projektnummer != null && gruppennummer != null && quartal != null)
124 {
125 if (log.isDebugEnabled())
126 {
127 log.debug(" THREAD NAME : " + getName());
128 log.debug(" THREAD PRIO : " + getPriority());
129 log.debug(" (S) Start der Verarbeitung \"BerechneBewertung\" fuer Gruppe \"" + gruppennummer + "\", Quartal \"" + quartal + "\" THREAD NAME : " + getName());
130 }
131
132 try
133 {
134 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
135 DataInterfaceErgebnissdaten die = new DataInterfaceErgebnissdaten();
136 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
137 DataInterfaceVoreinstellungen div = new DataInterfaceVoreinstellungen();
138
139 Ergebniss wert1 = null;
140 Ergebniss wert2 = null;
141 Voreinstellung voreinstellung1 = null;
142
143
144 ArrayList allgemein = (ArrayList) div.sucheKombination_Gruppierung(projektnummer, Constants.VG_VOREINSTELLUNGENALLGEMEIN_KEY);
145
146 ArrayList aktuellesquartalminus1 = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, quartal);
147
148 ArrayList aktuellesquartal = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, new Integer(quartal.intValue() + 1));
149
150
151 ArrayList produktArtAbhaengigkeitenTabelle = ErstelleDatentabellen.ProduktArtAbhaengigkeitenTabelle(projektnummer);
152 ArrayList qualitaetssicherungTabelle = ErstelleDatentabellen.QualitaetssicherungTabelle(projektnummer);
153
154 if ((quartal.intValue() + 1) > 0)
155 {
156
157 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGERFOLGVORSTEUERN_KEY);
158 Double erfolgVorSteuernB = new Double(((Double) wert1.getObjectWert()).doubleValue() / 1000.0);
159 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKERFOLGVORSTEUERN_KEY);
160 wert2.setObjectWert(erfolgVorSteuernB);
161 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
162
163
164 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGUMSATZERLOESE_KEY);
165 Double umsatzerloeseB = new Double(((Double) wert1.getObjectWert()).doubleValue() / 1000000.0);
166 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKUMSATZERLOESE_KEY);
167 wert2.setObjectWert(umsatzerloeseB);
168 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
169
170
171 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGGRENZGEWINN_KEY);
172 Double grenzgewinnB = (Double) wert1.getObjectWert();
173 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKGRENZGEWINN_KEY);
174 wert2.setObjectWert(grenzgewinnB);
175 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
176
177
178 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGFUNDE_KEY);
179 Double forschungUndEntwicklungB = new Double(((Integer) wert1.getObjectWert()).doubleValue());
180 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKFORSCHUNGUNDENTWICKLUNG_KEY);
181 wert2.setObjectWert(forschungUndEntwicklungB);
182 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
183
184
185 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABSETZBAREMENGE_KEY);
186 Double absetzbareMenge = (Double) wert1.getObjectWert();
187 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGABSETZBAREMENGE_KEY);
188 Double absetzbareMengeENT = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
189 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERABSETZBAREMENGE_KEY);
190 Double schaetzfehlerAbsetzbareMengeB = new Double(0.0);
191 if (absetzbareMenge.doubleValue() > 0.0)
192 {
193 schaetzfehlerAbsetzbareMengeB = new Double(((absetzbareMengeENT.doubleValue() - absetzbareMenge.doubleValue()) / absetzbareMenge.doubleValue()) * 100.0);
194 }
195 else
196 {
197 schaetzfehlerAbsetzbareMengeB = new Double(absetzbareMengeENT.doubleValue() * 100.0);
198 }
199 wert2.setObjectWert(schaetzfehlerAbsetzbareMengeB);
200 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
201
202
203 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABGESETZTEMENGE_KEY);
204 Double abgesetzteMenge = (Double) wert1.getObjectWert();
205 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLIEFERDEFIZIT_KEY);
206 Double lieferdefizit = (Double) wert1.getObjectWert();
207 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLAGERMENGEFERTIGPRODUKTE_KEY);
208 Double lagermenge = (Double) wert1.getObjectWert();
209 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKDEFIZITUNDLAGERBILDUNG_KEY);
210 Double defizitLagerB = new Double(Produktion.defizitUndLagerQuotient(abgesetzteMenge.doubleValue(), absetzbareMenge.doubleValue(), lieferdefizit.doubleValue(), lagermenge.doubleValue()));
211 wert2.setObjectWert(defizitLagerB);
212 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
213
214
215 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGPRODUKTION_KEY);
216 Double produktion = (Double) wert1.getObjectWert();
217 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGBESCHAFFUNG_KEY);
218 Double beschaffung = (Double) wert1.getObjectWert();
219 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGOVERHEAD_KEY);
220 Double overhead = (Double) wert1.getObjectWert();
221 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENGUTEPRODUKTIONSMENGE_KEY);
222 Double guteProduktionsmenge = (Double) wert1.getObjectWert();
223 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKHERSTELLKOSTEN_KEY);
224 Double herstellkostenB = new Double(Produktion.herstellKostenBewertung(produktion.doubleValue(), beschaffung.doubleValue(), overhead.doubleValue(), guteProduktionsmenge.doubleValue()));
225 wert2.setObjectWert(herstellkostenB);
226 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
227
228
229 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENKAPAZITAETSBESTANDFOLGEQUARTAL_KEY);
230 Double kapazitaetsbestandImFolgequartalVQ = (Double) wert1.getObjectWert();
231
232
233 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFWERTQUARTALSENDE_KEY);
234 Double rohstoffwertAmQuartalsendeVQ = (Double) wert1.getObjectWert();
235
236
237 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENPRODUZIERTEPRODUKTART_KEY);
238 Integer produzierteProduktart = (Integer) wert1.getObjectWert();
239 if (log.isDebugEnabled())
240 {
241 log.debug(" Produzierte Produktart : '" + produzierteProduktart.toString() + "'");
242 }
243
244
245 ProduktartAbhaengigkeiten produzierteStufe = null;
246 for (int i = 0; i < produktArtAbhaengigkeitenTabelle.size(); i++)
247 {
248 produzierteStufe = (ProduktartAbhaengigkeiten) produktArtAbhaengigkeitenTabelle.get(i);
249
250 if (produzierteStufe.getProduktart() == produzierteProduktart.intValue())
251 {
252 break;
253 }
254 else
255 {
256 produzierteStufe = null;
257 }
258
259 }
260
261 if (produzierteStufe == null)
262 {
263 log.error(" Produzierte Stufe nicht gefunden !!!");
264 }
265
266
267 Double fertigungszeit = new Double(produzierteStufe.getFertigungszeit());
268 if (log.isDebugEnabled())
269 {
270 log.debug(" Fertigungszeit : '" + fertigungszeit.toString() + "'");
271 }
272
273
274 Double rohstoffverbrauch = new Double(produzierteStufe.getRohstoffverbrauch());
275 if (log.isDebugEnabled())
276 {
277 log.debug(" Rohstoffverbrauch : '" + rohstoffverbrauch.toString() + "'");
278 }
279
280
281 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKAPAZITAETSAUSLASTUNG_KEY);
282 Double kapazitaetsauslastung = (Double) wert1.getObjectWert();
283 if (log.isDebugEnabled())
284 {
285 log.debug(" Kapazitätsauslastung : '" + kapazitaetsauslastung.toString() + "'");
286 }
287
288
289 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENBASISLOHNKOSTEN_KEY);
290 Double basislohnkosten = (Double) voreinstellung1.getWertObject();
291 if (log.isDebugEnabled())
292 {
293 log.debug(" Basis-Lohnkosten : '" + basislohnkosten.toString() + "'");
294 }
295
296
297 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENUEBERSTUNDENZUSCHLAG_KEY);
298 Double ueberstundenzuschlag = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
299 if (log.isDebugEnabled())
300 {
301 log.debug(" Überstundenzuschlag : '" + ueberstundenzuschlag.toString() + "'");
302 }
303
304
305 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENNACHARBEITSAUFWAND_KEY);
306 Double nacharbeitsaufwand = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
307 if (log.isDebugEnabled())
308 {
309 log.debug(" Nacharbeitsaufwand : '" + nacharbeitsaufwand.toString() + "'");
310 }
311
312
313 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLOHNERHOEHUNGSINDEX_KEY);
314 Double lohnerhoehungsindex = (Double) wert1.getObjectWert();
315 if (log.isDebugEnabled())
316 {
317 log.debug(" Lohnerhöhungsindex : '" + lohnerhoehungsindex.toString() + "'");
318 }
319
320
321 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENINFLATIONSINDEX_KEY);
322 Double inflationsindex = (Double) wert1.getObjectWert();
323 if (log.isDebugEnabled())
324 {
325 log.debug(" Inflationsindex : '" + inflationsindex.toString() + "'");
326 }
327
328
329
330
331
332
333
334
335
336
337 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGQSKOSTENMINIMUM_KEY);
338 Double qualitaetssicherungNominalQSO = (Double) wert1.getObjectWert();
339 if (log.isDebugEnabled())
340 {
341 log.debug(" Qualitaetssicherung Nominal (QS-Kosten Optimum) : '" + qualitaetssicherungNominalQSO.toString() + "'");
342 }
343
344
345 Double qualitaetssicherungOptimal =
346 new Double(
347 Produktion.qualitaetssicherungOptimal(
348 guteProduktionsmenge.doubleValue(),
349 kapazitaetsauslastung.doubleValue(),
350 kapazitaetsbestandImFolgequartalVQ.doubleValue(),
351 fertigungszeit.doubleValue(),
352 basislohnkosten.doubleValue(),
353 lohnerhoehungsindex.doubleValue(),
354 rohstoffverbrauch.doubleValue(),
355 rohstoffwertAmQuartalsendeVQ.doubleValue(),
356 inflationsindex.doubleValue(),
357 ueberstundenzuschlag.doubleValue(),
358 nacharbeitsaufwand.doubleValue(),
359 qualitaetssicherungTabelle));
360 if (log.isDebugEnabled())
361 {
362 log.debug(" Qualitaetssicherung Optimal : '" + qualitaetssicherungOptimal.toString() + "'");
363 }
364
365
366
367
368
369
370
371
372
373 Double qualitaetssicherungNormalQSO =
374 new Double(
375 Produktion.qualitaetssicherungNormal(
376 guteProduktionsmenge.doubleValue(),
377 kapazitaetsauslastung.doubleValue(),
378 kapazitaetsbestandImFolgequartalVQ.doubleValue(),
379 fertigungszeit.doubleValue(),
380 basislohnkosten.doubleValue(),
381 lohnerhoehungsindex.doubleValue(),
382 rohstoffverbrauch.doubleValue(),
383 rohstoffwertAmQuartalsendeVQ.doubleValue(),
384 inflationsindex.doubleValue(),
385 ueberstundenzuschlag.doubleValue(),
386 nacharbeitsaufwand.doubleValue(),
387 qualitaetssicherungNominalQSO.doubleValue(),
388 qualitaetssicherungTabelle));
389 if (log.isDebugEnabled())
390 {
391 log.debug(" Qualitaetssicherung Normal (QS-Kosten Optimum) : '" + qualitaetssicherungNormalQSO.toString() + "'");
392 }
393
394
395
396
397
398
399
400
401 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKOPTIMALEQSVSQSKOSTENMINIMIERENDENOMINALEQS_KEY);
402 Double schaetzfehlerQualitaetskostenQSOB = new Double(Vertrieb.schaetzfehlerQualitaetssicherung(qualitaetssicherungNominalQSO.doubleValue(), qualitaetssicherungOptimal.doubleValue(), guteProduktionsmenge.doubleValue()));
403 wert1.setObjectWert(schaetzfehlerQualitaetskostenQSOB);
404 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
405
406
407 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGGRENZGEWINN_KEY);
408 Double grenzgwinn = (Double) wert1.getObjectWert();
409 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKTATSAECHLICHERVSERWARTETERGRENZGEWINN_KEY);
410 Double schaetzfehlerGrenzgewinnB = new Double(grenzgewinnB.doubleValue() - grenzgwinn.doubleValue());
411 wert2.setObjectWert(schaetzfehlerGrenzgewinnB);
412 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
413
414
415 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGKAPAZITAETSAUSLASTUNG_KEY);
416 Double kapazitaetsauslastungENT = (Double) wert1.getObjectWert();
417 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERKAPAZITAETSAUSLASTUNG_KEY);
418 Double schaetzfehlerKapazitaetsauslastungB = new Double(0.0);
419 if (kapazitaetsauslastung.doubleValue() > 0.0)
420 {
421 schaetzfehlerKapazitaetsauslastungB = new Double(((kapazitaetsauslastungENT.doubleValue() - kapazitaetsauslastung.doubleValue()) / kapazitaetsauslastung.doubleValue()) * 100.0);
422 }
423 else
424 {
425 schaetzfehlerKapazitaetsauslastungB = new Double(kapazitaetsauslastungENT.doubleValue() * 100.0);
426 }
427 wert2.setObjectWert(schaetzfehlerKapazitaetsauslastungB);
428 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
429
430
431 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGZUVIELBEZAHLTEZINSEN_KEY);
432 Double zuvielBezahlteZinsen = (Double) wert1.getObjectWert();
433 if (log.isDebugEnabled())
434 {
435 log.debug(" Zuviel bezahlte Zinsen : '" + zuvielBezahlteZinsen.toString() + "'");
436 }
437
438
439 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGBANKDARLEHEN_KEY);
440 Double bankdarlehenVQ = (Double) wert1.getObjectWert();
441 if (log.isDebugEnabled())
442 {
443 log.debug(" Bankdarlehen Vor-Quartal : '" + bankdarlehenVQ.toString() + "'");
444 }
445
446
447 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGKONTOKORRENTKREDIT_KEY);
448 Double kontokorrentkreditVQ = (Double) wert1.getObjectWert();
449 if (log.isDebugEnabled())
450 {
451 log.debug(" Kontokorrentkredit Vor-Quartal : '" + kontokorrentkreditVQ.toString() + "'");
452 }
453
454
455 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGOPTIMALEAENDERUNGBANKDARLEHEN_KEY);
456 Double optimaleAenderungBankdarlehen = (Double) wert1.getObjectWert();
457 if (log.isDebugEnabled())
458 {
459 log.debug(" Optimale Änderung Bankdarlehen : '" + optimaleAenderungBankdarlehen.toString() + "'");
460 }
461
462
463 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGOPTIMALEAENDERUNGKONTOKORRENTKREDIT_KEY);
464 Double optimaleAenderungKontokorrentkredit = (Double) wert1.getObjectWert();
465 if (log.isDebugEnabled())
466 {
467 log.debug(" Optimale Änderung Kontokorrentkredit : '" + optimaleAenderungKontokorrentkredit.toString() + "'");
468 }
469
470
471 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKUNNOETIGEZINSBELASTUNG_KEY);
472 Double unnoetigeZinsbelastungB = new Double(Produktion.zinssatzOptimal(zuvielBezahlteZinsen.doubleValue(), bankdarlehenVQ.doubleValue(), kontokorrentkreditVQ.doubleValue(), optimaleAenderungBankdarlehen.doubleValue(), optimaleAenderungKontokorrentkredit.doubleValue()));
473 wert1.setObjectWert(unnoetigeZinsbelastungB);
474 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
475
476
477 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_FINANZIERUNGLIQUIDITAETSAENDERUNG_KEY);
478 Double liquiditaetsaenderung = (Double) wert1.getObjectWert();
479 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGLIQUIDITAETSAENDERUNG_KEY);
480 Double liquiditaetsaenderungENT = new Double(((Integer) wert1.getObjectWert()).doubleValue() * 1000.0);
481 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERZAHLUNGSMITTELAENDERUNG_KEY);
482 Double schaetzfehlerZahlungsmittelaenderungB = new Double((liquiditaetsaenderungENT.doubleValue() - liquiditaetsaenderung.doubleValue()) / 1000.0);
483 wert1.setObjectWert(schaetzfehlerZahlungsmittelaenderungB);
484 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
485
486
487
488 ArrayList werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKERFOLGVORSTEUERN_KEY);
489 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKERFOLGVORSTEUERNDUR_KEY);
490 Double durchschnittswert = new Double(0.0);
491 for (int i = 1; i <= werte.size(); i++)
492 {
493 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
494 durchschnittswert = new Double(durchschnittswert.doubleValue() + ((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue());
495 }
496 if (quartal.intValue() + 1 > 0)
497 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
498 else
499 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
500 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
501
502
503 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKERFOLGVORSTEUERN_KEY);
504 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKERFOLGVORSTEUERNGEW_KEY);
505 durchschnittswert = new Double(0.0);
506 for (int i = 1; i <= werte.size(); i++)
507 {
508 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
509 durchschnittswert = new Double(durchschnittswert.doubleValue() + ((1.0 + ((((Ergebniss) werte.get(i - 1)).getQuartal()).doubleValue() - 1.0) * 0.15)) * ((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue());
510 }
511 if (quartal.intValue() + 1 > 0)
512 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
513 else
514 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
515 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
516
517
518 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKUMSATZERLOESE_KEY);
519 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKUMSATZERLOESEDUR_KEY);
520 durchschnittswert = new Double(0.0);
521 for (int i = 1; i <= werte.size(); i++)
522 {
523 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
524 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
525 }
526 if (quartal.intValue() + 1 > 0)
527 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
528 else
529 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
530 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
531
532
533 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKGRENZGEWINN_KEY);
534 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKGRENZGEWINNDUR_KEY);
535 durchschnittswert = new Double(0.0);
536 for (int i = 1; i <= werte.size(); i++)
537 {
538 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
539 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
540 }
541 if (quartal.intValue() + 1 > 0)
542 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
543 else
544 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
545 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
546
547
548 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKFORSCHUNGUNDENTWICKLUNG_KEY);
549 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKFORSCHUNGUNDENTWICKLUNGDUR_KEY);
550 durchschnittswert = new Double(0.0);
551 for (int i = 1; i <= werte.size(); i++)
552 {
553 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
554 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
555 }
556 if (quartal.intValue() + 1 > 0)
557 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
558 else
559 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
560 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
561
562
563 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERABSETZBAREMENGE_KEY);
564 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERABSETZBAREMENGEDUR_KEY);
565 durchschnittswert = new Double(0.0);
566 for (int i = 1; i <= werte.size(); i++)
567 {
568 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
569 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
570 }
571 if (quartal.intValue() + 1 > 0)
572 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
573 else
574 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
575 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
576
577
578 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKDEFIZITUNDLAGERBILDUNG_KEY);
579 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKDEFIZITUNDLAGERBILDUNGDUR_KEY);
580 durchschnittswert = new Double(0.0);
581 for (int i = 1; i <= werte.size(); i++)
582 {
583 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
584 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
585 }
586 if (quartal.intValue() + 1 > 0)
587 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
588 else
589 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
590 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
591
592
593 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKHERSTELLKOSTEN_KEY);
594 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKHERSTELLKOSTENDUR_KEY);
595 durchschnittswert = new Double(0.0);
596 for (int i = 1; i <= werte.size(); i++)
597 {
598 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
599 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
600 }
601 if (quartal.intValue() + 1 > 0)
602 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
603 else
604 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
605 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
606
607
608 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKOPTIMALEQSVSQSKOSTENMINIMIERENDENOMINALEQS_KEY);
609 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKOPTIMALEQSVSQSKOSTENMINIMIERENDENOMINALEQSDUR_KEY);
610 durchschnittswert = new Double(0.0);
611 for (int i = 1; i <= werte.size(); i++)
612 {
613 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
614 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
615 }
616 if (quartal.intValue() + 1 > 0)
617 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
618 else
619 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
620 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
621
622
623 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKTATSAECHLICHERVSERWARTETERGRENZGEWINN_KEY);
624 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKTATSAECHLICHERVSERWARTETERGRENZGEWINNDUR_KEY);
625 durchschnittswert = new Double(0.0);
626 for (int i = 1; i <= werte.size(); i++)
627 {
628 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
629 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
630 }
631 if (quartal.intValue() + 1 > 0)
632 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
633 else
634 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
635 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
636
637
638 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERKAPAZITAETSAUSLASTUNG_KEY);
639 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERKAPAZITAETSAUSLASTUNGDUR_KEY);
640 durchschnittswert = new Double(0.0);
641 for (int i = 1; i <= werte.size(); i++)
642 {
643 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
644 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
645 }
646 if (quartal.intValue() + 1 > 0)
647 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
648 else
649 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
650 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
651
652
653 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKUNNOETIGEZINSBELASTUNG_KEY);
654 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKUNNOETIGEZINSBELASTUNGDUR_KEY);
655 durchschnittswert = new Double(0.0);
656 for (int i = 1; i <= werte.size(); i++)
657 {
658 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
659 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
660 }
661 if (quartal.intValue() + 1 > 0)
662 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
663 else
664 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
665 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
666
667
668 werte = (ArrayList) die.sucheGruppe_Feld(projektnummer, gruppennummer, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERZAHLUNGSMITTELAENDERUNG_KEY);
669 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKSCHAETZFEHLERZAHLUNGSMITTELAENDERUNGDUR_KEY);
670 durchschnittswert = new Double(0.0);
671 for (int i = 1; i <= werte.size(); i++)
672 {
673 if (((Ergebniss) werte.get(i - 1)).getQuartal().intValue() > 0 && ((Ergebniss) werte.get(i - 1)).getObjectWert() != null)
674 durchschnittswert = new Double(durchschnittswert.doubleValue() + Math.abs(((Double) ((Ergebniss) werte.get(i - 1)).getObjectWert()).doubleValue()));
675 }
676 if (quartal.intValue() + 1 > 0)
677 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / (quartal.doubleValue() + 1.0)));
678 else
679 wert1.setObjectWert(new Double(durchschnittswert.doubleValue() / 1.0));
680 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
681 }
682 }
683 catch (Exception e)
684 {
685 log.error("THREAD NAME : " + getName());
686 log.error(e.getMessage(), e);
687 }
688
689 if (log.isDebugEnabled())
690 {
691 log.debug(" (F) Verarbeitung \"BerechneBewertung\" fuer Gruppe \"" + gruppennummer + "\", Quartal \"" + quartal + "\" abgeschlossen");
692 }
693 }
694 else
695 {
696 log.error(" WICHTIGE DATEN FUER DEN THREAD WURDEN NICHT FESTGELEGT. STOPPE VERARBEITUNG !!! ");
697 }
698
699 synchronized (lock)
700 {
701 try
702 {
703 if (log.isDebugEnabled())
704 {
705 log.debug(" (N) Verstaendige andere Threads, ich bin fertig. THREAD NAME : " + getName());
706 }
707
708
709 lock.incrementSemaphore();
710
711 lock.wait(3600000);
712
713 lock.decrementSemaphore();
714
715 if (log.isDebugEnabled())
716 {
717 log.debug(" FINALIZING THREAD. " + getName());
718 }
719
720
721 lock.decrementFinishSemaphore();
722 }
723 catch (Exception e)
724 {
725 log.error("THREAD NAME : " + getName());
726 log.error(e.getMessage(), e);
727 }
728 }
729 }
730
731
732
733 /***
734 * GET Methode
735 *
736 * @return Gruppennummer
737 */
738 public Integer getGruppennummer()
739 {
740 return gruppennummer;
741 }
742
743 /***
744 * GET Methode
745 *
746 * @return Projektnummer
747 */
748 public Integer getProjektnummer()
749 {
750 return projektnummer;
751 }
752
753 /***
754 * GET Methode
755 *
756 * @return Quartal
757 */
758 public Integer getQuartal()
759 {
760 return quartal;
761 }
762
763 /***
764 * SET Methode
765 *
766 * @param gruppennummer Die Gruppennummer
767 */
768 public void setGruppennummer(Integer gruppennummer)
769 {
770 this.gruppennummer = gruppennummer;
771 }
772
773 /***
774 * SET Methode
775 *
776 * @param projektnummer Die Projektnummer
777 */
778 public void setProjektnummer(Integer projektnummer)
779 {
780 this.projektnummer = projektnummer;
781 }
782
783 /***
784 * SET Methode
785 *
786 * @param quartal Das Quartal
787 */
788 public void setQuartal(Integer quartal)
789 {
790 this.quartal = quartal;
791 }
792 }