Browse Source

产品异常记录接口

linhaohong 3 months ago
parent
commit
8440bbf16b
2 changed files with 121 additions and 1 deletions
  1. 116 0
      AdminController/ProblemEntryManagementController.py
  2. 5 1
      Ansjer/urls.py

+ 116 - 0
AdminController/ProblemEntryManagementController.py

@@ -0,0 +1,116 @@
+import json
+import time
+
+from django.db import transaction
+from django.views import View
+
+from Ansjer.test.util.email_log import response
+from Model.models import Device_Info, DeviceScheme, ProductTroubleshoot, AbnormalEventCode
+from Object.ResponseObject import ResponseObject
+
+
+class ProblemEntryView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        request_dict = request.GET
+        return self.validation(request, request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        request_dict = request.POST
+        return self.validation(request, request_dict, operation)
+
+    def validation(self, request, request_dict, operation):
+        language = request_dict.get('language', 'en')
+        response = ResponseObject(language, 'pc')
+        if operation == 'addProductProblem':
+            return self.add_product_problem(request_dict, response)
+        elif operation == 'queryEventSubcategory':
+            return self.query_event_subcategory(request_dict, response)
+
+    @staticmethod
+    def add_product_problem(request_dict, response):
+        try:
+            # 解析请求数据
+            date_times = json.loads(request_dict.get('dateTimes', '[]'))
+            deivce_ids = json.loads(request_dict.get('deviceIds', '[]'))
+            device_types = json.loads(request_dict.get('deviceTypes', '[]'))
+            event_codes = json.loads(request_dict.get('eventCodes', '[]'))
+            remarks = json.loads(request_dict.get('remarks', '[]'))
+
+            # 基础数据校验
+            list_lengths = {
+                "dateTimes": len(date_times),
+                "serialNumbers": len(deivce_ids),
+                "deviceTypes": len(device_types),
+                "eventCodes": len(event_codes),
+                "remarks": len(remarks)
+            }
+
+            # 检查各字段数据长度一致性
+            if len(set(list_lengths.values())) != 1:
+                return response.json(400, f'参数长度不一致: {", ".join([f"{k}({v})" for k, v in list_lengths.items()])}')
+
+            current_time = int(time.time())
+            products = []
+
+            # 数据预处理
+            for idx in range(len(date_times)):
+                # 字段值提取
+                date_time = date_times[idx]
+                deivce_id = deivce_ids[idx].strip()  # 去除前后空格
+                device_type = device_types[idx]
+                event_code = event_codes[idx].strip()
+                remark = remarks[idx].strip()
+
+                # 构建对象
+                products.append(
+                    ProductTroubleshoot(
+                        date_time=date_time,
+                        device_id=deivce_id,
+                        device_type=device_type,
+                        event_code=event_code,
+                        status=0,
+                        remark=remark,
+                        created_time=current_time,
+                        updated_time=current_time
+                    )
+                )
+
+            # 批量写入数据库
+            with transaction.atomic():
+                ProductTroubleshoot.objects.bulk_create(products)
+
+            return response.json(0)
+
+        except Exception as e:
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    @staticmethod
+    def query_event_subcategory(request_dict, response):
+        event_type_code = request_dict.get('eventTypeCode', None)
+        abnormal_event_code_qs = AbnormalEventCode.objects.all()
+
+        if event_type_code:
+            abnormal_event_code_qs = abnormal_event_code_qs.filter(event_code__istartswith=event_type_code)
+
+        data = []
+        for abnormal_event_code in abnormal_event_code_qs:
+            # 第0个是大类 第一个是细分
+            event_list = abnormal_event_code.event.split("-")
+            data.append(
+                {
+                    "eventTypeCode": abnormal_event_code.event_code[0:2],
+                    "eventType": abnormal_event_code.event_type,
+                    "eventSegCode": abnormal_event_code.event_code[2:4],
+                    "eventSeg": event_list[1] if len(event_list) > 1 else "",
+                    "eventDescriptionCode": abnormal_event_code.event_code[4:],
+                    "eventDescription": event_list[2] if len(event_list) > 2 else "",
+
+                }
+            )
+
+        return response.json(0, data)

+ 5 - 1
Ansjer/urls.py

@@ -5,7 +5,8 @@ from django.urls import re_path, path
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
     AiServeController, SurveysManageController, SerialManageController, IcloudManagementController, CampaignController, \
-    MessageMangementController, EvaluationActivityController, DataDictManageController, ProductsSchemeManageController
+    MessageMangementController, EvaluationActivityController, DataDictManageController, ProductsSchemeManageController, \
+    ProblemEntryManagementController
 from AdminController.CloudServiceManage import AgentDeviceController, AgentCustomerController, AgentOrderController
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
     Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
@@ -347,6 +348,9 @@ urlpatterns = [
     # 产品方案管理
     re_path('productsSchemeManage/(?P<operation>.*)',
             ProductsSchemeManageController.ProductsSchemeManageView.as_view()),
+    # 产品问题录入
+    re_path('problemEntryManage/(?P<operation>.*)',
+            ProblemEntryManagementController.ProblemEntryView.as_view()),
     # 后台界面接口 -------------------------------------------------------------------------------------------------------
 
     # 定时任务接口