Загрузка данных
package org.example.controller;
import org.example.service.GeneratorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
@RestController
@RequestMapping("/api/generator")
@CrossOrigin(origins = "*")
public class GeneratorController {
@Autowired
private GeneratorService generatorService;
private final AtomicBoolean isGenerating = new AtomicBoolean(false);
@PostMapping("/generate")
public Map<String, String> generateProfile(@RequestBody Map<String, String> request) {
String projectNumber = request.get("projectNumber");
if (projectNumber == null || projectNumber.isEmpty()) {
return Map.of("error", "projectNumber не указан");
}
if (isGenerating.get()) {
return Map.of("error", "Генерация уже выполняется");
}
String projectType = convertProjectNumberToType(projectNumber);
if (projectType == null) {
return Map.of("error", "Неверный номер проекта");
}
log.info("Запуск генерации для проекта: {}", projectType);
CompletableFuture.runAsync(() -> {
try {
isGenerating.set(true);
generatorService.generate(projectType); // вызываем твой сервис
log.info("Генерация завершена");
} catch (Exception e) {
log.error("Ошибка: {}", e.getMessage());
} finally {
isGenerating.set(false);
}
});
return Map.of("status", "success", "message", "Генерация запущена");
}
@GetMapping("/status")
public Map<String, Object> getStatus() {
return Map.of("isGenerating", isGenerating.get());
}
private String convertProjectNumberToType(String projectNumber) {
switch (projectNumber) {
case "1": return "WEB";
case "2": return "MOBILE";
case "3": return "PPRB";
default: return null;
}
}
}
package org.example.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProfileData {
private int intensity;
private int sla;
}
package org.example.model;
import lombok.Data;
import java.util.List;
@Data
public class ScriptOperation {
private String operation_id;
private String url;
private String method;
private Integer intensity;
private List<ScriptOperation> child_operations;
}
package org.example;
import org.example.service.GeneratorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@Slf4j
@SpringBootApplication
public class ProfileGeneratorApplication implements CommandLineRunner {
@Autowired
private GeneratorService generatorService;
public static void main(String[] args) {
// Проверяем, есть ли параметр для автоматического запуска
if (args.length > 0 && !args[0].equals("--server")) {
// Режим автоматического запуска без веб-сервера
SpringApplication app = new SpringApplication(ProfileGeneratorApplication.class);
app.setWebApplicationType(WebApplicationType.NONE);
app.run(args);
} else {
// Обычный запуск с веб-сервером
SpringApplication.run(ProfileGeneratorApplication.class, args);
}
}
@Override
public void run(String... args) throws Exception {
// Если передан параметр для автоматической генерации
if (args.length > 0) {
String projectNumber = args[0];
String projectType = convertProjectNumberToType(projectNumber);
if (projectType != null) {
log.info("Автоматический запуск для проекта: {}", projectType);
generatorService.generate(projectType);
//System.exit(0);
} else {
log.error("Неверный номер проекта: {}", projectNumber);
System.exit(1);
}
}
}
private String convertProjectNumberToType(String projectNumber) {
switch (projectNumber) {
case "1": return "WEB";
case "2": return "MOBILE";
case "3": return "PPRB";
default: return null;
}
}
}