diff --git a/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java b/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java index 5e50cf0d7f3313348a71ec2688a23e4f90f8b870..3362f319d1af7d9fe03dd9c00a0bfe48811779b0 100644 --- a/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java +++ b/server-node-spring/src/main/java/org/example/thiefsil/config/WebSocketHandler.java @@ -25,15 +25,20 @@ public class WebSocketHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String str = message.getPayload(); + + if (!str.contains("-")) return; + String lot = str.split("-")[0]; String cmd = str.split("-")[1]; System.out.println("주차 성공"); + System.out.println(str); if (cmd.equals("PARK")) { chargingService.park(lot); + session.sendMessage(new TextMessage( lot + "-PARK")); } else if (cmd.length() >= 6) { diff --git a/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java b/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java index 4776466447be451a02c1495d2fdc5a03bdd7af02..0598f919d5e706bb5423602a50aedab03c132efc 100644 --- a/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java +++ b/server-node-spring/src/main/java/org/example/thiefsil/controller/MainController.java @@ -1,35 +1,54 @@ package org.example.thiefsil.controller; import lombok.RequiredArgsConstructor; +import org.example.thiefsil.dto.FireDTO; import org.example.thiefsil.entity.Cache; +import org.example.thiefsil.entity.Driver; import org.example.thiefsil.repository.CacheRepository; +import org.example.thiefsil.repository.DriverRepository; import org.example.thiefsil.repository.SocketRepository; +import org.example.thiefsil.service.ChargingService; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import java.io.IOException; import java.util.List; -@Controller +@RestController @RequiredArgsConstructor +@CrossOrigin(origins = "*") public class MainController { private final SocketRepository socketRepository; + private final ChargingService chargingService; private final CacheRepository cacheRepository; + private final DriverRepository driverRepository; @GetMapping("/api/clear") public void clear() throws IOException { List<WebSocketSession> sessions = socketRepository.findAllSession(); - + chargingService.extinguish(); for (WebSocketSession session : sessions) { session.sendMessage(new TextMessage("CLEAR")); } } - @GetMapping("/api/cache") - public List<Cache> cache() { + @GetMapping("/api/cars") + public List<Cache> car() { return cacheRepository.findAll(); } + + @GetMapping("/api/users") + public List<Driver> driver() { + return driverRepository.findAll(); + } + + @GetMapping("/api/fire") + public FireDTO fire() { + return new FireDTO(chargingService.isFireState()); + } } diff --git a/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java b/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java index c816e0e8ac9941374a96ed9feef4bb01b97b5b72..d8945a564c70c99230d28d79115ec687005e693d 100644 --- a/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java +++ b/server-node-spring/src/main/java/org/example/thiefsil/dto/FireDTO.java @@ -1,4 +1,11 @@ package org.example.thiefsil.dto; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.RequiredArgsConstructor; + +@Data +@AllArgsConstructor public class FireDTO { + boolean fire; } diff --git a/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java b/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java index f57d83c7606a83ffebf6fb2ec8dfd58ab9ef46af..384139820edbe05085657d3409d115084387377d 100644 --- a/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java +++ b/server-node-spring/src/main/java/org/example/thiefsil/service/ChargingService.java @@ -9,6 +9,7 @@ import jakarta.persistence.PersistenceContext; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.example.thiefsil.dto.CarDTO; +import org.example.thiefsil.dto.FireDTO; import org.example.thiefsil.dto.ValidateCarDTO; import org.example.thiefsil.entity.Cache; import org.example.thiefsil.entity.Driver; @@ -42,6 +43,7 @@ public class ChargingService { private final WebMailService webMailService; private final EntityManager entityManager; private final CacheRepository cacheRepository; + static private boolean fireState = false; @Value("${test.mail}") private String mail; @@ -52,21 +54,27 @@ public class ChargingService { while (session.isOpen()) { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); + if (fireState) { + session.sendMessage(new TextMessage(mapper.writeValueAsString(new FireDTO(fireState)))); + } - List<CarDTO> list = new ArrayList<>(10); - for (int i = 0; i < 10; i++) { - Vehicle vehicle = vehicleRepository.findVehicleByCharger(i).orElse(null); - if (vehicle != null) { - System.out.println(vehicle); + else { + List<CarDTO> list = new ArrayList<>(10); + for (int i = 0; i < 10; i++) { + Vehicle vehicle = vehicleRepository.findVehicleByCharger(i).orElse(null); + if (vehicle != null) { + System.out.println(vehicle); + } + CarDTO tmp = CarDTO.builder() + .position(i) + .car(vehicle) + .build(); + list.add(tmp); } - CarDTO tmp = CarDTO.builder() - .position(i) - .car(vehicle) - .build(); - list.add(tmp); + + session.sendMessage(new TextMessage(mapper.writeValueAsString(list))); } - session.sendMessage(new TextMessage(mapper.writeValueAsString(list))); Thread.sleep(1000); } } @@ -130,10 +138,18 @@ public class ChargingService { for (WebSocketSession session : sessions) { session.sendMessage(new TextMessage(lot + "-FIRE")); } - + fireState = true; webMailService.sendFireMail(lot); } + public void extinguish() { + fireState = false; + } + + public boolean isFireState() { + return fireState; + } + @Scheduled(fixedRate = 60000) public void overParking() { LocalDateTime park = LocalDateTime.now(ZoneId.of("Asia/Seoul")); @@ -161,6 +177,9 @@ public class ChargingService { Cache cache = cacheRepository.findByNumber(number).orElse(null); if (cache != null) { + if (cache.isElectric()) { + makeVehicle(lot, number); + } return cache.isElectric(); } @@ -190,9 +209,9 @@ public class ChargingService { @PostConstruct public void init() { - - driverRepository.deleteAll(); vehicleRepository.deleteAll(); + driverRepository.deleteAll(); + Driver d1 = Driver.builder().id(1L).name("홍길동").email(mail).build(); Driver d2 = Driver.builder().id(2L).name("구자욱").email(mail).build();