Ejemplo n.º 1
0
 def getFace(self, media, userid1, userid2):
     faces = media.get('faces', [])
     logger.debug('faces:%s', faces)
     if not faces:
         return {}
     face_helper = ClassHelper('Face')
     face = {}
     for faceId in faces:
         face = face_helper.get(faceId)
         logger.debug('face:%s', face)
         if not face:
             face = {}
             continue
         assign = face.get('assign', None)
         if not assign:
             continue
         if (assign.get('user', None) == userid1 or assign.get(
                 'user', None) == userid2) and assign.get('status') == 1:
             return face
     return face
Ejemplo n.º 2
0
    def goodsInfo(self):
        try:
            userid = self.user['_id']
            # userid = '5a08fbfbca714330cfd35ddc'
            message_id = self.get_argument('message_id', None)
            message = ClassHelper('Message').get(message_id)
            if not message:
                self.write(ERR_PARA.message)
                return
            logger.debug('message:%s', message)
            file_id = message['m_id']
            media = ClassHelper('Media').find_one({'file': file_id})
            logger.debug('media:%s', media)
            face = None
            if media:
                face = self.getFace(media, message['from_id'],
                                    message['to_id'])
                logger.debug('face1 %s:', face)
                if not face:
                    face['goodsId'] = None
                    face['mosaic'] = 2
                    face['price'] = 0
                    logger.debug('未找到face')
                else:
                    face['goodsId'] = None
                    face['mosaic'] = 10
                    face['price'] = 0
                    if face.get('assign', None):
                        owner_id = face['assign']['user']
                        good = ClassHelper('Goods').find_one(
                            {'goods': face['_id']})
                        if good:
                            face['user'] = face['assign']['user']
                            face['goodsId'] = good['_id']
                            price = good['price'] if good else 0
                            face['price'] = price

                            if media.get('uploader',
                                         None) and media['uploader'] == userid:
                                # 照片贡献者
                                face['mosaic'] = 0
                            elif owner_id == userid:
                                # 照片认领者
                                face['mosaic'] = 5
                            if face['mosaic'] != 0:
                                charge_record = ClassHelper(
                                    'ChargeFlow').find_one({
                                        'user': userid,
                                        'goods': good['_id'],
                                        'status': 1
                                    }) if good else None
                                logger.debug('charge_record%s', charge_record)
                                if charge_record:
                                    face['mosaic'] = 1
                        else:
                            logger.warn('goods is null')
                            # self.write(ERR_PARA.message)
                            # return
            userInfo = {}
            if media:
                logger.debug('uploader:%s', media.get('uploader', None))
                user_info_obj = ClassHelper('UserInfo').find_one(
                    {'user': media.get('uploader', None)})
                logger.debug('user_info_obj:%s', user_info_obj)
                if user_info_obj:
                    userInfo['_id'] = user_info_obj['_id']
                    userInfo['avatar'] = user_info_obj['avatar']
                    userInfo['nickName'] = user_info_obj['nickName']
            logger.debug('userInfo:%s', userInfo)
            if media and face:
                r = {}
                r['errCode'] = 0
                r['width'] = media.get('width', 0)
                r['height'] = media.get('height', 0)
                r['media'] = media['_id']
                r['file'] = media['file']
                r['goodsId'] = face['goodsId']
                r['mosaic'] = face['mosaic']
                r['price'] = face['price']
                r['_id'] = face['_id']
                r['user'] = face.get('user', None)
                r['userInfo'] = userInfo
                if face.get('rect', None) is not None:
                    r['rect'] = face.get('rect')
                r['message_id'] = message_id
                self.write(r)
            else:
                r = {}
                r['errCode'] = 0
                r['width'] = 0
                r['height'] = 0
                r['media'] = None
                r['file'] = None
                r['goodsId'] = None
                r['mosaic'] = 0
                r['price'] = 0
                r['_id'] = None
                r['user'] = None
                r['rect'] = None
                r['userInfo'] = None
                r['message_id'] = message_id
                self.write(r)
        except Exception, e:
            logger.error(e)
            msg = traceback.format_exc()
            logger.error(msg)
            self.write(ERR_PARA.message)
Ejemplo n.º 3
0
    def unreadList(self):
        try:
            logger.debug('self.userid: %s:', self.user['_id'])
            all = int(self.get_argument('all', 0))
            logger.debug('all: %s', all)
            userid = self.user['_id']
            logger.debug('userid:%s', userid)
            # userid = '5a0188ccca714319e603c9e8'
            # userid = '5a0d4d88ca71432378862c53'
            if all == 1:
                # match = {"$match": {"to_id": self.user['_id'],
                #                     "msg_type": 2}}
                # {"$or": [{"to_id": to_id, "from_id": from_id}, {"to_id": from_id, "from_id": to_id}]
                match = {
                    "$match": {
                        "$or": [{
                            "to_id": userid
                        }, {
                            "from_id": userid
                        }],
                        "msg_type": 2
                    }
                }
            else:
                match = {
                    "$match": {
                        "to_id": userid,
                        "status": 0,
                        "msg_type": 2
                    }
                }
            # "59ca0b46ca714306705996dc"
            logger.debug('match:%s', match)
            message_query = MeQuery("Message")
            unread_list = message_query.aggregate([
                match,
                {
                    "$group": {
                        "_id": {
                            "from_id": "$session",
                            "m_id": "$m_id"
                        },
                        # "count": {"$sum": 1},
                        "c": {
                            "$last": "$c"
                        },
                        "id": {
                            "$last": "$_id"
                        },
                        "create_at": {
                            "$last": "$createAt"
                        },
                        "c_type": {
                            "$last": "$c_type"
                        },
                        "status": {
                            "$last": "$status"
                        },
                        "from_name": {
                            "$last": "$from_name"
                        },
                        "msg_type": {
                            "$last": "$msg_type"
                        },
                        "from_id": {
                            "$last": "$from_id"
                        },
                        "to_id": {
                            "$last": "$t"
                            "o_id"
                        },
                        "from_avatar": {
                            "$last": "$from_avatar"
                        },
                        "m_id": {
                            "$last": "$m_id"
                        }
                    }
                },
                {
                    "$sort": {
                        "create_at": -1
                    }
                }
            ])  # 时间倒序
            count_match = {
                "$match": {
                    "to_id": userid,
                    "status": 0,
                    "msg_type": 2
                }
            }
            count_list = message_query.aggregate([
                count_match, {
                    "$group": {
                        "_id": {
                            "from_id": "$session",
                            "m_id": "$m_id"
                        },
                        "count": {
                            "$sum": 1
                        },
                        "from_id": {
                            "$last": "$from_id"
                        },
                        "m_id": {
                            "$last": "$m_id"
                        }
                    }
                }
            ])
            logger.debug('unread_list:%s', unread_list)
            logger.debug('count_list:%s', count_list)
            # 处理count_list
            count_dict = {}
            if count_list:
                for count_data in count_list:
                    otherid = count_data['from_id']
                    mid = count_data['m_id']
                    count_dict[otherid + '_' + mid] = count_data['count']
            logger.debug('count_dict:%s', count_dict)
            # 整理数据
            # other_userinfo = None
            if unread_list:
                for unread_msg in unread_list:
                    del unread_msg['_id']
                    # print type(unread_msg['id'])
                    # print str(unread_msg['id'])
                    # 转换objectId to string
                    unread_msg['id'] = str(unread_msg['id'])
                    # print type(unread_msg['create_at'])
                    unread_msg['create_at'] = long(
                        unread_msg['create_at'].strftime('%s')) * 1000
                    if unread_msg['from_id'] == userid:
                        otherid = unread_msg['to_id']
                        # if not other_userinfo:
                        other_userinfo = ClassHelper('UserInfo').find_one(
                            {'user': unread_msg['to_id']})
                        logger.debug('other_userinfo:%s', other_userinfo)
                        unread_msg['other_name'] = other_userinfo['nickName']
                        unread_msg['other_avatar'] = other_userinfo.get(
                            'avatar', None)
                    else:
                        otherid = unread_msg['from_id']
                        unread_msg['other_name'] = unread_msg['from_name']
                        unread_msg['other_avatar'] = unread_msg['from_avatar']
                    mid = unread_msg['m_id']
                    unread_msg['count'] = count_dict.get(
                        otherid + '_' + mid, 0)

            logger.debug('unread_list after make data :%s', unread_list)
            result = {}
            result['errCode'] = 0
            result['unread_list'] = unread_list
            r = json.dumps(result, ensure_ascii=False)
            self.write(str(r))  # , cls=CJsonEncoder #格式化时间
        except Exception, e:
            logger.error(e)
            msg = traceback.format_exc()
            logger.error(msg)
            self.write(ERR_PARA.message)