Browse Source

优化shopify代码、APP开屏广告用户控制开关

linhaohong 10 months ago
parent
commit
27cf4c7300
3 changed files with 74 additions and 11 deletions
  1. 55 8
      Controller/AppSetController.py
  2. 3 3
      Controller/ShopifyController.py
  3. 16 0
      Model/models.py

+ 55 - 8
Controller/AppSetController.py

@@ -7,7 +7,7 @@ from django.views.generic.base import View
 
 
 from Ansjer.config import SERVER_TYPE
 from Ansjer.config import SERVER_TYPE
 from Model.models import AppSetModel, PromotionRuleModel, PopupsConfig, RedDotsConfig, Device_Info, UidSetModel, \
 from Model.models import AppSetModel, PromotionRuleModel, PopupsConfig, RedDotsConfig, Device_Info, UidSetModel, \
-    UserOperationLog, Order_Model, IPAddr, RegionRestriction
+    UserOperationLog, Order_Model, IPAddr, RegionRestriction, UserSetStatus
 from Object.IPWeatherObject import IPQuery
 from Object.IPWeatherObject import IPQuery
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
@@ -35,6 +35,8 @@ class AppSetView(View):
         if operation == 'query':
         if operation == 'query':
             return self.do_query(request_dict, response)
             return self.do_query(request_dict, response)
         token = request_dict.get('token', None)
         token = request_dict.get('token', None)
+        if not token:
+            token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
         tko = TokenObject(token)
         tko = TokenObject(token)
         if tko.code != 0:
         if tko.code != 0:
             return response.json(tko.code)
             return response.json(tko.code)
@@ -48,7 +50,9 @@ class AppSetView(View):
         elif operation == 'admin_update':
         elif operation == 'admin_update':
             return self.do_admin_update(user_id, request_dict, response)
             return self.do_admin_update(user_id, request_dict, response)
         elif operation == 'statusByIp':
         elif operation == 'statusByIp':
-            return self.status_by_ip(request, response)
+            return self.status_by_ip(user_id, request, response)
+        elif operation == 'userSetAdStatus':
+            return self.user_set_ad_status(user_id, request_dict, response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -279,9 +283,9 @@ class AppSetView(View):
         return response.json(0)
         return response.json(0)
 
 
     @staticmethod
     @staticmethod
-    def status_by_ip(request, response):
+    def status_by_ip(user_id, request, response):
         """
         """
-        根据ip解析地址返回状态
+        根据ip解析或用户设置返回状态
         """
         """
         try:
         try:
             ip = CommonService.get_ip_address(request)
             ip = CommonService.get_ip_address(request)
@@ -304,16 +308,30 @@ class AppSetView(View):
             city = ip_info['city']
             city = ip_info['city']
             district = ip_info['district']
             district = ip_info['district']
 
 
-            restrictions = RegionRestriction.objects.all()
+            restrictions_qs = RegionRestriction.objects.all()
+            user_set_status_qs = UserSetStatus.objects.filter(user_id=user_id)
             response_data = {}
             response_data = {}
 
 
-            for restriction in restrictions:
+            for restriction in restrictions_qs:
                 response_data[restriction.statusName] = 0
                 response_data[restriction.statusName] = 0
-                if ((not restriction.country_code or country_code in restriction.country_code) and
+                user_set_qs = user_set_status_qs.filter(region_restriction_id=restriction.id)
+                # 用户控制
+                if user_set_qs.exists():
+                    if restriction.statusName == "splashAdStatus":
+                        if user_set_qs[0].end_time > int(time.time()):
+                            response_data[restriction.statusName] = user_set_qs[0].status
+                        else:
+                            response_data[restriction.statusName] = restriction.default_status
+                    else:
+                        response_data[restriction.statusName] = user_set_qs[0].status
+
+                # 地区控制
+                elif ((not restriction.country_code or country_code in restriction.country_code) and
                         (not restriction.region or region in restriction.region) and
                         (not restriction.region or region in restriction.region) and
                         (not restriction.city or city in restriction.city) and
                         (not restriction.city or city in restriction.city) and
                         (not restriction.district or district in restriction.district)):
                         (not restriction.district or district in restriction.district)):
-                    response_data[restriction.statusName] = 1
+                    # 返回值定义具体看表的content字段
+                    response_data[restriction.statusName] = restriction.default_status
 
 
             LOGGER.info(f"请求ip地址为 {ip}, 解析为 {country_code}, {region}, {city}, {district}")
             LOGGER.info(f"请求ip地址为 {ip}, 解析为 {country_code}, {region}, {city}, {district}")
             return response.json(0, response_data)
             return response.json(0, response_data)
@@ -321,3 +339,32 @@ class AppSetView(View):
         except Exception as e:
         except Exception as e:
             LOGGER.info('根据ip解析地址返回状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             LOGGER.info('根据ip解析地址返回状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             return response.json(500)
             return response.json(500)
+
+    @staticmethod
+    def user_set_ad_status(user_id, request_dict, response):
+        """
+        用户设置广告状态
+        """
+        try:
+            status_name = request_dict.get("statusName", None)
+            value = request_dict.get("value", None)
+            if not all([status_name, value]):
+                return response.json(444)
+            value = int(value)
+            now_time = int(time.time())
+            end_time = now_time + 15 * 24 * 60 * 60
+            user_set_status_qs = UserSetStatus.objects.filter(user_id=user_id)
+            region_restriction_qs = RegionRestriction.objects.filter(statusName=status_name)
+            if not region_restriction_qs.exists():
+                return response.json(173)
+            if not user_set_status_qs.exists():
+                UserSetStatus.objects.create(user_id=user_id, status=value, created_time=now_time,
+                                             updated_time=now_time, end_time=end_time,
+                                             region_restriction_id=region_restriction_qs[0].id)
+            else:
+                user_set_status_qs.update(status=value, updated_time=now_time, end_time=end_time,
+                                          region_restriction_id=region_restriction_qs[0].id)
+            return response.json(0)
+        except Exception as e:
+            LOGGER.info('设置用户广告状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)

+ 3 - 3
Controller/ShopifyController.py

@@ -85,7 +85,7 @@ class ShopifyView(View):
 
 
     def validation(self, request, request_dict, operation):
     def validation(self, request, request_dict, operation):
         language = request_dict.get('language', 'cn')
         language = request_dict.get('language', 'cn')
-        response = ResponseObject(language)
+        response = ResponseObject(language, "pc")
         if operation == 'shopifyLogin':
         if operation == 'shopifyLogin':
             return self.shopify_login(request_dict, response)
             return self.shopify_login(request_dict, response)
         elif operation == 'shopifyRegister':
         elif operation == 'shopifyRegister':
@@ -281,8 +281,8 @@ class ShopifyView(View):
             try:
             try:
                 response = requests.get(url=url, params=params)
                 response = requests.get(url=url, params=params)
                 response.raise_for_status()  # Raise an error for bad responses
                 response.raise_for_status()  # Raise an error for bad responses
-                customer_country = response.json().get("result", None)
-                return region, customer_country if not all(customer_country) else None
+                customer_country = response.json().get("data", None)
+                return region, customer_country if customer_country else None
             except requests.RequestException:
             except requests.RequestException:
                 return region, None
                 return region, None
 
 

+ 16 - 0
Model/models.py

@@ -4936,10 +4936,12 @@ class SerialNumberCheckLog(models.Model):
 class RegionRestriction(models.Model):
 class RegionRestriction(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     statusName = models.CharField(max_length=255, unique=True)
     statusName = models.CharField(max_length=255, unique=True)
+    default_status = models.IntegerField(default=0, verbose_name='默认状态')
     country_code = models.JSONField(default=list, verbose_name='限制国家代码')
     country_code = models.JSONField(default=list, verbose_name='限制国家代码')
     region = models.JSONField(default=list, verbose_name='限制省/州')
     region = models.JSONField(default=list, verbose_name='限制省/州')
     city = models.JSONField(default=list, verbose_name='限制市')
     city = models.JSONField(default=list, verbose_name='限制市')
     district = models.JSONField(default=list, verbose_name='限制区')
     district = models.JSONField(default=list, verbose_name='限制区')
+    content = models.TextField(default='', verbose_name='备注')
 
 
     def __str__(self):
     def __str__(self):
         return self.statusName
         return self.statusName
@@ -5125,3 +5127,17 @@ class SerialUnbindUID(models.Model):
         db_table = 'unbound_serial'
         db_table = 'unbound_serial'
         verbose_name = '序列号解绑uid'
         verbose_name = '序列号解绑uid'
 
 
+
+class UserSetStatus(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    user_id = models.CharField(default='', max_length=32, verbose_name='关联用户id', db_index=True)
+    region_restriction_id = models.ForeignKey(RegionRestriction, blank=True, to_field='id', null=True,
+                                              on_delete=models.SET_NULL, verbose_name='关联地区筛选状态表')
+    status = models.IntegerField(default=0, verbose_name='状态')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+    end_time = models.IntegerField(default=0, verbose_name='结束时间')
+
+    class Meta:
+        db_table = 'user_set_status'
+        verbose_name = '用户设置状态'