Beispiel #1
0
 def get_one_by_productid(self):
     logger.info(request.detail)
     args = request.args.to_dict()
     prid = args.get('productid')
     usid = request.user.id
     if not prid:
         raise PARAMS_MISS()
     product = self.sproduct.get_product_by_productid(prid)
     if not product:
         raise NOT_FOUND(u"无此商品")
     # 是管理员或客服则显示全部信息
     if is_admin() or is_customerservice():
         product.fields = product.all
         print '是管理员或客服'
     else:
         # 如果是游客, 或者是未购买开店大礼包的普通用户
         if is_tourist() or is_ordirnaryuser():
             print '是游客或者普通用户'
             product = self.trans_product_for_fans(product)
         else:  # 合伙人(即已购买开店大礼包的用户)
             print '合伙人'
             product = self.trans_product_for_shopkeeper(product)
         product = self.fill_product_nums(product)
     # 填充一些都需要的信息
     self.fill_product_alreadylike(product, usid)
     self.fill_images(product)
     self.fill_prtarget(product)
     self.fill_product_sku_key(product)
     self.fill_product_sku_value(product)
     self.sproduct.update_view_num(product.PRid)
     data = import_status('get_product_success', 'OK')
     data['data'] = product
     return data
Beispiel #2
0
    def get_all(self):
        """活动所有热文"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        args = request.args.to_dict()
        logger.debug("get hotmessage args is %s", args)
        lasting = args.get('lasting', 'true')
        htfilter = 1 if is_partner() else 0
        if is_admin():
            htfilter = [0, 1]
        try:
            hot_list = self.s_hotmessage.get_hotmsg_list_by_filter(htfilter)
            if str(lasting) == 'true':
                hot_list = filter(
                    lambda hot: hot.HMstarttime < get_db_time_str() < hot.
                    HMendtime, hot_list)
            for hotmsg in hot_list:
                hotmsg.HMstarttime = get_web_time_str(hotmsg.HMstarttime)
                hotmsg.HMendtime = get_web_time_str(hotmsg.HMendtime)

            data = import_status("get_hotmessage_list_success", "OK")
            data['data'] = hot_list
            return data
        except:
            logger.exception("get hotmessage error")
            raise SYSTEM_ERROR(u'服务器繁忙')
Beispiel #3
0
 def get_accountinfo(self):
     if is_tourist():
         return AUTHORITY_ERROR(u"未登录")
     usid = request.user.id
     user = self.suser.get_user_by_user_id(usid)
     logger.debug("get info success, this user is %s", user.USname)
     default_address = self.suesraddress.get_default_address_by_usid(usid)
     if not default_address:
         first_address = self.suesraddress.get_first_no_default_address(
             usid)
     address = default_address or first_address
     if address:
         logger.info("get user address success")
         location = self.suesraddress.get_addressinfo_by_areaid(
             address.areaid)
         logger.info("get address detail success")
         for area, city, provice in location:
             locationname = getattr(provice, "name", '') + getattr(
                 city, "name", '') + getattr(area, "name", '')
     else:
         locationname = ''
     # print ''.join([x[1] for x in area])
     bankcard = self.sbankcard.get_bankcard_by_usid(usid)
     response = import_status("get_accountinfo_success", "OK")
     response['data'] = {
         "user": user.hide('USid'),
         # "address": '%s%s' %(locationname, address.UAtext),
         "address": '%s%s' % (locationname, getattr(address, "UAtext", '')),
         "bankcard": getattr(bankcard, "BCnumber", '')
     }
     return response
Beispiel #4
0
 def del_address(self):
     if is_tourist():
         return TOKEN_ERROR(u"未登录, 或token错误")
     data = request.json
     logger.info("this is del address data %s", data)
     parameter_required("UAid")
     try:
         logger.debug("del address")
         del_address = self.suesraddress.delete_address(data.get("UAid"))
         if not del_address:
             return SYSTEM_ERROR
         exist_default = self.suesraddress.get_default_address_by_usid(
             request.user.id)
         if not exist_default:
             no_default_address = self.suesraddress.get_first_no_default_address(
                 request.user.id)
             if no_default_address:
                 self.suesraddress.change_default_address_status(
                     no_default_address.UAid, {'UAdefault': True})
         response = import_status("delete_useraddress_success", "OK")
         response['data'] = {"uaid": data.get("UAid")}
         return response
     except:
         logger.exception("del address error")
         return SYSTEM_ERROR
Beispiel #5
0
 def get_one_or_default_address(self):
     if is_tourist():
         raise TOKEN_ERROR(u'未登录')
     uaid = request.args.to_dict().get('uaid')
     usid = request.user.id
     logger.debug("get uaid is %s", uaid)
     if uaid is not None:
         uafilter = {'UAid': uaid}
     else:
         uafilter = {'USid': usid, 'UAdefault': True, 'UAisdelete': False}
     default_address = self.suesraddress.get_one_or_default_address(
         uafilter)
     if not default_address:
         any_address = self.suesraddress.get_first_no_default_address(usid)
         if not any_address:
             raise NOT_FOUND(u'该用户未设置地址信息')
     address = default_address or any_address
     if address:
         logger.info("get address success, now to fill detail")
     addressinfoes = self.suesraddress.get_addressinfo_by_areaid(
         address.areaid)
     for addressinfo in addressinfoes:
         address.addressinfo = addressinfo
         address.add("addressinfo")
     response = import_status("messages_get_item_ok", "OK")
     response['data'] = address
     return response
Beispiel #6
0
 def update_shoppingcart(self):
     """购物车添加或者修改"""
     if is_tourist():
         return TOKEN_ERROR  # token无效或者未登录的用户
     data = request.json
     scid = data.get('scid')  # 如果是scid则是修改
     pskid = data.get('pskid')
     scnums = data.get('num')
     update_nums = data.get('update_num')
     if not scnums and not update_nums:
         raise PARAMS_MISS()
     if not pskid:
         raise PARAMS_MISS()
     productsku = self.sproductskukey.get_psk_by_pskid(pskid)
     if not productsku:
         raise NOT_FOUND(u'sku不存在')
     usid = request.user.id
     cart = self.sshoppingcart.get_shoppingcar_by_usidandpskid(usid, pskid)
     # 如果是已经存在的购物车
     if cart:
         scid = cart.SCid
         if update_nums:
             scnums = cart.SCnums + update_nums
         elif scnums:
             scnums = scnums
         if scnums < 1:
             # 删除
             return self.delete_shoppingcart(scid)
         self.sshoppingcart.update_shoppingcart(cart, scnums)
     # 创建
     else:
         if update_nums:
             scnums = update_nums
         elif scnums:
             scnums = scnums
         if scnums < 1:
             return self.delete_shoppingcart(scid)
         psk = self.sproductskukey.get_psk_by_pskid(pskid)
         if not psk:
             raise SYSTEM_ERROR('不存在的商品')
         prid = psk.PRid
         cartdict = {
             'USid': usid,
             'PSKid': pskid,
             'SCnums': scnums,
             'PRid': prid
         }
         if scid:
             self.sshoppingcart.update_shoppingcat_by_scid(scid, cartdict)
         else:
             scid = str(uuid.uuid4())
             cartdict['SCid'] = scid
             dict_add_models('ShoppingCart', cartdict)
     data = import_status('update_cart_success', 'OK')
     data['data'] = {
         'scid': scid
     }
     return data
Beispiel #7
0
    def share_activity(self):
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        data = request.json
        logger.debug("share qrcode data is %s", data)
        # data_url = data.get("dataurl")
        data_url = self.get_share_url(data.get("dataurl"))
        try:
            logger.info("get user info")
            user = self.suser.get_user_by_user_id(request.user.id)
            if not user:
                raise SYSTEM_ERROR(u'找不到该用户')
            save_path = LinuxRoot + LinuxImgs + "/qrcode/" + user.openid + '.png' if platform.system(
            ) == "Linux" else WindowsRoot + "qrcode/" + user.openid + '.png'
            make_qrcode(user.USheader, data_url, save_path)
            response = import_status("make_qrcode_success", "OK")
            response[
                "qrcodeurl"] = QRCODEHOSTNAME + '/' + LinuxImgs + '/qrcode/' + user.openid + '.png'
            response[
                "components"] = QRCODEHOSTNAME + '/' + LinuxImgs + '/components.png'
            logger.debug('response url is %s', response["qrcodeurl"])

            url = data_url.split('#')[-1]
            from WeiDian.common.get_url_params import GetUrlParams
            parse_dict = GetUrlParams.url_params_to_dict(url)
            if 'baid' in parse_dict or 'prid' in parse_dict:
                # 分享时更改转发数
                paramstype = bool(not 'baid' in parse_dict)
                filter_parameter = {
                    'AClinkvalue':
                    parse_dict['prid'] if paramstype else parse_dict['baid'],
                    'ACSkipType':
                    2 if paramstype else 1,
                    'ACisdelete':
                    False
                }
                act_list = self.sactivity.get_acid_by_filterid(
                    filter_parameter)
                for act in act_list:
                    if act.ACforwardFakenum != 0:
                        self.sactivity.update_forward_fakenum(act.ACid)
                    else:
                        self.sactivity.add_model(
                            'ActivityFoward', **{
                                'AFid': str(uuid.uuid1()),
                                'USid': request.user.id,
                                'ACid': act.ACid
                            })

                if is_partner():

                    self.do_shoppingtask_or_forwardtask(1)
            return response
        except:
            logger.exception("make qrcode error")
            return SYSTEM_ERROR(u'服务器繁忙')
Beispiel #8
0
 def fill_like_num(self, activity):
     """添加点赞相关字段"""
     if not is_tourist():
         from WeiDian.service.SActivityLike import SActivityLike
         alreadylike = SActivityLike().is_like(request.user.id,
                                               activity.ACid)
         activity.alreadylike = True if alreadylike else False
     activity.likenum = activity.AClikeFakeNum or activity.AClikenum
     activity.add('likenum', 'alreadylike')
     return activity
Beispiel #9
0
 def get_one(self):
     """通过acid获取活动及活动下的评论
     """
     if is_tourist():
         return AUTHORITY_ERROR(u"未登录或token错误")
     args = request.args.to_dict()
     logger.info("get one act args is %s", args)
     parameter_required('acid')
     acid = args.get('acid')  # 活动id
     try:
         activity = self.sactivity.get_activity_by_acid(acid)
         logger.debug("get one act access")
         if not activity:
             raise SYSTEM_ERROR(u'数据错误,无此内容')
         self.sactivity.update_view_num(activity.ACid)
         self.fill_detail(activity)
         self.fill_like_num(activity)
         self.fill_type(activity)
         if activity.ACSkipType == 0:
             self.fill_comment_two(activity)
             activity.fill('none_skip', 'skip_type')
             activity.fill('无跳转类型', 'zh_skip_type')
         elif activity.ACSkipType == 1:
             baid = activity.AClinkvalue
             activity.fill('bigactivity', 'skip_type')
             activity.fill('专题', 'zh_skip_type')
             bigactivity = self.sbigactivity.get_one_big_act(baid)
             if not bigactivity:
                 # raise NOT_FOUND()
                 pass
             else:
                 bigactivity_type = bigactivity.BAtype
                 big_activity_content = {'type': bigactivity_type}
                 big_activity_content.setdefault('baid', bigactivity.BAid)
                 # 图片类型专题
                 if bigactivity_type == 0:
                     big_activity_content.setdefault(
                         'baimage', bigactivity.BAlongimg)  # 返回字段不修改
                     big_activity_content.setdefault(
                         'baid', bigactivity.BAid)
                 activity.fill(big_activity_content, 'bigactivity')
         elif activity.ACSkipType == 2:
             self.fill_soldnum(activity)
             self.fill_product(activity)
             activity.fill('product', 'skip_type')
             activity.fill('商品', 'zh_skip_type')
         activity.ACstarttime = get_web_time_str(activity.ACstarttime)
         activity.ACendtime = get_web_time_str(activity.ACendtime)
         data = import_status("get_activity_info_success", "OK")
         data["data"] = activity
         return data
     except:
         logger.exception("get one act error")
         return SYSTEM_ERROR(u"服务器繁忙")
Beispiel #10
0
 def delete_one(self):
     """删除购物车"""
     if is_tourist(): 
         return TOKEN_ERROR
     data = request.json
     if not data:
         return PARAMS_MISS
     scid = data.get('scid')
     if not scid:
         return PARAMS_MISS
     return self.delete_shoppingcart(scid)
Beispiel #11
0
 def get_shopingcart_all(self):
     """获取当前用户的购物车"""
     if is_tourist():
         return TOKEN_ERROR  # token失效或者未携带token
     carts_list = self.sshoppingcart.get_shoppingcart_by_usid(request.user.id)
     map(self.fill_sku, carts_list)
     map(self.fill_product, carts_list)
     data = import_status('get_cart_success', "OK")
     data['data'] = {"cart": carts_list}
     data['total'] = self.total_price(carts_list)
     data['name'] = PLATFORM_NAME
     data['postfee'] = PLATFORM_POSTFEE
     return data
Beispiel #12
0
    def get_hand_out_reward(self):
        """获取平台发放在页面中的优惠券"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        horewards = self.sraward.get_all_hand_out()
        for horeward in horewards:
            reward = self.sraward.get_raward_by_id(horeward.RAid)
            reward_detail = self.fill_reward_detail(reward)
            horeward.fill(reward_detail, 'reward_detail')

        data = import_status("messages_get_item_ok", "OK")
        data['data'] = horewards
        return data
Beispiel #13
0
 def batch_delete_prlike(self):
     if is_tourist():
         return TOKEN_ERROR(u'未登录')
     data = request.json
     plid_list = data.get("plid").split(
         ',') if data and 'plid' in data else None
     logger.info("batch del prlike data is %s", data)
     print plid_list
     try:
         self.sproductlike.batch_delete_prlike(plid_list)
         response = import_status('delete_activity_success', 'OK')
         response['data'] = {"plidlist": plid_list}
         return response
     except:
         logger.exception("batch del prlike error")
         return SYSTEM_ERROR
Beispiel #14
0
    def get_user_task(self):
        if is_tourist():
            raise AUTHORITY_ERROR(u"未登录")
        task_list = self.stask.get_user_task_by_userid(request.user.id)
        if not task_list:
            return SYSTEM_ERROR(u'当前没有任务')

        # task_list = self.fill_task_detail(task) for task in task_list
        task_detail_list, task_list = task_list, []
        for task in task_detail_list:
            task_detail = self.fill_task_detail(task)
            if task_detail:
                task_list.append(task_detail)
        if not task_list:
            return SYSTEM_ERROR(u'当前没有任务')

        task_level = self.stask.get_task_level_by_tlid(task_list[0].TLid)
        if not task_level:
            raise SYSTEM_ERROR(u'任务正在更新,请稍后查看')
        logger.debug('get task list %s', dict(task_level))
        # from WeiDian.common.divide import Partner
        # pa = Partner()
        # role = pa.cf.get(task_level, 'role')
        # cn = pa.cf.get(task_level, 'access')

        # map(self.fill_reward, task_list)
        is_complate = not bool(
            len([task.TUstatus for task in task_list if task.TUstatus == 0]))
        # logger.debug(len(is_complate))
        # logger.debug(request.user.id)
        # logger.debug(len(task_list))
        response = import_status("get_task_success", "OK")
        if is_complate:
            # 更新任务状态为已失效,发放奖励。并且添加新的任务内容
            self.stask.update_user_tasks(request.user.id, {"TUstatus": 4})
            self.add_user_task_raward(request.user.id, task_level.TLid)
            if task_level.TAlevel < 3:
                self.add_user_task(request.user.id, task_level.TAlevel)
        response['RAward'] = self.fill_reward(task_level)
        response['data'] = task_list
        response['TArole'] = task_level.TArole
        response[
            'TAcomplateNotifications'] = task_level.TAcomplateNotifications
        response['is_complate'] = is_complate

        return response
Beispiel #15
0
 def add_comment(self):
     """添加评论数据"""
     if is_tourist():
         return AUTHORITY_ERROR(u'未登录')
     data = parameter_required(u'ACtext')
     acid = data.get('acid')
     acoid = data.get('acoid')
     usid = request.user.id
     actext = data.get('ACtext')
     # 添加评论
     if acid:
         activity = self.sactivity.get_activity_by_acid(acid)
         if not activity:
             raise NOT_FOUND(u'推文不存在')
         model_data = {
             'ACOid': str(uuid.uuid4()),
             'ACid': acid,
             'USid': usid,
             'ACtext': actext,
             'ACOcreatetime': datetime.strftime(datetime.now(),
                                                format_for_db)
         }
     # 如果是添加回复
     elif acoid:
         if not is_admin():
             raise TOKEN_ERROR(u'请使用管理员回复')
         comment = self.sactivitycomment.get_comment_by_acoid(acoid)
         if not comment:
             raise NOT_FOUND(u'不存在的评论')
         acid = comment.ACid
         model_data = {
             'ACOid': str(uuid.uuid4()),
             'ACid': acid,
             'ACOparentid': acoid,
             'USid': request.user.id,
             'ACtext': actext,
             'ACOcreatetime': datetime.strftime(datetime.now(),
                                                format_for_db)
         }
     else:
         raise PARAMS_MISS(u'请指定回复类型')
     self.sactivity.add_model('ActivityComment', **model_data)
     data = import_status('add_activity_comment_success', 'OK')
     data['data'] = {'acoid': model_data['ACOid']}
     return data
Beispiel #16
0
    def get_like_list(self):
        """获取用户的收藏列表"""
        if is_tourist():
            return TOKEN_ERROR(u'未登录')
        args = request.args.to_dict()
        logger.debug("get like list args is %s", args)
        parameter_required("page_size", "page_num")
        page_num = args.get("page_num")
        page_size = args.get("page_size")
        page_num = 1 if not page_num else int(page_num)
        page_size = 5 if not page_size else int(page_size)
        try:
            productlike_list = self.sproductlike.get_productlike_list_by_usid(
                request.user.id, page_num, page_size)
            if not productlike_list:
                raise NOT_FOUND(u'用户无收藏信息')
            logger.info("get product like list success")
            map(self.fill_productinfo, productlike_list)
            # 获取转发数
            from WeiDian.service.SActivity import SActivity
            from WeiDian.service.SActivityFoward import SActivityFoward
            total_forward = 0
            for prlike in productlike_list:
                forward_act = SActivity().get_acid_by_filterid({
                    'AClinkvalue':
                    prlike.PRid,
                    'ACSkipType':
                    2,
                })
                for act in forward_act:
                    forward_num = SActivityFoward().get_fowardnum_by_acid(
                        act.ACid)
                    total_forward = total_forward + forward_num

                prlike.forwardnum = total_forward
                prlike.add("forwardnum")
            prlikecount = self.sproductlike.get_prlike_count_by_usid(
                request.user.id)
            data = import_status("get_product_like_success", "OK")
            data["count"] = prlikecount
            data["data"] = productlike_list
            return data
        except Exception as e:
            logger.exception("get product like error")
            raise SYSTEM_ERROR(u'收藏信息不存在')
Beispiel #17
0
 def get_reward_packet_detail(self):
     """获取单个集合详情"""
     if is_tourist():
         raise TOKEN_ERROR(u"未登录")
     args = request.args.to_dict()
     rptid = args.get('rptid')
     logger.debug("get reward packet detail args is %s", args)
     reward_packet = self.sraward.get_reward_packet_detail(rptid)
     for reward_one in reward_packet:
         raid = reward_one.RAid
         reward = self.sraward.get_raward_by_id(raid)
         reward_detail = self.fill_reward_detail(reward)
         reward_one.fill(reward_detail, 'reward_detail')
         packet_contact = self.sraward.get_is_where_packet(raid)
         if packet_contact:
             packet_info = self.sraward.get_reward_in_packet_info(packet_contact.RPTid)
             reward.fill(packet_info.RPTname, 'rptname')
     data = import_status("messages_get_item_ok", "OK")
     data['data'] = reward_packet
     return data
Beispiel #18
0
    def get_image_by_aitype(self):
        if is_tourist():
            raise AUTHORITY_ERROR(u"未登录")
        aitype = request.args.to_dict().get("aitype", "")
        logger.debug('get aitype %s, and type of aitype %s', aitype,
                     type(aitype))

        if re.search(r'\[', aitype):
            aitype = json.loads(aitype)
            adimage_list = [
                self.get_image_list(aitype_item) for aitype_item in aitype
            ]
        else:
            adimage_list = self.get_image_list(aitype)
        res = import_status('get_adimage_success', 'OK')
        if adimage_list:
            res['data'] = adimage_list
            return res
        res['message'] = u'尚未添加图片'
        return res
Beispiel #19
0
    def user_receive_reward(self):
        """用户自己领取页面内的优惠券"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        data = request.json
        parameter_required('raid')
        logger.debug("user recevive data is", data)
        usid = request.user.id
        raid = data.get('raid')

        # 判断发放的优惠券是否还有领取数量
        hang_out = self.sraward.is_hand_out({'RAid': raid})
        if hang_out:
            if hang_out.RTcount <= 0:
                raise NOT_FOUND(u'该优惠券已领取完毕')
            else:
                self.sraward.update_is_hand_out({'RAid': hang_out.RAid}, {'RTcount': hang_out.RTcount - 1})

        # 判断用户是否已持有
        is_hold = self.sraward.is_user_hold_reward({'USid': usid, 'RAid': raid})
        if is_hold:
            logger.info("The user already has this type of reward ")
            reward_info = self.sraward.get_raward_by_id(raid)
            urid = is_hold.URid
            if is_hold.RAnumber < reward_info.RAmaxholdnum:
                self.sraward.update_user_reward({'RAid': raid}, {'RAnumber': is_hold.RAnumber + 1})
            else:
                raise PARAMS_REDUNDANCE(u'已拥有该券最大可持有数量')
        else:
            logger.info("New reward to user")
            urid = str(uuid.uuid1())
            self.sraward.add_model('UserRaward', **{
                'URid': urid,
                'USid': usid,
                'RAid': raid,
            })

        data = import_status("receive_reward_success", "OK")
        data['data'] = {'urid': urid
                        }
        return data
Beispiel #20
0
 def get_levelrules(self):
     if is_tourist():
         return AUTHORITY_ERROR(u"未登录")
     try:
         lr_list = self.slevelrules.get_rule_list()
         logger.debug("get level rules")
         map(lambda x: setattr(x, 'LRtext', re.sub('\s', '', x.LRtext)),
             lr_list)
         user = self.suser.get_user_by_user_id(request.user.id)
         if user.USlevel == 0:
             user.level = 'ordinary'
         if user.USlevel > 0:
             user.level = 'partner'
         user.add('level').hide('USid', 'USname', 'USheader')
         data = import_status("get_levelrules_success", "OK")
         data['data'] = lr_list
         data['userlevel'] = user.level
         return data
     except:
         logger.exception("get level rules error")
         return SYSTEM_ERROR
Beispiel #21
0
 def get_image(self):
     if is_tourist():
         return AUTHORITY_ERROR(u"未登录")
     args = request.args.to_dict()
     lasting = args.get('lasting', 'true')
     logger.debug("get image args is %s", args)
     try:
         logger.info("get my image list")
         adimage_list = self.sadimage.get_myimage()
         if lasting == 'true':
             now_time = datetime.strftime(datetime.now(), format_for_db)
             adimage_list = filter(
                 lambda adimage: adimage.AIstarttime < now_time < adimage.
                 AIendtime, adimage_list)
         for adimage in adimage_list:
             adimage.hide('AIurl')
         data = import_status("get_adimage_success", "OK")
         data['data'] = adimage_list
         return data
     except:
         logger.exception("get ad_image by aiid error")
         return SYSTEM_ERROR(u"无底部图片")
Beispiel #22
0
    def do_task(self):
        if is_tourist():
            raise AUTHORITY_ERROR(u"未登录")
        parameter_required(*self.do_task_params)
        data = request.json
        logger.debug("get data %s", data)
        user_task = self.stask.get_user_task_by_id(data.get("TUid"))
        logger.info('get user task %s', user_task)
        if not user_task:
            raise SYSTEM_ERROR(u"服务器繁忙")
        task = self.stask.get_task_by_taid(user_task.TAid)
        logger.info('get task : %s', dict(task))

        if str(task.TAtype) == '0':
            logger.debug('start update task')
            # self.add_user_task_raward(request.user.id, task.TLid)
            update_result = self.stask.update_user_task(
                user_task.TUid, {
                    "TUstatus": 1,
                    "TUnumber": 1
                })
            logger.debug('get update result %s', update_result)
        else:
            # todo 其他类型任务执行
            pass
        # todo_task = self.stask.get_todo_user_task_by_user_id(request.user.id)
        # is_complate = False
        # if not todo_task:
        #     is_complate = True
        #     # 更新任务状态为已失效,发放奖励。并且添加新的任务内容
        #     self.stask.update_user_tasks(request.user.id, {"TUstatus": 4})
        #     if task.TAlevel < 3:
        #         self.add_user_task(request.user.id, task.TAlevel)
        # response = import_status("do_task_success", 'OK')
        # response['data'] = {
        #     "is_complate": is_complate
        # }
        return import_status("do_task_success", 'OK')
Beispiel #23
0
 def add_like(self):
     """添加(删除)喜欢(收藏)"""
     if is_tourist():
         return TOKEN_ERROR()
     json_data = parameter_required('prid')
     prid = json_data.get('prid')
     # 该用户是否已经收藏了此商品
     already_like = self.sproductlike.get_productlike_by_usidprid(
         request.user.id, prid)
     if not already_like:
         pl_dict = dict(plid=str(uuid.uuid4()),
                        usid=request.user.id,
                        prid=prid)
         dict_add_models('ProductLike', pl_dict)
         self.sproduct.update_like_num(prid)
         data = import_status('add_productlike_success', 'OK')
     else:
         # 删除
         self.sproductlike.del_productlike_usidprid(request.user.id, prid)
         self.sproduct.update_like_num(prid, -1)
         data = import_status('cancel_product_like_success', 'OK')
     plid = already_like.PLid if already_like else pl_dict['plid']
     data['data'] = {'plid': plid}
     return data
Beispiel #24
0
    def get_one_reward(self):
        """获取单张优惠券详情"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        # parameter_required('raid')
        args = request.args.to_dict()
        raid = args.get('raid')
        urid = args.get('urid')
        logger.debug("get reward info is %s", args)

        if urid:
            # 是赠送者原表里的
            is_presenter_own_hold = self.sraward.is_user_hold_reward({'URid': urid})

            # 在赠送者转赠表中,送出去过,已退回,可以继续转赠
            is_presenter_gift_hold = self.sraward.is_user_hold_reward_in_gift(
                {'RFid': urid, 'RFstatus': 1})

            if is_presenter_own_hold:
                raid = is_presenter_own_hold.RAid
                reward = self.sraward.get_raward_by_id(raid)
                reward_detail = self.fill_reward_detail(reward)
                is_presenter_own_hold.fill(reward_detail, 'reward_detail')
            elif is_presenter_gift_hold:
                raid = is_presenter_gift_hold.RAid
                gift = self.fill_transfer_detail(is_presenter_gift_hold)
                gift_detail = self.sraward.get_raward_by_id(raid)
                gift_detail = self.fill_reward_detail(gift_detail)
                # 检验转赠券在各情况下的有效性
                gift_detail.valid = gift_detail.valid and gift.transfer_valid
                gift.fill(gift_detail, 'reward_detail')
                gift.RFcreatetime = get_web_time_str(gift.RFcreatetime)
                gift.RFendtime = get_web_time_str(gift.RFendtime)
                gift_dict = {
                    'urid': gift.RFid,
                    'usid': gift.USid,
                    'raid': gift.RAid,
                    'ranumber': gift.RAnumber,
                    'urcreatetime': gift.RFcreatetime,
                    'reendtime': gift.RFendtime,
                    'rffrom': gift.RFfrom,
                    'rfstatus': gift.RFstatus,
                    'urusetime': gift.RFusetime,
                    'remarks': gift.remarks,
                    'tag': gift.tag,
                    'usheader': gift.usheader,
                    'reward_detail': gift.reward_detail
                }
            else:
                raise NOT_FOUND(u'无此转赠优惠券信息')
            reward_detail = is_presenter_own_hold or gift_dict
        else:
            reward_info = self.sraward.get_raward_by_id(raid)
            if not reward_info:
                raise NOT_FOUND(u'无此券信息')
            reward_detail = self.fill_reward_detail(reward_info)

        presenter = self.suser.get_user_by_user_id(request.user.id)

        data = import_status("messages_get_item_ok", "OK")
        data['usname'] = presenter.USname
        data['usheader'] = presenter.USheader

        data['data'] = reward_detail
        return data
Beispiel #25
0
    def give_reward_to_others(self):
        """转赠优惠券(暂时用不到)"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        data = request.json
        usid = data.get('usid')
        urid = data.get('urid')
        # 在自己的普通券表中拥有
        is_own_hold = self.sraward.is_user_hold_reward({'USid': request.user.id, 'URid': urid})

        # 送出去过,但是已退回,可以继续转赠
        is_own_gift_hold = self.sraward.is_user_hold_reward_in_gift({'RFfrom': request.user.id, 'RFid': urid, 'RFstatus': 1})

        if is_own_hold:
            raid = is_own_hold.RAid
        elif is_own_gift_hold:
            raid = is_own_gift_hold.RAid
        else:
            raise NOT_FOUND(u'用户无此优惠券')
        reward_info = self.sraward.get_raward_by_id(raid)
        if reward_info.RAtransfer == False:
            raise SYSTEM_ERROR(u'该券不允许转赠')
        return_time = reward_info.RAtransfereffectivetime  # 转赠有效时间,退回时间

        # 已经赠送了该券给接收者,接收者还没用,且未到退回时间
        is_recivice_gift_hold = self.sraward.is_user_hold_reward_in_gift({'RAid': raid, 'USid': usid, 'RFstatus': 0, 'RFfrom': request.user.id})
        if is_recivice_gift_hold:
            raise SYSTEM_ERROR(u'您已赠送过该券给用户')

        # 接收者已经拥有其他人送的该券, 不影响, 忽略
        # is_recivice_hold_from_other = self.sraward.is_user_hold_reward({'USid': usid, 'RAid': raid})

        # 接收者原来已经拥有此券了
        is_recivice_hold = self.sraward.is_user_hold_reward({'RAid': raid})

        if is_own_gift_hold:
            up_reward_info = self.sraward.update_reward_transfer_info({'RFfrom': request.user.id, 'RFid': urid, 'RFstatus': 1}, {'USid':usid, 'RFstatus': 0})
            if not up_reward_info:
                raise SYSTEM_ERROR(u'再次转送失败')

        if is_own_hold and is_recivice_hold:
            if is_own_hold.RAnumber > 0 and is_recivice_hold.RAnumber < reward_info.RAmaxholdnum:
                logger.info("The user already has this type of reward ")
                update_reward = self.sraward.update_user_reward({'URid': is_own_hold.URid}, {'RAnumber': is_own_hold.RAnumber - 1})
                # self.sraward.update_user_reward({'RAid': raid}, {'RAnumber': is_recivice_hold.RAnumber + 1})
                rfid = str(uuid.uuid1())
                self.sraward.add_model('RewardTransfer', **{
                    'RFid': rfid,
                    'USid': usid,
                    'RAid': raid,
                    'URFrom': request.user.id,
                    'RAnumber': 1,
                    'RFendtime': (datetime.now() + timedelta(hours=int(return_time))).strftime(format_for_db),
                    'RFstatus': 0
                })

                if not update_reward:
                    raise PARAMS_ERROR(u'更新参数错误')
            else:
                raise NOT_FOUND(u'您已没有可赠送数量或赠送用户已拥有该券最大可持有数')
        elif is_own_hold and not is_recivice_hold:
            if is_own_hold.RAnumber > 0:
                logger.info("New reward to user")
                rfid = str(uuid.uuid1())
                self.sraward.add_model('RewardTransfer', **{
                    'RFid': rfid,
                    'USid': usid,
                    'RAid': raid,
                    'URFrom': request.user.id,
                    'RAnumber': 1,
                    'RFendtime': (datetime.now() + timedelta(hours=int(return_time))).strftime(format_for_db),
                    'RFstatus': 0
                })
            else:
                raise NOT_FOUND(u'您已没有可赠送的数量')
        else:
            raise NOT_FOUND(u'您已没有可赠送的数量')
        data = import_status("give_to_others_success", "OK")
        data['data'] = {'urid': urid}
        return data
Beispiel #26
0
    def get_user_reward(self):
        """获取用户(可转赠)优惠券"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        args = request.args.to_dict()
        logger.debug("get reward args is %s", args)
        allow_transfer = args.get('transfer')
        reward_info = self.sraward.get_reward_by_usid(request.user.id)

        from WeiDian.models.model import RewardTransfer
        gift_reward_info = self.sraward.get_gifts_by_usfrom_or_usid(
            (RewardTransfer.USid == request.user.id, RewardTransfer.RFfrom == request.user.id))

        reward_list = []
        for reward in reward_info:
            reward_detail = self.sraward.get_raward_by_id(reward.RAid)
            reward_detail = self.fill_reward_detail(reward_detail)
            reward.fill(reward_detail, 'reward_detail')
            reward = dict(reward)

            lower_reward = {}
            for i, j in reward.items():
                lower_reward[i.lower()] = j

            lower_reward['urcreatetime'] = get_web_time_str(lower_reward.get('urcreatetime'))
            reward_list.append(lower_reward)
        for gift in gift_reward_info:
            gift = self.fill_transfer_detail(gift)
            gift_detail = self.sraward.get_raward_by_id(gift.RAid)
            gift_detail = self.fill_reward_detail(gift_detail)
            # 检验转赠券在各情况下的有效性
            gift_detail.valid = gift_detail.valid and gift.transfer_valid
            gift.fill(gift_detail, 'reward_detail')

            gift.RFcreatetime = get_web_time_str(gift.RFcreatetime)
            gift.RFendtime = get_web_time_str(gift.RFendtime)
            gift_dict = {
                'urid': gift.RFid,
                'usid': gift.USid,
                'raid': gift.RAid,
                'ranumber': gift.RAnumber,
                'urcreatetime': gift.RFcreatetime,
                'reendtime': gift.RFendtime,
                'rffrom': gift.RFfrom,
                'rfstatus': gift.RFstatus,
                'urusetime': gift.RFusetime,
                'remarks': gift.remarks,
                'tag': gift.tag,
                'usheader': gift.usheader,
                'reward_detail': gift.reward_detail
            }
            reward_list.append(gift_dict)

        # reward_info = filter(lambda r: r.get('reward_detail')['RAtype'] in [0, 2], reward_list)
        reward_info = filter(lambda k: k.get('ranumber') != 0, reward_list)

        if str(allow_transfer) == 'true':
            reward_info = filter(lambda r: r.get('reward_detail')['valid'] == True, reward_info)
            reward_info = filter(lambda r: r.get('reward_detail')['RAtransfer'] == True, reward_info)

        data = import_status('messages_get_item_ok', "OK")
        data['data'] = reward_info
        return data
Beispiel #27
0
    def get_user_pay_reward(self):
        """查看用户支付时的优惠券"""
        if is_tourist():
            raise TOKEN_ERROR(u'未登录')
        data = request.json
        logger.debug("get pay reward data is %s", data)
        skus = data.get('sku')
        # parameter_required('sku')
        from WeiDian.service.SProductSkuKey import SProductSkuKey
        if skus:
            total_price = 0
            for sku in skus:
                price = SProductSkuKey().get_true_price(sku.get('pskid')) * int(sku.get('num'))
                total_price = total_price + price

        reward_info = self.sraward.get_reward_by_usid(request.user.id)
        from WeiDian.models.model import RewardTransfer
        gift_reward_info = self.sraward.get_gifts_by_usfrom_or_usid((RewardTransfer.USid==request.user.id, RewardTransfer.RFfrom==request.user.id))

        try:
            reward_list = []
            for reward in reward_info:
                if reward:
                    reward_detail = self.sraward.get_raward_by_id(reward.RAid)
                    reward_detail = self.fill_reward_detail(reward_detail, total_price)
                    reward.fill(reward_detail, 'reward_detail')
                    reward = dict(reward)

                lower_reward = {}
                for i, j in reward.items():
                    lower_reward[i.lower()] = j

                lower_reward['urcreatetime'] = get_web_time_str(lower_reward.get('urcreatetime'))
                reward_list.append(lower_reward)
            for gift in gift_reward_info:
                if gift not in ['', [], {}, None]:
                    gift = self.fill_transfer_detail(gift)
                    gift_detail = self.sraward.get_raward_by_id(gift.RAid)
                    gift_detail = self.fill_reward_detail(gift_detail, total_price)
                    # 检验转赠券在各情况下的有效性
                    gift_detail.valid = gift_detail.valid and gift.transfer_valid
                    gift.fill(gift_detail, 'reward_detail')

                    gift.RFcreatetime = get_web_time_str(gift.RFcreatetime)
                    gift.RFendtime = get_web_time_str(gift.RFendtime)
                    gift_dict = {
                        'urid': gift.RFid,
                        'usid': gift.USid,
                        'raid': gift.RAid,
                        'ranumber': gift.RAnumber,
                        'urcreatetime': gift.RFcreatetime,
                        'reendtime': gift.RFendtime,
                        'rffrom': gift.RFfrom,
                        'rfstatus': gift.RFstatus,
                        'urusetime': gift.RFusetime,
                        'remarks': gift.remarks,
                        'tag': gift.tag,
                        'usheader': gift.usheader,
                        'reward_detail': gift.reward_detail
                    }
                    reward_list.append(gift_dict)
            if reward_list not in [None, [], {}]:
                reward_info = filter(lambda r: r.get('reward_detail')['RAtype'] in [0, 2], reward_list)
                reward_info = filter(lambda k: k.get('ranumber') != 0, reward_info)

            data = import_status('messages_get_item_ok', "OK")
            data['data'] = reward_info
            return data
        except Exception as e:
            logger.exception("get user reward error")
            raise SYSTEM_ERROR(u'获取数据错误')
Beispiel #28
0
    def get_info_top(self):
        """个人中心需要的数据"""
        try:
            if is_tourist():
                return AUTHORITY_ERROR(u"未登录")
            data = dict()
            my_info = request.user
            level = my_info.level
            uslevel = userlevel.get(str(level), '普通用户')
            level = 'partner' if level > 0 else 'ordinary'

            my_info.fill(level, 'level')
            my_info.fill(uslevel, 'uslevel')
            data.setdefault('user', my_info)
            usid = my_info.id
            print(my_info.USname).encode('utf8')
            print(my_info.USid).encode('utf8')
            logger.debug("get my info by usid")
            show = 0
            # 正在进行中的指定等级的合伙人活动
            partner_match = self.spartnermatch.get_lasting_partner_match(
                level=my_info.USlevel)
            # 如果是合伙人, 且活动进行中
            if is_partner() and partner_match:
                show = 1
                data.setdefault('match_type', partner_match.PSIMtype)
                # 成功超过vip数量
                psimid = partner_match.PSIMid
                my_achev = self.spartnermatch.get_partner_match_mount_by_usidpsmid(
                    usid, psimid)
                my_achev_value = my_achev.sellorinvitemount if my_achev else 0  # 我的销售总额(人数)

                gt_my_sell_count = self.spartnermatch.get_partner_match_mount_gt_value(
                    psimid, my_achev_value)  # 营业额(人数)比我多的
                partner_num = self.suser.get_partner_count_in_current_level(
                    request.user.USlevel)  # 该等级vip总数
                lt_my_sell_count = partner_num - gt_my_sell_count  # 比我销售(人数)少的
                partner_num = partner_num or 1
                percents = int(float(lt_my_sell_count) / partner_num *
                               100)  # 超过的同等级的百分比
                my_info.fill(percents, 'overpercents')  # 超过%的vip
                data.setdefault('myranking', percents)
                # 未完成还需多少升级
                try:
                    partner_match.PSIMrule = match_rule = json.loads(
                        partner_match.PSIMrule)
                    achev_level_value = {
                        k: int(v) - my_achev_value
                        for k, v in match_rule.items()
                        if int(v) > my_achev_value
                    }
                    #
                    if achev_level_value:  # 是否有下一级
                        next_level = sorted(achev_level_value.keys())[0]
                        # 当前等级(未用到)
                        current_level = int(next_level) - 1
                        to_next = achev_level_value[next_level]
                        my_info.fill(to_next, 'next')
                        data.setdefault('next', to_next)
                    else:
                        my_info.fill(0, 'next')
                        current_level = sorted(achev_level_value.keys())[-1]

                except ValueError as e:
                    print('保级错误')
                    my_info.fill('0', 'next')
                #     pass
                # 保级差别
            response = import_status("get_my_info_success", "OK")
            data.setdefault('show', show)
            response["data"] = data
            return response
        except Exception as e:
            logger.exception("get myinfo error")
            raise SYSTEM_ERROR()
Beispiel #29
0
    def get_all(self):
        """获取条件下的所有活动
        """
        if is_tourist():
            return AUTHORITY_ERROR(u"未登录")
        args = request.args.to_dict()
        logger.info("this is get all activity args %s", args)
        parameter_required(u'tnid')
        tnid = args.get('tnid')  # 导航id
        suid = args.get('suid')  # 管理员id
        lasting = args.get('lasting', 'true')  # 是否正在进行的活动
        acid = args.get("acid")
        if not acid:
            acid = None
        start = int(args.get('start', 0))  # 起始位置
        count = int(args.get('count', 5))  # 取出条数
        page = (args.get('page'))
        # 过滤跳转类型
        skiptype = args.get('skiptype')
        if skiptype is None:
            settings = Partner()
            skiptype = settings.get_item('skip', 'skip_type')  # 配置文件中的过滤条件(默认)
        if skiptype == 'all':
            skiptype = None
        # 分页
        if not page:
            page = int(math.floor(start / count) + 1)
        if not (tnid or suid):
            raise PARAMS_MISS(u"参数缺失")
        try:
            topnav = self.stopnav.get_topnav_by_tnid(tnid)
            if not topnav:
                raise NOT_FOUND(u'无此tnid')
            if topnav.TNtype == 2 and str(tnid) != '1':  # '1'为每日十荐页tnid
                skiptype = 0
            print(skiptype)

            now_time = None

            if str(lasting) == 'true':
                now_time = datetime.strftime(datetime.now(), format_for_db)
            activity_list = self.sactivity.get_activity_by_topnavid(
                tnid, page, count, skiptype, acid, suid, now_time)
            logger.info("get activity_list success")

            # if suid:
            #     activity_list = self.sactivity.get_activity_by_suid(suid, page, count)
            # if not activity_list:
            #     raise SYSTEM_ERROR(u'数据库错误')

            for activity in activity_list:
                self.sactivity.update_view_num(activity.ACid)
                self.fill_detail(activity)
                self.fill_like_num(activity)
                self.fill_type(activity)
                activity.fill(activity.AClinkvalue, 'aclinkvalue')
                if activity.ACSkipType == 0:
                    self.fill_comment_two(activity)
                    activity.fill('none_skip', 'skip_type')
                    activity.fill('无跳转类型', 'zh_skip_type')
                elif activity.ACSkipType == 1:
                    baid = activity.AClinkvalue
                    activity.fill('bigactivity', 'skip_type')
                    activity.fill('专题', 'zh_skip_type')
                    bigactivity = self.sbigactivity.get_one_big_act(baid)
                    if not bigactivity:
                        # raise NOT_FOUND()
                        pass
                    else:
                        bigactivity_type = bigactivity.BAtype
                        big_activity_content = {'type': bigactivity_type}
                        big_activity_content.setdefault(
                            'baid', bigactivity.BAid)
                        # 图片类型专题
                        if bigactivity_type == 0:
                            big_activity_content.setdefault(
                                'baimage', bigactivity.BAlongimg)  # 返回字段不修改
                            big_activity_content.setdefault(
                                'baid', bigactivity.BAid)
                        activity.fill(big_activity_content, 'bigactivity')
                elif activity.ACSkipType == 2:
                    self.fill_soldnum(activity)
                    self.fill_product(activity)
                    activity.fill('product', 'skip_type')
                    activity.fill('商品', 'zh_skip_type')
                activity.ACstarttime = get_web_time_str(activity.ACstarttime)
                activity.ACendtime = get_web_time_str(activity.ACendtime)

            data = import_status("get_activity_list_success", "OK")
            data["count"] = request.all_count
            data["page_count"] = request.page_count
            data["data"] = activity_list
            return data
        except Exception as e:
            logger.exception("get activity error")
            generic_log(e)
            return e
Beispiel #30
0
    def like_or_cancel(self):
        if is_tourist():
            raise AUTHORITY_ERROR(u"未登录")
        print(request.user.USname.encode('utf8'))
        json_data = request.json
        logger.debug("act like data is %s", json_data)
        parameter_required('acid')
        acid = json_data.get('acid')
        usid = request.user.id
        already_like = self.salike.is_like(usid, acid)
        activity = self.sactivity.get_activity_by_acid(acid)
        if not already_like:
            logger.info("this is not already_like to add activitylike")
            al_dict = {
                'ALid': str(uuid.uuid4()),
                'USid': request.user.id,
                'ACid': acid
            }
            self.salike.add_model('ActivityLike', **al_dict)
            self.salike.add_like_by_acid(acid)
            data = import_status('add_activity_like_success', 'OK')
            # data = import_status('add_productlike_success', 'OK')
            if activity.ACSkipType == 2 and activity.AClinkvalue:
                logger.info("this is add productlike")
                pl_dict = {
                    'PLid': str(uuid.uuid4()),
                    'USid': request.user.id,
                    'PRid': activity.AClinkvalue
                }
                self.sproductlike.add_model('ProductLike', **pl_dict)
                self.sproduct.update_like_num(activity.AClinkvalue)
                data = import_status('add_ac_pr_like_success', 'OK')
        # elif not already_like:
        # al_dict = dict(
        #     alid=str(uuid.uuid4()),
        #     usid=request.user.id,
        #     acid=acid
        # )
        # dict_add_models('ActivityLike', al_dict)
        # self.salike.add_like_by_acid(acid)
        # data = import_status('add_activity_like_success', 'OK')
        # # data = import_status('add_productlike_success', 'OK')

        # elif already_like and not activity.PRid:
        #     self.salike.del_like(request.user.id, acid)
        #     self.salike.cancel_like_by_acid(acid)
        #     data = import_status('cancel_activity_like_success', 'OK')
        else:
            logger.info("this is already like activity to cancel like")
            self.salike.del_like(usid, acid)
            product_like = self.sproductlike.get_product_is_like_by_prid(
                usid, activity.AClinkvalue)
            logger.info("this is already like product to cancel like")
            if product_like:
                self.sproductlike.del_productlike_usidprid(
                    usid, activity.AClinkvalue)
            self.salike.cancel_like_by_acid(acid)
            self.sproduct.update_like_num(activity.AClinkvalue, -1)
            data = import_status('cancel_activity_like_success', 'OK')
        alid = already_like.ALid if already_like else al_dict['ALid']
        data['data'] = {'alid': alid}
        return data