/**
   * Accepts a POST request with an XML message parameter
   *
   * @param message serialized Message object
   * @return a string with the result of the POST
   */
  @RequestMapping(
      value = "postpos",
      method = RequestMethod.POST,
      consumes = "application/json",
      produces = "application/json")
  public @ResponseBody ResultResponse postPosition(
      @RequestBody PostPositionRequest req,
      HttpServletResponse response,
      HttpServletRequest request) {
    ResultResponse rp = new ResultResponse(Cookie.RESPONSE_BAD_REQUEST);
    String strId = SecurityContextHolder.getContext().getAuthentication().getName();
    long userId =
        Cookie.checkCommonUser402(
            strId, response, request, SecurityContextHolder.getContext().getAuthentication());

    if (PostPositionRequest.checkParameters(req) <= 0) {
      return rp;
    }
    if (req.getLon() < 0.1 && req.getLat() < 0.1) {
      rp.setResult(Cookie.RESPONSE_SUCCESS);
      return rp;
    }
    City city = cityBo.findById(req.getCityId());
    if (city == null || city.getId() <= 0) {
      rp.setResult(Cookie.RESPONSE_SUCCESS);
      return rp;
    }
    int id = 0;
    if (city.getDeep() == Constant.DEEP_CITY) {
      id = city.getId();
    } else if (city.getDeep() == Constant.DEEP_DISTRICT) {
      id = city.getParentId();
    }
    req.setCityId(id);
    Position pos = positionBo.createIfNull(userId);
    if ((req.getCityId() > 0 && pos.getLastEffectCity() != req.getCityId())
        || (req.getCityId() <= 0
            && PositionHelper.distFrom(req.getLat(), req.getLon(), pos.getLat(), pos.getLon())
                > 30000)) {
      PositionLog log =
          new PositionLog(
              null,
              userId,
              pos.getLastPositionTime(),
              pos.getLastEffectLon(),
              pos.getLastEffectLat(),
              pos.getLastEffectCity());
      positionLogBo.save(log);
    }
    pos.setLastEffectCity(pos.getCity());
    pos.setLastEffectLat(pos.getLat());
    pos.setLastEffectLon(pos.getLon());
    pos.setCity(req.getCityId());
    pos.setLon(req.getLon());
    pos.setLat(req.getLat());
    pos.setPositionTime(System.currentTimeMillis());
    pos.setLastPositionTime(System.currentTimeMillis());
    pos.setUpdateTime(System.currentTimeMillis());
    positionBo.update(pos);
    User user = userBo.findById(userId);
    if (user != null && user.getInstallPlace() <= 0) {
      user.setInstallPlace(req.getCityId());
      user.setUpdateTime(System.currentTimeMillis());
      userBo.update(user);
    }
    rp.setResult(Cookie.RESPONSE_SUCCESS);
    return rp;
  }