diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/TangerinoMSApplication.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/TangerinoMSApplication.java index 1b2a174..ae81b27 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/TangerinoMSApplication.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/TangerinoMSApplication.java @@ -1,23 +1,19 @@ package br.com.ae3tecnologia.ms.tangerino; import org.springframework.boot.Banner; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan(basePackages = {"br.com.ae3tecnologia.ms.tangerino"}) -@EnableAutoConfiguration public class TangerinoMSApplication extends SpringBootServletInitializer { - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { - return builder.sources(getClass()); - } + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + return builder.sources(getClass()); + } - public static void main(String[] args) { - new SpringApplicationBuilder(TangerinoMSApplication.class).bannerMode(Banner.Mode.OFF).run(args); - } + public static void main(String[] args) { + new SpringApplicationBuilder(TangerinoMSApplication.class).bannerMode(Banner.Mode.OFF).run(args); + } } diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustController.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustController.java index ee9df81..2ef4c3c 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustController.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustController.java @@ -109,4 +109,12 @@ public class PtoAdjustController { forObject.getContent().forEach(x -> eventos.add(new PtoAdjustModel(x))); return eventos; } + + public void setToken(String token) { + this.token = token; + } + + public void setUrlApis(String urlApis) { + this.urlApis = urlApis; + } } diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestController.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestController.java index d6c5d7d..e0b1ddc 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestController.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestController.java @@ -21,10 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -62,12 +59,14 @@ public class PtoExtractRestController { AtomicReference lastNsr = new AtomicReference<>(0); HashMap map = new HashMap<>(); map.put("serialNumber", eq.getSerialNumber()); - map.put("nsrType", 3); - map.put("nsr", eq.getLastNsr()); //precisa pegar o ultimo NSR do relogio para passar como parametro + map.put("page", 1); + map.put("size", 50); + map.put("registerType", 3); + map.put("nsr", eq.getLastNsr() == null ? 0 : eq.getLastNsr()); //precisa pegar o ultimo NSR do relogio para passar como parametro try { // requisita da API do tangerino os pontos disponiveis, salvando eles na tabela ptoEvento - List ptoEventModels = gePunchTangerinoAPI(map); + List ptoEventModels = gePunchTangerinoAPI(map, Arrays.asList()); lastNsr.set(extractEventsAndReturnLastNsr(lastNsr.get(), ptoEventModels, eq)); } catch (JsonProcessingException e) { throw new RuntimeException(e); @@ -86,11 +85,14 @@ public class PtoExtractRestController { AtomicReference nsr = new AtomicReference<>(0); AtomicInteger nsrForEach = new AtomicInteger(lastNsr); ptoEventModels.stream().sorted(Comparator.comparing(PtoEventModel::getNsr)).forEach(x -> { - if (x.getNsr() > lastNsr) { // tratando para nao duplicar os nsr + if (x.getNsr() > lastNsr && eventoService.findByNsrAndEquipament(x.getNsr(), equipamentoModel.getId()) == null) { // tratando para nao duplicar os nsr + x.setEquipament(equipamentoModel.getId()); eventoService.save(x); nsr.set(x.getNsr()); if(x.getNsr() - nsrForEach.get() > 1){ //se a diferença entre o ultimo nsr e o atual for maior que um, chamará o Ajustes PtoAdjustController ajusteController = new PtoAdjustController(equipamentoService, ajusteService); + ajusteController.setToken(token); + ajusteController.setUrlApis(urlApis); ajusteController.extract(equipamentoModel, nsrForEach.get()); } nsrForEach.set(x.getNsr()); @@ -104,18 +106,24 @@ public class PtoExtractRestController { return equipamentoService.findByInativo(inativo); } - public List gePunchTangerinoAPI(HashMap filtros) throws JsonProcessingException { + public List gePunchTangerinoAPI(HashMap filtros, List eventList) throws JsonProcessingException { + List eventos = new ArrayList<>(); + if(!eventList.isEmpty()){ + eventos.addAll(eventList); + } RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.setBasicAuth(token); - String url = urlApis + TANGERINO_API_PUNCH; final String[] filter = {""}; - + AtomicInteger actualPage = new AtomicInteger(); filtros.forEach((k, v) -> { + if(k.equals("page")){ + actualPage.set(Integer.valueOf(v.toString())); + } if (filter[0].isEmpty()) { filter[0] = filter[0].concat(k).concat("=").concat(v.toString()); } else { @@ -131,8 +139,12 @@ public class PtoExtractRestController { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); ResultEventDTO forObject = objectMapper.readValue(jsonStr, ResultEventDTO.class); - List eventos = new ArrayList<>(); forObject.getContent().forEach(x -> eventos.add(new PtoEventModel(x))); + if(forObject.getTotalPages() > actualPage.get()){ + filtros.remove("page"); + filtros.putIfAbsent("page", actualPage.get()+1); + return gePunchTangerinoAPI(filtros, eventos); + } return eventos; } } diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/model/PtoEventModel.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/model/PtoEventModel.java index 08a8a2b..d11944f 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/model/PtoEventModel.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/model/PtoEventModel.java @@ -59,7 +59,8 @@ public class PtoEventModel { LocalDate localDate = Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalDate(); this.setEventDate(localDate); this.setEventTime(Instant.ofEpochMilli(dto.getPunchDate()).atZone(ZoneId.systemDefault()).toLocalTime()); - String periodo = localDate.getYear() + StringUtils.leftPad("0",2, String.valueOf(localDate.getMonthValue())); + String periodo = String.valueOf(localDate.getYear()); + periodo = periodo + StringUtils.leftPad(String.valueOf(localDate.getMonthValue()),2, "0"); this.setPeriod(periodo); this.setProcess(false); this.setRegisterType(3); diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/repository/PtoEventRepository.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/repository/PtoEventRepository.java index 73bd903..8c6bc34 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/repository/PtoEventRepository.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/repository/PtoEventRepository.java @@ -4,7 +4,10 @@ import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface PtoEventRepository extends JpaRepository { + Optional findByNsrAndEquipament(Integer nsr, int equipament); } diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/service/PtoEventService.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/service/PtoEventService.java index 1c42984..31e5156 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/service/PtoEventService.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/service/PtoEventService.java @@ -5,6 +5,7 @@ import br.com.ae3tecnologia.ms.tangerino.repository.PtoEventRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.swing.text.html.Option; import java.util.List; import java.util.Optional; @@ -27,4 +28,8 @@ public class PtoEventService { return optional.isPresent() ? optional.get() : null; } + public PtoEventModel findByNsrAndEquipament(Integer nsr, int equipament) { + Optional optional = repository.findByNsrAndEquipament(nsr, equipament); + return optional.isPresent() ? optional.get() : null; + } } diff --git a/src/main/java/br/com/ae3tecnologia/ms/tangerino/utils/Constants.java b/src/main/java/br/com/ae3tecnologia/ms/tangerino/utils/Constants.java index 13bd4c9..e67588c 100644 --- a/src/main/java/br/com/ae3tecnologia/ms/tangerino/utils/Constants.java +++ b/src/main/java/br/com/ae3tecnologia/ms/tangerino/utils/Constants.java @@ -2,6 +2,6 @@ package br.com.ae3tecnologia.ms.tangerino.utils; public class Constants { public static final String API_ROUTE = "/public/api"; - public static final String TANGERINO_API_PUNCH = "/punch"; + public static final String TANGERINO_API_PUNCH = "/punch/electronic-watch/afd-data-export"; } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 319435c..c9275e1 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,6 +1,6 @@ app: - token: YzJiYjNhZmQ0NDMyNDk3OGFiZTY4NmFhYTE4ZWUzYTk6MWMyNDdjZDc3MDMyNGQ3MmFmMmYyZjg5MmM0ZDBkODk= + token: OGQ0YTk1YTYyNDNjNGQ0OTgxMTBhNjMxZDhlOTBjOWY6Njg4ZDgzMTE1ZWM4NDY4ZDliN2FlMDZhNDE5NDE3Yzg= url: employer: https://employer.tangerino.com.br apis: https://apis.tangerino.com.br diff --git a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsControllerMockTest.java b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsMockControllerTest.java similarity index 96% rename from src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsControllerMockTest.java rename to src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsMockControllerTest.java index 5f663ed..9bbd0d9 100644 --- a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsControllerMockTest.java +++ b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsMockControllerTest.java @@ -18,7 +18,7 @@ import java.util.List; import static org.mockito.Mockito.when; -class PtoAdjustsControllerMockTest { +class PtoAdjustsMockControllerTest { @Mock PtoAdjustController controller; PtoEquipamentModel equipamento01; diff --git a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsRestControllerTest.java b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsRestControllerTest.java new file mode 100644 index 0000000..f9d09d4 --- /dev/null +++ b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoAdjustsRestControllerTest.java @@ -0,0 +1,82 @@ +package br.com.ae3tecnologia.ms.tangerino.controller; + +import br.com.ae3tecnologia.ms.tangerino.model.PtoAdjustModel; +import br.com.ae3tecnologia.ms.tangerino.model.PtoEquipamentModel; +import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Arrays; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.List; + + +@ExtendWith(SpringExtension.class) +@SpringBootTest +class PtoAdjustsRestControllerTest { + + @Autowired + PtoAdjustController controller; + PtoEquipamentModel equipamento01; + PtoAdjustModel evento01; + + @BeforeEach + void setUp() { + equipamento01 = new PtoEquipamentModel( + 123, + "00004004330082159", + 1, + 0, + GregorianCalendar.getInstance().getTime(), + null, + "default", + true + ); + + evento01 = new PtoAdjustModel( + 123, + 278, + 4, + LocalDate.now(), + LocalDate.now(), + LocalTime.now().minusHours(10), + LocalTime.now(), + 1, + "202304" + ); + MockitoAnnotations.openMocks(this); + } + + + @Test + void mustObteinPunchAdjustTangerinoAPI() throws JsonProcessingException { + HashMap map = new HashMap<>(); + map.put("serialNumber", equipamento01.getSerialNumber()); + map.put("page", 1); + map.put("size", 50); + map.put("registerType", 4); + List ptoList = controller.gePunchTangerinoAPI(map); + Assertions.assertTrue(ptoList.size() > 0); + } + + + @Test + void mustObteinLastNsrByExtractEventsAndReturnLastNsr() { + Integer lastNsr = controller.extractAdjustsAndReturnLastNsr(evento01.getNsr(), Arrays.asList(evento01)); + Assertions.assertEquals(278, lastNsr); + } + +} + +//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme \ No newline at end of file diff --git a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerMockTest.java b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractMockControllerTest.java similarity index 93% rename from src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerMockTest.java rename to src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractMockControllerTest.java index 506ba7d..5cf492c 100644 --- a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerMockTest.java +++ b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractMockControllerTest.java @@ -19,7 +19,7 @@ import java.util.List; import static org.mockito.Mockito.when; -class PtoExtractRestControllerMockTest { +class PtoExtractMockControllerTest { @Mock PtoExtractRestController controller; PtoEquipamentModel equipamento01; @@ -72,8 +72,8 @@ class PtoExtractRestControllerMockTest { map.put("page", 1); map.put("size", 50); when(controller.getToken()).thenReturn("1231231231313"); - when(controller.gePunchTangerinoAPI(map)).thenReturn(Arrays.asList(evento01)); - List ptoEventModels = controller.gePunchTangerinoAPI(map); + when(controller.gePunchTangerinoAPI(map, Arrays.asList())).thenReturn(Arrays.asList(evento01)); + List ptoEventModels = controller.gePunchTangerinoAPI(map, Arrays.asList()); Assertions.assertTrue(ptoEventModels.size() > 0); } diff --git a/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerTest.java b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerTest.java new file mode 100644 index 0000000..eb61b49 --- /dev/null +++ b/src/test/java/br/com/ae3tecnologia/ms/tangerino/controller/PtoExtractRestControllerTest.java @@ -0,0 +1,92 @@ +package br.com.ae3tecnologia.ms.tangerino.controller; + +import br.com.ae3tecnologia.ms.tangerino.model.PtoAdjustModel; +import br.com.ae3tecnologia.ms.tangerino.model.PtoEquipamentModel; +import br.com.ae3tecnologia.ms.tangerino.model.PtoEventModel; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Arrays; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.List; + +import static org.mockito.Mockito.when; + + +@ExtendWith(SpringExtension.class) +@SpringBootTest +class PtoExtractRestControllerTest { + + @Autowired + PtoExtractRestController controller; + PtoEquipamentModel equipamento01; + PtoEventModel evento01; + + @BeforeEach + void setUp() { + equipamento01 = new PtoEquipamentModel( + 123, + "00004004330082159", + 1, + 0, + GregorianCalendar.getInstance().getTime(), + null, + "default", + true + ); + + evento01 = new PtoEventModel( + 1, + 123, + 1, + LocalDate.now(), + LocalTime.now(), + "123123123123", + 123, + 123, + false, + 1, + "202304", + LocalDateTime.now() + ); + MockitoAnnotations.openMocks(this); + } + + @Test + void mustObteinPunchEventTangerinoAPI() throws JsonProcessingException { + HashMap map = new HashMap<>(); + map.put("serialNumber", equipamento01.getSerialNumber()); + map.put("page", 1); + map.put("size", 50); + map.put("registerType", 3); + List ptoEventModels = controller.gePunchTangerinoAPI(map, Arrays.asList()); + Assertions.assertTrue(ptoEventModels.size() > 0); + } + + @Test + void mustObteinLastNsrByExtractEventsAndReturnLastNsr() { + Integer lastNsr = controller.extractEventsAndReturnLastNsr(evento01.getNsr(), Arrays.asList(evento01), equipamento01); + Assertions.assertEquals(0, lastNsr); + } + + @Test + void mustObteinWatchesMock() { + List ptoEquipamentModels = controller.getWatches(false); + Assertions.assertNotEquals(null, ptoEquipamentModels); + Assertions.assertFalse(ptoEquipamentModels.isEmpty()); + } +} + +//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme \ No newline at end of file