Ver Fonte

Merge remote-tracking branch 'origin/master'

peng há 2 anos atrás
pai
commit
1dc938f90c

+ 13 - 71
AdminController/UnicomManageController.py

@@ -13,7 +13,7 @@ from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, UnicomComboOrd
 from Object.ResponseObject import ResponseObject
 
 
-class UnicomComboView(View):
+class UnicomManageControllerView(View):
 
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
@@ -37,9 +37,6 @@ class UnicomComboView(View):
         # 添加和编辑卡套餐
         elif operation == 'edit/combo':
             return self.edit_combo(request_dict, response)
-        # 获取卡用户信息
-        elif operation == 'get/user':
-            return self.get_user_combo(request_dict, response)
         # 获取/筛选设备套餐订单信息
         elif operation == 'order/info':
             return self.get_order_info(request_dict, response)
@@ -49,13 +46,13 @@ class UnicomComboView(View):
         # 删除卡套餐
         elif operation == 'dele/combo/info':
             return self.combo_order_info(request_dict, response)
-        # 筛选用户信息
+        # 获取/筛选用户信息
         elif operation == 'filter/user':
             return self.get_user_info(request_dict, response)
 
     def get_user_info(self, request_dict, response):
         """
-        筛选卡用户信息
+        获取/筛选卡用户信息
         @param request_dict:
         @param response:
         @return:
@@ -76,35 +73,27 @@ class UnicomComboView(View):
         line = int(pageSize)
 
         try:
-
-            unicom_device_qs = UnicomDeviceInfo.objects.all()
+            unicom_device_qs = UnicomDeviceInfo.objects.all().order_by('-updated_time')
+            device_user_qs = Device_User.objects.filter().values(
+                'userID', 'NickName', 'phone')
             if iccid:
                 unicom_device_qs = unicom_device_qs.filter(iccid=iccid)
             if serial_no:
                 unicom_device_qs = unicom_device_qs.filter(serial_no=serial_no)
-
-            device_user_qs = Device_User.objects.filter().values(
-                'userID', 'NickName', 'phone')
-            userID = ''
             if NickName:
                 device_user_qs = device_user_qs.filter(NickName=NickName)
                 if not device_user_qs.exists():
                     return response.json(0, [])
                 userID = device_user_qs.first()['userID']
-
+                unicom_device_qs = unicom_device_qs.filter(user_id=userID)
             if phone:
                 device_user_qs = device_user_qs.filter(phone=phone)
                 if not device_user_qs.exists():
                     return response.json(0, [])
                 userID = device_user_qs.first()['userID']
-            if userID:
-                unicom_device_qs.filter(user_id=userID)
-
-            if not unicom_device_qs.exists():
-                return response.json(0, [])
+                unicom_device_qs = unicom_device_qs.filter(user_id=userID)
             total = unicom_device_qs.count()
             unicom_device_qs = unicom_device_qs[(page - 1) * line:page * line]
-
             list_data = []
             for unicom_device in unicom_device_qs:
                 data = {
@@ -112,65 +101,20 @@ class UnicomComboView(View):
                     'serialNo': unicom_device.serial_no,
                     'userID': unicom_device.user_id,
                     'cardType': unicom_device.card_type,
+                    'status':unicom_device.status,
                     'mainCard': unicom_device.main_card,
                     'createdTime': unicom_device.created_time,
-                    'NickName': '',
-                    'phone': ''
+                    'updatedTime': unicom_device.updated_time
                 }
                 device_user_qs = Device_User.objects.filter(userID=unicom_device.user_id).values('NickName', 'phone')
-                data['NickName'] = device_user_qs[0]['NickName']
-                data['phone'] = device_user_qs[0]['phone']
+                data['NickName'] = device_user_qs[0]['NickName'] if device_user_qs.first() else ''
+                data['phone'] = device_user_qs[0]['phone'] if device_user_qs.first() else ''
                 list_data.append(data)
             return response.json(0, {'list': list_data, 'total': total})
         except Exception as e:
             print(e)
             return response.json(500, repr(e))
 
-    @staticmethod
-    def get_user_combo(request_dict, response):
-        """
-        获取卡用户信息
-        @param request_dict:
-        @param response:
-        @return:
-        """
-        pageNo = request_dict.get('pageNo', None)
-        pageSize = request_dict.get('pageSize', None)
-        if not all([pageNo, [pageSize]]):
-            return response.json(444)
-        page = int(pageNo)
-        line = int(pageSize)
-        unicom_device_info_qs = UnicomDeviceInfo.objects.filter().values(
-            'iccid', 'serial_no', 'user_id', 'card_type', 'main_card', 'created_time', 'updated_time', 'status'
-        ).order_by('-updated_time')
-        total = unicom_device_info_qs.count()
-        get_info_qs = unicom_device_info_qs[(page - 1) * line:page * line]
-        try:
-            res_list = []
-            for item in get_info_qs:
-                res = {
-                    'serialNo': item['serial_no'],
-                    'iccid': item['iccid'],
-                    'status': item['status'],
-                    'cardType': item['card_type'],
-                    'mainCard': item['main_card'],
-                    'createdTime': item['created_time'],
-                    'updatedTime': item['updated_time']
-                }
-                usreID = item['user_id']
-                user_info_qs = Device_User.objects.filter(userID=usreID).values(
-                    'NickName', 'phone', 'username')
-                if user_info_qs.exists():
-                    res['userID'] = usreID
-                    res['NickName'] = user_info_qs.first()['NickName']
-                    res['phone'] = user_info_qs.first()['phone']
-                    res['username'] = user_info_qs.first()['username']
-                else:
-                    res['usreID'] = ''
-                res_list.append(res)
-            return response.json(0, {'list': res_list, 'total': total})
-        except Exception as e:
-            return response.json(500, repr(e))
 
     @staticmethod
     def get_order_info(request_dict, response):
@@ -208,8 +152,8 @@ class UnicomComboView(View):
                     return response.json(0, [])
             if not combo_order_info_qs.exists():
                 return response.json(0, [])
-            combo_order_info_qs = combo_order_info_qs.order_by('-created_time')[(page - 1) * line:page * line]
             total = combo_order_info_qs.count()
+            combo_order_info_qs = combo_order_info_qs.order_by('-created_time')[(page - 1) * line:page * line]
             data_list = []
             for combo_order in combo_order_info_qs:
                 data = {'userName': '',
@@ -230,8 +174,6 @@ class UnicomComboView(View):
                     data['comboName'] = ''
                 iccid = combo_order.iccid
                 unicom_device_qs = UnicomDeviceInfo.objects.filter(iccid=iccid).values('user_id', 'serial_no')
-                # if not unicom_device_qs.exists():
-                #     return response.json(0, [])
                 userID = unicom_device_qs[0]['user_id']
                 device_user = Device_User.objects.filter(userID=userID).values('username')
                 if device_user.exists():

+ 125 - 56
AdminController/UserManageController.py

@@ -20,6 +20,7 @@ import oss2
 import simplejson
 import simplejson as json
 import requests
+import xlwt
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
 from django.db import transaction
 from django.db.models import Q
@@ -64,12 +65,10 @@ class LoginView(TemplateView):
         request.encoding = 'utf-8'
         request_dict = request.POST
         language = request_dict.get('language', 'en')
-        response = ResponseObject(language,'pc')
+        response = ResponseObject(language, 'pc')
 
         return self.validates(request_dict, response)
 
-
-
     def validates(self, request_dict, response):
         username = request_dict.get('username', None)
         password = request_dict.get('password', None)
@@ -136,8 +135,6 @@ class LoginView(TemplateView):
             return response.json(tko.code)
 
 
-
-
 # 获取登录权限
 class GetPermissions(TemplateView):
     @method_decorator(csrf_exempt)  # @csrf_exempt
@@ -150,23 +147,19 @@ class GetPermissions(TemplateView):
         request_dict = request.GET
         language = request_dict.get('language', 'en')
         response = ResponseObject(language, 'pc')
-        return self.validates(request_dict,token, response)
+        return self.validates(request_dict, token, response)
 
-
-
-
-    def validates(self, request_dict,token, response):
-        tko = TokenObject(token,returntpye='pc')
+    def validates(self, request_dict, token, response):
+        tko = TokenObject(token, returntpye='pc')
         response.lang = tko.lang
         if tko.code != 0:
             return response.json(tko.code)
         userID = tko.userID
 
-
         user_qs = Device_User.objects.filter(userID=userID)
         if not user_qs.exists():
             return response.json(104)
-        #待补充逻辑
+        # 待补充逻辑
         username = user_qs[0].username
         userIconPath = user_qs[0].userIconPath.url
         if userIconPath:
@@ -175,20 +168,20 @@ class GetPermissions(TemplateView):
                 userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
 
         role_qs = Role.objects.filter(device_user=userID)
-        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=2);
+        menu_qs = MenuModel.objects.filter(role__in=role_qs, menutype=2);
         perms = []
         for menu in menu_qs:
             perms.append(menu.menu_code)
-        res={
-          "code": 200,
-          "msg": "success",
-          "data": {
-            "roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
-            "ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
-            "username": username, # 用户名,必须返回
-            "avatar": userIconUrl,# 头像,必须返回
-            "perms": perms
-          }
+        res = {
+            "code": 200,
+            "msg": "success",
+            "data": {
+                "roles": ["admin"],  # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
+                "ability": ["READ", "WRITE", "DELETE"],  # 如果用不到rabc精细化权限可以不返回,建议返回
+                "username": username,  # 用户名,必须返回
+                "avatar": userIconUrl,  # 头像,必须返回
+                "perms": perms
+            }
         }
         return response.json(0, res)
 
@@ -205,46 +198,45 @@ class GetList(TemplateView):
         request_dict = request.GET
         language = request_dict.get('language', 'en')
         response = ResponseObject(language, 'pc')
-        return self.validates(request_dict,token, response)
+        return self.validates(request_dict, token, response)
 
-
-    def validates(self, request_dict,token, response):
-        tko = TokenObject(token,returntpye='pc')
+    def validates(self, request_dict, token, response):
+        tko = TokenObject(token, returntpye='pc')
         response.lang = tko.lang
         if tko.code != 0:
             return response.json(tko.code)
         userID = tko.userID
 
-        role_qs =Role.objects.filter(device_user=userID)
-        menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs,menutype=1);
+        role_qs = Role.objects.filter(device_user=userID)
+        menu_qs = MenuModel.objects.filter(parentId=0, role__in=role_qs, menutype=1);
         list = []
 
         for menu in menu_qs:
             list.append(
                 {
-                'id': menu.id,
-                'parentId': menu.parentId,
-                'path': menu.path,
-                'name': menu.name,
-                'component': menu.component,
-                'meta': {
+                    'id': menu.id,
+                    'parentId': menu.parentId,
+                    'path': menu.path,
+                    'name': menu.name,
+                    'component': menu.component,
+                    'meta': {
                         'hidden': menu.hidden,
                         'levelHidden': menu.levelHidden,
                         'title': menu.title,
                         'icon': menu.icon,
-                        'isCustomSvg':menu.isCustomSvg,
+                        'isCustomSvg': menu.isCustomSvg,
                         'noKeepAlive': menu.noKeepAlive,
-                        'noClosable':menu.noClosable,
+                        'noClosable': menu.noClosable,
                         'badge': menu.badge,
                         'tabHidden': menu.tabHidden,
                         'activeMenu': menu.activeMenu,
-                        'dot':menu.dot,
+                        'dot': menu.dot,
                         'dynamicNewTab': menu.dynamicNewTab,
                         'sort': menu.sort
                     }
                 }
             )
-        menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=1)
+        menu_qs = MenuModel.objects.filter(role__in=role_qs, menutype=1)
         menulist = []
         for objlist in list:
             menulist.append(self.menulist(menu_qs, objlist))
@@ -290,7 +282,6 @@ class GetList(TemplateView):
         return objlist
 
 
-
 class UserManagement(View):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
@@ -333,12 +324,16 @@ class UserManagement(View):
                 return self.deleteFeedBack(request_dict, response)
             elif operation == 'getSysMessageList':
                 return self.getSysMessageList(request_dict, response)
+            elif operation == 'collectFeedBack':
+                return self.collectFeedBack(request_dict, response)
+            elif operation == 'exportFeedBack':
+                return self.exportFeedBack(request_dict, response)
             else:
                 return response.json(404)
 
     def getUserInfo(self, userID, request_dict, response):
         print('request_dict: ', request_dict)
-        username = request_dict.get('username', '').strip()   # 移除字符串头尾的空格
+        username = request_dict.get('username', '').strip()  # 移除字符串头尾的空格
         NickName = request_dict.get('NickName', '').strip()
         phone = request_dict.get('phone', '').strip()
         userEmail = request_dict.get('userEmail', '').strip()
@@ -372,7 +367,7 @@ class UserManagement(View):
             user_list = []
             for device_user in device_users:
                 role = device_user.role.first()
-                rid = role.rid if role else 1   # 不存在角色默认分配为'Users'
+                rid = role.rid if role else 1  # 不存在角色默认分配为'Users'
                 user_ex_qs = UserExModel.objects.filter(userID_id=device_user.userID).values('appBundleId')
                 app_bundle_id = user_ex_qs[0]['appBundleId'] if user_ex_qs.exists() else ''
                 user_list.append({
@@ -395,7 +390,7 @@ class UserManagement(View):
     def AddOrEditAccount(self, userID, request_dict, response):
         # 添加/编辑用户
         print('request_dict: ', request_dict)
-        username = request_dict.get('username', '').strip()   # 移除字符串头尾的空格
+        username = request_dict.get('username', '').strip()  # 移除字符串头尾的空格
         userEmail = request_dict.get('userEmail', '').strip()
         roleName = request_dict.get('role', None)
         password = request_dict.get('password', None)
@@ -430,11 +425,11 @@ class UserManagement(View):
                     device_user_role.clear()
                     role_qs = Role.objects.filter(roleName=roleName)  # 账号角色
                     device_user_qs[0].role.set(role_qs)
-            else:   # 添加用户
+            else:  # 添加用户
                 # 查询邮箱是否已注册
                 if Device_User.objects.filter(userEmail=userEmail).exists():
                     return response.json(103)
-                role_qs = Role.objects.filter(roleName=roleName)    # 账号角色
+                role_qs = Role.objects.filter(roleName=roleName)  # 账号角色
                 # 创建用户
                 user_data = {
                     "username": username,
@@ -480,26 +475,27 @@ class UserManagement(View):
     def getFeedbackList(self, request_dict, response):
         status = request_dict.get('status', 0)
         username = request_dict.get('username', None)
+        collect_status = request_dict.get('collectStatus', 0)
         pageNo = request_dict.get('pageNo', None)
         pageSize = request_dict.get('pageSize', None)
-
         if not all([pageNo, pageSize]):
             return response.json(444)
-
         page = int(pageNo)
         line = int(pageSize)
         try:
             filter_data = {}
-            if status or username:
+            if status or username or collect_status:
                 if status:
                     filter_data['status'] = int(status)
                 if username:
                     filter_data['userID_id'] = ModelService.get_userID_byname(username)
+                if collect_status:
+                    filter_data['collect_status'] = int(collect_status)
             feed_back_qs = FeedBackModel.objects.filter()
             if filter_data:
-                feed_back_qs = feed_back_qs.filter(**filter_data)
+                feed_back_qs = feed_back_qs.filter(**filter_data).values()
             total = feed_back_qs.count()
-            feed_backs = feed_back_qs[(page - 1) * line:page * line]. values(
+            feed_backs = feed_back_qs.values(
                 'id',
                 'userID__username',
                 'userID__phone',
@@ -514,8 +510,10 @@ class UserManagement(View):
                 'os_version',
                 'uid',
                 'appBundleId',
-                'score')
-
+                'score',
+                'collect_status'
+            )
+            feed_backs = feed_backs[(page - 1) * line: page * line]
             feed_back_id_list = [feed_back['id'] for feed_back in feed_backs]
             stat_res_qs = StatResModel.objects.filter(
                 feedbackmodel__id__in=feed_back_id_list).values(
@@ -555,8 +553,8 @@ class UserManagement(View):
                 return response.json(173)
             with transaction.atomic():
                 SysMsgModel.objects.create(userID_id=feed_back_qs.first().userID_id, msg=msg, uid=uid,
-                                           addTime=nowTime, updTime=nowTime)   # 创建系统消息
-                feed_back_qs.update(status=1)   # 更新状态为已回复
+                                           addTime=nowTime, updTime=nowTime)  # 创建系统消息
+                feed_back_qs.update(status=1)  # 更新状态为已回复
             return response.json(0)
         except Exception as e:
             print(e)
@@ -661,7 +659,7 @@ class UserManagement(View):
                 # 根据UserExModel表的userID群发消息给用户
                 region_list = lang.split(',')
                 appBundleId_list = recever.split(',')
-                userID_list = UserExModel.objects.filter(appBundleId__in=appBundleId_list, region__in=region_list)\
+                userID_list = UserExModel.objects.filter(appBundleId__in=appBundleId_list, region__in=region_list) \
                     .values_list('userID_id', flat=True)
                 sys_msg_list = []
                 for userID in userID_list:
@@ -675,3 +673,74 @@ class UserManagement(View):
             print(e)
             return response.json(500, repr(e))
 
+    def collectFeedBack(self, request_dict, response):
+        """收藏或取消收藏用户反馈信息"""
+        feedBackID = request_dict.get('feedBackID', None)
+        collect_status = request_dict.get('collectStatus', None)
+        if not all([feedBackID, collect_status]):
+            return response.json(444)
+        feedBackID = int(feedBackID)
+        collect_status = int(collect_status)
+        feed_back_qs = FeedBackModel.objects.filter(id=feedBackID, collect_status=collect_status)
+        if feed_back_qs.exists():  # 判断是否已收藏
+            feed_qs = feed_back_qs.first()
+            feed_qs.collect_status = 0
+            feed_qs.save()
+        else:
+            FeedBackModel.objects.filter(id=feedBackID).update(collect_status=collect_status)
+        return response.json(0)
+
+    def exportFeedBack(self, request_dict, response):
+        status = request_dict.get('status', None)
+        collect_status = request_dict.get('collectStatus', None)
+        try:
+            with transaction.atomic():
+                filter_data = {}
+                if status or collect_status:
+                    if status:
+                        filter_data['status'] = int(status)
+                    if collect_status:
+                        filter_data['collect_status'] = int(collect_status)
+                feed_back_qs = FeedBackModel.objects.filter()
+                if filter_data:
+                    feed_back_qs = feed_back_qs.filter(**filter_data)
+                feed_backs = feed_back_qs.values(
+                    'id',
+                    'userID__username',
+                    'userID__phone',
+                    'userID__userEmail',
+                    'content',
+                    'addTime',
+                    'status',
+                    'type',
+                    'app',
+                    'app_version',
+                    'phone_model',
+                    'os_version',
+                    'uid',
+                    'appBundleId',
+                    'score',
+                    'collect_status'
+                )
+                feed_back_id_list = [feed_back['id'] for feed_back in feed_backs]
+                stat_res_qs = StatResModel.objects.filter(
+                    feedbackmodel__id__in=feed_back_id_list).values(
+                    'name', 'feedbackmodel__id')
+                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                bucket = oss2.Bucket(
+                    auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+                feed_back_list = []
+                for feed_back in feed_backs:
+                    feed_back['img_url'] = []
+                    for stat_res in stat_res_qs:
+                        if stat_res['feedbackmodel__id'] == feed_back['id']:
+                            obj = 'feedback/' + stat_res['name']
+                            img_url = bucket.sign_url('GET', obj, 3600)
+                            feed_back['img_url'].append(img_url)
+                            if not feed_back['userID__username']:
+                                feed_back['userID__username'] = feed_back['userID__userEmail'] if feed_back[
+                                    'userID__userEmail'] else feed_back['userID__phone']
+                    feed_back_list.append(feed_back)
+            return response.json(0, {'list': feed_back_list})
+        except Exception as e:
+            print(e)

+ 1 - 1
Ansjer/server_urls/unicom_url.py

@@ -15,5 +15,5 @@ urlpatterns = [
     re_path(r'^api/(?P<operation>.*)$', UnicomComboController.UnicomComboView.as_view()),
     re_path(r'^wap/pay/(?P<operation>.*)$', UnicomComboPayNotifyController.UnicomComboPayNotifyView.as_view()),
     re_path(r'^combo/cron/(?P<operation>.*)$', UnicomComboTaskController.UnicomComboTaskView.as_view()),
-    re_path(r'^manage/(?P<operation>.*)$',UnicomManageController.UnicomComboView.as_view()),
+    re_path(r'^manage/(?P<operation>.*)$',UnicomManageController.UnicomManageControllerView.as_view()),
 ]