Browse Source

Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into linhaohong

linhaohong 1 year ago
parent
commit
e884f9d02a
4 changed files with 243 additions and 10 deletions
  1. 109 0
      AdminController/EvaluationActivityController.py
  2. 4 1
      Ansjer/urls.py
  3. 73 4
      Controller/shareUserPermission.py
  4. 57 5
      Model/models.py

+ 109 - 0
AdminController/EvaluationActivityController.py

@@ -0,0 +1,109 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: AnsjerFormal
+@software: PyCharm
+@DATE: 2024年7月29日15:51:04
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+"""
+import time
+
+from django.views.generic.base import View
+from Model.models import FreeEvaluationActivity, ActivityTime, ActivityUser
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
+
+
+class EvaluationActivityView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language, 'pc')
+        tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
+        if tko.code != 0:
+            return response.json(tko.code)
+        response.lang = tko.lang
+        user_id = tko.userID
+        if operation == 'getActivity':
+            return self.get_activity(user_id, request_dict, response)
+        elif operation == 'addActivityUser':
+            return self.add_activity_user(user_id, request_dict, response)
+        else:
+            return response.json(404)
+
+    @staticmethod
+    def get_activity(user_id, request_dict, response):
+        try:
+            now_time = int(time.time())
+            activity_qs = FreeEvaluationActivity.objects.filter(is_show=1).values('activity_name', 'carousel_image_url',
+                                                                                  'details_image_url', 'issue', 'id',
+                                                                                  'product_number', 'original_price')
+            if activity_qs.exists():
+                activity = activity_qs[0]
+                time_qs = ActivityTime.objects.filter(activity_id=activity['id']).values('node_content', 'start_time',
+                                                                                         'end_time').order_by('sort')
+                activity['activity_start_time'] = time_qs.first()['start_time']
+                activity['activity_end_time'] = time_qs.last()['end_time']
+                activity['activity_process'] = list(time_qs)
+                user_qs = ActivityUser.objects.filter(activity_id=activity['id'])
+                if user_qs.exists():
+                    user = user_qs.filter(user_id=user_id)
+                    if user.exists():
+                        activity['activity_status'] = 2  # 1:可报名;2:已报名;3:报名截止;4:活动结束
+                    else:
+                        activity['activity_status'] = 1
+                    user_qs = user_qs.filter(is_selected=1).values('user_name', 'phone')
+                    activity['activity_user'] = list(user_qs)
+                else:
+                    activity['activity_status'] = 1
+                    activity['activity_user'] = []
+                if now_time > time_qs.first()['end_time']:
+                    activity['activity_status'] = 3
+                if now_time > time_qs.last()['end_time']:
+                    activity['activity_status'] = 4
+                return response.json(0, activity)
+            else:
+                return response.json(0, {})
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def add_activity_user(user_id, request_dict, response):
+        activity_id = request_dict.get('activity_id', None)
+        user_name = request_dict.get('user_name', None)
+        phone = request_dict.get('phone', None)
+        address = request_dict.get('address', None)
+        sex = request_dict.get('sex', None)
+        age = request_dict.get('age', None)
+        usage_environment = request_dict.get('usage_environment', None)
+        is_reports = request_dict.get('is_reports', None)
+
+        if not all([activity_id, user_name, phone, address, sex, age, usage_environment, is_reports]):
+            return response.json(404)
+        now_time = int(time.time())
+        try:
+            user = ActivityUser.objects.filter(user_id=user_id)
+            if user.exists():
+                user.update(activity_id=activity_id, phone=phone, address=address, sex=sex, user_name=user_name,
+                            age=age, usage_environment=usage_environment, is_reports=is_reports,
+                            update_time=now_time)
+            else:
+                ActivityUser.objects.create(activity_id=activity_id, user_id=user_id, phone=phone, address=address,
+                                            sex=sex, age=age, usage_environment=usage_environment, user_name=user_name,
+                                            is_reports=is_reports, created_time=now_time, update_time=now_time)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 4 - 1
Ansjer/urls.py

@@ -5,7 +5,7 @@ from django.urls import re_path
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
     AiServeController, SurveysManageController, SerialManageController, IcloudManagementController, CampaignController, \
     AiServeController, SurveysManageController, SerialManageController, IcloudManagementController, CampaignController, \
-    MessageMangementController
+    MessageMangementController, EvaluationActivityController
 from AdminController.CloudServiceManage import AgentDeviceController, AgentCustomerController, AgentOrderController
 from AdminController.CloudServiceManage import AgentDeviceController, AgentCustomerController, AgentOrderController
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
     Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
     Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
@@ -63,6 +63,7 @@ urlpatterns = [
     re_path('accounts', AdminManage.search_user_by_content),  # 多条件搜索用户信息admin
     re_path('accounts', AdminManage.search_user_by_content),  # 多条件搜索用户信息admin
     re_path(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view()),
     re_path(r'^account/shareUserEquipment$', shareUserPermission.shareUserEquipmentView.as_view()),
     re_path(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view()),
     re_path(r'^account/unsharedUserEquipment$', shareUserPermission.unsharedUserEquipmentView.as_view()),
+    re_path(r'^equipment/sharePermission/(?P<operation>.*)$', shareUserPermission.SharePermissionsView.as_view()),
     re_path(r'^response/success$', UserManger.success),
     re_path(r'^response/success$', UserManger.success),
     re_path(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface),
     re_path(r'^equipment/queryUserEquipment$', EquipmentManager.queryUserEquipmentInterface),
     re_path(r'^equipment/addNewUserEquipment$', EquipmentManager.addNewUserEquipmentInterface),
     re_path(r'^equipment/addNewUserEquipment$', EquipmentManager.addNewUserEquipmentInterface),
@@ -320,6 +321,8 @@ urlpatterns = [
     re_path('campaign/(?P<operation>.*)', CampaignController.CampaignView.as_view()),
     re_path('campaign/(?P<operation>.*)', CampaignController.CampaignView.as_view()),
     # 查询消息推送模块
     # 查询消息推送模块
     re_path('messageManagement/(?P<operation>.*)', MessageMangementController.MassageView.as_view()),
     re_path('messageManagement/(?P<operation>.*)', MessageMangementController.MassageView.as_view()),
+    # 新品体验官
+    re_path('activityManagement/(?P<operation>.*)', EvaluationActivityController.EvaluationActivityView.as_view()),
     # 后台界面接口 -------------------------------------------------------------------------------------------------------
     # 后台界面接口 -------------------------------------------------------------------------------------------------------
 
 
     # 定时任务接口
     # 定时任务接口

+ 73 - 4
Controller/shareUserPermission.py

@@ -1,11 +1,13 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import time
+
 from django.core import serializers
 from django.core import serializers
 import traceback, simplejson as json
 import traceback, simplejson as json
 from django.views.generic.base import View
 from django.views.generic.base import View
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
-from Model.models import Device_User, Device_Info, Role, UserExModel
+from Model.models import Device_User, Device_Info, Role, UserExModel, DeviceUserPermissions, DeviceSharePermission
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
@@ -166,6 +168,7 @@ class shareUserEquipmentView(View):
         GuestID = queryDict.get('guestID', None)
         GuestID = queryDict.get('guestID', None)
         content = queryDict.get('content', None)
         content = queryDict.get('content', None)
         sharedAll = queryDict.get('sharedAll', False)
         sharedAll = queryDict.get('sharedAll', False)
+        permission_ids = queryDict.get('permissionIds', None)
 
 
         if sharedAll in ('1', '0'):
         if sharedAll in ('1', '0'):
             sharedAll = bool(int(sharedAll))
             sharedAll = bool(int(sharedAll))
@@ -183,18 +186,21 @@ class shareUserEquipmentView(View):
             return response.json(tko.code)
             return response.json(tko.code)
         MasterID = tko.userID
         MasterID = tko.userID
         if sharedAll and MasterID != None:
         if sharedAll and MasterID != None:
-            return self.shareUserSQL(MasterID, GuestID, True, response, args, kwargs)
+            return self.shareUserSQL(MasterID, GuestID, True, permission_ids, response, args, kwargs)
         if content != None and MasterID != None:
         if content != None and MasterID != None:
-            return self.shareUserSQL(MasterID, GuestID, False, response, args, content=content)
+            return self.shareUserSQL(MasterID, GuestID, False, permission_ids, response, args, content=content)
         else:
         else:
             return response.json(444, 'sharedAll or content')
             return response.json(444, 'sharedAll or content')
 
 
-    def shareUserSQL(self, MasterID, GuestID, sharedAll, response, *args, **kwargs):
+    def shareUserSQL(self, MasterID, GuestID, sharedAll, permission_ids, response, *args, **kwargs):
         Guest = Device_User.objects.filter(userID=GuestID).order_by('-data_joined')
         Guest = Device_User.objects.filter(userID=GuestID).order_by('-data_joined')
         Master = Device_Info.objects.filter(userID_id=MasterID).order_by('-data_joined')
         Master = Device_Info.objects.filter(userID_id=MasterID).order_by('-data_joined')
         if not Master or not Guest:
         if not Master or not Guest:
             return response.json(104)
             return response.json(104)
         querysetList = []
         querysetList = []
+        permission_list = []
+        p_ids = [int(val) for val in permission_ids.split(',')] if permission_ids else []
+        now_time = int(time.time())
         dictLen = 0
         dictLen = 0
         if sharedAll:
         if sharedAll:
             for equipment in Master:
             for equipment in Master:
@@ -214,6 +220,10 @@ class shareUserEquipmentView(View):
                     eqDict['userID_id'] = GuestID
                     eqDict['userID_id'] = GuestID
                     eqDict['id'] = CommonService.getUserID(getUser=False)
                     eqDict['id'] = CommonService.getUserID(getUser=False)
                     querysetList.append(Device_Info(**eqDict))
                     querysetList.append(Device_Info(**eqDict))
+                    for permission_id in p_ids:
+                        permission_list.append(DeviceUserPermissions(permission_id=permission_id, user_id=GuestID,
+                                                                     uid=eqDict.get('UID', None),
+                                                                     created_time=now_time))
         else:
         else:
             content = kwargs.get('content', None)
             content = kwargs.get('content', None)
             if content != None:
             if content != None:
@@ -237,6 +247,11 @@ class shareUserEquipmentView(View):
                             eqDict['userID_id'] = GuestID
                             eqDict['userID_id'] = GuestID
                             eqDict['id'] = CommonService.getUserID(getUser=False)
                             eqDict['id'] = CommonService.getUserID(getUser=False)
                             querysetList.append(Device_Info(**eqDict))
                             querysetList.append(Device_Info(**eqDict))
+                            for permission_id in p_ids:
+                                permission_list.append(DeviceUserPermissions(permission_id=permission_id,
+                                                                             user_id=GuestID,
+                                                                             uid=eqDict.get('UID', None),
+                                                                             created_time=now_time))
                     else:
                     else:
                         continue
                         continue
 
 
@@ -245,6 +260,7 @@ class shareUserEquipmentView(View):
         else:
         else:
             try:
             try:
                 Device_Info.objects.bulk_create(querysetList)
                 Device_Info.objects.bulk_create(querysetList)
+                DeviceUserPermissions.objects.bulk_create(permission_list)
             except Exception as e:
             except Exception as e:
                 errorInfo = traceback.format_exc()
                 errorInfo = traceback.format_exc()
                 print('添加数据库记录错误: %s' % errorInfo)
                 print('添加数据库记录错误: %s' % errorInfo)
@@ -335,6 +351,7 @@ class unsharedUserEquipmentView(View):
                         else:
                         else:
                             errorUID.append(uid)
                             errorUID.append(uid)
                             continue
                             continue
+                        DeviceUserPermissions.objects.filter(user_id=GuestID, uid=uid).delete()
                     except Exception as e:
                     except Exception as e:
                         errorInfo = traceback.format_exc()
                         errorInfo = traceback.format_exc()
                         print('查询数据库错误: %s' % errorInfo)
                         print('查询数据库错误: %s' % errorInfo)
@@ -350,3 +367,55 @@ class unsharedUserEquipmentView(View):
                         return response.json(173, {'removeCount': removeCount, 'error_UID': errorUID})
                         return response.json(173, {'removeCount': removeCount, 'error_UID': errorUID})
                     else:
                     else:
                         return response.json(0, {'removeCount': removeCount})
                         return response.json(0, {'removeCount': removeCount})
+
+
+class SharePermissionsView(View):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(SharePermissionsView, self).dispatch(*args, **kwargs)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request, request.GET, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request, request.POST, operation)
+
+    def validation(self, request, request_dict, operation):
+        lang = request_dict.get('lang', 'en')
+        response = ResponseObject(lang)
+        if operation == 'get-permission-list':  # 获取分享权限列表
+            return self.get_permission_list(request_dict, response)
+        else:
+            token = request_dict.get('token', None)
+            # 设备主键uid
+            tko = TokenObject(token)
+            if tko.code != 0:
+                return response.json(tko.code)
+            user_id = tko.userID
+            if operation == 'edit-user-permission':  # 获取用户设备分享权限
+                return self.edit_user_permission(user_id, request_dict, response)
+            else:
+                return response.json(404)
+
+    @staticmethod
+    def get_permission_list(request_dict, response):
+        permission_qs = DeviceSharePermission.objects.filter(share_type=2).values('id', 'code').order_by('sort')
+        return response.json(0, list(permission_qs))
+
+    @staticmethod
+    def edit_user_permission(user_id, request_dict, response):
+        uid = request_dict.get('uid', None)
+        permission_ids = request_dict.get('permissionIds', None)
+        if not all([uid, permission_ids]):
+            return response.json(444)
+        permission_ids_list = [int(val) for val in permission_ids.split(',')] if permission_ids else []
+        now_time = int(time.time())
+        DeviceUserPermissions.objects.filter(user_id=user_id, uid=uid).delete()
+        for permission_id in permission_ids_list:
+            DeviceUserPermissions.objects.create(permission_id=permission_id, user_id=user_id, uid=uid,
+                                                 created_time=now_time)
+        return response.json(0)

+ 57 - 5
Model/models.py

@@ -1881,7 +1881,8 @@ class Order_Model(models.Model):
     store_meal_name = models.CharField(default='', blank=True, max_length=64, verbose_name=u'关联套餐名')
     store_meal_name = models.CharField(default='', blank=True, max_length=64, verbose_name=u'关联套餐名')
     create_vod = models.SmallIntegerField(default=0, verbose_name='是否生成云存服务')  # 0:未生成,1:已生成
     create_vod = models.SmallIntegerField(default=0, verbose_name='是否生成云存服务')  # 0:未生成,1:已生成
     transaction_id = models.CharField(default='', blank=True, max_length=64, verbose_name=u'苹果内购transactionId')
     transaction_id = models.CharField(default='', blank=True, max_length=64, verbose_name=u'苹果内购transactionId')
-    original_transaction_id = models.CharField(default='', blank=True, max_length=64, verbose_name=u'苹果内购originalTransactionId')
+    original_transaction_id = models.CharField(default='', blank=True, max_length=64,
+                                               verbose_name=u'苹果内购originalTransactionId')
 
 
     def __str__(self):
     def __str__(self):
         return self.orderID
         return self.orderID
@@ -5120,10 +5121,10 @@ class InAppPurchasePackage(models.Model):
     subscription_group_id = models.CharField(default='', max_length=64, verbose_name='内购订阅组id')
     subscription_group_id = models.CharField(default='', max_length=64, verbose_name='内购订阅组id')
     subscription_group = models.CharField(default='', max_length=64, verbose_name='内购订阅组')
     subscription_group = models.CharField(default='', max_length=64, verbose_name='内购订阅组')
     product_id = models.CharField(default='', max_length=64, verbose_name='内购商品id')
     product_id = models.CharField(default='', max_length=64, verbose_name='内购商品id')
-    package_type = models.SmallIntegerField(default=0, verbose_name='套餐类型') # 0:非订阅, 1:订阅
+    package_type = models.SmallIntegerField(default=0, verbose_name='套餐类型')  # 0:非订阅, 1:订阅
     rank = models.ForeignKey(Store_Meal, blank=True, to_field='id', null=True, on_delete=models.SET_NULL,
     rank = models.ForeignKey(Store_Meal, blank=True, to_field='id', null=True, on_delete=models.SET_NULL,
                              verbose_name='关联云存套餐表')
                              verbose_name='关联云存套餐表')
-    is_ai = models.SmallIntegerField(default=0, verbose_name='是否支持ai') # 0:不支持, 1:支持
+    is_ai = models.SmallIntegerField(default=0, verbose_name='是否支持ai')  # 0:不支持, 1:支持
     created_time = models.IntegerField(verbose_name='创建时间', default=0)
     created_time = models.IntegerField(verbose_name='创建时间', default=0)
     update_time = models.IntegerField(verbose_name='更新时间', default=0)
     update_time = models.IntegerField(verbose_name='更新时间', default=0)
 
 
@@ -5138,11 +5139,62 @@ class DeviceApplePackage(models.Model):
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     uid = models.CharField(max_length=20, verbose_name='设备UID', db_index=True)
     package_id = models.ForeignKey(InAppPurchasePackage, blank=True, to_field='id', null=True,
     package_id = models.ForeignKey(InAppPurchasePackage, blank=True, to_field='id', null=True,
                                    on_delete=models.SET_NULL, verbose_name='关联苹果内购订阅套餐表')
                                    on_delete=models.SET_NULL, verbose_name='关联苹果内购订阅套餐表')
-    subscription_status = models.SmallIntegerField(default=0, verbose_name='订阅状态') # 0:未订阅, 1:订阅 2:订阅已过期 3:取消订阅
-    original_transaction_id = models.CharField(default='', blank=True, max_length=64, verbose_name=u'苹果内购originalTransactionId')
+    subscription_status = models.SmallIntegerField(default=0, verbose_name='订阅状态')  # 0:未订阅, 1:订阅 2:订阅已过期 3:取消订阅
+    original_transaction_id = models.CharField(default='', blank=True, max_length=64,
+                                               verbose_name=u'苹果内购originalTransactionId')
     created_time = models.IntegerField(verbose_name='创建时间', default=0)
     created_time = models.IntegerField(verbose_name='创建时间', default=0)
     update_time = models.IntegerField(verbose_name='更新时间', default=0)
     update_time = models.IntegerField(verbose_name='更新时间', default=0)
 
 
     class Meta:
     class Meta:
         db_table = 'device_apple_package'
         db_table = 'device_apple_package'
         verbose_name = '设备绑定内购套餐表'
         verbose_name = '设备绑定内购套餐表'
+
+
+class FreeEvaluationActivity(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    activity_name = models.CharField(default='', max_length=64, verbose_name='活动名称')
+    carousel_image_url = models.CharField(default='', max_length=64, verbose_name='轮播图地址')
+    details_image_url = models.CharField(default='', max_length=64, verbose_name='详情图地址')
+    issue = models.SmallIntegerField(default=0, verbose_name='活动期数')
+    product_number = models.SmallIntegerField(default=0, verbose_name='物品数量')
+    original_price = models.CharField(default='0', max_length=10, verbose_name='物品原价')
+    is_show = models.SmallIntegerField(default=0, verbose_name='是否展示')  # 0:不展示;1:展示
+    created_time = models.IntegerField(verbose_name='创建时间', default=0)
+    update_time = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        db_table = 'free_evaluation_activity'
+        verbose_name = '新品体验官'
+
+
+class ActivityTime(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    activity_id = models.IntegerField(default=0, verbose_name='关联活动id')
+    node_content = models.CharField(default='', max_length=10, verbose_name='节点内容')
+    start_time = models.IntegerField(verbose_name='开始时间', default=0)
+    end_time = models.IntegerField(verbose_name='结束时间', default=0)
+    sort = models.SmallIntegerField(verbose_name='排序', default=0)
+
+    class Meta:
+        db_table = 'activity_time'
+        verbose_name = '活动时间表'
+
+
+class ActivityUser(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    activity_id = models.IntegerField(default=0, verbose_name='关联活动id')
+    user_id = models.CharField(default='', max_length=32, verbose_name='关联用户id')
+    user_name = models.CharField(default='', max_length=15, verbose_name='用户名')
+    phone = models.CharField(default='', max_length=15, verbose_name='手机号')
+    address = models.CharField(default='', max_length=50, verbose_name='用户地址')
+    sex = models.SmallIntegerField(verbose_name='性别', default=0)  # 0:女;1:男
+    age = models.SmallIntegerField(verbose_name='年龄', default=0)
+    usage_environment = models.CharField(default='', max_length=50, verbose_name='使用环境')
+    is_reports = models.SmallIntegerField(verbose_name='是否输出过体验报告', default=0)  # 0:未输出;1:输出过
+    is_selected = models.SmallIntegerField(verbose_name='是否入选', default=0)  # 0:未入选;1:入选
+    created_time = models.IntegerField(verbose_name='创建时间', default=0)
+    update_time = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        db_table = 'activity_user'
+        verbose_name = '活动人员表'