from flask import request, jsonify, current_app from datetime import datetime from app import db from app.models import Ticket, Product from . import api_bp from .license import require_admin @api_bp.route('/tickets', methods=['GET']) @require_admin def get_tickets(): """获取工单列表""" try: page = request.args.get('page', 1, type=int) per_page = min(request.args.get('per_page', 20, type=int), 100) status = request.args.get('status', type=int) priority = request.args.get('priority', type=int) product_id = request.args.get('product_id') query = Ticket.query if status is not None: query = query.filter_by(status=status) if priority is not None: query = query.filter_by(priority=priority) if product_id: query = query.filter_by(product_id=product_id) query = query.order_by(Ticket.create_time.desc()) pagination = query.paginate(page=page, per_page=per_page, error_out=False) tickets = [ticket.to_dict() for ticket in pagination.items] return jsonify({ 'success': True, 'data': { 'tickets': tickets, 'pagination': { 'page': page, 'per_page': per_page, 'total': pagination.total, 'pages': pagination.pages } } }) except Exception as e: current_app.logger.error(f"获取工单列表失败: {str(e)}") return jsonify({'success': False, 'message': '服务器内部错误'}), 500 @api_bp.route('/tickets', methods=['POST']) def create_ticket(): """创建工单(用户接口)""" try: data = request.get_json() if not data: return jsonify({'success': False, 'message': '请求数据为空'}), 400 title = data.get('title', '').strip() product_id = data.get('product_id') description = data.get('description', '').strip() if not all([title, product_id, description]): return jsonify({'success': False, 'message': '缺少必要参数'}), 400 # 验证产品存在 product = Product.query.filter_by(product_id=product_id).first() if not product: return jsonify({'success': False, 'message': '产品不存在'}), 404 ticket = Ticket( title=title, product_id=product_id, software_version=data.get('software_version'), machine_code=data.get('machine_code'), license_key=data.get('license_key'), description=description, priority=data.get('priority', 1) ) db.session.add(ticket) db.session.commit() return jsonify({ 'success': True, 'message': '工单创建成功', 'data': ticket.to_dict() }) except Exception as e: db.session.rollback() current_app.logger.error(f"创建工单失败: {str(e)}") return jsonify({'success': False, 'message': '服务器内部错误'}), 500