schema.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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. crane_name: str | None = Field(default=None, max_length=255, description='行车名')
  35. class BizVarDictUpdateSchema(BizVarDictCreateSchema):
  36. """
  37. 变量信息更新模型
  38. """
  39. ...
  40. class BizVarDictOutSchema(BizVarDictCreateSchema, BaseSchema, UserBySchema):
  41. """
  42. 变量信息响应模型
  43. """
  44. model_config = ConfigDict(from_attributes=True)
  45. class BizVarDictQueryParam:
  46. """变量信息查询参数"""
  47. def __init__(
  48. self,
  49. var_code: str | None = Query(None, description="变量code"),
  50. var_name: str | None = Query(None, description="变量名称"),
  51. addr: str | None = Query(None, description="modbus地址"),
  52. device_no: str | None = Query(None, description="关联设备编号 "),
  53. diagnosis_id: str | None = Query(None, description="关联诊断专家"),
  54. status: str | None = Query(None, description="是否启用"),
  55. crane_no: str | None = Query(None, description=""),
  56. mec_type: int | None = Query(None, description="所属机构"),
  57. data_type: int | None = Query(None, description="数据类型"),
  58. switch_type: int | None = Query(None, description="变量类型"),
  59. gateway_id: int | None = Query(None, description="网关"),
  60. var_sort: int | None = Query(None, description="排序"),
  61. var_group: int | None = Query(None, description="变量分组"),
  62. var_category: int | None = Query(None, description="变量分类"),
  63. translate: str | None = Query(None, description="绑定公式"),
  64. is_reverse: int | None = Query(None, description="是否取反"),
  65. is_top_show: int | None = Query(None, description="是否重点显示"),
  66. is_save: int | None = Query(None, description="是否生成"),
  67. is_calibration: int | None = Query(None, description="是否标定"),
  68. is_overview_top_show: int | None = Query(None, description="是否首页重点显示"),
  69. is_home_page_show: int | None = Query(None, description="是否首页显示"),
  70. is_diagnose: int | None = Query(None, description="是否启用诊断专家"),
  71. is_upload: int | None = Query(None, description="是否上传云平台"),
  72. created_id: int | None = Query(None, description="创建人ID"),
  73. updated_id: int | None = Query(None, description="更新人ID"),
  74. created_time: list[DateTimeStr] | None = Query(None, description="创建时间范围", examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
  75. updated_time: list[DateTimeStr] | None = Query(None, description="更新时间范围", examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"]),
  76. ) -> None:
  77. # 精确查询字段
  78. self.crane_no = crane_no
  79. # 模糊查询字段
  80. self.var_code = ("like", var_code)
  81. # 模糊查询字段
  82. self.var_name = ("like", var_name)
  83. # 精确查询字段
  84. self.mec_type = mec_type
  85. # 精确查询字段
  86. self.data_type = data_type
  87. self.switch_type = switch_type
  88. # 模糊查询字段
  89. self.addr = ("like", addr)
  90. # 精确查询字段
  91. self.gateway_id = gateway_id
  92. # 精确查询字段
  93. self.var_sort = var_sort
  94. # 精确查询字段
  95. self.var_group = var_group
  96. # 精确查询字段
  97. self.var_category = var_category
  98. # 精确查询字段
  99. self.translate = translate
  100. # 模糊查询字段
  101. self.device_no = ("like", device_no)
  102. # 精确查询字段
  103. self.is_reverse = is_reverse
  104. # 精确查询字段
  105. self.is_top_show = is_top_show
  106. # 精确查询字段
  107. self.is_save = is_save
  108. # 精确查询字段
  109. self.is_calibration = is_calibration
  110. # 精确查询字段
  111. self.is_overview_top_show = is_overview_top_show
  112. # 精确查询字段
  113. self.is_home_page_show = is_home_page_show
  114. # 精确查询字段
  115. self.is_diagnose = is_diagnose
  116. # 精确查询字段
  117. self.is_upload = is_upload
  118. # 模糊查询字段
  119. self.diagnosis_id = ("like", diagnosis_id)
  120. # 模糊查询字段
  121. self.status = ("like", status)
  122. # 精确查询字段
  123. self.created_id = created_id
  124. # 精确查询字段
  125. self.updated_id = updated_id
  126. # 时间范围查询
  127. if created_time and len(created_time) == 2:
  128. self.created_time = ("between", (created_time[0], created_time[1]))
  129. if updated_time and len(updated_time) == 2:
  130. self.updated_time = ("between", (updated_time[0], updated_time[1]))
  131. class VarDictMecGroupSchema(BaseModel):
  132. """
  133. 行车信息机构分组数据模型
  134. """
  135. mec_type: str = Field(default=..., description='所属机构')
  136. alarm_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='报警变量数据')
  137. digital_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='开关量变量数据')
  138. analog_varList: list[BizVarDictOutSchema] | None = Field(default=None, description='模拟量变量数据')
  139. mecVarList_simple: list[BizVarDictOutSchema] | None = Field(default=None, description='变量数据')