Esempio n. 1
0
 def getUser(self, userId, isUser=-1):
     if isUser == 1:
         userHelper = ClassHelper("UserInfo")
         obj = userHelper.find_one({'user': userId}) or {}
     else:
         obj = ClassHelper("BackupUser").get(userId) or {}
     if not obj:
         userHelper = ClassHelper("UserInfo")
         obj = userHelper.find_one({'user': userId}) or {}
     return self.filter_field(obj)
Esempio n. 2
0
 def getId(self, className, query):
     classHelper = ClassHelper(className)
     result = classHelper.find_one(query,keys={"_id":1,"acl":1})
     acl = MeACL(result['acl'])
     if not acl.readAccess(self.user):
         return None
     return result['_id']
Esempio n. 3
0
    def follow(user, followee, is_user=True):
        if not user or not followee:
            log.err( "FollowHelper-->follow userId:%s, followeeId %s", user, followee)
            return
        if is_user:
            fieldname = "followee"
        else:
            fieldname = "backupFollowee"

        # 查找followee是否关注user, 如果关注则需要添加双向关注关系
        followHelper = ClassHelper(FollowHelper.classame)
        effect=1
        if is_user:
            result = followHelper.find_one({'user': followee, fieldname: user, 'effect': {'$gte': 1}})
            if not result:
                effect = 1
            else:
                effect = 2
        # 添加feed记录,第一次关注才添加
        # followRecord = followHelper.find_one({'user': user, fieldname: followee, 'effect': {'$ne': 0}})
        # if not followRecord:
        #     addFeedRecord(user, 'follow', followRecord['_id'])
        #TODO: 这里事务的管理不太严格,应该关注和粉丝统一起来
		# 添加我的关注
        followee_action = {'destClass':'StatCount', 'query': {'name': 'followees_'+user}, 'action':{'@inc':{'count':1}}}
        follower_action = {'destClass':'StatCount', 'query': {'name': 'followers_'+followee}, 'action':{'@inc':{'count': 1}} }
        actions = [follower_action, followee_action]
        followHelper.updateOne({'user': user, fieldname: followee}, {'$set': {'effect': effect}}, transactions=actions, upsert=True)

        # 添加followee也是user的粉丝,则需要处理followee的双向关注,否则只添加粉丝数量
        if effect==2:
            followHelper.updateOne({'user': followee, fieldname: user}, {"$set": {'effect': effect,'updateAt':result['updateAt']}})
 def delete(self, className, objectId):
     if not objectId:
         self.write(ERR_PARA.message)
         return
     if BaseConfig.deleteClass.count(className) <= 0:
         self.write(ERR_USER_PERMISSION.message)
         return
     try:
         ObjectId(objectId)
     except Exception:
         self.write(ERR_OBJECTID_MIS.message)
         return
     classHelper = ClassHelper(className)
     obj = classHelper.find_one({"_id": objectId})
     if not obj:
         self.write(ERR_OBJECTID_MIS.message)
         return
     mo = MeObject(className, obj, False)
     mo.overLoadGet = False
     acl = MeACL(mo['acl'])
     if not acl.deleteAccess(self.user):
         self.write(ERR_USER_PERMISSION.message)
         return
     else:
         classHelper.delete(objectId)
         self.write(ERR_SUCCESS.message)
Esempio n. 5
0
 def deleteMediaFace(self, mediaId):
     mediaHelper = ClassHelper("Media")
     media = mediaHelper.find_one(query={"_id": mediaId}, keys={"faces": 1})
     tran = []
     if media:
         for face in media['faces']:
             tran.append({
                 'destClass': 'Face',
                 'query': {
                     '_id': face
                 },
                 'action': {
                     '@set': {
                         'status': 0
                     }
                 }
             })
         result = mediaHelper.update(mediaId, {"$set": {
             'status': 0
         }},
                                     transaction=tran)
         if result:
             self.write(ERR_SUCCESS.message)
         else:
             self.write(ERR_INVALID.message)
     else:
         self.write(ERR_PATH_PERMISSION.message)
Esempio n. 6
0
 def getJson(self, className, query):
     classHelper = ClassHelper(className)
     result = classHelper.find_one(query)
     mo = MeObject(className, result, False)
     mo.overLoadGet = False
     acl = MeACL(mo['acl'])
     if not acl.readAccess(self.user):
         return None
     return mo
 def filterAuTH(self, userId, obj):
     for auth in self.blacklistAuth:
         if self.classname == auth['classname']:
             classHelper = ClassHelper("Blacklist")
             item = classHelper.find_one({
                 'user': obj[auth['foreign']],
                 "blacker": userId
             })
             if item:
                 log.warn("user %s black blacker %s", obj[auth['foreign']],
                          userId)
                 return None
     return obj
Esempio n. 8
0
def orderCallback(oId, userId, status, order):
    '''
    根据支付结果更新订单的状态
    :param oId:RechargeFlow Id
    :param userId:用户Id
    :param status: 支付是否成功,1为成功,3为等待验证
    :param order:第三方平台返回订单信息,包括错误码
    :return:
    '''
    log.debug('oId:%s, userId:%s, status:%d, order:%s', oId, userId, status,
              order)
    ###更新充值流水记录
    orderHelper = ClassHelper("RechargeFlow")
    rechargeFlow = orderHelper.get(oId)
    walletHelper = ClassHelper("Wallet")
    walletInfo = walletHelper.find_one({"user": userId})
    if status == 1:  # 充值成功,更新钱包
        rechargeFlow_action = {
            'destClass': 'RechargeFlow',
            'query': {
                "_id": oId
            },
            'action': {
                "@set": {
                    "status": status,
                    "order": order
                }
            }
        }
        if not walletInfo:  # 未找到钱包直接创建
            wallet = {"user": userId, 'balance': rechargeFlow['amount']}
            walletInfo = walletHelper.create(wallet,
                                             transaction=[rechargeFlow_action])
        else:
            wallet = {"$inc": {'balance': rechargeFlow['amount']}}
            walletInfo = walletHelper.update(walletInfo['_id'],
                                             wallet,
                                             transaction=[rechargeFlow_action])
            return walletInfo
    else:
        rechargeFlow = orderHelper.update(
            oId, {"$set": {
                "status": status,
                "order": order
            }})
        return rechargeFlow
 def sentMessage(self, obj):
     item = self.autoMessage.get((self.className, self.method), None)
     if not item:
         return
     userClassHelper = ClassHelper("UserInfo")
     userInfo = userClassHelper.find_one({"user": self.userId},
                                         {'nickName': 1})
     if not userInfo:
         return
     obj.update(userInfo)
     title = item['title'].format(**obj)
     template = item['template'].format(**obj)
     # TODO
     pushData = {"userid": obj['to'], "title": title, "text": template}
     log.info("Push Data:%s", json.dumps(pushData))
     try:
         res = requests.post(self.pushUrl,
                             data=json.dumps(pushData),
                             headers={'X-MeCloud-Debug': '1'})
         print res.text
     except Exception, ex:
         log.err("Push Err:%s", ex)
Esempio n. 10
0
    def unfollow(user, followee, is_user=True):
        if not user or not followee:
            log.err( "FollowHelper-->unfollow userId:%s, followeeId %s", user, followee)
            return;
        if is_user:
            fieldname = "followee"
        else:
            fieldname = "backupFollowee"

        followHelper = ClassHelper(FollowHelper.classame)
        result = followHelper.find_one({'user': followee, 'followee': user, 'effect': {'$gte': 2}})
        if result:
            #双向关注,需要处理followee的双向关注effect和粉丝数量
            followHelper.updateOne( {'user': followee, fieldname: user}, {"$set": {'effect': 1,'updateAt':result['updateAt']}} )

        # 取消我的关注
        followee_action = {'destClass': 'StatCount', 'query': {'name': 'followees_' + user},
                           'action': {'@inc': {'count': -1}}}
        follower_action = {'destClass': 'StatCount', 'query': {'name': 'followers_' + followee},
                           'action': {'@inc': {'count': -1}}}
        actions = [follower_action, followee_action]
        followHelper.updateOne( {'user': user, fieldname: followee}, {"$set": {'effect': 0}},
                                transactions=actions, upsert=True )
Esempio n. 11
0
 def getFace(self, faceId):
     faceHelper = ClassHelper("Face")
     obj = faceHelper.find_one(query={"_id": faceId},
                               keys={
                                   "rect": 1,
                                   "possible.score": 1,
                                   "file": 1
                               }) or {}
     item = {}
     item['faceId'] = faceId
     item['rect'] = obj['rect']
     item['file'] = obj['file']
     item['score'] = obj['possible'][0]['score']
     # user = {}
     # if obj:
     #     if "uploader" in obj:
     #         user = self.getUser(obj['uploader'],1)
     #     elif "backupUser" in obj:
     #         user = self.getUser(obj['backupUser'], 0)
     #     else:
     #         pass
     #     user = self.filter_field(user)
     # obj = self.filter_field(obj)
     return item
Esempio n. 12
0
def profile(userId, isUser=1):  # isUser:1真实用户,0backupUser
    obj = {
        'followees': 0,
        'relationStatus': 0,
        'blackStatus': 0,
        'isUser': isUser  # 1为user,0为backupUser
    }
    try:
        followeeHelper = ClassHelper('Followee')
        faceHelper = ClassHelper('Face')
        if isUser:
            userInfoHelper = ClassHelper('UserInfo')
            item = userInfoHelper.find_one({"user": userId})
            obj['user'] = item['user']
            # 关注数
            followeesCount = followeeHelper.query_count({
                'user': userId,
                "effect": {
                    "$gt": 0
                }
            }) or 0
            obj['followees'] = followeesCount
            # 照片数
            mediasCount = faceHelper.query_count({
                'assign.user': userId,
                'assign.status': 1
            }) or 0
            obj['medias'] = mediasCount
            # 粉丝数
            followersCount = followeeHelper.query_count({
                'followee': userId,
                "effect": {
                    "$gt": 0
                }
            }) or 0
            obj['followers'] = followersCount
        else:
            backupUserHelper = ClassHelper('BackupUser')
            item = backupUserHelper.find_one({"_id": userId})
            # 照片数
            mediaHelper = ClassHelper('Media')
            mediasCount = mediaHelper.query_count({'backupUser': userId})

            # 粉丝数
            followersCount = followeeHelper.query_count({
                'backupFollowee': userId,
                "effect": {
                    "$gt": 0
                }
            }) or 0
            obj['followers'] = followersCount

            obj['medias'] = mediasCount
            obj['user'] = item['_id']

        if item:
            obj["nickname"] = item.get("nickName", None)
            obj["avatar"] = item.get("editAvatar", None) or item.get(
                "avatar", None)
            obj["age"] = item.get("age", 0)
            obj["address"] = item.get("address", None)
            obj["gender"] = item.get("gender", None)
            rect = item.get("editRect", None) or item.get("rect", None)
            if rect:
                rect = [int(i) for i in rect]
            obj['rect'] = rect
            obj["_id"] = item['_id']

        # 贡献者数
        assignersCount = faceHelper.distinct(
            {
                'assign.user': userId,
                'assign.status': 1
            }, "assign.assigner") or []
        obj['assigners'] = len(assignersCount.cursor)

    except Exception, ex:
        log.err(ex.message)
        return ERR_INVALID.message
Esempio n. 13
0
    def get(self, action=None):
        '''
        # where 条件格式:[{
                            "condition": {
                                "user": "******"
                            },
                            "key": "xxx",
                            "method": "count/id/list/jsonObject",
                            "classname": "xxx"
                        },
                        {
                            "condition": {
                                "user": "******"
                            },
                            "key": "xxx",
                            "method": "count/id/list/jsonObject",
                            "classname": "xxx",
                            "distinct":""
                        }]
        #返回数据格式:{"a":11,"b":10}
        '''
        # if action == "albumConfig":
        #     if self.request.arguments.has_key('where'):
        #         query = eval(self.get_argument('where'))
        #         query['settingId'] = 7
        #         classHelper = ClassHelper("VersionControl")
        #         objs = classHelper.find_one(query,keys={'albumConfig':1})
        #         albumConfig = objs.get('albumConfig',None)
        #         if albumConfig:
        #             albumConfig.sort(key=lambda k: (k['weight']), reverse=False)
        #             items = []
        #             classHelper = ClassHelper("StatCount")
        #             for i,cfig in enumerate(albumConfig):
        #                 count = classHelper.find_one({'name':cfig['type']+ "_" +self.user['_id']}) or {}
        #                 count = count.get('count',0)
        #                 item = {
        #                     'title':cfig['title'],
        #                     'authorize':cfig['authorize'],
        #                     'type':cfig['type'],
        #                     'count':count
        #                 }
        #                 items.append(item)
        #                 if i >= 5:
        #                     break
        #             data = copy.deepcopy(ERR_SUCCESS)
        #             data.message['data'] = items
        #             self.write(json.dumps(data.message,cls=MeEncoder))
        #         else:
        #             self.write(ERR_PATH_PERMISSION.message)
        #
        #     else:
        #         self.write(ERR_PATH_PERMISSION.message)

        if action == "albumConfig":
            if self.request.arguments.has_key('where'):
                query = eval(self.get_argument('where'))
                query['settingId'] = 7
                classHelper = ClassHelper("VersionControl")
                objs = classHelper.find_one(query, keys={'albumConfig': 1})
                albumConfig = objs.get('albumConfig', None)
                if albumConfig:
                    albumConfig.sort(key=lambda k: (k['weight']), reverse=False)
                    items = []
                    classHelper = ClassHelper("StatCount")
                    for i, cfig in enumerate(albumConfig):
                        count = classHelper.find_one({'name': cfig['type'] + "_" + self.user['_id']}) or {}
                        count = count.get('count', 0)
                        item = {
                            'title': cfig['title'],
                            'authorize': cfig['authorize'],
                            'type': cfig['type'],
                            'count': count
                        }
                        items.append(item)
                        if i >= 5:
                            break
                    data = copy.deepcopy(ERR_SUCCESS)
                    data.message['data'] = items
                    self.write(json.dumps(data.message, cls=MeEncoder))
                else:
                    self.write(ERR_PATH_PERMISSION.message)

            else:
                self.write(ERR_PATH_PERMISSION.message)
        elif self.request.arguments.has_key('where'):
            where = eval(self.get_argument('where'))
            result = {}
            for item in where:
                className = item['classname']
                if className == 'User':
                    continue
                query = item["condition"]
                try:
                    if query.has_key('_id'):
                        ObjectId(query['_id'])
                        # if query.has_key('$or'):
                        #     for item in query['$or']:
                        #         if "_id" in item:
                        #             item["_id"] = ObjectId(item["_id"])
                except Exception:
                    self.write(ERR_OBJECTID_MIS.message)
                    return
                try:
                    if item['method'] == 1:
                        result[item['key']] = self.getCount(className, query)
                    elif item['method'] == 2:
                        result[item['key']] = self.getId(className, query)
                    elif item['method'] == 3:
                        result[item['key']] = self.getList(className, query)
                    elif item['method'] == 4:
                        result[item['key']] = self.getJson(className, query)
                    elif item['method'] == 5:
                        result[item['key']] = self.getDistinct(className, query, item['distinct'])
                except Exception,e:
                    log.err("%s param error", item['key'])
            self.write(json.dumps(result,cls=MeEncoder))
Esempio n. 14
0
    def userCountTwo(self, userId, isUser=1):  #isUser:1真实用户,0backupUser
        obj = {
            'followeesCount': 0,
            'followeeStatus': 0,
            'blackStatus': 0,
            'isUser': isUser  #1为user,0为backupUser
        }
        try:
            followeeHelper = ClassHelper('Followee')
            faceHelper = ClassHelper('Face')
            if isUser:
                userInfoHelper = ClassHelper('UserInfo')
                item = userInfoHelper.find_one({"user": userId})
                obj['user'] = item['user']
                # obj["nickName"] = item.get("nickName",None)
                # obj["avatar"] = item.get("avatar", None)
                # 关注数
                followeesCount = followeeHelper.query_count({
                    'user': userId,
                    "effect": {
                        "$gt": 0
                    }
                }) or 0
                obj['followeesCount'] = followeesCount
            else:
                backupUserHelper = ClassHelper('BackupUser')
                item = backupUserHelper.find_one({"_id": userId})
                obj['user'] = item['_id']

            if item:
                obj["nickName"] = item.get("nickName", None)
                obj["avatar"] = item.get("avatar", None)
                obj["age"] = item.get("age", 0)
                obj["address"] = item.get("address", None)
                obj['rect'] = item.get("rect", None)
                obj["_id"] = item['_id']
            #粉丝数
            followersCount = followeeHelper.query_count({
                'followee': userId,
                "effect": {
                    "$gt": 0
                }
            }) or 0
            obj['followersCount'] = followersCount
            #贡献者数
            assignersCount = faceHelper.distinct({'assign.user': userId},
                                                 "assign.assigner") or []
            obj['assignersCount'] = len(assignersCount.cursor)
            #照片数
            mediasCount = faceHelper.query_count({'assign.user': userId}) or 0
            obj['mediasCount'] = mediasCount
            if self.user["_id"] != userId:
                #关注状态

                item = followeeHelper.find_one({
                    "user": self.user['_id'],
                    "followee": userId,
                    "effect": {
                        "$gt": 0
                    }
                })
                if item:  #0 没有关系 1 关注 2 相互关注 3 粉丝关系
                    obj['followeeStatus'] = item['effect']
                else:
                    item = followeeHelper.find_one({
                        "followee": self.user['_id'],
                        "user": userId
                    })
                    if item:
                        obj['followeeStatus'] = 3
                #拉黑状态
                blackHelper = ClassHelper('Blacklist')
                item = blackHelper.find_one({
                    "user": self.user['_id'],
                    "blacker": userId,
                    "effect": {
                        "$gt": 0
                    }
                })
                if item:
                    obj['blackStatus'] = 1
        except Exception, ex:
            log.err(ex.message)
            return ERR_INVALID.message
Esempio n. 15
0
    def userCount(self, userId, isUser=1):  #isUser:1真实用户,0backupUser
        obj = {
            'followeesCount': 0,
            'followeeStatus': 0,
            'blackStatus': 0,
            'isUser': isUser  #1为user,0为backupUser
        }
        try:
            classHelper = ClassHelper('StatCount')
            if isUser:
                userInfoHelper = ClassHelper('UserInfo')
                item = userInfoHelper.find_one({"user": userId})
                obj['user'] = item['user']
                # obj["nickName"] = item.get("nickName",None)
                # obj["avatar"] = item.get("avatar", None)
                # 关注数
                followeesCount = classHelper.find_one(
                    {'name': "followees_" + userId}) or {}
                obj['followeesCount'] = followeesCount.get('count', 0)
            else:
                backupUserHelper = ClassHelper('BackupUser')
                item = backupUserHelper.find_one({"_id": userId})
                obj['user'] = item['_id']

            if item:
                obj["nickName"] = item.get("nickName", None)
                obj["avatar"] = item.get("avatar", None)
                obj["age"] = item.get("age", 0)
                obj["address"] = item.get("address", None)
                obj['rect'] = item.get("rect", None)
                obj["_id"] = item['_id']
            #粉丝数
            followersCount = classHelper.find_one(
                {'name': "followers_" + userId}) or {}
            obj['followersCount'] = followersCount.get('count', 0)
            #贡献者数
            assignersCount = classHelper.find_one(
                {'name': "assigners_" + userId}) or {}
            obj['assignersCount'] = assignersCount.get('count', 0)
            #照片数
            mediasCount = classHelper.find_one({'name': "medias_" + userId
                                                }) or {}
            obj['mediasCount'] = mediasCount.get('count', 0)
            if self.user["_id"] != userId:
                #关注状态
                followHelper = ClassHelper('Followee')
                item = followHelper.find_one({
                    "user": self.user['_id'],
                    "followee": userId,
                    "effect": {
                        "$gt": 0
                    }
                })
                if item:  #0 没有关系 1 关注 2 相互关注 3 粉丝关系
                    obj['followeeStatus'] = item['effect']
                else:
                    item = followHelper.find_one({
                        "followee": self.user['_id'],
                        "user": userId
                    })
                    if item:
                        obj['followeeStatus'] = 3
                #拉黑状态
                blackHelper = ClassHelper('Blacklist')
                item = blackHelper.find_one({
                    "user": self.user['_id'],
                    "blacker": userId,
                    "effect": {
                        "$gt": 0
                    }
                })
                if item:
                    obj['blackStatus'] = 1
        except Exception, ex:
            log.err(ex.message)
            return ERR_INVALID.message
Esempio n. 16
0
    def post(self, action=None, followee=None, isuser=1):
        userId = self.get_current_user()
        if not userId:
            log.err("follow error,user not exist!")
            self.write(ERR_USER_NOTFOUND.message)
            return

        if not followee:
            log.err("request param error")
            self.write(ERR_NOPARA.message)
            return

        is_user = True
        if int(isuser) == 0:
            is_user = False

        # 查找用户是否存在
        if is_user == True:
            userHelper = ClassHelper( "User" )
        else:
            userHelper = ClassHelper( "BackupUser" )
        findUser = userHelper.find_one( {'_sid': followee} )
        if not findUser:
            log.err( "%s error,followee not exist!",action)
            self.write( ERR_USER_NOTFOUND.message )
            return

        blackHelper = ClassHelper( "Blacklist" )
        if action == 'follow':
            blacked = blackHelper.find_one( {'user': userId, 'blacker': followee} )
            isblacked = blackHelper.find_one( {'user': followee, 'blacker': userId} )
            if blacked:
                self.write( ERR_BLACKED_PERMISSION.message )
                return
            if isblacked:
                self.write( ERR_BEBLACKED_PERMISSION.message )
                return

        if is_user:
            fieldname = "followee"
        else:
            fieldname = "backupFollowee"
        followHelper = ClassHelper("Followee")

        try:
            if action == 'follow':  # 关注
                # 判断是否已经关注过
                followed = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 0}} )
                if followed and followed['effect']>=1:
                    self.write( ERR_SUCCESS.message )
                    return
                FollowHelper.follow(userId, followee, is_user)
                fr = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 1}},
                                            {'acl': 0, 'createAt': 0, '_sid': 0} )
                fr['relationStatus']=fr['effect']
                del fr['effect']
                del fr['_id']

                if fr.has_key('backupFollowee'):
                    del fr['backupFollowee']
                    fr['isUser'] = 0
                else:
                    del fr['followee']
                    fr['isUser'] = 1

                successInfo = deepcopy( ERR_SUCCESS )
                successInfo.message["data"] = fr
                self.write( json.dumps( successInfo.message, cls=MeEncoder ) )
            elif action == 'unfollow':  # 取消关注
                # 之前未关注过或者已经取消关注,直接返回
                unfollowed = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 1}} )
                if not unfollowed:
                    self.write( ERR_SUCCESS.message )
                    return
                FollowHelper.unfollow(userId, followee, is_user)
                fr = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 0}},
                                            {'acl': 0, 'createAt': 0, '_sid': 0} )
                fr['relationStatus'] = fr['effect']
                del fr['effect']
                del fr['_id']

                if fr.has_key( 'backupFollowee' ):
                    del fr['backupFollowee']
                    fr['isUser'] = 0
                else:
                    del fr['followee']
                    fr['isUser'] = 1

                successInfo = deepcopy( ERR_SUCCESS )
                successInfo.message["data"] = fr
                self.write( json.dumps( successInfo.message, cls=MeEncoder ) )
            else:
                print "action error: " + action
                self.write( ERR_PATH_PERMISSION.message )
                return
        except Exception, e:
            log.err("FollowerHandler-->action:%s in post() error, %s", action, e)
            self.write(ERR_DB_OPERATION.message)
            return
Esempio n. 17
0
        self.write(result)

    # 消费,付费购买
    def charge(self):
        '''
        obj = {'id':Goods_id:True,'chargeFlowId':ChargeFlow_id:False} chargeFlowId是在重新发起支付时需要传递
        :return: 
        '''
        try:
            obj = json.loads(self.request.body)
        except Exception, e:
            log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e))
            self.write(ERR_INVALID.message)
            return
        goodHelper = ClassHelper('Goods')
        good = goodHelper.find_one({'_id': obj['id']})
        walletHelper = ClassHelper('Wallet')
        wallet = walletHelper.find_one({'user': self.user['_id']})
        if not wallet:
            self.write(ERR_ACCOUNT_BALANCE.message)
            return
        if good and wallet:
            # 添加消费记录,状态未支付
            chargeFlowHelper = ClassHelper('ChargeFlow')
            if 'chargeFlowId' not in obj:
                chargeFlow = {
                    'user': self.user['_id'].decode(),
                    'amount': good['price'],
                    'goods': good['_id'].decode(),
                    'status': 0
                }
                    meobj.save()
                    self.filter_field(meobj)
                    self.write(json.dumps(meobj, cls=MeEncoder))
                    self.finish()
                    # self.pushMessage(className, meobj)
                else:
                    self.write(ERR_BLACK_PERMISSION.message)
            except Exception, e:
                log.err(json.dumps(e.message))
                if isinstance(e.message, dict) and e.message["errCode"] == 137:
                    field = re.search(r"index: ([0-9a-zA-Z]+)_-?\d{1} dup key",
                                      e.message['info'])
                    if field:
                        field = field.group(1)
                        classHelper = ClassHelper(className)
                        item = classHelper.find_one({field: obj[field]})
                        item = self.filter_field(item)
                        e.message['data'] = item
                self.write(e.message)
    # except Exception, e:
    #     log.err("ClassHandler-->put error, %s", e)
    #     self.write(ERR_DB_OPERATION.message)

    ### 更新对象

    @tornado.web.authenticated
    def put(self, className, objectId=None):
        if not objectId and not self.request.arguments.has_key('where'):
            self.write(ERR_OBJECTID_MIS.message)
            return
        try: