Dúvida de design de entidade de Ordem de Serviço para sistema web

13 respostas
poojava
R

Tenho uma entidade Ordem de Serviço e estou com dúvida na implementação de um novo atributo para ela. A ordem de serviço é referente a equipamentos elétricos e além dos atributos de tipo, marca, potencia eu preciso persistir o status da Ordem de Serviço.

O status poderia ser “Aprovada”, “Rejeitada”, “Finalizada”. Gostaria de registrar a data de saida dela (gostaria de dicas de como implementar isso também). Estou usando Spring Boot , thymeleaf e hibernate com banco mysql

Qual seria o melhor jeito de implementar a classe Status pra se relacionar com a Ordem de Serviço ?

@Entity
@Table(name = "ORDENS_SERVICO")
public class OrdemServico {
	
	@Id
	@GenericGenerator(name="seq_id", strategy="com.web.mja.mja.domain.CodigoOSGenerator")
	@GeneratedValue(generator="seq_id")
	@Column(unique = true, nullable = false, length = 10)
	private String codigo;

	@Column
	@CreationTimestamp
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataEntrada;

	@Column
	@UpdateTimestamp
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAtualizacao;

	@ManyToOne
	@JoinColumn(name = "cliente_id_fk")
	private Cliente cliente;

	@NotNull
	@Column(nullable = false)
	@Enumerated(EnumType.STRING)
	private TipoEquipamento tipo;

	@NotNull
	@Enumerated(EnumType.STRING)
	private Marca marca;

	@Enumerated(EnumType.STRING)
	private Potencia potencia;

	private String descricao;

13 Respostas

Lucas_Camara

Você pretende manter historico dos status de uma ordem de serviço?

R

Sim, a data de cada tipo de status

Lucas_Camara

Então uma Ordem de Serviço pode ter um ou mais status. Com isso, vc teria que manter uma relacionamento 1*n.

No mapeamento, a ordem de serviço teria uma lista de status num relacionamento oneToMany. E para facilitar, vc tb pode criar um outro relacionamento oneToOne com status indicando o status atual.

andrebmarinho

Rafael,

Uma sugestão: Eu colocaria os atributos: potencia, marca, tipoEquipamento como atributos de um objeto Equipamento, por sua vez Equipamento como atributo da ordem de serviço.

Não sei se fui claro, mas acho mais lógico.

R

Sim, esse desenho faz mais sentido André, valeu.

R

Então Lucas, onde entraria o registro de data ai ? N entendi isso

Lucas_Camara

A data é do status, correto? Então vc teria algo assim:

TB_StatusOrdemServico

id_status -> PK
ds_status -> Status atribuido (Aprovada, Rejeitada, Finalizada)
id_ordemservico -> FK TB_OrdemServico
dt_status -> Data em que o status foi atribuído à ordem de serviço

guilhermebhte

Entendo que este é o cenário ideal.

andrebmarinho

A ordem de serviço pode ter varias datas. Achei interessante ter a data vinculada ao status.

Mas por exemplo uma ordem de serviço tem outras datas que em nada tem relação com o status, exemplo: data de entrada do equipamento, data da ultima atualização.

Quanto ao conceito de data vinculado ao status, fiquei curioso, como funcionaria?

guilhermebhte

Entendo que esta entidade só deverá ser populada, se mudar o status, assim precisa da data/hora.

Lucas_Camara

Eu esqueci de colocar umas coisas:

TB_OrdemServico

id_ordemservico -> PK
id_status_atual -> FK TB_StatusOrdemServico
// demais campos

TB_StatusOrdemServico

id_statusOrdemServico -> PK
id_status -> FK TB_Status
id_ordemservico -> FK TB_OrdemServico
dt_status -> Data em que o status foi atribuído à ordem de serviço
id_usuario -> Usuário quem executou a ação que gerou o status
// demais campos

TB_Status

id_status -> PK
nm_status -> Nome do status
// demais campos

Essa é uma ideia que pensei, supondo que uma ordem de serviço pode ter um mesmo status mais de uma vez (se não puder, crie uma constraint para controlar isso).

R

Peguei essas dicas de vocês montei um modelo conceitual prévio pra fazer uma implementação mais
elaborada.

Sugestões são bem vindas.

andrebmarinho

Ficou muito legal, apenas acrescentaria uma entidade PROBLEMA e SOLUCAO se relacionando com a entidade ORDEMSERVICO

Criado 24 de fevereiro de 2019
Ultima resposta 9 de abr. de 2019
Respostas 13
Participantes 4