AppCampaignController.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. import time
  2. import pytz
  3. import json
  4. from datetime import datetime
  5. from datetime import time as Time
  6. import csv
  7. from Model.models import AppAdvertiseCampaign, DeviceTypeModel, CountryModel, Device_User, OpenScreenCampaign
  8. from Ansjer.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, SERVER_TYPE
  9. from django.core.paginator import Paginator
  10. from django.views import View
  11. from django.db.models import Prefetch
  12. from django.db.models import Q
  13. from Object.AWS.AmazonS3Util import AmazonS3Util
  14. from Object.ResponseObject import ResponseObject
  15. from Object.TokenObject import TokenObject
  16. class AppCampaignView(View):
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. operation = kwargs.get('operation')
  20. request_dict = request.GET
  21. return self.validation(request_dict, request, operation)
  22. def post(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. request_dict = request.POST
  26. return self.validation(request_dict, request, operation)
  27. def validation(self, request_dict, request, operation):
  28. language = request_dict.get('language', 'en')
  29. response = ResponseObject(language, 'pc')
  30. if operation == 'getCampaignList': # 获取广告活动列表
  31. return self.get_campaign_list(request_dict, response)
  32. elif operation == 'getCountryList': # 查询国家列表
  33. return self.get_country_list(response)
  34. elif operation == 'addCampaign': # 添加广告活动
  35. return self.add_campaign(request, request_dict, response)
  36. elif operation == 'updateCampaign': # 更新广告活动
  37. return self.update_campaign(request, request_dict, response)
  38. elif operation == 'deleteCampaign': # 删除广告活动
  39. return self.delete_campaign(request_dict, response)
  40. elif operation == 'switchCampaign': # 广告活动开关
  41. return self.switch_campaign(request_dict, response)
  42. elif operation == 'appGetCampaigns':
  43. return self.app_get_campaigns(request_dict)
  44. elif operation == 'recordUserBehavior':
  45. return self.record_user_behavior(request_dict)
  46. elif operation == 'getUserBehaviorLog':
  47. return self.get_user_behavior_log(request_dict, response)
  48. else:
  49. return response.json(414)
  50. def get_campaign_list(self, request_dict, response):
  51. """
  52. 查询广告活动列表
  53. @param request_dict: 请求参数
  54. @param response: 响应对象
  55. @return: 响应对象包含广告活动列表
  56. """
  57. campaign_name = request_dict.get('campaign_name', None)
  58. campaign_country = request_dict.get('campaign_country', None)
  59. status = request_dict.get('status', None)
  60. pageNo = request_dict.get('pageNo', 1)
  61. pageSize = request_dict.get('pageSize', 20)
  62. unknown_country = 0
  63. # 连接并获取国家和设备类型
  64. country_prefetch = Prefetch('country', queryset=CountryModel.objects.only('country_name'),
  65. to_attr='country_list')
  66. device_type_prefetch = Prefetch('device_type', queryset=DeviceTypeModel.objects.only('name'),
  67. to_attr='device_type_list')
  68. app_advertise_campaign_qs = AppAdvertiseCampaign.objects.prefetch_related(country_prefetch,
  69. device_type_prefetch)
  70. # 过滤
  71. if campaign_name:
  72. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(campaign_name=campaign_name)
  73. if status:
  74. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(status=status)
  75. if campaign_country:
  76. campaign_country_list = campaign_country.split(',')
  77. if "未知地区" in campaign_country_list:
  78. unknown_country = 1
  79. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(
  80. Q(country__country_name__in=campaign_country_list) | Q(unknown_country=unknown_country)).distinct()
  81. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(~Q(status=2))
  82. # 分页
  83. paginator = Paginator(app_advertise_campaign_qs.order_by('id'), pageSize)
  84. campaigns = paginator.page(pageNo)
  85. if SERVER_TYPE == 'Ansjer.cn_config.formal_settings' or SERVER_TYPE == 'Ansjer.cn_config.test_settings':
  86. s3_url = "https://ansjerfilemanager.s3.cn-northwest-1.amazonaws.com.cn/app/campaign/"
  87. else:
  88. s3_url = "https://ansjerfilemanager.s3.amazonaws.com/app/campaign/"
  89. # 添加设备名和地区返回
  90. campaign_list = []
  91. for campaign in campaigns.object_list:
  92. if campaign.unknown_country == 0:
  93. countries = ",".join([country.country_name for country in campaign.country_list])
  94. else:
  95. country_list = campaign.country_list
  96. country_names = []
  97. for country in country_list:
  98. country_names.append(country.country_name)
  99. country_names.append("未知地区")
  100. countries = ",".join(country_names)
  101. campaign_data = {
  102. 'id': campaign.id,
  103. 'image_url': s3_url + campaign.image_url,
  104. 'campaign_name': campaign.campaign_name,
  105. 'campaign_url': campaign.campaign_url,
  106. 'campaign_type': campaign.campaign_type,
  107. 'status': campaign.status,
  108. 'campaign_start_date': campaign.campaign_start_date,
  109. 'campaign_end_date': campaign.campaign_end_date,
  110. 'campaign_show_stime': campaign.campaign_show_stime,
  111. 'campaign_show_etime': campaign.campaign_show_etime,
  112. 'countries': countries,
  113. 'device_types': ",".join([device.name for device in campaign.device_type_list]),
  114. }
  115. campaign_list.append(campaign_data)
  116. data = {
  117. 'list': campaign_list,
  118. 'total': paginator.count,
  119. }
  120. return response.json(0, data)
  121. def add_campaign(self, request, request_dict, response):
  122. """
  123. 添加新的广告活动
  124. @param request_dict: 包含所有请求参数的字典
  125. @param response: 响应对象
  126. @return: 响应对象
  127. """
  128. file = request.FILES.get('posterFile', None)
  129. campaign_name = request_dict.get('campaign_name', None)
  130. campaign_url = request_dict.get('campaign_url', None)
  131. campaign_type = request_dict.get('campaign_type', None)
  132. status = request_dict.get('status', None)
  133. device_type_names = json.loads(request_dict.get('device_type_list', None)) # 设备类型名称列表
  134. country_name_list = json.loads(request_dict.get('country_name_list', None)) # 地区列表
  135. campaign_start_time = request_dict.get('campaign_start_time', None)
  136. campaign_end_time = request_dict.get('campaign_end_time', None)
  137. campaign_show_stime = request_dict.get('campaign_show_stime', 0)
  138. campaign_show_etime = request_dict.get('campaign_show_etime', 86399)
  139. if not all([campaign_name, campaign_type, device_type_names, campaign_url,
  140. country_name_list, campaign_start_time, campaign_end_time, file]):
  141. return response.json(444)
  142. # 针对特殊地区的处理,表没设计好用这个处理挽救一下
  143. unknown_country = 0
  144. if "未知地区" in country_name_list:
  145. unknown_country = 1
  146. country_name_list.remove("未知地区")
  147. if SERVER_TYPE == 'Ansjer.cn_config.formal_settings' or SERVER_TYPE == 'Ansjer.cn_config.test_settings':
  148. regin = 0
  149. AWS_SES_ACCESS_REGION = "cn-northwest-1"
  150. else:
  151. regin = 1
  152. AWS_SES_ACCESS_REGION = 'us-east-1'
  153. fileName = file.name
  154. try:
  155. create_time = int(time.time())
  156. update_time = int(time.time())
  157. # 保存图片到存储桶
  158. bucket_name = 'ansjerfilemanager'
  159. file_key = f'app/campaign/OpenScreenAdvertise/{update_time}_{fileName}'
  160. s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[0], AWS_SECRET_ACCESS_KEY[0], "cn-northwest-1")
  161. # 地址:https://ansjerfilemanager.s3.amazonaws.com/app/campaign/OpenScreenAdvertise/XXX.jpg
  162. s3.upload_file_obj(
  163. bucket_name,
  164. file_key,
  165. file,
  166. {'ContentType': file.content_type, 'ACL': 'public-read'})
  167. # 创建 AppAdvertiseCampaign 实例
  168. new_campaign = AppAdvertiseCampaign.objects.create(
  169. image_url=f"OpenScreenAdvertise/{update_time}_{fileName}",
  170. campaign_name=campaign_name,
  171. campaign_url=campaign_url,
  172. campaign_type=campaign_type,
  173. status=status,
  174. unknown_country=unknown_country,
  175. campaign_start_date=campaign_start_time,
  176. campaign_end_date=campaign_end_time,
  177. campaign_show_stime=campaign_show_stime,
  178. campaign_show_etime=campaign_show_etime,
  179. create_time=create_time,
  180. update_time=update_time,
  181. )
  182. # 根据名称查找 DeviceTypeModel 的实例并建立关系
  183. device_type_instances = DeviceTypeModel.objects.filter(name__in=device_type_names)
  184. for device_type_instance in device_type_instances:
  185. new_campaign.device_type.add(device_type_instance)
  186. # 根据 ID 关联 CountryModel 实例
  187. country_instances = CountryModel.objects.filter(country_name__in=country_name_list)
  188. for country_instance in country_instances:
  189. new_campaign.country.add(country_instance)
  190. except Exception as e:
  191. return response.json(178)
  192. return response.json(0)
  193. def update_campaign(self, request, request_dict, response):
  194. campaign_id = request_dict.get('id', None)
  195. campaign_name = request_dict.get('campaign_name', None)
  196. campaign_url = request_dict.get('campaign_url', None)
  197. campaign_type = request_dict.get('campaign_type', None)
  198. device_type_names = json.loads(request_dict.get('device_type_list', '[]')) # 设备类型名称列表
  199. country_name_list = json.loads(request_dict.get('country_name_list', '[]')) # 地区列表
  200. campaign_start_time = request_dict.get('campaign_start_time', None)
  201. campaign_end_time = request_dict.get('campaign_end_time', None)
  202. campaign_show_stime = request_dict.get('campaign_show_stime', None)
  203. campaign_show_etime = request_dict.get('campaign_show_etime', None)
  204. file = request.FILES.get('posterFile', None)
  205. if not campaign_id:
  206. return response.json(444)
  207. if SERVER_TYPE == 'Ansjer.cn_config.formal_settings' or SERVER_TYPE == 'Ansjer.cn_config.test_settings':
  208. regin = 0
  209. AWS_SES_ACCESS_REGION = "cn-northwest-1"
  210. else:
  211. regin = 1
  212. AWS_SES_ACCESS_REGION = 'us-east-1'
  213. try:
  214. update_time = int(time.time())
  215. campaign = AppAdvertiseCampaign.objects.get(id=campaign_id)
  216. if country_name_list is not None:
  217. if "未知地区" in country_name_list:
  218. campaign.unknown_country = 1
  219. country_name_list.remove("未知地区")
  220. else:
  221. campaign.unknown_country = 0
  222. if file is not None:
  223. # 删除存储桶原来的图片
  224. s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[regin], AWS_SECRET_ACCESS_KEY[regin], AWS_SES_ACCESS_REGION)
  225. bucket_name = 'ansjerfilemanager'
  226. if campaign.image_url:
  227. s3.delete_obj(bucket_name, f"app/campaign/{campaign.image_url}")
  228. # 添加新的图片
  229. file_key = f'app/campaign/OpenScreenAdvertise/{update_time}_{file.name}'
  230. s3.upload_file_obj(
  231. bucket_name,
  232. file_key,
  233. file,
  234. {'ContentType': file.content_type, 'ACL': 'public-read'}
  235. )
  236. campaign.image_url = f'OpenScreenAdvertise/{update_time}_{file.name}'
  237. if campaign_name is not None:
  238. campaign.campaign_name = campaign_name
  239. if campaign_url is not None:
  240. campaign.campaign_url = campaign_url
  241. if campaign_type is not None:
  242. campaign.campaign_type = campaign_type
  243. if campaign_start_time is not None:
  244. campaign.campaign_start_date = campaign_start_time
  245. if campaign_end_time is not None:
  246. campaign.campaign_end_date = campaign_end_time
  247. if campaign_show_stime is not None:
  248. campaign.campaign_show_stime = campaign_show_stime
  249. if campaign_show_etime is not None:
  250. campaign.campaign_show_etime = campaign_show_etime
  251. # 更新多对多字段 - 设备类型
  252. if device_type_names:
  253. device_types = DeviceTypeModel.objects.filter(name__in=device_type_names)
  254. campaign.device_type.set(device_types)
  255. # 更新多对多字段 - 国家/地区
  256. if country_name_list:
  257. countries = CountryModel.objects.filter(country_name__in=country_name_list)
  258. campaign.country.set(countries)
  259. campaign.update_time = update_time
  260. # 保存更新
  261. campaign.save()
  262. except Exception as e:
  263. return response.json(177)
  264. return response.json(0)
  265. def switch_campaign(self, request_dict, response):
  266. campaign_id = request_dict.get('id')
  267. status = request_dict.get('status')
  268. if not campaign_id:
  269. return response.json(444)
  270. try:
  271. AppAdvertiseCampaign.objects.filter(pk=campaign_id).update(status=status, update_time=int(time.time()))
  272. return response.json(0)
  273. except Exception as e:
  274. return response.json(444)
  275. def delete_campaign(self, request_dict, response):
  276. campaign_id = request_dict.get('id')
  277. if SERVER_TYPE == 'Ansjer.cn_config.formal_settings' or SERVER_TYPE == 'Ansjer.cn_config.test_settings':
  278. regin = 0
  279. AWS_SES_ACCESS_REGION = "cn-northwest-1"
  280. else:
  281. regin = 1
  282. AWS_SES_ACCESS_REGION = 'us-east-1'
  283. if not campaign_id:
  284. return response.json(444)
  285. try:
  286. campaign = AppAdvertiseCampaign.objects.get(pk=campaign_id)
  287. s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[regin], AWS_SECRET_ACCESS_KEY[regin], AWS_SES_ACCESS_REGION)
  288. bucket_name = 'ansjerfilemanager'
  289. if campaign.image_url:
  290. s3.delete_obj(bucket_name, f"app/campaign/{campaign.image_url}")
  291. # 清除多对多关系
  292. campaign.device_type.clear()
  293. campaign.country.clear()
  294. # 保留在广告表中
  295. campaign.status = 2
  296. campaign.update_time = int(time.time())
  297. campaign.save()
  298. return response.json(0)
  299. except Exception as e:
  300. return response.json(176)
  301. def get_timezone_offset(self, tz):
  302. """
  303. 将 "+8:00" 格式的时区字符串转换为包含分钟偏移的时区。
  304. """
  305. sign = tz[0] # " " 或 "-"
  306. hours, minutes = map(int, tz[1:].split('.')) # 分离小时和分钟
  307. # 计算总分钟数
  308. total_minutes = hours * 60 + minutes
  309. if sign == '-':
  310. total_minutes = -total_minutes
  311. # 使用 pytz.FixedOffset 创建时区
  312. return pytz.FixedOffset(total_minutes)
  313. def app_get_campaigns(cls, request_dict):
  314. """
  315. APP获取广告活动列表
  316. @param request_dict: 请求参数
  317. @param response: 响应对象
  318. @return: 响应对象
  319. """
  320. language = request_dict.get('language', 'en')
  321. tz = request_dict.get('tz', '+0:00')
  322. token = request_dict.get('token', None)
  323. response = ResponseObject(language)
  324. if not token:
  325. return response.json(444)
  326. token = TokenObject(token)
  327. if token.code != 0:
  328. return response.json(token.code)
  329. user_id = token.userID
  330. if SERVER_TYPE == 'Ansjer.cn_config.formal_settings' or SERVER_TYPE == 'Ansjer.cn_config.test_settings':
  331. s3_url = "https://ansjerfilemanager.s3.cn-northwest-1.amazonaws.com.cn/app/campaign/"
  332. else:
  333. s3_url = "https://ansjerfilemanager.s3.amazonaws.com/app/campaign/"
  334. # 当日时间戳区间获取
  335. timezone = cls.get_timezone_offset(tz)
  336. current_date = datetime.now().date()
  337. start_of_day = datetime.combine(current_date, Time.min)
  338. end_of_day = datetime.combine(current_date, Time.max)
  339. start_timestamp = int(start_of_day.timestamp())
  340. end_timestamp = int(end_of_day.timestamp())
  341. open_screen_campaign_qs = OpenScreenCampaign.objects.filter(
  342. user_id=user_id,
  343. create_time__gt=start_timestamp,
  344. create_time__lt=end_timestamp
  345. )
  346. if not open_screen_campaign_qs.exists():
  347. OpenScreenCampaign.objects.create(user_id=user_id,
  348. create_time=int(time.time()))
  349. try:
  350. country_prefetch = Prefetch('country', queryset=CountryModel.objects.only('id'), to_attr='country_list')
  351. device_type_prefetch = Prefetch('device_type', queryset=DeviceTypeModel.objects.only('type'),
  352. to_attr='device_type_list')
  353. app_advertise_campaign_qs = AppAdvertiseCampaign.objects.prefetch_related(country_prefetch,
  354. device_type_prefetch)
  355. device_info_qs = Device_User.objects.filter(userID=user_id).values("region_country").first()
  356. country_id = device_info_qs.get('region_country')
  357. if country_id != 0:
  358. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(country__id=country_id, status=1)
  359. else:
  360. app_advertise_campaign_qs = app_advertise_campaign_qs.filter(status=1, unknown_country=1)
  361. # 返回 广告名称、广告类型、开始时间、结束时间、广告图片、活动链接
  362. campaigns_list = []
  363. for campaign in app_advertise_campaign_qs:
  364. # 时区处理
  365. campaigns_start_date = (datetime.utcfromtimestamp(campaign.campaign_start_date)
  366. .replace(tzinfo=pytz.utc).astimezone(timezone).strftime('%Y-%m-%d'))
  367. campaign_end_date = (datetime.utcfromtimestamp(campaign.campaign_end_date)
  368. .replace(tzinfo=pytz.utc).astimezone(timezone).strftime('%Y-%m-%d'))
  369. campaign_start_firstday = (
  370. datetime.utcfromtimestamp(campaign.campaign_start_date + campaign.campaign_show_stime)
  371. .replace(tzinfo=pytz.utc).astimezone(timezone).strftime('%Y-%m-%d %H:%M'))
  372. campaign_end_firstday = (
  373. datetime.utcfromtimestamp(campaign.campaign_start_date + campaign.campaign_show_etime)
  374. .replace(tzinfo=pytz.utc).astimezone(timezone).strftime('%Y-%m-%d %H:%M'))
  375. campaigns_list.append({
  376. 'campaign_id': campaign.id,
  377. 'image_url': s3_url + campaign.image_url,
  378. 'campaign_url': campaign.campaign_url,
  379. 'campaign_name': campaign.campaign_name,
  380. 'campaign_type': campaign.campaign_type,
  381. 'campaign_date': f"{campaigns_start_date},{campaign_end_date}",
  382. 'campaign_start_oneday': campaign_start_firstday,
  383. 'campaign_end_oneday': campaign_end_firstday,
  384. 'device_types': [device.type for device in campaign.device_type_list],
  385. })
  386. return response.json(0, {
  387. 'campaigns': campaigns_list
  388. })
  389. except Exception as e:
  390. return response.json(173)
  391. def record_user_behavior(cls, request_dict):
  392. """
  393. 记录用户行为
  394. @param request_dict: 请求参数
  395. @param response: 响应对象
  396. @return: 响应对象
  397. """
  398. language = request_dict.get('language', 'en')
  399. status = request_dict.get('status', None) # 1.未跳过 2.已跳过 3.点击广告
  400. campaign_id = request_dict.get('campaign_id', None)
  401. token = request_dict.get('token', None)
  402. response = ResponseObject(language)
  403. if not token:
  404. return response.json(444)
  405. token = TokenObject(token)
  406. if token.code != 0:
  407. return response.json(token.code)
  408. user_id = token.userID
  409. if not all([status, campaign_id]):
  410. return response.json(444)
  411. # 当日时间戳区间获取
  412. current_date = datetime.now().date()
  413. start_of_day = datetime.combine(current_date, Time.min)
  414. end_of_day = datetime.combine(current_date, Time.max)
  415. start_timestamp = int(start_of_day.timestamp())
  416. end_timestamp = int(end_of_day.timestamp())
  417. try:
  418. # 筛选符合条件的记录
  419. open_screen_campaigns = OpenScreenCampaign.objects.filter(
  420. user_id=user_id,
  421. create_time__gt=start_timestamp,
  422. create_time__lt=end_timestamp,
  423. status=0,
  424. )
  425. # 检查是否存在记录
  426. if not open_screen_campaigns.exists():
  427. # 如果不存在,则创建新记录
  428. OpenScreenCampaign.objects.create(
  429. user_id=user_id,
  430. status=status,
  431. campaign_id_id=campaign_id,
  432. create_time=int(time.time()),
  433. update_time=int(time.time())
  434. )
  435. else:
  436. # 如果存在,则更新最新的记录
  437. latest_campaign = open_screen_campaigns.latest("create_time")
  438. latest_campaign.status = status
  439. latest_campaign.campaign_id_id = campaign_id
  440. latest_campaign.update_time = int(time.time())
  441. latest_campaign.save()
  442. except Exception as e:
  443. return response.json(177, {'error': '更新错误'})
  444. return response.json(0)
  445. def get_user_behavior_log(self, request_dict, response):
  446. status = request_dict.get('status', None)
  447. user_id = request_dict.get('user_id', None)
  448. behavior_stime = request_dict.get('start_time', None)
  449. behavior_etime = request_dict.get('end_time', None)
  450. page = request_dict.get('page', 1) # 默认为第一页
  451. page_size = request_dict.get('page_size', 10) # 默认每页显示10条记录
  452. behavior_log_list = []
  453. open_screen_campaigns = OpenScreenCampaign.objects.all()
  454. if user_id is not None:
  455. open_screen_campaigns = open_screen_campaigns.filter(user_id=user_id)
  456. if status is not None:
  457. open_screen_campaigns = open_screen_campaigns.filter(status=status)
  458. # 时间过滤
  459. if behavior_stime is not None and behavior_etime is not None:
  460. open_screen_campaigns = open_screen_campaigns.filter(update_time__range=[behavior_stime, behavior_etime])
  461. elif behavior_stime is not None:
  462. open_screen_campaigns = open_screen_campaigns.filter(update_time__gte=behavior_stime)
  463. elif behavior_etime is not None:
  464. open_screen_campaigns = open_screen_campaigns.filter(update_time__lte=behavior_etime)
  465. if not open_screen_campaigns.exists():
  466. return response.json(0, {"behavior_log_list": [], "total": 0})
  467. # 分页
  468. open_screen_campaigns = open_screen_campaigns.order_by('id')
  469. paginator = Paginator(open_screen_campaigns, page_size)
  470. open_screen_campaigns_page = paginator.page(page)
  471. for campaign in open_screen_campaigns_page:
  472. campaign_name = campaign.campaign_id.campaign_name if campaign.campaign_id else '广告不存在'
  473. behavior_log_list.append({
  474. "campaign_name": campaign_name,
  475. "user_id": campaign.user_id,
  476. "status": campaign.status,
  477. "behavior_time": campaign.update_time
  478. })
  479. return response.json(0, {"behavior_log_list": behavior_log_list,
  480. "total": paginator.count})
  481. def get_country_list(self, response):
  482. try:
  483. if SERVER_TYPE == 'Ansjer.us_config.formal_settings':
  484. region_api = 'https://www.dvema.com/'
  485. elif SERVER_TYPE == 'Ansjer.eur_config.formal_settings':
  486. region_api = 'https://api.zositeche.com/'
  487. elif SERVER_TYPE == 'Ansjer.cn_config.formal_settings':
  488. region_api = 'https://www.zositechc.cn/'
  489. else:
  490. region_api= 'https://test.zositechc.cn/'
  491. country_qs = CountryModel.objects.filter(region__api=region_api).values('country_name')
  492. if not country_qs.exists():
  493. return response.json(173)
  494. country_list = []
  495. for country in country_qs:
  496. country_list.append(country['country_name'])
  497. return response.json(0, {'list': country_list})
  498. except Exception as e:
  499. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))