Selaa lähdekoodia

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

linhaohong 10 kuukautta sitten
vanhempi
commit
27cf4c7300
3 muutettua tiedostoa jossa 74 lisäystä ja 11 poistoa
  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 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.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
@@ -35,6 +35,8 @@ class AppSetView(View):
         if operation == 'query':
             return self.do_query(request_dict, response)
         token = request_dict.get('token', None)
+        if not token:
+            token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
         tko = TokenObject(token)
         if tko.code != 0:
             return response.json(tko.code)
@@ -48,7 +50,9 @@ class AppSetView(View):
         elif operation == 'admin_update':
             return self.do_admin_update(user_id, request_dict, response)
         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:
             return response.json(414)
 
@@ -279,9 +283,9 @@ class AppSetView(View):
         return response.json(0)
 
     @staticmethod
-    def status_by_ip(request, response):
+    def status_by_ip(user_id, request, response):
         """
-        根据ip解析地址返回状态
+        根据ip解析或用户设置返回状态
         """
         try:
             ip = CommonService.get_ip_address(request)
@@ -304,16 +308,30 @@ class AppSetView(View):
             city = ip_info['city']
             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 = {}
 
-            for restriction in restrictions:
+            for restriction in restrictions_qs:
                 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.city or city in restriction.city) and
                         (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}")
             return response.json(0, response_data)
@@ -321,3 +339,32 @@ class AppSetView(View):
         except Exception as e:
             LOGGER.info('根据ip解析地址返回状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
             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):
         language = request_dict.get('language', 'cn')
-        response = ResponseObject(language)
+        response = ResponseObject(language, "pc")
         if operation == 'shopifyLogin':
             return self.shopify_login(request_dict, response)
         elif operation == 'shopifyRegister':
@@ -281,8 +281,8 @@ class ShopifyView(View):
             try:
                 response = requests.get(url=url, params=params)
                 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:
                 return region, None
 

+ 16 - 0
Model/models.py

@@ -4936,10 +4936,12 @@ class SerialNumberCheckLog(models.Model):
 class RegionRestriction(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     statusName = models.CharField(max_length=255, unique=True)
+    default_status = models.IntegerField(default=0, verbose_name='默认状态')
     country_code = models.JSONField(default=list, verbose_name='限制国家代码')
     region = models.JSONField(default=list, verbose_name='限制省/州')
     city = models.JSONField(default=list, verbose_name='限制市')
     district = models.JSONField(default=list, verbose_name='限制区')
+    content = models.TextField(default='', verbose_name='备注')
 
     def __str__(self):
         return self.statusName
@@ -5125,3 +5127,17 @@ class SerialUnbindUID(models.Model):
         db_table = 'unbound_serial'
         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 = '用户设置状态'