Exemple #1
0
def set_budget(request):
    """设置日限额"""
    budget = int(request.POST['budget'])
    campaign_id = int(request.POST['camp_id'])
    use_smooth = request.POST['use_smooth']
    shop_id = int(request.user.shop_id)
    errMsg = ''
    opter, opter_name = analysis_web_opter(request)
    try:
        result_list, msg_list = update_campaign(shop_id=shop_id,
                                                campaign_id=campaign_id,
                                                budget=budget,
                                                use_smooth=use_smooth,
                                                opter=opter,
                                                opter_name=opter_name)
        if 'budget' in result_list:
            json_result_data = {
                'camp_id': campaign_id,
                'budget': budget,
                'use_smooth': use_smooth
            }
        else:
            json_result_data = {}
            errMsg = '<br/>'.join(msg_list)
    except Exception, e:
        log.info('modify_camp_budget error, shop_id=%s, campaign_id=%s, e=%s' %
                 (shop_id, campaign_id, e))
        errMsg = '修改日限额失败,请联系顾问'
Exemple #2
0
def set_online_status(request):
    """修改计划状态 """
    shop_id = int(request.user.shop_id)
    camp_id_list = request.POST.getlist('camp_id_list[]')
    mode = int(request.POST['mode'])
    online_status = mode and 'online' or 'offline'
    opter, opter_name = analysis_web_opter(request)
    success_camp_ids, failed_camp_ids = [], []
    try:
        for camp_id in camp_id_list:
            result_list, _ = update_campaign(shop_id=shop_id,
                                             campaign_id=camp_id,
                                             online_status=online_status,
                                             opter=opter,
                                             opter_name=opter_name)
            if 'online_status' in result_list:
                success_camp_ids.append(str(camp_id))
            else:
                failed_camp_ids.append(str(camp_id))
        return {
            'errMsg': '',
            'mode': mode,
            'success_camp_ids': success_camp_ids
        }
    except Exception, e:
        log.error('update_camps_status error,e=%s, shop_id=%s' % (e, shop_id))
        return {'errMsg': '修改失败:淘宝接口不稳定,请稍后再试'}
Exemple #3
0
def update_prop_status(request, dajax):
    """修改托管状态,包含两个状态,计划是否暂停与托管是否暂停,一改同时改"""
    try:
        campaign_id = request.POST['campaign_id']
        status = bool(int(request.POST['status']))
        shop_id = int(request.user.shop_id)
        mnt_type = int(request.POST.get('mnt_type', 0))
        online_status, mnt_status, opt_desc = status and (
            'online', 1, '开启自动优化') or ('offline', 0, '暂停自动优化')
        opter, opter_name = analysis_web_opter(request)
        result_list, msg_list = update_campaign(shop_id=shop_id,
                                                campaign_id=campaign_id,
                                                online_status=online_status,
                                                opter=opter,
                                                opter_name=opter_name)
        if 'online_status' not in result_list:
            raise Exception('<br/>'.join(msg_list))
        MntCampaign.objects.filter(
            shop_id=shop_id,
            campaign_id=campaign_id).update(set__mnt_status=mnt_status)
        dajax.script('PTQN.mnt.update_camp_back(%s)' % (status and 1 or 0))
    except Exception, e:
        log.info(
            'update mnt campaign prop status error ,e = %s, shop_id = %s' %
            (e, request.user.shop_id))
        dajax.script("PTQN.alert('%s失败,请刷新页面重新操作!');" % (opt_desc))
Exemple #4
0
def check_mnt_camp_title(shop_id, mnt_camp_list):
    camp_id_list = []
    today = datetime.datetime.now()
    try:
        for mnt_camp in mnt_camp_list:
            is_first = not mnt_camp.modify_camp_title_time and today >= mnt_camp.start_time + datetime.timedelta(
                days=7)
            # is_long_time = mnt_camp.modify_camp_title_time and today >= mnt_camp.modify_camp_title_time + datetime.timedelta(days = 15) or False
            if is_first:
                camp_id_list.append(mnt_camp.campaign_id)

        if not camp_id_list:
            return True

        camps = Campaign.objects.filter(shop_id=shop_id,
                                        campaign_id__in=camp_id_list)
        camp_rpt_dict = Campaign.Report.get_summed_rpt(
            {
                'shop_id': shop_id,
                'campaign_id': {
                    '$in': camp_id_list
                }
            },
            rpt_days=15)
        result_id_list = []
        for camp in camps:
            if '开车精灵-' in camp.title:
                continue
            camp_rpt = camp_rpt_dict.get(camp.campaign_id, None)
            if camp_rpt and camp_rpt.roi >= 1:
                new_title = '开车精灵-' + camp.title.replace('无线精灵-', '').replace(
                    '开車精灵-', '')
                result, _ = update_campaign(shop_id=camp.shop_id,
                                            campaign_id=camp.campaign_id,
                                            title=new_title,
                                            opter=3,
                                            opter_name='')
                if result:
                    result_id_list.append(camp.campaign_id)
        if result_id_list:
            mnt_camp_coll.update({'_id': {
                '$in': result_id_list
            }}, {'$set': {
                'modify_camp_title_time': datetime.datetime.now()
            }},
                                 multi=True)
        return True
    except Exception, e:
        log.error('e = %s' % e)
        return False
Exemple #5
0
def update_cfg(request, dajax):
    error_msg = ''
    shop_id = int(request.user.shop_id)
    campaign_id = request.POST['campaign_id']
    submit_data = json.loads(request.POST['submit_data'])
    mnt_type = int(request.POST.get('mnt_type', 1))
    opter, opter_name = analysis_web_opter(request)
    try:
        if submit_data.has_key('budget'):
            try:
                campaign = Campaign.objects.exclude('rpt_list').get(
                    shop_id=shop_id, campaign_id=campaign_id)
            except DoesNotExist, e:
                log.info('can not get campaign, campaign_id = %s' %
                         campaign_id)
                dajax.script('PTQN.light_msg("亲,请刷新页面重新操作!","red");')
                return dajax
            old_budget = campaign.budget
            new_budget = submit_data['budget']

            try:
                result_list, msg_list = update_campaign(
                    shop_id=shop_id,
                    campaign_id=int(campaign_id),
                    record_flag=False,
                    budget=new_budget,
                    use_smooth=campaign.is_smooth and 'true' or 'false',
                    opter=opter,
                    opter_name=opter_name)
                if 'budget' in result_list:
                    display_budget = lambda x: x == 20000000 and '不限' or ('%s元'
                                                                          % x)
                    descr = '日限额由%s,修改为%s' % (display_budget(
                        old_budget / 100), display_budget(new_budget))
                    udpate_cmp_budget_log(shop_id=shop_id,
                                          campaign_id=campaign_id,
                                          opt_desc=descr,
                                          opter=opter,
                                          opter_name=opter_name)
                else:
                    raise Exception('<br/>'.join(msg_list))
            except Exception, e:
                log.info('update campaign budget error, e = %s, shop_id = %s' %
                         (e, shop_id))
                if 'sub_msg":"日限额不得小于推广计划实时扣款金额' in str(e):
                    dajax.script('PTQN.light_msg("日限额不得小于推广计划实时扣款金额!","red");')
                else:
                    dajax.script('PTQN.light_msg("修改日限额失败","red");')
                return dajax
Exemple #6
0
def update_cfg(request):
    error_msg = ''
    shop_id = int(request.user.shop_id)
    campaign_id = request.POST['campaign_id']
    submit_data = json.loads(request.POST['submit_data'])
    mnt_type = int(request.POST.get('mnt_type', 1))
    try:
        opter, opter_name = analysis_web_opter(request)
        if submit_data.has_key('budget'):
            try:
                campaign = Campaign.objects.get(shop_id = shop_id, campaign_id = campaign_id)
            except DoesNotExist, e:
                log.info('can not get campaign, campaign_id = %s' % campaign_id)
                return {'errMsg':'亲,请刷新页面重新操作!'}
            old_budget = campaign.budget
            new_budget = submit_data['budget']
            result_list, msg_list = update_campaign(shop_id = shop_id, campaign_id = int(campaign_id), record_flag = False, budget = new_budget,
                                                    use_smooth = campaign.is_smooth and 'true' or 'false', opter = opter, opter_name = opter_name)
            if 'budget' in result_list:
                display_budget = lambda x: x == 20000000 and '不限' or ('%s元' % x)
                opt_desc = '日限额由%s,修改为%s' % (display_budget(old_budget / 100), display_budget(new_budget))
                udpate_cmp_budget_log(shop_id = shop_id, campaign_id = campaign_id, opt_desc = opt_desc, opter = opter, opter_name = opter_name)
            else:
                return {'errMsg':'<br/>'.join(msg_list)}
        if submit_data.has_key('max_price'):
            try:
                mnt_campaign = MntCampaign.objects.get(shop_id = shop_id, campaign_id = campaign_id)
            except DoesNotExist, e:
                log.info('can not get mnt_campaign, campaign_id = %s' % campaign_id)
                return {'errMsg':'亲,请刷新页面重新操作!'}
            old_max_price = mnt_campaign.max_price
            old_mobile_max_price = mnt_campaign.real_mobile_max_price
            new_max_price = int(round(float(submit_data.get('max_price', old_max_price / 100.0)) * 100))
            new_mobile_max_price = int(round(float(submit_data.get('mobile_max_price', old_mobile_max_price / 100.0)) * 100))
            if new_max_price != old_max_price or new_mobile_max_price != old_mobile_max_price:
                mnt_campaign.max_price = new_max_price
                mnt_campaign.mobile_max_price = new_mobile_max_price
                change_cmp_maxprice_log(shop_id = shop_id, campaign_id = campaign_id, max_price = new_max_price, mobile_max_price = new_mobile_max_price,
                                        opter = opter, opter_name = opter_name)
                MntTaskMng.upsert_task(shop_id = shop_id, campaign_id = campaign_id, mnt_type = mnt_type, task_type = 2, adgroup_id_list = 'ALL')
            mnt_campaign.save()
Exemple #7
0
def update_prop_status(request):
    """修改托管状态,包含两个状态,计划是否暂停与托管是否暂停,一改同时改"""
    try:
        campaign_id = int(request.POST['campaign_id'])
        status = bool(int(request.POST['status']))
        shop_id = int(request.user.shop_id)
        mnt_type = int(request.POST.get('mnt_type', 0))
        opter, opter_name = analysis_web_opter(request)
        online_status, mnt_status, opt_desc = status and ('online', 1, '开启自动优化') or ('offline', 0, '暂停自动优化')
        result_list, msg_list = update_campaign(shop_id = shop_id, campaign_id = campaign_id, online_status = online_status, opter = opter, opter_name = opter_name)
        if 'online_status'not in result_list:
            return {'errMsg':'<br/>'.join(msg_list)}
        MntCampaign.objects.filter(shop_id = shop_id, campaign_id = campaign_id).update(set__mnt_status = mnt_status)
        data_type = 108
        if mnt_status:
            data_type = 107
        set_cmp_mnt_status_log(shop_id = shop_id, campaign_id = campaign_id, opt_desc = opt_desc, data_type = data_type, opter = opter, opter_name = opter_name)
        # 同步任务状态,托管暂停、优化暂停;托管启动、优化启动
        MntTaskMng.trigger_task_status(shop_id = shop_id, campaign_id = campaign_id, trigger_flag = status)
        return {'errMsg':'', 'status':status and 1 or 0}
    except Exception, e:
        log.info('update mnt campaign prop status error ,e = %s, shop_id = %s' % (e, shop_id))
        return {'errMsg':"%s失败,请刷新页面重新操作!" % opt_desc}
Exemple #8
0
    def set_mnt_camp(campaign_id, flag, mnt_type, opter = 3, opter_name = '', **kwargs):
        """托管计划设置器,flag标识开启或者关闭"""
        from apps.subway.upload import update_campaign, set_cmp_mnt_status_log
        try:
            campaign = Campaign.objects.get(campaign_id = campaign_id)
        except DoesNotExist:
            log.info('can not find campaign, campaign_id = %s' % campaign_id)
            return None

        set_dict = {'mnt_status':flag}
        max_num_dict = {1: 500, 2: 10 , 3: 50, 4: 10}
        max_num = max_num_dict.get(mnt_type, 10)
        if flag:
            # TODO: wangqi 20151019 这里检查是否有权限创建
            if not MntMnger.check_create_mnt(campaign.shop_id):
                raise Exception("no_permission")

            set_dict.update({'online_status':'online',
                             'budget':kwargs['budget'],
                             'use_smooth':'true',
                             })

            if kwargs.get('area', 0) != 0:
                if campaign.area == 'all':
                    area_list = Const.CAMP_AREA
                else:
                    area_list = campaign.area.split(',')
                new_area_list = list(set(area_list) - {'599', '576', '578', '574'}) # 后面的数字,分别是港澳台国外,{1,2,3}是set初始化方法
                new_areas = ','.join(new_area_list)
                set_dict.update({'area': new_areas})
            if kwargs.get('platform', 0) != 0:
                set_dict.update({'search_channels':'1,2,4,8,16',
                                 'nonsearch_channels':'1,2,8,16',
                                 'outside_discount':60,
                                 'mobile_discount':110
                                 })
            if kwargs.get('schedule', 0) != 0:
                set_dict.update({'schedule':'00:00-01:00:45,01:00-08:00:35,08:00-09:00:70,09:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:45,01:00-08:00:35,08:00-09:00:70,09:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:45,01:00-08:00:35,08:00-09:00:70,09:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:45,01:00-08:00:35,08:00-09:00:70,09:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:45,01:00-08:00:35,08:00-09:00:70,09:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:50,01:00-08:00:35,08:00-10:00:65,10:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100;\
00:00-01:00:50,01:00-08:00:35,08:00-10:00:65,10:00-14:00:75,14:00-17:00:100,17:00-19:00:80,19:00-20:30:100,20:30-23:00:105,23:00-24:00:100'})

#             mnt_desc = mnt_type == 1 and '长尾托管' or '重点托管'
#             set_dict.update({'title':'开车精灵-%s%s' % (mnt_desc, kwargs['mnt_index'])})

            if kwargs.has_key('max_price') and kwargs['max_price'] > 0:
                set_dict.update({'max_price':kwargs['max_price']})

            if kwargs.has_key('mobile_max_price') and kwargs['mobile_max_price'] > 0:
                set_dict.update({'mobile_max_price':kwargs['mobile_max_price']})
            result_list, msg_list = update_campaign(shop_id = campaign.shop_id, campaign_id = campaign.campaign_id, opter = opter, opter_name = opter_name, **set_dict)

            create_args = {'shop_id':campaign.shop_id, 'campaign_id': campaign.campaign_id, 'mnt_index': kwargs['mnt_index'], 'mnt_type': mnt_type,
                           'max_num': max_num, 'mnt_cfg_list': []}
            if mnt_type in [2, 4]:
                create_args.update({
                    'max_price': kwargs.get('max_price', 200),
                    'mobile_max_price': kwargs.get('mobile_max_price', 200),
                    'mnt_rt': kwargs.get('mnt_rt', 0),
                    'mnt_bid_factor': kwargs.get('mnt_bid_factor', 50),
                    'opt_wireless': kwargs.get('opt_wireless', 0),
                })
            elif mnt_type in [1, 3]:
                create_args.update({
                    'max_price': kwargs.get('max_price', 200),
                    'mobile_max_price': kwargs.get('mobile_max_price', 200),
                    'mnt_bid_factor': kwargs.get('mnt_bid_factor', 50),
                    'opt_wireless': kwargs.get('opt_wireless', 0)
                })
            MntCampaign.objects.create(**create_args)
        else:
            msg_list = []
#             campaign.rpt_days = 7
#             if campaign.rpt_sum.roi < 1.5 and '开车精灵' in campaign.title or '开車精灵' in campaign.title:
#                 set_dict['title'] = '推广计划%s' % time.strftime('%m%d%H%M')
            campaign.rpt_sum = campaign.get_summed_rpt(rpt_days = 15)
            if campaign.rpt_sum.roi < 1 and ('开车精灵-' in campaign.title or '开車精灵-' in campaign.title or '无线精灵-' in campaign.title or not flag):
                set_dict['title'] = campaign.title.replace('开车精灵-', '').replace('开車精灵-', '').replace('无线精灵-', '')
                result_list, msg_list = update_campaign(shop_id = campaign.shop_id, campaign_id = campaign.campaign_id, opter = opter, opter_name = opter_name, **set_dict)
            MntMnger.unmnt_campaign(shop_id = campaign.shop_id, campaign_id = campaign.campaign_id)

        CacheAdpter.delete(CacheKey.WEB_MNT_MENU % campaign.shop_id, 'web')
        warn_msg_dict = {}
        if msg_list:
            warn_dict = {'名称或状态': 'title_status', '日限额': 'budget', '投放地域': 'area', '分时折扣': 'schedule', '平台设置': 'platform'}
            for msg in msg_list:
                for warn_str, warn_key in warn_dict.items():
                    if warn_str in msg:
                        warn_msg_dict[warn_key] = msg
                        break

        return warn_msg_dict