def add(self, user_id={"atype": int, "adef": 0}, latitude={"atype": float, "adef": 0.0}, longitude={"atype": float, "adef": 0.0}, content={"atype": unicode, "adef": ""}, resources={"atype": str, "adef":""}, routes={"atype":str, "adef":""}, category_id={"atype": int,"adef": 0}, tags={"atype":unicode,"adef": ""}, with_sku_id={"atype": int, "adef": 0}, with_sku_type={"atype": int, "adef": 0} ): """ 添加一条消息 """ content = content.encode("utf8") tags = tags.encode("utf8") if user_id == 0 or latitude == 0 or longitude == 0: return self._response(Pyobject(Error.param_error)) message_obj = MessageModel.object() message_obj.user_id = user_id message_obj.latitude = latitude message_obj.longitude = longitude message_obj.content = content message_obj.with_sku_id = with_sku_id message_obj.with_sku_type = with_sku_type message_obj.category_id = category_id message_obj.tags = tags message_id = message_obj.insert() resourceIds = resources.split(",") for i in xrange(0,len(resourceIds)): sql = "insert into message_resources(message_id,resource_id) values(%s,%s)" % (message_id,resourceIds[i]) mysql_conn.execsql(sql) routes = resources.split(",") for i in xrange(0,len(routes)): sql = "insert into message_routes(message_id,route_id) values(%s,%s)" % (message_id,routes[i]) mysql_conn.execsql(sql) # 插入mongodb mongo.message.insert({"id": int(message_id), "loc": [longitude, latitude], "category_id": category_id}) return self._response(Pyobject(Error.success, message_id))
def search(self, latitude={"atype": float, "adef": 0}, longitude={"atype": float, "adef": 0}, category_id={"atype": int, "adef": 0}, distance={"atype": int, "adef": 1000}, ): """ 查找消息 """ cond = {} if category_id: cond["category_id"] = category_id message_list = mongo.message.find({"loc": SON([("$near", [longitude, latitude]), ("$maxDistance", distance)])}) data = [] for message in message_list: message_id = message["id"] message_t = MessageModel.table() message_obj = MessageModel.object() cond = message_t.id == message_id if not message_obj.find(cond): continue message_info = {} message_info["id"] = message_obj.id message_info["user_id"] = message_obj.user_id message_info["latitude"] = message_obj.latitude message_info["longitude"] = message_obj.longitude message_info["content"] = message_obj.content message_info["with_sku_id"] = message_obj.with_sku_id message_info["with_sku_type"] = message_obj.with_sku_type message_info["category_id"] = message_obj.category_id message_info["tags"] = message_obj.tags message_info["create_on"] = to_utf8(message_obj.create_on) message_info["nice"] = message_obj.nice point_user = (longitude, latitude) point_message = (message_info["longitude"], message_info["latitude"]) message_info["distance"] = calculate_distance(point_user, point_message) data.append(message_info) return self._response(PyobjectList(Error.success, data))