| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 | 
							- import json
 
- import time
 
- from django.db import transaction
 
- from django.db.models import Q
 
- from django.views import View
 
- from Model.models import DictCategory, DictCategoryI18n, DictItemI18n, DictItem
 
- from Object.ResponseObject import ResponseObject
 
- from Object.TokenObject import TokenObject
 
- class DataDictView(View):
 
-     def get(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         request_dict = request.GET
 
-         return self.validation(request_dict, request, operation)
 
-     def post(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         request_dict = request.POST
 
-         return self.validation(request_dict, 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')
 
-         response.lang = tko.lang
 
-         if operation == "getDictCategory":
 
-             return self.get_dict_category(request_dict, response)
 
-         elif operation == "getDictCategoryList":
 
-             return self.dict_categories_list(request_dict, response)
 
-         if tko.code != 0:
 
-             return response.json(tko.code)
 
-         else:
 
-             response.lang = tko.lang
 
-             userID = tko.userID
 
-             if operation == 'addDictCategory':
 
-                 return self.add_dict_category(userID, request_dict, response)
 
-             elif operation == 'editDictCategory':
 
-                 return self.edit_dict_category(userID, request_dict, response)
 
-             elif operation == 'deleteDictCategory':
 
-                 return self.delete_dict_category(request_dict, response)
 
-             else:
 
-                 return response.json(414)
 
-     @staticmethod
 
-     def dict_categories_list(request_dict, response):
 
-         code = request_dict.get("typeCode", None)
 
-         status = request_dict.get("status", None)
 
-         scenes = request_dict.get("scenes", None)
 
-         page = int(request_dict.get("page", 1))
 
-         page_size = int(request_dict.get("pageSize", 10))
 
-         try:
 
-             query = Q()
 
-             if code:
 
-                 query &= Q(code__icontains=code)
 
-             if status:
 
-                 query &= Q(status=bool(int(status)))
 
-             if scenes:
 
-                 query &= Q(scenes=int(scenes))
 
-             category_qs = DictCategory.objects.filter(query).order_by("-id")
 
-             total = category_qs.count()
 
-             start = (page - 1) * page_size
 
-             end = start + page_size
 
-             categories = category_qs[start:end]
 
-             result = []
 
-             for category in categories:
 
-                 # 类别名称国际化
 
-                 i18n_name = (
 
-                         list(category.translations.values("lang_code", "name"))
 
-                         or []
 
-                 )
 
-                 # 子表字典项
 
-                 items = category.items.order_by("sort", "id")
 
-                 item_list = []
 
-                 for item in items:
 
-                     item_i18n_name = (
 
-                             list(item.translations.values("lang_code", "name"))
 
-                             or []
 
-                     )
 
-                     item_list.append({
 
-                         "id": item.id,
 
-                         "code": item.code,
 
-                         "sort": item.sort,
 
-                         "status": item.status,
 
-                         "remark": item.remark,
 
-                         "createdTime": item.created_time,
 
-                         "createdBy": item.created_by,
 
-                         "updatedTime": item.updated_time,
 
-                         "updatedBy": item.updated_by,
 
-                         "itemNames": item_i18n_name
 
-                     })
 
-                 result.append({
 
-                     "id": category.id,
 
-                     "code": category.code,
 
-                     "scenes": category.scenes,
 
-                     "status": category.status,
 
-                     "remark": category.remark,
 
-                     "extData": category.ext_data,
 
-                     "createdTime": category.created_time,
 
-                     "createdBy": category.created_by,
 
-                     "updatedTime": category.updated_time,
 
-                     "updatedBy": category.updated_by,
 
-                     "names": i18n_name,
 
-                     "items": item_list
 
-                 })
 
-             return response.json(0, {
 
-                 "list": result,
 
-                 "total": total
 
-             })
 
-         except Exception as e:
 
-             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-     @staticmethod
 
-     def get_dict_category(request_dict, response):
 
-         type_codes = request_dict.get("typeCodes", None)
 
-         lang_code = request_dict.get("langCode", "cn")
 
-         scenes = request_dict.get("scenes", 1)
 
-         try:
 
-             if not type_codes:
 
-                 return response.json(444)
 
-             type_code_list = type_codes.split(",")
 
-             category_qs = DictCategory.objects.filter(code__in=type_code_list, status=True, scenes=scenes)
 
-             if not category_qs.exists():
 
-                 return response.json(0)
 
-             result_list = []
 
-             for category in category_qs:
 
-                 # 获取类别名称(国际化)
 
-                 category_name = (
 
-                         category.translations.filter(lang_code=lang_code).values_list("name", flat=True).first()
 
-                         or ""
 
-                 )
 
-                 # 构建返回结构
 
-                 result = {
 
-                     "typeCode": category.code,
 
-                     "scenes": category.scenes,
 
-                     "status": category.status,
 
-                     "remark": category.remark,
 
-                     "name": category_name,
 
-                     "items": []
 
-                 }
 
-                 # 获取字典项及其多语言名称
 
-                 items = category.items.filter(status=True).order_by("sort", "id")
 
-                 for item in items:
 
-                     item_name = (
 
-                             item.translations.filter(lang_code=lang_code).values_list("name", flat=True).first()
 
-                             or ""
 
-                     )
 
-                     result["items"].append({
 
-                         "code": item.code,
 
-                         "name": item_name,
 
-                         "remark": item.remark,
 
-                         "sort": item.sort
 
-                     })
 
-                 result_list.append(result)
 
-             return response.json(0, result_list)
 
-         except Exception as e:
 
-             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-     @staticmethod
 
-     def add_dict_category(user_id, request_dict, response):
 
-         type_code = request_dict.get('typeCode', None)
 
-         scenes = request_dict.get("scenes", 1)
 
-         status = request_dict.get("status", 1)
 
-         remark = request_dict.get("remark", "")
 
-         names = request_dict.get("names", [])
 
-         items = request_dict.get("items", [])
 
-         now_time = int(time.time())
 
-         try:
 
-             if not type_code or not names:
 
-                 return response.json(444)
 
-             names = json.loads(names)
 
-             items = json.loads(items)
 
-             if DictCategory.objects.filter(code=type_code).exists():
 
-                 return response.json(174)
 
-             with transaction.atomic():
 
-                 # 创建类别   数据
 
-                 category = DictCategory.objects.create(
 
-                     code=type_code,
 
-                     scenes=scenes,
 
-                     status=status,
 
-                     remark=remark,
 
-                     created_time=now_time,
 
-                     updated_time=now_time,
 
-                     created_by=user_id,
 
-                     updated_by=user_id
 
-                 )
 
-                 # 添加多语言名称
 
-                 for name_entry in names:
 
-                     DictCategoryI18n.objects.create(
 
-                         category=category,
 
-                         lang_code=name_entry["lang"],
 
-                         name=name_entry["text"],
 
-                         created_time=now_time,
 
-                         updated_time=now_time,
 
-                         created_by=user_id,
 
-                         updated_by=user_id
 
-                     )
 
-                 # 创建选项表数据
 
-                 for item in items:
 
-                     item_obj = DictItem.objects.create(
 
-                         category=category,
 
-                         code=item["code"],
 
-                         sort=item.get("sort", 0),
 
-                         status=item.get("status", True),
 
-                         remark=item.get("remark", ""),
 
-                         created_time=now_time,
 
-                         updated_time=now_time,
 
-                         created_by=user_id,
 
-                         updated_by=user_id
 
-                     )
 
-                     for name_entry in item.get("names", []):
 
-                         DictItemI18n.objects.create(
 
-                             item=item_obj,
 
-                             lang_code=name_entry["lang"],
 
-                             name=name_entry["text"],
 
-                             created_time=now_time,
 
-                             updated_time=now_time,
 
-                             created_by=user_id,
 
-                             updated_by=user_id
 
-                         )
 
-             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 edit_dict_category(user_id, request_dict, response):
 
-         category_id = request_dict.get("categoryId", None)
 
-         scenes = request_dict.get("scenes", 1)
 
-         status = request_dict.get("status", 1)
 
-         remark = request_dict.get("remark", "")
 
-         names = request_dict.get("names", "[]")
 
-         items = request_dict.get("items", "[]")
 
-         now_time = int(time.time())
 
-         try:
 
-             if not category_id:
 
-                 return response.json(444)
 
-             names = json.loads(names)
 
-             items = json.loads(items)
 
-             category = DictCategory.objects.filter(id=category_id).first()
 
-             if not category:
 
-                 return response.json(404, msg="字典类别不存在")
 
-             with transaction.atomic():
 
-                 # 更新主表字段(不允许改 typeCode)
 
-                 category.status = status
 
-                 category.scenes = scenes
 
-                 category.remark = remark
 
-                 category.updated_time = now_time
 
-                 category.updated_by = user_id
 
-                 category.save()
 
-                 if names:
 
-                     # 删除原有多语言并重新插入
 
-                     DictCategoryI18n.objects.filter(category=category).delete()
 
-                     for name_entry in names:
 
-                         DictCategoryI18n.objects.create(
 
-                             category=category,
 
-                             lang_code=name_entry["lang"],
 
-                             name=name_entry["text"],
 
-                             created_time=now_time,
 
-                             updated_time=now_time,
 
-                             created_by=user_id,
 
-                             updated_by=user_id
 
-                         )
 
-                 if not items:
 
-                     return response.json(0)
 
-                 # 删除原有子项及多语言
 
-                 old_items = DictItem.objects.filter(category=category)
 
-                 DictItemI18n.objects.filter(item__in=old_items).delete()
 
-                 old_items.delete()
 
-                 # 插入新子项及其国际化
 
-                 for item in items:
 
-                     item_obj = DictItem.objects.create(
 
-                         category=category,
 
-                         code=item["code"],
 
-                         sort=item.get("sort", 0),
 
-                         status=item.get("status", True),
 
-                         remark=item.get("remark", ""),
 
-                         created_time=now_time,
 
-                         updated_time=now_time,
 
-                         created_by=user_id,
 
-                         updated_by=user_id
 
-                     )
 
-                     for name_entry in item.get("names", []):
 
-                         DictItemI18n.objects.create(
 
-                             item=item_obj,
 
-                             lang_code=name_entry["lang"],
 
-                             name=name_entry["text"],
 
-                             created_time=now_time,
 
-                             updated_time=now_time,
 
-                             created_by=user_id,
 
-                             updated_by=user_id
 
-                         )
 
-             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 delete_dict_category(request_dict, response):
 
-         category_id = request_dict.get("categoryId", None)
 
-         try:
 
-             if not category_id:
 
-                 return response.json(444)
 
-             category = DictCategory.objects.filter(id=category_id).first()
 
-             if not category:
 
-                 return response.json(173)
 
-             with transaction.atomic():
 
-                 # 删除子项和对应的国际化
 
-                 items = DictItem.objects.filter(category=category)
 
-                 DictItemI18n.objects.filter(item__in=items).delete()
 
-                 items.delete()
 
-                 # 删除类别国际化和主表记录
 
-                 DictCategoryI18n.objects.filter(category=category).delete()
 
-                 category.delete()
 
-             return response.json(0)
 
-         except Exception as e:
 
-             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
  |