targets.py 3.5 KB

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