targets.py 3.3 KB

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