targets.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 TargetReadjustResponse, RegulatedTargetResponse
  14. from app.utils.date import get_time_str
  15. router = APIRouter()
  16. @router.get("/adjust", response_model=TargetReadjustResponse)
  17. async def readjust_target(
  18. project_id: str = Query(..., max_length=50, regex="^Pj", alias="projectId"),
  19. space_id: str = Query(..., max_length=50, regex="^Sp", alias="roomId"),
  20. timestamp: Optional[str] = Query(None, min_length=14, max_length=14, alias="time"),
  21. feedback: Optional[FeedbackValue] = Query(None, alias="itemId"),
  22. ):
  23. if not timestamp:
  24. timestamp = get_time_str()
  25. try:
  26. if feedback != FeedbackValue.null:
  27. if project_id == "Pj1101050030":
  28. need_run_room_control = await temperature_target_control_v1(
  29. project_id, space_id, feedback
  30. )
  31. else:
  32. need_run_room_control = await temperature_target_control_v2(
  33. project_id, space_id, feedback
  34. )
  35. else:
  36. need_run_room_control = True
  37. except Exception as e:
  38. logger.error(e)
  39. raise HTTPException(
  40. status_code=500, detail="Oops, something wrong has happened"
  41. )
  42. response = {
  43. "projectId": project_id,
  44. "roomId": space_id,
  45. "flag": 1 if need_run_room_control else 0,
  46. "time": timestamp,
  47. }
  48. return response
  49. @router.get("/adjust/v2", response_model=TargetReadjustResponse)
  50. async def readjust_target_v2(
  51. project_id: str = Query(..., max_length=50, regex="^Pj", alias="project-id"),
  52. space_id: str = Query(..., max_length=50, regex="^Sp", alias="space-id"),
  53. feedback: Optional[FeedbackValue] = Query(None),
  54. ):
  55. if feedback != FeedbackValue.null:
  56. try:
  57. need_run_room_control = await temperature_target_control_v2(
  58. project_id, space_id, feedback
  59. )
  60. except Exception as e:
  61. logger.error(e)
  62. raise HTTPException(
  63. status_code=500, detail="Oops, something wrong has happened!"
  64. )
  65. else:
  66. need_run_room_control = True
  67. response = {
  68. "projectId": project_id,
  69. "roomId": space_id,
  70. "flag": 1 if need_run_room_control else 0,
  71. "time": get_time_str(),
  72. }
  73. return response
  74. @router.get("/regulated/value", response_model=RegulatedTargetResponse)
  75. async def read_regulated_value(
  76. project_id: str = Query(..., max_length=50, regex="^Pj", alias="projectId"),
  77. space_id: str = Query(..., max_length=50, regex="^Sp", alias="spaceId"),
  78. feedback: Optional[FeedbackValue] = Query(None),
  79. ):
  80. new_actual_target = await get_target_after_feedback(project_id, space_id, feedback)
  81. response = {
  82. "projectId": project_id,
  83. "spaceId": space_id,
  84. "isTemporary": False,
  85. "temperature": {"min": new_actual_target, "max": new_actual_target},
  86. }
  87. return response