Sistema de Gestión de Distribución de Agua con Spring Boot

Dependencias Maven

Dependencia Función
pagehelper-spring-boot-starter Paginación para MyBatis
spring-boot-starter-thymeleaf Motor de plantillas
mybatis-spring-boot-starter Integración MyBatis
spring-boot-starter-web Desarrollo web
lombok Generación automática de getters/setters
mybatis-plus-boot-starter Extensiones MyBatis Plus
druid-spring-boot-starter Pool de conexiones
hutool-all Utilidades

Configuración application.yml

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/distribucion_agua?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      min-idle: 5
      max-active: 10
      max-wait: 3000
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
pagehelper:
  helper-dialect: mysql

Autenticación de Usuarios

@Service
public class AutenticacionImpl implements ServicioAutenticacion {
  
  @Autowired
  private UsuarioMapper mapeadorUsuario;

  public boolean verificarCredenciales(String usuario, String clave) {
    QueryWrapper<Usuario> filtro = new QueryWrapper<>();
    filtro.eq("nombre_usuario", usuario);
    Usuario registro = mapeadorUsuario.selectOne(filtro);
    
    return registro != null && registro.getClave().equals(clave);
  }
}
@Controller
public class ControladorAutenticacion {

  @Autowired
  private ServicioAutenticacion servicioAuth;

  @PostMapping("/login")
  public String procesarLogin(String usuario, String clave, Model modelo, HttpSession sesion) {
    if(servicioAuth.verificarCredenciales(usuario, clave)) {
      sesion.setAttribute("usuarioActual", usuario);
      return "menuPrincipal";
    } else {
      modelo.addAttribute("error", "Credenciales inválidas");
      return "inicio";
    }
  }
}

Módulo de Clientes

@Service
public class ServicioClienteImpl implements ServicioCliente {

  @Autowired
  private ClienteMapper mapeadorCliente;

  public PageInfo<Cliente> obtenerClientes(Cliente filtro) {
    QueryWrapper<Cliente> consulta = new QueryWrapper<>();
    
    if(!filtro.getNombre().isEmpty()) 
      consulta.like("nombre_cliente", filtro.getNombre());
    
    return new PageInfo<>(mapeadorCliente.selectList(consulta));
  }
}

Módulo de Repartidores

@Mapper
public interface RepartidorMapper extends BaseMapper<Repartidor> {
  @Update("UPDATE tb_repartidor SET salario = #{salario} WHERE id = #{id}")
  int actualizarSalario(@Param("id") Integer id, @Param("salario") String salario);
}

Gestión de Entregas

<select id="obtenerHistorial" resultMap="mapeoEntrega">
  SELECT e.id, r.nombre, c.nombre_cliente, e.fecha_entrega, e.cantidad
  FROM entregas e
  JOIN clientes c ON e.cliente_id = c.id
  JOIN repartidores r ON e.repartidor_id = r.id
  <where>
    <if test="nombreRepartidor != null">
      AND r.nombre LIKE CONCAT('%', #{nombreRepartidor}, '%')
    </if>
  </where>
</select>

Cálculo de Salarios

<select id="calcularSalarios" resultType="com.example.dominio.Salario">
  SELECT r.nombre, r.salario_base, 
         COALESCE(SUM(e.cantidad), 0) AS entregas,
         (r.salario_base + COALESCE(SUM(e.cantidad * r.comision), 0)) AS salario_total
  FROM repartidores r
  LEFT JOIN entregas e ON r.id = e.repartidor_id
  GROUP BY r.id
</select>

Etiquetas: SpringBoot MyBatis Thymeleaf MyBatis-Plus Druid

Publicado el 6-9 00:53