task_sender.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import tools.utils as utils
  2. from core.dtos import ProjectTaskDto, ProjectQuotaDto, QuotaInputDto
  3. from core.enum import SendStatusEnum
  4. from stores import ProjectQuotaStore, ProjectTaskStore,QuotaInputStore
  5. class TaskSender:
  6. def __init__(self):
  7. self._logger = utils.get_logger()
  8. self._task_store = ProjectTaskStore()
  9. self._quota_store = ProjectQuotaStore()
  10. self._quota_input_store = QuotaInputStore()
  11. def send_task(self, task:ProjectTaskDto):
  12. try:
  13. self._logger.info(f"开始发送任务:{task.task_name}")
  14. self._task_store.update_send_status(task.id, SendStatusEnum.PROCESSING.value)
  15. error_count = 0
  16. data_list = self._quota_store.get_quotas_by_task_id(task.id,True)
  17. for data in data_list:
  18. msg = self._quota_store.update_send_status(data.id,SendStatusEnum.PROCESSING.value)
  19. if msg:
  20. error_count+=1
  21. continue
  22. self._task_store.update_send_status(task.id,SendStatusEnum.SUCCESS.value)
  23. self._logger.info(f"发送任务:{task.task_name}完成,{error_count}项错误/共{len(data_list)}项")
  24. return None
  25. except Exception as e:
  26. msg = f"任务发送失败,原因:{e}"
  27. self._logger.error(f"发送任务:{task.task_name},{msg}")
  28. self._task_store.update_send_status(task.id, SendStatusEnum.FAILURE.value, msg)
  29. return msg
  30. def send_quota(self,quota:ProjectQuotaDto):
  31. try:
  32. self._logger.info(f"开始发送定额:{quota.id}")
  33. self._quota_store.update_send_status(quota.id, SendStatusEnum.PROCESSING.value)
  34. quota_input = QuotaInputDto.from_quota_dto(quota)
  35. self._save_quota(quota_input,quota.project_id)
  36. self._quota_store.update_send_status(quota.id, SendStatusEnum.SUCCESS.value)
  37. self._logger.info(f"发送定额:{quota.id}完成")
  38. return None
  39. except Exception as e:
  40. msg = f"定额发送失败,原因:{e}"
  41. self._logger.error(f"发送定额:{quota.id},{msg}")
  42. self._quota_store.update_send_status(quota.id, SendStatusEnum.FAILURE.value, msg)
  43. return msg
  44. def _save_quota(self,quota:QuotaInputDto,project_id:str):
  45. try:
  46. self._logger.info(f"开始保存定额:{quota.id}")
  47. data = self._quota_input_store.get_quota(project_id, quota.budget_id,quota.item_id,quota.quota_code)
  48. if data:
  49. self._quota_input_store.update_quota(project_id, quota)
  50. else:
  51. self._quota_input_store.create_quota(project_id, quota)
  52. except Exception as e:
  53. msg = f"保存定额失败,原因:{e}"
  54. self._logger.error(f"保存定额:{quota.id},{msg}")
  55. raise Exception(msg)