| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- # -*- coding: utf-8 -*-
- # @Author : YY
- from typing import List
- from typing_extensions import Annotated
- from pydantic import BeforeValidator
- import json
- from datetime import datetime
- from flask import Response
- from ruoyi_common.constant import UserConstants
- from ruoyi_common.base.model import AjaxResponse, TableResponse
- from ruoyi_common.base.transformer import ids_to_list
- # from ruoyi_common.domain.entity import SysPriceConf
- from ruoyi_common.domain.entity import SysPriceConf
- from ruoyi_common.domain.enum import BusinessType
- from ruoyi_common.descriptor.serializer import JsonSerializer, BaseSerializer
- from ruoyi_common.descriptor.validator import BodyValidator, QueryValidator, PathValidator, FileDownloadValidator
- from ruoyi_common.utils import security_util as SecurityUtil
- from ruoyi_system.service.module_conf.price_info_conf import SysModulePriceinfoConfService
- from ruoyi_framework.descriptor.log import Log
- from ruoyi_framework.descriptor.permission import HasPerm, PreAuthorize
- from ... import reg
- @reg.api.route("/system/moduleConf/priceConf/list", methods=["GET"])
- @QueryValidator(is_page=True)
- # @PreAuthorize(HasPerm("moduleConf:priceConf:list"))
- @JsonSerializer()
- def system_priceinfo_conf_list(dto:SysPriceConf):
- '''
- 获取价目配置列表
- '''
- rows = SysModulePriceinfoConfService.select_priceinfo_conf_list(dto)
- table_response = TableResponse(rows=rows)
- return table_response
- @reg.api.route("/system/moduleConf/priceConf/<int:id>", methods=["GET"])
- @PathValidator()
- @PreAuthorize(HasPerm("moduleConf:priceConf:query"))
- @JsonSerializer()
- def module_priceinfo_conf(id:int):
- '''
- 获取价目配置详情
- '''
- # 注意:如果需要数据权限控制,需要实现 check_priceinfo_conf_data_scope 方法
- # SysModulePriceinfoConfService.check_priceinfo_conf_data_scope(id)
- priceinfoConf = SysModulePriceinfoConfService.select_priceinfo_conf_by_id(id)
- ajax_response = AjaxResponse.from_success(data=priceinfoConf)
- return ajax_response
- @reg.api.route("/system/moduleConf/priceConf", methods=["POST"])
- @BodyValidator()
- @PreAuthorize(HasPerm("moduleConf:priceConf:add"))
- @Log(title="价目配置管理",business_type=BusinessType.INSERT)
- @JsonSerializer()
- def system_priceinfo_conf_create(dto:SysPriceConf):
- '''
- 新增价目配置
- '''
- # if UserConstants.NOT_UNIQUE == SysModulePriceinfoConfService.check_priceinfo_conf_name_unique(dto):
- # ajax_response = AjaxResponse.from_error("价目配置名称已存在")
- # return ajax_response
- # 注意:SysPriceConf 不继承 AuditEntity,没有 create_by 等字段,所以不需要调用 create_by_user
- SysModulePriceinfoConfService.insert_conf(dto)
- ajax_response = AjaxResponse.from_success()
- return ajax_response
- @reg.api.route("/system/moduleConf/priceConf", methods=["PUT"])
- @BodyValidator()
- @PreAuthorize(HasPerm("moduleConf:priceConf:edit"))
- @Log(title="价目配置管理",business_type=BusinessType.UPDATE)
- @JsonSerializer()
- def system_priceinfo_conf_update(dto:SysPriceConf):
- '''
- 修改价目配置
- '''
- # SysModulePriceinfoConfService.check_priceinfo_conf_data_scope(dto.priceinfoConf_id)
- # if UserConstants.UNIQUE != SysModulePriceinfoConfService.check_priceinfo_conf_name_unique(dto):
- # return AjaxResponse.from_error("价目配置名称已存在")
- # 注意:SysPriceConf 不继承 AuditEntity,没有 update_by 等字段,所以不需要调用 update_by_user
- flag = SysModulePriceinfoConfService.update_conf(dto)
- return AjaxResponse.from_success() if flag else AjaxResponse.from_error()
- @reg.api.route("/system/moduleConf/priceConf/<ids>", methods=["DELETE"])
- @PathValidator()
- @PreAuthorize(HasPerm("moduleConf:priceConf:remove"))
- @Log(title="价目配置管理",business_type=BusinessType.DELETE)
- @JsonSerializer()
- def system_priceinfo_conf_delete(
- ids: Annotated[List[int], BeforeValidator(ids_to_list)]
- ):
- '''
- 删除价目配置
- '''
- # if SysModulePriceinfoConfService.has_child_by_priceinfo_conf_id(id):
- # return AjaxResponse.from_error("该价目配置存在下级价目配置,不允许删除")
- # if SysModulePriceinfoConfService.check_priceinfo_conf_exist_user(id):
- # return AjaxResponse.from_error("该价目配置存在用户,不允许删除")
- # SysModulePriceinfoConfService.check_priceinfo_conf_data_scope(id)
- flag = SysModulePriceinfoConfService.delete_priceinfo_conf_by_id(ids)
- return AjaxResponse.from_success() if flag > 0 else AjaxResponse.from_error()
- @reg.api.route("/system/moduleConf/priceConf/export", methods=["POST"])
- @FileDownloadValidator()
- @PreAuthorize(HasPerm("moduleConf:priceConf:export"))
- @Log(title="价目配置管理", business_type=BusinessType.EXPORT)
- @BaseSerializer()
- def system_priceinfo_conf_export(dto: SysPriceConf):
- '''
- 导出价目配置列表为JSON
- '''
- try:
- rows = SysModulePriceinfoConfService.select_priceinfo_conf_list(dto)
- # 将Pydantic模型转换为字典
- data = []
- for row in rows:
- try:
- if hasattr(row, 'model_dump'):
- data.append(row.model_dump())
- elif hasattr(row, 'dict'):
- data.append(row.dict())
- else:
- # 如果是字典类型,直接使用
- data.append(dict(row) if hasattr(row, '__iter__') and not isinstance(row, str) else row)
- except Exception as e:
- # 如果序列化失败,尝试使用默认方法
- data.append(str(row))
- # 转换为JSON字符串
- json_str = json.dumps(data, ensure_ascii=False, indent=2, default=str)
- # 创建响应 - 使用application/octet-stream确保前端识别为文件下载
- response = Response(
- json_str.encode('utf-8'),
- mimetype='application/octet-stream',
- headers={
- 'Content-Disposition': f'attachment; filename=priceConf_{datetime.now().strftime("%Y%m%d_%H%M%S")}.json',
- 'Content-Type': 'application/json; charset=utf-8'
- }
- )
- return response
- except Exception as e:
- import traceback
- error_msg = f"导出失败: {str(e)}"
- error_json = json.dumps({"code": 500, "msg": error_msg}, ensure_ascii=False)
- error_response = Response(
- error_json,
- mimetype='application/json',
- status=500
- )
- return error_response
|