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 = '修改日限额失败,请联系顾问'
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': '修改失败:淘宝接口不稳定,请稍后再试'}
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))
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
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
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()
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}
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