schema.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # -*- coding: utf-8 -*-
  2. from pydantic import BaseModel, ConfigDict, Field
  3. from fastapi import Query
  4. from app.core.validator import DateTimeStr
  5. from app.core.base_schema import BaseSchema, UserBySchema
  6. class BizVarDictCreateSchema(BaseModel):
  7. """
  8. 变量信息新增模型
  9. """
  10. crane_no: str = Field(default=..., description='行车编号')
  11. var_code: str = Field(default=..., description='变量code')
  12. var_name: str = Field(default=..., description='变量名称')
  13. mec_type: int = Field(default=..., description='所属机构')
  14. data_type: int = Field(default=..., description='数据类型')
  15. switch_type: int | None = Field(default=None, description='变量类型')
  16. addr: str = Field(default=..., description='采集地址')
  17. gateway_id: int = Field(default=..., description='网关id')
  18. var_sort: int | None = Field(default=None, description='排序')
  19. var_group: int | None = Field(default=None, description='变量分组')
  20. var_category: int = Field(default=..., description='变量分类')
  21. translate: str | None = Field(default=None, description='绑定公式')
  22. device_no: str | None = Field(default=None, description='关联设备编号 ')
  23. is_reverse: int | None = Field(default=None, description='是否取反')
  24. is_top_show: int = Field(default=..., description='是否重点显示')
  25. is_save: int = Field(default=..., description='是否生成')
  26. is_calibration: int | None = Field(default=None, description='是否标定')
  27. is_overview_top_show: int = Field(default=..., description='是否首页重点显示')
  28. is_home_page_show: int = Field(default=..., description='是否首页显示')
  29. is_diagnose: int | None = Field(default=None, description='是否启用诊断专家')
  30. is_upload: int = Field(default=..., description='是否上传云平台')
  31. diagnosis_id: str | None = Field(default=None, description='关联诊断专家')
  32. status: str = Field(default="1", description='是否启用')
  33. description: str | None = Field(default=None, max_length=255, description='备注/描述')
  34. class BizVarDictUpdateSchema(BizVarDictCreateSchema):
  35. """
  36. 变量信息更新模型
  37. """
  38. ...
  39. class BizVarDictOutSchema(BizVarDictCreateSchema, BaseSchema, UserBySchema):
  40. """
  41. 变量信息响应模型
  42. """
  43. model_config = ConfigDict(from_attributes=True)
  44. class BizVarDictQueryParam:
  45. """变量信息查询参数"""
  46. def __init__(
  47. self,
  48. var_code: str | None = Query(None, description="变量code"),
  49. var_name: str | None = Query(None, description="变量名称"),
  50. addr: str | None = Query(None, description="modbus地址"),
  51. device_no: str | None = Query(None, description="关联设备编号 "),
  52. diagnosis_id: str | None = Query(None, description="关联诊断专家"),
  53. status: str | None = Query(None, description="是否启用"),
  54. crane_no: str | None = Query(None, description=""),
  55. mec_type: int | None = Query(None, description="所属机构"),
  56. data_type: int | None = Query(None, description="数据类型"),
  57. switch_type: int | None = Query(None, description="变量类型"),
  58. gateway_id: int | None = Query(None, description="网关"),
  59. var_sort: int | None = Query(None, description="排序"),
  60. var_group: int | None = Query(None, description="变量分组"),
  61. var_category: int | None = Query(None, description="变量分类"),
  62. translate: str | None = Query(None, description="绑定公式"),
  63. is_reverse: int | None = Query(None, description="是否取反"),
  64. is_top_show: int | None = Query(None, description="是否重点显示"),
  65. is_save: int | None = Query(None, description="是否生成"),
  66. is_calibration: int | None = Query(None, description="是否标定"),
  67. is_overview_top_show: int | None = Query(None, description="是否首页重点显示"),
  68. is_home_page_show: int | None = Query(None, description="是否首页显示"),
  69. is_diagnose: int | None = Query(None, description="是否启用诊断专家"),
  70. is_upload: int | None = Query(None, description="是否上传云平台"),
  71. created_id: int | None = Query(None, description="创建人ID"),
  72. updated_id: int | None = Query(None, description="更新人ID"),
  73. created_time: list[DateTimeStr] | None = Query(None, description="创建时间范围", examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
  74. updated_time: list[DateTimeStr] | None = Query(None, description="更新时间范围", examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
  75. # 新增:场景区分参数,默认 False(代表后台内部请求),True 代表前端接口请求
  76. is_api_request: bool | None = Query(False, description="是否为前端接口请求(用于切换 switch_type 查询方式)")
  77. ) -> None:
  78. # 精确查询字段
  79. self.crane_no = crane_no
  80. # 模糊查询字段
  81. self.var_code = ("like", var_code)
  82. # 模糊查询字段
  83. self.var_name = ("like", var_name)
  84. # 精确查询字段
  85. self.mec_type = mec_type
  86. # 精确查询字段
  87. self.data_type = data_type
  88. if is_api_request:
  89. self.switch_type = (">=", switch_type)
  90. else:
  91. self.switch_type = switch_type
  92. # 模糊查询字段
  93. self.addr = ("like", addr)
  94. # 精确查询字段
  95. self.gateway_id = gateway_id
  96. # 精确查询字段
  97. self.var_sort = var_sort
  98. # 精确查询字段
  99. self.var_group = var_group
  100. # 精确查询字段
  101. self.var_category = var_category
  102. # 精确查询字段
  103. self.translate = translate
  104. # 模糊查询字段
  105. self.device_no = ("like", device_no)
  106. # 精确查询字段
  107. self.is_reverse = is_reverse
  108. # 精确查询字段
  109. self.is_top_show = is_top_show
  110. # 精确查询字段
  111. self.is_save = is_save
  112. # 精确查询字段
  113. self.is_calibration = is_calibration
  114. # 精确查询字段
  115. self.is_overview_top_show = is_overview_top_show
  116. # 精确查询字段
  117. self.is_home_page_show = is_home_page_show
  118. # 精确查询字段
  119. self.is_diagnose = is_diagnose
  120. # 精确查询字段
  121. self.is_upload = is_upload
  122. # 模糊查询字段
  123. self.diagnosis_id = ("like", diagnosis_id)
  124. # 模糊查询字段
  125. self.status = ("like", status)
  126. # 精确查询字段
  127. self.created_id = created_id
  128. # 精确查询字段
  129. self.updated_id = updated_id
  130. # 时间范围查询
  131. if created_time and len(created_time) == 2:
  132. self.created_time = ("between", (created_time[0], created_time[1]))
  133. if updated_time and len(updated_time) == 2:
  134. self.updated_time = ("between", (updated_time[0], updated_time[1]))
  135. class VarDictMecGroupSchema(BaseModel):
  136. """
  137. 行车信息页面数据模型
  138. """
  139. mec_type: str = Field(default=..., description='所属机构')
  140. alarm_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='报警变量数据')
  141. digital_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='开关量变量数据')
  142. analog_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='模拟量变量数据')
  143. varList_simple: list[BizVarDictOutSchema] | None = Field(default=None, description='变量数据')