Files
apkt-data-309/src/main/java/id/co/iconpln/apkt/data309/boundary/RekapGarduResource.java
Eko Haryadi 091106abf4 feat: Implement RekapGarduDistribusi resource and related DTOs
- Added RekapGarduDistribusiResource for handling data retrieval and synchronization.
- Created RekapGarduDistribusiDTO to represent the data structure for distribution records.
- Developed RekapGarduDistribusiResponse to encapsulate the response from the external API.
- Introduced RekapGarduDistribusi entity to map to the database table.
- Implemented GarduService for synchronizing data with external API.
- Enhanced error handling and logging during data synchronization.
2025-08-26 16:20:27 +07:00

136 lines
6.3 KiB
Java

package id.co.iconpln.apkt.data309.boundary;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import id.co.iconpln.apkt.data309.dto.Data309;
import id.co.iconpln.apkt.data309.dto.RekapGarduDistribusiResponse;
import id.co.iconpln.apkt.data309.dto.ReportData;
import id.co.iconpln.apkt.data309.dto.ResponseModel;
import id.co.iconpln.apkt.data309.dto.Row;
import id.co.iconpln.apkt.data309.entity.RekapGarduDistribusi;
import id.co.iconpln.apkt.data309.entity.SS309;
import id.co.iconpln.apkt.data309.entity.Ulp;
import id.co.iconpln.apkt.data309.service.Data309Service;
import id.co.iconpln.apkt.data309.utils.XmlToJsonConverter;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ApplicationScoped
@Path("/rekapGarduDistribusi")
public class RekapGarduDistribusiResource {
@GET
@Path("/getData")
@Transactional
public Data309 getPojo(@QueryParam("unit") String unit, @QueryParam("thnbln") String thnbln)
throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://10.1.81.64:8021/api/ap2t/eam/gardu/get-rekap-dil-gardu?blth=" + thnbln
+ "&unitup="
+ unit))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String jsonString = response.body();
try {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_TRAILING_TOKENS, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY, true);
ReportData reportData = objectMapper.readValue(jsonString, ReportData.class);
String data = reportData.getData();
RekapGarduDistribusiResponse dil = objectMapper.readValue(data, RekapGarduDistribusiResponse.class);
if (dil.getData() != null) {
for (RekapGarduDistribusiDTO newData : dil.getData()) {
RekapGarduDistribusi rekapGarduDistribusi = RekapGarduDistribusi
.find("unitUp = ?1 and unitAp = ?2 and unitUpi= ?3 and thbllap = ?3",
newData.getUnitup(),
newData.getUnitap(), newData.getUnitupi(), newData.getThbllap())
.firstResult();
if (rekapGarduDistribusi == null) {
rekapGarduDistribusi = new RekapGarduDistribusi();
}
rekapGarduDistribusi.setJmlplg1Fasa(newData.getJmlplg1Fasa());
rekapGarduDistribusi.setUnitupi(newData.getUnitupi());
rekapGarduDistribusi.setNamaupi(newData.getNamaupi());
rekapGarduDistribusi.setKdgardu(newData.getKdgardu());
rekapGarduDistribusi.setJmlplg3Fasa(newData.getJmlplg3Fasa());
rekapGarduDistribusi.setNamaAp(newData.getNamaap());
rekapGarduDistribusi.setKeteranganKdPembMeter(newData.getKeterangan_kdpembmeter());
rekapGarduDistribusi.setUnitAp(newData.getUnitap());
rekapGarduDistribusi.setJmlPlg(newData.getJmlplg());
rekapGarduDistribusi.setJmlplg(newData.getJmlplg());
rekapGarduDistribusi.setUnitup(newData.getUnitup());
rekapGarduDistribusi.setKdpembmeter(newData.getKdpembmeter());
rekapGarduDistribusi.setJmldaya(newData.getJmldaya());
rekapGarduDistribusi.setNamaup(newData.getNamaup());
rekapGarduDistribusi.setThbllap(newData.getThbllap());
rekapGarduDistribusi.setNama_gardu(newData.getNama_gardu());
rekapGarduDistribusi.persist();
}
}
return rekapGarduDistribusi;
} catch (IOException e) {
return null; // Or handle as needed
}
}
@GET
@Path("/sinkron")
@Transactional
public void sinkron() throws IOException, InterruptedException {
System.out.println("SINKRON DATA REKAP GARDU DISTRIBUSI");
String thnbln = String.valueOf(LocalDate.now().getYear())
+ String.format("%02d", LocalDate.now().getMonthValue() - 1);
// string pad left 0
if (LocalDate.now().getMonthValue() == 1) {
thnbln = String.valueOf(LocalDate.now().getYear() - 1) + "12";
}
List<Ulp> ulps = Ulp.find("unit_ap2t NOT IN ('PLN.PST') OR unit_ap2t is not null").list();
for (Ulp getUlp : ulps) {
String unit = getUlp.getUnit_ap2t();
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://10.14.212.9:32184/RekapGarduDistribusi/getData?unit=" + unit +
"&thnbln=" + thnbln))
.GET()
.build();
client.send(request, HttpResponse.BodyHandlers.ofString());
data309Service.syncronize(unit, thnbln);
}
}
}