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

新增算法小店应用场景功能以及接口实现

zhangdongming 2 жил өмнө
parent
commit
ef7e02d0ba

+ 2 - 0
Ansjer/server_urls/algorithm_shop_url.py

@@ -16,4 +16,6 @@ urlpatterns = [
     re_path(r'^api/(?P<operation>.*)$', AlgorithmShopController.AlgorithmShopView.as_view()),
     re_path(r'^cron/(?P<operation>.*)$', CronCloudPhotoController.CronCloudPhotoView.as_view()),
     re_path(r'^photo/(?P<operation>.*)$', CloudPhotoController.CronCloudPhotoView.as_view()),
+    re_path(r'^open/(?P<operation>.*)$', AlgorithmShopController.AlgorithmShopView.as_view()),
+
 ]

+ 1 - 0
Ansjer/urls.py

@@ -252,6 +252,7 @@ urlpatterns = [
     re_path(r'^api/loocam/', include("Ansjer.server_urls.loocam_url")),
     re_path(r'^unicom/', include("Ansjer.server_urls.unicom_url")),
     re_path(r'^algorithm-shop/', include("Ansjer.server_urls.algorithm_shop_url")),
+    re_path(r'^api/algorithm/', include("Ansjer.server_urls.algorithm_shop_url")),
     re_path(r'^kvs/', include("Ansjer.server_urls.kvs_url")),
     re_path('appAccout/(?P<operation>.*)', SuperPasswordTool.SuperPasswordView.as_view()),
     re_path('sensorGateway/(?P<operation>.*)', SensorGatewayController.SensorGateway.as_view()),

+ 115 - 2
Controller/AlgorithmShop/AlgorithmShopController.py

@@ -12,11 +12,12 @@ import time
 from django.db.models import F
 from django.views.generic.base import View
 
-from Model.models import DeviceAlgorithmExplain, DeviceAlgorithmBanner, DeviceUidAlgorithmType, DeviceTypeAlgorithmInfo
+from Model.models import DeviceAlgorithmExplain, DeviceAlgorithmBanner, DeviceUidAlgorithmType, \
+    DeviceTypeAlgorithmInfo, DeviceAppScenario, DeviceScenarioLangInfo, DeviceAlgorithmScenario
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 
-logger = logging.getLogger('info')
+LOGGER = logging.getLogger('info')
 
 
 class AlgorithmShopView(View):
@@ -44,6 +45,118 @@ class AlgorithmShopView(View):
             return self.get_algorithm_details(request_dict, response)
         elif operation == 'save':
             return self.algorithm_setting_save(request_dict, response)
+        elif operation == 'getScenarioList':  # 获取应用场景数据列表
+            return self.get_scenario_list(request_dict, response)
+        elif operation == 'getAlgorithmListByScenarioId':  # 根据应用场景id获取算法列表
+            return self.get_scenario_algorithm_list(request_dict, response)
+        else:
+            return response.json(0)
+
+    @classmethod
+    def get_algorithm_list_by_scenario_id(cls, scenario_id, lang):
+        """
+        根据应用场景ID查询算法信息列表
+        @param scenario_id: 场景ID
+        @param lang: 语言
+        @return: 算法类型信息
+        """
+        try:
+            if not scenario_id or scenario_id == 0:
+                return []
+            # 根据场景id查询关联的算法id
+            algorithm_scenario_qs = DeviceAlgorithmScenario.objects.filter(scenario_id=scenario_id) \
+                .order_by('sort').values('algorithm_id')
+            if not algorithm_scenario_qs.exists():
+                return []
+            algorithm_list = []
+            for item in algorithm_scenario_qs:
+                algorithm_id = item['algorithm_id']
+                # 根据算法id查询多语言数据
+                algorithm_list.append(cls.get_lang_info_by_algorithm_id(algorithm_id, lang, None))
+            return algorithm_list
+        except Exception as e:
+            LOGGER.info('***get_algorithm_list_by_scenario_id,errLine:{}, errMsg:{}'
+                        .format(e.__traceback__.tb_lineno, repr(e)))
+            return []
+
+    @classmethod
+    def get_lang_info_by_algorithm_id(cls, algorithm_id, lang, uid):
+        """
+        根据算法id查询多语言数据详情
+        @param uid: 设备uid
+        @param algorithm_id: 算法id
+        @param lang: 语言
+        @return: 算法多语言数据详情
+        """
+        try:
+            algorithm_qs = DeviceAlgorithmExplain.objects.filter(algorithm_type_id=algorithm_id, lang=lang) \
+                .values('algorithm_type__icon_url',
+                        'title', 'subtitle', 'algorithm_type__image_url',
+                        'algorithm_type__basic_function', 'concerning',
+                        'price', 'algorithm_type__tag', 'algorithm_type__status')
+            if not algorithm_qs.exists():
+                return {}
+            setting = ''  # 当前支持设置的算法功能json
+            # 存在uid则查询当前uid是否支持该算法
+            if uid:
+                setting = cls.get_uid_algorithm_info(algorithm_id, uid)
+                setting = setting if setting else {'status': 0, 'function': {}}
+            data = {
+                'iconUrl': algorithm_qs[0]['algorithm_type__icon_url'],
+                'imageUrl': algorithm_qs[0]['algorithm_type__image_url'],
+                'title': algorithm_qs[0]['title'],
+                'subtitle': algorithm_qs[0]['subtitle'],
+                'basicFunction': algorithm_qs[0]['algorithm_type__basic_function'],
+                'concerning': algorithm_qs[0]['concerning'],
+                'price': algorithm_qs[0]['price'],
+                'tag': algorithm_qs[0]['algorithm_type__tag'],
+                'status': algorithm_qs[0]['algorithm_type__status'],
+                'setting': setting
+            }
+            return data
+        except Exception as e:
+            LOGGER.info('***get_lang_info_by_algorithm_id,errLine:{}, errMsg:{}'
+                        .format(e.__traceback__.tb_lineno, repr(e)))
+            return {}
+
+    @classmethod
+    def get_scenario_list(cls, request_dist, response):
+        try:
+            lang = request_dist.get('lang', 'en')
+            if not lang:
+                return response.json(444)
+            # 获取应用场景列表
+            scenario_qs = DeviceAppScenario.objects.all().order_by('sort') \
+                .values('id', 'type', 'cver_url', 'banner_url')
+            scenario_list = []
+            if not scenario_qs.exists():
+                return response.json(0, scenario_list)
+
+            for item in scenario_qs:
+                scenario_vo = {'id': item['id'], 'cverUrl': item['cver_url'], 'bannerUrl': item['banner_url'],
+                               'name': '', 'content': ''}
+                # 获取根据语言应用场景信息
+                scenario_info_qs = DeviceScenarioLangInfo.objects.filter(lang=lang, scenario_id=item['id']) \
+                    .values('name', 'content')
+                if not scenario_info_qs.exists():
+                    continue
+                scenario_vo['name'] = scenario_info_qs[0]['name']
+                scenario_vo['content'] = scenario_info_qs[0]['content']
+                # 根据应用场景id查询关联算法类型数据
+                # scenario_vo['algorithmList'] = cls.get_algorithm_list_by_scenario_id(item['id'], lang)
+                scenario_list.append(scenario_vo)
+            return response.json(0, scenario_list)
+        except Exception as e:
+            LOGGER.info('接口异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(177, repr(e))
+
+    @classmethod
+    def get_scenario_algorithm_list(cls, request_dist, response):
+        scenario_id = request_dist.get('scenarioId', None)
+        lang = request_dist.get('lang', 'en')
+        if not scenario_id:
+            return response.json(444)
+        return response.json(0, cls.get_algorithm_list_by_scenario_id(scenario_id, lang))
 
     @classmethod
     def get_algorithm_banner(cls, response):