Exemple #1
0
    def fill_comment_two(self, act):
        """给活动对象附加一个评论属性"""
        acid = act.ACid
        comments = self.sacomment.get_comment_by_acid_two(acid)
        if comments:
            for comment in comments:
                BaseActivityCommentControl().fill_user(comment)
                comment.ACOcreatetime = get_web_time_str(comment.ACOcreatetime)
                replys = self.sacomment.get_apply_by_acoid(
                    comment.ACOid)  # 获取到回复列表
                if replys:
                    for reply in replys:
                        comment.fill(replys, 'reply')
                        reply.hide('USid')
                        admin_user = self.ssuperuser.get_one_super_by_suid(
                            reply.USid)
                        if admin_user:
                            user = admin_user
                            admin_user.fill(0, 'robot')
                            user.hide('SUid')
                        else:
                            user = {'name': u'运营人员', 'robot': 1}
                        reply.ACOcreatetime = get_web_time_str(
                            reply.ACOcreatetime)
                        reply.fill(user, 'user')

        act.comment = comments
        act.add('comment')
        # map(self.fill_comment_apply_for, act.comment)
        return act
Exemple #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'服务器繁忙')
Exemple #3
0
 def fill_reward_detail(self, raward, price=None):
     reward_number = '{0}张'
     reward_number_ratio = '前{0}单'
     filter_str = '满{0}-{1}新衣币'
     ratio_str = '佣金上涨{0}%'
     amout_str = '{0}元无门槛新衣币'
     price_use = False
     if raward not in ['', None, [], {}]:
         if re.match(r'^[0-2]$', str(raward.RAtype)):
             if raward.RAtype == 0:
                 reward_str = filter_str.format(int(raward.RAfilter), int(raward.RAamount))
             elif raward.RAtype == 1:
                 reward_str = ratio_str.format(int(raward.RAratio))
             else:
                 reward_str = amout_str.format(int(raward.RAamount))
         zh_ratype = REWARD_TYPE.get(str(raward.RAtype))
         raward.fill(zh_ratype, 'zh_ratype')
         raward.fill(reward_str, 'rewardstr')
         time_valid = raward.RAcreatetime < get_db_time_str() < raward.RAendtime and not raward.RAisdelete
         if price:
             if raward.RAtype == 0:
                 price_use = price > raward.RAfilter
             elif raward.RAtype == 2:
                 price_use = True
             valid = time_valid and price_use
         else:
             valid = time_valid
         raward.fill(valid, 'valid')
         raward.RAendtime = get_web_time_str(raward.RAendtime)
         raward.RAcreatetime = get_web_time_str(raward.RAcreatetime)
     return raward
Exemple #4
0
    def get_content_by_seach(self):
        if not hasattr(request, 'user'):
            return TOKEN_ERROR  # 未登录, 或token错误
        
        args = request.args.to_dict()
        logger.debug("get search args is %s", args)
        page = args.get('page')  # 页码
        page = 1 if not page else int(page)
        start = args.get('start')  # 起始位置
        count = args.get('count')  # 取出条数
        count = 5 if not count else int(count)
        start = int((page - 1) * count) if not start else int(start)
        serachact = args.get("serachact")
        tnid = args.get('tnid')
        from WeiDian.service.SProduct import SProduct
        from WeiDian.service.SActivity import SActivity
        from WeiDian.control.CActivity import CActivity
        prname = args.get("PRname")
        prname = prname.encode("utf8") if isinstance(prname, unicode) else prname
        sactivity = SActivity()
        activity_list = []
        if str(serachact) == 'true':
            logger.info("now we'll search act through actext")
            activity_list.extend(sactivity.get_activity_list_by_actext(prname, tnid))
        else:
            logger.info("now we'll search act with product through prname")
            prid_list = SProduct().get_products_by_prname(prname)
            for prid in prid_list:
                activity_list.extend(sactivity.get_activity_by_prid(prid.PRid))
            activity_list = filter(lambda act: act.ACstarttime < get_db_time_str() < act.ACendtime, activity_list)

        if count > 30:
            count = 30
        end = start + count
        len_aclist = len(activity_list)
        if end > len_aclist:
            end = len_aclist
        cactivity = CActivity()
        activity_list = map(cactivity.fill_detail, activity_list)
        for activity in activity_list:
            activity.fill(activity.AClinkvalue, 'aclinkvalue')
            sactivity.update_view_num(activity.ACid)
            activity.ACstarttime = get_web_time_str(activity.ACstarttime)
            activity.ACendtime = get_web_time_str(activity.ACendtime)

        activity_list = activity_list[start:end]
        # map(cactivity.fill_comment_two, activity_list)
        map(cactivity.fill_like_num, activity_list)

        map(cactivity.fill_type, activity_list)
        map(cactivity.fill_product, activity_list)
        data = import_status("get_activity_list_success", "OK")
        data["data"] = activity_list
        data["count"] = len_aclist
        return data
Exemple #5
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"服务器繁忙")
Exemple #6
0
    def get_complain_by_usid(self):
        """后台管理查看投诉记录"""
        if not hasattr(request, 'user'):
            raise TOKEN_ERROR()  # 未登录, 或token错误
        args = request.args.to_dict()
        logger.debug("get complain args is %s", args)
        page_size = args.get('page_size')
        page_size = 10 if not page_size else int(page_size)
        page_num = args.get('page_num')
        page_num = 1 if not page_num else int(page_num)
        try:
            complain_list = self.scomplain.admin_get_all_complain(
                page_size, page_num)
            complain_list_length = self.scomplain.admin_get_complain_count()
            from WeiDian.config.enums import complain_type
            data = import_status("get_complain_success", "OK")
            for complain in complain_list:
                colist = str(complain.COtype).split(",")
                logger.debug('get colist %s', colist)
                complaintype = ",".join([complain_type.get(i) for i in colist])
                logger.debug('convert complain type %s', complaintype)
                complain.COtype = complaintype
                user_info = self.suser.get_user_by_user_id(complain.USid)
                complain.fill(user_info.USname, 'usname')
                complain.COcreatetime = get_web_time_str(complain.COcreatetime)

            data['data'] = complain_list
            data['count'] = complain_list_length
            logger.debug("get complain by usid %s", complain_list)
            return data
        except:
            logger.exception("get complain by usid error")
            raise SYSTEM_ERROR(u'获取数据错误')
Exemple #7
0
 def get_product_relate_bigactivity(self):
     """商品池获取商品与专题的关联详情"""
     if not is_admin():
         raise AUTHORITY_ERROR(u'请使用管理员账号重新登录')
     prid = request.args.to_dict().get('prid')
     parameter_required('prid')
     logger.debug("get product relate bigactivity PRID is %s", prid)
     prbaids = self.sproduct.get_product_baid_by_prid(prid)
     list_baid = []
     suid = ''
     suname = u'批量导入'
     updatetime = ''
     for prbaid in prbaids:
         record_info = self.sproduct.get_singel_record_by_filter({
             'PRid':
             prid,
             'PORtarget':
             prbaid.BAid
         })
         if record_info:
             suid = record_info.SUid
             suser_info = self.ssuperuser.get_one_super_by_suid(suid)
             suname = suser_info.SUname if suser_info else ''
             updatetime = get_web_time_str(record_info.PORcreatetime)
         dict_baid = {
             'pbid': prbaid.PBid,
             'baid': prbaid.BAid,
             'claimid': suid,
             'clainname': suname,
             'updatetime': updatetime
         }
         list_baid.append(dict_baid)
     response = import_status("messages_get_item_ok", "OK")
     response['data'] = list_baid
     return response
Exemple #8
0
 def get_grant_record(self):
     """获取运营发放记录"""
     if not is_admin():
         raise AUTHORITY_ERROR(u'非管理员权限')
     args = request.args.to_dict()
     logger.debug('get grant record args : %s', args)
     pagenum, pagesize = self.cuser.get_pagesize_pagenum(args)
     record_list, count = self.sraward.get_grant_record(pagenum, pagesize)
     for record in record_list:
         if record:
             user = self.suser.get_user_by_user_id(record.USid)
             usname = user.USname
             suser = self.ssuperuser.get_one_super_by_suid(record.SUid)
             susername = suser.SUname
             reward_info = self.sraward.get_raward_by_id(record.RAid)
             reward_info = self.fill_reward_detail(reward_info)
             record_str = '运营 {0} 发放给 {1} {2}优惠券 {3}张'.format(susername.encode('utf8'), usname.encode('utf8'), reward_info.rewardstr, record.RAnumber)
             record.fill(reward_info.rewardstr, 'rewardname')
             record.fill(usname, 'usname')
             record.fill(susername, 'susername')
             record.fill(record_str, 'record_str')
             record.RGRcreatetime = get_web_time_str(record.RGRcreatetime)
     response = import_status('messages_get_item_ok', 'OK')
     response['data'] = record_list
     response['count'] = count
     return response
Exemple #9
0
 def fill_task_params(self, task):
     task_detail = self.stask.get_task_by_taid(task.TAid)
     if not task_detail or task_detail.TAstatus == 4:
         return
     task.TAname = task_detail.TAname
     task.TAtype = task_detail.TAtype
     task.TAhead = task_detail.TAhead
     task.TLid = task_detail.TLid
     # task.TArole = task_detail.TArole
     # task.TAcomplateNotifications = task_detail.TAcomplateNotifications
     # task.RAid = task_detail.RAid
     task.TAstatus = TASK_STATUS.get(task_detail.TAstatus)
     task.TAmessage = task_detail.TAmessage
     task.TAurl = task_detail.TAurl
     task.TAstartTime = get_web_time_str(task_detail.TAstartTime)
     task.TAduration = task_detail.TAduration
     task.TAendTime = get_web_time_str(task_detail.TAendTime)
     task.add('TAname', "TAtype", "TAhead", "TLid", "TAstatus", "TAmessage",
              "TAurl", "TAendTime", "TAstartTime", "TAduration")
     return task
Exemple #10
0
    def get_comment_with_apply(self):
        """获取推文的评论列表(评论回复嵌套)"""
        try:
            args = request.args.to_dict()
            acid = args.get('acid')
            if not acid:
                raise PARAMS_MISS(u'必要的参数缺失: acid;')
            page = int(args.get('page', 1))  # 页码
            count = int(args.get('count', 15))  # 取出条数
            comment_list = self.sactivitycomment.get_comment_by_activity_id(
                acid, page, count)
            for comment in comment_list:
                self.fill_user(comment)
                comment.ACOcreatetime = get_web_time_str(comment.ACOcreatetime)
                replys = self.sactivitycomment.get_apply_by_acoid(
                    comment.ACOid)
                if replys:
                    for reply in replys:
                        comment.fill(replys, 'reply')
                        reply.hide('USid')
                        # 改: 所有的回复都是管理员回复
                        admin_user = self.ssuperuser.get_one_super_by_suid(
                            reply.USid)
                        if admin_user:
                            user = admin_user
                            admin_user.fill(0, 'robot')
                            user.hide('SUid')
                        else:
                            user = {'name': u'运营人员', 'robot': 1}
                        reply.ACOcreatetime = get_web_time_str(
                            reply.ACOcreatetime)
                        reply.fill(user, 'user')

            data = import_status('get_acvity_comment_list_success', 'OK')
            data['data'] = comment_list
            data["count"] = request.all_count
            data["page_count"] = request.page_count
            return data
        except Exception as e:
            generic_log(e)
            raise e
Exemple #11
0
 def get_all_raward(self):
     if not is_admin():
         raise AUTHORITY_ERROR(u"权限不足")
     args = request.args.to_dict()
     logger.debug("get all rewards args is %s", args)
     page_num, page_size = self.cuser.get_pagesize_pagenum(args)
     raward_list, count = self.sraward.get_all_reward(page_size, page_num)
     for reward in raward_list:
         if reward:
             packet_contact = self.sraward.get_is_where_packet(reward.RAid)
             if packet_contact:
                 packet_info = self.sraward.get_reward_in_packet_info(
                     packet_contact.RPTid)
                 rptname = getattr(packet_info, 'RPTname', '')
                 reward.fill(rptname, 'rptname')
             reward.RAcreatetime = get_web_time_str(reward.RAcreatetime)
             reward.RAendtime = get_web_time_str(reward.RAendtime)
     raward_list = self.fill_reward_detail(raward_list)
     res = import_status('get_task_success', 'OK')
     res['data'] = raward_list
     res['count'] = count
     return res
Exemple #12
0
 def get_product_operation_record(self):
     """获取商品操作记录"""
     if not is_admin():
         raise AUTHORITY_ERROR(u'请使用管理员账号重新登录')
     args = request.args.to_dict()
     prid = args.get('prid')
     page_num, page_size = self.cuser.get_pagesize_pagenum(args)
     record_list = self.sproduct.get_product_operation_record(
         page_num, page_size, prid)
     if record_list:
         for record in record_list:
             portarget = record.PRid if not record.PORtarget else record.PORtarget
             record.PORcreatetime = get_web_time_str(record.PORcreatetime)
             suser = self.ssuperuser.get_one_super_by_suid(record.SUid)
             suname = suser.SUname if suser else ''
             record.fill(suname, 'suname')
             record.fill(portarget, 'portarget')
     response = import_status("messages_get_item_ok", "OK")
     response['data'] = record_list
     response['page_count'] = request.page_count
     response['count'] = request.all_count
     return response
Exemple #13
0
 def get_product_pools(self):
     """后台获取商品池列表内容"""
     if not is_admin():
         raise AUTHORITY_ERROR(u'请使用管理员账号重新登录')
     args = request.args.to_dict()
     logger.debug("Get Commodity Pools data is %s", args)
     page, count = self.cuser.get_pagesize_pagenum(args)
     time_start = args.get('time_start')
     if time_start:
         time_start = get_db_time_str(time_start)
     time_end = args.get('time_end')
     if time_end:
         time_end = get_db_time_str(time_end)
     status = args.get('status')
     kw = args.get('kw')
     if kw not in self.empty:
         kw = kw.encode('utf8')
     isdelete = args.get('isdelete', 0)  # 0  or  1
     if str(isdelete) == '0':
         isdelete = False
     elif str(isdelete) == '1':
         isdelete = True
     else:
         isdelete = None
     product_list = self.sproduct.get_product_filter(
         kw, time_start, time_end, isdelete, status, page, count)
     for product in product_list:
         self.sproduct.update_view_num(product.PRid)
         self.fill_prbaid(product)
         self.fill_prtarget(product)
         if product.PRcreatetime:
             prcreatetime = get_web_time_str(product.PRcreatetime)
             product.fill(prcreatetime, 'prcreatetime')
         if product.SUmodifyid:
             isclaim = True
             canclaim = True if product.SUmodifyid == request.user.id else False
             caneditact = True if product.SUmodifyid == request.user.id else False
         else:
             isclaim = False
             canclaim = True
             caneditact = False
         product.fill(product.SUmodifyid or '', "claimid")
         product.fill(isclaim, "isclaim")
         product.fill(canclaim, "canclaim")
         product.fill(caneditact, "caneditact")
         isbig = False
         if product.PRtarget:
             isbig = True if product.PRtarget[0] == '101' else False
         product.fill(isbig, 'isbig')
         pv = product.PRviewnum
         product.fill(pv, 'pv')
         salesvolume = product.PRsalesvolume
         transform = 0 if pv == 0 else salesvolume / float(pv)
         ortransform = "%.2f%%" % (transform * 100)
         product.fill(ortransform, 'ortransform')
         refund_list = self.sorder.get_refund_product()
         redfund_num = 0
         if refund_list:
             for refund in refund_list:
                 refund_product = self.sorder.get_orderproductinfo_by_opiid(
                     refund.OPIid)
                 if refund_product:
                     redfund_num = redfund_num + refund_product.OPIproductnum
         refundrate_f = 0 if salesvolume == 0 else redfund_num / float(
             salesvolume)
         refundrate = "%.2f%%" % (refundrate_f * 100)
         product.fill(refundrate, 'refundrate')
         product.fill(product.prbaid, 'prbaid')
         product.fill(product.PRstatus, 'prstatus')
         activitystatus = 0
         acid = None
         ac_list = self.sactivity.get_acid_by_filterid({
             'AClinkvalue':
             product.PRid,
             'ACSkipType':
             2,
             'ACisdelete':
             False
         })
         if ac_list not in self.empty:
             for act in ac_list:
                 temp_num = -1 if act.ACeditstatus is None else act.ACeditstatus
                 activitystatus = temp_num + 1
                 acid = act.ACid
         zh_activitystatus = activity_edit_status.get(str(activitystatus))
         product.fill(activitystatus, 'activitystatus')
         product.fill(zh_activitystatus, 'zh_activitystatus')
         product.fill(acid, 'acid')
     data = import_status('get_product_list_success', 'OK')
     data['data'] = product_list
     data["count"] = request.all_count
     data["page_count"] = request.page_count
     return data
Exemple #14
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
Exemple #15
0
    def update_activity(self):
        if not is_admin():
            raise AUTHORITY_ERROR(u'当前非管理员权限')
        args = request.args.to_dict()
        logger.debug("this is update activity args %s", args)
        data = request.json
        logger.debug("this is update activity data %s", data)
        parameter_required("acid")
        now_time = datetime.strftime(datetime.now(), format_for_web_second)
        acid = args.get('acid')
        ACstarttime = get_db_time_str(data.get('acstarttime',
                                               now_time))  # 活动开始时间, 默认当前时间
        ACstarttime_str_to_time = datetime.strptime(ACstarttime, format_for_db)
        three_days_later = datetime.strftime(
            ACstarttime_str_to_time + timedelta(days=3650), format_for_db)
        ACendtime = get_db_time_str(
            data.get('acendtime', get_web_time_str(
                three_days_later)))  # 活动结束时间, 默认3天以后,后期需求公告教程部分非必填,默认改为十年
        TopnavId = data.get('topnavid')  # 导航页面
        ACtext = data.get('actext')  # 文字内容
        media = data.get('media')  # 多媒体
        tags = data.get('tags')  # 右上角tag标签
        ACistop = data.get('acistop', 0)
        ACtitle = data.get('actitle')
        AClinkvalue = data.get('aclinkvalue')
        SUid = data.get('suid')
        SUid = request.user.id if not SUid else str(SUid)
        ACSkipType = int(data.get('acskiptype', 0))  # 跳转类型
        ACProductsSoldFakeNum = data.get('acproductssoldfakenum')
        ACforwardFakenum = data.get('acforwardFakenum')
        ACbrowsenum = data.get('acbrowsenum')
        AClikeFakeNum = data.get('aclikeFakeNum')
        accomments = data.get('accomments')

        if str(ACistop) == 'True':
            istop = self.sactivity.get_top_activity(TopnavId)
            if istop:
                self.sactivity.change_top_act_status(istop.ACid,
                                                     {'ACistop': False})

        image_num = 0  # 标志用来限制图片或视频的数量
        if media:
            self.smedia.del_media_by_acid(acid)
            for img_or_video in media:
                img_or_video_keys = img_or_video.keys()
                if 'amimage' in img_or_video_keys and 'amvideo' not in img_or_video_keys:
                    """图片"""
                    self.smedia.add_model(
                        'ActivityMedia', **{
                            'AMid': str(uuid.uuid1()),
                            'ACid': acid,
                            'AMimage': img_or_video.get('amimage'),
                            'AMsort': img_or_video.get('amsort', 1)
                        })

                    image_num += 1
                    if image_num > 9:
                        raise SYSTEM_ERROR(u"图片超出数量限制")
                elif 'amimage' not in img_or_video_keys and 'amvideo' in img_or_video_keys:
                    """视频"""
                    if image_num < 1:
                        # 只有在无图片的状况下才会添加视频
                        self.smedia.del_media_by_acid(acid)
                        self.smedia.add_model(
                            'ActivityMedia', **{
                                'AMid': str(uuid.uuid1()),
                                'ACid': acid,
                                'AMvideo': img_or_video.get('amvideo')
                            })
                        # 只可以添加一个视频, 且不可以再添加图片
                        break
        # 创建tag
        if tags:
            self.stags.del_tags_by_acid(acid)
            count = 0
            for tag in tags:
                state = tag.get('atstate', 0)
                if str(state) not in ['0', '1']:
                    raise PARAMS_ERROR(u'atstate参数错误')
                if state == 1:
                    count += 1
                elif count > 1:
                    raise PARAMS_ERROR(u'默认显示角标只能有一个')
            for tag in tags:
                atstate = tag.get('atstate', 0)
                self.stags.add_model(
                    'ActivityTag', **{
                        'ATid': str(uuid.uuid1()),
                        'ACid': acid,
                        'ATname': tag.get('atname'),
                        'ATstate': atstate
                    })

        if accomments:
            self.sacomment.del_robot_comment_by_acid(acid)
            for comments in accomments:
                self.sacomment.add_model(
                    'ActivityComment', **{
                        'ACOid': str(uuid.uuid4()),
                        'ACid': acid,
                        'USid': 'robot',
                        'ACOrobot': comments.get('acorobot'),
                        'ACtext': comments.get('acotext'),
                        'ACOcreatetime': get_db_time_str()
                    })

        # 是否添加进入专题
        baid = data.get('baid')
        model_dict = {
            'ACSkipType': ACSkipType,
            'AClinkvalue': AClinkvalue,
            'SUid': SUid,
            'ACtype': data.get('actype'),  # 类型
            'ACtext': ACtext,
            'AClikeFakeNum': AClikeFakeNum,  # 喜欢数
            'ACbrowsenum': ACbrowsenum,  # 浏览数
            'ACforwardFakenum': ACforwardFakenum,  # 转发数量
            'ACProductsSoldFakeNum': ACProductsSoldFakeNum,  # 商品的销售量
            'ACstarttime': ACstarttime,
            'ACendtime': ACendtime,
            'ACtitle': ACtitle,
            'ACistop': ACistop,
            'BAid': baid,
            'ACisdelete': data.get('acisdelete')
        }

        if baid:
            if ACSkipType != 2:
                raise PARAMS_ERROR(u'参数不合理, 仅跳转到商品的推文可以加入专题')
            model_dict['BAid'] = baid
        model_dict = {
            k: v
            for k, v in model_dict.items() if v not in self.empty
        }
        act_info = self.sactivity.update_activity_by_acid(acid, model_dict)
        if not act_info:
            raise SYSTEM_ERROR(u'数据错误')
        response = import_status('update_activity_success', 'OK')
        response['data'] = {'acid': acid}
        return response
Exemple #16
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'获取数据错误')
Exemple #17
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
Exemple #18
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