View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either//version 2.1 of the License, or (at your option) any later version.
8   //
9   //This library is distributed in the hope that it will be useful,
10  //but WITHOUT ANY WARRANTY; without even the implied warranty of
11  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  //Lesser General Public License for more details.
13  //
14  //You should have received a copy of the GNU Lesser General Public
15  //License along with this library; if not, write to the Free Software
16  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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      /* ----- Konstruktoren / Destruktoren ----- */
56  
57      /***
58       * Standardkonstruktor der nicht zug&auml;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      /* ----- Thread Methode ----- */
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                 //              ArrayList mit den allgemeinen Voreinstellungen
144                 ArrayList allgemein = (ArrayList) div.sucheKombination_Gruppierung(projektnummer, Constants.VG_VOREINSTELLUNGENALLGEMEIN_KEY);
145                 //              ArrayList mit dem zu vorherigen Quartal
146                 ArrayList aktuellesquartalminus1 = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, quartal);
147                 //              ArrayList mit dem zu berechnenden Quartal
148                 ArrayList aktuellesquartal = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, new Integer(quartal.intValue() + 1));
149 
150                 //              Tabellen f&uuml;r die Voreinstellungen bezgl. Rahmenwerte
151                 ArrayList produktArtAbhaengigkeitenTabelle = ErstelleDatentabellen.ProduktArtAbhaengigkeitenTabelle(projektnummer);
152                 ArrayList qualitaetssicherungTabelle = ErstelleDatentabellen.QualitaetssicherungTabelle(projektnummer);
153 
154                 if ((quartal.intValue() + 1) > 0)
155                 {
156                     //                  Erfolg vor Steuern Bewertung
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                     //                  Umsatzerlöse Bewertung
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                     //                  Grenzgewinn Bewertung
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                     //                  Forschung und Entwicklung Bewertung
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                     //                  Schätzfehler absetzbare Menge Bewertung
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                     //                  Defizit und Lagerbildung Bewertung
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                     //                  Herstellkosten Bewertung
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                     //                  Kapazitätsbestand im Folgequartal Vor-Quartal
229                     wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENKAPAZITAETSBESTANDFOLGEQUARTAL_KEY);
230                     Double kapazitaetsbestandImFolgequartalVQ = (Double) wert1.getObjectWert();
231 
232                     //                  Rohstoffwert am Quartalsende Vor-Quartal
233                     wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENROHSTOFFWERTQUARTALSENDE_KEY);
234                     Double rohstoffwertAmQuartalsendeVQ = (Double) wert1.getObjectWert();
235 
236                     //                  Produzierte Produktart
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                     //                  Produzierte Stufe
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                     //                  Fertigungszeit
267                     Double fertigungszeit = new Double(produzierteStufe.getFertigungszeit());
268                     if (log.isDebugEnabled())
269                     {
270                         log.debug(" Fertigungszeit : '" + fertigungszeit.toString() + "'");
271                     }
272 
273                     //                  Rohstoffverbrauch
274                     Double rohstoffverbrauch = new Double(produzierteStufe.getRohstoffverbrauch());
275                     if (log.isDebugEnabled())
276                     {
277                         log.debug(" Rohstoffverbrauch : '" + rohstoffverbrauch.toString() + "'");
278                     }
279 
280                     //                  Kapazitätsauslastung
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                     //                  Basis-Lohnkosten
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                     //                  Überstundenzuschlag
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                     //                  Nacharbeitsaufwand
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                     //                  Lohnerhöhungsindex
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                     //                  Inflationsindex
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                     //                  Qualitaetssicherung Nominal (OUTDATED WEGEN QSO BENUTZUNG)
329                     //                    wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGQUALITAETSSICHERUNG_KEY);
330                     //                    Double qualitaetssicherungNominal = (Double) wert1.getObjectWert();
331                     //                    if (log.isDebugEnabled())
332                     //                    {
333                     //                        log.debug(" Qualitaetssicherung Nominal : '" + qualitaetssicherungNominal.toString() + "'");
334                     //                    }
335 
336                     //                  Qualitaetssicherung Nominal (QS-Kosten Optimum)
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                     //                  Qualitaetssicherung Optimal
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                     //                  Qualitaetssicherung Normal (OUTDATED WEGEN QSO BENUTZUNG)
366                     //                    Double qualitaetssicherungNormal = new Double(Produktion.qualitaetssicherungNormal(guteProduktionsmenge.doubleValue(), kapazitaetsauslastung.doubleValue(), kapazitaetsbestandImFolgequartalVQ.doubleValue(), fertigungszeit.doubleValue(), basislohnkosten.doubleValue(), lohnerhoehungsindex.doubleValue(), rohstoffverbrauch.doubleValue(), rohstoffwertAmQuartalsendeVQ.doubleValue(), inflationsindex.doubleValue(), ueberstundenzuschlag.doubleValue(), nacharbeitsaufwand.doubleValue(), qualitaetssicherungNominal.doubleValue(), qualitaetssicherungTabelle));
367                     //                    if (log.isDebugEnabled())
368                     //                    {
369                     //                        log.debug(" Qualitaetssicherung Normal : '" + qualitaetssicherungNormal.toString() + "'");
370                     //                    }
371 
372                     //                  Qualitaetssicherung Normal (QS-Kosten Optimum)
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                     //                  Schätzfehler Qualitätskosten (OUTDATED WEGEN QSO BENUTZUNG)
395                     //                    wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_BEWERTUNGSUEBERBLICKOPTIMALEQSVSQSKOSTENMINIMIERENDENOMINALEQS_KEY);
396                     //                    Double schaetzfehlerQualitaetskostenB = new Double(Vertrieb.schaetzfehlerQualitaetssicherung(qualitaetssicherungNominal.doubleValue(), qualitaetssicherungOptimal.doubleValue(), guteProduktionsmenge.doubleValue()));
397                     //                    wert1.setObjectWert(schaetzfehlerQualitaetskostenB);
398                     //                    CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
399 
400                     //                  Schätzfehler QualitätskostenQSO
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                     //                  Schätzfehler Grenzgewinn
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                     //                  Schätzfehler Kapazitätsauslastung
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                     //                  Zuviel bezahlte Zinsen
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                     //                  Bankdarlehen Vor-Quartal
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                     //                  Kontokorrentkredit Vor-Quartal
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                     //                  Optimale Änderung Bankdarlehen
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                     //                  Optimale Änderung Kontokorrentkredit
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                     //                  Unnötige Zinsbelastung
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                     //                  Schätzfehler Zahlungsmitteländerung
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                     //                  DURCHSCHNITTSWERTE
487                     //                  Erfolg vor Steuern Bewertung Durchschnitt
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                     //                  Erfolg vor Steuern Bewertung GEWICHTET
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                     //                  Umsatzerlöse Bewertung Durchschnitt
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                     //                  Grenzgewinn Bewertung Durchschnitt
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                     //                  Forschung und Entwicklung Bewertung Durchschnitt
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                     //                  Schätzfehler absetzbare Menge Bewertung Durchschnitt
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                     //                  Defizit und Lagerbildung Bewertung Durchschnitt
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                     //                  Herstellkosten Bewertung Durchschnitt
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                     //                  Schätzfehler QualitätskostenQSO Durchschnitt
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                     //                  Schätzfehler Grenzgewinn Durchschnitt
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                     //                  Schätzfehler Kapazitätsauslastung Durchschnitt
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                     //                  Unnötige Zinsbelastung Durchschnitt
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                     //                  Schätzfehler Zahlungsmitteländerung Durchschnitt
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                 // Inkrementiere Semaphore, Warte auf Freigabe, Vater wartet bis semaphor == Threadcount - 1
709                 lock.incrementSemaphore();
710                 // Warte auf NotifyAll bzw 60 Minuten.
711                 lock.wait(3600000);
712                 // Dekrementiere Semaphore, Arbeite weiter
713                 lock.decrementSemaphore();
714 
715                 if (log.isDebugEnabled())
716                 {
717                     log.debug(" FINALIZING THREAD. " + getName());
718                 }
719 
720                 // Dekrementiere FinishSemaphore, ICH BIN FERTIG
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     /* ----- SET und GET Methoden ----- */
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 }