فهرست منبع

添加代理商角色,绑定uid同步设备激活状态

zhangdongming 2 ماه پیش
والد
کامیت
c72c9ce8f3

+ 85 - 3
AdminController/CloudServiceManage/AgentDeviceController.py

@@ -18,11 +18,13 @@ import traceback
 import threading
 
 from django.db import transaction
+from django.db.models import Q
 from django.http import QueryDict
 from django.views import View
 from django.core.paginator import Paginator
 
-from AgentModel.models import AgentCustomerInfo, AgentDeviceOrder, AgentDevice, AgentCloudServicePackage
+from AgentModel.models import AgentCustomerInfo, AgentDeviceOrder, AgentDevice, AgentCloudServicePackage, CustomUIDPool, \
+    DeviceCustomUID
 from Model.models import DeviceTypeModel
 
 from Object.ResponseObject import ResponseObject
@@ -75,6 +77,8 @@ class AgentDeviceView(View):
                 return self.get_agent_device_order(userID, request_dict, response)
             elif operation == 'batchBandDevice':
                 return self.batch_band_device(userID, request, request_dict, response)
+            elif operation == 'customUidBind':
+                return self.custom_uid_bindings(request_dict, response)
             else:
                 return response.json(444, 'operation')
 
@@ -357,13 +361,91 @@ class AgentDeviceView(View):
             device_info = AgentDevice.objects.filter(serial_number=serial_number)
             if not device_info.exists():
                 return
+            LOGGER.info('同步更新设备激活状态serial:{},type:{}'.format(serial_number, bind_type))
             n_time = int(time.time())
             if bind_type == 1:
                 # 绑定设备
-                device_info.update(status=1, updated_time=n_time)
+                device_info.update(status=1, updated_time=n_time, at_time=n_time)
             elif bind_type == 2:
                 # 解绑设备
                 device_info.update(status=0, updated_time=n_time)
         except Exception as e:
-            LOGGER.info('*****AgentDeviceView.device_binding_or_unbinding:errLine:{}, errMsg:{}'
+            LOGGER.error('*****AgentDeviceView.device_binding_or_unbinding:errLine:{}, errMsg:{}'
                         .format(e.__traceback__.tb_lineno, repr(e)))
+
+    @classmethod
+    def custom_uid_bindings(cls, request_dict, response):
+        try:
+            uid = request_dict.get('uid', None)
+            customer_name = request_dict.get('customer_name', None)
+            status = request_dict.get('status', None)
+            device_mac = request_dict.get('device_mac', None)
+            page = int(request_dict.get('page', 1))
+            page_size = int(request_dict.get('pageSize', 20))
+
+            filters = Q()
+            if uid:
+                filters &= Q(uid__icontains=uid)
+            if customer_name:
+                filters &= Q(customer_name__icontains=customer_name)
+            if status is not None:
+                filters &= Q(status=status)
+
+            if device_mac:
+                bound_uids = DeviceCustomUID.objects.filter(
+                    device_mac__icontains=device_mac
+                ).values_list('uid', flat=True)
+                filters &= Q(uid__in=list(bound_uids))
+
+            custom_uid_pool_qs = CustomUIDPool.objects.filter(filters).order_by('-updated_time')
+            paginator = Paginator(custom_uid_pool_qs, page_size)
+            page_obj = paginator.page(page)
+
+            uid_list = [obj.uid for obj in page_obj]
+            bindings = DeviceCustomUID.objects.filter(uid__in=uid_list)
+
+            # 构建 uid -> 多条绑定记录 map
+            binding_map = {}
+            for b in bindings:
+                binding_map.setdefault(b.uid, []).append(b)
+
+            # 构建结果列表
+            result_list = []
+            for obj in page_obj:
+                uid_bindings = binding_map.get(obj.uid, [])
+                if uid_bindings:
+                    for bind in uid_bindings:
+                        result_list.append({
+                            'id': obj.id,
+                            'uid': obj.uid,
+                            'type': obj.type,
+                            'customer_name': obj.customer_name,
+                            'uid_status': obj.status,
+                            'created_time': obj.created_time,
+                            'updated_time': obj.updated_time,
+                            'device_mac': bind.device_mac,
+                            'device_status': bind.status,
+                            'bind_time': bind.created_time,
+                        })
+                else:
+                    result_list.append({
+                        'id': obj.id,
+                        'uid': obj.uid,
+                        'type': obj.type,
+                        'customer_name': obj.customer_name,
+                        'uid_status': obj.status,
+                        'created_time': obj.created_time,
+                        'updated_time': obj.updated_time,
+                        'device_mac': '',
+                        'device_status': None,
+                        'bind_time': None,
+                    })
+
+            return response.json(0, {
+                'list': result_list,
+                'total': paginator.count
+            })
+
+        except Exception as e:
+            print(e)
+            return response.json(500, f'error_line:{e.__traceback__.tb_lineno}, error_msg:{repr(e)}')

+ 31 - 2
AdminController/UserManageController.py

@@ -11,6 +11,7 @@ from django.utils.timezone import utc
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
 
+from AgentModel.models import AgentCustomerInfo, AgentCustomerCard, AgentCloudServicePackage, AgentCustomerPackage
 from Ansjer.config import SERVER_DOMAIN, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, \
     AWS_SECRET_ACCESS_KEY, AWS_SES_ACCESS_REGION, DETECT_PUSH_DOMAINS
 from Controller.CheckUserData import DataValid, RandomStr
@@ -422,6 +423,14 @@ class UserManagement(View):
         isEdit = request_dict.get('isEdit', None)
         password_version = request_dict.get('pwdVersion', 'V1')
 
+        # 添加代理商字段
+        isAgent = request_dict.get('isAgent', None)
+        agent_company_name = request_dict.get('agent_company_name', None)
+        card_name = request_dict.get('card_name', None)
+        card_no = request_dict.get('card_no', "")
+        card_address = request_dict.get('card_address', "")
+        phone = request_dict.get('phone', "")
+
         # 校验用户名,邮箱,密码是否符合规则
         dataValid = DataValid()
         if not username or not dataValid.name_validate(username):
@@ -452,25 +461,45 @@ class UserManagement(View):
                     role_qs = Role.objects.filter(roleName=roleName)  # 账号角色
                     device_user_qs[0].role.set(role_qs)
             else:  # 添加用户
+                if isAgent and not all([agent_company_name, card_name, phone]):
+                    return response.json(444)
                 # 查询邮箱是否已注册
                 if Device_User.objects.filter(userEmail=userEmail).exists():
                     return response.json(103)
                 role_qs = Role.objects.filter(roleName=roleName)  # 账号角色
                 # 创建用户
+                new_userID = CommonService.getUserID(μs=False, setOTAID=True)
                 user_data = {
                     "username": username,
                     "NickName": username,
                     "userEmail": userEmail,
                     "password": password,
-                    "userID": CommonService.getUserID(μs=False, setOTAID=True),
+                    "userID": new_userID,
+                    "phone": phone,
                     "is_active": True,
                     "user_isValid": True,
                 }
                 Device_User.objects.create(**user_data).role.set(role_qs)
+                if isAgent:
+                    agent_customer_info = AgentCustomerInfo.objects.create(user_id=new_userID, company_name=agent_company_name, status=1, created_time=int(time.time()),
+                                                     updated_time=int(time.time()), created_by=userID, updated_by=userID)
+                    AgentCustomerCard.objects.create(ac_id=agent_customer_info.id, name=card_name, card_no=card_no, card_address=card_address, status=1,
+                                                     created_time=int(time.time()), updated_time=int(time.time()), created_by=userID, updated_by=userID)
+                    # 绑定所有代理套餐
+                    all_service_packages = AgentCloudServicePackage.objects.filter(status=1)
+                    for package in all_service_packages:
+                        AgentCustomerPackage.objects.create(
+                            ac_id=agent_customer_info.id,
+                            cs_id=package.id,
+                            created_time=int(time.time()),
+                            updated_time=int(time.time()),
+                            created_by=userID,  # 假设 userID 是创建这个记录的用户ID
+                            updated_by=userID
+                        )
             return response.json(0)
         except Exception as e:
             print(e)
-            return response.json(500, repr(e))
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     def doDelete(self, request_dict, response):
         userID = request_dict.get('userID', '')

+ 12 - 0
Controller/SerialNumberController.py

@@ -29,6 +29,8 @@ from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.VodHlsService import SplitVodHlsObject
 
+from AdminController.CloudServiceManage.AgentDeviceController import AgentDeviceView
+
 
 class SerialNumberView(View):
 
@@ -402,6 +404,16 @@ class SerialNumberView(View):
             except Exception as e:
                 LOGGER.info('发送提醒邮件异常: error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+        try:
+            # 异步调用客户代理平台同步序列号绑定UID
+            serial_number = serial + '11A'
+            agent_thread = threading.Thread(target=AgentDeviceView.device_binding_or_unbinding,
+                                            args=(serial_number, 1))
+            agent_thread.start()
+        except Exception as e:
+            LOGGER.error('异步更新定制客户序列号状态一次: error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno,
+                                                                                             repr(e)))
+
     @staticmethod
     def sync_serial_data_and_log(request, company_serial_id, serial, now_time):
         """