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