targets.py 3.2 KB

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