Esempio n. 1
0
def submit_phone(request, dajax):
    qq = request.POST.get('qq', '')
    phone = request.POST.get('phone', '')
    namespace = request.POST.get('namespace', 'PTQN')
    shop_id = int(request.user.shop_id)
    is_success = 0

    try:
        # from apps.crm.models import Customer
        # from apps.ncrm.models import Customer as NCustomer
        # customer, _ = Customer.objects.get_or_create(shop_id = shop_id, defaults = {'user':request.user, 'nick':request.user.nick, 'tp_status':'untouched', 'jl_use_status':'using'})
        from apps.ncrm.models import Customer
        customer, _ = Customer.objects.get_or_create(
            shop_id=shop_id, defaults={'nick': request.user.nick})
        if qq:
            customer.qq = qq
        customer.phone = phone
        customer.save()
        # NCustomer.sync_customer_info(customer)
        CacheAdpter.set(CacheKey.WEB_ISNEED_PHONE % shop_id, 0, 'web',
                        60 * 60 * 24 * 7)
        is_success = 1
    except Exception, e:
        log.exception('submit userinfo error, e=%s, shop_id=%s' %
                      (e, request.user.shop_id))
Esempio n. 2
0
def redirect_sale_link(request):
    """跳转到推广链接"""
    sale_link_id = int(request.GET.get('sale_link_id', -1))
    a_id = int(request.GET.get('a_id', -1))

    shop_id = request.user.shop_id
    nick = request.user.nick

    redirect_url = reverse('web_home')
    sale_link = SaleLink.objects.filter(id=sale_link_id)
    if sale_link:
        sale_link = sale_link[0]

        # 限制链接为指定活动
        if a_id != -1:
            vaild_id_list = MainAds(shop_id=shop_id).get_showad_list()
            if a_id not in vaild_id_list:
                return render_to_limited(request, '对不起,您不符合该活动的条件')
        try:
            tapi = get_tapi(shop_id=shop_id)
            top_obj = tapi.fuwu_sale_link_gen(nick=nick,
                                              param_str=sale_link.param_str)
            if top_obj and hasattr(top_obj, 'url'):
                redirect_url = top_obj.url
        except Exception, e:
            log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e))
            return render_to_error(request, '生成链接失败,请联系顾问')
Esempio n. 3
0
def backend_login(request):
    top_dict = {}
    top_dict.update(request.REQUEST)

    # URL合法性校验
    check_result = jl_check_sign_with_secret(top_dict, timeout=60 * 60)
    if check_result == 'no_permission':
        return HttpResponse('非法访问,您没有访问权限')
    elif check_result == 'timeout':
        return HttpResponse('非法访问,请求超时')
    elif not top_dict.has_key('shop_id'):
        return HttpResponse('非法访问,请求参数错误')
    auth_logout(request)

    try:  # 模拟登陆
        is_agent = (top_dict.get('user_type', 'staff') == 'agent')
        visit_dict = {
            'nick': top_dict['nick'],
            'session': top_dict['session'],
            'visitor_from': top_dict['visitor_from']
        }
        request.session['psuser_name'] = top_dict['psuser_name']
        request.session['user_type'] = top_dict['user_type']
        return for_user_login(request,
                              visit_dict,
                              is_backend=(not is_agent),
                              is_agent=is_agent)
    except Exception, e:
        log.exception(
            "backend_login exception, nick=%s, session=%s, visitor_from=%s, error=%s"
            % (top_dict['nick'], top_dict['session'], top_dict['visitor_from'],
               e))
        return render_to_limited(request, '模拟登陆开车精灵发生系统错误')
Esempio n. 4
0
def sub_port(request):
    top_dict = {}
    top_dict.update(request.REQUEST)

    # URL合法性校验
    if not top_dict:
        return render_to_limited(request, '您的登录方式有误,请重新登陆您的管理后台,然后点击开车精灵的图标')
    check_result = jl_check_sign_with_secret(top_dict, timeout=60 * 6)
    if check_result == 'no_permission':
        return render_to_limited(request, '您没有使用权限,请订购后重新登录')
    elif check_result == 'timeout':
        return HttpResponse('请求超时,请重新进入')

    log.info("LOGIN sub_port, nick=%s, from=%s" %
             (top_dict['visitor_nick'], top_dict['visitor_from']))
    auth_logout(request)

    try:  # 执行登陆
        visit_dict = {
            'nick': top_dict['visitor_nick'],
            'session': top_dict['top_session'],
            'visitor_from': top_dict['visitor_from']
        }
        return for_user_login(request, visit_dict)
    except Exception, e:
        log.exception(
            "sub_port exception, nick=%s, session=%s, visitor_from=%s, error=%s"
            % (top_dict['visitor_nick'], top_dict['top_session'],
               top_dict['visitor_from'], e))
        return render_to_limited(request, '登陆开车精灵发生系统错误')
Esempio n. 5
0
def paginate_for_sql(count_sql, query_sql, page_no, page_size, all_count = None, recount = False):
    '''
    \根据SQL分页查询数据

    count_sql格式:SELECT %s FROM auth_user order by shop_id
    query_sql格式:SELECT username FROM auth_user order by shop_id
    \注意:1)要保证django/core/paginator.py中有后来添加的for_sql函数
    2)只有page_no=1或recount=True(需要每次都计算)的时候,才计算all_count,
    \其它情况需传入all_count(从page_obj.paginator.count中获取),因此当翻页查询后,还有添加、删除操作时,应该设置recount=True
    '''
    this_page = None
    if page_no < 1 or page_size < 1 or not count_sql or not query_sql:
        return this_page
    try:
        if page_no == 1 or recount:
            count_sql = count_sql % ("count(*) all_count")
            all_count = execute_query_sql(count_sql)[0]["all_count"]

        query_sql += " LIMIT %s OFFSET %s" % (page_size, (page_no - 1) * page_size)
        data_list = execute_query_sql(query_sql)
        try:
            paginator = Paginator(data_list, page_size)
            this_page = paginator.page(1)
            this_page.for_sql(page_no, all_count)
        except (EmptyPage, InvalidPage):
            this_page = paginator.page(1)
            this_page.for_sql(1, all_count)
    except Exception, e:
        log.exception("page_no=%s, page_size=%s, all_count=%s, e=%s" % (page_no, page_size, all_count, e))
        raise e
Esempio n. 6
0
    def __call__(self, time_scope, cycle, indicators, psusers, is_force=False):
        psusers = list(psusers)
        indicators = [
            IndicatorManager.get_indicator(indicator_name)
            for indicator_name in indicators
        ]
        time_scope_list = TimeSpliter(cycle)(time_scope)

        try:
            loader = Loader(psusers, *time_scope)
            staff_mapping = loader.loading(indicators, is_force)

            all_result = collections.OrderedDict()
            for psuser in psusers:
                statis_data = []
                if len(time_scope_list) > 1:
                    result = StatisticsHelper([psuser], indicators,
                                              *time_scope)(staff_mapping)
                    statis_data.append(result)

                for start_time, end_time in time_scope_list:
                    result = StatisticsHelper([psuser], indicators, start_time,
                                              end_time)(staff_mapping)
                    statis_data.append(result)

                all_result[psuser] = statis_data

            if len(time_scope_list) > 1:
                time_scope_list.insert(0, time_scope)
            return all_result, time_scope_list, indicators
        except Exception, e:
            log.exception('ncrm_guidance2 error, %s' % e)
            return {}, [], []
Esempio n. 7
0
def execute_manage_sql(sql, value_list = None):
    '''
    \传入SQL执行插入、更新、删除、truncate操作,返回操作成功的记录条数

    replace说明:因为replace会先删除已存在的原记录,再插入记录,因此objs以及其对应的table必须满足如下条件才能调用:
    1、objs对象的属性不能被其他Model作为外键引用
    2、objs对象必须有单一主键或唯一索引
    3、objs对象的主键不能是自增长的id
    value_list、auto_commit可以为空,auto_commit=False时,需要在该函数外面做数据库提交
    '''
    script_type = None
    if sql:
        script_type = sql.lstrip()
        script_type = script_type[0:script_type.find(" ")].lower()
    try:
        if script_type in ["insert", "update", "delete", "truncate", "drop", "alter", "replace"]:
            # SQL语句格式:"UPDATE bar SET foo = 1 WHERE baz = %s AND name = %s"
            cursor = connection.cursor()
            if not value_list:
                cursor.execute(sql)
            else:
                cursor.execute(sql, value_list)
            # if auto_commit:
            #     transaction.commit_unless_managed()
            return cursor.rowcount
        else:
            raise SQLException, "SQL syntax error:[%s]" % sql
    except Exception, e:
        log.exception("SQL Statement execute error, e=%s" % (e))
        raise e
Esempio n. 8
0
def quick_oper(request, dajax):
    """触发页面上的“加大投入/减小投入”"""
    try:
        shop_id = int(request.user.shop_id)
        campaign_id = int(request.POST['campaign_id'])
        stgy = int(request.POST['stgy'])
        opter, opter_name = analysis_web_opter(request)
        mnt_campaign = MntCampaign.objects.get(campaign_id=campaign_id)
        if not mnt_campaign.quick_optime or not time_is_someday(
                mnt_campaign.quick_optime):
            MntTaskMng.generate_quickop_task(
                shop_id=mnt_campaign.shop_id,
                campaign_id=mnt_campaign.campaign_id,
                mnt_type=mnt_campaign.mnt_type,
                stgy=stgy)
            # 不管执行成功或者失败,都不让再操作
            mnt_campaign.quick_optime = datetime.datetime.now()
            mnt_campaign.save()
            dajax.script('PTQN.mnt.quick_oper_back(%s);' % (stgy))
        else:
            dajax.script('PTQN.mnt.quick_oper_back(0);')
        stgy_name = '加大投入' if stgy == 1 else '减小投入'
        opt_type = 15 if stgy == 1 else 16
        opt_desc = '对托管的宝贝%s' % (stgy_name)
        mnt_quick_oper_log(shop_id,
                           campaign_id, [],
                           opt_desc,
                           opter=opter,
                           opter_name=opter_name)
    except Exception, e:
        log.exception(
            'mnt quick oper error, shop_id=%s, campaign_id=%s, e=%s' %
            (request.user.shop_id, campaign_id, e))
        dajax.script('PTQN.mnt.quick_oper_back(0);')
Esempio n. 9
0
def quick_oper(request):
    '''触发页面上的“加大投入/减小投入”'''
    try:
        shop_id = int(request.user.shop_id)
        campaign_id = int(request.POST['campaign_id'])
        adg_id_list = request.POST.getlist("adg_id_list[]")
        adg_id_list = [int(adg_id) for adg_id in adg_id_list]
        stgy = int(request.POST['stgy'])
        opter, opter_name = analysis_web_opter(request)
        mnt_campaign = MntCampaign.objects.get(campaign_id = campaign_id, shop_id = shop_id)
        now = datetime.datetime.now()
        result = 1
        if adg_id_list:
            MntTaskMng.generate_quickop_task(shop_id = mnt_campaign.shop_id, campaign_id = mnt_campaign.campaign_id, mnt_type = mnt_campaign.mnt_type, stgy = stgy, adgroup_id_list = adg_id_list)
            adg_coll.update({'shop_id': shop_id, 'campaign_id':campaign_id, '_id':{'$in': adg_id_list}},
                            {'$set':{'quick_optime': now}}, multi = True)
        else:
            if not mnt_campaign.quick_optime or not time_is_someday(mnt_campaign.quick_optime):
                MntTaskMng.generate_quickop_task(shop_id = shop_id, campaign_id = mnt_campaign.campaign_id, mnt_type = mnt_campaign.mnt_type, stgy = stgy)
                mnt_campaign.quick_optime = now
                mnt_campaign.save()
            else:
                result = 2
        # 写入操作记录
        stgy_name = '加大投入' if stgy == 1 else '减小投入'
        opt_type = 15 if stgy == 1 else 16
        adg_ids = '、'.join([str(adg_id) for adg_id in adg_id_list])
        mnt_quick_oper_log(shop_id, campaign_id, adg_id_list, stgy_name, opter = opter, opter_name = opter_name)
        if adg_id_list:
            return {'errMsg':'', 'result':result, 'stgy':stgy, 'adg_id_list':adg_id_list}
        else:
            return {'errMsg':'', 'result':result, 'stgy':stgy}
    except Exception, e:
        log.exception('mnt quick oper error, shop_id=%s, campaign_id=%s, e=%s' % (request.user.shop_id, campaign_id, e))
        return {'errMsg':e, 'result':0, 'stgy':stgy}
Esempio n. 10
0
 def split_title_from_cat(cls, cat_item_dic):
     title_list = []
     try:
         for _, items in cat_item_dic.items():
             for item in items:
                 new_title = cls.generate_title(item[1])
                 title_list.append((item[0], new_title))
     except Exception, e:
         log.exception('error:%s' % (e))
Esempio n. 11
0
    def process(self):
        """
        Process the dajax request calling the apropiate method.
        """
        if self.is_callable():
            # 1. get the function
            thefunction = self.get_ajax_function()

            # 2. call the function
            try:
                response = thefunction(self.request)
                if isinstance(response, Dajax):
                    return response.render()
                else:
                    return response
            except Exception, e:
                log.exception("dajax error, e=%s" % (e))  # added by hehao
                # Development Server Debug
                if settings.DEBUG and DajaxRequest.get_dajax_debug():
                    import traceback
                    from dajax.utils import print_green_start, print_blue_start, print_clear, print_red

                    print_green_start()
                    print "#" * 50
                    print "uri:      %s" % self.request.build_absolute_uri()
                    print "function: %s" % self.full_name
                    print "#" * 50
                    print ""
                    print_red(str(e))
                    print_blue_start()
                    traceback.print_exc(e)
                    print_clear()

                # If it's an ajax request we need soft debug
                # http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_ajax
                if self.request.is_ajax():
                    # If project was in debug mode, alert with Exception info
                    # if settings.DEBUG:#modified by hehao
                    if True:
                        response = Dajax()
                        # response.alert('Exception %s: Check %s manually for more information or your server log.' % (str(e), self.request.get_full_path()))
                        response.alert(u'亲,出错啦,请联系您的顾问!')
                        return response.render()
                    # If not, check DAJAX_ERROR_CALLBACK, if present call this function
                    # elif DajaxRequest.get_dajax_error_callback() != None:#modified by hehao
                    if DajaxRequest.get_dajax_error_callback() != None:
                        response = Dajax()
                        response.script(
                            DajaxRequest.get_dajax_error_callback() % str(e))
                        return response.render()
                    # Otherside ... raise Exception
                    else:
                        raise
                # If it's a non-ajax request raise Exception, Django cares.
                else:
                    raise
Esempio n. 12
0
def add_new_item(request):
    '''全自动将新宝贝添加为托管
    1. 将增加的宝贝添加为广告组
    2. 将添加成功的广告组,设置成托管宝贝[注意数量限制],并且还要保存托管设置
    3. 添加成功的宝贝,只提示个数;添加失败的宝贝,要提示原因
    '''
    errMsg = ''
    msg = ''
    result = {}
    opter, opter_name = analysis_web_opter(request)
    def add_items_common(shop_id, campaign_id, new_item_dict):
        """给定item_title_list来添加宝贝"""
        item_arg_list, added_id_list, failed_item_dict = [], [], {}
        if new_item_dict:
            tapi = get_tapi(request.user)
            item_list = Item.get_item_by_ids(shop_id = shop_id, item_id_list = new_item_dict.keys(), tapi = tapi, transfer_flag = True) # 从淘宝获取标准的item数据
            temp_item_dict = {} # 获取部分宝贝信息
            for item in item_list: # 绑定创意标题
                added_item = new_item_dict.get(item['_id'], {})
                if not added_item:
                    continue
                item.update({'adgroup':
                                 {'title': TitleTransfer.remove_noneed_words(added_item['title1']),
                                  'img_url': added_item['img_url1']},
                             'creative':
                                 {'title': TitleTransfer.remove_noneed_words(added_item['title2']),
                                  'img_url': added_item['img_url2']},
                             })
                item_arg_list.append(item)
                temp_item_dict.update({item['_id']:[item['pic_url'], item['title']]})

            if item_arg_list:
                # 导入宝贝
                added_id_list, error_msg_dict = add_adgroups(shop_id = shop_id, campaign_id = campaign_id, item_arg_list = item_arg_list, tapi = tapi, opter = opter, opter_name = opter_name)
                for item_id, error_msg in  error_msg_dict.items():
                    temp_item_info = temp_item_dict.get(item_id, ('', ''))
                    failed_item_dict.update({item_id:(temp_item_info[0], temp_item_info[1], error_msg)})
                del temp_item_dict
        return added_id_list, failed_item_dict

    shop_id = int(request.user.shop_id)
    camp_id = int(request.POST['camp_id'])
    new_item_dict = json.loads(request.POST['new_item_dict'])
    new_item_dict = {int(item_id):adg_crt for item_id, adg_crt in new_item_dict.items()}
    mnt_type = int(request.POST.get('mnt_type', 0))

    try:
        success_adg_id_list, failed_item_dict = add_items_common(shop_id = shop_id, campaign_id = camp_id, new_item_dict = new_item_dict)
        msg = '添加成功 %s 个宝贝%%s,添加失败 %s 个宝贝!' % (len(success_adg_id_list), len(failed_item_dict))
        result['success_count'] = len(success_adg_id_list)
        result['failed_count'] = len(failed_item_dict)
    except Exception, e:
        success_adg_id_list, failed_item_dict = [], {}
        log.exception('add items2 error, shop_id=%s, campaign_id=%s, e=%s' % (shop_id, camp_id, e))
        msg = '添加成功 %s 个宝贝%%s,添加失败 %s 个宝贝!' % (0, len(new_item_dict))
        errMsg = "未知错误"
Esempio n. 13
0
def sort_column(value):
    # 因为table_sort是按字符串来排序的,导致20大于100。所以在20前面补0。
    try:
        if value:
            return mark_safe('<span class="hide">%012.2f</span>%s' %
                             (float(value), value))
        else:
            return value
    except Exception, e:
        log.exception("sort_column(value=%s) raise error=%s" % (value, e))
        return mark_safe('<span class="hide">%s</span>%s' % (value, value))
Esempio n. 14
0
def bulk_update_for_model(obj_list, commit_number = 1000):
    '''批量更新model_list数据,按照commit_number将obj_list分组批量更新'''
    for temp_list in genr_sublist(obj_list, commit_number):
        try:
            for obj in temp_list:
                obj.save(False, False)
            transaction.commit()
        except Exception, e:
            log.exception("Object save error, e=%s" % (e))
            transaction.rollback()
            raise e
Esempio n. 15
0
def main():
    scheduler = BlockingScheduler()

    for job in JOB_LIST:
        if callable(job['func']):
            scheduler.add_job(**job)

    try:
        scheduler.start()
    except Exception, e:
        log.exception("scheduler quit with exception, e=%s" % e)
Esempio n. 16
0
def get_duplicate_task(error_msg):
    '''获取异步接口的task_id'''
    task_id = 0
    try:
        sub_msg = (eval(error_msg))['error_response']['sub_msg']
        pattern = re.compile('TaskId=(?P<x>\d*)', re.M | re.U | re.I)
        match_list = pattern.findall(sub_msg)
        if match_list and match_list[0]:
            task_id = int(match_list[0])
    except Exception, e:
        log.exception("parse task_id failed, error_msg=%s, e=%s" %
                      (error_msg, e))
Esempio n. 17
0
def route_ajax(request):
    '''ajax路由函数,返回数据务必返回字典的格式'''
    function_name = request.POST.get('function', '')
    call_back = request.GET.get('callback')
    try:
        if function_name and globals().get(function_name, ''):
            data = globals()[function_name](request=request)
        else:
            log.exception("route_ajax: function_name Does not exist")
            data = {'error': 'function_name Does not exist'}
    except Exception, e:
        log.exception("route_ajax error, e=%s ,request_data=%s" %
                      (e, request.POST))
Esempio n. 18
0
 def remove_noimp_same_wd2(cat_id, wd_list):
     # 对这些关键词进行排序,去掉没有流量的关键词
     log.info('combine words,new extended words num:%s' % len(wd_list))
     wd_list = check_kw_2save_inDB(wd_list)
     # wdcat_list = [{'word':word, 'cat_id':cat_id} for word in wd_list]
     keyword_list = []
     # 找出类目下有流量的关键词
     try:
         # temp_dict = get_catsworddata(cat_id, wd_list, datetime.datetime.strftime(datetime.datetime.now() - datetime.timedelta(days = 7), "%Y-%m-%d"), time.strftime("%Y-%m-%d"))
         temp_dict = get_kw_g_data(wd_list)
     except Exception, e:
         log.exception("remove_noimp_same_wd2 error, e=%s" % e)
         temp_dict = {}
Esempio n. 19
0
def bulk_update_for_sql(sql, value_list, commit_number = 1000):
    '''批量执行sql语句保存数据,按照commit_number将value_list分组批量更新'''
    rowcount = 0
    for group_value_list in genr_sublist(value_list, commit_number):
        if group_value_list:
            try:
                cursor = connection.cursor()
                for temp_list in group_value_list:
                    rowcount += cursor.executemany(sql, temp_list) # sql语句里的字符串型参数 %s 两旁不加引号!
                    transaction.commit()
            except Exception, e:
                log.exception("SQL update error, e=%s" % (e))
                transaction.rollback()
                raise e
Esempio n. 20
0
def route_ajax(request):
    '''ajax路由函数,返回数据务必返回字典的格式'''
    if not request.user.is_authenticated():
        return {'errMsg':'您已经退出,请重新登录之后再试'}
    function_name = request.POST.get('function', '')
    call_back = request.GET.get('callback')
    try:
        if function_name and globals().get(function_name, ''):
            data = globals()[function_name](request = request)
        else:
            log.exception("route_ajax: function_name Does not exist")
            data = {'error': 'function_name Does not exist'}
    except Exception, e:
        log.exception("route_ajax error, e=%s ,request_data=%s" %
                      (e, request.POST))
Esempio n. 21
0
def get_rpt_detail(request):
    """获取报表明细"""
    def format_report(rpt):
        return {
            'impr': rpt.impressions,
            'click': rpt.click,
            'ctr': '%.2f' % rpt.ctr,
            'cpc': '%.2f' % (rpt.cpc / 100.0),
            'cost': '%.2f' % (rpt.cost / 100.0),
            'pay': '%.2f' % (rpt.pay / 100.0),
            'paycount': rpt.paycount,
            'favcount': rpt.favcount,
            'roi': '%.2f' % rpt.roi,
            'conv': '%.2f' % rpt.conv,
            'carttotal': rpt.carttotal,
            'pay_cost': '%.2f' % (rpt.pay_cost / 100.0),
            'avg_pay': '%.2f' % (rpt.avg_pay / 100.0)
        }

    shop_id = int(request.user.shop_id)
    errorMsg = ''
    rpt_list = []
    type_model_dict = {'account': [Account, 'shop_id', 0]}
    try:
        obj_type = 'account'
        start_date = request.POST['start_date']
        end_date = request.POST['end_date']
        obj_args = type_model_dict[obj_type]
        query_dict = {"shop_id": shop_id}

        # 每日数据
        snap_list = obj_args[0].Report.get_snap_list(
            query_dict, start_date=start_date, end_date=end_date).values()
        if snap_list:
            snap_list = snap_list[0]
        snap_list.reverse()

        for rpt in snap_list:
            dt = rpt.pop('date').strftime('%Y-%m-%d')
            temp_dict = {'date': dt, 'summed': format_report(rpt)}
            rpt_list.append(temp_dict)

    except Exception, e:
        errorMsg = '未获取到数据,请联系顾问'
        log.exception("get_rpt_detail error, shop_id=%s, e=%s" % (shop_id, e))
Esempio n. 22
0
def __insert_for_dict(table_name, field_string, field_list, objs):
    '''将field_list对应的字典list objs批量插入'''
    values_list = []
    for obj in objs:
        for field_name in field_list:
            field_value = obj[field_name]
            values_list.append(field_value)

    arg_string = ', '.join([u'(' + ', '.join(['%s'] * len(field_list)) + ')'] * len(objs))
    sql = "INSERT INTO %s (%s) VALUES %s" % (table_name, field_string, arg_string,)

    try:
        cursor = connection.cursor()
        cursor.execute(sql, values_list)
        # transaction.commit_unless_managed()
    except Exception, e:
        log.exception("SQL Statement execute error, e=%s" % (e))
        raise e
Esempio n. 23
0
def route_ajax(request):
    """ajax路由函数,返回数据务必返回字典的格式"""
    function_name = request.POST.get('function', '')
    call_back = request.GET.get('callback')

    try:
        if function_name and globals().get(function_name, ''):
            data = globals()[function_name](request=request)
        else:
            log.exception("route_ajax: function_name Does not exist")
            data = {'error': 'function_name Does not exist'}
    except Exception, e:
        log.exception("route_ajax error, e=%s ,request_data=%s" %
                      (e, request.POST))
        if 'AnonymousUser' in str(e):
            data = {'errMsg': '会话已过期,请重新登录!'}
        else:
            data = {'errMsg': '未知错误,请联系顾问!'}
Esempio n. 24
0
def redirect_generate_link(request):
    """生成推荐链接"""
    shop_id = request.user.shop_id
    nick = request.user.nick
    template_id = int(request.GET.get('temp_id', 0))

    order_temp = OrderTemplate.get_ordertemplate_byid(template_id)
    redirect_url = ""
    if order_temp:
        try:
            tapi = get_tapi(shop_id=shop_id)
            if order_temp.is_base:
                from apps.web.point import Renewal
                Renewal.add_point_record(shop_id=shop_id,
                                         template_id=order_temp.id)
            redirect_url = order_temp.generate_order_link(nick, tapi)
        except Exception, e:
            log.exception('fuwu_sale_link_gen, nick=%s, e=%s' % (nick, e))
            return render_to_error(request, '生成链接失败,请联系顾问')
Esempio n. 25
0
def execute_query_sql(sql, value_list = None, model_class = None):
    '''
    \传入SQL执行数据库查询操作,返回结果可以是dict_list,也可以是model_list;

    value_list、model_class可以为空,model_class=None时,返回dict_list;
    model_class为模型对象时,返回model_list,如果model_class不包含ResultSet的属性,则会将该属性加入到model对象中;
    \查询时取了所有结果,如果数据量太大,需要在SQL语句中包含limit分页;
    \该函数用于替代RawSQL,但不同的是调用会立即执行查询,如果真的想只在使用对象时查询,就可以使用RawSQL,其它情况下慎用
    '''
    script_type = None
    if sql:
        script_type = sql.lstrip()
        script_type = script_type[0:script_type.find(" ")].lower()
    try:
        if script_type == "select":
            # SQL语句格式:"SELECT foo FROM bar WHERE baz = %s AND name = %s LIMIT %s, %s"
            cursor = connection.cursor()
            if not value_list:
                cursor.execute(sql)
            else:
                cursor.execute(sql, value_list)
            # 得到查询的列属性和结果
            descr = cursor.description
            result_set = cursor.fetchall()
            # 将结果组装为字典列表
            if model_class == None:
                return [dict(zip([column[0] for column in descr], row)) for row in result_set]
            # 将结果组装为模型列表
            else:
                model_obj_list = []
                for row in result_set:
                    model_obj = model_class()
                    tuple_kv_list = zip([column[0] for column in descr], row)
                    for tuple_kv in tuple_kv_list:
                        setattr(model_obj, tuple_kv[0], tuple_kv[1])
                    model_obj_list.append(model_obj)
                return model_obj_list
        else:
            raise SQLException, "SQL syntax error:[%s]" % sql
    except Exception, e:
        log.exception("SQL Statement execute error, e=%s" % (e))
        raise e
Esempio n. 26
0
    def update_waiting_creative(cls, id, shop_id, title, file_item, opter,
                                opter_name):
        """更新排队中的创意"""
        from apilib.binder import FileItem
        from bson.objectid import ObjectId

        try:
            # 将图片上传到图片空间
            tapi = get_tapi(shop_id=shop_id)
            _, picture_path = cls.upload_picture(tapi, shop_id, file_item)
            ccrt = ccrt_coll.find_one({"_id": ObjectId(id)})
            ccrt_coll.update(
                {'_id': ObjectId(id)},
                {'$set': {
                    'title': title,
                    'img_url': picture_path
                }})
            if ccrt['title'] != title:
                detail_list = ['修改创意:%s --> %s' % (ccrt['title'], title)]
            else:
                detail_list = ['修改创意:%s' % (title)]

            adgroup = Adgroup.objects.get(shop_id=ccrt['shop_id'],
                                          adgroup_id=ccrt['adgroup_id'])
            record_list = [{
                'shop_id': ccrt['shop_id'],
                'campaign_id': ccrt['campaign_id'],
                'adgroup_id': ccrt['adgroup_id'],
                'item_name': adgroup.item.title,
                'detail_list': detail_list,
                'op_type': 3,
                'data_type': 303,
                'opter': opter,
                'opter_name': opter_name
            }]
            if record_list:
                rcd_list = [UploadRecord(**record) for record in record_list]
                UploadRecord.objects.insert(rcd_list)
            return True
        except Exception, e:
            log.exception(e)
            return False
Esempio n. 27
0
    def __create_waiting_creative(cls, **args):
        try:
            field_list = [
                'shop_id', 'campaign_id', 'num_iid', 'adgroup_id', 'title',
                'img_url'
            ]
            args_dict = {
                item: args[item]
                for item in field_list if item in args
            }

            args_dict['status'] = 0
            args_dict['create_time'] = datetime.datetime.now()
            custom_creative = cls.objects.create(**args_dict)
            adg_coll.update(
                {
                    'shop_id': args['shop_id'],
                    '_id': args['adgroup_id']
                }, {'$set': {
                    'creative_test_switch': True
                }})
            adgroup = Adgroup.objects.get(shop_id=args['shop_id'],
                                          adgroup_id=args['adgroup_id'])
            detail_list = ['添加创意:%s' % custom_creative.title]
            record_list = [{
                'shop_id': args['shop_id'],
                'campaign_id': args['campaign_id'],
                'adgroup_id': args['adgroup_id'],
                'item_name': adgroup.item.title,
                'detail_list': detail_list,
                'op_type': 3,
                'data_type': 301,
                'opter': args['opter'],
                'opter_name': args['opter_name']
            }]
            if record_list:
                rcd_list = [UploadRecord(**record) for record in record_list]
                UploadRecord.objects.insert(rcd_list)
            return custom_creative
        except Exception, e:
            log.exception(e)
            return False
Esempio n. 28
0
    def create_complate_creative(cls, creative):
        '''创建一个投放完成的创意'''
        try:
            field_list = [
                'shop_id', 'campaign_id', 'num_iid', 'adgroup_id',
                'creative_id', 'title', 'img_url', 'rpt_list'
            ]
            args_dict = {
                item: getattr(creative, item)
                for item in field_list if hasattr(creative, item)
            }

            args_dict['status'] = 1
            args_dict['start_time'] = creative.create_time
            args_dict['create_time'] = datetime.datetime.now()
            custom_creative = cls.objects.create(**args_dict)
            return custom_creative
        except Exception, e:
            log.exception(e)
            return False
Esempio n. 29
0
def route_dajax(request):
    '''dajax路由函数'''
    auto_hide = int(request.POST.get('auto_hide', 1))
    dajax = Dajax()
    if auto_hide:
        dajax.script("PTQN.hide_loading();")
    function_name = request.POST.get('function')
    if function_name and globals().get(function_name, ''):
        dajax = globals()[function_name](request=request, dajax=dajax)
    else:
        dajax = log.exception("route_dajax: function_name Does not exist")
    return dajax
Esempio n. 30
0
def main():
    try:
        fw_coll = FuwuOrder._get_collection()
        fw_coll.remove({'pay_status': 1}, multi=True)
        all_count = fw_coll.find({}).count()
        i = 0
        del_count = 0
        for doc in fw_coll.find({}):
            i += 1
            nick = doc.get('nick')
            if nick:
                cust = Customer.objects.filter(nick=doc['nick'])
                if cust:
                    exist_sub = Subscribe.objects.filter(
                        shop_id=cust[0].shop_id,
                        article_code=doc['article_code'],
                        create_time__gte=doc['create_time'])
                    if exist_sub:
                        fw_coll.remove(doc['_id'])
                        del_count += 1
                        print 'delelte id: ', doc['_id']
            print '进度:%s / %s,已删 %s' % (i, all_count, del_count)
    except Exception, e:
        log.exception('%s', e)