1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import tools.utils as utils
- from core.dtos import ProjectTaskDto, ProjectQuotaDto, QuotaInputDto
- from core.enum import SendStatusEnum
- from stores import ProjectQuotaStore, ProjectTaskStore,QuotaInputStore
- class TaskSender:
- def __init__(self):
- self._logger = utils.get_logger()
- self._task_store = ProjectTaskStore()
- self._quota_store = ProjectQuotaStore()
- self._quota_input_store = QuotaInputStore()
- def send_task(self, task:ProjectTaskDto):
- try:
- self._logger.info(f"开始发送任务:{task.task_name}")
- self._task_store.update_send_status(task.id, SendStatusEnum.PROCESSING.value)
- error_count = 0
- data_list = self._quota_store.get_quotas_by_task_id(task.id,True)
- for data in data_list:
- msg = self._quota_store.update_send_status(data.id,SendStatusEnum.PROCESSING.value)
- if msg:
- error_count+=1
- continue
- self._task_store.update_send_status(task.id,SendStatusEnum.SUCCESS.value)
- self._logger.info(f"发送任务:{task.task_name}完成,{error_count}项错误/共{len(data_list)}项")
- return None
- except Exception as e:
- msg = f"任务发送失败,原因:{e}"
- self._logger.error(f"发送任务:{task.task_name},{msg}")
- self._task_store.update_send_status(task.id, SendStatusEnum.FAILURE.value, msg)
- return msg
- def send_quota(self,quota:ProjectQuotaDto):
- try:
- self._logger.info(f"开始发送定额:{quota.id}")
- self._quota_store.update_send_status(quota.id, SendStatusEnum.PROCESSING.value)
- quota_input = QuotaInputDto.from_quota_dto(quota)
- self._save_quota(quota_input,quota.project_id)
- self._quota_store.update_send_status(quota.id, SendStatusEnum.SUCCESS.value)
- self._logger.info(f"发送定额:{quota.id}完成")
- return None
- except Exception as e:
- msg = f"定额发送失败,原因:{e}"
- self._logger.error(f"发送定额:{quota.id},{msg}")
- self._quota_store.update_send_status(quota.id, SendStatusEnum.FAILURE.value, msg)
- return msg
- def _save_quota(self,quota:QuotaInputDto,project_id:str):
- try:
- self._logger.info(f"开始保存定额:{quota.id}")
- data = self._quota_input_store.get_quota(project_id, quota.budget_id,quota.item_id,quota.quota_code)
- if data:
- self._quota_input_store.update_quota(project_id, quota)
- else:
- self._quota_input_store.create_quota(project_id, quota)
- except Exception as e:
- msg = f"保存定额失败,原因:{e}"
- self._logger.error(f"保存定额:{quota.id},{msg}")
- raise Exception(msg)
|