IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Problème d'algorithme java


Sujet :

Développement Web en Java

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut Problème d'algorithme java
    Bonjour,

    Je développe une application de gestion horaire.



    Dans un premier temps, on m'a demandé de gérer les horaires par personne et cette méthode fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
     
    	@Override
    	public List<Moisdisp> getMoisDispByIdPersonneAndAnneePasCivilComptage(Integer idPersonne, String anneeDebut, String AnneeFin) {
    		List<Moisdisp> moisDips =  new ArrayList<Moisdisp>(); 
    		String queryString = 
    				 " select  moisdisp.idMois, moisdisp.idPers, moisdisp.nomMois, moisdisp.annee, moisdisp.totalTravMois, moisdisp.nbCannuel, "
    							+" moisdisp.nbCt, moisdisp.nbFerie, moisdisp.nbMaladie, moisdisp.nbCancien, moisdisp.nbRecup, "
    							+" moisdisp.nbExcep, moisdisp.nbFamil, moisdisp.totalTravAfaire, moisdisp.ecart, moisdisp.nbHeureSuppPaye, "
    							+" moisdisp.nbFormation, moisdisp.nbRecupFerie, moisdisp.nbDelegation, moisdisp.nbIntemperie, moisdisp.nbSolidarite, moisdisp.nbEnfantMalade, moisdisp.nbNonJustif,"
    							+ "moisdisp.nbSoldeCPaye, moisdisp.nbSoldeCAnciennete, moisdisp.nbSoldeCTrimestriel " 
    							+" from Moisdisp as moisdisp "
    							+" where moisdisp.idPers =  ?  "
    							+" and (moisdisp.nomMois = 01 or  moisdisp.nomMois = 02 or  moisdisp.nomMois = 03 or  moisdisp.nomMois = 04 or  moisdisp.nomMois = 05  ) "
    							+" and moisdisp.annee = ?  "
    							+" or ( moisdisp.nomMois = 06 or  moisdisp.nomMois = 07 or  moisdisp.nomMois = 8 or  moisdisp.nomMois = 9 or  moisdisp.nomMois = 10 or  moisdisp.nomMois = 11 or  moisdisp.nomMois = 12 ) "
    							+" and moisdisp.annee = ? "
    							+" and moisdisp.idPers =  ? "
    							+" ORDER BY moisdisp.annee  , moisdisp.nomMois ASC ";
     
     
    				logger.debug("getMoisDispByIdPersonneAndAnneeNonCivile : query : "+queryString);
     
     
     
     
     
     
     
    		Object[] params = {idPersonne, AnneeFin , anneeDebut,  idPersonne};
     
    		int ecartConstate = 0;
    		int dureeDeTravAnneeFait = 0;
    		int dureeDeTravAnneeAfaire = 0 ;
    		int heureSuppAreporte = 0;
     
    		int nbCA = 0;
    		int nbCT = 0;
    		int nbFer = 0;
    		int nbCMal = 0;
    		int nbCAnc = 0;
    		int nbCRecup = 0;
    		int nbCExc = 0;
    		int nbCParent = 0;
    		int nbCFormation = 0 ;
    		int nbCRecupFerie = 0 ;
    		int nbCDelegation = 0;
    		int nbCIntemperie = 0;
     
    		int nbCSolidarite = 0;
    		int nbCEnfantMalade = 0;
    		int nbCNonJustif = 0;
     
    		int nbSoldeCPaye = 0;
    		int nbSoldeCAnciennete = 0;
    		int nbSoldeCTrimestriel = 0;
    		int idPersonneOld = 0 ;
    		Moisdisp moisDis = new Moisdisp();
    		Iterator results = this.getHibernateTemplate().find(queryString, params).iterator();
    		while ( results.hasNext() ) {
     
     
    		    Object[] row = (Object[]) results.next();
     
    		    Integer idMois  = (Integer) row[0];
    		    moisDis.setIdMois(idMois);
     
     
    		    Integer idPers  = (Integer) row[1];
    		    moisDis.setIdPers(idPers);
     
    		     if(idPersonne != idPersonneOld && idPersonneOld != 0){			    
     
    		    }
     
    		    String mois = (String) row[2];
    		    logger.debug("nom mois du moisDisp : "+mois);
    		    moisDis.setNomMois(mois);
     
    		    String anneeTrouv = (String) row[3];
    		    moisDis.setAnnee(anneeTrouv);
     
     
    		    String totalTravMois = (String)row[4];
    		    moisDis.setTotalTravMois(totalTravMois);
     
    		    logger.debug("totalTravMois !!!!!! : "+totalTravMois);
    		    //Pour additionner le total qui doit être par an
     
    			String valeurDureeJourAdecoupe = ":";
    			if(!totalTravMois.contains("Report")){
    				if(totalTravMois != null){
    					String [] totalTravMoisTemps = totalTravMois.split(valeurDureeJourAdecoupe);
    					String totalTravMoisheure = totalTravMoisTemps[0];
    					totalTravMoisheure = totalTravMoisheure.replace(" ","");
     
    					String totalTravMoismin = totalTravMoisTemps[1];
    					totalTravMoismin = totalTravMoismin.replace(" ","");
     
    					int iTotalTravMoisHeure = Integer.parseInt(totalTravMoisheure);
    					int iTotalTravMoisMin = Integer.parseInt(totalTravMoismin);
     
    					int dureeDeTravFait = (iTotalTravMoisHeure * 60) + iTotalTravMoisMin;	
     
    					dureeDeTravAnneeFait += dureeDeTravFait;
    					logger.debug("dureeDeTravAnneeFait :"+dureeDeTravAnneeFait);
    				}
     
    			}
     
     
    		    Integer nbCannuel  = (Integer) row[5];
    		    logger.debug("nbCannuel :"+nbCannuel);
    			if(nbCannuel != null && !"".equals(nbCannuel) && !"0".equals(mois)){
    				  nbCA += nbCannuel; 
    				  moisDis.setNbCannuel(nbCA);
    			}
     
    		    Integer nbCt  = (Integer) row[6];
    		    if(nbCt != null && !"0".equals(mois)){
    			    nbCT += nbCt;
    			    moisDis.setNbCt(nbCT);
    		    }
     
    		    Integer nbFerie  = (Integer) row[7];
    		    if(nbFerie != null && !"0".equals(mois)){
    			    nbFer += nbFerie;
    			    moisDis.setNbFerie(nbFer);
    		    }
     
    		    Integer nbMaladie  = (Integer) row[8];
    		    if(nbMaladie != null && !"0".equals(mois)){
    		    	nbCMal += nbMaladie;
    		    	moisDis.setNbMaladie(nbCMal);
    		    }
     
    		    Integer nbCancien  = (Integer) row[9];
    		    if(nbCancien != null && !"0".equals(mois)){
    		    	nbCAnc += nbCancien;
    		    	moisDis.setNbCancien(nbCAnc);
    		    }
     
    		    Integer nbRecup  = (Integer) row[10];
    		    if(nbRecup != null && !"0".equals(mois)){
    		    	nbCRecup += nbRecup;
    		    	moisDis.setNbRecup(nbCRecup);
    		    }
     
     
    		    Integer nbExcep  = (Integer) row[11];
    		    if(nbExcep != null && !"0".equals(mois)){
    		    	nbCExc += nbExcep;
    		    	moisDis.setNbExcep(nbCExc);
    		    }
     
     
    		    Integer nbFamil  = (Integer) row[12];
    		    if(nbFamil != null && !"0".equals(mois)){
    		    	nbCParent += nbFamil;
    		    	moisDis.setNbFamil(nbCParent);
    		    }
     
     
    		    Integer nbFormation  = (Integer) row[17];
    		    if(nbFormation != null && !"0".equals(mois)){
    		    	nbCFormation += nbFormation;
    		    	moisDis.setNbFormation(nbCFormation);
    		    	logger.debug("nbCFormation : "+nbCFormation);
    		    }
     
     
     
    		    Integer nbRecupFerie  = (Integer) row[16];
    		    if(nbRecupFerie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCRecupFerie += nbRecupFerie;
    		    	moisDis.setNbRecupFerie(nbCRecupFerie);
    		    	logger.debug("nbCRecupFerie : "+nbCRecupFerie);
    		    }
     
     
    		    Integer nbDelegation  = (Integer) row[18];
    		    if(nbDelegation != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCDelegation += nbDelegation;
    		    	moisDis.setNbDelegation(nbCDelegation);
    		    	logger.debug("nbCDelegation : "+nbCDelegation);
    		    }
     
    		    Integer nbIntemperie  = (Integer) row[19];
    		    if(nbIntemperie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCIntemperie += nbIntemperie;
    		    	moisDis.setNbIntemperie(nbCIntemperie);
    		    	logger.debug("nbCIntemperie : "+nbCIntemperie);
    		    }
     
    		    Integer nbSolidarite  = (Integer) row[20];
    		    if(nbSolidarite != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCSolidarite += nbSolidarite;
    		    	moisDis.setNbSolidarite(nbCSolidarite);
    		    	logger.debug("nbCSolidarite : "+nbCSolidarite);
    		    }
     
    		    Integer nbEnfantMalade  = (Integer) row[21];
    		    if(nbEnfantMalade != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCEnfantMalade += nbEnfantMalade;
    		    	moisDis.setNbEnfantMalade(nbCEnfantMalade);
    		    	logger.debug("nbCEnfantMalade : "+nbCEnfantMalade);
    		    }
     
    		    Integer nbNonJustif  = (Integer) row[22];
    		    if(nbNonJustif != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCNonJustif += nbNonJustif;
    		    	moisDis.setNbNonJustif(nbCNonJustif);
    		    	logger.debug("nbCNonJustif : "+nbCNonJustif);
    		    }
     
    		    Integer nbSoldePaye  = (Integer) row[23];
    		    if(nbSoldePaye != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCPaye += nbSoldePaye;
    		    	moisDis.setNbSoldeCPaye(nbSoldeCPaye);
    		    	logger.debug("nbSoldeCPaye : "+nbSoldeCPaye);
    		    }
     
     
    		    Integer nbSoldeAnc  = (Integer) row[24];
    		    if(nbSoldeAnc != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCAnciennete += nbSoldeAnc;
    		    	moisDis.setNbSoldeCAnciennete(nbSoldeCAnciennete);
    		    	logger.debug("nbSoldeCAnciennete : "+nbSoldeCAnciennete);
    		    }
     
    		    Integer nbSoldeTri  = (Integer) row[25];
    		    if(nbSoldeTri != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCTrimestriel += nbSoldeTri;
    		    	moisDis.setNbSoldeCTrimestriel(nbSoldeCTrimestriel);
    		    	logger.debug("nbSoldeCTrimestriel : "+nbSoldeCTrimestriel);
    		    }		    
     
    		    String heureTotalAfaire = (String)row[13];
    		    moisDis.setTotalTravAfaire(heureTotalAfaire);
    		    logger.debug("heureTotalAfaire :"+heureTotalAfaire);
    		    //Pour additionner le total des heures a réalisée qui doit être par an
    			if( !"".equals(heureTotalAfaire) && heureTotalAfaire != null){
    				String [] heureTotalAfaireTemps = heureTotalAfaire.split(valeurDureeJourAdecoupe);
    				String heureTotalAfaireHeure = heureTotalAfaireTemps[0];
     
    				String heureTotalAfaireMin = heureTotalAfaireTemps[1];
     
    				heureTotalAfaireHeure = heureTotalAfaireHeure.replace(" ","");
    				heureTotalAfaireMin = heureTotalAfaireMin.replace(" ","");
     
     
    				int iheureTotalAfaireHeure = Integer.parseInt(heureTotalAfaireHeure);
    				int iheureTotalAfaireMin = Integer.parseInt(heureTotalAfaireMin);
     
    				int dureeDeTravAfaire = (iheureTotalAfaireHeure * 60) + iheureTotalAfaireMin;	
     
    				dureeDeTravAnneeAfaire += dureeDeTravAfaire;
    				logger.debug("dureeDeTravAnneeAfaire :"+dureeDeTravAnneeAfaire);
    			}
     
     
     
     
    		    String heureSupp = (String)row[15];
    		    moisDis.setNbHeureSuppPaye(heureSupp);
    		    logger.debug("heureSupp : "+heureSupp);
    		    //Pour effectue le calcul avec les heure supp et les écart 
    		    if(heureSupp != null){
    				String [] heureSupTemps = heureSupp.split(valeurDureeJourAdecoupe);
    				String heureSupHeure = heureSupTemps[0];
    				String heureSupMin = heureSupTemps[1];
     
    				heureSupHeure = heureSupHeure.replace(" ","");
    				heureSupMin = heureSupMin.replace(" ","");
     
     
    				int iheureSuppHeure = Integer.parseInt(heureSupHeure);
    				int iheureSuppMin = Integer.parseInt(heureSupMin);
     
     
     
    				heureSuppAreporte = heureSuppAreporte + (iheureSuppHeure * 60) + iheureSuppMin;	
     
    				//heureSuppAreporte += heureSuppAreporte;
    				logger.debug("heureSuppAreporte :"+heureSuppAreporte);
    			}
     
     
    		    //On transmforme l'ecart en min 
    		    String ecart = (String)row[14];
    		    moisDis.setEcart(ecart);
    		    logger.debug("ecart :"+ecart);
     
    		    int valeurNegative = ecart.indexOf("-");
     
    		    int iEcartHeure = 0 ;
    			int iEcartMin = 0 ;
     
    			int ecartMin = 0 ;
     
    		    if(valeurNegative == -1){
    				logger.debug("***** Absence du tiret VALEUR POSITIVE ");
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				String ecartMinin = ecartTemps[1];
     
     
    				ecartHeure = ecartHeure.replace(" ","");
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				iEcartHeure = Integer.parseInt(ecartHeure);
    				iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) + iEcartMin;
     
    				 logger.debug("ecartMin POSITIF : "+ecartMin);
     
    			}else{
    				logger.debug("Presence du tiret VALEUR NEGATIVE ");
     
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				ecartHeure = ecartHeure.replace("-","");
    				ecartHeure = ecartHeure.replace(" ","");
     
    				String ecartMinin = ecartTemps[1];
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				 iEcartHeure = Integer.parseInt(ecartHeure);
    				 iEcartHeure = 0 - iEcartHeure;
     
    				 iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) - iEcartMin;
     
     
    				logger.debug("ecartMin NEGATIVE : "+ecartMin);
     
    			}
     
     
     
     
     
    			ecartConstate += ecartMin;
     
    			//String ecartAenregistrer = this.getTotalHours(intEcartAenregistrer);
    			//moisDis.setEcart(ecartAenregistrer);
     
     
    		    }
     
     
    		ecartConstate = ecartConstate - heureSuppAreporte;
    		logger.debug("** ecartConstate ** : "+ecartConstate);
     
    		String dureeTravailRealise = getTotalHours(dureeDeTravAnneeFait);
    		moisDis.setTotalTravMois(dureeTravailRealise);
    		logger.debug("!! dureeTravailRealise !!" + dureeTravailRealise);
     
     
    		String dureeTravailArealise = getTotalHours(dureeDeTravAnneeAfaire);
    		logger.debug("!! dureeTravailArealise !!" + dureeTravailArealise);
    		moisDis.setTotalTravAfaire(dureeTravailArealise);
     
    		String ecartConstateHeure = getTotalHours(ecartConstate);
    		moisDis.setEcart(ecartConstateHeure);
    		logger.debug("!! ecartConstateHeure !! " + ecartConstateHeure);
     
     
    		 moisDips.add(moisDis);
     
    		 return moisDips;
     
     
    		}

    Néanmoins, dans un deuxième temps, on m'a demandé de gérer les horaires des personnes par service. Et là, je suis bloquée.

    Grace à de l'aide, j'ai réussi à trouver la bonne requête pour trouver les bonnes informations. Toutefois, je suis bloqué par un problème d'algorithme très con, très con.

    Je n'arrive pas à calculer les horaires par personne. C'est à dire que la requête me retourne tous les horaires des personnes du service concernée, mais que je n'arrive pas à calculer les horaires par personnes.

    Pourriez vous m'aider s'il vous plait

    Voici la fonction en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
     
    public List<Moisdisp> getMoisDispByIdUniteSoldeVacanceComptage(Integer unite, String anneeDebut, String AnneeFin) {
    		List<Moisdisp> moisDips =  new ArrayList<Moisdisp>(); 
     
    				String queryString = 
    						 " select  moisdisp.idMois, moisdisp.idPers, moisdisp.nomMois, moisdisp.annee, moisdisp.totalTravMois, moisdisp.nbCannuel, "
    						+" moisdisp.nbCt, moisdisp.nbFerie, moisdisp.nbMaladie, moisdisp.nbCancien, moisdisp.nbRecup, "
    						+" moisdisp.nbExcep, moisdisp.nbFamil, moisdisp.totalTravAfaire, moisdisp.ecart, moisdisp.nbHeureSuppPaye,  moisdisp.nbFormation, moisdisp.nbRecupFerie, "
    						+" moisdisp.nbDelegation, moisdisp.nbIntemperie, moisdisp.nbSolidarite, moisdisp.nbEnfantMalade, moisdisp.nbNonJustif, moisdisp.nbSoldeCPaye, moisdisp.nbSoldeCAnciennete, "
    					    + "moisdisp.nbSoldeCTrimestriel, personne.nom  "  
    					    + "from	Moisdisp AS moisdisp, Personne as personne, Uniteservice as uniteservice, Unite as unite "
    					    + "where  moisdisp.idPers = personne.idPersonne and personne.service.idService = uniteservice.service.idService "
    					    + "and uniteservice.unite.idUnite = unite.idUnite "
    					    + "and unite.idUnite = ? "
    					    + " AND ( (moisdisp.annee = ? AND moisdisp.nomMois > 5)OR (moisdisp.annee = ?   AND    moisdisp.nomMois < 6) )"
    					    + " and moisdisp.nomMois !=0 "
    					    + "ORDER BY moisdisp.idPers, moisdisp.annee, moisdisp.nomMois ASC";
     
     
     
     
    				logger.debug("getMoisDispByIdUniteSoldeVacance : query : "+queryString);
     
     
    			Object[] params = {unite, anneeDebut, AnneeFin};
     
     
    		int idPersonneOld = 0;
     
     
    		int ecartConstate = 0;
    		int dureeDeTravAnneeFait = 0;
    		int dureeDeTravAnneeAfaire = 0 ;
    		int heureSuppAreporte = 0;
     
    		int nbCA = 0;
    		int nbCT = 0;
    		int nbFer = 0;
    		int nbCMal = 0;
    		int nbCAnc = 0;
    		int nbCRecup = 0;
    		int nbCExc = 0;
    		int nbCParent = 0;
    		int nbCFormation = 0 ;
    		int nbCRecupFerie = 0 ;
    		int nbCDelegation = 0;
    		int nbCIntemperie = 0;
     
    		int nbCSolidarite = 0;
    		int nbCEnfantMalade = 0;
    		int nbCNonJustif = 0;
     
    		int nbSoldeCPaye = 0;
    		int nbSoldeCAnciennete = 0;
    		int nbSoldeCTrimestriel = 0;
     
    		Integer idPers = 0;
     
    		Moisdisp moisDis = new Moisdisp();
    		Iterator results = this.getHibernateTemplate().find(queryString, params).iterator();
    		while ( results.hasNext() ) {
     
     
    		    Object[] row = (Object[]) results.next();
     
    		    Integer idMois  = (Integer) row[0];
    		    moisDis.setIdMois(idMois);
     
     
    		    idPers  = (Integer) row[1];
    		    moisDis.setIdPers(idPers);
     
     
     
    		    String mois = (String) row[2];
    		    logger.debug("nom mois du moisDisp : "+mois);
    		    moisDis.setNomMois(mois);
     
    		    String anneeTrouv = (String) row[3];
    		    moisDis.setAnnee(anneeTrouv);
     
     
    		    String totalTravMois = (String)row[4];
    		    moisDis.setTotalTravMois(totalTravMois);
     
    		    logger.debug("totalTravMois !!!!!! : "+totalTravMois);
    		    //Pour additionner le total qui doit être par an
     
    			String valeurDureeJourAdecoupe = ":";
    			if(!totalTravMois.contains("Report")){
    				if(totalTravMois != null){
    					String [] totalTravMoisTemps = totalTravMois.split(valeurDureeJourAdecoupe);
    					String totalTravMoisheure = totalTravMoisTemps[0];
    					totalTravMoisheure = totalTravMoisheure.replace(" ","");
     
    					String totalTravMoismin = totalTravMoisTemps[1];
    					totalTravMoismin = totalTravMoismin.replace(" ","");
     
    					int iTotalTravMoisHeure = Integer.parseInt(totalTravMoisheure);
    					int iTotalTravMoisMin = Integer.parseInt(totalTravMoismin);
     
    					int dureeDeTravFait = (iTotalTravMoisHeure * 60) + iTotalTravMoisMin;	
     
    					dureeDeTravAnneeFait += dureeDeTravFait;
    					logger.debug("dureeDeTravAnneeFait :"+dureeDeTravAnneeFait);
    				}
     
    			}
     
     
    		    Integer nbCannuel  = (Integer) row[5];
    		    logger.debug("nbCannuel :"+nbCannuel);
    			if(nbCannuel != null && !"".equals(nbCannuel) && !"0".equals(mois)){
    				  nbCA += nbCannuel; 
    				  moisDis.setNbCannuel(nbCA);
    			}
     
    		    Integer nbCt  = (Integer) row[6];
    		    if(nbCt != null && !"0".equals(mois)){
    			    nbCT += nbCt;
    			    moisDis.setNbCt(nbCT);
    		    }
     
    		    Integer nbFerie  = (Integer) row[7];
    		    if(nbFerie != null && !"0".equals(mois)){
    			    nbFer += nbFerie;
    			    moisDis.setNbFerie(nbFer);
    		    }
     
    		    Integer nbMaladie  = (Integer) row[8];
    		    if(nbMaladie != null && !"0".equals(mois)){
    		    	nbCMal += nbMaladie;
    		    	moisDis.setNbMaladie(nbCMal);
    		    }
     
    		    Integer nbCancien  = (Integer) row[9];
    		    if(nbCancien != null && !"0".equals(mois)){
    		    	nbCAnc += nbCancien;
    		    	moisDis.setNbCancien(nbCAnc);
    		    }
     
    		    Integer nbRecup  = (Integer) row[10];
    		    if(nbRecup != null && !"0".equals(mois)){
    		    	nbCRecup += nbRecup;
    		    	moisDis.setNbRecup(nbCRecup);
    		    }
     
     
    		    Integer nbExcep  = (Integer) row[11];
    		    if(nbExcep != null && !"0".equals(mois)){
    		    	nbCExc += nbExcep;
    		    	moisDis.setNbExcep(nbCExc);
    		    }
     
     
    		    Integer nbFamil  = (Integer) row[12];
    		    if(nbFamil != null && !"0".equals(mois)){
    		    	nbCParent += nbFamil;
    		    	moisDis.setNbFamil(nbCParent);
    		    }
     
     
    		    Integer nbFormation  = (Integer) row[17];
    		    if(nbFormation != null && !"0".equals(mois)){
    		    	nbCFormation += nbFormation;
    		    	moisDis.setNbFormation(nbCFormation);
    		    	logger.debug("nbCFormation : "+nbCFormation);
    		    }
     
     
     
    		    Integer nbRecupFerie  = (Integer) row[16];
    		    if(nbRecupFerie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCRecupFerie += nbRecupFerie;
    		    	moisDis.setNbRecupFerie(nbCRecupFerie);
    		    	logger.debug("nbCRecupFerie : "+nbCRecupFerie);
    		    }
     
     
    		    Integer nbDelegation  = (Integer) row[18];
    		    if(nbDelegation != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCDelegation += nbDelegation;
    		    	moisDis.setNbDelegation(nbCDelegation);
    		    	logger.debug("nbCDelegation : "+nbCDelegation);
    		    }
     
    		    Integer nbIntemperie  = (Integer) row[19];
    		    if(nbIntemperie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCIntemperie += nbIntemperie;
    		    	moisDis.setNbIntemperie(nbCIntemperie);
    		    	logger.debug("nbCIntemperie : "+nbCIntemperie);
    		    }
     
    		    Integer nbSolidarite  = (Integer) row[20];
    		    if(nbSolidarite != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCSolidarite += nbSolidarite;
    		    	moisDis.setNbSolidarite(nbCSolidarite);
    		    	logger.debug("nbCSolidarite : "+nbCSolidarite);
    		    }
     
    		    Integer nbEnfantMalade  = (Integer) row[21];
    		    if(nbEnfantMalade != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCEnfantMalade += nbEnfantMalade;
    		    	moisDis.setNbEnfantMalade(nbCEnfantMalade);
    		    	logger.debug("nbCEnfantMalade : "+nbCEnfantMalade);
    		    }
     
    		    Integer nbNonJustif  = (Integer) row[22];
    		    if(nbNonJustif != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCNonJustif += nbNonJustif;
    		    	moisDis.setNbNonJustif(nbCNonJustif);
    		    	logger.debug("nbCNonJustif : "+nbCNonJustif);
    		    }
     
    		    Integer nbSoldePaye  = (Integer) row[23];
    		    if(nbSoldePaye != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCPaye += nbSoldePaye;
    		    	moisDis.setNbSoldeCPaye(nbSoldeCPaye);
    		    	logger.debug("nbSoldeCPaye : "+nbSoldeCPaye);
    		    }
     
     
    		    Integer nbSoldeAnc  = (Integer) row[24];
    		    if(nbSoldeAnc != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCAnciennete += nbSoldeAnc;
    		    	moisDis.setNbSoldeCAnciennete(nbSoldeCAnciennete);
    		    	logger.debug("nbSoldeCAnciennete : "+nbSoldeCAnciennete);
    		    }
     
    		    Integer nbSoldeTri  = (Integer) row[25];
    		    if(nbSoldeTri != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCTrimestriel += nbSoldeTri;
    		    	moisDis.setNbSoldeCTrimestriel(nbSoldeCTrimestriel);
    		    	logger.debug("nbSoldeCTrimestriel : "+nbSoldeCTrimestriel);
    		    }		    
     
     
    		    String nomPersonne = (String) row [26];
    		    moisDis.setNomPersonne(nomPersonne);
     
    		    String heureTotalAfaire = (String)row[13];
    		    moisDis.setTotalTravAfaire(heureTotalAfaire);
    		    logger.debug("heureTotalAfaire :"+heureTotalAfaire);
    		    //Pour additionner le total des heures a réalisée qui doit être par an
    			if( !"".equals(heureTotalAfaire) && heureTotalAfaire != null){
    				String [] heureTotalAfaireTemps = heureTotalAfaire.split(valeurDureeJourAdecoupe);
    				String heureTotalAfaireHeure = heureTotalAfaireTemps[0];
     
    				String heureTotalAfaireMin = heureTotalAfaireTemps[1];
     
    				heureTotalAfaireHeure = heureTotalAfaireHeure.replace(" ","");
    				heureTotalAfaireMin = heureTotalAfaireMin.replace(" ","");
     
     
    				int iheureTotalAfaireHeure = Integer.parseInt(heureTotalAfaireHeure);
    				int iheureTotalAfaireMin = Integer.parseInt(heureTotalAfaireMin);
     
    				int dureeDeTravAfaire = (iheureTotalAfaireHeure * 60) + iheureTotalAfaireMin;	
     
    				dureeDeTravAnneeAfaire += dureeDeTravAfaire;
    				logger.debug("dureeDeTravAnneeAfaire :"+dureeDeTravAnneeAfaire);
    			}
     
     
     
     
    		    String heureSupp = (String)row[15];
    		    moisDis.setNbHeureSuppPaye(heureSupp);
    		    logger.debug("heureSupp : "+heureSupp);
    		    //Pour effectue le calcul avec les heure supp et les écart 
    		    if(heureSupp != null){
    				String [] heureSupTemps = heureSupp.split(valeurDureeJourAdecoupe);
    				String heureSupHeure = heureSupTemps[0];
    				String heureSupMin = heureSupTemps[1];
     
    				heureSupHeure = heureSupHeure.replace(" ","");
    				heureSupMin = heureSupMin.replace(" ","");
     
     
    				int iheureSuppHeure = Integer.parseInt(heureSupHeure);
    				int iheureSuppMin = Integer.parseInt(heureSupMin);
     
     
     
    				heureSuppAreporte = heureSuppAreporte + (iheureSuppHeure * 60) + iheureSuppMin;	
     
    				//heureSuppAreporte += heureSuppAreporte;
    				logger.debug("heureSuppAreporte :"+heureSuppAreporte);
    			}
     
     
    		    //On transmforme l'ecart en min 
    		    String ecart = (String)row[14];
    		    moisDis.setEcart(ecart);
    		    logger.debug("ecart :"+ecart);
     
    		    int valeurNegative = ecart.indexOf("-");
     
    		    int iEcartHeure = 0 ;
    			int iEcartMin = 0 ;
     
    			int ecartMin = 0 ;
     
    		    if(valeurNegative == -1){
    				logger.debug("***** Absence du tiret VALEUR POSITIVE ");
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				String ecartMinin = ecartTemps[1];
     
     
    				ecartHeure = ecartHeure.replace(" ","");
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				iEcartHeure = Integer.parseInt(ecartHeure);
    				iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) + iEcartMin;
     
    				 logger.debug("ecartMin POSITIF : "+ecartMin);
     
    			}else{
    				logger.debug("Presence du tiret VALEUR NEGATIVE ");
     
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				ecartHeure = ecartHeure.replace("-","");
    				ecartHeure = ecartHeure.replace(" ","");
     
    				String ecartMinin = ecartTemps[1];
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				 iEcartHeure = Integer.parseInt(ecartHeure);
    				 iEcartHeure = 0 - iEcartHeure;
     
    				 iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) - iEcartMin;
     
     
    				logger.debug("ecartMin NEGATIVE : "+ecartMin);
     
    			}
     
     
     
     
     
    			ecartConstate += ecartMin;
     
    			//String ecartAenregistrer = this.getTotalHours(intEcartAenregistrer);
    			//moisDis.setEcart(ecartAenregistrer);
     
     
    		    }
     
     
    		ecartConstate = ecartConstate - heureSuppAreporte;
    		logger.debug("** ecartConstate ** : "+ecartConstate);
     
    		String dureeTravailRealise = getTotalHours(dureeDeTravAnneeFait);
    		moisDis.setTotalTravMois(dureeTravailRealise);
    		logger.debug("!! dureeTravailRealise !!" + dureeTravailRealise);
     
     
    		String dureeTravailArealise = getTotalHours(dureeDeTravAnneeAfaire);
    		logger.debug("!! dureeTravailArealise !!" + dureeTravailArealise);
    		moisDis.setTotalTravAfaire(dureeTravailArealise);
     
    		String ecartConstateHeure = getTotalHours(ecartConstate);
    		moisDis.setEcart(ecartConstateHeure);
    		logger.debug("!! ecartConstateHeure !! " + ecartConstateHeure);
     
     
     
    		idPersonneOld = idPers;
     
    		 moisDips.add(moisDis);
     
    		 return moisDips;
     
     
    		}




    Je pense que je dois rajouter une condition tel que cela mais je ne sais pas où ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(idPers != idPersonneOld && idPersonneOld != 0){	
     
     
    		    }
    Je vous remercie infiniment
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    J'ai pas eu le temps de tout lire mais pour
    Je n'arrive pas à calculer les horaires par personne. C'est à dire que la requête me retourne tous les horaires des personnes du service concernée, mais que je n'arrive pas à calculer les horaires par personnes.
    As-tu essayé une requête dans le genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select ..., sum(nom_colonne_horraire), ... from ... where id_service=2 group by id_personne
    .

    A+.

  3. #3
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup pour votre réponse.

    La requête est bonne, le soucis c'est dans le traitement des résultats.

    Je pense qu'il me manque juste une conditions que je ne sais pas où mettre.

    Il faudrait que j'arrive à créer un objet personne à chaque fois que j'ai une nouvelle personne qui apparaît dans la liste (cf l'image) et que les calcules se refont pour chaque nouvelle personne.

  4. #4
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par leara500 Voir le message
    Merci beaucoup pour votre réponse.

    La requête est bonne, le soucis c'est dans le traitement des résultats.

    Je pense qu'il me manque juste une conditions que je ne sais pas où mettre.

    Il faudrait que j'arrive à créer un objet personne à chaque fois que j'ai une nouvelle personne qui apparaît dans la liste (cf l'image) et que les calcules se refont pour chaque nouvelle personne.
    Bonjour leara500,

    Ce que andry.aime est entrain de te dire à mon avis, c'est que tu peux utiliser une requête SQL simple pour retourner la liste des personnes selon les conditions qu'on te demande.

    Avec une requête telle que l'a écrit andry.aime, tu n'as pas besoin d'un algorithme à faire dans ton appli en java, ton SGBD va te faire la somme des horaires et te regrouper tous ça par service et personnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ..., sum(nom_colonne_horraire), ... from ... where conditions  group by id_service, id_personne
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  5. #5
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci beaucoup de vos réponses. Le soucis, c'est qu'il y a plein de calculs qui sont gérer en Java... C'est pour cela que j'ai besoin de trouver la bonne condition pour effectuer les calcules.

    J'aimerai que tant que c'est la meme personne, les calculs de fassent. Lorsque l'on change de personne, on refait les calculs en créant une nouvelle personne...

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Tu peux utiliser un Map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Map<Integer, Double> sum = new HashMap<Integer, Double>();
    while ( results.hasNext() ) {
    ...
    if(sum.containsKey(idPers)){
    	sum.put(idPers, nbHeure+sum.get(idPers));
    }else{
    	sum.put(idPers, nbHeure);
    }
    }
    A+.

  7. #7
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci infiniment pour votre réponse mais je n'ai rien compris TToTT YoY Je l'avoue, j'ai honte, mais j'ai toujours eu du mal avec les Map.

    Il n'existe pas une condition toutes simple pour faire ceux que je souhaite, c'est à dire tant que les idPersonnes sont identique, créer un objet personne, et y mettre le total des résultats ?

    Nom : Extrait resultat requete.jpg
Affichages : 230
Taille : 337,1 Ko



    J'ai cru qu'en rajoutant cette condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      if((idPers == idPersonneOld)||(idPersonneOld==0)){
    cela aurait pu marché mais ce n'est pas le cas. En effet, cette requête me renvoi 28 réponses qui concernent 4 personne différentes. La fonction m'a créé 7 personne au lieu de 4

    Auriez vous d'autre idée s'il vous plait. Je vous en remercie d'avance...




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
     
    		Iterator results = this.getHibernateTemplate().find(queryString, params).iterator();
    		while ( results.hasNext() ) {
     
     
    		    Object[] row = (Object[]) results.next();
     
    		    Integer idMois  = (Integer) row[0];
     
     
     
     
     
     
    		    int idPers  = (Integer) row[1];
     
     
    		    if((idPers == idPersonneOld)||(idPersonneOld==0)){	
     
     
     
    		    System.out.println("idPersonneOld : "+idPersonneOld);
    		    System.out.println("idPers : "+idPers);
     
     
    		    	int nbMoisCompte = 0;
     
    		    	Moisdisp moisDis = new Moisdisp();
     
    		    	 moisDis.setIdMois(idMois);
    		    	 moisDis.setIdPers(idPers);
     
     
    		    	int ecartConstate = 0;
    				int dureeDeTravAnneeFait = 0;
    				int dureeDeTravAnneeAfaire = 0 ;
    				int heureSuppAreporte = 0;
     
    				int nbCA = 0;
    				int nbCT = 0;
    				int nbFer = 0;
    				int nbCMal = 0;
    				int nbCAnc = 0;
    				int nbCRecup = 0;
    				int nbCExc = 0;
    				int nbCParent = 0;
    				int nbCFormation = 0 ;
    				int nbCRecupFerie = 0 ;
    				int nbCDelegation = 0;
    				int nbCIntemperie = 0;
     
    				int nbCSolidarite = 0;
    				int nbCEnfantMalade = 0;
    				int nbCNonJustif = 0;
     
    				int nbSoldeCPaye = 0;
    				int nbSoldeCAnciennete = 0;
    				int nbSoldeCTrimestriel = 0;	
     
     
     
     
     
     
     
    		    String mois = (String) row[2];
    		    logger.debug("nom mois du moisDisp : "+mois);
    		    moisDis.setNomMois(mois);
     
    		    String anneeTrouv = (String) row[3];
    		    moisDis.setAnnee(anneeTrouv);
     
     
    		    String totalTravMois = (String)row[4];
    		    moisDis.setTotalTravMois(totalTravMois);
     
    		    logger.debug("totalTravMois !!!!!! : "+totalTravMois);
    		    //Pour additionner le total qui doit être par an
     
    			String valeurDureeJourAdecoupe = ":";
    			if(!totalTravMois.contains("Report")){
    				if(totalTravMois != null){
    					String [] totalTravMoisTemps = totalTravMois.split(valeurDureeJourAdecoupe);
    					String totalTravMoisheure = totalTravMoisTemps[0];
    					totalTravMoisheure = totalTravMoisheure.replace(" ","");
     
    					String totalTravMoismin = totalTravMoisTemps[1];
    					totalTravMoismin = totalTravMoismin.replace(" ","");
     
    					int iTotalTravMoisHeure = Integer.parseInt(totalTravMoisheure);
    					int iTotalTravMoisMin = Integer.parseInt(totalTravMoismin);
     
    					int dureeDeTravFait = (iTotalTravMoisHeure * 60) + iTotalTravMoisMin;	
     
    					dureeDeTravAnneeFait += dureeDeTravFait;
    					logger.debug("dureeDeTravAnneeFait :"+dureeDeTravAnneeFait);
    				}
     
    			}
     
     
    		    Integer nbCannuel  = (Integer) row[5];
    		    logger.debug("nbCannuel :"+nbCannuel);
    			if(nbCannuel != null && !"".equals(nbCannuel) && !"0".equals(mois)){
    				  nbCA += nbCannuel; 
    				  moisDis.setNbCannuel(nbCA);
    			}
     
    		    Integer nbCt  = (Integer) row[6];
    		    if(nbCt != null && !"0".equals(mois)){
    			    nbCT += nbCt;
    			    moisDis.setNbCt(nbCT);
    		    }
     
    		    Integer nbFerie  = (Integer) row[7];
    		    if(nbFerie != null && !"0".equals(mois)){
    			    nbFer += nbFerie;
    			    moisDis.setNbFerie(nbFer);
    		    }
     
    		    Integer nbMaladie  = (Integer) row[8];
    		    if(nbMaladie != null && !"0".equals(mois)){
    		    	nbCMal += nbMaladie;
    		    	moisDis.setNbMaladie(nbCMal);
    		    }
     
    		    Integer nbCancien  = (Integer) row[9];
    		    if(nbCancien != null && !"0".equals(mois)){
    		    	nbCAnc += nbCancien;
    		    	moisDis.setNbCancien(nbCAnc);
    		    }
     
    		    Integer nbRecup  = (Integer) row[10];
    		    if(nbRecup != null && !"0".equals(mois)){
    		    	nbCRecup += nbRecup;
    		    	moisDis.setNbRecup(nbCRecup);
    		    }
     
     
    		    Integer nbExcep  = (Integer) row[11];
    		    if(nbExcep != null && !"0".equals(mois)){
    		    	nbCExc += nbExcep;
    		    	moisDis.setNbExcep(nbCExc);
    		    }
     
     
    		    Integer nbFamil  = (Integer) row[12];
    		    if(nbFamil != null && !"0".equals(mois)){
    		    	nbCParent += nbFamil;
    		    	moisDis.setNbFamil(nbCParent);
    		    }
     
     
    		    Integer nbFormation  = (Integer) row[17];
    		    if(nbFormation != null && !"0".equals(mois)){
    		    	nbCFormation += nbFormation;
    		    	moisDis.setNbFormation(nbCFormation);
    		    	logger.debug("nbCFormation : "+nbCFormation);
    		    }
     
     
     
    		    Integer nbRecupFerie  = (Integer) row[16];
    		    if(nbRecupFerie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCRecupFerie += nbRecupFerie;
    		    	moisDis.setNbRecupFerie(nbCRecupFerie);
    		    	logger.debug("nbCRecupFerie : "+nbCRecupFerie);
    		    }
     
     
    		    Integer nbDelegation  = (Integer) row[18];
    		    if(nbDelegation != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCDelegation += nbDelegation;
    		    	moisDis.setNbDelegation(nbCDelegation);
    		    	logger.debug("nbCDelegation : "+nbCDelegation);
    		    }
     
    		    Integer nbIntemperie  = (Integer) row[19];
    		    if(nbIntemperie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCIntemperie += nbIntemperie;
    		    	moisDis.setNbIntemperie(nbCIntemperie);
    		    	logger.debug("nbCIntemperie : "+nbCIntemperie);
    		    }
     
    		    Integer nbSolidarite  = (Integer) row[20];
    		    if(nbSolidarite != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCSolidarite += nbSolidarite;
    		    	moisDis.setNbSolidarite(nbCSolidarite);
    		    	logger.debug("nbCSolidarite : "+nbCSolidarite);
    		    }
     
    		    Integer nbEnfantMalade  = (Integer) row[21];
    		    if(nbEnfantMalade != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCEnfantMalade += nbEnfantMalade;
    		    	moisDis.setNbEnfantMalade(nbCEnfantMalade);
    		    	logger.debug("nbCEnfantMalade : "+nbCEnfantMalade);
    		    }
     
    		    Integer nbNonJustif  = (Integer) row[22];
    		    if(nbNonJustif != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCNonJustif += nbNonJustif;
    		    	moisDis.setNbNonJustif(nbCNonJustif);
    		    	logger.debug("nbCNonJustif : "+nbCNonJustif);
    		    }
     
    		    Integer nbSoldePaye  = (Integer) row[23];
    		    if(nbSoldePaye != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCPaye += nbSoldePaye;
    		    	moisDis.setNbSoldeCPaye(nbSoldeCPaye);
    		    	logger.debug("nbSoldeCPaye : "+nbSoldeCPaye);
    		    }
     
     
    		    Integer nbSoldeAnc  = (Integer) row[24];
    		    if(nbSoldeAnc != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCAnciennete += nbSoldeAnc;
    		    	moisDis.setNbSoldeCAnciennete(nbSoldeCAnciennete);
    		    	logger.debug("nbSoldeCAnciennete : "+nbSoldeCAnciennete);
    		    }
     
    		    Integer nbSoldeTri  = (Integer) row[25];
    		    if(nbSoldeTri != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCTrimestriel += nbSoldeTri;
    		    	moisDis.setNbSoldeCTrimestriel(nbSoldeCTrimestriel);
    		    	logger.debug("nbSoldeCTrimestriel : "+nbSoldeCTrimestriel);
    		    }		    
     
     
    		    String nomPersonne = (String) row [26];
    		    moisDis.setNomPersonne(nomPersonne);
     
    		    String heureTotalAfaire = (String)row[13];
    		    moisDis.setTotalTravAfaire(heureTotalAfaire);
    		    logger.debug("heureTotalAfaire :"+heureTotalAfaire);
    		    //Pour additionner le total des heures a réalisée qui doit être par an
    			if( !"".equals(heureTotalAfaire) && heureTotalAfaire != null){
    				String [] heureTotalAfaireTemps = heureTotalAfaire.split(valeurDureeJourAdecoupe);
    				String heureTotalAfaireHeure = heureTotalAfaireTemps[0];
     
    				String heureTotalAfaireMin = heureTotalAfaireTemps[1];
     
    				heureTotalAfaireHeure = heureTotalAfaireHeure.replace(" ","");
    				heureTotalAfaireMin = heureTotalAfaireMin.replace(" ","");
     
     
    				int iheureTotalAfaireHeure = Integer.parseInt(heureTotalAfaireHeure);
    				int iheureTotalAfaireMin = Integer.parseInt(heureTotalAfaireMin);
     
    				int dureeDeTravAfaire = (iheureTotalAfaireHeure * 60) + iheureTotalAfaireMin;	
     
    				dureeDeTravAnneeAfaire += dureeDeTravAfaire;
    				logger.debug("dureeDeTravAnneeAfaire :"+dureeDeTravAnneeAfaire);
    			}
     
     
     
     
    		    String heureSupp = (String)row[15];
    		    moisDis.setNbHeureSuppPaye(heureSupp);
    		    logger.debug("heureSupp : "+heureSupp);
    		    //Pour effectue le calcul avec les heure supp et les écart 
    		    if(heureSupp != null){
    				String [] heureSupTemps = heureSupp.split(valeurDureeJourAdecoupe);
    				String heureSupHeure = heureSupTemps[0];
    				String heureSupMin = heureSupTemps[1];
     
    				heureSupHeure = heureSupHeure.replace(" ","");
    				heureSupMin = heureSupMin.replace(" ","");
     
     
    				int iheureSuppHeure = Integer.parseInt(heureSupHeure);
    				int iheureSuppMin = Integer.parseInt(heureSupMin);
     
     
     
    				heureSuppAreporte = heureSuppAreporte + (iheureSuppHeure * 60) + iheureSuppMin;	
     
    				//heureSuppAreporte += heureSuppAreporte;
    				logger.debug("heureSuppAreporte :"+heureSuppAreporte);
    			}
     
     
    		    //On transmforme l'ecart en min 
    		    String ecart = (String)row[14];
    		    moisDis.setEcart(ecart);
    		    logger.debug("ecart :"+ecart);
     
    		    int valeurNegative = ecart.indexOf("-");
     
    		    int iEcartHeure = 0 ;
    			int iEcartMin = 0 ;
     
    			int ecartMin = 0 ;
     
    		    if(valeurNegative == -1){
    				logger.debug("***** Absence du tiret VALEUR POSITIVE ");
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				String ecartMinin = ecartTemps[1];
     
     
    				ecartHeure = ecartHeure.replace(" ","");
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				iEcartHeure = Integer.parseInt(ecartHeure);
    				iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) + iEcartMin;
     
    				 logger.debug("ecartMin POSITIF : "+ecartMin);
     
    			}else{
    				logger.debug("Presence du tiret VALEUR NEGATIVE ");
     
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				ecartHeure = ecartHeure.replace("-","");
    				ecartHeure = ecartHeure.replace(" ","");
     
    				String ecartMinin = ecartTemps[1];
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				 iEcartHeure = Integer.parseInt(ecartHeure);
    				 iEcartHeure = 0 - iEcartHeure;
     
    				 iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) - iEcartMin;
     
     
    				logger.debug("ecartMin NEGATIVE : "+ecartMin);
     
    			}
     
     
     
     
     
    			ecartConstate += ecartMin;
     
    			//String ecartAenregistrer = this.getTotalHours(intEcartAenregistrer);
    			//moisDis.setEcart(ecartAenregistrer);
     
     
     
     
     
     
     
     
    			ecartConstate = ecartConstate - heureSuppAreporte;
    			logger.debug("** ecartConstate ** : "+ecartConstate);
     
    			String dureeTravailRealise = getTotalHours(dureeDeTravAnneeFait);
    			moisDis.setTotalTravMois(dureeTravailRealise);
    			logger.debug("!! dureeTravailRealise !!" + dureeTravailRealise);
     
     
    			String dureeTravailArealise = getTotalHours(dureeDeTravAnneeAfaire);
    			logger.debug("!! dureeTravailArealise !!" + dureeTravailArealise);
    			moisDis.setTotalTravAfaire(dureeTravailArealise);
     
    			String ecartConstateHeure = getTotalHours(ecartConstate);
    			moisDis.setEcart(ecartConstateHeure);
    			logger.debug("!! ecartConstateHeure !! " + ecartConstateHeure);
     
     
     
    			idPersonneOld = idPers;
    			nbMoisCompte +=1 ;
     
    			moisDips.add(moisDis);
     
    			System.out.println("idPersonneOld : "+idPersonneOld);
    			System.out.println("idPers : "+idPers);
    			System.out.println("nbMoisCompte : "+nbMoisCompte);
     
     
    		    }
     
     
     
     
     
    		}

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Citation Envoyé par leara500 Voir le message
    Je l'avoue, j'ai honte, mais j'ai toujours eu du mal avec les Map.
    https://java.developpez.com/faq/java...-dictionnaires

    Citation Envoyé par leara500 Voir le message
    Il n'existe pas une condition toutes simple pour faire ceux que je souhaite, c'est à dire tant que les idPersonnes sont identique, créer un objet personne, et y mettre le total des résultats ?
    La solution que j'ai proposé est déjà simple. Quand l'id existe déjà, ça fait l'addition avec la valeur existante, sinon on ajoute dans la Map. A la fin de la boucle tu auras pour chaque id, la somme des heures dans le Map.

    A+.

  9. #9
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Boujour,

    Il faudrait que j'arrive à créer un objet personne à chaque fois que j'ai une nouvelle personne qui apparaît dans la liste (cf l'image) et que les calcules se refont pour chaque nouvelle personne.
    D'après ce que j'ai compris, tu veux avoir un récapitulatif pour chaque personne.
    Est ce que ce traitement concerne toutes les personnes ou bien uniquement les personnes qui apparaissent dans ta tables horaires?

    Bon il faut dire que peu importe le choix que tu adoptes (requête ou bien calcul cote java ) il faut que tu travail ton algorithme pour ne pas perdre de temps à boucler inutilement pour atteindre ton objectif.

    Premièrement , un objet personne ne peut pas contenir un bilan de toutes les données de la base.
    Donc il faut créer un objet que tu pourras appeler userRecap si tu veux qui contiendra une référence à la ressource , un mois et une année et l'ensemble des données fédérées.Ta clé primaire sera donc une clé composée pour pourvoir a chaque fois récupérer un seul élément (je ne sais même pas si c'est utile car je ne connais pas tes tables ni ta BD).

    Bref je pense qu'on va un peu s’éloigner ou bien compliquer les choses mais cela peut représenter pour toi un nouveau chantier de reflexion.

    Il faut , je pense , tout simplement boucler sur les personnes et faire les traitements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Personne pers: listDePersonnes) {
     //Faire tes traitements et tes calculs
    }
    Pour chaque personne il faudra récupérer de ton résultat les données à calculer et à sauvegarder dans ton objet userRecap (voir plus haut).

    Le soucis a traiter est que tu va devoir créer des fonctions pour récupérer les données de chaque personne ou bien exécuter ta requête dans la boucle (trop d'aller-retour vers ta base donc déconseillé) ou alors,utiliser la force des map qui sont sous forme de <cle,valeur> pour une utilisation simple donc dans ton cas tu aura <cle,listdevaleurs> et donc l'avantage est que tu pourra accéder aux valeurs de la personne sur laquelle tu boucle grâce à la clé.

    Voir cours sur les map.

    Comme te l'a très bien expliqué @andry.aime tu pourras faire ce que tu veux (si tu veux une somme c'est bon sinon une liste de sommes).

    Donc première chose changer ton approche.
    Deuxième chose ,aller consulter les cours dont tu as besoin et ne pas avoir peur des Map qui sont très simples à utiliser.
    Troisième chose avancer un peu et revenir poster dans ta discussion.

    Au passage, l'idée de @andry.aime est très bonne aussi: boucler sur le résultat de ta requête, à chaque itération, faire les calculs et en sortant de la boucle(itération) stocker les valeurs dans une Map dont la clé est l'id de la personne et l'année(concaténation ou objet) donc si tu recroise dans une autre itération la même personne, alors tu ajoute tes calculs dans la Map à l'indice souhaité.

    Attention: je vois que tu as des mois donc a toi de consulter les specs: si le recap est annuel alors pas grave sinon il faudra modifier ta clé en utilisant une concatenation de l'id personne ,l'année et le mois pour avoir des données correctes.


    J’espère que ce message n'est pas hors sujet et pourras t'offrir une piste de reflexion.

    Bon courage

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour,

    cela aurait pu marché mais ce n'est pas le cas. En effet, cette requête me renvoi 28 réponses qui concernent 4 personne différentes. La fonction m'a créé 7 personne au lieu de 4
    Le fait de comparer les idpersonne de cette manière fait que tu auras plus de personnes que prévu car tu compare les id successifs dans ton résultat.

    SI tu as TOTO TOTO TITI TOTO ALORS tu auras 3 personnes créées au lieu de deux ce qui est logique donc le test est inutile à part si tu as un résultat trié.

    Je ne sais pas si ma reponse est juste car ton code a changé entre tes deux post :JE NE VOIS PLUS DE

    Bon courage

  11. #11
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Merci infiniment pour votre aide.

    @johnlobs> Les résultats des personnes sont triés. Donc ça va. ouf

    J'ai lu la documentation et j'avoue que j'ai eu du mal à tout comprendre...

    j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
     
    public List<Moisdisp> getMoisDispByIdUniteSoldeVacanceComptage(Integer unite, String anneeDebut, String AnneeFin) {
    		List<Moisdisp> listMoisDipsParPersonne =  new ArrayList<Moisdisp>(); 
    		StringBuffer qString = new StringBuffer();
     
     
     
    		if(unite != 6){
    			qString.append(" select  moisdisp.idMois, moisdisp.idPers, moisdisp.nomMois, moisdisp.annee, moisdisp.totalTravMois, moisdisp.nbCannuel, ");
    			qString.append(" moisdisp.nbCt, moisdisp.nbFerie, moisdisp.nbMaladie, moisdisp.nbCancien, moisdisp.nbRecup, ");
    			qString.append(" moisdisp.nbExcep, moisdisp.nbFamil, moisdisp.totalTravAfaire, moisdisp.ecart, moisdisp.nbHeureSuppPaye,  moisdisp.nbFormation, moisdisp.nbRecupFerie, ");
    			qString.append(" moisdisp.nbDelegation, moisdisp.nbIntemperie, moisdisp.nbSolidarite, moisdisp.nbEnfantMalade, moisdisp.nbNonJustif, moisdisp.nbSoldeCPaye, moisdisp.nbSoldeCAnciennete, ");
    			qString.append("moisdisp.nbSoldeCTrimestriel, personne.nom  ");  
    			qString.append("from	Moisdisp AS moisdisp, Personne as personne, Uniteservice as uniteservice, Unite as unite ");
    			qString.append("where  moisdisp.idPers = personne.idPersonne and personne.service.idService = uniteservice.service.idService ");
    			qString.append("and uniteservice.unite.idUnite = unite.idUnite ");
    			qString.append("and unite.idUnite = ? ");
    			qString.append(" AND ( (moisdisp.annee = ? AND moisdisp.nomMois > 5)OR (moisdisp.annee = ?   AND    moisdisp.nomMois < 6) ) ");
    			qString.append(" and moisdisp.nomMois !=0 ");
    			qString.append("ORDER BY moisdisp.idPers, moisdisp.annee, moisdisp.nomMois ASC");
    		}else{
    			qString.append(" select  moisdisp.idMois, moisdisp.idPers, moisdisp.nomMois, moisdisp.annee, moisdisp.totalTravMois, moisdisp.nbCannuel, ");
    			qString.append(" moisdisp.nbCt, moisdisp.nbFerie, moisdisp.nbMaladie, moisdisp.nbCancien, moisdisp.nbRecup, ");
    			qString.append(" moisdisp.nbExcep, moisdisp.nbFamil, moisdisp.totalTravAfaire, moisdisp.ecart, moisdisp.nbHeureSuppPaye,  moisdisp.nbFormation, moisdisp.nbRecupFerie, ");
    			qString.append(" moisdisp.nbDelegation, moisdisp.nbIntemperie, moisdisp.nbSolidarite, moisdisp.nbEnfantMalade, moisdisp.nbNonJustif, moisdisp.nbSoldeCPaye, moisdisp.nbSoldeCAnciennete, ");
    			qString.append("moisdisp.nbSoldeCTrimestriel, personne.nom  ");  
    			qString.append("from	Moisdisp AS moisdisp, Personne as personne, Uniteservice as uniteservice, Unite as unite ");
    			qString.append("where  moisdisp.idPers = personne.idPersonne and personne.service.idService = uniteservice.service.idService ");
    			qString.append("and uniteservice.unite.idUnite = unite.idUnite ");
    			qString.append(" AND ( (moisdisp.annee = ? AND moisdisp.nomMois > 5)OR (moisdisp.annee = ?   AND    moisdisp.nomMois < 6) ) ");
    			qString.append(" and moisdisp.nomMois !=0 ");
    			qString.append("ORDER BY moisdisp.idPers, moisdisp.annee, moisdisp.nomMois ASC");
     
    		}
     
     
     
     
     
     
    			Iterator results =null;
     
    			if(unite != 6){
    				logger.debug("***monthParam != 0");
    				Object[] params = {unite, anneeDebut, AnneeFin};
    				results = this.getHibernateTemplate().find(qString.toString(), params).iterator();
    			}else{
    				logger.debug("*DebutPeriode != null ****");
    				Object[] params = {anneeDebut, AnneeFin};
    				results = this.getHibernateTemplate().find(qString.toString(), params).iterator();
     
    			}
     
    		int idPersonneOld = 0;
     
     
     
     
    		//int idPers = 0;
    		Moisdisp moisDipsPersonne = new Moisdisp();
    		ArrayList<HashMap> listeMap = new ArrayList<HashMap>();
     
    		Map<Integer, Moisdisp> sum = new HashMap<Integer, Moisdisp>();
    		//Iterator results = this.getHibernateTemplate().find(queryString, params).iterator();
    		while ( results.hasNext() ) {
     
     
    		    Object[] row = (Object[]) results.next();
     
    		    Integer idMois  = (Integer) row[0];
     
    		    int idPers  = (Integer) row[1];
     
    		    /*if(idPers != idPersonneOld && idPersonneOld != 0){			    
    		    	moisDipsPersonne.setListe(listeMap);
    		    	listMoisDipsParPersonne.add(moisDipsPersonne);
    		    }
    		    	*/    
     
     
    		    	int nbMoisCompte = 0;
     
    		    	Moisdisp moisDis = new Moisdisp();
     
    		    	 moisDis.setIdMois(idMois);
    		    	 moisDis.setIdPers(idPers);
     
     
    		    	int ecartConstate = 0;
    				int dureeDeTravAnneeFait = 0;
    				int dureeDeTravAnneeAfaire = 0 ;
    				int heureSuppAreporte = 0;
     
    				int nbCA = 0;
    				int nbCT = 0;
    				int nbFer = 0;
    				int nbCMal = 0;
    				int nbCAnc = 0;
    				int nbCRecup = 0;
    				int nbCExc = 0;
    				int nbCParent = 0;
    				int nbCFormation = 0 ;
    				int nbCRecupFerie = 0 ;
    				int nbCDelegation = 0;
    				int nbCIntemperie = 0;
     
    				int nbCSolidarite = 0;
    				int nbCEnfantMalade = 0;
    				int nbCNonJustif = 0;
     
    				int nbSoldeCPaye = 0;
    				int nbSoldeCAnciennete = 0;
    				int nbSoldeCTrimestriel = 0;	
     
     
     
     
     
     
     
    		    String mois = (String) row[2];
    		    logger.debug("nom mois du moisDisp : "+mois);
    		    moisDis.setNomMois(mois);
     
    		    String anneeTrouv = (String) row[3];
    		    moisDis.setAnnee(anneeTrouv);
     
     
    		    String totalTravMois = (String)row[4];
    		    moisDis.setTotalTravMois(totalTravMois);
     
    		    logger.debug("totalTravMois !!!!!! : "+totalTravMois);
    		    //Pour additionner le total qui doit être par an
     
    			String valeurDureeJourAdecoupe = ":";
    			if(!totalTravMois.contains("Report")){
    				if(totalTravMois != null){
    					String [] totalTravMoisTemps = totalTravMois.split(valeurDureeJourAdecoupe);
    					String totalTravMoisheure = totalTravMoisTemps[0];
    					totalTravMoisheure = totalTravMoisheure.replace(" ","");
     
    					String totalTravMoismin = totalTravMoisTemps[1];
    					totalTravMoismin = totalTravMoismin.replace(" ","");
     
    					int iTotalTravMoisHeure = Integer.parseInt(totalTravMoisheure);
    					int iTotalTravMoisMin = Integer.parseInt(totalTravMoismin);
     
    					int dureeDeTravFait = (iTotalTravMoisHeure * 60) + iTotalTravMoisMin;	
     
    					dureeDeTravAnneeFait += dureeDeTravFait;
    					logger.debug("dureeDeTravAnneeFait :"+dureeDeTravAnneeFait);
    				}
     
    			}
     
     
    		    Integer nbCannuel  = (Integer) row[5];
    		    logger.debug("nbCannuel :"+nbCannuel);
    			if(nbCannuel != null && !"".equals(nbCannuel) && !"0".equals(mois)){
    				  nbCA += nbCannuel; 
    				  moisDis.setNbCannuel(nbCA);
    			}
     
    		    Integer nbCt  = (Integer) row[6];
    		    if(nbCt != null && !"0".equals(mois)){
    			    nbCT += nbCt;
    			    moisDis.setNbCt(nbCT);
    		    }
     
    		    Integer nbFerie  = (Integer) row[7];
    		    if(nbFerie != null && !"0".equals(mois)){
    			    nbFer += nbFerie;
    			    moisDis.setNbFerie(nbFer);
    		    }
     
    		    Integer nbMaladie  = (Integer) row[8];
    		    if(nbMaladie != null && !"0".equals(mois)){
    		    	nbCMal += nbMaladie;
    		    	moisDis.setNbMaladie(nbCMal);
    		    }
     
    		    Integer nbCancien  = (Integer) row[9];
    		    if(nbCancien != null && !"0".equals(mois)){
    		    	nbCAnc += nbCancien;
    		    	moisDis.setNbCancien(nbCAnc);
    		    }
     
    		    Integer nbRecup  = (Integer) row[10];
    		    if(nbRecup != null && !"0".equals(mois)){
    		    	nbCRecup += nbRecup;
    		    	moisDis.setNbRecup(nbCRecup);
    		    }
     
     
    		    Integer nbExcep  = (Integer) row[11];
    		    if(nbExcep != null && !"0".equals(mois)){
    		    	nbCExc += nbExcep;
    		    	moisDis.setNbExcep(nbCExc);
    		    }
     
     
    		    Integer nbFamil  = (Integer) row[12];
    		    if(nbFamil != null && !"0".equals(mois)){
    		    	nbCParent += nbFamil;
    		    	moisDis.setNbFamil(nbCParent);
    		    }
     
     
    		    Integer nbFormation  = (Integer) row[17];
    		    if(nbFormation != null && !"0".equals(mois)){
    		    	nbCFormation += nbFormation;
    		    	moisDis.setNbFormation(nbCFormation);
    		    	logger.debug("nbCFormation : "+nbCFormation);
    		    }
     
     
     
    		    Integer nbRecupFerie  = (Integer) row[16];
    		    if(nbRecupFerie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCRecupFerie += nbRecupFerie;
    		    	moisDis.setNbRecupFerie(nbCRecupFerie);
    		    	logger.debug("nbCRecupFerie : "+nbCRecupFerie);
    		    }
     
     
    		    Integer nbDelegation  = (Integer) row[18];
    		    if(nbDelegation != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCDelegation += nbDelegation;
    		    	moisDis.setNbDelegation(nbCDelegation);
    		    	logger.debug("nbCDelegation : "+nbCDelegation);
    		    }
     
    		    Integer nbIntemperie  = (Integer) row[19];
    		    if(nbIntemperie != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCIntemperie += nbIntemperie;
    		    	moisDis.setNbIntemperie(nbCIntemperie);
    		    	logger.debug("nbCIntemperie : "+nbCIntemperie);
    		    }
     
    		    Integer nbSolidarite  = (Integer) row[20];
    		    if(nbSolidarite != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCSolidarite += nbSolidarite;
    		    	moisDis.setNbSolidarite(nbCSolidarite);
    		    	logger.debug("nbCSolidarite : "+nbCSolidarite);
    		    }
     
    		    Integer nbEnfantMalade  = (Integer) row[21];
    		    if(nbEnfantMalade != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCEnfantMalade += nbEnfantMalade;
    		    	moisDis.setNbEnfantMalade(nbCEnfantMalade);
    		    	logger.debug("nbCEnfantMalade : "+nbCEnfantMalade);
    		    }
     
    		    Integer nbNonJustif  = (Integer) row[22];
    		    if(nbNonJustif != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbCNonJustif += nbNonJustif;
    		    	moisDis.setNbNonJustif(nbCNonJustif);
    		    	logger.debug("nbCNonJustif : "+nbCNonJustif);
    		    }
     
    		    Integer nbSoldePaye  = (Integer) row[23];
    		    if(nbSoldePaye != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCPaye += nbSoldePaye;
    		    	moisDis.setNbSoldeCPaye(nbSoldeCPaye);
    		    	logger.debug("nbSoldeCPaye : "+nbSoldeCPaye);
    		    }
     
     
    		    Integer nbSoldeAnc  = (Integer) row[24];
    		    if(nbSoldeAnc != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCAnciennete += nbSoldeAnc;
    		    	moisDis.setNbSoldeCAnciennete(nbSoldeCAnciennete);
    		    	logger.debug("nbSoldeCAnciennete : "+nbSoldeCAnciennete);
    		    }
     
    		    Integer nbSoldeTri  = (Integer) row[25];
    		    if(nbSoldeTri != null && !"0".equals(mois)){
    		    	logger.debug("Cas du mois Zero");
    		    	nbSoldeCTrimestriel += nbSoldeTri;
    		    	moisDis.setNbSoldeCTrimestriel(nbSoldeCTrimestriel);
    		    	logger.debug("nbSoldeCTrimestriel : "+nbSoldeCTrimestriel);
    		    }		    
     
     
    		    String nomPersonne = (String) row [26];
    		    moisDis.setNomPersonne(nomPersonne);
     
    		    String heureTotalAfaire = (String)row[13];
    		    moisDis.setTotalTravAfaire(heureTotalAfaire);
    		    logger.debug("heureTotalAfaire :"+heureTotalAfaire);
    		    //Pour additionner le total des heures a réalisée qui doit être par an
    			if( !"".equals(heureTotalAfaire) && heureTotalAfaire != null){
    				String [] heureTotalAfaireTemps = heureTotalAfaire.split(valeurDureeJourAdecoupe);
    				String heureTotalAfaireHeure = heureTotalAfaireTemps[0];
     
    				String heureTotalAfaireMin = heureTotalAfaireTemps[1];
     
    				heureTotalAfaireHeure = heureTotalAfaireHeure.replace(" ","");
    				heureTotalAfaireMin = heureTotalAfaireMin.replace(" ","");
     
     
    				int iheureTotalAfaireHeure = Integer.parseInt(heureTotalAfaireHeure);
    				int iheureTotalAfaireMin = Integer.parseInt(heureTotalAfaireMin);
     
    				int dureeDeTravAfaire = (iheureTotalAfaireHeure * 60) + iheureTotalAfaireMin;	
     
    				dureeDeTravAnneeAfaire += dureeDeTravAfaire;
    				logger.debug("dureeDeTravAnneeAfaire :"+dureeDeTravAnneeAfaire);
    			}
     
     
     
     
    		    String heureSupp = (String)row[15];
    		    moisDis.setNbHeureSuppPaye(heureSupp);
    		    logger.debug("heureSupp : "+heureSupp);
    		    //Pour effectue le calcul avec les heure supp et les écart 
    		    if(heureSupp != null){
    				String [] heureSupTemps = heureSupp.split(valeurDureeJourAdecoupe);
    				String heureSupHeure = heureSupTemps[0];
    				String heureSupMin = heureSupTemps[1];
     
    				heureSupHeure = heureSupHeure.replace(" ","");
    				heureSupMin = heureSupMin.replace(" ","");
     
     
    				int iheureSuppHeure = Integer.parseInt(heureSupHeure);
    				int iheureSuppMin = Integer.parseInt(heureSupMin);
     
     
     
    				heureSuppAreporte = heureSuppAreporte + (iheureSuppHeure * 60) + iheureSuppMin;	
     
    				//heureSuppAreporte += heureSuppAreporte;
    				logger.debug("heureSuppAreporte :"+heureSuppAreporte);
    			}
     
     
    		    //On transmforme l'ecart en min 
    		    String ecart = (String)row[14];
    		    moisDis.setEcart(ecart);
    		    logger.debug("ecart :"+ecart);
     
    		    int valeurNegative = ecart.indexOf("-");
     
    		    int iEcartHeure = 0 ;
    			int iEcartMin = 0 ;
     
    			int ecartMin = 0 ;
     
    		    if(valeurNegative == -1){
    				logger.debug("***** Absence du tiret VALEUR POSITIVE ");
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				String ecartMinin = ecartTemps[1];
     
     
    				ecartHeure = ecartHeure.replace(" ","");
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				iEcartHeure = Integer.parseInt(ecartHeure);
    				iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) + iEcartMin;
     
    				 logger.debug("ecartMin POSITIF : "+ecartMin);
     
    			}else{
    				logger.debug("Presence du tiret VALEUR NEGATIVE ");
     
    				String [] ecartTemps = ecart.split(valeurDureeJourAdecoupe);
    				String ecartHeure = ecartTemps[0];
    				ecartHeure = ecartHeure.replace("-","");
    				ecartHeure = ecartHeure.replace(" ","");
     
    				String ecartMinin = ecartTemps[1];
    				ecartMinin = ecartMinin.replace(" ","");
     
     
    				 iEcartHeure = Integer.parseInt(ecartHeure);
    				 iEcartHeure = 0 - iEcartHeure;
     
    				 iEcartMin = Integer.parseInt(ecartMinin);
     
    				 ecartMin = (iEcartHeure * 60) - iEcartMin;
     
     
    				logger.debug("ecartMin NEGATIVE : "+ecartMin);
     
    			}
     
     
     
     
     
    			ecartConstate += ecartMin;
     
     
    			ecartConstate = ecartConstate - heureSuppAreporte;
    			logger.debug("** ecartConstate ** : "+ecartConstate);
     
    			String dureeTravailRealise = getTotalHours(dureeDeTravAnneeFait);
    			moisDis.setTotalTravMois(dureeTravailRealise);
    			logger.debug("!! dureeTravailRealise !!" + dureeTravailRealise);
     
     
    			String dureeTravailArealise = getTotalHours(dureeDeTravAnneeAfaire);
    			logger.debug("!! dureeTravailArealise !!" + dureeTravailArealise);
    			moisDis.setTotalTravAfaire(dureeTravailArealise);
     
    			String ecartConstateHeure = getTotalHours(ecartConstate);
    			moisDis.setEcart(ecartConstateHeure);
    			logger.debug("!! ecartConstateHeure !! " + ecartConstateHeure);
     
     
     
    			if(sum.containsKey(idPers)){
    				sum.put(idPers, moisDis);
    				System.out.println("moisDis solde CPAYE : "+moisDis.getNbSoldeCPaye());
    			}else{
     
    				Moisdisp moisDis2 = new Moisdisp();
    				sum.put(idPers, moisDis2);
    				System.out.println("moisDis2 solde  **** : "+moisDis2.getNbSoldeCPaye());
    			}
     
     
    			idPersonneOld = idPers;
    			nbMoisCompte +=1 ;
     
    			listMoisDipsParPersonne.add(moisDis);
     
     
     
     
     
    			System.out.println("idPersonneOld : "+idPersonneOld);
    			System.out.println("idPers : "+idPers);
    			System.out.println("nbMoisCompte : "+nbMoisCompte);
     
     
    		    }
     
     
     
     
     
     
     
    		System.out.println("moisDips.size() : "+listMoisDipsParPersonne.size());
    	return listMoisDipsParPersonne;
     
     
    }

    Néanmoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    	if(sum.containsKey(idPers)){
    				sum.put(idPers, moisDis);
    				System.out.println("moisDis solde CPAYE : "+moisDis.getNbSoldeCPaye());
    			}else{
     
    				Moisdisp moisDis2 = new Moisdisp();
    				sum.put(idPers, moisDis2);
    				System.out.println("moisDis2 solde CPAYE **** : "+moisDis2.getNbSoldeCPaye());
    			}
    me renvoie toujours une valeur nulle U_U

  12. #12
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour leara500,

    Je vois que le problème n'est pas réglé.

    Pour mieux avancer je te conseille de réduire le code que tu donne dans la discussion pour permettre au gens de mieux te répondre. Pour cela tu devrais enlever tous les calcul car je pense que cette partie ne pose pas de problème.

    Laisses deux ou trois valeurs a calculer pour nous permettre de rapidement parcourir ton code et aller directement à l'essentiel.

    Je n'ai pas eu le temps de lire tout le code mais je te conseille de travailler avec les mêmes objets que tu initialise en entrant dans chaque itération.
    A la fin de tes calculs tu dois:

    SI l'objet existe ALORS
    -récupérer de ta Map l'objet à l'indice voulu.
    -additionner les nouvelles valeurs aux anciennes
    -ajouter l'objet modifié
    SINON
    -ajouter l'objet à la Map avec l'indice voulu.

    Concernant le test d'existance, il vaut mieu travailler avec les key qu'avec contains qui est plus adaptée pour les List.
    tu peux le faire a travers une boucle mais tu peux aussi aller voir de ce cote et te pencher sur containsKey

    https://docs.oracle.com/javase/7/doc.../util/Map.html

    regardes aussi les autres fonctions de récupération des valeurs V (moisDisp dans ton cas pour additionner les nouvelles valeurs)

    Ne pas oublier les test sur la nullité et isEmpty aussi

    Ajouter des blocs try/catch pour intercepter les exceptions

    Voila

    Bon courage

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Déjà, tu as mal pris mon exemple, à aucun moment tu fais de l'addition (johnlobs a donné une explication de plus). Ensuite, tu n'as jamais affecté la valeur récupéré de NbSoldeCPaye depuis la requête dans moisDis, moisDis.getNbSoldeCPaye() retournera toujours un null et il faut faire attention avec, comme disait johnlobs.

    A+.

  14. #14
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Je reviens vous voir, toujours pour mon problème d'algorithme....

    Finalement, je n'ai pas utilisé les Map car, honnêtement je n'y comprend rien

    Enfin bref, si je viens vous voir, si pour vous dire que je suis toujours confronté à un problème d'algo mais à un autre niveau.

    En effet, j'ai réussi à calculer les informations par personne (ouf).

    Mais (car oui il y a un mais) il ne fonctionne correctement que pour la première personne. Pour les autres personnes, il oublie de comptabiliser le 1er mois à chaque fois T0T (c'est à dire le mois de mai de l'année n) Par contre, il comptabilise tout le reste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    if (!listMoisDipsParPersonne.isEmpty()){
    			int personneCourante = 0;
    			int personneCouranteOld = 0;
     
    			int sumTotalCongePaye = 0;
    			int sumTotalSoldeCongePaye = 0;
    			int sumTotalNbAncien = 0;
    			int sumTotalNbCongeParental = 0 ;
    			int sumTotalNbCt = 0 ;
    			int sumNbDelegation = 0;
    			int sumNbEnfantMalade = 0;
    			int sumNbExcept = 0 ;
    			int sumNbFamil = 0 ;
    			int sumNbFerie = 0;
    			int sumNbFormation = 0;
    			int sumNbMaladie = 0 ;
    			int sumNbRecuperation = 0 ;
    			int sumNbRecupFerie = 0;
     
    			int nbMois = 0;
     
    			Moisdisp moisDis = new Moisdisp();
     
    			Iterator<Moisdisp> iter = listMoisDipsParPersonne.iterator();
    			while (iter.hasNext()) {
    				Moisdisp moisdisplay = (Moisdisp) iter.next();
     
    				personneCourante = moisdisplay.getIdPers();
     
    				if (personneCourante == personneCouranteOld ||  personneCouranteOld == 0 ){
     
    					if(moisdisplay.getNbCannuel() != null) sumTotalCongePaye += moisdisplay.getNbCannuel();
    					if(moisdisplay.getNbSoldeCPaye() != null) sumTotalSoldeCongePaye += moisdisplay.getNbSoldeCPaye();
    					if(moisdisplay.getNbCancien() !=  null) sumTotalNbAncien += moisdisplay.getNbCancien();
    					if(moisdisplay.getNbCongeParental() != null) sumTotalNbCongeParental+= moisdisplay.getNbCongeParental();
    					if(moisdisplay.getNbCt() != null) sumTotalNbCt += moisdisplay.getNbCt();
    					if(moisdisplay.getNbDelegation() != null) sumNbDelegation += moisdisplay.getNbDelegation();
    					if(moisdisplay.getNbEnfantMalade() != null) sumNbEnfantMalade += moisdisplay.getNbEnfantMalade();
    					if(moisdisplay.getNbExcep() != null) sumNbExcept += moisdisplay.getNbExcep();
    					if(moisdisplay.getNbFamil() != null) sumNbFamil += moisdisplay.getNbFamil();	
    					if(moisdisplay.getNbFerie() != null) sumNbFerie +=	moisdisplay.getNbFerie();
    					if(moisdisplay.getNbFormation() != null) sumNbFormation += moisdisplay.getNbFormation();
    					if(moisdisplay.getNbMaladie() != null) sumNbMaladie += moisdisplay.getNbMaladie();
    					if(moisdisplay.getNbRecup() != null) sumNbRecuperation += moisdisplay.getNbRecup();
    					if(moisdisplay.getNbRecupFerie() != null)  sumNbRecupFerie += moisdisplay.getNbRecupFerie();
     
     
     
    					nbMois +=1;
     
     
    					moisDis.setIdPers(moisdisplay.getIdPers());
     
    					moisDis.setNbHeureSuppPaye(moisdisplay.getNbHeureSuppPaye());
     
    					moisDis.setNomPersonne(moisdisplay.getNomPersonne());
    					moisDis.setPrenomPersonne(moisdisplay.getPrenomPersonne());
     
    					moisDis.setNbCannuel(sumTotalCongePaye);
    					moisDis.setNbSoldeCPaye(sumTotalSoldeCongePaye);
    					moisDis.setNbCancien(sumTotalNbAncien);
    					moisDis.setNbCongeParental(sumTotalNbCongeParental);
    					moisDis.setNbCt(sumTotalNbCt);
    					moisDis.setNbDelegation(sumNbDelegation);
    					moisDis.setNbEnfantMalade(sumNbEnfantMalade);
    					moisDis.setNbExcep(sumNbExcept);
    					moisDis.setNbFamil(sumNbFamil);
    					moisDis.setNbFerie(sumNbFerie);
    					moisDis.setNbFormation(sumNbFormation);
    					moisDis.setNbMaladie(sumNbMaladie);
    					moisDis.setNbRecup(sumNbRecuperation);
    					moisDis.setNbRecupFerie(sumNbRecupFerie);
     
    				}
     
    				if ((personneCouranteOld != personneCourante && personneCouranteOld != 0) || !iter.hasNext()){
    					listMoisDipsParPersonne2.add(moisDis);
    					moisDis = new Moisdisp();
     
    					sumTotalCongePaye = 0;
    					sumTotalSoldeCongePaye = 0;
     
    					sumTotalNbAncien = 0;
    					sumTotalNbCongeParental = 0 ;
    					sumTotalNbCt = 0 ;
    					sumNbDelegation = 0;
    					sumNbEnfantMalade = 0;
    					sumNbExcept = 0 ;
    					sumNbFamil = 0 ;
    					sumNbFerie = 0;
    					sumNbFormation = 0;
    					sumNbMaladie = 0;
    					sumNbRecuperation = 0 ;
    					sumNbRecupFerie = 0;
     
    					dureeDeTravAnneeAfaire = 0;
    					dureeDeTravAnneeFait = 0 ;
    					dureeDeTravAnneeEffective = 0;
    					dureeDeTravAnneeDimanche = 0;
    					dureeDeTravAnneeFerie = 0;
    					dureeDeTravAnneeReposCompensateur = 0;
    					dureeDeTravAnneeMaladieMois = 0;
    					dureeDeTravAnneeHeureSansSolde = 0;
    					nbMois = 0;
     
     
    				}
     
    			    personneCouranteOld = personneCourante ;
    			}
    		}
    Nom : ErreurCalcul.jpg
Affichages : 194
Taille : 306,6 Ko



    Comme vous pouvez le voir, la personne 1 a bien les 10 mois qui sont comptabilité. Or, pour la personne 2, il y a 7 mois qui sont comptabilisé au lieu des 8 présents.... Et ainsi de suite pour les autres personnes....

    Je vous remercie infiniment pour votre aide

  15. #15
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 461
    Points : 894
    Points
    894
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Je n'ai rien compris à ce que tu veux faire, mais pire, je n'ai rien compris à ton code qui est trop complexe, et qui pour moi n'est pas maintenable.

    Néanmoins, j'ai vu que tu utilises Hibernate, et je pense que ton probleme est lié à une mauvaise maîtrise d'Hibernate et/ou une mauvaise connaissance des concepts d'Hibernate.

    Il faut d'abord comprendre que Hibernate est un ORM.

    C'est un framework qui va te permettre de faire le lien entre un modèle objet, au sein de ton application, et un modèle relationnel au sein de ta base de données.

    Pour que l'on puisse d'aider, il faudrait d'abord que tu nous donne l'UML (Côté Java).
    Si j'ai bien compris, "Moisdisp" est un Objet côté Hibernate qui mappe une table en BDD.

    La requête permet à Hibernate d'aller chercher en BDD les données, et de mapper pour récupérer directement les objets.

    Dans ton cas, il y a un vrai travail de simplification de requête à faire.

    Pour comprendre, soit une classe Personne ayant comme attribut id, nom et prénom.

    Tu écris une requête comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers.id, pers.nom, pers.prenom from Personne pers
    Franchement, ça ne sert à rien, vu que Personne est mappé avec la BDD.

    Tu peux écrire si tu veux être précis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers from Personne pers
    Ou simplement:
    Hibernate va te chercher la liste des personnes en BDD et te donnera la liste d'objet Java.

    Si tu cheche une personne par id:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers from Personne pers where pers.id = ?
    Il en est de meme pour les jointure.
    Normalement, elles sont déjà dans ton modèle Java.

    Un moment, tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moisdisp.idPers = personne.idPersonne
    Franchement, si le modèle est bien fait, côté Java, on doit avoit un lien entre la classe Moisdisp et Personne.
    On a donc pas, normalement besoin de spécifier la personne dans la requête.
    Et on sélectionne simplement par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moisdisp.personne.idPers = ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.service.idService = uniteservice.service.idService and uniteservice.unite.idUnite = unite.idUnite and unite.idUnite = ?
    Est remplaçable par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.service.idService = ? and personne.service.unite.idUnit = ?
    ect...

  16. #16
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour,

    D'après ce que je vois, tu perdras toujours une personne à cause de ta condition.

    On prends un exemple simple:

    Nous avons TOTO TOTO TITI TITI
    Au debut ,premiere itération: personneOld = 0 donc calcul
    deuxieme iteration : TOTO = TOTO donc calcul
    troisieme itération : TOTO != TITI et personneOld != 0 donc RIEN
    Quatrième itération : TITI = TITI DONC CALCUL

    tu perds donc un calcul.
    J'ai pas vraiment lu ton code car trop long mais je pense que c'est bien cela le problème.

    Bon courage.

  17. #17
    Membre averti

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2011
    Messages : 160
    Points : 443
    Points
    443
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par PhilippeGibault Voir le message
    Bonjour,

    Je n'ai rien compris à ce que tu veux faire, mais pire, je n'ai rien compris à ton code qui est trop complexe, et qui pour moi n'est pas maintenable.

    Néanmoins, j'ai vu que tu utilises Hibernate, et je pense que ton probleme est lié à une mauvaise maîtrise d'Hibernate et/ou une mauvaise connaissance des concepts d'Hibernate.

    Il faut d'abord comprendre que Hibernate est un ORM.

    C'est un framework qui va te permettre de faire le lien entre un modèle objet, au sein de ton application, et un modèle relationnel au sein de ta base de données.

    Pour que l'on puisse d'aider, il faudrait d'abord que tu nous donne l'UML (Côté Java).
    Si j'ai bien compris, "Moisdisp" est un Objet côté Hibernate qui mappe une table en BDD.

    La requête permet à Hibernate d'aller chercher en BDD les données, et de mapper pour récupérer directement les objets.

    Dans ton cas, il y a un vrai travail de simplification de requête à faire.

    Pour comprendre, soit une classe Personne ayant comme attribut id, nom et prénom.

    Tu écris une requête comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers.id, pers.nom, pers.prenom from Personne pers
    Franchement, ça ne sert à rien, vu que Personne est mappé avec la BDD.

    Tu peux écrire si tu veux être précis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers from Personne pers
    Ou simplement:
    Hibernate va te chercher la liste des personnes en BDD et te donnera la liste d'objet Java.

    Si tu cheche une personne par id:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select pers from Personne pers where pers.id = ?
    Il en est de meme pour les jointure.
    Normalement, elles sont déjà dans ton modèle Java.

    Un moment, tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moisdisp.idPers = personne.idPersonne
    Franchement, si le modèle est bien fait, côté Java, on doit avoit un lien entre la classe Moisdisp et Personne.
    On a donc pas, normalement besoin de spécifier la personne dans la requête.
    Et on sélectionne simplement par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moisdisp.personne.idPers = ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.service.idService = uniteservice.service.idService and uniteservice.unite.idUnite = unite.idUnite and unite.idUnite = ?
    Est remplaçable par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    personne.service.idService = ? and personne.service.unite.idUnit = ?
    ect...
    Je suis tout à fait en phase avec ce commentaire, si ce que tu veux faire est trop compliqué à faire c'est que peut être tu ne t'y prends pas de la bonne manière, la manière dont tu veux le faire en terme de maintenabilité et d'évolution c'est n'est pas top, ça peut marché sur le coup, mais dans 2 mois, il se pourrait que tu ne comprendras plus ce que tu avais fais à plus forte raison une autre personne
    Utilisez le bouton pour mettre en valeur la ou les réponses qui vous ont été les plus utiles. Marquez comme si c'est le cas.

    ''Le savoir est la seule matière qui s’accroît lorsqu’on la partage.''
    (Socrate)

  18. #18
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut
    PhilippeGibault> La difficulté est que je récupère fait par une autre personne et qu'effectivement, cette application est difficilement maintenable. Sauf que je n'ai pas le temps d'un refaire une autre YYoYY


    johnlobs > Merci infiniment de votre réponse. Le problème vient effectivement de là...

    Auriez vous une solution pour modifier ma condition ?

    J'ai de nouveau simplifié mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    if (!listMoisDipsParPersonne.isEmpty()){
    			int personneCourante = 0;
    			int personneCouranteOld = 0;
     
    			int sumNbFamil = 0;
    			int sumNbFerie = 0;
    			int sumNbFormation = 0;
    			int sumNbMaladie = 0;
     
    			Moisdisp moisDis = new Moisdisp();
     
    			Iterator<Moisdisp> iter = listMoisDipsParPersonne.iterator();
    			while (iter.hasNext()) {
    				Moisdisp moisdisplay = (Moisdisp) iter.next();
     
    				personneCourante = moisdisplay.getIdPers();
     
    				if (personneCourante == personneCouranteOld ||  personneCouranteOld == 0 ){
     
     
    					if(moisdisplay.getNbFamil() != null) sumNbFamil += moisdisplay.getNbFamil();	
    					if(moisdisplay.getNbFerie() != null) sumNbFerie +=	moisdisplay.getNbFerie();
    					if(moisdisplay.getNbFormation() != null) sumNbFormation += moisdisplay.getNbFormation();
    					if(moisdisplay.getNbMaladie() != null) sumNbMaladie += moisdisplay.getNbMaladie();
    					nbMois +=1;
     
    					moisDis.setNbFamil(sumNbFamil);
    					moisDis.setNbFerie(sumNbFerie);
    					moisDis.setNbFormation(sumNbFormation);
    					moisDis.setNbMaladie(sumNbMaladie);
     
     
     
    				}
     
    				if ((personneCouranteOld != personneCourante && personneCouranteOld != 0) || !iter.hasNext()){
    					listMoisDipsParPersonne2.add(moisDis);
    					moisDis = new Moisdisp();
     
    					sumNbFamil = 0 ;
    					sumNbFerie = 0;
    					sumNbFormation = 0;
    					sumNbMaladie = 0;
     
    					nbMois = 0;
     
     
    				}
     
    			    personneCouranteOld = personneCourante ;
    			}
    		}
    	}
    Je vous remercie par avance de votre aide....

  19. #19
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour,

    Ça me rassure que ma réponse t'ait indiquer la source de ton problème.
    Je peux te donner la solution pour resoudre ce probleme mais etant donné que je ne connais pas tout ton algo il faudra que tu traite la suite.

    D'après ce que j'ai compris, tu as mis la condition uniquement pour pouvoir additionner dans les mêmes variables :

    Ta condition revient a dire : si c'est la première personne ou bien si c'est la même personne fais les calculs.

    Ce qui est faux car tu dois scinder cette condition car ça ne devrait pas être le même traitement mais plutôt:

    SI c'est la premiere personne ou bien si c'est une personne differente alors nouvelle variable et nouveau calcul
    SINON additionner aux ancienne variables.

    Ce qui correspond a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(personneCouranteOld == 0 || personneCourante != personneCouranteOld)
                {
                   // initialiser les variables et affecter les valeurs actuelles
                      sumNbFamil = 0;
                      if(moisdisplay.getNbFamil() != null) sumNbFamil += moisdisplay.getNbFamil();
                 }else{
                   // additionner les valeurs au variables
                     if(moisdisplay.getNbFamil() != null) sumNbFamil += moisdisplay.getNbFamil();
                  // etc .....
                  }
    J'ai mis ce code non optimisé pour que tu comprennes mais ce code reviendrait a faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(personneCouranteOld == 0 || personneCourante != personneCouranteOld)
                      sumNbFamil = 0; //etc ......
    //Faire les calculs dans tous les cas
    if(moisdisplay.getNbFamil() != null) sumNbFamil = moisdisplay.getNbFamil(); //etc ......
    Voila mais ATTENTION il faut que tu sauvegarde tes valeurs dans un objet (d'où la proposition de Map ) à part si tu traite la chose differemment car le problème est que tu dois savoir lorsque tu passe à une autre personne pour ne pas perdre tes calculs mais je pense que ce point est deja traité vu que tu arrive a afficher par personne.

    Tu peux meme ajouter un flag dans le if pour savoir que tu es passée à une autre personne et donc qu'il faut stocker les calculs et pour cela tu dois separer ton if en deux if comme cela:
    SI c'est la premiere personne ALORS on initaialise la variable
    SINON SI on change de personne ALORS on stocke d’abord les résultats puis on réinitialise.

    Bon courage

  20. #20
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 461
    Points : 894
    Points
    894
    Billets dans le blog
    5
    Par défaut
    Vu de très loin, je crois qu'il y a un problème de modélisation.

    Surtout qu'en general, on considère que la majorité du calcul doit être fait en BDD.

    D'abord côté BDD:
    Je suis persuadé qu'il y a un lien (Toujours vu de loin) entre Moisdisp et Personne.
    La colonne idPers de la table Moisdisp ne peut pas prendre n'importe quoi comme valeur. Elle ne peut prendre que un identifiant dans la table personne (Colonne idPersonne de la Table Personne).
    La colonne idPers de la table Moisdisp est donc une clé étrangère. Je pense en plus (toujours vu de loin) que ce lien est fonctionnel. Et fonctionnellement, il est représenté par une clé étrangère.

    Côté UML/Hibernate/Java
    Il y a un lien entre la classe Moisdisp et Personne. A un Moisdisp correspond 1 Personne et à une Personne correspond 0-N Moisdisp.
    Ce qui fait que dans la classe Personne, il n'y a pas de reference idPers, il n'y a pas d'attribut idPers.
    Au contraire, il y a dans la classe Moisdisp un attribut Personne, le mapping est fait à l'aide d'annotation Hibernate, à partir de la clé étrangère en BDD.
    Attention à utiliser un chargement "LAZY" histoire de ne pas plomber les performances.

    En faisant ces deux modifications, tu poseras mieux le problème et de fait, tu fera un code plus simple, plus lisible et plus maintenable.

    La conclusion est que quand on travaille avec la BDD/Hibernate, il faut toujours avoir sous les yeux un MCD/UML diagramme de classe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème algorithme Java
    Par noboxstyle dans le forum Général Java
    Réponses: 5
    Dernier message: 10/05/2016, 19h19
  2. Problème algorithme Java
    Par Alba.1337 dans le forum Général Java
    Réponses: 4
    Dernier message: 21/03/2012, 13h56
  3. [debutant][Applet] problèmes insertion applet java
    Par mlequim dans le forum Applets
    Réponses: 5
    Dernier message: 11/07/2005, 09h50
  4. [SQLPLUS] - Problème de Triggers Java
    Par farcis dans le forum Oracle
    Réponses: 7
    Dernier message: 23/12/2004, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo