package com.andieguo.nearby.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.andieguo.nearby.bean.GPS;
import com.andieguo.nearby.bean.UserInfo;
import com.andieguo.nearby.message.NearbyInfo;
import com.andieguo.nearby.message.NearbyInfoResponse;
import com.andieguo.nearby.service.Service;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* 类说明
*
*/
public class NearbyServlet extends HttpServlet {
public static void main(String[] args) {//测试方法
Service service = new Service();
UserInfo user = new UserInfo();
user.setId("861344022478010");
// 保存或更新用户gps数据
GPS gps = new GPS();
gps.setLatitude("50");
gps.setLongitude("110");
gps.setUser(user);
gps.setTime(new Date());
try {
service.saveOrUpdateGPS(gps);// 如果gps表中包含这个用户,则跟新;如果没有该用户则保存
} catch (SQLException e) {
e.printStackTrace();
}
}
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String longitude = req.getHeader("longitude");
String latitude = req.getHeader("latitude");
String userId = req.getHeader("user_id");
System.out.println("userId:" + userId + ",longitude:" + longitude
+ ",latitude:" + latitude);
Service service = new Service();
UserInfo user = new UserInfo();
user.setId(userId);
// 保存或更新用户gps数据
GPS gps = new GPS();
gps.setLatitude(latitude);
gps.setLongitude(longitude);
gps.setUser(user);
gps.setTime(new Date());
try {
service.saveOrUpdateGPS(gps);// 1、如果gps表中包含这个用户,则跟新(latitude、longitude、geohash);2、如果没有该用户则保存(latitude、longitude、geohash)
} catch (SQLException e) {
e.printStackTrace();
}
// 查找附近的人
NearbyInfoResponse result = new NearbyInfoResponse();
try {
//在上一步已经根据最新的latitude和longitude生成了最新的geohash。根据userId找到GPS数据中最新的geohash.
List<NearbyInfo> list = service.findList(userId, longitude,
latitude);
result.setList(list);
} catch (SQLException e) {
e.printStackTrace();
}
setSuccess(resp, result);
}
protected String getStringParameter(HttpServletRequest req,
String parameter, String defaultValue) {
String value = req.getParameter(parameter);
if (value == null || value.trim().isEmpty()) {
value = defaultValue;
}
return value.trim();
}
protected void setSuccess(HttpServletResponse resp, Object obj)
throws IOException {
GsonBuilder builder = new GsonBuilder();
// 不转换没有 @Expose 注解的字段
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();
String json = gson.toJson(obj);
resp.setStatus(HttpServletResponse.SC_OK);
resp.setContentType("application/json");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
out.print(json);
out.flush();
out.close();
}
}