diff --git a/src/backend/app/database/__init__.py b/src/backend/app/database/__init__.py index 990816e..502f80e 100644 --- a/src/backend/app/database/__init__.py +++ b/src/backend/app/database/__init__.py @@ -38,8 +38,8 @@ class User(db.Model): email = db.Column(String(100), unique=True, nullable=False, index=True, comment='邮箱') role_id = db.Column(Integer, ForeignKey('role.role_id'), nullable=False, comment='外键关联role表') is_active = db.Column(Boolean, default=True, comment='是否激活') - created_at = db.Column(DateTime, default=datetime.utcnow, comment='创建时间') - updated_at = db.Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment='更新时间') + created_at = db.Column(DateTime, default=datetime.now, comment='创建时间') + updated_at = db.Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间') # 关系 role = db.relationship('Role', backref=db.backref('users', lazy='dynamic')) @@ -177,8 +177,8 @@ class UserConfig(db.Model): perturbation_configs_id = db.Column(Integer, ForeignKey('perturbation_configs.perturbation_configs_id'), default=None, comment='默认加噪算法') perturbation_intensity = db.Column(Float, default=None, comment='默认扰动强度') finetune_configs_id = db.Column(Integer, ForeignKey('finetune_configs.finetune_configs_id'), default=None, comment='默认微调方式') - created_at = db.Column(DateTime, default=datetime.utcnow) - updated_at = db.Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + created_at = db.Column(DateTime, default=datetime.now) + updated_at = db.Column(DateTime, default=datetime.now, onupdate=datetime.now) # 关系 data_type = db.relationship('DataType') @@ -212,7 +212,7 @@ class Task(db.Model): tasks_type_id = db.Column(Integer, ForeignKey('task_type.task_type_id'), nullable=False, comment='任务类型') user_id = db.Column(Integer, ForeignKey('users.user_id'), nullable=False, index=True, comment='归属用户') tasks_status_id = db.Column(Integer, ForeignKey('task_status.task_status_id'), nullable=False, comment='任务状态ID') - created_at = db.Column(DateTime, default=datetime.utcnow) + created_at = db.Column(DateTime, default=datetime.now) started_at = db.Column(DateTime, default=None) finished_at = db.Column(DateTime, default=None) error_message = db.Column(Text, comment='错误信息') diff --git a/src/backend/app/repositories/task_repository.py b/src/backend/app/repositories/task_repository.py index 446b958..872a51f 100644 --- a/src/backend/app/repositories/task_repository.py +++ b/src/backend/app/repositories/task_repository.py @@ -121,9 +121,9 @@ class TaskRepository(BaseRepository[Task]): # 自动更新时间戳 if status_code == 'processing': - task.started_at = datetime.utcnow() + task.started_at = datetime.now() elif status_code in ('completed', 'failed'): - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() return True diff --git a/src/backend/app/services/image/image_storage.py b/src/backend/app/services/image/image_storage.py index ec2beb5..8c705ae 100644 --- a/src/backend/app/services/image/image_storage.py +++ b/src/backend/app/services/image/image_storage.py @@ -242,7 +242,7 @@ class ImageStorage: def _save_with_unique_name(self, image, target_dir: str) -> Tuple[str, str, int, int, int]: """保存图片并生成唯一文件名""" - timestamp = datetime.utcnow().strftime('%Y%m%d%H%M%S%f') + timestamp = datetime.now().strftime('%Y%m%d%H%M%S%f') filename = f"{timestamp}_{uuid.uuid4().hex[:6]}.png" path = os.path.join(target_dir, filename) diff --git a/src/backend/app/services/image_service.py b/src/backend/app/services/image_service.py index f4021ed..9ed2272 100644 --- a/src/backend/app/services/image_service.py +++ b/src/backend/app/services/image_service.py @@ -249,7 +249,7 @@ class ImageService: import uuid from datetime import datetime - timestamp = datetime.utcnow().strftime('%Y%m%d%H%M%S%f') + timestamp = datetime.now().strftime('%Y%m%d%H%M%S%f') filename = f"{timestamp}_{uuid.uuid4().hex[:6]}.png" path = os.path.join(target_dir, filename) image.save(path, format='PNG') diff --git a/src/backend/app/services/task_service.py b/src/backend/app/services/task_service.py index 669a711..3ce39eb 100644 --- a/src/backend/app/services/task_service.py +++ b/src/backend/app/services/task_service.py @@ -234,7 +234,7 @@ class TaskService: @staticmethod def generate_flow_id(): """生成唯一的flow_id""" - base = int(datetime.utcnow().timestamp() * 1000) + base = int(datetime.now().timestamp() * 1000) task_repo = _get_task_repo() while task_repo.find_one_by(flow_id=base): base += 1 @@ -468,7 +468,7 @@ class TaskService: logger.warning(f"Could not cancel/stop RQ job: {e}") # 更新为cancelled if task_repo.update_status(task, 'cancelled'): - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() return task_repo.save() return False except Exception as e: diff --git a/src/backend/app/services/vip_service.py b/src/backend/app/services/vip_service.py index 8b883b2..56c6ea4 100644 --- a/src/backend/app/services/vip_service.py +++ b/src/backend/app/services/vip_service.py @@ -108,7 +108,7 @@ class VipService: code_info = { 'used': True, 'used_by': user_id, - 'used_at': datetime.utcnow().isoformat() + 'used_at': datetime.now().isoformat() } # 已使用的邀请码保留90天记录 @@ -137,7 +137,7 @@ class VipService: 'used': False, 'used_by': None, 'used_at': None, - 'created_at': datetime.utcnow().isoformat(), + 'created_at': datetime.now().isoformat(), 'expires_days': expires_days } diff --git a/src/backend/app/workers/evaluate_worker.py b/src/backend/app/workers/evaluate_worker.py index 0a3dd2e..5618cc3 100644 --- a/src/backend/app/workers/evaluate_worker.py +++ b/src/backend/app/workers/evaluate_worker.py @@ -55,7 +55,7 @@ def run_evaluate_task(task_id, clean_ref_dir, clean_output_dir, processing_status = TaskStatus.query.filter_by(task_status_code='processing').first() if processing_status: task.tasks_status_id = processing_status.task_status_id - task.started_at = datetime.utcnow() + task.started_at = datetime.now() db.session.commit() logger.info(f"Starting evaluate task {task_id}") @@ -104,7 +104,7 @@ def run_evaluate_task(task_id, clean_ref_dir, clean_output_dir, completed_status = TaskStatus.query.filter_by(task_status_code='completed').first() if completed_status: task.tasks_status_id = completed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() logger.info(f"Evaluate task {task_id} completed") @@ -117,7 +117,7 @@ def run_evaluate_task(task_id, clean_ref_dir, clean_output_dir, failed_status = TaskStatus.query.filter_by(task_status_code='failed').first() if failed_status: task.tasks_status_id = failed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() return {'success': False, 'error': str(e)} diff --git a/src/backend/app/workers/finetune_worker.py b/src/backend/app/workers/finetune_worker.py index d91b7c6..8c3c4bd 100644 --- a/src/backend/app/workers/finetune_worker.py +++ b/src/backend/app/workers/finetune_worker.py @@ -60,7 +60,7 @@ def run_finetune_task(task_id, finetune_method, train_images_dir, if processing_status: task.tasks_status_id = processing_status.task_status_id if not task.started_at: - task.started_at = datetime.utcnow() + task.started_at = datetime.now() db.session.commit() logger.info(f"Method: {finetune_method}, finetune_type: {finetune_type}") @@ -181,7 +181,7 @@ def run_finetune_task(task_id, finetune_method, train_images_dir, completed_status = TaskStatus.query.filter_by(task_status_code='completed').first() if completed_status: task.tasks_status_id = completed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() logger.info(f"Finetune task {task_id} completed successfully") @@ -195,7 +195,7 @@ def run_finetune_task(task_id, finetune_method, train_images_dir, failed_status = TaskStatus.query.filter_by(task_status_code='failed').first() if failed_status: task.tasks_status_id = failed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() task.error_message = str(e) db.session.commit() except: diff --git a/src/backend/app/workers/heatmap_worker.py b/src/backend/app/workers/heatmap_worker.py index 0d57dd5..4b3d00b 100644 --- a/src/backend/app/workers/heatmap_worker.py +++ b/src/backend/app/workers/heatmap_worker.py @@ -54,7 +54,7 @@ def run_heatmap_task(task_id, original_image_path, perturbed_image_path, processing_status = TaskStatus.query.filter_by(task_status_code='processing').first() if processing_status: task.tasks_status_id = processing_status.task_status_id - task.started_at = datetime.utcnow() + task.started_at = datetime.now() db.session.commit() logger.info(f"Starting heatmap task {task_id}") @@ -127,7 +127,7 @@ def run_heatmap_task(task_id, original_image_path, perturbed_image_path, completed_status = TaskStatus.query.filter_by(task_status_code='completed').first() if completed_status: task.tasks_status_id = completed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() logger.info(f"Heatmap task {task_id} completed") @@ -140,7 +140,7 @@ def run_heatmap_task(task_id, original_image_path, perturbed_image_path, failed_status = TaskStatus.query.filter_by(task_status_code='failed').first() if failed_status: task.tasks_status_id = failed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() return {'success': False, 'error': str(e)} diff --git a/src/backend/app/workers/perturbation_worker.py b/src/backend/app/workers/perturbation_worker.py index 10ae359..4f891f6 100644 --- a/src/backend/app/workers/perturbation_worker.py +++ b/src/backend/app/workers/perturbation_worker.py @@ -59,7 +59,7 @@ def run_perturbation_task(task_id, algorithm_code, epsilon, input_dir, output_di processing_status = TaskStatus.query.filter_by(task_status_code='processing').first() if processing_status: task.tasks_status_id = processing_status.task_status_id - task.started_at = datetime.utcnow() + task.started_at = datetime.now() db.session.commit() logger.info(f"Starting perturbation task {task_id}") @@ -119,7 +119,7 @@ def run_perturbation_task(task_id, algorithm_code, epsilon, input_dir, output_di completed_status = TaskStatus.query.filter_by(task_status_code='completed').first() if completed_status: task.tasks_status_id = completed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() db.session.commit() logger.info(f"Perturbation task {task_id} completed successfully") @@ -132,7 +132,7 @@ def run_perturbation_task(task_id, algorithm_code, epsilon, input_dir, output_di failed_status = TaskStatus.query.filter_by(task_status_code='failed').first() if failed_status: task.tasks_status_id = failed_status.task_status_id - task.finished_at = datetime.utcnow() + task.finished_at = datetime.now() task.error_message = str(e) db.session.commit() diff --git a/src/backend/tests/factories.py b/src/backend/tests/factories.py index 8785ee6..9cf34bc 100644 --- a/src/backend/tests/factories.py +++ b/src/backend/tests/factories.py @@ -157,7 +157,7 @@ class TaskFactory(BaseFactory): user_id = factory.LazyAttribute(lambda obj: UserFactory().user_id) tasks_status_id = 1 # waiting description = factory.Faker('sentence', locale='zh_CN') - created_at = factory.LazyFunction(datetime.utcnow) + created_at = factory.LazyFunction(datetime.now) class PerturbationTaskFactory(TaskFactory):