PurgeGlassesItemReader.java
package com.sintia.ffl.admin.optique.catalogue.batch.reader.purgeglasses;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.DistributeurCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.FabricantCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.TypeMateriauRepository;
import com.sintia.ffl.admin.optique.dal.repositories.TypeVerreRepository;
import com.sintia.ffl.admin.optique.services.dto.Glasses;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@Component
@StepScope
public class PurgeGlassesItemReader extends JdbcCursorItemReader<Glasses> {
@Autowired
private TypeVerreRepository typeVerreRepository;
@Autowired
private TypeMateriauRepository typeMateriauRepository;
@Autowired
private FabricantCatalogueRepository fabricantRepository;
@Autowired
private DistributeurCatalogueRepository distributeurRepository;
@Autowired
public PurgeGlassesItemReader(
DataSource dataSource, @Value("#{jobParameters[scriptDate]}") Date scriptDate, @Value("${purgeverre.delaisuppression}") int deleteDelay) {
this.setDataSource(dataSource);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(scriptDate);
cal.add(Calendar.MONTH, -deleteDelay);
Date limit = cal.getTime();
this.setSql(
"select " +
"mv.c_modele, " +
"mv.l_modele, " +
"mv.n_indice, " +
"mv.b_saisie, " +
"mv.d_maj_catalogue, " +
"mv.d_creation, " +
"mv.d_maj, " +
"mv.c_opto_code_verre, " +
"mv.d_demande_supp, " +
"mv.d_debut_validite, " +
"mv.id_classe, " +
"mv.id_modele_verre, " +
"d.id_distributeur, " +
"f.id_fabricant, " +
"mv.id_type_verre, " +
"tm.c_type_materiau, " +
"tv.c_type_verre " +
"from " +
"modele_verre mv " +
"inner join fabricant f on f.id_fabricant = mv.id_fabricant " +
"inner join distributeur d on d.id_distributeur = mv.id_distributeur " +
"left join type_materiau tm on tm.id_type_materiau = mv.id_type_materiau " +
"left join type_verre tv on tv.id_type_verre = mv.id_type_verre " +
"where " +
"mv.b_saisie = '0' " +
"and mv.d_maj <= '" + simpleDateFormat.format(limit) + "'");
this.setRowMapper(
(ResultSet resultSet, int rowNum) -> {
if (!(resultSet.isAfterLast()) && !(resultSet.isBeforeFirst())) {
Glasses glass = new Glasses();
glass.setIdModeleVerre(resultSet.getInt("id_modele_verre"));
glass.setGlassCode(resultSet.getString("c_modele"));
glass.setGlassName(resultSet.getString("l_modele"));
glass.setRefractiveIndex(resultSet.getInt("n_indice"));
glass.setSeizable(resultSet.getString("b_saisie"));
glass.setGlassOptoCode(resultSet.getString("c_opto_code_verre"));
glass.setMaterial(resultSet.getString("c_type_materiau"));
glass.setGlassType(resultSet.getString("c_type_verre"));
glass.setMaker(String.valueOf(resultSet.getInt("id_fabricant")));
glass.setProvider(String.valueOf(resultSet.getInt("id_distributeur")));
glass.setCreationDate(resultSet.getTimestamp("d_creation").toLocalDateTime());
glass.setUpdateDate(resultSet.getTimestamp("d_maj").toLocalDateTime());
if (resultSet.getDate("d_demande_supp") != null) {
glass.setExpiryDate(resultSet.getDate("d_demande_supp").toLocalDate());
}
return glass;
} else {
return null;
}
});
}
}