新增异常产品管理功能
- 新增 abnormal_products 数据库表 - 内容库和互联网均无搜索结果时存入异常库 - 新增异常产品 API: - GET /api/products/abnormal - 获取异常产品列表 - GET /api/products/abnormal/<product_name> - 获取异常产品详情 - POST /api/products/abnormal/<product_name>/resolve - 解决异常产品 - DELETE /api/products/abnormal/<product_name> - 删除异常产品记录 - POST /api/products/abnormal/<product_name>/retry - 重试处理 - 更新 README 文档
This commit is contained in:
+119
-1
@@ -213,4 +213,122 @@ def process_batch():
|
||||
'success': True,
|
||||
'processed': len(results),
|
||||
'results': results
|
||||
})
|
||||
})
|
||||
|
||||
# ========== 异常产品 API ==========
|
||||
|
||||
@bp.route('/abnormal', methods=['GET'])
|
||||
def list_abnormal():
|
||||
"""获取异常产品列表"""
|
||||
limit = request.args.get('limit', 100, type=int)
|
||||
status = request.args.get('status', 'pending')
|
||||
|
||||
products = db.get_abnormal_products(limit=limit, status=status)
|
||||
count = db.get_abnormal_count(status=status)
|
||||
|
||||
# 解析 JSON 字段
|
||||
for item in products:
|
||||
if item.get('search_results'):
|
||||
try:
|
||||
item['search_results'] = __import__('json').loads(item['search_results'])
|
||||
except:
|
||||
pass
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'products': products,
|
||||
'count': count
|
||||
})
|
||||
|
||||
|
||||
@bp.route('/abnormal/<product_name>', methods=['GET'])
|
||||
def get_abnormal(product_name):
|
||||
"""获取异常产品详情"""
|
||||
product = db.get_abnormal_product(product_name)
|
||||
|
||||
if not product:
|
||||
return jsonify({'error': '异常产品不存在'}), 404
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'product': product
|
||||
})
|
||||
|
||||
|
||||
@bp.route('/abnormal/<product_name>/resolve', methods=['POST'])
|
||||
def resolve_abnormal(product_name):
|
||||
"""解决异常产品"""
|
||||
data = request.get_json()
|
||||
resolution = data.get('resolution', '人工处理完成')
|
||||
resolved_by = data.get('resolved_by', 'manual')
|
||||
|
||||
success = db.resolve_abnormal_product(product_name, resolution, resolved_by)
|
||||
|
||||
if success:
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '异常产品已标记为已解决'
|
||||
})
|
||||
else:
|
||||
return jsonify({'error': '异常产品不存在'}), 404
|
||||
|
||||
|
||||
@bp.route('/abnormal/<product_name>', methods=['DELETE'])
|
||||
def delete_abnormal(product_name):
|
||||
"""删除异常产品记录"""
|
||||
success = db.delete_abnormal_product(product_name)
|
||||
|
||||
if success:
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '异常产品记录已删除'
|
||||
})
|
||||
else:
|
||||
return jsonify({'error': '异常产品不存在'}), 404
|
||||
|
||||
|
||||
@bp.route('/abnormal/<product_name>/retry', methods=['POST'])
|
||||
def retry_abnormal(product_name):
|
||||
"""重试处理异常产品"""
|
||||
# 获取异常产品详情
|
||||
abnormal = db.get_abnormal_product(product_name)
|
||||
|
||||
if not abnormal:
|
||||
return jsonify({'error': '异常产品不存在'}), 404
|
||||
|
||||
# 检查是否正在处理
|
||||
processing = db.get_processing_products()
|
||||
if any(p['product_name'] == product_name for p in processing):
|
||||
return jsonify({'error': '该产品正在处理中'}), 400
|
||||
|
||||
# 添加到处理中列表
|
||||
db.start_processing(
|
||||
product_name=product_name,
|
||||
category=abnormal.get('category'),
|
||||
subcategory=abnormal.get('subcategory')
|
||||
)
|
||||
|
||||
try:
|
||||
# 执行处理
|
||||
result = process_service.process_product({
|
||||
'product_name': product_name,
|
||||
'category': abnormal.get('category'),
|
||||
'subcategory': abnormal.get('subcategory')
|
||||
})
|
||||
|
||||
# 如果处理成功,从异常库移除
|
||||
if result['success']:
|
||||
db.resolve_abnormal_product(
|
||||
product_name,
|
||||
f"重试处理成功: {result['message']}",
|
||||
'auto_retry'
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'success': result['success'],
|
||||
'message': result['message'],
|
||||
'review_id': result.get('review_id')
|
||||
})
|
||||
finally:
|
||||
# 完成处理,从处理中列表移除
|
||||
db.finish_processing(product_name)
|
||||
Reference in New Issue
Block a user