Загрузка данных


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;
        }
    }
}