package com.eksad.masterdata.controller; import com.eksad.ddms.common.uri.apigateway.APIGatewayURI; import com.eksad.ddms.common.util.StringUtil; import com.eksad.ddms.common.util.status.DataStatus; import com.eksad.masterdata.common.dto.ManageWorkOrderHeaderResponseDTO; import com.eksad.masterdata.common.dto.ManageWorkOrderParamDTO; import com.eksad.masterdata.common.dto.ManageWorkOrderResponseDTO; import com.eksad.masterdata.common.listEnum.SourceType; import com.eksad.masterdata.domain.CreationalSpecification; import com.eksad.masterdata.domain.Payload; import com.eksad.masterdata.repository.ParamJsonApiGateway; import com.eksad.masterdata.repository.ParamJsonApiGatewayRepository; import com.eksad.masterdata.repository.PayloadRepository; import com.eksad.masterdata.service.APIManageWorkOrderHystrixService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; @RestController @Slf4j public class ApigatewayManageWorkOrderRestController { @Autowired APIManageWorkOrderHystrixService manageWoService; @Autowired ParamJsonApiGatewayRepository paramJsonApiGatewayRepository; @Autowired PayloadRepository payloadRepository; @Value("${dam.masterdata.h2}") private String md_h2; private ManageWorkOrderHeaderResponseDTO manageWorkOrderHeaderResponseDTO; @RequestMapping(value = "/dgi-api/v1/pkb/read", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Object> ManageWorkOrderAPIGATEWAYV1(@RequestBody ManageWorkOrderParamDTO paramDTO) { System.out.println("Data API Gateway WO"); ParamJsonApiGateway paramJsonApiGateway = new ParamJsonApiGateway(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date startDate = null; Date toDate = null; ManageWorkOrderResponseDTO manageWorkOrderResponseDTO; manageWorkOrderHeaderResponseDTO = new ManageWorkOrderHeaderResponseDTO(); try { if (StringUtil.hasValue(paramDTO.getFromTime())) { startDate = dateFormat.parse(paramDTO.getFromTime()); if (!StringUtil.hasValue(paramDTO.getToTime())) { paramDTO.setToTime(getCurrentDate()); } if (!checkToTimeIs7Days(paramDTO.getFromTime(), paramDTO.getToTime())) { return new ResponseEntity<>(new ManageWorkOrderHeaderResponseDTO(0, "Rentang waktu melebihi 7 hari.", null), HttpStatus.OK); } } else { return new ResponseEntity<>(new ManageWorkOrderHeaderResponseDTO(0, "Mohon isi fromTime.", null), HttpStatus.OK); } if (StringUtil.hasValue(paramDTO.getToTime())) { toDate = dateFormat.parse(paramDTO.getToTime()); } ResponseEntity<Object> result = manageWoService.getManageWorkOrder(paramDTO.getNoWorkOrder(), paramDTO.getDealerId(), paramDTO.getFromTime(), paramDTO.getToTime()); paramJsonApiGatewayRepository.save(constructParamDTOTODomain(paramDTO)); Payload payload = new Payload(); payload.setSourceId(paramDTO.getNoWorkOrder()); payload.setSourceType(SourceType.API_GATEWAY); payload.setEvent("POST_API_GATEWAY"); payload.setEventDate(new Date()); payload.setPayloadStatus(DataStatus.ACTIVE); payload.setType("WO"); payload.setReqPayload(new ObjectMapper().writeValueAsString(paramDTO)); payload.setResPayload(new ObjectMapper().writeValueAsString(result.getBody())); payload.setUrl(md_h2 + APIGatewayURI.PULL_MANAGE_WORKORDER); payload.setPayloadCreational(new CreationalSpecification(new Date(), "admin", null, null)); payloadRepository.save(payload); return result; } catch (Exception e) { e.printStackTrace(); manageWorkOrderHeaderResponseDTO.setMessage("Terdapat kesalahan"); manageWorkOrderHeaderResponseDTO.setStatus(0); return new ResponseEntity<>(manageWorkOrderHeaderResponseDTO, HttpStatus.OK); } } public static String getCurrentDate() throws ParseException { final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.format(new Date()); } private Boolean checkToTimeIs7Days(String fromTime, String toTime) throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date from = dateFormat.parse(fromTime); Date to = dateFormat.parse(toTime); LocalDateTime fromLocal = from.toInstant().atZone(ZoneId.of("Asia/Jakarta")).toLocalDateTime(); LocalDateTime toLocal = to.toInstant().atZone(ZoneId.of("Asia/Jakarta")).toLocalDateTime(); Duration durasi = Duration.between(fromLocal, toLocal); long dayDifference = Math.abs(durasi.toHours()); if (dayDifference > (7 * 24) + 1) { // if duration greater than 24*7 + 1 hours return false; } return true; } private ParamJsonApiGateway constructParamDTOTODomain(ManageWorkOrderParamDTO dto) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); CreationalSpecification creationalSpecification = new CreationalSpecification(); creationalSpecification.setCreatedAt(new Date()); creationalSpecification.setCreatedBy("APIGATEWAY_SYSTEM"); ParamJsonApiGateway paramJsonApiGateway = new ParamJsonApiGateway(); paramJsonApiGateway.setCategoryJson("ManageWorkOrder"); paramJsonApiGateway.setJson(mapper.writeValueAsString(dto)); paramJsonApiGateway.setParamApiGatewayCreational(creationalSpecification); return paramJsonApiGateway; } }