Update service slip gaji

Cicilan perbaikan performance saat unggah slip gaji
This commit is contained in:
Salman Manoe 2023-06-22 17:27:53 +07:00
parent f2b3461dd1
commit 1b73527d22
2 changed files with 89 additions and 7 deletions

View File

@ -35,8 +35,6 @@ public interface SlipGajiKomponenDao extends JpaRepository<SlipGajiKomponen, Str
SlipGajiKomponen findBySlipGajiAndKomponen(@Param("idSlipGaji") String idSlipGaji,
@Param("idKomponen") Integer idKomponen);
@Query("select sgk from SlipGajiKomponen sgk " + "where sgk.slipGaji.id in (:listIdSlipGaji) "
+ "and sgk.komponen.id = :idKomponen")
List<SlipGajiKomponen> findAllByKomponen(@Param("listIdSlipGaji") List<String> listIdSlipGaji,
@Param("idKomponen") Integer idKomponen);
@Query("select sgk from SlipGajiKomponen sgk " + "where sgk.slipGaji.id in (:listIdSlipGaji)")
List<SlipGajiKomponen> findAllBySlipGaji(@Param("listIdSlipGaji") List<String> listIdSlipGaji);
}

View File

@ -180,9 +180,93 @@ public class SlipGajiServiceImpl implements SlipGajiService {
@Override
public void save(List<SlipGajiDto> dtoList) {
dtoList.forEach(dto -> {
this.save(dto);
});
List<SlipGaji> listSlip = new ArrayList<>();
List<SlipGajiDetail> listDetail = new ArrayList<>();
List<SlipGajiKomponen> listKomponen = new ArrayList<>();
Optional<SlipGajiDto> first = dtoList.stream().findFirst();
if (first.isPresent()) {
Date month = new Date(first.get().getBulan());
Date start = DateUtil.startMonth(month);
Date end = DateUtil.endMonth(month);
List<SlipGaji> slipByBulan = slipGajiDao.findByBulan(start, end);
List<MapPegawaiJabatanToUnitKerja> allJabatan = mappingJabatanDao.findAllEnabled();
List<String> listExistIdSlip = slipByBulan.stream().map(SlipGaji::getId).collect(Collectors.toList());
{
List<SlipGajiDto> collectNew = dtoList.stream().filter(d -> !listExistIdSlip.contains(d.getId()))
.collect(Collectors.toList());
collectNew.forEach(s -> {
SlipGaji.SlipGajiBuilder slipGajiBuilder = SlipGaji.builder();
slipGajiBuilder.id(s.getId());
Pegawai pegawai = new Pegawai();
pegawai.setId(s.getIdPegawai());
slipGajiBuilder.pegawai(pegawai);
slipGajiBuilder.bulan(month);
SlipGaji slipGaji = slipGajiBuilder.build();
listSlip.add(slipGaji);
List<MapPegawaiJabatanToUnitKerja> collectJabatan = allJabatan.stream()
.filter(j -> j.getPegawaiId().equals(s.getIdPegawai())).collect(Collectors.toList());
collectJabatan.forEach(j -> {
SlipGajiDetail.SlipGajiDetailBuilder detail = SlipGajiDetail.builder();
detail.slipGaji(slipGaji);
if (CommonUtil.isNotNullOrEmpty(j.getJabatanId())) {
Jabatan jabatan = new Jabatan();
jabatan.setId(j.getJabatanId());
detail.jabatan(jabatan);
}
if (CommonUtil.isNotNullOrEmpty(j.getUnitKerjaPegawaiId())) {
UnitKerjaPegawai unitKerja = new UnitKerjaPegawai();
unitKerja.setId(j.getUnitKerjaPegawaiId());
detail.unitKerja(unitKerja);
}
if (CommonUtil.isNotNullOrEmpty(j.getSubUnitKerjaPegawaiId())) {
SubUnitKerjaPegawai subUnit = new SubUnitKerjaPegawai();
subUnit.setId(j.getSubUnitKerjaPegawaiId());
detail.subUnitKerja(subUnit);
}
if (CommonUtil.isNotNullOrEmpty(j.getGradeId())) {
NilaiKelompokJabatan grade = new NilaiKelompokJabatan();
grade.setId(j.getGradeId());
detail.grade(grade);
}
listDetail.add(detail.build());
});
List<SlipGajiKomponenDto> komponen = s.getKomponen();
komponen.stream().filter(k -> CommonUtil.isNotNullOrEmpty(k.getNominal())).forEach(k -> {
SlipGajiKomponen.SlipGajiKomponenBuilder kBuilder = SlipGajiKomponen.builder();
if (CommonUtil.isNotNullOrEmpty(k.getId()))
kBuilder.id(k.getId());
KomponenGaji kGaji = new KomponenGaji();
kGaji.setId(k.getIdKomponen());
kBuilder.komponen(kGaji);
kBuilder.nominal(k.getNominal());
kBuilder.slipGaji(slipGaji);
listKomponen.add(kBuilder.build());
});
});
}
{
List<SlipGajiDto> collectEdit = dtoList.stream().filter(d -> listExistIdSlip.contains(d.getId()))
.collect(Collectors.toList());
List<SlipGajiKomponen> allKomponen = slipGajiKomponenDao.findAllBySlipGaji(listExistIdSlip);
collectEdit.forEach(e -> {
SlipGaji.SlipGajiBuilder slipGajiBuilder = SlipGaji.builder();
slipGajiBuilder.id(e.getId());
Pegawai pegawai = new Pegawai();
pegawai.setId(e.getIdPegawai());
slipGajiBuilder.pegawai(pegawai);
slipGajiBuilder.bulan(month);
SlipGaji slipGaji = slipGajiBuilder.build();
listSlip.add(slipGaji);
List<SlipGajiKomponenDto> komponen = e.getKomponen();
/**
* TODO
*/
});
}
slipGajiDao.save(listSlip);
slipGajiDetailDao.save(listDetail);
slipGajiKomponenDao.save(listKomponen);
}
}
@Override