package controllers; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import models.GeoRestos; import models.Resto; import models.Menu; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; import play.Logger; import play.libs.Json; import play.mvc.Controller; import play.mvc.Result; import views.html.restos.geoloc; import views.html.restos.map; import views.html.restos.resto; import views.html.restos.restos; import com.avaje.ebean.Ebean; import com.avaje.ebean.SqlRow; public class Oumanger extends Controller { public static Result index() { return ok(geoloc.render()); } public static Result map() { return ok(map.render(null, null)); } public static Result get(Long id) { Resto restaurant = Resto.find.byId(id); return ok(resto.render(restaurant)); } public static Result centeredMap(Double lat, Double lon) { return ok(map.render(lat, lon)); } public static Result list(Integer dist, Double lat, Double lon, String format) { Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, 14); c.set(Calendar.MINUTE, 00); Date today = c.getTime(); String distance = "(POINT(" + lat + "," + lon + ")<->POINT(latitude, longitude))"; // Date today = new Date(); List<Resto> listResto = new ArrayList<Resto>(); String sql = "SELECT r.id, r.mobile, " + distance + " as distance, r.raison_sociale, r.type, r.categorie, r.telephone, r.adresse" + ", r.code_postale, r.commune, r.latitude, r.longitude, r.internet, m.text , m.creation_date" + " FROM resto r LEFT JOIN menu m ON m.resto=r.id " // + // " WHERE (m.reception_date is null OR date(m.reception_date) = current_date)" + " WHERE " + distance + "*6367445*pi()/180<" + dist + " ORDER BY m.creation_date," + distance + ""; if (format == null) { sql += " limit 20"; } else { sql += " limit 500"; } List<SqlRow> items = Ebean.createSqlQuery(sql).findList(); for (SqlRow sqlRow : items) { Resto resto = new Resto(); resto.id = sqlRow.getInteger("id"); resto.raisonSociale = sqlRow.getString("raison_sociale"); resto.categorie = sqlRow.getString("categorie"); resto.typeDeResto = sqlRow.getString("type"); resto.telephone = sqlRow.getString("telephone"); resto.mobile = sqlRow.getString("mobile"); resto.adresse = sqlRow.getString("adresse"); resto.codePostale = sqlRow.getString("code_postale"); resto.commune = sqlRow.getString("commune"); resto.latitude = sqlRow.getDouble("latitude"); resto.longitude = sqlRow.getDouble("longitude"); resto.internet = sqlRow.getString("internet"); resto.menudujour = sqlRow.getString("text"); resto.datedujour = sqlRow.getDate("creation_date"); Double tmp = sqlRow.getDouble("distance") * 6367445 * Math.PI / 180; resto.distance = tmp.intValue(); if (resto.datedujour != null && DateUtils.isSameDay(resto.datedujour, today)) { resto.beforeMidi = Boolean.valueOf(resto.datedujour.before(today)); } if (StringUtils.isNotEmpty(resto.mobile)) { // resto. = sqlRow.getDate("reception_date"); /* * List<Menu> findList = Menu.find.where().eq("resto.mobile", * resto.mobile) .orderBy("creationDate desc").findList(); * List<Menu> filteredMenu = new ArrayList<Menu>(); for (Menu * menu : findList) { Logger.debug(today + "check menu :"+ * menu.messageId + " " + menu.receptionDate); if ( * DateUtils.isSameDay(menu.receptionDate, today)) { * Logger.debug("add menu :"+ menu.messageId + " " + menu.text); * filteredMenu.add(menu); } } // java8 List<Menu> filteredMenu * = findList.stream().filter(u -> * DateUtils.isSameDay(u.receptionDate, * today)).collect(Collectors.toList()); * * resto.menudujour = (filteredMenu.size() > 0 ? * filteredMenu.get(0).text : null); */ } listResto.add(resto); } Collections.sort(listResto); // Collections.reverse(restos); if (format == null) { return ok(restos.render(listResto)); } else if (format.equals("geojson")) { GeoRestos georestos = GeoRestos.parse(listResto); return ok(Json.toJson(georestos)); } else if (format.equals("json")) { return ok(Json.toJson(listResto)); } else { return notFound(); } } }