refactor(core,ai): 调整模块导入路径并移除废弃文件 - 修复 scheduler.py 中的导入路径错误,将 reports.service 改为 reports.services - 移除废弃的 app/core/background/task_queue.py 文件 - 移除废弃的 app/modules/ai_agent/adapters.py 文件 - 修复 ai_memory/service.py 中的导入路径错误,将 events.service 改为 events.services ```
139 lines
5.2 KiB
Python
139 lines
5.2 KiB
Python
from typing import Any
|
|
|
|
|
|
from app.core.config import get_settings
|
|
from app.modules.business.constants import SourceSystem, StatusValue
|
|
from app.modules.legacy_mysql.constants import (
|
|
LEGACY_PROJECT_CODE_TEMPLATE,
|
|
LEGACY_TASK_CODE_TEMPLATE,
|
|
LEGACY_UNNAMED_PROJECT,
|
|
LEGACY_UNNAMED_TASK,
|
|
LegacyProjectField,
|
|
LegacyTaskField,
|
|
)
|
|
|
|
|
|
class LegacyMapperMixin:
|
|
@staticmethod
|
|
def _value(
|
|
row: dict[str, Any],
|
|
field_map: dict[str, str],
|
|
internal_name: str,
|
|
fallback: Any = None,
|
|
) -> Any:
|
|
source_name = field_map.get(internal_name, internal_name)
|
|
if source_name in row:
|
|
return row[source_name]
|
|
return fallback
|
|
|
|
def _project_payload(self, row: dict[str, Any], field_map: dict[str, str]) -> dict[str, Any]:
|
|
settings = get_settings()
|
|
external_id = self._value(
|
|
row,
|
|
field_map,
|
|
LegacyProjectField.EXTERNAL_ID,
|
|
row.get(LegacyProjectField.ID),
|
|
)
|
|
raw_code = self._value(row, field_map, LegacyProjectField.CODE, None)
|
|
code = None
|
|
if raw_code:
|
|
code = str(raw_code)
|
|
elif external_id is not None:
|
|
code = LEGACY_PROJECT_CODE_TEMPLATE.format(
|
|
prefix=settings.legacy_project_code_prefix,
|
|
external_id=external_id,
|
|
)
|
|
return {
|
|
LegacyProjectField.CODE: code,
|
|
LegacyProjectField.EXTERNAL_ID: str(external_id) if external_id is not None else code,
|
|
LegacyProjectField.SOURCE_SYSTEM: SourceSystem.LEGACY_MYSQL,
|
|
LegacyProjectField.NAME: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyProjectField.NAME,
|
|
LEGACY_UNNAMED_PROJECT,
|
|
),
|
|
LegacyProjectField.OWNER: self._value(row, field_map, LegacyProjectField.OWNER, None),
|
|
LegacyProjectField.STATUS: self._value(row, field_map, LegacyProjectField.STATUS, StatusValue.UNKNOWN),
|
|
LegacyProjectField.PROGRESS_PERCENT: int(
|
|
self._value(
|
|
row,
|
|
field_map,
|
|
LegacyProjectField.PROGRESS_PERCENT,
|
|
row.get(LegacyProjectField.PROGRESS) or 0,
|
|
)
|
|
or 0
|
|
),
|
|
LegacyProjectField.START_DATE: self._value(row, field_map, LegacyProjectField.START_DATE, None),
|
|
LegacyProjectField.DUE_DATE: self._value(row, field_map, LegacyProjectField.DUE_DATE, None),
|
|
LegacyProjectField.BUDGET_AMOUNT: (
|
|
self._value(row, field_map, LegacyProjectField.BUDGET_AMOUNT, row.get(LegacyProjectField.BUDGET) or 0) or 0
|
|
),
|
|
LegacyProjectField.ACTUAL_AMOUNT: (
|
|
self._value(row, field_map, LegacyProjectField.ACTUAL_AMOUNT, row.get(LegacyProjectField.ACTUAL_COST) or 0) or 0
|
|
),
|
|
LegacyProjectField.DESCRIPTION: self._value(row, field_map, LegacyProjectField.DESCRIPTION, None),
|
|
}
|
|
|
|
def _task_payload(self, row: dict[str, Any], field_map: dict[str, str]) -> dict[str, Any]:
|
|
settings = get_settings()
|
|
external_id = self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.EXTERNAL_ID,
|
|
row.get(LegacyTaskField.ID),
|
|
)
|
|
raw_code = self._value(row, field_map, LegacyTaskField.CODE, None)
|
|
code = None
|
|
if raw_code:
|
|
code = str(raw_code)
|
|
elif external_id is not None:
|
|
code = LEGACY_TASK_CODE_TEMPLATE.format(
|
|
prefix=settings.legacy_task_code_prefix,
|
|
external_id=external_id,
|
|
)
|
|
return {
|
|
LegacyTaskField.CODE: code,
|
|
LegacyTaskField.EXTERNAL_ID: str(external_id) if external_id is not None else code,
|
|
LegacyTaskField.SOURCE_SYSTEM: SourceSystem.LEGACY_MYSQL,
|
|
LegacyTaskField.TITLE: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.TITLE,
|
|
LEGACY_UNNAMED_TASK,
|
|
),
|
|
LegacyTaskField.PROJECT_CODE: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.PROJECT_CODE,
|
|
None,
|
|
),
|
|
LegacyTaskField.OWNER: self._value(row, field_map, LegacyTaskField.OWNER, None),
|
|
LegacyTaskField.STATUS: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.STATUS,
|
|
StatusValue.TODO,
|
|
),
|
|
LegacyTaskField.PRIORITY: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.PRIORITY,
|
|
"P2",
|
|
),
|
|
LegacyTaskField.DUE_DATE: self._value(row, field_map, LegacyTaskField.DUE_DATE, None),
|
|
LegacyTaskField.COMPLETED_AT: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.COMPLETED_AT,
|
|
None,
|
|
),
|
|
LegacyTaskField.BLOCKER: self._value(row, field_map, LegacyTaskField.BLOCKER, None),
|
|
LegacyTaskField.DESCRIPTION: self._value(
|
|
row,
|
|
field_map,
|
|
LegacyTaskField.DESCRIPTION,
|
|
None,
|
|
),
|
|
}
|