Skip to content
Snippets Groups Projects
Commit 56338359 authored by 천 진강's avatar 천 진강
Browse files

feat(spring): 스프링 서버

parents
No related branches found
No related tags found
No related merge requests found
package org.example.thiefsil.repository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.web.socket.WebSocketSession;
import java.util.ArrayList;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class SocketRepository {
private final List<WebSocketSession> sessions = new ArrayList<WebSocketSession>();
public void addSession(WebSocketSession session) {
sessions.add(session);
}
public void removeSession(WebSocketSession session) {
sessions.remove(session);
}
public List<WebSocketSession> findAllSession(){
return sessions;
}
}
package org.example.thiefsil.repository;
import org.example.thiefsil.entity.Vehicle;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface VehicleRepository extends JpaRepository<Vehicle, Long> {
public Optional<Vehicle> findVehicleByNumber(String number);
public Optional<Vehicle> findVehicleByCharger(int charger);
public void deleteVehicleByCharger(int charger);
}
package org.example.thiefsil.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.example.thiefsil.dto.CarDTO;
import org.example.thiefsil.entity.Driver;
import org.example.thiefsil.entity.Vehicle;
import org.example.thiefsil.repository.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ChargingService {
private final SocketRepository socketRepository;
private final DriverRepository driverRepository;
private final VehicleRepository vehicleRepository;
@Value("${test.mail}")
private String mail;
private int vehicleCount = 0;
@Async
public void view(WebSocketSession session) throws InterruptedException, IOException {
while (session.isOpen()) {
ObjectMapper mapper = new ObjectMapper();
List<CarDTO> list = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
CarDTO tmp = CarDTO.builder()
.position(i)
.car(vehicleRepository.findVehicleByCharger(i).orElse(null))
.build();
list.add(tmp);
}
session.sendMessage(new TextMessage(mapper.writeValueAsString(list)));
Thread.sleep(1000);
}
}
public void doCharging(String lot, String charge) {
Vehicle vehicle = vehicleRepository.findVehicleByCharger(Integer.valueOf(lot)).orElse(null);
if (vehicle == null) return;
vehicle.setCharge(Integer.valueOf(charge));
vehicleRepository.save(vehicle);
}
public void makeVehicle(String lot, String id){
if (vehicleCount > 9) return;
Vehicle vehicle = Vehicle.builder()
.driver(null)
.number(id)
.charge(null)
.isElectric(true)
.charger(Integer.valueOf(lot))
.build();
vehicleRepository.save(vehicle);
vehicleCount++;
}
public void park(String lot) throws IOException {
Vehicle vehicle = vehicleRepository.findVehicleByCharger(Integer.valueOf(lot)).orElse(null);
if (vehicle == null) return;
vehicle.setParkingTime(LocalDateTime.now(ZoneId.of("Asia/Seoul")));
vehicleRepository.save(vehicle);
}
public void unpark(String lot) {
vehicleRepository.deleteVehicleByCharger(Integer.valueOf(lot));
vehicleCount--;
}
public void identifyDriver(String lot, String id) {
Driver driver = driverRepository.findById(Long.valueOf(id)).orElse(null);
Vehicle vehicle = vehicleRepository.findVehicleByCharger(Integer.valueOf(lot)).orElse(null);
if (driver == null || vehicle == null) return;
vehicle.setDriver(driver);
vehicleRepository.save(vehicle);
}
public void onFire(String lot) throws IOException {
List<WebSocketSession> sessions = socketRepository.findAllSession();
for (WebSocketSession session : sessions) {
session.sendMessage(new TextMessage(lot + "-FIRE"));
}
}
@PostConstruct
public void init() {
Driver d1 = Driver.builder().name("홍길동").email(mail).build();
Driver d2 = Driver.builder().name("구자욱").email(mail).build();
Driver d3 = Driver.builder().name("김도영").email(mail).build();
Driver d4 = Driver.builder().name("원태인").email(mail).build();
Driver d5 = Driver.builder().name("임찬규").email(mail).build();
driverRepository.save(d1);
driverRepository.save(d2);
driverRepository.save(d3);
driverRepository.save(d4);
driverRepository.save(d5);
}
}
package org.example.thiefsil.service;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class WebMailService {
private final JavaMailSender mailSender;
@Value("${test.mail}")
private String mail;
public void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(mail);
message.setSubject("테스트 메일");
message.setText("테스트 메일입니다");
mailSender.send(message);
}
}
43사5123, 0, Y
11하0731, 44, N
97오2391, 0, Y
28바3192, 54, Y
18자0074, 89, N
36다2645, 21, N
91허5893, 67, Y
25거1490, 2, Y
67누9348, 34, N
02저3726, 100, Y
83머0723, 46, N
45서1089, 98, N
12라4395, 37, Y
57루5931, 55, N
99두6721, 78, Y
33조8237, 66, N
04너3564, 88, Y
75소1093, 13, Y
24가4170, 92, N
81버2395, 74, Y
37저5028, 43, N
62구5823, 31, Y
10루1019, 50, Y
58허6904, 15, N
94주0732, 99, Y
35다2840, 9, N
22보4375, 82, Y
70수3648, 5, N
15로2673, 45, Y
43부8412, 60, N
03가2876, 36, Y
80서1934, 28, N
59조5214, 77, Y
21부0923, 42, N
18아1940, 53, Y
95저3816, 85, N
47우7329, 12, Y
08하4091, 57, Y
62마1839, 93, N
10루2384, 6, Y
39너9012, 41, N
77머4598, 64, Y
65호3102, 23, N
28저4193, 30, Y
50부5618, 71, N
20바9843, 97, Y
84가1248, 16, N
17구5801, 40, Y
03사7824, 59, N
26러1049, 91, Y
58주2350, 4, Y
99아2937, 63, N
34저1768, 80, Y
11루5812, 26, N
41도7034, 38, Y
89노9821, 49, N
76하4572, 70, Y
30서3918, 86, Y
06수9031, 25, N
23주5074, 11, Y
53너3459, 81, N
40조2190, 58, Y
91서8902, 35, N
29루7418, 96, Y
17소0824, 47, Y
44구1957, 39, N
04부3401, 79, Y
67저2935, 8, N
82바6129, 24, Y
32사7014, 62, N
51주4038, 48, Y
79누5193, 56, N
38우2095, 73, Y
13라7984, 20, N
00너1345, 69, Y
85마5721, 87, N
05소3289, 14, Y
19두1423, 22, Y
43구7184, 95, N
28조5341, 29, Y
90마1845, 51, N
54호3029, 84, Y
07러1958, 33, N
25하8091, 75, Y
11루0145, 90, Y
66머4328, 27, N
78수5196, 72, Y
12아2631, 61, N
31보9473, 83, Y
48조3502, 17, N
63소4725, 68, Y
02가9814, 19, N
73부3279, 3, Y
56사2105, 76, N
27하6302, 1, Y
41너8956, 94, N
69루3094, 18, Y
85마1497, 32, N
90조0873, 65, Y
05부3479, 7, Y
\ No newline at end of file
package org.example.thiefsil;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ThiefSilApplicationTests {
@Test
void contextLoads() {
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment