import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/* ========= ENUMS ========= */
enum StatusOS {
ABERTA,
EM_EXECUCAO,
FINALIZADA
}
enum TipoOS {
CORRETIVA,
PREVENTIVA
}
enum PrioridadeOS {
BAIXA,
MEDIA,
ALTA
}
/* ========= MODEL ========= */
class Responsavel {
Long id;
String nome;
String area;
Responsavel(Long id, String nome, String area) {
this.id = id;
this.nome = nome;
this.area = area;
}
}
class OrdemServico {
Long id;
String titulo;
String descricao;
TipoOS tipo;
PrioridadeOS prioridade;
StatusOS status;
LocalDateTime dataAbertura;
LocalDateTime dataFechamento;
Responsavel responsavel;
OrdemServico(Long id, String titulo, String descricao,
TipoOS tipo, PrioridadeOS prioridade) {
this.id = id;
this.titulo = titulo;
this.descricao = descricao;
this.tipo = tipo;
this.prioridade = prioridade;
this.status = StatusOS.ABERTA;
this.dataAbertura = LocalDateTime.now();
}
}
class HistoricoOS {
StatusOS statusAnterior;
StatusOS statusNovo;
LocalDateTime data;
String observacao;
HistoricoOS(StatusOS anterior, StatusOS novo, String obs) {
this.statusAnterior = anterior;
this.statusNovo = novo;
this.observacao = obs;
this.data = LocalDateTime.now();
}
}
/* ========= REPOSITORY (simulado) ========= */
class OrdemServicoRepository {
List<OrdemServico> ordens = new ArrayList<>();
void save(OrdemServico os) {
ordens.add(os);
}
OrdemServico findById(Long id) {
return ordens.stream()
.filter(o -> o.id.equals(id))
.findFirst()
.orElse(null);
}
List<OrdemServico> findAll() {
return ordens;
}
}
/* ========= SERVICE ========= */
class OrdemServicoService {
OrdemServicoRepository repository;
List<HistoricoOS> historico = new ArrayList<>();
OrdemServicoService(OrdemServicoRepository repository) {
this.repository = repository;
}
void criarOS(Long id, String titulo, String descricao,
TipoOS tipo, PrioridadeOS prioridade) {
OrdemServico os = new OrdemServico(id, titulo, descricao, tipo, prioridade);
repository.save(os);
historico.add(new HistoricoOS(null, StatusOS.ABERTA, "OS criada"));
System.out.println("✔ OS criada: " + titulo);
}
void atribuirResponsavel(Long osId, Responsavel r) {
OrdemServico os = repository.findById(osId);
os.responsavel = r;
System.out.println("👤 Responsável atribuído: " + r.nome);
}
void iniciarOS(Long osId) {
OrdemServico os = repository.findById(osId);
if (os.status != StatusOS.ABERTA) {
System.out.println("❌ OS não pode ser iniciada");
return;
}
historico.add(new HistoricoOS(os.status, StatusOS.EM_EXECUCAO, "OS iniciada"));
os.status = StatusOS.EM_EXECUCAO;
}
void finalizarOS(Long osId) {
OrdemServico os = repository.findById(osId);
if (os.status != StatusOS.EM_EXECUCAO) {
System.out.println("❌ OS não pode ser finalizada");
return;
}
historico.add(new HistoricoOS(os.status, StatusOS.FINALIZADA, "OS finalizada"));
os.status = StatusOS.FINALIZADA;
os.dataFechamento = LocalDateTime.now();
}
void listarOS() {
repository.findAll().forEach(os ->
System.out.println(
os.id + " | " + os.titulo +
" | " + os.status +
" | Prioridade: " + os.prioridade
)
);
}
void exibirHistorico() {
historico.forEach(h ->
System.out.println(
h.statusAnterior + " → " + h.statusNovo +
" | " + h.observacao +
" | " + h.data
)
);
}
}
/* ========= CONTROLLER (simulado) ========= */
public class Main {
public static void main(String[] args) {
OrdemServicoRepository repository = new OrdemServicoRepository();
OrdemServicoService service = new OrdemServicoService(repository);
Responsavel tecnico = new Responsavel(1L, "Carlos", "Manutenção");
// Simulando endpoints REST
service.criarOS(1L, "Troca de lâmpada", "Lâmpada queimada no corredor",
TipoOS.CORRETIVA, PrioridadeOS.BAIXA);
service.atribuirResponsavel(1L, tecnico);
service.iniciarOS(1L);
service.finalizarOS(1L);
System.out.println("\n📋 ORDENS DE SERVIÇO:");
service.listarOS();
System.out.println("\n🕓 HISTÓRICO:");
service.exibirHistorico();
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: