task_sender.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import tools.utils as utils, core.configs as configs
  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.SUCCESS.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(
  19. data.id, SendStatusEnum.SUCCESS.value
  20. )
  21. if msg:
  22. error_count += 1
  23. continue
  24. self._task_store.update_send_status(task.id, SendStatusEnum.SUCCESS.value)
  25. self._logger.info(
  26. f"推送任务:{task.task_name}完成,{error_count}项错误/共{len(data_list)}项"
  27. )
  28. return None
  29. except Exception as e:
  30. msg = f"任务推送失败,原因:{e}"
  31. self._logger.error(f"推送任务:{task.task_name},{msg}")
  32. self._task_store.update_send_status(
  33. task.id, SendStatusEnum.FAILURE.value, msg
  34. )
  35. return msg
  36. def send_quota(self, quota: ProjectQuotaDto):
  37. try:
  38. self._logger.debug(f"开始推送定额输入[{quota.id}]")
  39. self._quota_store.update_send_status(quota.id, SendStatusEnum.SUCCESS.value)
  40. quota_input = QuotaInputDto.from_quota_dto(quota)
  41. self._save_quota(quota_input, quota.project_id)
  42. # self._quota_store.update_send_status(quota.id, SendStatusEnum.SUCCESS.value)
  43. self._logger.debug(f"推送定额输入[{quota.id}]完成")
  44. return None
  45. except Exception as e:
  46. msg = f"定额输入[{quota.id}]推送失败,原因:{e}"
  47. self._logger.error(msg)
  48. self._quota_store.update_send_status(
  49. quota.id, SendStatusEnum.FAILURE.value, msg
  50. )
  51. return msg
  52. def _save_quota(self, quota: QuotaInputDto, project_id: str):
  53. try:
  54. # data = self._quota_input_store.get_quota(project_id, quota.budget_id,quota.item_id,quota.quota_code)
  55. quota.project_name = f"{quota.project_name}{configs.app.ai_flag}"
  56. if quota.quota_id and quota.quota_id > 0:
  57. self._logger.debug(
  58. f"修改定额输入[{quota.quota_id}]:{quota.project_name} {quota.quota_code} {quota.quota_id}"
  59. )
  60. self._quota_input_store.update_quota(project_id, quota)
  61. else:
  62. self._quota_input_store.create_quota(project_id, quota)
  63. self._logger.debug(
  64. f"新增定额输入[{quota.quota_id}]:{quota.project_name} {quota.quota_code} {quota.quota_id}"
  65. )
  66. except Exception as e:
  67. msg = f"保存定额[{quota.quota_id}]输入失败,原因:{e}"
  68. self._logger.error(msg)
  69. raise Exception(msg)