我有一个Java API Crud,使用诸如“获取单个项目或项目列表”之类的简单查询效果很好,问题是当我需要执行更复杂的查询并为API传递值列表以应用更多内容时从mysql表返回的数据的复杂过滤器。

我有一个名为“ hours”的表,其中包含如下数据:

[{"id":1,"hour":"08:00"},{"id":2,"hour":"08:05"},{"id":3,"hour":"08:10"},{"hour":4,"hora":"08:15"},{"id":5,"hour":"08:20"}]


还有一个名为“ turns”的表,其中包含以下数据:

 [{"id":1,"solicitante":"asdasdas","telefono":null,"tipoDocumento":{"id":1,"tipodoc":"Dni"},"numeroDocumento":"32821535","email":null,"hours":{"id":1,"hour":"08:00"},"numeroTurno":"A1001","fecha":"2016-02-02","controlFecha":"2016-02-11 18:27:52.0","formatFecha":"2016-02-02"},{"id":10,"solicitante":"asddasdas asdasdas","telefono":null,"tipoDocumento":{"id":1,"tipodoc":"Dni"},"numeroDocumento":"2331312","email":null,"hours":{"id":2,"hour":"08:05"},"numeroTurno":"A1002","fecha":"2016-02-02","controlFecha":"2016-02-11 18:27:52.0","formatFecha":"2016-02-02"}]


我想做的是查询以返回特定日期未使用的“小时数”。
不太确定如何执行此操作,因此我尝试了以下操作:

@RequestMapping(value = "/hours/{takenHours}", method = RequestMethod.GET)
@ResponseBody
public List<Hours> queryHours(@RequestParam(value = "takenHours") List<String> takenHours) {
    List<Hours> hours = hoursService.getHours(takenHours);
    return hours;
}

 @Override
public List<Hours> getHours(List<String> takenHours) {
    List<Hours> hours = hoursRepository.findByHourNotIn(takenHours);
    return hours;
}


因此,我查询了特定的一天,返回所有花费的时间,然后尝试将数组发送给该方法。
稍后再添加日期过滤器(findByHoraNotInAndDate)。

不知道这是否是最好的方法,将很乐意采取任何想法。

我正在使用AngularJS来处理前端。

最佳答案

修正了改变我解决问题的方式。
以分钟为单位列出小时数,然后使用简单的for循环将其格式化并扔给控制器。

@Entity
@Table(name = "horario")
public class Horario implements Serializable {

private static final long serialVersionUID = 1L;
private Long id;
private Integer dia;
private Integer horarioInicio;
private Integer horarioFin;
private Integer duration;

@Id
@GeneratedValue
@Column(name = "id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

@Column(name = "dia")
public Integer getDia() {
    return dia;
}

public void setDia(Integer dia) {
    this.dia = dia;
}

@Column(name = "horario_inicio")
public Integer getHorarioInicio() {
    return horarioInicio;
}

public void setHorarioInicio(Integer horarioInicio) {
    this.horarioInicio = horarioInicio;
}

@Column(name = "horario_fin")
public Integer getHorarioFin() {
    return horarioFin;
}

public void setHorarioFin(Integer horarioFin) {
    this.horarioFin = horarioFin;
}

@Transient
public List<Integer> getHorarios(){
    List<Integer> horarios = new ArrayList<Integer>();
    for(Integer i = horarioInicio; i <= horarioFin; i+=duration){
        horarios.add(i);
    }
    return horarios;
}

@Column(name = "duration")
public Integer getDuration() {
    return duration;
}

public void setDuration(Integer duration) {
    this.duration = duration;
}

@Transient
public List<String> getHorariosLibres(List<Integer> horariosTomados){

    List<Integer> horariosTemporal = getHorarios();
    horariosTemporal.removeAll(horariosTomados);
    List<String> horariosLibres = new ArrayList<String>();
    for (Integer horario : horariosTemporal){
        int hours = (horario / 60);
        int minutes = (horario % 60);
    String hours1 = null;
    String minutes1 = null;
        if(hours == 7 || hours == 8 || hours == 9){
            hours1 = "0" + hours + ":";
        }else{
            hours1 = hours + ":";
        }
        if(minutes == 5 || minutes == 0){
            minutes1 = "0" + minutes;
        }else{
            minutes1 = String.valueOf(minutes);
        }

        horariosLibres.add(hours1 + minutes1);

    }

    return horariosLibres;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Horario other = (Horario) obj;
    if (id == null) {
        if (other.id != null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    return true;
}

}

这是控制器
    @Entity
    @Table(name = "horario")
    public class Horario implements Serializable {

        private static final long serialVersionUID = 1L;
        private Long id;
        private Integer dia;
        private Integer horarioInicio;
        private Integer horarioFin;
        private Integer duration;

        @Id
        @GeneratedValue
        @Column(name = "id")
        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        @Column(name = "dia")
        public Integer getDia() {
            return dia;
        }

        public void setDia(Integer dia) {
            this.dia = dia;
        }

        @Column(name = "horario_inicio")
        public Integer getHorarioInicio() {
            return horarioInicio;
        }

        public void setHorarioInicio(Integer horarioInicio) {
            this.horarioInicio = horarioInicio;
        }

        @Column(name = "horario_fin")
        public Integer getHorarioFin() {
            return horarioFin;
        }

        public void setHorarioFin(Integer horarioFin) {
            this.horarioFin = horarioFin;
        }

        @Transient
        public List<Integer> getHorarios(){
            List<Integer> horarios = new ArrayList<Integer>();
            for(Integer i = horarioInicio; i <= horarioFin; i+=duration){
                horarios.add(i);
            }
            return horarios;
        }

        @Column(name = "duration")
        public Integer getDuration() {
            return duration;
        }

        public void setDuration(Integer duration) {
            this.duration = duration;
        }

        @Transient
        public List<String> getHorariosLibres(List<Integer> horariosTomados){

            List<Integer> horariosTemporal = getHorarios();
            horariosTemporal.removeAll(horariosTomados);
            List<String> horariosLibres = new ArrayList<String>();
            for (Integer horario : horariosTemporal){
                int hours = (horario / 60);
                int minutes = (horario % 60);
            String hours1 = null;
            String minutes1 = null;
                if(hours == 7 || hours == 8 || hours == 9){
                    hours1 = "0" + hours + ":";
                }else{
                    hours1 = hours + ":";
                }
                if(minutes == 5 || minutes == 0){
                    minutes1 = "0" + minutes;
                }else{
                    minutes1 = String.valueOf(minutes);
                }

                horariosLibres.add(hours1 + minutes1);

            }

            return horariosLibres;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Horario other = (Horario) obj;
            if (id == null) {
                if (other.id != null)
                    return false;
            } else if (!id.equals(other.id))
                return false;
            return true;
        }

    }

关于javascript - JavaScript到Java到MYSQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35413117/

10-11 04:13
查看更多