targets.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # -*- coding: utf-8 -*-
  2. from fastapi import APIRouter, HTTPException, Query
  3. from loguru import logger
  4. from app.controllers.targets.temperature import (
  5. temperature_target_control_v1,
  6. temperature_target_control_v2,
  7. get_target_after_feedback,
  8. )
  9. from app.models.domain.feedback import FeedbackValue
  10. from app.models.domain.targets import (
  11. TargetReadjustResponse,
  12. RegulatedTargetResponse,
  13. TargetReadjustRequestV2,
  14. TargetReadjustResponseV2,
  15. )
  16. from app.utils.date import get_time_str
  17. router = APIRouter()
  18. @router.get("/adjust", response_model=TargetReadjustResponse)
  19. async def readjust_target(
  20. project_id: str = Query(..., max_length=50, regex="^Pj", alias="projectId"),
  21. space_id: str = Query(..., max_length=50, regex="^Sp", alias="roomId"),
  22. timestamp: str | None = Query(None, min_length=14, max_length=14, alias="time"),
  23. feedback: FeedbackValue | None = Query(None, alias="itemId"),
  24. ):
  25. if not timestamp:
  26. timestamp = get_time_str()
  27. try:
  28. if feedback != FeedbackValue.null:
  29. if project_id == "Pj1101050030" or project_id == "Pj1101050039" or project_id == "Pj1101140020":
  30. need_run_room_control = await temperature_target_control_v1(
  31. project_id, space_id, feedback
  32. )
  33. else:
  34. need_run_room_control = await temperature_target_control_v2(
  35. project_id, space_id, feedback
  36. )
  37. else:
  38. need_run_room_control = True
  39. except Exception as e:
  40. logger.error(e)
  41. raise HTTPException(
  42. status_code=500, detail="Oops, something wrong has happened"
  43. )
  44. response = {
  45. "projectId": project_id,
  46. "roomId": space_id,
  47. "flag": 1 if need_run_room_control else 0,
  48. "time": timestamp,
  49. }
  50. return response
  51. @router.get("/adjust/v2", response_model=TargetReadjustResponse)
  52. async def readjust_target_v2(
  53. project_id: str = Query(..., max_length=50, regex="^Pj", alias="project-id"),
  54. space_id: str = Query(..., max_length=50, regex="^Sp", alias="space-id"),
  55. feedback: FeedbackValue | None = Query(None),
  56. ):
  57. if feedback != FeedbackValue.null:
  58. try:
  59. need_run_room_control = await temperature_target_control_v2(
  60. project_id, space_id, feedback
  61. )
  62. except Exception as e:
  63. logger.error(e)
  64. raise HTTPException(
  65. status_code=500, detail="Oops, something wrong has happened!"
  66. )
  67. else:
  68. need_run_room_control = True
  69. response = {
  70. "projectId": project_id,
  71. "roomId": space_id,
  72. "flag": 1 if need_run_room_control else 0,
  73. "time": get_time_str(),
  74. }
  75. return response
  76. @router.post("/readjust", response_model=TargetReadjustResponseV2)
  77. async def get_readjusted_target(params: TargetReadjustRequestV2):
  78. pass
  79. @router.get("/regulated/value", response_model=RegulatedTargetResponse)
  80. async def read_regulated_value(
  81. project_id: str = Query(..., max_length=50, regex="^Pj", alias="projectId"),
  82. space_id: str = Query(..., max_length=50, regex="^Sp", alias="spaceId"),
  83. feedback: FeedbackValue | None = Query(None),
  84. ):
  85. new_actual_target = await get_target_after_feedback(project_id, space_id, feedback)
  86. response = {
  87. "projectId": project_id,
  88. "spaceId": space_id,
  89. "isTemporary": False,
  90. "temperature": {"min": new_actual_target, "max": new_actual_target},
  91. }
  92. return response