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 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 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}
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 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);')
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 = "未知错误"
def change_mntcfg_type(request): '''设置重点计划算法导向''' shop_id = int(request.user.shop_id) camp_id = int(request.POST.get('campaign_id', 0)) mnt_type = int(request.POST.get('mnt_type', 1)) opter, opter_name = analysis_web_opter(request) mnt_bid_factor = float(request.POST.get('mnt_bid_factor', 0)) mnt_camp_coll.update({'shop_id': shop_id, '_id': camp_id}, {'$set': {'mnt_bid_factor': mnt_bid_factor}}) opt_desc = '设置托管宝贝推广意向' change_mntcfg_type_log(shop_id = shop_id, campaign_id = camp_id, opt_desc = opt_desc, opter = opter, opter_name = opter_name) return {'errMsg':'', 'descr':opt_desc}
def submit_keyword(request): """提交关键词修改""" shop_id = int(request.user.shop_id) kw_list = json.loads(request.POST.get('submit_list', '')) opter, opter_name = analysis_web_opter(request) updated_id_list, _, _, failed_id_list = update_kws_8shopid( shop_id, kw_list, opter=opter, opter_name=opter_name) return { 'update_kw': updated_id_list, 'failed_kw': failed_id_list, 'errMsg': '' }
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 mnt_campaign_setter(request): error_msg = None shop_id = int(request.user.shop_id) mnt_type = int(request.POST.get('mnt_type')) campaign_id = int(request.POST['campaign_id']) set_flag = int(request.POST['set_flag']) and True or False # 设置为托管计划或者终止托管计划 opter, opter_name = analysis_web_opter(request) try: warn_msg_dict = {} if mnt_type not in [1, 2, 3, 4]: raise Exception("wrong_mnt_type") if set_flag: mnt_rt = int(request.POST.get('mnt_rt', 0)) # 是否启用实时引擎 mnt_bid_factor = int(request.POST.get('mnt_bid_factor', 0)) opt_wireless = int(request.POST.get('opt_wireless', 0)) max_price = int(float(request.POST['max_price']) * 100) mobile_max_price = int(float(request.POST['mobile_max_price']) * 100) budget = int(request.POST['budget']) mnt_index = int(request.POST['mnt_index']) kwargs = {'area': int(request.POST.get('area', 0)), 'schedule': int(request.POST.get('schedule', 0)), 'platform': int(request.POST.get('platform', 0))} warn_msg_dict = MntMnger.set_mnt_camp(campaign_id = campaign_id, flag = set_flag, mnt_index = mnt_index, mnt_type = mnt_type, opter = opter, opter_name = opter_name, max_price = max_price, mobile_max_price = mobile_max_price, budget = budget, mnt_rt = mnt_rt, mnt_bid_factor = mnt_bid_factor, opt_wireless = opt_wireless, **kwargs) else: warn_msg_dict = MntMnger.set_mnt_camp(campaign_id = campaign_id, flag = set_flag, mnt_type = mnt_type, opter = opter, opter_name = opter_name) except Exception, e: log.info('mnt_campaign_setter error: %s, mnt_type: %s, campaign_id: %s, shop_id: %s,' % (e, mnt_type, campaign_id, shop_id)) if str(e) == "no_permission": return {'errMsg':'', 'result':0, 'error_msg':'no_permission'} try: result, error_msg = json.loads(e.message) except: if hasattr(e, 'reason'): error_msg = (eval(e.reason))['error_response'].get('sub_msg', '淘宝发生未知错误,请联系顾问') else: error_msg = e.message if 'need to wait' in error_msg: error_msg = 'API接口超限'
def update_rt_engine_status(request): '''设置宝贝实时优化状态''' shop_id = int(request.user.shop_id) mnt_type = int(request.POST.get('mnt_type', 1)) camp_id = int(request.POST['campaign_id']) status = int(request.POST['status'], 0) opter, opter_name = analysis_web_opter(request) errMsg = '' try: mnt_camp = MntCampaign.objects.get(shop_id = shop_id, campaign_id = camp_id, mnt_type = mnt_type) mnt_camp.mnt_rt = status mnt_camp.save() opt_desc = '关闭宝贝时实优化' if status: opt_desc = '开启宝贝实时优化' change_rt_engine_log(shop_id = shop_id, campaign_id = camp_id, opt_desc = opt_desc, opter = opter, opter_name = opter_name) except DoesNotExist, e: log.info('set adgroups mnt status error, e= %s, shop_id = %s, mnt_type = %s' % (e, shop_id, mnt_type)) errMsg = '亲,请刷新页面重新操作!'
def update_adgs_mnt(request): '''批量设置宝贝优化''' errMsg = '' adg_id_list = request.POST.getlist("adg_id_list[]") adg_id_list = [int(adg_id) for adg_id in adg_id_list] shop_id = int(request.user.shop_id) flag = int(request.POST['flag']) # 判断是加入托管还是取消托管 mnt_type = int(request.POST.get('mnt_type', 1)) camp_id = int(request.POST['camp_id']) use_camp_limit = int(request.POST.get('use_camp_limit', 1)) limit_price = int(float(request.POST.get('limit_price', 0)) * 100) mobile_limit_price = int(float(request.POST.get('mobile_limit_price', 0)) * 100) opter, opter_name = analysis_web_opter(request) try: mnt_camp = MntCampaign.objects.get(shop_id = shop_id, campaign_id = camp_id, mnt_type = mnt_type) except DoesNotExist, e: log.info('set adgroups mnt status error, e= %s, shop_id = %s, mnt_type = %s' % (e, shop_id, mnt_type)) errMsg = '亲,请刷新页面重新操作!' return {'errMsg':errMsg}
def update_single_adg_mnt(request): '''单个宝贝托管设置''' errMsg = '' opt_desc = '' shop_id = int(request.user.shop_id) adg_id = int(request.POST['adg_id']) flag = int(request.POST['flag']) # 判断是加入托管还是取消托管 mnt_type = int(request.POST.get('mnt_type', 1)) camp_id = int(request.POST['camp_id']) use_camp_limit = int(request.POST.get('use_camp_limit', 1)) limit_price = int(round_digit(float(request.POST.get('limit_price', 0)) * 100)) # 引入 round_digit 是为了解决 int(2.01*100) = 200 的 bug mobile_limit_price = int(round_digit(float(request.POST.get('mobile_limit_price', 0)) * 100)) opter, opter_name = analysis_web_opter(request) try: mnt_camp = MntCampaign.objects.get(shop_id = shop_id, campaign_id = camp_id, mnt_type = mnt_type) except DoesNotExist, e: log.info('set adgroups mnt status error, e= %s, shop_id = %s, mnt_type = %s' % (e, shop_id, mnt_type)) errMsg = '亲,请刷新页面重新操作!' return {'errMsg':errMsg}
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_mnt_adg(request): '''添加/取消托管adgroup''' errMsg = '' result = {} opter, opter_name = analysis_web_opter(request) try: shop_id = int(request.user.shop_id) camp_id = int(request.POST['camp_id']) mnt_adg_dict = json.loads(request.POST['mnt_adg_dict']) adg_id_list = [int(adg_id) for adg_id in mnt_adg_dict] flag = int(request.POST['flag']) # 1是加入托管, 0是取消托管, 2是将提交的宝贝批量加入托管并将剩下的宝贝取消托管 if mnt_adg_dict: if flag == 2: MntMnger.set_mnt_adgroup(shop_id, camp_id, mnt_adg_dict, opter, opter_name) elif flag == 1: MntMnger.set_mnt_adgroup(shop_id, camp_id, mnt_adg_dict, opter, opter_name) elif flag == 0: MntMnger.unmnt_adgroup(shop_id, camp_id, adg_id_list, opter, opter_name) result['adg_id_list'] = adg_id_list result['flag'] = flag else: result['msg'] = '还未选择任何宝贝' # 更改或添加创意 tapi = get_tapi(request.user) update_creative_dict = json.loads(request.POST.get('update_creative_dict', '{}')) new_creative_list = json.loads(request.POST.get('new_creative_list', '[]')) for creative_id, data in update_creative_dict.items(): creative_id = int(creative_id) adgroup_id, title, img_url = data update_creative(tapi = tapi, shop_id = shop_id, adgroup_id = adgroup_id, creative_id = creative_id, title = title, img_url = img_url, opter = opter, opter_name = opter_name) if new_creative_list: add_creative(tapi = tapi, shop_id = shop_id, campaign_id = camp_id, crt_arg_list = new_creative_list, opter = opter, opter_name = opter_name) result['success_msg'] = '将 %s 个宝贝%s托管' % (len(adg_id_list), (flag and '加入' or '取消')) result['success_count'] = len(adg_id_list) except Exception, e: log.info('set adgroups mnt status error, e= %s, shop_id = %s' % (e, request.user.shop_id)) errMsg = '托管宝贝失败,请与客服联系'
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}
try: Attention.change_attention_state(shop_id, adgroup_id, keyword_id, False) result = [keyword_id] except Exception, e: log.error('cancel attention error, shop_id=%s, keyword_id=%s, e=%s' % (shop_id, keyword_id, e)) result = [] finally: dajax.script("PTQN.keyword_manage.call_back_cancel_attention(%s)" % (json.dumps(result))) return dajax shop_id = int(request.user.shop_id) kw_list = json.loads(request.POST.get('data', [])) opter, opter_name = analysis_web_opter(request) updated_id_list, _, _, fail_update_id_list = update_kws_8shopid( shop_id=shop_id, kw_list=kw_list, opter=opter, opter_name=opter_name) result = {'success': updated_id_list, 'fall': fail_update_id_list} dajax.script("PTQN.keyword_manage.call_back_submit(%s)" % (json.dumps(result))) return dajax def auto_set_attention_kw(request, dajax): '''一键设置关键词''' from apps.qnyd.biz import set_attention_kw shop_id = int(request.user.shop_id) set_attention_kw(shop_id=shop_id) dajax.script('window.location.href="%s";' % ('./keyword_manage'))
def mnt_campaign(request, campaign_id, template='mnt_campaign.html'): shop_id = int(request.user.shop_id) campaign_id = int(campaign_id) mnt_list = [] mnt_campaign_dict = dict( MntCampaign.objects.filter(shop_id=shop_id).values_list( 'campaign_id', 'mnt_type')) campaign_list = list(Campaign.objects.filter(shop_id=shop_id)) mnt_desc_dict = dict(MNT_TYPE_CHOICES) campaign = None for camp in campaign_list: camp.mnt_type = mnt_campaign_dict.get(camp.campaign_id, 0) camp.mnt_name = mnt_desc_dict.get(camp.mnt_type, '').replace( '托管', '') if camp.mnt_type else '手动' mnt_list.append({ 'campaign_id': camp.id, 'name': camp.title, 'mnt_type_name': camp.mnt_name }) if camp.id == campaign_id: campaign = camp if campaign is None: return render_to_error(request, "该计划不存在,请返回页面重新操作") snap_list = campaign.get_snap_list(rpt_days=7) start_time = None mnt_days = 0 try: mnt_camp = MntCampaign.objects.get(shop_id=shop_id, campaign_id=campaign_id) campaign.optimize_time = mnt_camp.optimize_time and time_humanize( mnt_camp.optimize_time) or "0" campaign.mnt_type = mnt_camp.mnt_type campaign.max_num = mnt_camp.max_num campaign.max_price = '%.2f' % (mnt_camp.max_price / 100.0) campaign.mobile_max_price = '%.2f' % (mnt_camp.real_mobile_max_price / 100.0) campaign.mnt_desc = mnt_camp.get_mnt_type_display() campaign.is_active = mnt_camp.is_active campaign.quick_optime = mnt_camp.quick_optime campaign.mnt_bid_factor = mnt_camp.mnt_bid_factor campaign.mnt_rt = mnt_camp.mnt_rt start_time = datetime_2string(mnt_camp.start_time, '%Y年%m月%d日') mnt_days = days_diff_interval(mnt_camp.start_time.date()) except DoesNotExist: campaign.mnt_type = 0 campaign.max_num = 0 campaign.max_price = 0.00 campaign.mobile_max_price = 0.00 campaign.mnt_desc = "未托管计划" campaign.is_active = False campaign.quick_optime = datetime.datetime.now() campaign.mnt_bid_factor = 50 campaign.mnt_rt = 0 is_smooth = campaign.is_smooth and 1 or 0 budget = '%.0f' % (campaign.budget / 100.0) from apps.web.utils import get_trend_chart_data category_list, series_cfg_list = get_trend_chart_data(data_type=2, rpt_list=snap_list) snap_list.reverse() camp_dict = dict( Campaign.objects.filter(shop_id=shop_id).values_list( 'campaign_id', 'title')) mnt_opter, _ = analysis_web_opter(request) return render_to_response(template, { 'camp': campaign, 'mnt_list': mnt_list, 'snap_list': snap_list, 'is_smooth': is_smooth, 'budget': budget, 'category_list': category_list, 'series_cfg_list': json.dumps(series_cfg_list), 'camp_dict': camp_dict, 'mnt_opter': mnt_opter, 'add_adgroup': campaign.mnt_type, 'start_time': start_time, 'mnt_days': mnt_days }, context_instance=RequestContext(request))