Эх сурвалжийг харах

新增AI服务套餐信息和套餐语言相关接口

locky 3 жил өмнө
parent
commit
1202d2f4d8

+ 290 - 0
AdminController/AiServeController.py

@@ -0,0 +1,290 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from django.views.generic.base import View
+from Model.models import Lang, AiStoreMeal
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
+
+
+class AiServeView(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')
+        if operation == 'xxx':  # 不认证token接口
+            pass
+        else:
+            tko = TokenObject(
+                request.META.get('HTTP_AUTHORIZATION'),
+                returntpye='pc')
+            if tko.code != 0:
+                return response.json(tko.code)
+            response.lang = tko.lang
+            userID = tko.userID
+            if operation == 'getAiStoreMealList':
+                return self.getAiStoreMealList(request_dict, response)
+            elif operation == 'addOrEditAiStoreMeal':
+                return self.addOrEditAiStoreMeal(request_dict, response)
+            elif operation == 'deleteAiStoreMeal':
+                return self.deleteAiStoreMeal(request_dict, response)
+            elif operation == 'getAiMealLanguage':
+                return self.getAiMealLanguage(request_dict, response)
+            elif operation == 'addOrEditAiMealLanguage':
+                return self.addOrEditAiMealLanguage(request_dict, response)
+            elif operation == 'deleteAiMealLanguage':
+                return self.deleteAiMealLanguage(request_dict, response)
+            else:
+                return response.json(404)
+
+    def getAiStoreMealList(self, request_dict, response):
+        # 获取ai套餐信息数据
+        print('request_dict: ', request_dict)
+
+        isSelect = request_dict.get('isSelect', None)
+        if isSelect:
+            # 获取套餐ID作为选项
+            ai_meal_qs = AiStoreMeal.objects.filter(
+                lang__lang='cn').values(
+                'id', 'lang__title')
+            return response.json(
+                0, {'list': CommonService.qs_to_list(ai_meal_qs)})
+
+        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:
+            ai_meal_qs = AiStoreMeal.objects.filter()
+            ai_meal_val = ai_meal_qs.values(
+                'id',
+                'price',
+                'virtual_price',
+                'symbol',
+                'currency',
+                'currency',
+                'is_show',
+                'is_discounts',
+                'discount_price',
+                'effective_day',
+                'add_time',
+                'update_time')
+            total = len(ai_meal_val)
+            ai_meals = ai_meal_val[(page - 1) * line:page * line]
+            ai_meal_list = []
+            for ai_meal in ai_meals:
+                # 获取支付方式列表
+                pay_type_list = [
+                    pay_type['id'] for pay_type in AiStoreMeal.objects.get(
+                        id=ai_meal['id']).pay_type.values('id')]
+                # 组织响应数据
+                ai_meal_list.append({
+                    'aiMealID': ai_meal['id'],
+                    'price': ai_meal['price'],
+                    'virtual_price': ai_meal['virtual_price'],
+                    'symbol': ai_meal['symbol'],
+                    'currency': ai_meal['currency'],
+                    'is_show': ai_meal['is_show'],
+                    'is_discounts': ai_meal['is_discounts'],
+                    'discount_price': ai_meal['discount_price'],
+                    'effective_day': ai_meal['effective_day'],
+                    'pay_type': pay_type_list,
+                    'addTime': ai_meal['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
+                    'updTime': ai_meal['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
+                })
+            print('store_meal_list: ', ai_meal_list)
+            return response.json(
+                0, {'list': ai_meal_list, 'total': total})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def addOrEditAiStoreMeal(self, request_dict, response):
+        # 添加/编辑套餐
+        print('request_dict: ', request_dict)
+        aiMealID = request_dict.get('aiMealID', None)
+        effective_day = int(request_dict.get('effective_day', 0))
+        price = request_dict.get('price', '')
+        virtual_price = request_dict.get('virtual_price', '')
+        currency = request_dict.get('currency', '')
+        symbol = request_dict.get('symbol', '')
+        pay_type = request_dict.get(
+            'pay_type', '')[
+            1:-1].split(',')    # '[1,2]' -> ['1','2']
+        is_discounts = int(request_dict.get('is_discounts', 0))
+        discount_price = request_dict.get('discount_price', '')
+        is_show = int(request_dict.get('is_show', 1))
+        isEdit = request_dict.get('isEdit', None)
+
+        if not all([effective_day, price, currency, symbol, pay_type]):
+            return response.json(444)
+
+        try:
+            ai_store_meal_data = {
+                'effective_day': effective_day,
+                'price': price,
+                'virtual_price': virtual_price,
+                'currency': currency,
+                'symbol': symbol,
+                'is_discounts': is_discounts,
+                'discount_price': discount_price,
+                'is_show': is_show,
+            }
+            if isEdit:
+                if not aiMealID:
+                    return response.json(444)
+                AiStoreMeal.objects.filter(
+                    id=aiMealID).update(
+                    **ai_store_meal_data)
+                AiStoreMeal.objects.get(id=aiMealID).pay_type.set(pay_type)
+            else:
+                AiStoreMeal.objects.create(
+                    **ai_store_meal_data).pay_type.set(pay_type)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def deleteAiStoreMeal(self, request_dict, response):
+        # 删除ai套餐
+        print('request_dict: ', request_dict)
+        aiMealID = request_dict.get('aiMealID', None)
+        if not aiMealID:
+            return response.json(444)
+        try:
+            AiStoreMeal.objects.filter(id=aiMealID).delete()
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def getAiMealLanguage(self, request_dict, response):
+        # 获取ai套餐语言
+        print('request_dict: ', request_dict)
+        aiMealID = request_dict.get('aiMealID', None)
+        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:
+            if aiMealID:   # 条件查询
+                store_meal_lang_qs = AiStoreMeal.objects.filter(id=aiMealID)
+            else:   # 查询全部
+                store_meal_lang_qs = AiStoreMeal.objects.filter(
+                    lang__isnull=False)
+            ai_meal_lang_val = store_meal_lang_qs.values(
+                'id',
+                'lang__id',
+                'lang__lang',
+                'lang__title',
+                'lang__content',
+                'lang__discount_content',
+            )
+            total = len(ai_meal_lang_val)
+            ai_meal_langs = ai_meal_lang_val[(
+                page - 1) * line:page * line]
+            ai_meal_lang_list = []
+            for ai_meal_lang in ai_meal_langs:
+                ai_meal_lang_list.append({
+                    'aiMealID': ai_meal_lang['id'],
+                    'langID': ai_meal_lang['lang__id'],
+                    'lang': ai_meal_lang['lang__lang'],
+                    'title': ai_meal_lang['lang__title'],
+                    'content': ai_meal_lang['lang__content'],
+                    'discountContent': ai_meal_lang['lang__discount_content'],
+                })
+            print('ai_meal_lang_list: ', ai_meal_lang_list)
+            return response.json(
+                0, {'list': ai_meal_lang_list, 'total': total})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def addOrEditAiMealLanguage(self, request_dict, response):
+        # 添加/编辑套餐语言
+        print('request_dict: ', request_dict)
+        aiMealID = request_dict.get('aiMealID', None)
+        lang = request_dict.get('lang', None)
+        title = request_dict.get('title', None)
+        content = request_dict.get('content', None)
+        discount_content = request_dict.get('discountContent', '')
+        isEdit = request_dict.get('isEdit', None)
+
+        if not all([aiMealID, lang, title, content]):
+            return response.json(444)
+
+        try:
+            # 查询套餐是否存在
+            ai_meal_qs = AiStoreMeal.objects.get(id=aiMealID)
+            if not ai_meal_qs:
+                return response.json(173)
+            if isEdit:  # 编辑
+                langID = request_dict.get('langID', None)
+                if not langID:
+                    return response.json(444)
+                Lang.objects.filter(
+                    id=langID).update(
+                    lang=lang,
+                    title=title,
+                    content=content,
+                    discount_content=discount_content)
+            else:   # 添加
+                lang_obj = Lang.objects.filter(
+                    lang=lang,
+                    title=title,
+                    content=content,
+                    discount_content=discount_content)
+                if not lang_obj.exists():
+                    # 数据不存在,lang表创建数据
+                    Lang.objects.create(
+                        lang=lang,
+                        title=title,
+                        content=content,
+                        discount_content=discount_content)
+                    lang_obj = Lang.objects.filter(
+                        lang=lang,
+                        title=title,
+                        content=content,
+                        discount_content=discount_content)
+                ai_meal_qs.lang.add(*lang_obj)  # store_meal表添加语言数据
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def deleteAiMealLanguage(self, request_dict, response):
+        # 删除套餐语言
+        aiMealID = request_dict.get('aiMealID', None)
+        langID = request_dict.get('langID', None)
+
+        if not all([aiMealID, langID]):
+            return response.json(444)
+
+        try:
+            ai_meal_qs = AiStoreMeal.objects.get(id=aiMealID)
+            if not ai_meal_qs:
+                return response.json(173)
+            lang_qs = Lang.objects.filter(id=langID)
+            ai_meal_qs.lang.remove(*lang_qs)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))

+ 4 - 1
Ansjer/urls.py

@@ -21,7 +21,8 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug, PaymentCycle, \
     DeviceLogController, CouponController, AiController
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
-    ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController
+    ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
+    AiServeController
 
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -381,6 +382,8 @@ urlpatterns = [
     re_path('testServe/(?P<operation>.*)', TestServeController.TestServeView.as_view()),
     # 日志管理
     re_path('logManagement/(?P<operation>.*)', LogManagementController.LogManagementView.as_view()),
+    # AI服务
+    re_path('aiServe/(?P<operation>.*)', AiServeController.AiServeView.as_view()),
     # 后台界面接口 -----------------------------------------------------
 
     re_path('(?P<path>.*)', LogManager.errorPath),