Переглянути джерело

根据ip解析或用户设置返回状态

linhaohong 10 місяців тому
батько
коміт
6e9a33e10e
2 змінених файлів з 28 додано та 7 видалено
  1. 14 7
      Controller/AppSetController.py
  2. 14 0
      Model/models.py

+ 14 - 7
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
@@ -48,7 +48,7 @@ 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)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -279,9 +279,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,15 +304,22 @@ 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(userID=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 = user_set_status_qs.objects.filter(id=restriction.id).first()
+                # 用户控制
+                if user_set:
+                    response_data[restriction.statusName] = user_set.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)):
+                    # 返回值定义具体看表的content字段
                     response_data[restriction.statusName] = 1
                     response_data[restriction.statusName] = 1
 
 
             LOGGER.info(f"请求ip地址为 {ip}, 解析为 {country_code}, {region}, {city}, {district}")
             LOGGER.info(f"请求ip地址为 {ip}, 解析为 {country_code}, {region}, {city}, {district}")

+ 14 - 0
Model/models.py

@@ -5111,6 +5111,7 @@ class RegionRestriction(models.Model):
     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
@@ -5298,3 +5299,16 @@ 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='更新时间')
+
+    class Meta:
+        db_table = 'user_set_status'
+        verbose_name = '用户设置状态'
+