Desarrollo
Para iniciar el desarrollo de nuestro administrador de consultas. Abrimos nuestro eclipse y creamos un proyecto maven.File->New->MavenProject
Seleccionamos en Create a simple project y presionamos Next

LLenamos los siguientes campos y presionamos Finish:
- Group Id: mx.com.tutosoftware.medicalconsulting
- Artifact Id: medicalconsulting
- Packaging: war
- Name: Medical Consulting

Una vez generado nuestro proyecto maven nos vamos al archivo pom.xml y pegamos el siguiente código esto, para poder compilar con java 1.8.
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

Nos marcara un error que no encuentra el archivo web.xml pero lo solucionaremos de la siguiente manera, hacemos clic derecho en el proyecto y selecionamos Properties

Selecionamos Project Facets en el recuadro seleccionamos Dynamic Web Module 3.1 y Java Server Faces 2.2 y presionamos Apply posterriormente OK

Creamos una carpeta en src/main/webapp llamada WEB-INF.Nota:Si tienes eclipse 2019 te genera el archivo web.xml modificalo por el que esta en el código y luego maven->Update Project...
En el directorio WEB-INF creamos el archivo web.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>medicalconsulting</display-name> <absolute-ordering /> <!-- load spring configuration --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>blitzer</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo-2.0.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<context:annotation-config />
<context:component-scan base-package=">mx.com.tutosoftware.medicalconsulting" />
<mongo:mongo-client host="127.0.0.1" port="27017">
<mongo:client-options write-concern="NORMAL" />
</mongo:mongo-client>
<mongo:db-factory dbname="medicaldb" mongo-ref="mongoClient" />
<mongo:repositories base-package="mx.com.tutosoftware.medicalconsulting.repository">
</mongo:repositories>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" >
<constructor-arg ref="mongoClient">
</constructor-arg>
<constructor-arg name="databaseName" value="medicaldb" >
</constructor-arg>
</bean>
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
<bean class="mx.com.tutosoftware.medicalconsulting.service.ProfesionalService" id="profesionalService"/>
<bean class="mx.com.tutosoftware.medicalconsulting.service.PacienteService" id="pacienteService"/>
<bean class="mx.com.tutosoftware.medicalconsulting.service.TurnoService" id="turnoService"/>
<bean class="mx.com.tutosoftware.medicalconsulting.service.CitaService" id="citaService"/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
<navigation-rule>
<from-view-id>
/index.xhtml
</from-view-id>
<navigation-case>
<from-outcome>
adminMedico
</from-outcome>
<to-view-id>
/adminMedico.xhtml
</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>
adminPaciente
</from-outcome>
<to-view-id>
/adminPaciente.xhtml
</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mx.com.tutosoftware.medicalconsulting</groupId>
<artifactId>medicalconsulting</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org/</url>
<layout>default</layout>
</repository>
</repositories>
<properties>
<csc.version>0.0.1-SNAPSHOT</csc.version>
<primefacestheme.version>1.0.10</primefacestheme.version>
<primefaces.version>7.0</primefaces.version>
<springdata.version>2.0.8.RELEASE</springdata.version>
<spring.version>5.0.7.RELEASE</spring.version>
<jsf2.version>2.2.10</jsf2.version>
<jackson-core.version>2.9.5</jackson-core.version>
<jstl.version>1.2</jstl.version>
<jsp-api.version>2.1</jsp-api.version>
<servlet-api.version>3.1.0</servlet-api.version>
<itext.version>2.1.7</itext.version>
<poi.version>3.17</poi.version>
<elri.version>1.0</elri.version>
<javaeewebapi.version>7.0</javaeewebapi.version>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.7.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Spring ORM support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mongo -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>${springdata.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-core.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>${jsf2.version}</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>${jsf2.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>${elri.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>${javaeewebapi.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${primefaces.version}</version>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>all-themes</artifactId>
<version>${primefacestheme.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
package mx.com.tutosoftware.medicalconsulting.domain;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class Domicilio {
private String calle;
private String numero;
private String colonia;
private String municipio;
private String estado;
private String codigoPostal;
public String getCalle() {
return calle;
}
public void setCalle(String calle) {
this.calle = calle;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getColonia() {
return colonia;
}
public void setColonia(String colonia) {
this.colonia = colonia;
}
public String getMunicipio() {
return municipio;
}
public void setMunicipio(String municipio) {
this.municipio = municipio;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getCodigoPostal() {
return codigoPostal;
}
public void setCodigoPostal(String codigoPostal) {
this.codigoPostal = codigoPostal;
}
}
package mx.com.tutosoftware.medicalconsulting.domain;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="profesional")
public class Profesional {
//Esta clave depende del pais donde sea implmentada
//La aplicación
private String dni;
private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
//el correo va hacer el usuario para loguearse
private String mail;
private String telefono;
private String password;
private Domicilio domicilio;
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidoPaterno() {
return apellidoPaterno;
}
public void setApellidoPaterno(String apellidoPaterno) {
this.apellidoPaterno = apellidoPaterno;
}
public String getApellidoMaterno() {
return apellidoMaterno;
}
public void setApellidoMaterno(String apellidoMaterno) {
this.apellidoMaterno = apellidoMaterno;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Domicilio getDomicilio() {
return domicilio;
}
public void setDomicilio(Domicilio domicilio) {
this.domicilio = domicilio;
}
}
package mx.com.tutosoftware.medicalconsulting.domain;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="paciente")
public class Paciente {
//Esta clave depende del pais donde sea implmentada
//La aplicación
private String dni;
private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
//el correo va hacer el usuario para loguearse
private String mail;
private String telefono;
private String password;
private Domicilio domicilio;
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidoPaterno() {
return apellidoPaterno;
}
public void setApellidoPaterno(String apellidoPaterno) {
this.apellidoPaterno = apellidoPaterno;
}
public String getApellidoMaterno() {
return apellidoMaterno;
}
public void setApellidoMaterno(String apellidoMaterno) {
this.apellidoMaterno = apellidoMaterno;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Domicilio getDomicilio() {
return domicilio;
}
public void setDomicilio(Domicilio domicilio) {
this.domicilio = domicilio;
}
}
package mx.com.tutosoftware.medicalconsulting.domain;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
@Document(collection="turno")
public class Turno {
private String dni;
@DateTimeFormat(iso = ISO.DATE_TIME)
@CreatedDate
private Date horarioInicio;
@DateTimeFormat(iso = ISO.DATE_TIME)
@CreatedDate
private Date horarioFinal;
private int duracionConsulta;
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public Date getHorarioInicio() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTime(horarioInicio);
return calendar.getTime();
}
public void setHorarioInicio(Date horarioInicio) {
this.horarioInicio = horarioInicio;
}
public Date getHorarioFinal() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTime(horarioFinal);
return calendar.getTime();
}
public void setHorarioFinal(Date horarioFinal) {
this.horarioFinal = horarioFinal;
}
public int getDuracionConsulta() {
return duracionConsulta;
}
public void setDuracionConsulta(int duracionConsulta) {
this.duracionConsulta = duracionConsulta;
}
}
package mx.com.tutosoftware.medicalconsulting.domain;
import java.util.Date;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
@Document(collection="cita")
public class Cita {
private String dni;
@DateTimeFormat(iso = ISO.DATE_TIME)
@CreatedDate
private Date horario;
private String nombrePaciente;
private String status;
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public Date getHorario() {
return horario;
}
public void setHorario(Date horario) {
this.horario = horario;
}
public String getNombrePaciente() {
return nombrePaciente;
}
public void setNombrePaciente(String nombrePaciente) {
this.nombrePaciente = nombrePaciente;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}