feat: 任务批量创建
This commit is contained in:
62
api/tasks.py
62
api/tasks.py
@@ -101,6 +101,68 @@ def create_task(group_id):
|
||||
return jsonify({'message': '任务创建成功', 'task_id': task.id}), 201
|
||||
|
||||
|
||||
# 批量创建任务(管理员)
|
||||
@tasks_bp.route('/groups/<int:group_id>/tasks/batch', methods=['POST'])
|
||||
@admin_required
|
||||
def batch_create_tasks(group_id):
|
||||
data = request.json
|
||||
tasks_data = data.get('tasks', [])
|
||||
|
||||
if not tasks_data:
|
||||
return jsonify({'error': '任务列表不能为空'}), 400
|
||||
|
||||
user_id = get_jwt_identity()
|
||||
created_tasks = []
|
||||
errors = []
|
||||
|
||||
for idx, task_data in enumerate(tasks_data):
|
||||
try:
|
||||
if not task_data.get('series_name'):
|
||||
errors.append(f'第{idx+1}行:剧集名称不能为空')
|
||||
continue
|
||||
|
||||
if not task_data.get('series_date'):
|
||||
errors.append(f'第{idx+1}行:日期不能为空')
|
||||
continue
|
||||
|
||||
try:
|
||||
series_date = datetime.strptime(task_data['series_date'], '%Y%m%d').date()
|
||||
except:
|
||||
errors.append(f'第{idx+1}行:日期格式错误')
|
||||
continue
|
||||
|
||||
task = Task(
|
||||
group_id=group_id,
|
||||
series_name=task_data['series_name'],
|
||||
series_date=series_date,
|
||||
priority=task_data.get('priority', '中'),
|
||||
created_by=user_id
|
||||
)
|
||||
|
||||
db.session.add(task)
|
||||
db.session.flush()
|
||||
|
||||
log = TaskLog(
|
||||
task_id=task.id,
|
||||
user_id=user_id,
|
||||
action='create',
|
||||
comment=f'批量创建任务:{task.series_name}'
|
||||
)
|
||||
db.session.add(log)
|
||||
created_tasks.append(task.id)
|
||||
|
||||
except Exception as e:
|
||||
errors.append(f'第{idx+1}行:{str(e)}')
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'message': f'成功创建{len(created_tasks)}个任务',
|
||||
'created': len(created_tasks),
|
||||
'errors': errors
|
||||
}), 201
|
||||
|
||||
|
||||
# 认领任务
|
||||
@tasks_bp.route('/tasks/<int:task_id>/claim', methods=['POST'])
|
||||
@login_required
|
||||
|
||||
Reference in New Issue
Block a user