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.Finanzierung;
34 import org.fhw.cabaweb.math.Vertrieb;
35
36 /***
37 * Die Klasse berechnet die Voll- und Grenzkostenwerte der Unternehmen.
38 *
39 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
40 * @version Version 1.0 25.08.2004
41 */
42 public final class BerechneVollUndGrenzkosten extends Thread
43 {
44 /*** Commons Logging Instanz */
45 private Log log = LogFactory.getLog("org.fhw.cabaweb.calculation.threads.BerechneVollUndGrenzkosten");
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 BerechneVollUndGrenzkosten()
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 BerechneVollUndGrenzkosten(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 BerechneVollUndGrenzkosten(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 * BerechneVollUndGrenzkosten mt1 = new BerechneVollUndGrenzkosten(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 \"BerechneVollUndGrenzkosten\" 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 preisAbsatzTabelle = ErstelleDatentabellen.PreisAbsatzTabelle(projektnummer);
153 ArrayList marketingTabelle = ErstelleDatentabellen.MarketingTabelle(projektnummer);
154 ArrayList verwaltungTabelle = ErstelleDatentabellen.VerwaltungTabelle(projektnummer);
155
156
157
158 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGVERKAUFSPREIS_KEY);
159 Double erloesVK = (Double) wert1.getObjectWert();
160 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGERLOES_KEY);
161 wert2.setObjectWert(erloesVK);
162 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
163
164
165
166 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGMARKETINGKOSTEN_KEY);
167 Double marketingkosten = (Double) wert1.getObjectWert();
168 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABGESETZTEMENGE_KEY);
169 Double abgesetzteMenge = (Double) wert1.getObjectWert();
170 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGMARKETING_KEY);
171 Double marketingVK = new Double(Finanzierung.vertriebsKostenMarketing(marketingkosten.doubleValue(), abgesetzteMenge.doubleValue()));
172 wert2.setObjectWert(marketingVK);
173 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
174
175
176
177 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERUNGSKOSTENFERTIGPRODUKTE_KEY);
178 Double lagerungskostenFertigprodukte = (Double) wert1.getObjectWert();
179 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGLAGERUNGVONFERTIGPRODUKTEN_KEY);
180 Double lagerungFertigprodukteVK = new Double(Finanzierung.vertriebsKostenLagerungFertigprodukte(lagerungskostenFertigprodukte.doubleValue(), abgesetzteMenge.doubleValue()));
181 wert2.setObjectWert(lagerungFertigprodukteVK);
182 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
183
184
185
186 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGMARKTFORSCHUNGSKOSTEN_KEY);
187 Double marktforschungskosten = (Double) wert1.getObjectWert();
188 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGBERATUNGSKOSTEN_KEY);
189 Double beratungskosten = (Double) wert1.getObjectWert();
190 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGBERATUNGUNDMARKTFORSCHUNG_KEY);
191 Double beratungUndMarktforschungVK = new Double(Finanzierung.vertriebsKostenBeratungUndMarktforschung(marktforschungskosten.doubleValue(), beratungskosten.doubleValue(), abgesetzteMenge.doubleValue()));
192 wert2.setObjectWert(beratungUndMarktforschungVK);
193 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
194
195
196
197 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGVERTRIEBSKOSTEN_KEY);
198 Double vertriebskostenVK = new Double(Finanzierung.vertriebskosten(marketingVK.doubleValue(), lagerungFertigprodukteVK.doubleValue(), beratungUndMarktforschungVK.doubleValue()));
199 wert1.setObjectWert(vertriebskostenVK);
200 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
201
202
203
204 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGFLKOHNEUEBERSTUNDENUNDNACHARBEIT_KEY);
205 Double flkOhneUeberstundenOhneNacharbeit = (Double) wert1.getObjectWert();
206 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGNACHARBEITSKOSTENOHNEUEBERSTUNDEN_KEY);
207 Double nacharbeitslohnkosten = (Double) wert1.getObjectWert();
208 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENGUTEPRODUKTIONSMENGE_KEY);
209 Double guteProduktionsmenge = (Double) wert1.getObjectWert();
210 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGLOEHNEOHNEUEBERSTUNDENZUSCHLAG_KEY);
211 Double loehneOhneÜberstundenVK = new Double(Finanzierung.herstellEinzelKostenLoehne(flkOhneUeberstundenOhneNacharbeit.doubleValue() + nacharbeitslohnkosten.doubleValue(), guteProduktionsmenge.doubleValue()));
212 wert2.setObjectWert(loehneOhneÜberstundenVK);
213 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
214
215
216
217 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGUEBERSTUNDENZUSCHLAEGEFLKOHNEUEBERSTUNDENUNDNACHARBEIT_KEY);
218 Double ueberstundenzuschlaege = (Double) wert1.getObjectWert();
219 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGUEBERSTUNDENZUSCHLAG_KEY);
220 Double ueberstundenzuschlaegeVK = new Double(Finanzierung.herstellEinzelKostenUeberstunden(ueberstundenzuschlaege.doubleValue(), guteProduktionsmenge.doubleValue()));
221 wert2.setObjectWert(ueberstundenzuschlaegeVK);
222 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
223
224
225
226 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGROHSTOFFVERBRAUCHSKOSTEN_KEY);
227 Double rohstoffverbrauchskosten = (Double) wert1.getObjectWert();
228 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGROHSTOFFE_KEY);
229 Double rohstoffeVK = new Double(Finanzierung.herstellEinzelKostenRohstoffe(rohstoffverbrauchskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
230 wert2.setObjectWert(rohstoffeVK);
231 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
232
233
234
235 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGHERSTELLEINZELKOSTEN_KEY);
236 Double herstellEinzelkostenVK = new Double(Finanzierung.herstellEinzelKosten(loehneOhneÜberstundenVK.doubleValue(), ueberstundenzuschlaegeVK.doubleValue(), rohstoffeVK.doubleValue()));
237 wert1.setObjectWert(herstellEinzelkostenVK);
238 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
239
240
241
242 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGROHSTOFFBESTELLUNGSKOSTEN_KEY);
243 Double rohstoffbestellungskosten = (Double) wert1.getObjectWert();
244 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGLAGERKOSTENROHSTOFFE_KEY);
245 Double rohstofflagerkosten = (Double) wert1.getObjectWert();
246 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGROHSTOFFLAGERUNGUNDBESTELLUNG_KEY);
247 Double rohstofflagerungUndBestellungVK = new Double(Finanzierung.herstellGemeinKostenRohstoffe(rohstofflagerkosten.doubleValue(), rohstoffbestellungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
248 wert2.setObjectWert(rohstofflagerungUndBestellungVK);
249 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
250
251
252
253 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGABSCHREIBUNGSKOSTEN_KEY);
254 Double abschreibungskosten = (Double) wert1.getObjectWert();
255 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGANLAGENPROJEKTIERUNGSKOSTEN_KEY);
256 Double anlagenprojektierungskosten = (Double) wert1.getObjectWert();
257 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGABSCHREIBUNGUNDANLAGENPROJEKTIERUNG_KEY);
258 Double abschreibungUndAnlagenProjektierungVK = new Double(Finanzierung.herstellGemeinKostenAbschreibungUndAnlagenprojektierung(abschreibungskosten.doubleValue(), anlagenprojektierungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
259 wert2.setObjectWert(abschreibungUndAnlagenProjektierungVK);
260 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
261
262
263
264 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGQUALITAETSSICHERUNGSKOSTEN_KEY);
265 Double qualitaetssicherungskosten = (Double) wert1.getObjectWert();
266 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGQUALITAETSSICHERUNG_KEY);
267 Double qualitaetssicherungVK = new Double(Finanzierung.herstellGemeinKostenQualitaetssicherung(qualitaetssicherungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
268 wert2.setObjectWert(qualitaetssicherungVK);
269 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
270
271
272
273 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGSCHICHTWECHSELKOSTEN_KEY);
274 Double schichtwechselkosten = (Double) wert1.getObjectWert();
275 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGSCHICHTWECHSEL_KEY);
276 Double schichtwechselVK = new Double(Finanzierung.herstellGemeinKostenSchichtwechsel(schichtwechselkosten.doubleValue(), guteProduktionsmenge.doubleValue()));
277 wert2.setObjectWert(schichtwechselVK);
278 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
279
280
281
282 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGFORSCHUNGSUNDENTWICKLUNGSKOSTEN_KEY);
283 Double forschungsUndEntwicklungskosten = (Double) wert1.getObjectWert();
284 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGFUNDEAUFARBEITUNGTRANSFERERTRAEGE_KEY);
285 Double forschungUndEntwicklungVK = new Double(Finanzierung.herstellGemeinKostenForschungUndEntwicklung(forschungsUndEntwicklungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
286 wert2.setObjectWert(forschungUndEntwicklungVK);
287 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
288
289
290
291 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGZINSKOSTENBANKDARLEHEN_KEY);
292 Double zinskostenBankdarlehen = (Double) wert1.getObjectWert();
293 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGZINSKOSTENKONTOKORRENTKREDIT_KEY);
294 Double zinskostenKontokorrentkredit = (Double) wert1.getObjectWert();
295 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGZINSEN_KEY);
296 Double zinsenVK = new Double(Finanzierung.herstellGemeinKostenZinsen(zinskostenKontokorrentkredit.doubleValue(), zinskostenBankdarlehen.doubleValue(), guteProduktionsmenge.doubleValue()));
297 wert2.setObjectWert(zinsenVK);
298 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
299
300
301
302 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ERFOLGSRECHNUNGVERWALTUNGSKOSTEN_KEY);
303 Double verwaltungskosten = (Double) wert1.getObjectWert();
304 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGVERWALTUNG_KEY);
305 Double verwaltungVK = new Double(Finanzierung.herstellGemeinKostenVerwaltung(verwaltungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
306 wert2.setObjectWert(verwaltungVK);
307 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
308
309
310
311 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGHERSTELLGEMEINKOSTEN_KEY);
312 Double herstellGemeinkostenVK = new Double(Finanzierung.herstellGemeinKosten(rohstofflagerungUndBestellungVK.doubleValue(), abschreibungUndAnlagenProjektierungVK.doubleValue(), qualitaetssicherungVK.doubleValue(), schichtwechselVK.doubleValue(), forschungUndEntwicklungVK.doubleValue(), zinsenVK.doubleValue(), verwaltungVK.doubleValue()));
313 wert1.setObjectWert(herstellGemeinkostenVK);
314 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
315
316
317
318 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGKOSTEN_KEY);
319 Double kostenVK = new Double(Finanzierung.vollkosten(vertriebskostenVK.doubleValue(), herstellEinzelkostenVK.doubleValue(), herstellGemeinkostenVK.doubleValue()));
320 wert1.setObjectWert(kostenVK);
321 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
322
323
324
325 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGGEWINN_KEY);
326 Double gewinnVK = new Double(Finanzierung.gewinn(erloesVK.doubleValue(), kostenVK.doubleValue()));
327 wert1.setObjectWert(gewinnVK);
328 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
329
330
331 ArrayList wirksamerPreisTabelle = ErstelleDatentabellen.WirksamerPreisTabelle(projektnummer, new Integer(quartal.intValue() + 1));
332
333
334
335 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_ENTSCHEIDUNGVERKAUFSPREIS_KEY);
336 Double grenzerloesGK = (Double) wert1.getObjectWert();
337 wert2 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGGRENZERLOES_KEY);
338 wert2.setObjectWert(grenzerloesGK);
339 CommonCalculation.WertEintragen(wert2, gruppennummer, new Integer(quartal.intValue() + 1));
340
341
342 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENPRODUZIERTEPRODUKTART_KEY);
343 Integer produzierteProduktart = (Integer) wert1.getObjectWert();
344 if (log.isDebugEnabled())
345 {
346 log.debug(" Produzierte Produktart : '" + produzierteProduktart.toString() + "'");
347 }
348
349
350
351 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGPRODUZIERTEMENGE_KEY);
352 wert1.setObjectWert(guteProduktionsmenge);
353 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
354
355
356
357 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_VOLLKOSTENRECHNUNGABGESETZTEMENGE_KEY);
358 wert1.setObjectWert(abgesetzteMenge);
359 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
360
361
362 ProduktartAbhaengigkeiten produzierteStufe = null;
363 for (int i = 0; i < produktArtAbhaengigkeitenTabelle.size(); i++)
364 {
365 produzierteStufe = (ProduktartAbhaengigkeiten) produktArtAbhaengigkeitenTabelle.get(i);
366
367 if (produzierteStufe.getProduktart() == produzierteProduktart.intValue())
368 {
369 break;
370 }
371 else
372 {
373 produzierteStufe = null;
374 }
375
376 }
377
378 if (produzierteStufe == null)
379 {
380 log.error(" Produzierte Stufe nicht gefunden !!!");
381 }
382
383 Double produktarteffekt = new Double(produzierteStufe.getProduktarteffekt() / 100.0);
384 if (log.isDebugEnabled())
385 {
386 log.debug(" Produktarteffekt : '" + produktarteffekt.toString() + "'");
387 }
388
389
390 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENWIRKSAMEMARKETINGKOSTEN_KEY);
391 Double wirksameMarketingkostenVQ = (Double) wert1.getObjectWert();
392 if (log.isDebugEnabled())
393 {
394 log.debug(" Wirksame Marketingkosten Vor-Quartal : '" + wirksameMarketingkostenVQ.toString() + "'");
395 }
396
397
398 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_GRUNDDATENVERKAUFSPREISREAL_KEY);
399 Double realerVerkaufspreisVQ = (Double) wert1.getObjectWert();
400 if (log.isDebugEnabled())
401 {
402 log.debug(" Realer Verkaufspreis Vor-Quartal : '" + realerVerkaufspreisVQ.toString() + "'");
403 }
404
405
406 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartalminus1, Constants.EF_ERFOLGSRECHNUNGUMSATZERLOESE_KEY);
407 Double umsatzerloeseVQ = (Double) wert1.getObjectWert();
408 if (log.isDebugEnabled())
409 {
410 log.debug(" Umsatzerloese Vor-Quartal : '" + umsatzerloeseVQ.toString() + "'");
411 }
412
413
414 Double korrekturfaktor = new Double(Vertrieb.korrekturfaktor(wirksamerPreisTabelle, gruppennummer));
415 if (log.isDebugEnabled())
416 {
417 log.debug(" Korrekturfaktor : '" + korrekturfaktor.toString() + "'");
418 }
419
420
421 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENABHAENGIGEPREISE_KEY);
422 Integer preisAbhaengigAb = (Integer) voreinstellung1.getWertObject();
423 if (log.isDebugEnabled())
424 {
425 log.debug(" Preis abhängig ab : '" + preisAbhaengigAb.toString() + "'");
426 }
427
428
429 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENSAISONINDEX_KEY);
430 Double sainsonindex = new Double(((Double) wert1.getObjectWert()).doubleValue() / 100.0);
431 if (log.isDebugEnabled())
432 {
433 log.debug(" Sainsonindex : '" + sainsonindex.toString() + "'");
434 }
435
436
437 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKONJUNKTURINDEX_KEY);
438 Double konjunkturindex = new Double(((Double) wert1.getObjectWert()).doubleValue() / 100.0);
439 if (log.isDebugEnabled())
440 {
441 log.debug(" Konjunkturindex : '" + konjunkturindex.toString() + "'");
442 }
443
444
445 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENINFLATIONSINDEX_KEY);
446 Double inflationsindex = (Double) wert1.getObjectWert();
447 if (log.isDebugEnabled())
448 {
449 log.debug(" Inflationsindex : '" + inflationsindex.toString() + "'");
450 }
451
452
453 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENABSETZBAREMENGE_KEY);
454 Double absetzbareMenge = (Double) wert1.getObjectWert();
455 if (log.isDebugEnabled())
456 {
457 log.debug(" Absetzbare Menge : '" + absetzbareMenge.toString() + "'");
458 }
459
460
461 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENVERKAUFSPREISWIRKSAM_KEY);
462 Double wirksamerVerkaufspreis = (Double) wert1.getObjectWert();
463 if (log.isDebugEnabled())
464 {
465 log.debug(" Wirksamer Verkaufspreis : '" + wirksamerVerkaufspreis.toString() + "'");
466 }
467
468
469 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENVERKAUFSPREISREAL_KEY);
470 Double realerVerkaufspreis = (Double) wert1.getObjectWert();
471 if (log.isDebugEnabled())
472 {
473 log.debug(" Realer Verkaufspreis : '" + realerVerkaufspreis.toString() + "'");
474 }
475
476
477 voreinstellung1 = CommonCalculation.SucheVoreinstellungFeldname(allgemein, Constants.VF_ALLGEMEINEVOREINSTELLUNGENNACHHALLEFFEKT_KEY);
478 Double nachhalleffekt = new Double(((Double) voreinstellung1.getWertObject()).doubleValue() / 100.0);
479 if (log.isDebugEnabled())
480 {
481 log.debug(" Nachhalleffekt : '" + nachhalleffekt.toString() + "'");
482 }
483
484
485 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENWIRKSAMEMARKETINGKOSTEN_KEY);
486 Double wirksameMarketingkosten = (Double) wert1.getObjectWert();
487 if (log.isDebugEnabled())
488 {
489 log.debug(" Wirksame Marketingkosten : '" + wirksameMarketingkosten.toString() + "'");
490 }
491
492
493
494 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGGRENZMARKETINGKOSTEN_KEY);
495 Double grenzmarketingkostenGK = new Double(0.0);
496 if ((quartal.intValue() + 1) >= preisAbhaengigAb.intValue())
497 {
498 grenzmarketingkostenGK =
499 new Double(
500 Vertrieb.grenzMarketingKosten(
501 konjunkturindex.doubleValue(),
502 sainsonindex.doubleValue(),
503 absetzbareMenge.doubleValue(),
504 wirksamerVerkaufspreis.doubleValue(),
505 realerVerkaufspreis.doubleValue(),
506 realerVerkaufspreisVQ.doubleValue(),
507 produktarteffekt.doubleValue(),
508 umsatzerloeseVQ.doubleValue(),
509 wirksameMarketingkostenVQ.doubleValue(),
510 inflationsindex.doubleValue(),
511 nachhalleffekt.doubleValue(),
512 wirksameMarketingkosten.doubleValue(),
513 korrekturfaktor.doubleValue(),
514 preisAbsatzTabelle,
515 marketingTabelle,
516 wirksamerPreisTabelle.size()));
517 }
518 else
519 {
520 grenzmarketingkostenGK =
521 new Double(
522 Vertrieb.grenzMarketingKosten(
523 konjunkturindex.doubleValue(),
524 sainsonindex.doubleValue(),
525 absetzbareMenge.doubleValue(),
526 wirksamerVerkaufspreis.doubleValue(),
527 realerVerkaufspreis.doubleValue(),
528 realerVerkaufspreisVQ.doubleValue(),
529 produktarteffekt.doubleValue(),
530 umsatzerloeseVQ.doubleValue(),
531 wirksameMarketingkostenVQ.doubleValue(),
532 inflationsindex.doubleValue(),
533 nachhalleffekt.doubleValue(),
534 wirksameMarketingkosten.doubleValue(),
535 1.0,
536 preisAbsatzTabelle,
537 marketingTabelle,
538 wirksamerPreisTabelle.size()));
539 }
540 wert1.setObjectWert(grenzmarketingkostenGK);
541 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
542
543
544 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENKAPAZITAETSAUSLASTUNG_KEY);
545 Double kapazitaetsauslastung = (Double) wert1.getObjectWert();
546 if (log.isDebugEnabled())
547 {
548 log.debug(" Kapazitätsauslastung : '" + kapazitaetsauslastung.toString() + "'");
549 }
550
551
552
553 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGPRODUKTIONINLETZTERZONE_KEY);
554 Double produktionLetzteZoneGK = new Double(Finanzierung.produktionInDerLetztenZone(kapazitaetsauslastung.doubleValue(), guteProduktionsmenge.doubleValue()));
555 wert1.setObjectWert(produktionLetzteZoneGK);
556 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
557
558
559 Double fertigungslohnkosten = new Double(flkOhneUeberstundenOhneNacharbeit.doubleValue() + nacharbeitslohnkosten.doubleValue());
560 if (log.isDebugEnabled())
561 {
562 log.debug(" Fertigungslohnkosten : '" + fertigungslohnkosten.toString() + "'");
563 }
564
565
566
567 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGLOEHNEOHNEUEBERSTUNDENZUSCHLAG_KEY);
568 Double loehneOhneUeberstundenGK = new Double(Finanzierung.grenzHerstellKostenLoehne(kapazitaetsauslastung.doubleValue(), fertigungslohnkosten.doubleValue(), guteProduktionsmenge.doubleValue()));
569 wert1.setObjectWert(loehneOhneUeberstundenGK);
570 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
571
572
573
574 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGUEBERSTUNDENZUSCHLAG_KEY);
575 Double ueberstundenzuschlagGK = new Double(Finanzierung.grenzHerstellKostenUeberstunden(kapazitaetsauslastung.doubleValue(), ueberstundenzuschlaege.doubleValue(), produktionLetzteZoneGK.doubleValue()));
576 wert1.setObjectWert(ueberstundenzuschlagGK);
577 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
578
579
580
581 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGROHSTOFFE_KEY);
582 Double rohstoffeGK = new Double(Finanzierung.grenzHerstellKostenRohstoffe(kapazitaetsauslastung.doubleValue(), rohstoffverbrauchskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
583 wert1.setObjectWert(rohstoffeGK);
584 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
585
586
587
588 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGQUALITAETSSICHERUNG_KEY);
589 Double qualitaetssicherungGK = new Double(Finanzierung.grenzHerstellKostenQualitaetssicherung(kapazitaetsauslastung.doubleValue(), qualitaetssicherungskosten.doubleValue(), guteProduktionsmenge.doubleValue()));
590 wert1.setObjectWert(qualitaetssicherungGK);
591 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
592
593
594
595 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGSCHICHTWECHSEL_KEY);
596 Double schichtwechselGK = new Double(Finanzierung.grenzHerstellKostenSchichtwechsel(kapazitaetsauslastung.doubleValue(), schichtwechselkosten.doubleValue(), produktionLetzteZoneGK.doubleValue()));
597 wert1.setObjectWert(schichtwechselGK);
598 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
599
600
601 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRUNDDATENLOHNERHOEHUNGSINDEX_KEY);
602 Double lohnerhoehungsindex = (Double) wert1.getObjectWert();
603 if (log.isDebugEnabled())
604 {
605 log.debug(" Lohnerhöhungsindex : '" + lohnerhoehungsindex.toString() + "'");
606 }
607
608
609
610 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGVERWALTUNG_KEY);
611 Double verwaltungGK = new Double(-Finanzierung.grenzHerstellKostenVerwaltung(lohnerhoehungsindex.doubleValue(), kapazitaetsauslastung.doubleValue(), -verwaltungskosten.doubleValue(), produktionLetzteZoneGK.doubleValue(), verwaltungTabelle));
612 wert1.setObjectWert(verwaltungGK);
613 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
614
615
616
617 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGGRENZHERSTELLKOSTEN_KEY);
618 Double grenzherstellkostenGK = new Double(Finanzierung.grenzHerstellKosten(kapazitaetsauslastung.doubleValue(), loehneOhneUeberstundenGK.doubleValue(), ueberstundenzuschlagGK.doubleValue(), rohstoffeGK.doubleValue(), qualitaetssicherungGK.doubleValue(), schichtwechselGK.doubleValue(), verwaltungGK.doubleValue()));
619 wert1.setObjectWert(grenzherstellkostenGK);
620 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
621
622
623
624 wert1 = CommonCalculation.SucheErgebnissFeldname(aktuellesquartal, Constants.EF_GRENZKOSTENRECHNUNGGRENZGEWINN_KEY);
625 Double grenzgewinnGK = new Double(Finanzierung.grenzGewinn(grenzerloesGK.doubleValue(), grenzmarketingkostenGK.doubleValue(), grenzherstellkostenGK.doubleValue()));
626 wert1.setObjectWert(grenzgewinnGK);
627 CommonCalculation.WertEintragen(wert1, gruppennummer, new Integer(quartal.intValue() + 1));
628 }
629 catch (Exception e)
630 {
631 log.error("THREAD NAME : " + getName());
632 log.error(e.getMessage(), e);
633 }
634
635 if (log.isDebugEnabled())
636 {
637 log.debug(" (F) Verarbeitung \"BerechneVollUndGrenzkosten\" fuer Gruppe \"" + gruppennummer + "\", Quartal \"" + quartal + "\" abgeschlossen");
638 }
639 }
640 else
641 {
642 log.error(" WICHTIGE DATEN FUER DEN THREAD WURDEN NICHT FESTGELEGT. STOPPE VERARBEITUNG !!! ");
643 }
644
645 synchronized (lock)
646 {
647 try
648 {
649 if (log.isDebugEnabled())
650 {
651 log.debug(" (N) Verstaendige andere Threads, ich bin fertig. THREAD NAME : " + getName());
652 }
653
654
655 lock.incrementSemaphore();
656
657 lock.wait(3600000);
658
659 lock.decrementSemaphore();
660
661 if (log.isDebugEnabled())
662 {
663 log.debug(" FINALIZING THREAD. " + getName());
664 }
665
666
667 lock.decrementFinishSemaphore();
668 }
669 catch (Exception e)
670 {
671 log.error("THREAD NAME : " + getName());
672 log.error(e.getMessage(), e);
673 }
674 }
675 }
676
677
678
679 /***
680 * GET Methode
681 *
682 * @return Gruppennummer
683 */
684 public Integer getGruppennummer()
685 {
686 return gruppennummer;
687 }
688
689 /***
690 * GET Methode
691 *
692 * @return Projektnummer
693 */
694 public Integer getProjektnummer()
695 {
696 return projektnummer;
697 }
698
699 /***
700 * GET Methode
701 *
702 * @return Quartal
703 */
704 public Integer getQuartal()
705 {
706 return quartal;
707 }
708
709 /***
710 * SET Methode
711 *
712 * @param gruppennummer Die Gruppennummer
713 */
714 public void setGruppennummer(Integer gruppennummer)
715 {
716 this.gruppennummer = gruppennummer;
717 }
718
719 /***
720 * SET Methode
721 *
722 * @param projektnummer Die Projektnummer
723 */
724 public void setProjektnummer(Integer projektnummer)
725 {
726 this.projektnummer = projektnummer;
727 }
728
729 /***
730 * SET Methode
731 *
732 * @param quartal Das Quartal
733 */
734 public void setQuartal(Integer quartal)
735 {
736 this.quartal = quartal;
737 }
738 }