from PDAPI import * import datetime __metadata__ = { "methods": ["POST"], "blueprint": "GERP", "permission": 1.0, "attributes": [], "limit": "3 per minute", } def HandleRequest(_CleanedData): current_user = UGM.GetELTUser() if not current_user: return {"code": 401, "msg": "未登录"}, 401 has_admin = GERPUserABAC.query.filter(sqlalchemy.and_( GERPUserABAC.UserUUID == current_user.UserUUID, GERPUserABAC.HierarchicalPermissionIdentifiers == "admin:workorder_create" )).first() if not has_admin: last_order = GERPWorkOrder.query.filter( GERPWorkOrder.CreatorUUID == current_user.UserUUID ).order_by(GERPWorkOrder.CreateTime.desc()).first() if last_order and last_order.CreateTime: elapsed = (datetime.datetime.utcnow() - last_order.CreateTime).total_seconds() if elapsed < 300: remaining = int(300 - elapsed) return {"code": 1, "msg": f"提交过于频繁,请等待 {remaining} 秒"}, 429 data = flask.request.get_json(silent=True) or {} title = data.get("title", "").strip() description = data.get("description", "").strip() category = data.get("category", "other").strip() priority = data.get("priority", 0) if not title: return {"code": 1, "msg": "标题不能为空"}, 400 if len(title) > 256: return {"code": 1, "msg": "标题过长"}, 400 valid_categories = ["bug", "feature", "question", "account", "other"] if category not in valid_categories: category = "other" if priority not in [0, 1, 2, 3]: priority = 0 order_uuid = NewBUUID() order = GERPWorkOrder() order.OrderUUID = order_uuid order.Title = title order.Description = description order.Category = category order.Priority = priority order.Status = 0 order.CreatorUUID = current_user.UserUUID try: db.session.add(order) db.session.commit() except: db.session.rollback() return {"code": 1, "msg": "创建失败"}, 200 return { "code": 0, "msg": "工单已提交", "data": { "orderUUID": UUIDObj(order_uuid).UpperStr, "title": order.Title, "category": order.Category, "priority": order.Priority, "status": order.Status, "createTime": order.CreateTime.strftime("%Y-%m-%d %H:%M:%S") if order.CreateTime else None, } }, 201