commit cec5498060357fcb2cab8b0dceaeff4d1e98e4ee Author: duhao Date: Fri Sep 18 16:45:38 2026 +0800 初始化代码 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d6e6dcb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,27 @@ +# 构建上下文排除项,加速构建并避免敏感文件泄漏 +target/ +!.mvn/wrapper/maven-wrapper.jar +.mvn/wrapper/maven-wrapper.properties + +# IDE & 系统 +.idea/ +*.iml +*.iws +*.ipr +.vscode/ +.DS_Store + +# 日志 +logs/ +*.log + +# Git +.git/ +.gitignore + +# 文档(不需要进入镜像) +*.md +docs/ + +# 测试 +src/test/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b558f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Maven +target/ +!.mvn/wrapper/maven-wrapper.jar +*.original + +# IDE +.idea/ +*.iml +*.iws +*.ipr +.vscode/ +.settings/ +.project +.classpath +.factorypath + +# OS +.DS_Store +Thumbs.db + +# Logs +logs/ +*.log + +# Local config +application-local.yml diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..ffcab66 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/.run/LaopAdminApplication.run.xml b/.run/LaopAdminApplication.run.xml new file mode 100644 index 0000000..37769b4 --- /dev/null +++ b/.run/LaopAdminApplication.run.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..49490cd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,63 @@ +# ===================================================================== +# 翼云Hub · LAOP-admin 后端镜像 Dockerfile +# -------------------------------------------------------------------- +# 说明: +# - 项目 pom.xml 指定 Java 17(source/target),编译期和运行期版本严格一致, +# - jar 包最终名为 laop-admin.jar(由 pom.xml finalName 决定)。 +# ===================================================================== + +# ------------------------------------------------------------------- +# 阶段1:构建期(maven + jdk17,与 pom.xml 严格对齐) +# ------------------------------------------------------------------- +FROM maven:3.9-eclipse-temurin-17 AS builder + +WORKDIR /build + +# 先单独 COPY pom.xml,利用 Docker 缓存层加速依赖下载 +COPY pom.xml ./ +# 预下载依赖(仅当 pom 变化时重新执行,提升后续构建速度) +RUN mvn dependency:go-offline -B + +# 复制源码 +COPY src ./src + +# 打包:激活 prod profile,让 application.yml 中的 @spring.profiles.active@ 替换为 prod +# -DskipTests:构建镜像时跳过测试,测试应在 CI 流水线单独执行 +RUN mvn clean package -DskipTests -Pprod + + +# ------------------------------------------------------------------- +# 阶段2:运行期(JRE 17 LTS) +# ------------------------------------------------------------------- +FROM eclipse-temurin:17-jre-jammy + +LABEL maintainer="laop-admin" +LABEL description="翼云Hub · 无人机信息开放平台 后端服务" + +WORKDIR /app + +# 时区设置为中国时区(与 application.yml 中 jackson.time-zone 一致) +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 预创建静态文件挂载目录 /data/static +# - compose 通过 volumes 挂载宿主机 /home/laop/admin 到此处,持久化上传文件 +# - 这里显式创建是为了:即使未挂载(如直接 docker run 调试),代码写文件也不会因目录缺失失败 +# - 同时通过 ENV LAOP_STATIC_DIR=/data/static 给镜像内置默认值,与 compose 挂载点对齐 +RUN mkdir -p /data/static +ENV LAOP_STATIC_DIR=/data/static + +# 拷贝构建产物 +COPY --from=builder /build/target/laop-admin.jar app.jar + +# 容器内暴露端口(与 application.yml server.port=8081 一致) +EXPOSE 8081 + +# JVM 参数:容器内内存限制感知 + GC 优化(2核8G 服务器) +# -XX:+UseContainerSupport:让 JVM 感知 cgroup 限制(JDK10+ 默认开启,显式声明) +# -XX:MaxRAMPercentage=75.0:限制堆内存占容器内存 75%,给非堆留空间 +# -Djava.security.egd=file:/dev/./urandom:加速 SecureRandom 启动 +ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -Djava.security.egd=file:/dev/./urandom" + +# 运行:显式指定 prod profile,覆盖任何默认配置 +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar --spring.profiles.active=prod"] diff --git a/PRD-无人机信息开放平台小程序.md b/PRD-无人机信息开放平台小程序.md new file mode 100644 index 0000000..eaa0c93 --- /dev/null +++ b/PRD-无人机信息开放平台小程序.md @@ -0,0 +1,997 @@ +# 翼云Hub · 产品文档(PRD) + +> **Slogan**:全链路低空体系聚合,打破供需两端信息壁垒。 + +> **版本 v1.0** · 待开发 +> **主色**:`#5E46F6`(深紫主色)/ `#7C6AF8`(辅)/ `#F2EFFE`(底)/ `#FFFFFF`(卡)/ `#F59E0B`(金色点缀) +> **导航**:4 个底部一级 Tab(**首页 / 任务中心 / 研学与课程 / 个人中心**) +> **参考原型**:图2(首页结构)· 图3(个人中心结构)· 图1(功能菜单来源) + +--- + +## 0. 修订记录 + +| 版本 | 日期 | 主要变更 | +|------|------|----------| +| v1.0 | 待开发 | 初版产品需求文档,以图 1 功能菜单为蓝本,4 Tab 结构(首页 / 任务中心 / 研学与课程 / 个人中心) | + + + +--- + +## 1. 背景与机会 + +### 1.1 背景 +国内民用无人机产业进入"持证合规 + 商业落地"双驱动的爆发期。CAAC(民用无人驾驶航空器综合管理平台)2024 年起强制要求超 250g 机型实名注册、操控员持证;植保、巡检、航拍、表演四大场景的商业订单快速放量,但供需两端存在明显错配。 + +- **需求侧(商家/客户)**:临时用机、航拍交付、植保作业、应急巡检,缺可信飞手,缺合同/合规保障 +- **供给侧(飞手)**:持证后无稳定接单渠道,资质难被看见 +- **服务端(培训机构、维修点、保险公司、租赁商)**:缺精准流量 + +行业缺少一个"**开放聚合 + 资质可信 + 交易闭环**"的信息平台。 + +### 1.2 目标(北极星指标) + +| 阶段 | 目标 | 北极星指标 | +|------|------|------------| +| M3 | 上线跑通 | 认证飞手数 ≥ 3,000;认证商家数 ≥ 500 | +| M6 | 双边活跃 | 月成交任务数 ≥ 2,000;月活飞手 ≥ 5,000 | +| M12 | 行业心智 | CAAC 报名转化率行业第一;"找飞手"心智占位 | + +### 1.3 用户角色 + +| 角色 | 占比 | 核心诉求 | 关键场景 | +|------|------|----------|----------| +| **C1 飞手** | 50% | 接单变现、资质展示、考证指引 | 任务中心接单、飞手中心、刷题 | +| **C2 商家/客户** | 30% | 发布需求、找可信飞手、合规交付 | 任务中心发单、查附近、CAAC 报名 | +| **C3 培训机构** | 10% | 招生、课程展示、品牌曝光 | 商家认证、题库合作 | +| **C4 服务商** | 10% | 流量、订单分发 | 商家认证 | + +--- + +## 2. 导航与功能架构 + +### 2.1 底部 Tab(4 个) + +| 序号 | Tab | 定位 | 核心目的 | +|------|-----|------|----------| +| ① | **首页** | 流量分发中枢 | 黄金位 + 9 宫格 + 供需双广场 + 优质任务 1 条 | +| ② | **任务中心** | 交易主战场 | 任务列表 + 多维度筛选 + 抢单 | +| ③ | **研学与课程** | 内容/服务留存 | 课程展示 + 预约 | +| ④ | **个人中心** | 身份与认证 | 我的任务 + 飞手/商家双身份认证 + 推广 | + +### 2.2 全量功能清单(按图 1 + 业务扩展) + +| 一级 Tab | 二级入口 | 三级 / 页面 | 价值 | 优先级 | +|----------|----------|-------------|------|--------| +| **首页** | 城市定位 | 定位选择 | LBS 入口 | P0 | +| | 顶部轮播 | CAAC 报名 / 招商 / 表演 | 运营位 | P0 | +| | 公告条 | 最新政策 / 新闻 | 内容置顶 | P0 | +| | 9 宫格金刚区(详见 2.3) | 9 个入口 | 流量分发 | P0 | +| | **供需双广场**(独立菜单) | 商家发单 · 飞手接单 | **核心交易入口** | **P0** | +| | **优质任务**(仅 1 张) | 首页露出 1 张顶部任务 | 转化错点 | P0 | +| **任务中心** | 筛选按钮 | 推荐 / 附近 / 高价 / 长期 | 排序入口 | P0 | +| | **⚙ 筛选按钮** | 7 组 / 55 个筛选项(右侧抽屉) | 精准筛选 | P0 | +| | 任务列表(横向大卡) | 1 优质 + 多普通任务 | 抢单入口 | P0 | +| | 任务详情 | 详情页 + IM + 接单 | 成交 | P0 | +| **研学与课程** | 分类 Tab | 全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导 | 内容导航 | P0 | +| | 课程列表 | 卡片列表(6门真实案例课程) | 内容/服务留存 | **P0** | +| | 课程详情 | 课程信息 + 预约入口 | 深度了解 | P0 | +| | 研学预约 | 填写信息提交预约 | 核心转化 | **P0** | +| **个人中心** | 我的任务(3 态) | 待接单 / 进行中 / 已完成 | 任务管理 | **P0** | +| | 飞手推广 | 老带新得积分 | 拉新 | P0 | +| | 认证与工具 | 飞手认证 / 商家认证 / 我的发布 / 实名认证 | **身份门槛** | **P0** | +| | | 飞手中心 / 商家中心 | 身份聚合 | P0 | + + +### 2.3 首页 9 宫格金刚区(9 个入口) + +| # | 入口 | 跳转 | 备注 | +|---|------|------|------| +| 1 | CAAC 报名 | 报名页 | 强引流,潜在客转化 | +| 2 | 无人机表演 | 表演列表 | 高客单 | +| 3 | 实力商家 | 商家列表 | 信任锚点 | +| 4 | 本地飞手 | 飞手列表 | 信任锚点 | +| 5 | 培训考试 | 培训模块 | 留存 + 引流 | +| 6 | 发布任务 | 发布任务页(需商家认证) | 商家侧入口 | +| 7 | 我要接单 | 任务中心(需飞手认证) | 飞手侧入口 | +| 8 | 飞手推广 | 推广页(带 HOT 角标) | 拉新 | +| 9 | **滴滴打无人机** | 调度页(类打车模式) | **新功能·核心亮点** | + +--- + +## 3. 功能关联分析(核心) + +### 3.1 三大 Tab 关联总览 + +``` +┌──────────────────────────────────────────────────────────┐ +│ 首页(流量分发中枢) │ +│ 轮播位 ─→ 强运营:CAAC报名 / 表演 / 招商 │ +│ 公告 ─→ 政策更新、行业新闻(点击跳行业动态详情) │ +│ 金刚区(9 宫格) ─→ 功能分发 │ +│ ├─ CAAC报名 ──→ 飞手认证 ──→ 训练题库 │ +│ ├─ 无人机表演 ──→ 任务中心(高客单任务) │ +│ ├─ 实力商家 ──→ 商家认证入口(个人中心) │ +│ ├─ 本地飞手 ──→ 飞手认证入口(个人中心) │ +│ ├─ 培训考试 ──→ 附近商家 + 题库刷题 │ +│ ├─ 发布任务 ──→ 商家认证校验(个人中心) │ +│ └─ 我要接单 ──→ 飞手认证校验(个人中心) │ +└──────────────────────────────────────────────────────────┘ + │ │ + ▼ ▼ + 研学与课程 个人中心 · 身份 + (内容留存) 飞手 ←─→ 商家 + │ │ + └──────────┬────────────┘ + ▼ + ┌─────────────────┐ + │ 任务中心 │ + │ 商家发单/飞手接单│ + │ (需对应身份认证)│ + └─────────────────┘ +``` + +### 3.2 关键功能关联(10 条) + +| # | 触发点 | 关联点 | 业务价值 | +|---|--------|--------|----------| +| 1 | CAAC 报名点击 | → 飞手认证引导页 | 流量 → 认证漏斗 | +| 2 | 实力商家 / 本地飞手 | → 详情页 + IM + 收藏 | 信任 → 咨询 → 成交 | +| 3 | 培训考试题库 | → 错题 → 课程推荐 | 学习 → 报名 → 机构 | +| 4 | 商家发单 | → 校验商家认证状态 | 未认证阻断 + 引导 | +| 5 | 飞手接单 | → 校验飞手认证 + 保险 | 风控前置 | +| 6 | 任务中心"优质任务"标签 | → 付费订阅 / 会员 | GMV 提升 | +| 7 | 飞手推广 | → 老带新积分 | 拉新 | +| 8 | 附近商家 | → 定位授权 + 商家详情 | LBS 转化 | +| 9 | 研学课程详情 | → 相关任务 / 商家挂载 | 内容 → 交易 | +| 11 | 滴滴打无人机 | → 无人机飞手网络 → 配送任务派单 | 新增核心功能 | +| 10 | 资质中心 | → 过期提醒 + 续期 | 长期留存 | + +### 3.3 首页信息流(自上而下) + +``` +1. 状态栏 +2. 城市定位(如:全国 / 上海)+ 消息/设置 +3. 轮播图(CAAC 报名 / 招商 / 表演) +4. 公告条(最新政策 / 新闻) +5. 9 宫格金刚区(9 个入口,详见 2.3) +6. 供需双广场(独立菜单 · 仿图 1) + 左卡:📤 商家发单 │ 右卡:🛩 飞手接单 +7. 滴滴打无人机(同城即时配送) + 地图动画示意(无人机飞手轨迹) + 配送流程 4 步:骑手取货 → 无人机起飞 → 配送中 → 预计到达 + 底部快捷下单栏:30 分钟必达 · 支持紧急件 +8. 研学体系(首页展示课程 · 2~3 张横向卡) + ① [两天一晚世园无人机研学课程] ¥1,388/期 + ② [无人机技能进阶营(3-5天)] ¥2,680/期 + ③ [鄂尔多斯雏鹰计划] ¥3,200/期 +``` + +### 3.4 任务中心 Tab + +``` +顶部筛选按钮栏: +[⚙ 筛选▾] [📍 附近] ← 推荐/高价/长期 已合并到筛选面板 + +点击 [⚙ 筛选] → 右侧抽屉式筛选面板(7 组 / 55 个筛选项): + · 任务分类(7) 全部 / 植保 / 航拍 / 巡检 / 表演 / 吊运 / 测绘 + · 任务状态(5) 全部 / 待接单 / 已接单 / 执行中 / 已完成 + · 价格预算(5+输入)不限 / 0-3千 / 3-10千 / 1-5万 / 5万以上 + 自定义 + · 所在地区(9) 全国 + 8 省市 + · 人员数量(5) 不限 / 1人 / 2人 / 3-5人 / 5人以上 + · 发布时间(5) 全部 / 今天 / 3天内 / 本周内 / 本月内 + · 其他筛选(5) 优质任务 / 含飞手险 / 长期合作 / 急单 / 团队单 + +主体任务卡(仿图 1 横向大卡): + · 头部:标签(分类 + 优质 + 状态)+ 地点 + · 标题:粗体任务名 + · 左图右信息卡:地点 / 人数 / 时间 + · 底部:价格(左侧大字号)+ 操作按钮(查看附近飞手 / 去抢单) + · 描述:飞手险 + 任务详情(实景文字) + +优质任务强化(仅首卡): + · 金色边框 + 米黄渐变背景 + 金色 ★ 徽标 + · 金色价格 + 金色 CTA 按钮 + · 右上角金色光晕 +``` + +### 3.5 滴滴打无人机 Tab(独立 Tab) + +> 核心定位:同城即时配送平台,配送端为无人机(类比美团/闪送,骑手换无人机) + +``` +核心业务流程: + 用户下单 → 系统派单给附近无人机 → 无人机取货起飞 → 配送中(实时轨迹)→ 送达 + +功能清单: + · 一键下单:填写取货/收货地址 + 物品重量/类型 → 生成订单 + · 配送地图:无人机轨迹实时展示(起飞点→配送中→到达) + · 配送流程:4 步追踪(骑手取货 / 无人机起飞 / 配送中 / 预计到达) + · 计价规则:按距离 + 重量 + 时效(普通件/加急件) + · 配送范围:同城 30 分钟必达,支持紧急件 + · 飞手/商家入驻:认证后接入配送网络 + +展示 4 步配送流程示例(首页版): + ① ✓ 骑手取货 09:14 + ② ✓ 无人机起飞 09:16 [T100 起飞] + ③ 🚁 配送中 09:17 [飞行高度 120m · 时速 60km/h] + ④ ◎ 预计到达 09:25 [送货上门] + +底部下单栏:30 分钟内送达 · 支持紧急件 [立即下单] +``` + +### 3.6 研学与课程 Tab + +``` +分类 Tab:全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导 + +课程卡片字段: + · 标签(热门/推荐/新开)+ 分类标签 + 对象年龄 + · 课程名 + 地点 + 时长 + · 课程亮点(3项展开) + · 价格 + [立即预约] 按钮 + +展示 6 门真实课程案例: + ① 两天一晚世园无人机研学课程(北京)¥1,388/期 [热门·青少年·认知启蒙] + ② 无人机技能进阶营(3-5天)¥2,680/期 [技能进阶·初中生] + ③ 鄂尔多斯科技馆「雏鹰计划」(8天16课)¥3,200 [创新应用·高中生] + ④ 「越州蒲公英计划」青少年无人机研学(绍兴)¥680 [竞赛辅导·青少年] + ⑤ 「智趣少年营」无人机兴趣课程(社区)¥380 [趣味科普·零基础] + ⑥ 「小小农发人」无人机农业研学之旅(简阳)¥280 [农业应用·亲子] + +预约交互:[立即预约] → 弹出预约表单(姓名/手机/人数/备注)→ 提交成功提示 +``` + +### 3.6 个人中心信息流(自上而下) + +``` +1. 顶部渐变区(无右上角图标): + 👤 头像 + 登录/注册按钮 +2. 我的任务(3 态): + [📋 待接单 2] [🛩 进行中 1] [✓ 已完成] +3. 飞手推广 Banner: + 📢 邀请飞手认证 · 认证得积分 · 积分可提现 [去推广 ›] +4. 认证与工具: + 上排 4:[飞手认证] [商家认证] [我的发布] [实名认证] + 下排 2:[🏆飞手中心] [🏬商家中心] +``` + +> ❌ 已删除模块:我的服务(优惠券/商家发货/分销绑定/收货地址)、信息完善、飞手资质、商家资质、功能关联导览、个人中心右上角 3 图标(App/消息/设置)。 + +--- + +## 4. 核心流程 + +### 4.1 飞手入驻 +注册 / 微信一键登录 → 飞手认证(上传 CAAC 执照 + 身份证 + 机型)→ 审核(1 工作日)→ 通过 → 进入任务中心接单 + +### 4.2 商家发单 +注册 → 商家认证(营业执照 + 法人身份证 + 经营范围)→ 审核 → 通过 → 任务中心 → 发布任务(类型 / 地点 / 时间 / 预算 / 机型要求)→ 飞手接单 → 双方 IM 确认 → 线下执行 → 平台评价 → 抽佣结算 + +### 4.3 任务状态机 +``` +待接单 → 已接单(待执行)→ 执行中 → 待验收 → 已完成 + ↓ + 异常:取消 / 申诉 / 退款 +``` + +### 4.4 认证状态机 +``` +未认证 → 资料上传中 → 审核中(≤24h)→ 已认证(有效 1 年)→ 即将过期(30 天)→ 过期 + ↓ + 续期申请 +``` + +### 4.5 筛选交互流程 +点击 [⚙ 筛选] → 右侧抽屉滑入 → 7 组筛选项可点击切换 → 自定义价格输入 → [重置全部] 或 [确认筛选 (12)] → 关闭抽屉 → 列表刷新 + 提示"筛选已应用" + +--- + +## 5. 信息架构 + +### 5.1 页面清单(28 个) + +| 模块 | 页面 | +|------|------| +| 通用 | 启动页、登录/注册、消息中心、定位选择 | +| 首页 | 首页、新闻列表、新闻详情、CAAC 报名、无人机表演列表 / 详情 | +| 商家 / 飞手 | 实力商家列表 / 详情、本地飞手列表 / 详情 | +| 培训 | 培训考试首页、附近商家(培训)、题库刷题、错题本 | +| 任务中心 | 任务中心首页、发布任务、我要接单、任务详情、任务管理、筛选面板 | +| 研学与课程 | 列表(全部 / 认知启蒙 / 技能进阶 / 创新应用 / 竞赛辅导)、详情、预约 | +| 我的 | 我的首页(任务 3 态)、飞手推广、飞手认证、商家认证、我的发布、实名认证、飞手中心、商家中心、关于我们 | + +### 5.2 底部 Tab(4 个 · 按图 1 一级菜单) + +- **首页**:流量分发 +- **任务中心**:核心交易(独立 Tab · 必到) +- **行业动态**:资讯流 +- **个人中心**:身份与认证 + +> 与图 1 一级菜单对应关系:图 1 的"首页" = 本文档的首页 + 任务中心(交易功能下沉到 Tab);图 1 的"行业动态" = 研学与课程 Tab;图 1 的"个人中心" = 同名 Tab。 + +--- + +## 6. UI 规范 + +### 6.1 色彩系统 + +| 用途 | 颜色 | 备注 | +|------|------|------| +| **主色** | **`#5E46F6`** = `rgb(94,70,246)` | 品牌色 · 按钮 / Tag / 强调 / Tab 选中 / 阴影 | +| 辅助紫 | `#7C6AF8` | 次级按钮、渐变起点 | +| 浅紫底 | `#F2EFFE` | 页面背景、Tab 浅态 | +| 卡片白 | `#FFFFFF` | 内容卡 | +| 文字主 | `#1A1730` | 标题 | +| 文字次 | `#5E5870` | 描述 | +| 文字弱 | `#9D97AE` | 提示 | +| 成功 | `#22C55E` | 认证通过 | +| 警告 | `#F59E0B` | 即将过期 | +| 错误 | `#EF4444` | 失败 | +| **金色点缀** | **`#F59E0B`** | **优质任务标签 / 价格 / CTA / 边框** | + +### 6.2 字体 +- iOS:PingFang SC +- Android:系统默认 +- 字号阶梯:11 / 12 / 13 / 14 / 15 / 17 / 20 / 24 / 32 + +### 6.3 圆角 / 阴影 +- 卡圆角:12-16 px +- 按钮圆角:8-14 px +- 头像圆角:50% +- 卡阴影:`0 2px 12px rgba(94,70,246,0.10)` ——`--shadow` +- 任务中心卡阴影:`0 4px 16px rgba(94,70,246,0.12)` ——`--shadow-md` +- 大阴影(轮播 / Banner):`0 8px 24px rgba(94,70,246,0.18)` ——`--shadow-lg` +- 优质任务金色阴影:`0 6px 20px rgba(245,158,11,0.22)` + +--- + +## 7. 关键指标 + +| 指标 | 目标(M3) | 监控位 | +|------|------------|--------| +| CAAC 报名点击 → 提交转化率 | ≥ 35% | 首页轮播点击 | +| 飞手认证完成率 | ≥ 60% | 引导页漏斗 | +| 任务中心点击率 | ≥ 50% | 首页"供需双广场" + "优质任务" | +| 优质任务点击 → 接单 | ≥ 20% | 任务中心首卡 | +| 任务平均成交时长 | ≤ 4h | 任务详情 | +| 7 日留存 | ≥ 30% | 启动埋点 | +| 研学与课程 Tab PV | 首页 PV 的 30% | Tab 切换埋点 | +| 筛选面板使用率 | ≥ 15% | 任务中心 Tab | + +--- + +## 8. 风险与对策 + +| 风险 | 等级 | 对策 | +|------|------|------| +| 飞手资质造假 | 高 | 接入 CAAC 接口核验执照真伪 + 履约保证金 | +| 商家拖欠 / 跑单 | 高 | 平台担保支付 + 评价 + 黑名单 | +| 飞手人身安全 | 中 | 保险合作 + 紧急 SOS 按钮 + 行程共享 | +| 监管政策变化 | 中 | 法务对接民航局,配置审核人力 | +| 冷启动供需 | 中 | 地推:先与 3-5 家培训机构、2-3 个无人机协会合作 | +| 优质任务供给不足 | 中 | 平台补贴 + 头部商家 BD | +| 首页任务中心被弱化 | 中 | 顶部"优质任务"金色强化 + 供需双广场独立菜单导流 | +| 低空配送合规(飞行审批/空域限制) | 高 | 对接 UOM 平台获取飞行许可;设置电子围栏自动拦截禁飞区订单 | +| 配送延误/事故(天气/机械故障) | 中 | 无人机状态实时监控;天气预警自动暂停;备用机调度机制 | + +--- + +## 9. 版本规划 + +| 版本 | 时间 | 内容 | +|------|------|------| +| v1.0 | 待开发 | 首页 + 任务中心 + 研学与课程 + 个人中心,4 Tab 完整功能 | +| v2.0 | M3 | 培训题库 + 保险合作 + 智能匹配 | +| v3.0 | M6+ | 行业 SaaS + AR 展示 + 地图找飞手 | + +--- + +## 10. 附录:与原图功能对照表 + +### 10.1 一级菜单对照 + +| 图 1 一级菜单 | 本文档 Tab | 关键二级 | +|--------------|-----------|----------| +| 首页 | **首页 + 任务中心** | 9 宫格 + 供需双广场 + 滴滴打无人机 + 研学体系 | +| 行业动态 | **研学与课程** | 列表 + 详情 + 预约(6 门课程) | +| 个人中心 | **个人中心** | 任务 3 态 + 飞手 / 商家双身份认证 + 推广 | + +### 10.2 二级菜单对照 + +| 图 1 二级菜单 | 本文档对应 | 实现位置 | +|--------------|------------|----------| +| 新闻咨询 | ✓ | 首页轮播 + 公告(研学与课程内容) | +| CAAC 报名 | ✓ | 首页 9 宫格 #1 + 独立页 | +| 无人机表演 | ✓ | 首页 9 宫格 #2 + 独立板块 | +| 实力商家 | ✓ | 首页 9 宫格 #3 + 商家列表 | +| 本地飞手 | ✓ | 首页 9 宫格 #4 + 飞手列表 | +| 培训考试 | ✓ | 首页 9 宫格 #5 + 培训模块 | +| **供需双广场** | ✓(**独立菜单**) | 首页 6 区(左:商家发单 / 右:飞手接单) | +| **优质任务** | ✓ | 首页 7 区(仅 1 张金色强化卡)+ 任务中心首卡 | +| 信息完善 | ❌(已删除) | 个人中心(合并到飞手 / 商家认证流程中) | +| 飞手认证 | ✓ | 个人中心「认证与工具」上排 #1 | +| 飞手资质中心 | ❌(已删除) | 资质合并到飞手认证页面 | +| 商家认证 | ✓ | 个人中心「认证与工具」上排 #2 | +| 商家资质中心 | ❌(已删除) | 资质合并到商家认证页面 | +| 关于我们 | ✓ | 个人中心底部 | + + +--- + +## 11. 数据库设计(DDL) + +> 数据库类型:MySQL 8.0 +> 字符集:`utf8mb4` / 排序规则:`utf8mb4_unicode_ci` +> 所有表均含 `created_at` / `updated_at` 通用字段;主键均使用 `BIGINT` 自增;软删除用 `deleted_at` + +--- + +### 11.1 公告表 `announcement` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| title | VARCHAR(100) | 公告标题 | NOT NULL | +| content | TEXT | 公告正文 | | +| valid_from | DATETIME | 生效开始时间 | | +| valid_to | DATETIME | 生效结束时间 | | +| status | TINYINT | 状态:0隐藏 1显示 | DEFAULT 1 | +| sort_order | INT | 排序,越小越靠前 | DEFAULT 0 | +| publisher_id | BIGINT | 发布人ID(关联user.id) | | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE announcement ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + title VARCHAR(100) NOT NULL COMMENT '公告标题', + content TEXT COMMENT '公告正文', + valid_from DATETIME COMMENT '生效开始时间', + valid_to DATETIME COMMENT '生效结束时间', + status TINYINT DEFAULT 1 COMMENT '状态:0隐藏 1显示', + sort_order INT DEFAULT 0 COMMENT '排序', + publisher_id BIGINT COMMENT '发布人ID', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + INDEX idx_status_sort (status, sort_order), + INDEX idx_valid_period (valid_from, valid_to) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公告表'; +``` + +--- + +### 11.2 任务表 `task` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| task_no | VARCHAR(32) | 任务编号(全局唯一) | UNIQUE | +| name | VARCHAR(100) | 任务名称 | NOT NULL | +| type | VARCHAR(20) | 任务类型:植保/吊运/航拍/巡检/清洗/表演/测绘 | NOT NULL | +| province | VARCHAR(20) | 省份 | | +| city | VARCHAR(20) | 城市 | | +| district | VARCHAR(20) | 区县 | | +| address | VARCHAR(200) | 详细地址 | | +| latitude | DECIMAL(10,6) | 纬度坐标 | | +| longitude | DECIMAL(10,6) | 经度坐标 | | +| scene_images | JSON | 作业场景图(file_id数组) | | +| required_count | INT | 需求人数 | DEFAULT 1 | +| start_time | DATETIME | 开始时间 | NOT NULL | +| end_time | DATETIME | 结束时间 | | +| reward | DECIMAL(10,2) | 报酬(元) | NOT NULL | +| insurance_require | JSON | 保险要求:三者险/飞手险/机身险 | | +| contact_name | VARCHAR(50) | 联系人姓名 | | +| contact_phone | VARCHAR(20) | 联系电话 | NOT NULL | +| remark | TEXT | 备注 | | +| status | TINYINT | 状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消 | DEFAULT 0 | +| is_premium | TINYINT | 是否优质任务:0否 1是 | DEFAULT 0 | +| premium_cost | INT | 优质任务积分消耗 | DEFAULT 0 | +| publisher_id | BIGINT | 发布人ID(关联user.id) | NOT NULL | +| accepted_pilot_id | BIGINT | 接单飞手ID(关联pilot.id) | | +| platform_fee | DECIMAL(10,2) | 平台服务费 | DEFAULT 0.00 | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE task ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + task_no VARCHAR(32) NOT NULL COMMENT '任务编号(全局唯一)', + name VARCHAR(100) NOT NULL COMMENT '任务名称', + type VARCHAR(20) NOT NULL COMMENT '任务类型:植保/吊运/航拍/巡检/清洗/表演/测绘', + province VARCHAR(20) COMMENT '省份', + city VARCHAR(20) COMMENT '城市', + district VARCHAR(20) COMMENT '区县', + address VARCHAR(200) COMMENT '详细地址', + latitude DECIMAL(10,6) COMMENT '纬度坐标', + longitude DECIMAL(10,6) COMMENT '经度坐标', + scene_images JSON COMMENT '作业场景图(file_id数组)', + required_count INT DEFAULT 1 COMMENT '需求人数', + start_time DATETIME NOT NULL COMMENT '开始时间', + end_time DATETIME COMMENT '结束时间', + reward DECIMAL(10,2) NOT NULL COMMENT '报酬(元)', + insurance_require JSON COMMENT '保险要求:三者险/飞手险/机身险', + contact_name VARCHAR(50) COMMENT '联系人姓名', + contact_phone VARCHAR(20) NOT NULL COMMENT '联系电话', + remark TEXT COMMENT '备注', + status TINYINT DEFAULT 0 COMMENT '状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消', + is_premium TINYINT DEFAULT 0 COMMENT '是否优质任务:0否 1是', + premium_cost INT DEFAULT 0 COMMENT '优质任务积分消耗', + publisher_id BIGINT NOT NULL COMMENT '发布人ID', + accepted_pilot_id BIGINT COMMENT '接单飞手ID', + platform_fee DECIMAL(10,2) DEFAULT 0.00 COMMENT '平台服务费', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_task_no (task_no), + INDEX idx_type_status (type, status), + INDEX idx_city_status (city, status), + INDEX idx_publisher (publisher_id), + INDEX idx_pilot (accepted_pilot_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务表'; +``` + +--- + +### 11.3 商家表 `merchant` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| user_id | BIGINT | 关联用户ID | UNIQUE, NOT NULL | +| name | VARCHAR(100) | 商家名称 | NOT NULL | +| address | VARCHAR(200) | 商家地址 | | +| door_image | BIGINT | 门头照片file_id | | +| license_file_id | BIGINT | 营业执照file_id | | +| contact_name | VARCHAR(50) | 联系人 | | +| contact_phone | VARCHAR(20) | 联系电话 | | +| latitude | DECIMAL(10,6) | 纬度 | | +| longitude | DECIMAL(10,6) | 经度 | | +| service_types | JSON | 服务类型数组 | | +| description | TEXT | 商家简介 | | +| cert_status | TINYINT | 认证状态:0未认证 1认证中 2已认证 3认证失败 | DEFAULT 0 | +| cert_time | DATETIME | 认证时间 | | +| rating | DECIMAL(2,1) | 评分(1.0-5.0) | DEFAULT 5.0 | +| order_count | INT | 成交订单数 | DEFAULT 0 | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE merchant ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + user_id BIGINT NOT NULL COMMENT '关联用户ID', + name VARCHAR(100) NOT NULL COMMENT '商家名称', + address VARCHAR(200) COMMENT '商家地址', + door_image BIGINT COMMENT '门头照片file_id', + license_file_id BIGINT COMMENT '营业执照file_id', + contact_name VARCHAR(50) COMMENT '联系人', + contact_phone VARCHAR(20) COMMENT '联系电话', + latitude DECIMAL(10,6) COMMENT '纬度', + longitude DECIMAL(10,6) COMMENT '经度', + service_types JSON COMMENT '服务类型数组', + description TEXT COMMENT '商家简介', + cert_status TINYINT DEFAULT 0 COMMENT '认证状态:0未认证 1认证中 2已认证 3认证失败', + cert_time DATETIME COMMENT '认证时间', + rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分(1.0-5.0)', + order_count INT DEFAULT 0 COMMENT '成交订单数', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_user (user_id), + INDEX idx_cert_status (cert_status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商家表'; +``` + +--- + +### 11.4 飞手表 `pilot` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| user_id | BIGINT | 关联用户ID | UNIQUE, NOT NULL | +| name | VARCHAR(50) | 姓名(实名) | NOT NULL | +| phone | VARCHAR(20) | 手机号 | NOT NULL | +| birthday | DATE | 出生年月 | | +| age | TINYINT | 年龄(自动计算) | | +| avatar_file_id | BIGINT | 头像file_id | | +| cert_status | TINYINT | 认证状态:0未认证 1认证中 2已认证 3认证失败 | DEFAULT 0 | +| cert_time | DATETIME | 认证时间 | | +| license_type | VARCHAR(20) | CAAC执照类型:AOPA/UTC/ASFC | | +| license_no | VARCHAR(50) | CAAC执照编号 | | +| license_file_id | BIGINT | 执照图片file_id | | +| drone_models | JSON | 可操控机型数组 | | +| service_cities | JSON | 服务城市数组 | | +| bio | VARCHAR(200) | 个人简介 | | +| rating | DECIMAL(2,1) | 评分 | DEFAULT 5.0 | +| order_count | INT | 完成任务数 | DEFAULT 0 | +| insurance_expire | DATE | 飞手险到期日 | | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE pilot ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + user_id BIGINT NOT NULL COMMENT '关联用户ID', + name VARCHAR(50) NOT NULL COMMENT '姓名(实名)', + phone VARCHAR(20) NOT NULL COMMENT '手机号', + birthday DATE COMMENT '出生年月', + age TINYINT COMMENT '年龄(自动计算)', + avatar_file_id BIGINT COMMENT '头像file_id', + cert_status TINYINT DEFAULT 0 COMMENT '认证状态:0未认证 1认证中 2已认证 3认证失败', + cert_time DATETIME COMMENT '认证时间', + license_type VARCHAR(20) COMMENT 'CAAC执照类型:AOPA/UTC/ASFC', + license_no VARCHAR(50) COMMENT 'CAAC执照编号', + license_file_id BIGINT COMMENT '执照图片file_id', + drone_models JSON COMMENT '可操控机型数组', + service_cities JSON COMMENT '服务城市数组', + bio VARCHAR(200) COMMENT '个人简介', + rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '评分', + order_count INT DEFAULT 0 COMMENT '完成任务数', + insurance_expire DATE COMMENT '飞手险到期日', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_user (user_id), + INDEX idx_cert_status (cert_status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='飞手表'; +``` + +--- + +### 11.5 题库表 `exam_bank` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| name | VARCHAR(100) | 题库名称 | NOT NULL | +| cover_image | BIGINT | 封面图file_id | | +| description | TEXT | 题库描述 | | +| question_count | INT | 题目数量 | DEFAULT 0 | +| difficulty | TINYINT | 难度:1简单 2中等 3困难 | DEFAULT 1 | +| status | TINYINT | 状态:0禁用 1启用 | DEFAULT 1 | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE exam_bank ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + name VARCHAR(100) NOT NULL COMMENT '题库名称', + cover_image BIGINT COMMENT '封面图file_id', + description TEXT COMMENT '题库描述', + question_count INT DEFAULT 0 COMMENT '题目数量', + difficulty TINYINT DEFAULT 1 COMMENT '难度:1简单 2中等 3困难', + status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1启用', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='题库表'; +``` + +--- + +### 11.6 习题表 `exam_question` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| bank_id | BIGINT | 所属题库ID | NOT NULL | +| content | TEXT | 题目内容 | NOT NULL | +| options | JSON | 选项数组(含ABCD四选项) | | +| question_type | TINYINT | 题型:1单选 2多选 3判断 | NOT NULL | +| answer | VARCHAR(10) | 标准答案(如:A 或 AB) | NOT NULL | +| explanation | TEXT | 答案解析 | | +| difficulty | TINYINT | 难度:1简单 2中等 3困难 | DEFAULT 1 | +| score | TINYINT | 分值(单选/多选) | DEFAULT 5 | +| sort_order | INT | 排序 | DEFAULT 0 | +| used_count | INT | 被使用次数 | DEFAULT 0 | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE exam_question ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + bank_id BIGINT NOT NULL COMMENT '所属题库ID', + content TEXT NOT NULL COMMENT '题目内容', + options JSON COMMENT '选项数组([{"key":"A","val":"..."},...])', + question_type TINYINT NOT NULL COMMENT '题型:1单选 2多选 3判断', + answer VARCHAR(10) NOT NULL COMMENT '标准答案(如:A 或 AB)', + explanation TEXT COMMENT '答案解析', + difficulty TINYINT DEFAULT 1 COMMENT '难度:1简单 2中等 3困难', + score TINYINT DEFAULT 5 COMMENT '分值', + sort_order INT DEFAULT 0 COMMENT '排序', + used_count INT DEFAULT 0 COMMENT '被使用次数', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + INDEX idx_bank (bank_id), + INDEX idx_type (question_type) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='习题表'; +``` + +--- + +### 11.7 课程表 `course` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| name | VARCHAR(100) | 课程名称 | NOT NULL | +| tags | JSON | 标签数组(认知启蒙/技能进阶/创新应用/竞赛辅导) | | +| category | VARCHAR(20) | 分类 | | +| target_age | VARCHAR(20) | 适合年龄 | | +| location | VARCHAR(200) | 上课地点 | | +| latitude | DECIMAL(10,6) | 纬度 | | +| longitude | DECIMAL(10,6) | 经度 | | +| description | TEXT | 课程描述 | | +| highlights | JSON | 课程亮点(3项) | | +| duration_desc | VARCHAR(50) | 课时说明 | | +| capacity_min | INT | 最小人数 | DEFAULT 1 | +| capacity_max | INT | 最大人数 | DEFAULT 20 | +| images | JSON | 课程图片file_id数组 | | +| price | DECIMAL(10,2) | 课程价格 | NOT NULL | +| merchant_id | BIGINT | 所属商家ID | | +| status | TINYINT | 状态:0下架 1上架 2已满员 | DEFAULT 1 | +| view_count | INT | 浏览次数 | DEFAULT 0 | +| book_count | INT | 已预约人数 | DEFAULT 0 | +| rating | DECIMAL(2,1) | 课程评分 | DEFAULT 5.0 | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE course ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + name VARCHAR(100) NOT NULL COMMENT '课程名称', + tags JSON COMMENT '标签数组(认知启蒙/技能进阶/创新应用/竞赛辅导)', + category VARCHAR(20) COMMENT '分类', + target_age VARCHAR(20) COMMENT '适合年龄', + location VARCHAR(200) COMMENT '上课地点', + latitude DECIMAL(10,6) COMMENT '纬度', + longitude DECIMAL(10,6) COMMENT '经度', + description TEXT COMMENT '课程描述', + highlights JSON COMMENT '课程亮点(3项)', + duration_desc VARCHAR(50) COMMENT '课时说明', + capacity_min INT DEFAULT 1 COMMENT '最小人数', + capacity_max INT DEFAULT 20 COMMENT '最大人数', + images JSON COMMENT '课程图片file_id数组', + price DECIMAL(10,2) NOT NULL COMMENT '课程价格', + merchant_id BIGINT COMMENT '所属商家ID', + status TINYINT DEFAULT 1 COMMENT '状态:0下架 1上架 2已满员', + view_count INT DEFAULT 0 COMMENT '浏览次数', + book_count INT DEFAULT 0 COMMENT '已预约人数', + rating DECIMAL(2,1) DEFAULT 5.0 COMMENT '课程评分', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + INDEX idx_category (category), + INDEX idx_status (status), + INDEX idx_merchant (merchant_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程表'; +``` + +--- + +### 11.8 用户表 `user` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| openid | VARCHAR(64) | 微信openId | UNIQUE, NOT NULL | +| nickname | VARCHAR(50) | 用户昵称 | | +| avatar_url | VARCHAR(500) | 头像URL | | +| phone | VARCHAR(20) | 手机号 | | +| gender | TINYINT | 性别:0未知 1男 2女 | DEFAULT 0 | +| bio | VARCHAR(200) | 个人简介 | | +| role_type | TINYINT | 角色类型:1普通用户 2飞手 3商家 4机构 | DEFAULT 1 | +| points | INT | 积分余额 | DEFAULT 0 | +| is_pilot_bound | TINYINT | 是否已绑定飞手身份 | DEFAULT 0 | +| is_merchant_bound | TINYINT | 是否已绑定商家身份 | DEFAULT 0 | +| pilot_id | BIGINT | 关联飞手ID | | +| merchant_id | BIGINT | 关联商家ID | | +| status | TINYINT | 账号状态:0禁用 1正常 | DEFAULT 1 | +| last_login_at | DATETIME | 最后登录时间 | | +| created_at | DATETIME | 注册时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE `user` ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + openid VARCHAR(64) NOT NULL COMMENT '微信openId', + nickname VARCHAR(50) COMMENT '用户昵称', + avatar_url VARCHAR(500) COMMENT '头像URL', + phone VARCHAR(20) COMMENT '手机号', + gender TINYINT DEFAULT 0 COMMENT '性别:0未知 1男 2女', + bio VARCHAR(200) COMMENT '个人简介', + role_type TINYINT DEFAULT 1 COMMENT '角色类型:1普通用户 2飞手 3商家 4机构', + points INT DEFAULT 0 COMMENT '积分余额', + is_pilot_bound TINYINT DEFAULT 0 COMMENT '是否已绑定飞手身份', + is_merchant_bound TINYINT DEFAULT 0 COMMENT '是否已绑定商家身份', + pilot_id BIGINT COMMENT '关联飞手ID', + merchant_id BIGINT COMMENT '关联商家ID', + status TINYINT DEFAULT 1 COMMENT '账号状态:0禁用 1正常', + last_login_at DATETIME COMMENT '最后登录时间', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_openid (openid), + INDEX idx_phone (phone) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; +``` + +--- + +### 11.9 任务执行记录表 `task_record` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| task_id | BIGINT | 任务ID | NOT NULL | +| user_id | BIGINT | 关联用户ID | NOT NULL | +| pilot_id | BIGINT | 接单飞手ID | | +| merchant_id | BIGINT | 发单商家ID | | +| status | TINYINT | 状态:1待接单 2已接单 3执行中 4已完成 5已取消 | DEFAULT 1 | +| apply_time | DATETIME | 申请/接单时间 | | +| accept_time | DATETIME | 飞手接单时间 | | +| start_time | DATETIME | 实际开始时间 | | +| finish_time | DATETIME | 完成时间 | | +| cancel_time | DATETIME | 取消时间 | | +| cancel_reason | VARCHAR(200) | 取消原因 | | +| insurance_verified | TINYINT | 保险是否校验:0否 1是 | DEFAULT 0 | +| actual_reward | DECIMAL(10,2) | 实际报酬 | | +| platform_fee | DECIMAL(10,2) | 平台服务费 | | +| rating | TINYINT | 用户评分(1-5) | | +| rating_comment | VARCHAR(200) | 评价内容 | | +| created_at | DATETIME | 创建时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE task_record ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + task_id BIGINT NOT NULL COMMENT '任务ID', + user_id BIGINT NOT NULL COMMENT '关联用户ID', + pilot_id BIGINT COMMENT '接单飞手ID', + merchant_id BIGINT COMMENT '发单商家ID', + status TINYINT DEFAULT 1 COMMENT '状态:1待接单 2已接单 3执行中 4已完成 5已取消', + apply_time DATETIME COMMENT '申请/接单时间', + accept_time DATETIME COMMENT '飞手接单时间', + start_time DATETIME COMMENT '实际开始时间', + finish_time DATETIME COMMENT '完成时间', + cancel_time DATETIME COMMENT '取消时间', + cancel_reason VARCHAR(200) COMMENT '取消原因', + insurance_verified TINYINT DEFAULT 0 COMMENT '保险是否校验:0否 1是', + actual_reward DECIMAL(10,2) COMMENT '实际报酬', + platform_fee DECIMAL(10,2) COMMENT '平台服务费', + rating TINYINT COMMENT '用户评分(1-5)', + rating_comment VARCHAR(200) COMMENT '评价内容', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_task_user (task_id, user_id), + INDEX idx_user_status (user_id, status), + INDEX idx_pilot_status (pilot_id, status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务执行记录表'; +``` + +--- + +### 11.10 文件表 `file` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| file_name | VARCHAR(200) | 原始文件名 | NOT NULL | +| file_key | VARCHAR(200) | 存储路径/OSS Key | NOT NULL | +| file_suffix | VARCHAR(10) | 文件后缀 | | +| file_url | VARCHAR(500) | 访问URL | | +| file_size | BIGINT | 文件大小(字节) | | +| file_type | VARCHAR(20) | 类型:营业执照/图片/飞手执照/其他 | | +| uploader_id | BIGINT | 上传用户ID | | +| status | TINYINT | 状态:0禁用 1正常 | DEFAULT 1 | +| created_at | DATETIME | 上传时间 | DEFAULT CURRENT_TIMESTAMP | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE `file` ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + file_name VARCHAR(200) NOT NULL COMMENT '原始文件名', + file_key VARCHAR(200) NOT NULL COMMENT '存储路径/OSS Key', + file_suffix VARCHAR(10) COMMENT '文件后缀', + file_url VARCHAR(500) COMMENT '访问URL', + file_size BIGINT COMMENT '文件大小(字节)', + file_type VARCHAR(20) COMMENT '类型:营业执照/图片/飞手执照/其他', + uploader_id BIGINT COMMENT '上传用户ID', + status TINYINT DEFAULT 1 COMMENT '状态:0禁用 1正常', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + INDEX idx_type (file_type), + INDEX idx_uploader (uploader_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表'; +``` + +--- + +### 11.11 课程预约表 `course_appointment` + +| 字段 | 类型 | 说明 | 约束 | +|------|------|------|------| +| id | BIGINT | 主键 | PK, AUTO_INCREMENT | +| user_id | BIGINT | 用户ID | NOT NULL | +| course_id | BIGINT | 课程ID | NOT NULL | +| merchant_id | BIGINT | 商家ID | | +| appointment_date | DATETIME | 预约时间 | NOT NULL | +| person_count | INT | 预约人数 | DEFAULT 1 | +| contact_name | VARCHAR(50) | 联系人姓名 | | +| contact_phone | VARCHAR(20) | 联系人电话 | | +| remark | VARCHAR(200) | 备注 | | +| status | TINYINT | 状态:1已预约 2已确认 3已完成 4已取消 | DEFAULT 1 | +| confirm_time | DATETIME | 商家确认时间 | | +| cancel_time | DATETIME | 取消时间 | | +| cancel_reason | VARCHAR(200) | 取消原因 | | +| amount | DECIMAL(10,2) | 支付金额 | DEFAULT 0.00 | +| pay_status | TINYINT | 支付状态:0未支付 1已支付 2已退款 | DEFAULT 0 | +| created_at | DATETIME | 预约时间 | DEFAULT CURRENT_TIMESTAMP | +| updated_at | DATETIME | 更新时间 | | +| deleted_at | DATETIME | 软删除时间 | | + +```sql +CREATE TABLE course_appointment ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + user_id BIGINT NOT NULL COMMENT '用户ID', + course_id BIGINT NOT NULL COMMENT '课程ID', + merchant_id BIGINT COMMENT '商家ID', + appointment_date DATETIME NOT NULL COMMENT '预约时间', + person_count INT DEFAULT 1 COMMENT '预约人数', + contact_name VARCHAR(50) COMMENT '联系人姓名', + contact_phone VARCHAR(20) COMMENT '联系人电话', + remark VARCHAR(200) COMMENT '备注', + status TINYINT DEFAULT 1 COMMENT '状态:1已预约 2已确认 3已完成 4已取消', + confirm_time DATETIME COMMENT '商家确认时间', + cancel_time DATETIME COMMENT '取消时间', + cancel_reason VARCHAR(200) COMMENT '取消原因', + amount DECIMAL(10,2) DEFAULT 0.00 COMMENT '支付金额', + pay_status TINYINT DEFAULT 0 COMMENT '支付状态:0未支付 1已支付 2已退款', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '预约时间', + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + deleted_at DATETIME DEFAULT NULL COMMENT '软删除时间', + UNIQUE KEY uk_user_course_date (user_id, course_id, appointment_date), + INDEX idx_course_status (course_id, status), + INDEX idx_merchant (merchant_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程预约表'; +``` + +--- + +### 11.12 表间关系(ER) + +``` +user ─────┬── 1:1 pilot(飞手身份) + └── 1:1 merchant(商家身份) + └── 1:N task_record(我的任务) + └── 1:N course_appointment(课程预约) + +pilot ────── N:1 task_record(接单飞手) +merchant ─── N:1 task_record(发单商家) + N:1 course(商家开课) + +task ──────── 1:1 task_record(任务→执行记录) +course ────── 1:N course_appointment(课程→预约) + +file ──────── N:1 user(上传者) + N:1 pilot(执照图片) + N:1 merchant(营业执照) + N:1 task(作业场景图) + N:1 course(课程图片) + +exam_bank ── 1:N exam_question(题库→习题) +``` diff --git a/mvn17 b/mvn17 new file mode 100755 index 0000000..22dda08 --- /dev/null +++ b/mvn17 @@ -0,0 +1,30 @@ +#!/bin/bash +# ============================================================ +# 翼云Hub 构建包装器 +# 使用 Homebrew OpenJDK 17 运行 Maven,不影响系统默认 Java 8 环境 +# +# 常用命令: +# ./mvn17 compile 编译 +# ./mvn17 clean package 打包 +# ./mvn17 spring-boot:run 启动服务(开发模式) +# ./mvn17 test 运行测试 +# ./mvn17 run 运行已打包的 jar +# ============================================================ + +JAVA17_HOME="/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +export JAVA_HOME="$JAVA17_HOME" + +# run 子命令:直接用 Java 17 运行已打包的 jar +if [[ "$1" == "run" ]]; then + JAR=$(find "$SCRIPT_DIR/target" -name "laop-admin-*.jar" ! -name "*.original" 2>/dev/null | head -1) + if [[ -z "$JAR" ]]; then + echo "未找到 jar,请先执行:./mvn17 clean package" >&2 + exit 1 + fi + exec "$JAVA17_HOME/bin/java" -jar "$JAR" +fi + +# 其他命令透传给 Maven Wrapper +exec "$SCRIPT_DIR/mvnw" "$@" diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..bd8896b --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..92450f9 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e7d4685 --- /dev/null +++ b/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 3.2.12 + + + + com.haisen + laop-admin + 1.0.0-SNAPSHOT + jar + laop-admin + 翼云Hub · 无人机信息开放平台 + + + 17 + 17 + 17 + UTF-8 + UTF-8 + 42.7.3 + 3.27.2 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + org.postgresql + postgresql + ${postgresql.version} + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + + org.flywaydb + flyway-core + + + + org.projectlombok + lombok + true + + + + + org.apache.commons + commons-lang3 + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + + + + dev + + dev + + + true + + + + + prod + + prod + + + + diff --git a/src/main/java/com/haisen/laop/LaopAdminApplication.java b/src/main/java/com/haisen/laop/LaopAdminApplication.java new file mode 100644 index 0000000..99f6d84 --- /dev/null +++ b/src/main/java/com/haisen/laop/LaopAdminApplication.java @@ -0,0 +1,15 @@ +package com.haisen.laop; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 后端服务启动入口。 + */ +@SpringBootApplication +public class LaopAdminApplication { + + public static void main(String[] args) { + SpringApplication.run(LaopAdminApplication.class, args); + } +} diff --git a/src/main/java/com/haisen/laop/client/wx/AbstractWxApiClient.java b/src/main/java/com/haisen/laop/client/wx/AbstractWxApiClient.java new file mode 100644 index 0000000..edda51d --- /dev/null +++ b/src/main/java/com/haisen/laop/client/wx/AbstractWxApiClient.java @@ -0,0 +1,204 @@ +package com.haisen.laop.client.wx; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Value; + +import java.io.IOException; +import java.net.URI; +import java.net.URLEncoder; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.Duration; + +/** + * 微信三方 Client 抽象基类:统一承载 token 获取(Redis 缓存)与 HTTP 调用。 + * + *

token 缓存策略(cache-aside):access_token 非一次性凭据(有效期 7200 秒、 + * 每日获取次数有限),必须缓存复用 —— 业务触发时先查 Redis,命中直接返回; + * 未命中(或强制刷新)才请求微信并回填 Redis,TTL = 微信返回的有效期(expires_in), + * 保证过期后自动失效重新获取。Redis 缓存使多实例部署共享同一 token, + * 避免各实例各自刷新导致微信侧 token 互相失效。

+ * + *

域名配置化:所有接口 URL = {@code wechat.base-url}(配置注入)+ + * {@link WxApiPaths} 中的接口路径,Client 内不出现裸域名。

+ * + * @author duhao + */ +@Slf4j +public abstract class AbstractWxApiClient { + + /** token 失效类错误码:invalid credential,需强制刷新后重试 */ + public static final int ERR_INVALID_TOKEN = 40001; + + /** token 过期类错误码:access_token expired,需强制刷新后重试 */ + public static final int ERR_TOKEN_EXPIRED = 42001; + + /** 微信返回错误码字段 */ + protected static final String WX_FIELD_ERRCODE = "errcode"; + /** 微信返回错误信息字段 */ + protected static final String WX_FIELD_ERRMSG = "errmsg"; + + /** 单次微信调用超时(秒) */ + private static final int HTTP_TIMEOUT_SECONDS = 10; + + /** Redis token 缓存 key 前缀与后缀,中段由子类提供(如 mp / mini)区分两端应用 */ + private static final String TOKEN_KEY_PREFIX = "laop:wx:"; + private static final String TOKEN_KEY_SUFFIX = ":access_token"; + + /** 微信开放平台 API 域名(配置化,默认官方域名) */ + @Value("${wechat.base-url:https://api.weixin.qq.com}") + protected String baseUrl; + + protected final ObjectMapper objectMapper; + + private final HttpClient httpClient = HttpClient.newBuilder().build(); + private final RedissonClient redissonClient; + + protected AbstractWxApiClient(ObjectMapper objectMapper, RedissonClient redissonClient) { + this.objectMapper = objectMapper; + this.redissonClient = redissonClient; + } + + /** + * Redis token 缓存 key 的业务段(如 {@code mp} / {@code mini}),区分不同微信应用。 + */ + protected abstract String tokenCacheSegment(); + + /** + * 所属微信应用的 appId(由子类从配置注入)。 + */ + protected abstract String appId(); + + /** + * 所属微信应用的 appSecret(由子类从配置注入)。 + */ + protected abstract String appSecret(); + + /** + * 日志标识(如 "微信服务号" / "微信小程序"),统一日志前缀便于排查。 + */ + protected abstract String logTag(); + + /** + * 判断该端微信能力是否已配置(appId/appSecret 齐全)。 + * + *

未配置时调用方应降级处理(跳过发送/提示配置缺失),不阻断主业务。

+ */ + public boolean isConfigured() { + return StringUtils.isNotBlank(appId()) && StringUtils.isNotBlank(appSecret()); + } + + /** + * 获取 access_token(cache-aside:先 Redis 后微信,结果回填 Redis)。 + * + * @param forceRefresh true 强制刷新(token 失效重试场景),跳过缓存直取微信 + * @return access_token;获取失败返回 null,调用方降级处理 + */ + public synchronized String getAccessToken(boolean forceRefresh) { + RBucket bucket = redissonClient.getBucket(tokenCacheKey()); + if (!forceRefresh) { + String cached = bucket.get(); + if (StringUtils.isNotBlank(cached)) { + return cached; + } + } + return fetchAndCacheToken(bucket); + } + + /** + * 请求微信获取新 token 并回填 Redis(TTL = 微信返回的 expires_in 有效期)。 + */ + private String fetchAndCacheToken(RBucket bucket) { + String url = baseUrl + String.format(WxApiPaths.ACCESS_TOKEN, + URLEncoder.encode(appId(), StandardCharsets.UTF_8), + URLEncoder.encode(appSecret(), StandardCharsets.UTF_8)); + try { + JsonNode json = execute(getRequest(URI.create(url))); + int errcode = json.path(WX_FIELD_ERRCODE).asInt(0); + if (errcode != 0) { + log.error("[{}] 获取 access_token 失败: code={}, msg={}", + logTag(), errcode, json.path(WX_FIELD_ERRMSG).asText()); + return null; + } + String token = json.path("access_token").asText(""); + if (token.isBlank()) { + log.error("[{}] 获取 access_token 返回为空", logTag()); + return null; + } + // TTL 严格等于微信下发的有效期(秒),过期自动重新获取; + // 微信侧 token 过期后仍有短暂宽限期,无需额外预留余量 + long expiresInSeconds = json.path("expires_in").asLong(7200); + bucket.set(token, Duration.ofSeconds(expiresInSeconds)); + log.info("[{}] access_token 已刷新并写入 Redis, ttl={}s", logTag(), expiresInSeconds); + return token; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("[{}] 获取 access_token 被中断", logTag()); + return null; + } catch (IOException e) { + log.error("[{}] 获取 access_token 网络异常", logTag(), e); + return null; + } catch (Exception e) { + log.error("[{}] 获取 access_token 异常", logTag(), e); + return null; + } + } + + /** + * token 在 Redis 中的完整缓存 key。 + */ + private String tokenCacheKey() { + return TOKEN_KEY_PREFIX + tokenCacheSegment() + TOKEN_KEY_SUFFIX; + } + + // ==================== 通用 HTTP 执行(子类按接口语义组合使用) ==================== + + /** + * 构建 GET 请求。 + */ + protected HttpRequest getRequest(URI uri) { + return HttpRequest.newBuilder() + .uri(uri) + .GET() + .timeout(Duration.ofSeconds(HTTP_TIMEOUT_SECONDS)) + .build(); + } + + /** + * 构建 POST JSON 请求。 + */ + protected HttpRequest postJsonRequest(URI uri, Object body) throws IOException { + return HttpRequest.newBuilder() + .uri(uri) + .header("Content-Type", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(body))) + .timeout(Duration.ofSeconds(HTTP_TIMEOUT_SECONDS)) + .build(); + } + + /** + * 执行请求并解析响应为 JSON(微信 JSON 接口通用)。 + */ + protected JsonNode execute(HttpRequest request) throws IOException, InterruptedException { + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + return objectMapper.readTree(response.body()); + } + + /** + * 执行请求并返回原始字节数组(微信二进制接口通用,如小程序码图片)。 + * + *

微信二进制接口失败时返回 JSON 报文,调用方需按响应 Content-Type 区分处理。

+ */ + protected HttpResponse executeForBytes(HttpRequest request) + throws IOException, InterruptedException { + return httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray()); + } +} diff --git a/src/main/java/com/haisen/laop/client/wx/WxApiPaths.java b/src/main/java/com/haisen/laop/client/wx/WxApiPaths.java new file mode 100644 index 0000000..0bfddeb --- /dev/null +++ b/src/main/java/com/haisen/laop/client/wx/WxApiPaths.java @@ -0,0 +1,36 @@ +package com.haisen.laop.client.wx; + +/** + * 微信开放平台接口路径常量(仅存接口名称/路径,域名统一由 {@code wechat.base-url} 配置注入)。 + * + *

设计规则:与微信三方交互的 URL 收口此处,禁止在业务代码中裸写接口地址; + * 路径中的 {@code %s} 为请求参数占位符,由各 Client 按参数顺序格式化填充。

+ * + * @author duhao + */ +public final class WxApiPaths { + + /** 获取全局接口调用凭据 access_token(服务号/小程序通用,参数:appId、appSecret)。 */ + public static final String ACCESS_TOKEN = + "/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; + + /** 服务号:获取用户信息(参数:accessToken、openid),返回 subscribe/unionid 等字段。 */ + public static final String MP_USER_INFO = + "/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN"; + + /** 服务号:发送模板消息(参数:accessToken)。 */ + public static final String MP_TEMPLATE_SEND = + "/cgi-bin/message/template/send?access_token=%s"; + + /** 小程序:code 换登录会话(参数:appId、appSecret、jsCode)。 */ + public static final String MINI_CODE2SESSION = + "/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"; + + /** 小程序:获取不限制数量小程序码(参数:accessToken)。 */ + public static final String MINI_WXACODE_UNLIMIT = + "/wxa/getwxacodeunlimit?access_token=%s"; + + private WxApiPaths() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/client/wx/WxMiniClient.java b/src/main/java/com/haisen/laop/client/wx/WxMiniClient.java new file mode 100644 index 0000000..9eac9c7 --- /dev/null +++ b/src/main/java/com/haisen/laop/client/wx/WxMiniClient.java @@ -0,0 +1,173 @@ +package com.haisen.laop.client.wx; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.haisen.laop.common.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * 微信小程序三方 Client:code 换登录会话、小程序码生成。 + * + *

仅封装微信接口协议(HTTP 组装/解析),不含业务规则; + * token 的 Redis 缓存逻辑统一在 {@link AbstractWxApiClient}。

+ * + * @author duhao + */ +@Slf4j +@Component +public class WxMiniClient extends AbstractWxApiClient { + + /** 微信返回 openid 字段 */ + private static final String WX_FIELD_OPENID = "openid"; + /** 微信返回 unionid 字段 */ + private static final String WX_FIELD_UNIONID = "unionid"; + + /** 小程序码落地页由业务方传入,check_path 固定关闭:小程序未发布版本跳过页面存在性校验 */ + private static final boolean WXACODE_CHECK_PATH = false; + + @Value("${wechat.mini.app-id}") + private String appId; + + @Value("${wechat.mini.app-secret}") + private String appSecret; + + public WxMiniClient(ObjectMapper objectMapper, RedissonClient redissonClient) { + super(objectMapper, redissonClient); + } + + @Override + protected String tokenCacheSegment() { + return "mini"; + } + + @Override + protected String appId() { + return appId; + } + + @Override + protected String appSecret() { + return appSecret; + } + + @Override + protected String logTag() { + return "微信小程序"; + } + + /** + * code2session 会话凭证:openid 为登录主键,unionid 用于跨端(服务号)身份关联,可能为 null。 + */ + public record WxSession(String openid, String unionid) { + } + + /** + * 用微信 code 换登录会话(openid + unionid)。 + * + *

登录是同步强依赖链路,失败直接抛业务异常终止登录流程。

+ * + * @param code wx.login() 临时登录凭证 + * @return 会话凭证 + * @throws BusinessException 微信返回错误或 openid 为空时抛出 + */ + public WxSession jscode2session(String code) { + // 防呆:appId/appSecret 仍是脚手架占位值时给出明确配置指引 + if (appId.contains("your-appid") || appSecret.contains("your-secret")) { + throw new BusinessException(500, "后端未配置微信小程序 appId/appSecret," + + "请在 application-dev.yml 中填入或设置环境变量 WECHAT_MINI_APP_ID/SECRET"); + } + + String url = baseUrl + String.format(WxApiPaths.MINI_CODE2SESSION, + URLEncoder.encode(appId, StandardCharsets.UTF_8), + URLEncoder.encode(appSecret, StandardCharsets.UTF_8), + URLEncoder.encode(code, StandardCharsets.UTF_8)); + try { + JsonNode json = execute(getRequest(URI.create(url))); + if (json.has(WX_FIELD_ERRCODE)) { + String errMsg = json.path(WX_FIELD_ERRMSG).asText("未知错误"); + log.error("[微信小程序] code2session 失败: code={}, msg={}", + json.path(WX_FIELD_ERRCODE).asText(), errMsg); + throw new BusinessException(500, "微信登录失败:" + errMsg); + } + String openid = json.path(WX_FIELD_OPENID).asText(""); + if (openid.isBlank()) { + throw new BusinessException(500, "微信返回 openid 为空"); + } + // unionid 仅在开放平台绑定后返回,未绑定时为空,不影响登录 + String unionid = json.path(WX_FIELD_UNIONID).asText(""); + // TODO 临时调试日志:排查开放平台绑定后 unionid 未返回问题,验证后立即移除 + log.info("[临时调试] code2session 原始响应: {}", json); + return new WxSession(openid, unionid.isBlank() ? null : unionid); + } catch (BusinessException e) { + throw e; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new BusinessException(500, "微信登录超时,请稍后重试"); + } catch (IOException e) { + log.error("[微信小程序] code2session 调用异常", e); + throw new BusinessException(500, "微信登录网络异常"); + } + } + + /** + * 生成不限制数量小程序码(scene 携带业务参数,如推广人 ID)。 + * + *

用户可见的同步动作,失败抛业务异常由前端提示。

+ * + * @param page 落地页路径(如 pages/home/index) + * @param scene scene 参数(如 i=123) + * @param envVersion 小程序码打开版本:release / trial / develop;空则微信默认 release + * @return 小程序码图片二进制 + * @throws BusinessException 微信返回错误或图片为空时抛出 + */ + public byte[] getWxacodeUnlimit(String page, String scene, String envVersion) { + String token = getAccessToken(false); + if (token == null) { + throw new BusinessException(500, "获取微信接口凭据失败,请稍后重试"); + } + + Map body = new HashMap<>(); + body.put("page", page); + body.put("scene", scene); + body.put("check_path", WXACODE_CHECK_PATH); + if (envVersion != null && !envVersion.isBlank()) { + body.put("env_version", envVersion); + } + + String url = baseUrl + String.format(WxApiPaths.MINI_WXACODE_UNLIMIT, token); + try { + var response = executeForBytes(postJsonRequest(URI.create(url), body)); + // 微信失败时返回 JSON(application/json),成功时直接返回图片二进制流 + String contentType = response.headers().firstValue("Content-Type").orElse(""); + if (contentType.contains("application/json")) { + JsonNode json = objectMapper.readTree(new String(response.body(), StandardCharsets.UTF_8)); + log.error("[微信小程序] 生成小程序码失败: code={}, msg={}", + json.path(WX_FIELD_ERRCODE).asInt(), json.path(WX_FIELD_ERRMSG).asText()); + throw new BusinessException(500, "生成小程序码失败,请稍后重试"); + } + byte[] imageBytes = response.body(); + if (imageBytes == null || imageBytes.length == 0) { + throw new BusinessException(500, "生成小程序码失败,请稍后重试"); + } + return imageBytes; + } catch (BusinessException e) { + throw e; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new BusinessException(500, "生成小程序码超时,请稍后重试"); + } catch (IOException e) { + log.error("[微信小程序] 生成小程序码调用异常", e); + throw new BusinessException(500, "生成小程序码网络异常,请稍后重试"); + } + } +} diff --git a/src/main/java/com/haisen/laop/client/wx/WxMpClient.java b/src/main/java/com/haisen/laop/client/wx/WxMpClient.java new file mode 100644 index 0000000..296825d --- /dev/null +++ b/src/main/java/com/haisen/laop/client/wx/WxMpClient.java @@ -0,0 +1,165 @@ +package com.haisen.laop.client.wx; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +/** + * 微信服务号(公众号 MP)三方 Client:token 获取、用户信息查询、模板消息发送。 + * + *

仅封装微信接口协议(HTTP 组装/解析),不含业务规则; + * token 的 Redis 缓存逻辑统一在 {@link AbstractWxApiClient}。

+ * + * @author duhao + */ +@Slf4j +@Component +public class WxMpClient extends AbstractWxApiClient { + + /** 模板 data 结构中每个字段的包裹键({"xxx": {"value": "..."}},微信接口协议要求) */ + private static final String TMPL_FIELD_VALUE_KEY = "value"; + + /** 微信返回 msg_id 字段 */ + private static final String WX_FIELD_MSG_ID = "msg_id"; + + @Value("${wechat.mp.app-id}") + private String appId; + + @Value("${wechat.mp.app-secret}") + private String appSecret; + + public WxMpClient(ObjectMapper objectMapper, RedissonClient redissonClient) { + super(objectMapper, redissonClient); + } + + @Override + protected String tokenCacheSegment() { + return "mp"; + } + + @Override + protected String appId() { + return appId; + } + + @Override + protected String appSecret() { + return appSecret; + } + + @Override + protected String logTag() { + return "微信服务号"; + } + + /** + * 服务号用户信息快照(/cgi-bin/user/info 返回的本平台关注字段)。 + * + * @param unionid 用户 unionid(服务号已绑定微信开放平台时返回) + * @param subscribe 是否关注服务号:1 已关注,0 未关注 + */ + public record WxMpUserInfo(String unionid, Integer subscribe) { + } + + /** + * 查询服务号用户信息(关注状态 + unionid)。 + * + *

查询失败返回 empty,调用方据此降级(如放弃自动绑定/视为已关注避免误打扰)。

+ * + * @param openid 服务号用户 openid + * @return 用户信息快照 + */ + public Optional getUserInfo(String openid) { + String token = getAccessToken(false); + if (token == null) { + return Optional.empty(); + } + String url = baseUrl + String.format(WxApiPaths.MP_USER_INFO, token, + URLEncoder.encode(openid, StandardCharsets.UTF_8)); + try { + JsonNode json = execute(getRequest(URI.create(url))); + int errcode = json.path(WX_FIELD_ERRCODE).asInt(0); + if (errcode != 0) { + log.warn("[微信服务号] 查询用户信息失败: openid={}, code={}, msg={}", + openid, errcode, json.path(WX_FIELD_ERRMSG).asText()); + return Optional.empty(); + } + String unionid = json.path("unionid").asText(""); + return Optional.of(new WxMpUserInfo( + unionid.isBlank() ? null : unionid, + json.path("subscribe").asInt(0))); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return Optional.empty(); + } catch (Exception e) { + log.error("[微信服务号] 查询用户信息网络异常: openid={}", openid, e); + return Optional.empty(); + } + } + + /** + * 发送模板消息(提交微信,送达结果由微信异步回调确认)。 + * + * @param accessToken 调用方先取好的 access_token(token 失效重试策略由调用方掌控) + * @param openId 接收人服务号 openid + * @param templateId 模板 ID(服务号后台申请获得) + * @param data 模板参数(字段 key → 值) + * @return 提交结果(errcode=0 表示微信受理成功,含 msgId) + */ + public WxTemplateSendResult sendTemplate(String accessToken, String openId, + String templateId, Map data) { + Map body = new LinkedHashMap<>(); + body.put("touser", openId); + body.put("template_id", templateId); + body.put("data", wrapTemplateData(data)); + + String url = baseUrl + String.format(WxApiPaths.MP_TEMPLATE_SEND, accessToken); + try { + JsonNode json = execute(postJsonRequest(URI.create(url), body)); + int errcode = json.path(WX_FIELD_ERRCODE).asInt(0); + return new WxTemplateSendResult( + errcode == 0 ? json.path(WX_FIELD_MSG_ID).asLong(0L) : 0L, + errcode, + json.path(WX_FIELD_ERRMSG).asText("未知错误")); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return new WxTemplateSendResult(0L, -1, "发送被中断"); + } catch (IOException e) { + log.error("[微信服务号] 发送模板消息网络异常: openId={}", openId, e); + return new WxTemplateSendResult(0L, -1, "微信接口网络异常:" + e.getMessage()); + } catch (Exception e) { + log.error("[微信服务号] 发送模板消息异常: openId={}", openId, e); + return new WxTemplateSendResult(0L, -1, "微信接口调用异常:" + e.getMessage()); + } + } + + /** + * 模板消息提交结果。 + * + * @param msgId 微信消息 ID(受理成功时返回,送达回调按此关联) + * @param errcode 错误码:0 成功,-1 本地异常(网络/中断) + * @param errmsg 错误信息 + */ + public record WxTemplateSendResult(long msgId, int errcode, String errmsg) { + } + + /** + * 模板参数包裹为微信要求的 {"xxx": {"value": "..."}} 结构。 + */ + private Map wrapTemplateData(Map data) { + Map wrapped = new LinkedHashMap<>(); + data.forEach((key, value) -> wrapped.put(key, Map.of(TMPL_FIELD_VALUE_KEY, value))); + return wrapped; + } +} diff --git a/src/main/java/com/haisen/laop/common/BusinessException.java b/src/main/java/com/haisen/laop/common/BusinessException.java new file mode 100644 index 0000000..9ba003f --- /dev/null +++ b/src/main/java/com/haisen/laop/common/BusinessException.java @@ -0,0 +1,43 @@ +package com.haisen.laop.common; + +import lombok.Getter; + +/** + * 业务异常,用于在 Service 层主动抛出以终止流程并返回错误信息。 + * + *

由 {@link GlobalExceptionHandler} 统一捕获并转换为 {@link Result} 响应, + * 前端根据 {@code message} 展示用户提示。

+ * + * @author duhao + */ +@Getter +public class BusinessException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * 业务错误码,默认 500;可自定义以支持前端按码分支处理(如 1001=参数校验失败)。 + */ + private final Integer code; + + /** + * 构造业务异常(默认错误码 500)。 + * + * @param message 用户可见的错误提示 + */ + public BusinessException(String message) { + super(message); + this.code = 500; + } + + /** + * 构造指定错误码的业务异常。 + * + * @param code 业务错误码 + * @param message 用户可见的错误提示 + */ + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + } +} diff --git a/src/main/java/com/haisen/laop/common/GlobalExceptionHandler.java b/src/main/java/com/haisen/laop/common/GlobalExceptionHandler.java new file mode 100644 index 0000000..a185ae1 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/GlobalExceptionHandler.java @@ -0,0 +1,71 @@ +package com.haisen.laop.common; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.BindException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 全局异常处理器,统一拦截 Controller 层抛出的异常并转换为 {@link Result} 响应。 + * + *

职责:

+ *
    + *
  • 捕获 {@link BusinessException} — 业务主动抛出的异常,直接返回其错误码和消息
  • + *
  • 捕获参数校验异常 — 返回首个校验失败的错误消息
  • + *
  • 兜底捕获 {@link Exception} — 返回 500 通用错误,同时记录完整堆栈便于排查
  • + *
+ * + * @author duhao + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常,直接透传 code 和 message。 + */ + @ExceptionHandler(BusinessException.class) + public Result handleBusinessException(BusinessException ex) { + log.warn("[业务异常] code={}, msg={}", ex.getCode(), ex.getMessage()); + return Result.fail(ex.getCode(), ex.getMessage()); + } + + /** + * 参数校验异常(@Valid @Validated),返回首个校验失败的消息。 + */ + @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class}) + public Result handleValidationException(Exception ex) { + String message = extractFirstErrorMessage(ex); + log.warn("[参数校验失败] {}", message); + return Result.fail(1001, message); + } + + /** + * 兜底异常处理器,捕获所有未被上层处理的异常。 + */ + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex) { + log.error("[系统异常] ", ex); + return Result.fail("系统繁忙,请稍后再试"); + } + + /** + * 从校验异常中提取首个错误消息。 + */ + private String extractFirstErrorMessage(Exception ex) { + if (ex instanceof MethodArgumentNotValidException methodEx) { + return methodEx.getBindingResult().getFieldErrors().stream() + .findFirst() + .map(error -> error.getField() + ": " + error.getDefaultMessage()) + .orElse("参数校验失败"); + } + if (ex instanceof BindException bindEx) { + return bindEx.getBindingResult().getFieldErrors().stream() + .findFirst() + .map(error -> error.getField() + ": " + error.getDefaultMessage()) + .orElse("参数校验失败"); + } + return ex.getMessage(); + } +} diff --git a/src/main/java/com/haisen/laop/common/RequestContext.java b/src/main/java/com/haisen/laop/common/RequestContext.java new file mode 100644 index 0000000..848a611 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/RequestContext.java @@ -0,0 +1,50 @@ +package com.haisen.laop.common; + +/** + * 当前请求上下文,基于 {@link ThreadLocal} 持有当前登录用户 ID。 + * + *

由鉴权拦截器在请求进入时写入,请求结束时清理;业务代码通过 {@link #getUserId()} 获取, + * 避免在 Controller 层层层传递 userId。

+ * + *

设计说明:当前阶段 token 为前端直接传入的 userId(简化实现),后续升级为 JWT 时 + * 拦截器内部替换为 JWT 解析逻辑即可,业务层调用点无需改动。

+ * + * @author duhao + */ +public final class RequestContext { + + /** + * ThreadLocal 存储当前请求的用户 ID。 + */ + private static final ThreadLocal USER_ID_HOLDER = new ThreadLocal<>(); + + private RequestContext() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } + + /** + * 设置当前请求的用户 ID。 + * + * @param userId 用户 ID + */ + public static void setUserId(Long userId) { + USER_ID_HOLDER.set(userId); + } + + /** + * 获取当前请求的用户 ID。 + * + * @return 当前用户 ID,未设置时返回 null + */ + public static Long getUserId() { + return USER_ID_HOLDER.get(); + } + + /** + * 清除当前请求的上下文,防止 Thread 复用时污染后续请求。 + *

必须在请求结束时调用(如拦截器 afterCompletion)。

+ */ + public static void clear() { + USER_ID_HOLDER.remove(); + } +} diff --git a/src/main/java/com/haisen/laop/common/Result.java b/src/main/java/com/haisen/laop/common/Result.java new file mode 100644 index 0000000..a3768c8 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/Result.java @@ -0,0 +1,85 @@ +package com.haisen.laop.common; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 统一响应封装,前后端契约对齐。 + * + *

约定:{@code code = 200} 表示成功;{@code 401} 表示未授权(token 过期/无效); + * 其他非 200 表示业务异常,前端根据 {@code message} 展示提示。

+ * + * @param 业务数据类型 + * @author duhao + */ +@Data +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 响应码,200 成功,401 未授权,其他非 200 为业务错误。 + */ + private Integer code; + + /** + * 响应消息,失败时展示给用户。 + */ + private String message; + + /** + * 业务数据,成功时携带;失败时通常为 null。 + */ + private T data; + + /** + * 成功响应(无数据)。 + */ + public static Result success() { + return build(200, "success", null); + } + + /** + * 成功响应(携带数据)。 + */ + public static Result success(T data) { + return build(200, "success", data); + } + + /** + * 成功响应(携带数据和自定义消息)。 + */ + public static Result success(T data, String message) { + return build(200, message, data); + } + + /** + * 业务失败响应。 + */ + public static Result fail(String message) { + return build(500, message, null); + } + + /** + * 指定错误码的失败响应。 + */ + public static Result fail(Integer code, String message) { + return build(code, message, null); + } + + /** + * 未授权响应(token 过期或无效)。 + */ + public static Result unauthorized(String message) { + return build(401, message, null); + } + + private static Result build(Integer code, String message, T data) { + Result result = new Result<>(); + result.setCode(code); + result.setMessage(message); + result.setData(data); + return result; + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/AnnouncementConstants.java b/src/main/java/com/haisen/laop/common/constants/AnnouncementConstants.java new file mode 100644 index 0000000..39f76ec --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/AnnouncementConstants.java @@ -0,0 +1,36 @@ +package com.haisen.laop.common.constants; + +/** + * 公告领域常量类,承载 {@code announcement} 表相关的分页上限、长度限制等参数。 + * + *

设计规则:通用参数统一放此类;公告显示状态由 + * {@code com.haisen.laop.common.enums.AnnouncementStatusEnum} 维护, + * 禁止在 Service/Controller 中出现裸数字(如 {@code .status(1)})。 + * 类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class AnnouncementConstants { + + /** 列表默认页大小。 */ + public static final int DEFAULT_PAGE_SIZE = 10; + + /** 列表最大页大小,防止一次拉取全量数据。 */ + public static final int MAX_PAGE_SIZE = 50; + + /** 公告标题最大长度(与 DDL varchar(100) 对齐)。 */ + public static final int MAX_TITLE_LENGTH = 100; + + /** 公告正文最大字符数,覆盖长文本的合理上限。 */ + public static final int MAX_CONTENT_LENGTH = 5000; + + /** 小程序端公告列表默认拉取条数(首页公告条取最新一条)。 */ + public static final int MINI_LIST_DEFAULT_LIMIT = 5; + + /** 小程序端公告列表单次最大拉取条数,防止拉取全量。 */ + public static final int MINI_LIST_MAX_LIMIT = 20; + + private AnnouncementConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/AppBannerConstants.java b/src/main/java/com/haisen/laop/common/constants/AppBannerConstants.java new file mode 100644 index 0000000..e17c5cc --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/AppBannerConstants.java @@ -0,0 +1,36 @@ +package com.haisen.laop.common.constants; + +/** + * 轮播图领域常量类,承载 {@code app_banner} 表相关的跳转参数、排序、长度限制等。 + * + *

设计规则:通用参数统一放此类;轮播图显示状态由 + * {@code com.haisen.laop.common.enums.BannerStatusEnum} 维护, + * 禁止在 Service/Controller 中出现裸数字(如 {@code .status(1)})。 + * 类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class AppBannerConstants { + + /** 列表默认页大小。 */ + public static final int DEFAULT_PAGE_SIZE = 10; + + /** 列表最大页大小,防止一次拉取全量数据。 */ + public static final int MAX_PAGE_SIZE = 50; + + /** 标题最大长度(与 DDL varchar(100) 对齐)。 */ + public static final int MAX_TITLE_LENGTH = 100; + + /** 副标题最大长度。 */ + public static final int MAX_SUBTITLE_LENGTH = 200; + + /** 自定义跳转 URL 最大长度。 */ + public static final int MAX_LINK_URL_LENGTH = 500; + + /** 排序值起始值,新增轮播图默认排在末尾。 */ + public static final int DEFAULT_SORT_ORDER = 0; + + private AppBannerConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/CertConstants.java b/src/main/java/com/haisen/laop/common/constants/CertConstants.java new file mode 100644 index 0000000..6f8eae6 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/CertConstants.java @@ -0,0 +1,27 @@ +package com.haisen.laop.common.constants; + +/** + * 认证领域常量类,承载飞手/商家认证领域的业务错误码与数量上限等参数。 + * + *

设计规则:认证状态统一由 {@code com.haisen.laop.common.enums.CertStatusEnum} + * 维护,执照类型统一由 {@code com.haisen.laop.common.enums.LicenseTypeEnum} 维护, + * 本类不再定义任何类型/状态编码,禁止在 Service/Controller 中出现裸数字判断 + * (如 {@code certStatus == 2})。类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class CertConstants { + + /** + * 业务错误码:未认证飞手申请接单(前端据此弹"完成飞手认证"引导弹窗,而非普通错误提示)。 + * 与通用 500 区分:40301 属产品引导场景,前端有专属交互。 + */ + public static final int CODE_NOT_PILOT_CERTIFIED = 40301; + + /** 单个飞手最多可提交的执照数量上限。 */ + public static final int MAX_LICENSE_COUNT = 3; + + private CertConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/CourseConstants.java b/src/main/java/com/haisen/laop/common/constants/CourseConstants.java new file mode 100644 index 0000000..2e28e4a --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/CourseConstants.java @@ -0,0 +1,51 @@ +package com.haisen.laop.common.constants; + +import java.time.format.DateTimeFormatter; + +/** + * 课程领域常量类,承载 {@code course} 表相关的排课规则、分页上限、长度限制等参数。 + * + *

设计规则:通用参数统一放此类;课程上下架状态由 {@code CourseStatusEnum}、 + * 预约状态由 {@code AppointmentStatusEnum}、排课方式由 {@code ScheduleTypeEnum}、 + * 精选标记由 {@code YesNoEnum} 维护,禁止在 Service/Controller 中出现裸数字 + * (如 {@code .setStatus(1)}、{@code scheduleType == 2})。类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class CourseConstants { + + /** 每周星期编码下限(1=周一,与 {@link java.time.DayOfWeek#MONDAY} 编码一致)。 */ + public static final int WEEK_DAY_MIN = 1; + + /** 每周星期编码上限(7=周日,与 {@link java.time.DayOfWeek#SUNDAY} 编码一致)。 */ + public static final int WEEK_DAY_MAX = 7; + + /** 日期排课最大日期数量,防止恶意/误操作提交超长排课串撑爆字段。 */ + public static final int MAX_SCHEDULE_DATE_COUNT = 60; + + /** 排课日期格式(与 schedule_dates 分号串内的单个日期格式一致)。 */ + public static final DateTimeFormatter SCHEDULE_DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE; + + // ==================== 分页参数 ==================== + + /** 列表默认页大小。 */ + public static final int DEFAULT_PAGE_SIZE = 10; + + /** 列表最大页大小,防止一次拉取全量数据。 */ + public static final int MAX_PAGE_SIZE = 50; + + // ==================== 其他 ==================== + + /** 多选字段(星期串/日期串)统一分隔符:英文分号。 */ + public static final String SEPARATOR = ";"; + + /** 课程简介(富文本 HTML)最大字符数,覆盖图文混排的合理上限。 */ + public static final int MAX_DESCRIPTION_LENGTH = 20000; + + /** 小程序首页精选课程列表默认上限(避免一次拉取过多数据)。 */ + public static final int FEATURED_LIST_LIMIT = 6; + + private CourseConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/FileConstants.java b/src/main/java/com/haisen/laop/common/constants/FileConstants.java new file mode 100644 index 0000000..eaff003 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/FileConstants.java @@ -0,0 +1,33 @@ +package com.haisen.laop.common.constants; + +import java.util.Set; + +/** + * 文件领域常量类,承载 {@code sys_file} 相关的大小、后缀等校验参数。 + * + *

设计规则:通用参数统一放此类;文件状态由 + * {@code com.haisen.laop.common.enums.FileStatusEnum} 维护, + * 禁止在 Service 中出现裸数字(如 {@code .status(1)})。 + * 类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class FileConstants { + + /** 单文件大小上限:5MB。 */ + public static final long MAX_FILE_SIZE = 5L * 1024 * 1024; + + /** 允许上传的图片后缀集合(小写、不含点)。 */ + public static final Set ALLOWED_IMAGE_SUFFIXES = Set.of( + "jpg", "jpeg", "png", "gif", "webp", "bmp" + ); + + /** 允许上传的文件后缀集合(预留非图片类型时可扩展)。 */ + public static final Set ALLOWED_FILE_SUFFIXES = Set.of( + "jpg", "jpeg", "png", "gif", "webp", "bmp", "pdf", "doc", "docx" + ); + + private FileConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/HomeConstants.java b/src/main/java/com/haisen/laop/common/constants/HomeConstants.java new file mode 100644 index 0000000..004f516 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/HomeConstants.java @@ -0,0 +1,24 @@ +package com.haisen.laop.common.constants; + +/** + * 首页展示领域常量类,承载"实力商家 / 本地飞手"版块的数量限制等参数。 + * + *

类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class HomeConstants { + + /** 首页"实力商家"展示数量上限。 */ + public static final int HOME_MERCHANT_LIMIT = 10; + + /** 首页"本地飞手"展示数量上限。 */ + public static final int HOME_PILOT_LIMIT = 10; + + /** 详情页任务列表展示数量上限(商家发布的任务 / 飞手参与的任务)。 */ + public static final int DETAIL_TASK_LIMIT = 20; + + private HomeConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/PointsConstants.java b/src/main/java/com/haisen/laop/common/constants/PointsConstants.java new file mode 100644 index 0000000..26bbed7 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/PointsConstants.java @@ -0,0 +1,85 @@ +package com.haisen.laop.common.constants; + +import java.util.Set; + +/** + * 积分领域常量类,承载积分业务的错误码、固定积分规则、功能配置键与数值边界。 + * + *

积分值来源约定:

+ *
    + *
  • 运营可调参数(发布任务奖励、优质任务扣减)放 {@code app_config},配置键与默认值收口在本类;
  • + *
  • 协议/业务固定的积分规则(邀请注册、完成任务奖励)以常量形式保留在本类;
  • + *
  • 事件类型见 {@link com.haisen.laop.common.enums.PointsEventEnum}, + * 变动方向见 {@code com.haisen.laop.common.enums.PointsChangeTypeEnum}, + * 禁止在业务代码中出现裸积分数字。
  • + *
+ * + *

类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class PointsConstants { + + /** 业务错误码:积分不足,前端识别此 code 后弹引导弹窗(如发布优质任务引导推广拉新)。 */ + public static final int ERROR_CODE_POINTS_INSUFFICIENT = 10001; + + /** 积分不足时的默认提示文案(与前端"推广拉新得积分"引导弹窗呼应)。 */ + public static final String MSG_POINTS_INSUFFICIENT = + "积分不足,推广小程序引导好友成功注册可得积分,快去推广吧!"; + + // ==================== 固定积分规则(不随运营配置变化) ==================== + + /** 邀请好友注册成功奖励积分。 */ + public static final int INVITE_REGISTER_POINTS = 4; + + /** 飞手完成任务奖励积分。 */ + public static final int TASK_COMPLETE_POINTS = 1; + + // ==================== 功能配置键(app_config.config_key) ==================== + + /** + * 功能配置键:发布任务获取积分数量。 + *

用户每发布一个普通任务奖励的积分,非负整数;{@code 0} 表示不奖励。默认 {@value #DEFAULT_PUBLISH_AWARD_POINTS}。

+ */ + public static final String CONFIG_KEY_POINTS_PUBLISH_AWARD = "points_publish_award"; + + /** + * 功能配置键:发布任务扣减积分数量。 + *

发布优质任务消耗的积分,非负整数;{@code 0} 表示不扣减。默认 {@value #DEFAULT_PREMIUM_DEDUCT_POINTS}。

+ */ + public static final String CONFIG_KEY_POINTS_PREMIUM_DEDUCT = "points_premium_deduct"; + + /** 发布任务获取积分数量的兜底默认值(配置缺失或非法时使用)。 */ + public static final int DEFAULT_PUBLISH_AWARD_POINTS = 1; + + /** 发布任务扣减积分数量的兜底默认值(配置缺失或非法时使用)。 */ + public static final int DEFAULT_PREMIUM_DEDUCT_POINTS = 4; + + // ==================== 数值边界 ==================== + + /** 积分规则配置项允许的最小值(0 表示不奖励/不扣减)。 */ + public static final int MIN_CONFIG_POINTS = 0; + + /** 积分规则配置项允许的最大值。 */ + public static final int MAX_CONFIG_POINTS = 99999; + + /** Web 后台单次手动增减积分允许的最小值(手动调整必须为正整数,方向另传)。 */ + public static final int MIN_MANUAL_ADJUST_POINTS = 1; + + /** Web 后台单次手动增减积分允许的最大值。 */ + public static final int MAX_MANUAL_ADJUST_POINTS = 99999; + + /** 手动调整原因最大长度(points_detail.remark 列长 200,人工原因从严限制 100)。 */ + public static final int MAX_MANUAL_REMARK_LENGTH = 100; + + /** + * 取值为"非负整数"的配置键集合,AppConfigService 更新时据此做数值校验。 + */ + public static final Set NUMERIC_CONFIG_KEYS = Set.of( + CONFIG_KEY_POINTS_PUBLISH_AWARD, + CONFIG_KEY_POINTS_PREMIUM_DEDUCT); + + private PointsConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/TaskConstants.java b/src/main/java/com/haisen/laop/common/constants/TaskConstants.java new file mode 100644 index 0000000..69f75ae --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/TaskConstants.java @@ -0,0 +1,67 @@ +package com.haisen.laop.common.constants; + +/** + * 任务领域常量类,承载 {@code task} 相关的业务默认值、上限下限等参数。 + * + *

设计规则:通用参数统一放此类;任务状态由 {@code com.haisen.laop.common.enums.TaskStatusEnum} + * 维护、申请记录状态由 {@code TaskRecordStatusEnum} 维护、0/1 标记位由 {@code YesNoEnum} 维护, + * 禁止在 Service/Controller 中出现裸数字(如 {@code .premiumCost(0)})。 + * 类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class TaskConstants { + + /** 场景图最多上传数量(同时也限制 {@code scene_image_ids} 分号串长度)。 */ + public static final int MAX_SCENE_IMAGE_COUNT = 5; + + /** 需求人数上下限。 */ + public static final int REQUIRED_COUNT_MIN = 1; + public static final int REQUIRED_COUNT_MAX = 99; + + /** 任务编号前缀。 */ + public static final String TASK_NO_PREFIX = "LAOP"; + + /** + * 任务编号尾部(毫秒后4位)的补零长度:确保始终为 4 位(如 0089、5678)。 + * + *

编号整体规则:{@code LAOP + yyyyMMdd + 毫秒后4位},共 13 位,如 {@code LAOP202608285678}。

+ */ + public static final int TASK_NO_TAIL_LENGTH = 4; + + // ==================== 申请记录(task_record)状态 ==================== + // 申请记录状态编码统一由枚举 com.haisen.laop.common.enums.TaskRecordStatusEnum + // 维护(APPLIED=1 / APPROVED=2 / REJECTED=3 / WITHDRAWN=4), + // 业务代码通过 TaskRecordStatusEnum.XXX.getCode() 取编码写入数据库(status 仍为 SMALLINT), + // 禁止在此处重新定义 int 常量,避免编码与含义两处维护产生漂移。 + + /** + * 同意某位飞手后,其余"已申请"记录自动关闭的拒绝原因文案。 + */ + public static final String AUTO_REJECT_REASON = "商家已选择其他飞手"; + + /** + * 飞手撤销申请时写入 cancel_reason 的统一文案(申诉与风控审计依据)。 + */ + public static final String WITHDRAW_REASON_PILOT = "飞手主动撤销申请"; + + /** + * 商家撤回任务时写入申请记录 reject_reason 的统一文案。 + * 已接单的飞手会收到任务撤回通知,申请记录状态同步关闭。 + */ + public static final String RECALL_REASON_MERCHANT = "商家撤回任务"; + + /** + * 商家确认开始任务时,自动关闭待确认申请的 reject_reason 统一文案。 + */ + public static final String AUTO_REJECT_REASON_TASK_STARTED = "任务已开始"; + + /** + * 单个任务的申请人数上限(防刷防御值,达到后不再接受新申请)。 + */ + public static final int MAX_APPLICANT_COUNT = 50; + + private TaskConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/UserConstants.java b/src/main/java/com/haisen/laop/common/constants/UserConstants.java new file mode 100644 index 0000000..6143477 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/UserConstants.java @@ -0,0 +1,24 @@ +package com.haisen.laop.common.constants; + +/** + * 用户领域常量类,承载 {@code "user"} 表相关的分页上限等参数。 + * + *

设计规则:通用参数统一放此类;角色类型由 {@code RoleTypeEnum}、 + * 性别由 {@code GenderEnum}、账号状态由 {@code UserStatusEnum} 维护, + * 禁止在 Service/Controller 中出现裸数字(如 {@code roleType == 2})。 + * 类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class UserConstants { + + /** 列表默认页大小。 */ + public static final int DEFAULT_PAGE_SIZE = 10; + + /** 列表最大页大小,防止一次拉取全量数据。 */ + public static final int MAX_PAGE_SIZE = 50; + + private UserConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/constants/WxMessageConstants.java b/src/main/java/com/haisen/laop/common/constants/WxMessageConstants.java new file mode 100644 index 0000000..17c282e --- /dev/null +++ b/src/main/java/com/haisen/laop/common/constants/WxMessageConstants.java @@ -0,0 +1,88 @@ +package com.haisen.laop.common.constants; + +import java.util.Set; + +/** + * 微信服务号模板消息领域常量类,承载模板字段 key、回调事件名、功能配置键等魔法字符串。 + * + *

模板消息链路:业务事件 → DB 持久化队列 → 消费者调微信 + * {@code /cgi-bin/message/template/send} 提交 → 微信异步回调 + * {@code TEMPLATESENDJOBFINISH} 送达结果 → 回写发送日志。

+ * + *

设计规则:模板字段 key(如 {@code character_string14})、事件名等魔法字符串 + * 统一收口此类,禁止在业务代码中裸写;业务类型、发送状态、任务状态等数字编码统一由 + * {@code WxNotifyBizTypeEnum}、{@code WxSendStatusEnum}、{@code WxNotifyTaskStatusEnum} + * 维护。类私有无参构造器,防止被实例化。

+ * + * @author duhao + */ +public final class WxMessageConstants { + + // ==================== 任务申请通知模板字段 key ==================== + + /** 模板字段:任务编号(character_string14)。 */ + public static final String TMPL_TASK_NO = "character_string14"; + + /** 模板字段:任务名称(thing5,微信 thing 类型限 20 字符)。 */ + public static final String TMPL_TASK_NAME = "thing5"; + + /** 模板字段:服务类型(thing12,如 植保、吊运)。 */ + public static final String TMPL_SERVICE_TYPE = "thing12"; + + /** 模板字段:处理人(thing17,飞手认证姓名 + 电话)。 */ + public static final String TMPL_HANDLER = "thing17"; + + /** 模板字段:接收时间(time18,yyyy-MM-dd HH:mm)。 */ + public static final String TMPL_APPLY_TIME = "time18"; + + // ==================== 服务号用户字段 ==================== + + /** 服务号用户 subscribe 字段值:1 = 已关注(微信 API 返回值,非平台业务状态)。 */ + public static final int MP_SUBSCRIBED = 1; + + // ==================== 服务号回调事件 ==================== + + /** 事件类型字段名(XML)。 */ + public static final String XML_FIELD_EVENT = "Event"; + + /** 模板消息送达结果事件:TEMPLATESENDJOBFINISH。 */ + public static final String EVENT_TEMPLATE_SEND_JOB_FINISH = "TEMPLATESENDJOBFINISH"; + + /** 关注事件:subscribe(用于自动绑定服务号 openid)。 */ + public static final String EVENT_SUBSCRIBE = "subscribe"; + + /** 取关事件:unsubscribe(用于自动解绑服务号 openid)。 */ + public static final String EVENT_UNSUBSCRIBE = "unsubscribe"; + + /** 送达结果字段名(XML)。 */ + public static final String XML_FIELD_STATUS = "Status"; + + /** 送达成功 Status 值。 */ + public static final String STATUS_SUCCESS = "success"; + + /** 送达失败 Status 前缀(如 failed:user block、failed: system failed)。 */ + public static final String STATUS_FAILED_PREFIX = "failed"; + + /** 用户拒收事件(软性失败,微信可能延迟重试后推送最终结果)。 */ + public static final String STATUS_USER_BLOCK = "failed:user block"; + + /** + * XML 事件消息中允许处理的合法事件名集合(防御性校验,避免处理无关事件)。 + */ + public static final Set HANDLED_EVENTS = Set.of( + EVENT_TEMPLATE_SEND_JOB_FINISH, EVENT_SUBSCRIBE, EVENT_UNSUBSCRIBE); + + // ==================== 功能配置键(app_config.config_key) ==================== + + /** + * 功能配置键:微信公众号模板消息推送总开关({@code app_config.mp_push_enabled})。 + *

取值规则:{@code "1"}=开启(消费者正常轮询 wx_notify_task), + * {@code "0"}=关闭(消费者跳过 DB 操作,仅按轮询间隔空转监听开关状态)。 + * 由 Web 端功能配置入口维护,运行时可切换。

+ */ + public static final String CONFIG_KEY_MP_PUSH_ENABLED = "mp_push_enabled"; + + private WxMessageConstants() { + throw new UnsupportedOperationException("Utility class cannot be instantiated"); + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/AnnouncementStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/AnnouncementStatusEnum.java new file mode 100644 index 0000000..5530491 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/AnnouncementStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 公告状态枚举,对应 {@code announcement.status} 字段。 + * + * @author duhao + */ +@Getter +public enum AnnouncementStatusEnum { + + /** + * 隐藏,小程序端不展示。 + */ + HIDDEN(0, "隐藏"), + + /** + * 显示,小程序端首页公告条可见。 + */ + VISIBLE(1, "显示"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + AnnouncementStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static AnnouncementStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (AnnouncementStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/AppointmentStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/AppointmentStatusEnum.java new file mode 100644 index 0000000..d234819 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/AppointmentStatusEnum.java @@ -0,0 +1,50 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 课程预约状态枚举,对应 {@code course_appointment.status} 字段。 + * + *

二态模型:用户提交预约即生效(无需商家确认),取消为终态。

+ * + * @author duhao + */ +@Getter +public enum AppointmentStatusEnum { + + /** + * 已预约,用户提交即生效,无需商家确认。 + */ + ACTIVE(1, "已预约"), + + /** + * 已取消,终态,用户可自助取消。 + */ + CANCELLED(2, "已取消"); + + /** 数字编码,落库到 course_appointment.status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + AppointmentStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static AppointmentStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (AppointmentStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/BannerStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/BannerStatusEnum.java new file mode 100644 index 0000000..102c740 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/BannerStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 轮播图状态枚举,对应 {@code app_banner.status} 字段。 + * + * @author duhao + */ +@Getter +public enum BannerStatusEnum { + + /** + * 隐藏,小程序端不展示。 + */ + HIDDEN(0, "隐藏"), + + /** + * 显示,小程序端首页轮播可见。 + */ + VISIBLE(1, "显示"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + BannerStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static BannerStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (BannerStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/CertStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/CertStatusEnum.java new file mode 100644 index 0000000..9d980ef --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/CertStatusEnum.java @@ -0,0 +1,66 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 认证状态枚举,对应 {@code pilot.cert_status} / {@code merchant.cert_status} 字段。 + * + *

认证状态机:未认证(0)→ 认证中(1)→ 已认证(2)/ 认证失败(3); + * 已认证可被运营吊销为(4),吊销后如需恢复由管理员改回已认证。

+ * + * @author duhao + */ +@Getter +public enum CertStatusEnum { + + /** + * 未认证,从未提交过认证资料。 + */ + NONE(0, "未认证"), + + /** + * 认证中,资料已提交等待审核。 + */ + PENDING(1, "认证中"), + + /** + * 已认证,审核通过,业务权限放行。 + */ + CERTIFIED(2, "已认证"), + + /** + * 认证失败,审核驳回,可修改后重新提交。 + */ + REJECTED(3, "认证失败"), + + /** + * 已吊销,运营后台强制取消资格,认证记录保留不软删。 + */ + REVOKED(4, "已吊销"); + + /** 数字编码,落库到 cert_status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + CertStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static CertStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (CertStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/CourseCategoryEnum.java b/src/main/java/com/haisen/laop/common/enums/CourseCategoryEnum.java new file mode 100644 index 0000000..aad331f --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/CourseCategoryEnum.java @@ -0,0 +1,50 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 研学课程分类枚举,对应 {@code course.category} 字段。 + * + *

编码与 {@code Course} 实体注释一致,用于小程序课程卡片/详情展示分类标签。

+ * + * @author duhao + */ +@Getter +public enum CourseCategoryEnum { + + COGNITION(1, "认知启蒙"), + SKILL(2, "技能进阶"), + INNOVATION(3, "创新应用"), + COMPETITION(4, "竞赛辅导"); + + private final Integer code; + private final String desc; + + CourseCategoryEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,非法编码返回 null。 + */ + public static CourseCategoryEnum of(Integer code) { + if (code == null) { + return null; + } + for (CourseCategoryEnum category : values()) { + if (category.code.equals(code)) { + return category; + } + } + return null; + } + + /** + * 根据编码获取分类中文名,非法/空编码返回 null。 + */ + public static String nameOf(Integer code) { + CourseCategoryEnum category = of(code); + return category == null ? null : category.desc; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/CourseStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/CourseStatusEnum.java new file mode 100644 index 0000000..6617464 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/CourseStatusEnum.java @@ -0,0 +1,53 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 课程状态枚举,对应 {@code course.status} 字段。 + * + * @author duhao + */ +@Getter +public enum CourseStatusEnum { + + /** + * 下架,管理端可切换,小程序端不可见。 + */ + OFF_SHELF(0, "下架"), + + /** + * 上架,小程序端可见可预约。 + */ + ON_SHELF(1, "上架"), + + /** + * 已满员,预约名额已满,仅展示不允许预约。 + */ + FULL(2, "已满员"); + + /** 数字编码,落库到 course.status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + CourseStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static CourseStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (CourseStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/ExamBankStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/ExamBankStatusEnum.java new file mode 100644 index 0000000..bc63f0c --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/ExamBankStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 题库状态枚举,对应 {@code exam_bank.status} 字段。 + * + * @author duhao + */ +@Getter +public enum ExamBankStatusEnum { + + /** + * 禁用,不对小程序展示。 + */ + DISABLED(0, "禁用"), + + /** + * 启用。 + */ + ENABLED(1, "启用"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + ExamBankStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static ExamBankStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (ExamBankStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/ExamDifficultyEnum.java b/src/main/java/com/haisen/laop/common/enums/ExamDifficultyEnum.java new file mode 100644 index 0000000..9b40e8c --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/ExamDifficultyEnum.java @@ -0,0 +1,53 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 题目/题库难度枚举,对应 {@code exam_question.difficulty} 与 {@code exam_bank.difficulty} 字段。 + * + * @author duhao + */ +@Getter +public enum ExamDifficultyEnum { + + /** + * 简单。 + */ + SIMPLE(1, "简单"), + + /** + * 中等。 + */ + MEDIUM(2, "中等"), + + /** + * 困难。 + */ + HARD(3, "困难"); + + /** 数字编码,落库到 difficulty 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + ExamDifficultyEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static ExamDifficultyEnum of(Integer code) { + if (code == null) { + return null; + } + for (ExamDifficultyEnum difficulty : values()) { + if (difficulty.code.equals(code)) { + return difficulty; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/FileStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/FileStatusEnum.java new file mode 100644 index 0000000..ed00d37 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/FileStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 文件状态枚举,对应 {@code sys_file.status} 字段。 + * + * @author duhao + */ +@Getter +public enum FileStatusEnum { + + /** + * 禁用,违规文件不可访问。 + */ + DISABLED(0, "禁用"), + + /** + * 正常。 + */ + NORMAL(1, "正常"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + FileStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static FileStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (FileStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/FileTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/FileTypeEnum.java new file mode 100644 index 0000000..61ce031 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/FileTypeEnum.java @@ -0,0 +1,114 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 文件类型枚举,对应 {@code sys_file.file_type} 字段。 + * + *

设计说明:前端请求时传字符串标识(如 {@code SCENE_IMAGE}),后端由此枚举 + * 统一转为数字编码存储,避免两端硬编码数字含义不一致。

+ * + *

存储目录规划:每种类型映射到磁盘上的大类子目录({@code storageDir}), + * 按"媒体形态 + 业务用途"归组,避免所有文件堆在同一个目录: + *

    + *
  • {@code image/} —— 通用图片(任务场景图、课程图、头像等)
  • + *
  • {@code video/} —— 视频(预留,当前上传白名单仅放行图片)
  • + *
  • {@code license/} —— 执照照片(营业执照、飞手执照)
  • + *
  • {@code store/} —— 门店照片(商家门头照)
  • + *

+ * + * @author duhao + */ +@Getter +public enum FileTypeEnum { + + /** + * 营业执照图片,商家认证上传。 + */ + BUSINESS_LICENSE(1, "business_license", "license"), + + /** + * 飞手执照图片,飞手认证上传。 + */ + PILOT_LICENSE(2, "pilot_license", "license"), + + /** + * 任务作业场景图,发布任务时上传。 + */ + SCENE_IMAGE(3, "scene_image", "image"), + + /** + * 课程封面/详情图片。 + */ + COURSE_IMAGE(4, "course_image", "image"), + + /** + * 用户头像。 + */ + AVATAR(5, "avatar", "image"), + + /** + * 商家门头照片,商家认证上传。 + */ + DOOR_IMAGE(6, "door_image", "store"), + + /** + * 视频(预留类型:目录规划已就绪,上传白名单按需放行视频格式后启用)。 + */ + VIDEO(7, "video", "video"), + + /** + * 通用文件(未分类兜底)。 + */ + OTHER(9, "other", "other"), + + /** + * 首页轮播图,运营后台上传。 + */ + BANNER_IMAGE(8, "banner_image", "image"), + + /** + * 培训门店封面图,培训考试模块上传。 + */ + TRAINING_COVER(10, "training_cover", "image"); + + /** 数字编码,落库到 sys_file.file_type */ + private final Integer code; + + /** 字符串标识,前后端约定的类型 key */ + private final String key; + + /** 磁盘存储子目录名(staticDir/storageDir/uuid.suffix) */ + private final String storageDir; + + FileTypeEnum(Integer code, String key, String storageDir) { + this.code = code; + this.key = key; + this.storageDir = storageDir; + } + + /** + * 按字符串标识查找枚举实例。 + * + * @param key 前端传入的字符串标识,如 {@code SCENE_IMAGE} + * @return 枚举实例,找不到返回 null + */ + public static FileTypeEnum of(String key) { + if (key == null || key.isBlank()) { + return null; + } + for (FileTypeEnum type : values()) { + if (type.name().equals(key) || type.key.equalsIgnoreCase(key)) { + return type; + } + } + return null; + } + + /** + * 校验字符串标识是否合法。 + */ + public static boolean isValid(String key) { + return of(key) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/GenderEnum.java b/src/main/java/com/haisen/laop/common/enums/GenderEnum.java new file mode 100644 index 0000000..900ba02 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/GenderEnum.java @@ -0,0 +1,53 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 用户性别枚举,对应 {@code "user".gender} 字段。 + * + * @author duhao + */ +@Getter +public enum GenderEnum { + + /** + * 未知,微信未授权性别时的默认值。 + */ + UNKNOWN(0, "未知"), + + /** + * 男。 + */ + MALE(1, "男"), + + /** + * 女。 + */ + FEMALE(2, "女"); + + /** 数字编码,落库到 gender 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + GenderEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static GenderEnum of(Integer code) { + if (code == null) { + return null; + } + for (GenderEnum gender : values()) { + if (gender.code.equals(code)) { + return gender; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/InsuranceTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/InsuranceTypeEnum.java new file mode 100644 index 0000000..5e3ec2b --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/InsuranceTypeEnum.java @@ -0,0 +1,57 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 保险类型枚举,对应 {@code task.insurance_require} 分号拼接串中的数字编码。 + * + * @author duhao + */ +@Getter +public enum InsuranceTypeEnum { + + /** + * 第三者责任险,覆盖无人机对第三方造成的人身/财产损害。 + */ + THIRD_PARTY(1, "三者险"), + + /** + * 飞手责任险,覆盖飞手自身操作失误。 + */ + PILOT(2, "飞手险"), + + /** + * 机身险,覆盖无人机自身损坏/丢失。 + */ + AIRFRAME(3, "机身险"); + + private final Integer code; + private final String desc; + + InsuranceTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例。 + */ + public static InsuranceTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (InsuranceTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } + + /** + * 校验编码是否属于合法的保险类型。 + */ + public static boolean isValid(Integer code) { + return of(code) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/LicenseTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/LicenseTypeEnum.java new file mode 100644 index 0000000..2c34dad --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/LicenseTypeEnum.java @@ -0,0 +1,65 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 飞行执照类型枚举,对应 {@code pilot_license.license_type} 字段。 + * + * @author duhao + */ +@Getter +public enum LicenseTypeEnum { + + /** + * AOPA 合格证(中国航空器拥有者及驾驶员协会)。 + */ + AOPA(1, "AOPA"), + + /** + * UTC 合格证(无人驾驶航空器系统操作手合格证)。 + */ + UTC(2, "UTC"), + + /** + * ASFC 执照(航空运动协会遥控航空模型飞行员执照)。 + */ + ASFC(3, "ASFC"), + + /** + * CAAC 执照(民航局颁发的民用无人机操控员执照)。 + */ + CAAC(4, "CAAC"); + + /** 数字编码,落库到 license_type 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + LicenseTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static LicenseTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (LicenseTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } + + /** + * 校验编码是否属于合法的执照类型。 + */ + public static boolean isValid(Integer code) { + return of(code) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/PointsChangeTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/PointsChangeTypeEnum.java new file mode 100644 index 0000000..ca05696 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/PointsChangeTypeEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 积分变动方向枚举,对应 {@code points_detail.change_type} 字段。 + * + * @author duhao + */ +@Getter +public enum PointsChangeTypeEnum { + + /** + * 收入,积分增加。 + */ + GAIN(1, "收入"), + + /** + * 支出,积分扣减。 + */ + SPEND(2, "支出"); + + /** 数字编码,落库到 change_type 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + PointsChangeTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static PointsChangeTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (PointsChangeTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/PointsEventEnum.java b/src/main/java/com/haisen/laop/common/enums/PointsEventEnum.java new file mode 100644 index 0000000..fb37961 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/PointsEventEnum.java @@ -0,0 +1,84 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 积分事件枚举,对应 {@code points_detail.event_type},定义事件编码、变动方向与展示名称。 + * + *

设计说明:本枚举只描述"是什么事件",不再承载固定积分变动值—— + * 发布任务奖励/优质任务扣减已转为 {@code app_config} 运营可配置项, + * 手动增减的数值由管理员逐笔填写。各事件的积分数量由调用方 + * ({@link com.haisen.laop.service.PointsService} 的调用方)显式传入:

+ *
    + *
  • 固定规则(邀请注册 +4、完成任务 +1)取值 {@code PointsConstants};
  • + *
  • 可配置规则(发布任务奖励、优质任务扣减)运行时读取 {@code app_config}。
  • + *
+ * + * @author duhao + */ +@Getter +public enum PointsEventEnum { + + /** + * 商家发布任务,发放配置项 points_publish_award 设定的奖励积分。 + */ + PUBLISH_TASK(1, PointsChangeTypeEnum.GAIN, "发布任务"), + + /** + * 飞手完成任务,发放固定奖励积分。 + */ + TASK_COMPLETE(2, PointsChangeTypeEnum.GAIN, "完成任务"), + + /** + * 邀请好友注册成功,发放固定奖励积分。 + */ + INVITE_REGISTER(3, PointsChangeTypeEnum.GAIN, "邀请好友注册"), + + /** + * 发布优质任务,扣减配置项 points_premium_deduct 设定的积分。 + */ + PREMIUM_TASK(4, PointsChangeTypeEnum.SPEND, "发布优质任务"), + + /** + * Web 后台手动新增积分,数量由管理员逐笔填写。 + */ + MANUAL_ADD(5, PointsChangeTypeEnum.GAIN, "手动新增"), + + /** + * Web 后台手动扣减积分,数量由管理员逐笔填写,余额不足时拒绝扣减。 + */ + MANUAL_DEDUCT(6, PointsChangeTypeEnum.SPEND, "手动扣减"); + + /** 事件类型编码,存入 points_detail.event_type。 */ + private final Integer code; + + /** 变动方向,存入 points_detail.change_type(落库取 {@link PointsChangeTypeEnum#getCode()})。 */ + private final PointsChangeTypeEnum changeType; + + /** 事件名称,积分明细列表直接展示。 */ + private final String desc; + + PointsEventEnum(Integer code, PointsChangeTypeEnum changeType, String desc) { + this.code = code; + this.changeType = changeType; + this.desc = desc; + } + + /** + * 按编码查找枚举实例。 + * + * @param code 事件类型编码 + * @return 枚举实例,找不到返回 null + */ + public static PointsEventEnum of(Integer code) { + if (code == null) { + return null; + } + for (PointsEventEnum event : values()) { + if (event.code.equals(code)) { + return event; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/QuestionTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/QuestionTypeEnum.java new file mode 100644 index 0000000..bd94c7a --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/QuestionTypeEnum.java @@ -0,0 +1,60 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 考试题型枚举,对应 {@code exam_question.question_type} 字段。 + * + * @author duhao + */ +@Getter +public enum QuestionTypeEnum { + + /** + * 单选题。 + */ + SINGLE(1, "单选题"), + + /** + * 多选题。 + */ + MULTI(2, "多选题"), + + /** + * 判断题。 + */ + JUDGE(3, "判断题"); + + /** 数字编码,落库到 question_type 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + QuestionTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static QuestionTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (QuestionTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } + + /** + * 校验编码是否属于合法的题型。 + */ + public static boolean isValid(Integer code) { + return of(code) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/RegionLevelEnum.java b/src/main/java/com/haisen/laop/common/enums/RegionLevelEnum.java new file mode 100644 index 0000000..93ddb0b --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/RegionLevelEnum.java @@ -0,0 +1,53 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 行政区划级别枚举,对应 {@code region.level} 字段(省/市/区县三级)。 + * + * @author duhao + */ +@Getter +public enum RegionLevelEnum { + + /** + * 省级行政区(省、自治区、直辖市)。 + */ + PROVINCE(1, "省"), + + /** + * 市级行政区(地级市、自治州等)。 + */ + CITY(2, "市"), + + /** + * 区县级行政区(市辖区、县级市、县等)。 + */ + DISTRICT(3, "区县"); + + /** 数字编码,落库到 level 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + RegionLevelEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static RegionLevelEnum of(Integer code) { + if (code == null) { + return null; + } + for (RegionLevelEnum level : values()) { + if (level.code.equals(code)) { + return level; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/RoleTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/RoleTypeEnum.java new file mode 100644 index 0000000..2165978 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/RoleTypeEnum.java @@ -0,0 +1,58 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 用户主角色类型枚举,对应 {@code "user".role_type} 字段。 + * + * @author duhao + */ +@Getter +public enum RoleTypeEnum { + + /** + * 普通用户。 + */ + NORMAL(1, "普通用户"), + + /** + * 飞手。 + */ + PILOT(2, "飞手"), + + /** + * 商家。 + */ + MERCHANT(3, "商家"), + + /** + * 机构。 + */ + ORG(4, "机构"); + + /** 数字编码,落库到 role_type 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + RoleTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static RoleTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (RoleTypeEnum role : values()) { + if (role.code.equals(code)) { + return role; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/ScheduleTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/ScheduleTypeEnum.java new file mode 100644 index 0000000..e2cf81a --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/ScheduleTypeEnum.java @@ -0,0 +1,55 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 课程排课方式枚举,对应课程排课 DTO 中的 {@code scheduleType}。 + * + * @author duhao + */ +@Getter +public enum ScheduleTypeEnum { + + /** + * 每周重复,每周固定星期几上课,取值存 schedule_week_days。 + */ + WEEKLY(1, "每周重复"), + + /** + * 日期排课,指定具体日期上课,取值存 schedule_dates。 + */ + DATE(2, "日期排课"); + + /** 数字编码。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + ScheduleTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static ScheduleTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (ScheduleTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } + + /** + * 校验编码是否属于合法的排课方式。 + */ + public static boolean isValid(Integer code) { + return of(code) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/TaskRecordStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/TaskRecordStatusEnum.java new file mode 100644 index 0000000..b7becd6 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/TaskRecordStatusEnum.java @@ -0,0 +1,58 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 任务申请记录状态枚举,对应 {@code task_record.status} 字段。 + * + *

申请-审批流状态机:飞手申请(1)→ 商家同意(2)/ 拒绝(3)→ 飞手可主动撤销(4)。 + * 用于小程序"已接单"列表展示申请进度,与任务状态({@link TaskStatusEnum})相互独立。

+ * + * @author duhao + */ +@Getter +public enum TaskRecordStatusEnum { + + /** + * 已申请,等待商家确认。 + */ + APPLIED(1, "待商家确认"), + + /** + * 商家已同意,任务进入已接单。 + */ + APPROVED(2, "已接单"), + + /** + * 商家已拒绝。 + */ + REJECTED(3, "已拒绝"), + + /** + * 飞手已撤销申请。 + */ + WITHDRAWN(4, "已撤销"); + + private final Integer code; + private final String desc; + + TaskRecordStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例。 + */ + public static TaskRecordStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (TaskRecordStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/TaskStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/TaskStatusEnum.java new file mode 100644 index 0000000..eaecc88 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/TaskStatusEnum.java @@ -0,0 +1,65 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 任务状态枚举,对应 {@code task.status} 字段。 + * + * @author duhao + */ +@Getter +public enum TaskStatusEnum { + + /** + * 草稿,发布前的暂存状态。 + */ + DRAFT(0, "草稿"), + + /** + * 待接单,发布成功后默认状态,等待飞手抢单。 + */ + PENDING(1, "待接单"), + + /** + * 已接单,飞手抢单成功但尚未开始执行。 + */ + ACCEPTED(2, "已接单"), + + /** + * 执行中,飞手已到场并开始作业。 + */ + EXECUTING(3, "执行中"), + + /** + * 已完成,作业结束且双方确认无异议。 + */ + COMPLETED(4, "已完成"), + + /** + * 已取消,商家或系统主动终止任务。 + */ + CANCELLED(5, "已取消"); + + private final Integer code; + private final String desc; + + TaskStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例。 + */ + public static TaskStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (TaskStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/TaskTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/TaskTypeEnum.java new file mode 100644 index 0000000..f11cc9c --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/TaskTypeEnum.java @@ -0,0 +1,79 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 任务类型枚举,对应 {@code task.type} 字段。 + * + *

编码取值与 DDL 注释一致:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘。

+ * + * @author duhao + */ +@Getter +public enum TaskTypeEnum { + + /** + * 植保作业,农用无人机喷洒农药/化肥。 + */ + PLANT_PROTECTION(1, "植保"), + + /** + * 吊运物资,短距离物资投送/吊装。 + */ + LIFTING(2, "吊运"), + + /** + * 航拍,商业宣传片/活动/婚礼航拍。 + */ + AERIAL_PHOTOGRAPHY(3, "航拍"), + + /** + * 巡检,电力/铁路/管道/安防等设施巡检。 + */ + INSPECTION(4, "巡检"), + + /** + * 清洗,高楼/光伏板/风力发电机清洗。 + */ + CLEANING(5, "清洗"), + + /** + * 表演,商业活动/婚礼/庆典无人机编队表演。 + */ + PERFORMANCE(6, "表演"), + + /** + * 测绘,地形/建筑/电力线路三维建模。 + */ + SURVEYING(7, "测绘"); + + private final Integer code; + private final String desc; + + TaskTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static TaskTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (TaskTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } + + /** + * 校验编码是否属于合法的任务类型。 + */ + public static boolean isValid(Integer code) { + return of(code) != null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/TrainingStoreStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/TrainingStoreStatusEnum.java new file mode 100644 index 0000000..f18f543 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/TrainingStoreStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 培训门店状态枚举,对应 {@code training_store.status} 字段。 + * + * @author duhao + */ +@Getter +public enum TrainingStoreStatusEnum { + + /** + * 禁用。 + */ + DISABLED(0, "禁用"), + + /** + * 启用,小程序培训页展示当前唯一启用门店。 + */ + ENABLED(1, "启用"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + TrainingStoreStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static TrainingStoreStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (TrainingStoreStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/UserStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/UserStatusEnum.java new file mode 100644 index 0000000..c23dbaf --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/UserStatusEnum.java @@ -0,0 +1,48 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 用户账号状态枚举,对应 {@code "user".status} 字段。 + * + * @author duhao + */ +@Getter +public enum UserStatusEnum { + + /** + * 禁用,禁止登录与业务操作。 + */ + DISABLED(0, "禁用"), + + /** + * 正常。 + */ + NORMAL(1, "正常"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + UserStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static UserStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (UserStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/WxNotifyBizTypeEnum.java b/src/main/java/com/haisen/laop/common/enums/WxNotifyBizTypeEnum.java new file mode 100644 index 0000000..c17edd8 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/WxNotifyBizTypeEnum.java @@ -0,0 +1,58 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 微信模板消息业务类型枚举,对应 {@code wx_message_log.biz_type} 字段。 + * + * @author duhao + */ +@Getter +public enum WxNotifyBizTypeEnum { + + /** + * 任务申请通知,飞手申请接单 → 通知商家。 + */ + TASK_APPLY(1, "任务申请通知"), + + /** + * 商家审核结果通知,商家同意/拒绝 → 通知飞手。 + */ + REVIEW_NOTIFY(2, "审核结果通知"), + + /** + * 飞手撤销申请通知,飞手撤回接单申请 → 通知商家。 + */ + CANCEL_NOTIFY(3, "撤销申请通知"), + + /** + * 商家撤回任务通知,商家撤回已发布任务 → 通知已接单飞手。 + */ + TASK_RECALL(4, "任务撤回通知"); + + /** 数字编码,落库到 biz_type 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + WxNotifyBizTypeEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static WxNotifyBizTypeEnum of(Integer code) { + if (code == null) { + return null; + } + for (WxNotifyBizTypeEnum type : values()) { + if (type.code.equals(code)) { + return type; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/WxNotifyTaskStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/WxNotifyTaskStatusEnum.java new file mode 100644 index 0000000..8e85906 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/WxNotifyTaskStatusEnum.java @@ -0,0 +1,58 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 微信通知发送任务状态枚举,对应 {@code wx_notify_task.status} 字段。 + * + * @author duhao + */ +@Getter +public enum WxNotifyTaskStatusEnum { + + /** + * 待处理,入队后等待消费者取走。 + */ + PENDING(0, "待处理"), + + /** + * 处理中,消费者已 CAS 占位,正在发送。 + */ + PROCESSING(1, "处理中"), + + /** + * 成功,发送成功或跳过,消费完成后软删除。 + */ + SUCCESS(2, "成功"), + + /** + * 失败,重试次数用尽,消费完成后软删除。 + */ + FAILED(3, "失败"); + + /** 数字编码,落库到 status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + WxNotifyTaskStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static WxNotifyTaskStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (WxNotifyTaskStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/WxSendStatusEnum.java b/src/main/java/com/haisen/laop/common/enums/WxSendStatusEnum.java new file mode 100644 index 0000000..b8a8839 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/WxSendStatusEnum.java @@ -0,0 +1,58 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 微信模板消息发送状态枚举,对应 {@code wx_message_log.send_status} 字段。 + * + * @author duhao + */ +@Getter +public enum WxSendStatusEnum { + + /** + * 已跳过,接收人未关注服务号、模板配置缺失等,未实际调微信。 + */ + SKIPPED(0, "已跳过"), + + /** + * 已提交,微信受理成功,等待送达回调。 + */ + SUBMITTED(1, "已提交"), + + /** + * 送达成功,微信回调 success。 + */ + DELIVERED(2, "送达成功"), + + /** + * 送达失败,提交被拒或回调返回 failed:*。 + */ + FAILED(3, "送达失败"); + + /** 数字编码,落库到 send_status 列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + WxSendStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static WxSendStatusEnum of(Integer code) { + if (code == null) { + return null; + } + for (WxSendStatusEnum status : values()) { + if (status.code.equals(code)) { + return status; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/common/enums/YesNoEnum.java b/src/main/java/com/haisen/laop/common/enums/YesNoEnum.java new file mode 100644 index 0000000..7c9db64 --- /dev/null +++ b/src/main/java/com/haisen/laop/common/enums/YesNoEnum.java @@ -0,0 +1,52 @@ +package com.haisen.laop.common.enums; + +import lombok.Getter; + +/** + * 通用"是否"标记枚举,对应数据库中 0/1 语义的 SMALLINT 标记列。 + * + *

适用于纯布尔语义的标记字段(如 {@code task.is_premium}、{@code course.featured}、 + * {@code task_record.insurance_verified}、{@code user.is_pilot_bound} 等)。 + * 各业务表状态机字段(如任务状态、认证状态)禁止复用本枚举,必须定义领域专属状态枚举。

+ * + * @author duhao + */ +@Getter +public enum YesNoEnum { + + /** + * 否。 + */ + NO(0, "否"), + + /** + * 是。 + */ + YES(1, "是"); + + /** 数字编码,落库到 0/1 标记列。 */ + private final Integer code; + + /** 展示名称。 */ + private final String desc; + + YesNoEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + /** + * 根据编码获取枚举实例,找不到返回 null。 + */ + public static YesNoEnum of(Integer code) { + if (code == null) { + return null; + } + for (YesNoEnum value : values()) { + if (value.code.equals(code)) { + return value; + } + } + return null; + } +} diff --git a/src/main/java/com/haisen/laop/config/JacksonConfig.java b/src/main/java/com/haisen/laop/config/JacksonConfig.java new file mode 100644 index 0000000..6bedba3 --- /dev/null +++ b/src/main/java/com/haisen/laop/config/JacksonConfig.java @@ -0,0 +1,84 @@ +package com.haisen.laop.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +/** + * Jackson 全局序列化/反序列化配置。 + * + *

为什么需要此配置:Spring Boot 3 默认 Jackson 对 {@link LocalDateTime} 使用 + * ISO-8601 格式({@code 2026-08-27T10:00:00}),但前端(小程序/H5)通常以可读的 + * {@code yyyy-MM-dd HH:mm} 格式提交和展示时间。此配置统一覆盖,前后端契约一致。

+ * + *

影响范围:所有 Controller 的 {@code @RequestBody LocalDateTime} 反序列化 + * 和 {@code @ResponseBody LocalDateTime} 序列化均走此格式。DB 层 JPA/Hibernate + * 不受影响(JDBC 直接处理 {@link LocalDateTime} 对象)。

+ * + * @author duhao + */ +@Slf4j +@Configuration +public class JacksonConfig { + + /** 日期时间格式:前端提交和后端响应统一走此格式。 */ + public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + + /** 日期格式。 */ + public static final String DATE_PATTERN = "yyyy-MM-dd"; + + /** 时间格式。 */ + public static final String TIME_PATTERN = "HH:mm:ss"; + + /** 秒级精度的日期时间(用于发布任务等场景)。 */ + public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN); + + /** 日期格式化器。 */ + public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_PATTERN); + + /** 时间格式化器。 */ + public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern(TIME_PATTERN); + + /** + * 自定义 {@link ObjectMapper},覆盖 Spring Boot 自动配置。 + * + *

注册 {@link JavaTimeModule} 并替换 Java 8 时间类型的序列化/反序列化格式。

+ */ + @Bean + @Primary + public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { + JavaTimeModule javaTimeModule = new JavaTimeModule(); + + // 反序列化:前端 → Java 对象 + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DATE_TIME_FORMATTER)); + javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DATE_FORMATTER)); + javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(TIME_FORMATTER)); + + // 序列化:Java 对象 → 前端 + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_TIME_FORMATTER)); + javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DATE_FORMATTER)); + javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(TIME_FORMATTER)); + + ObjectMapper mapper = builder.modules(javaTimeModule).build(); + // 禁止序列化时把 Java 8 时间类型写成数组([2026,8,27,10,0,0]) + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + log.info("[JacksonConfig] LocalDateTime 格式统一为 {}", DATE_TIME_PATTERN); + return mapper; + } +} diff --git a/src/main/java/com/haisen/laop/config/UserContextInterceptor.java b/src/main/java/com/haisen/laop/config/UserContextInterceptor.java new file mode 100644 index 0000000..729c5f1 --- /dev/null +++ b/src/main/java/com/haisen/laop/config/UserContextInterceptor.java @@ -0,0 +1,61 @@ +package com.haisen.laop.config; + +import com.haisen.laop.common.RequestContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +/** + * 用户上下文拦截器:从 {@code Authorization} 请求头解析当前用户 ID 并写入 {@link RequestContext}, + * 供业务代码通过 {@code RequestContext.getUserId()} 获取"当前登录用户"。 + * + *

这不是权限校验:本拦截器不做任何登录态/角色校验,也从不拦截请求(始终放行)。 + * 项目当前的登录标识约定为"token 即 userId",管理端与小程序端均无权限控制需求; + * 后续若升级为 JWT,仅需在本类内部替换解析逻辑,调用点无需改动。

+ * + * @author duhao + */ +@Slf4j +@Component +public class UserContextInterceptor implements HandlerInterceptor { + + /** + * Authorization header 名称。 + */ + private static final String AUTH_HEADER = "Authorization"; + + /** + * Bearer token 前缀。 + */ + private static final String BEARER_PREFIX = "Bearer "; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + String auth = request.getHeader(AUTH_HEADER); + if (StringUtils.isBlank(auth)) { + // 未携带登录标识,放行;需要当前用户的接口自行通过 RequestContext.getUserId() 判断 + return true; + } + + try { + String token = auth.startsWith(BEARER_PREFIX) ? auth.substring(BEARER_PREFIX.length()).trim() : auth.trim(); + if (StringUtils.isNotBlank(token)) { + RequestContext.setUserId(Long.parseLong(token)); + } + } catch (NumberFormatException ex) { + // 登录标识不是合法数字,视为未登录,放行由业务层处理 + log.warn("[用户上下文] 登录标识解析失败: {}", auth); + } + return true; + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, + Object handler, Exception ex) { + // 请求结束清理 ThreadLocal,防止线程复用时用户信息串线 + RequestContext.clear(); + } +} diff --git a/src/main/java/com/haisen/laop/config/WebConfig.java b/src/main/java/com/haisen/laop/config/WebConfig.java new file mode 100644 index 0000000..592f5e7 --- /dev/null +++ b/src/main/java/com/haisen/laop/config/WebConfig.java @@ -0,0 +1,44 @@ +package com.haisen.laop.config; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Web MVC 统一配置:静态资源映射 + 全局拦截器注册。 + * + * @author duhao + */ +@Configuration +@RequiredArgsConstructor +public class WebConfig implements WebMvcConfigurer { + + private final UserContextInterceptor userContextInterceptor; + + /** 静态资源根目录绝对路径,末尾不带斜杠(dev/prod 各自配置 laop.static-dir) */ + @Value("${laop.static-dir}") + private String staticDir; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/**") + .addResourceLocations("file:" + staticDir + "/") + .setCachePeriod(0); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 用户上下文拦截器:解析 Authorization 头中的当前用户 ID 供业务层使用, + // 不做任何权限校验,始终放行 + registry.addInterceptor(userContextInterceptor) + .addPathPatterns("/**") + .excludePathPatterns( + "/static/**", + "/error", + "/favicon.ico" + ); + } +} diff --git a/src/main/java/com/haisen/laop/controller/AnnouncementController.java b/src/main/java/com/haisen/laop/controller/AnnouncementController.java new file mode 100644 index 0000000..36263ff --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/AnnouncementController.java @@ -0,0 +1,121 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.AnnouncementQueryDTO; +import com.haisen.laop.dto.AnnouncementSaveDTO; +import com.haisen.laop.service.AnnouncementService; +import com.haisen.laop.vo.AnnouncementVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * 公告模块 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台(管理员电脑端操作)。 + *

路径前缀:{@code /announcement/*},与小程序端公告查询(待扩展)严格隔离。 + *

职责:承载通知公告的维护操作(分页查询、详情、新增、编辑、显示/隐藏、删除), + * 业务逻辑全部委托 {@link AnnouncementService},本层只做参数接收与 Result 包装。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/announcement") +@RequiredArgsConstructor +public class AnnouncementController { + + private final AnnouncementService announcementService; + + /** + * 公告分页列表。 + * + *

返回结构与小程序端分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 公告 VO 分页数据 + */ + @GetMapping("/list") + public Result> list(AnnouncementQueryDTO query) { + Page page = announcementService.page(query); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } + + /** + * 公告详情,用于编辑回显。 + * + * @param id 公告 ID + * @return 公告 VO + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(announcementService.detail(id)); + } + + /** + * 新增公告。 + * + * @param dto 公告表单全部字段 + * @return 新增公告的 ID + */ + @PostMapping + public Result create(@Valid @RequestBody AnnouncementSaveDTO dto) { + return Result.success(announcementService.create(dto)); + } + + /** + * 编辑公告(全量更新)。 + * + * @param id 公告 ID + * @param dto 公告表单全部字段 + * @return 空数据成功响应 + */ + @PutMapping("/{id}") + public Result update(@PathVariable Long id, @Valid @RequestBody AnnouncementSaveDTO dto) { + announcementService.update(id, dto); + return Result.success(); + } + + /** + * 删除公告(软删除)。 + * + * @param id 公告 ID + * @return 空数据成功响应 + */ + @DeleteMapping("/{id}") + public Result remove(@PathVariable Long id) { + announcementService.delete(id); + return Result.success(); + } + + /** + * 切换公告展示状态(显示/隐藏)。 + * + * @param id 公告 ID + * @param status 目标状态:0隐藏 1显示 + * @return 空数据成功响应 + */ + @PostMapping("/{id}/status") + public Result updateStatus(@PathVariable Long id, @RequestParam Integer status) { + announcementService.updateStatus(id, status); + return Result.success(); + } +} diff --git a/src/main/java/com/haisen/laop/controller/AppBannerController.java b/src/main/java/com/haisen/laop/controller/AppBannerController.java new file mode 100644 index 0000000..4127f03 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/AppBannerController.java @@ -0,0 +1,134 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.AppBannerQueryDTO; +import com.haisen.laop.dto.AppBannerSaveDTO; +import com.haisen.laop.service.AppBannerService; +import com.haisen.laop.vo.AppBannerVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * 轮播图模块 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台(管理员电脑端操作)。 + *

路径前缀:{@code /banner/*},与小程序端展示接口(待扩展)严格隔离。 + *

职责:承载首页轮播图的维护操作(分页查询、详情、新增、编辑、排序调整、启停、删除), + * 业务逻辑全部委托 {@link AppBannerService},本层只做参数接收与 Result 包装。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/banner") +@RequiredArgsConstructor +public class AppBannerController { + + private final AppBannerService appBannerService; + + /** + * 轮播图分页列表。 + * + *

返回结构与项目其他分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 轮播图 VO 分页数据 + */ + @GetMapping("/list") + public Result> list(AppBannerQueryDTO query) { + Page page = appBannerService.page(query); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } + + /** + * 轮播图详情,用于编辑回显。 + * + * @param id 轮播图 ID + * @return 轮播图 VO + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(appBannerService.detail(id)); + } + + /** + * 新增轮播图。 + * + * @param dto 轮播图表单全部字段 + * @return 新增轮播图的 ID + */ + @PostMapping + public Result create(@Valid @RequestBody AppBannerSaveDTO dto) { + return Result.success(appBannerService.create(dto)); + } + + /** + * 编辑轮播图(全量更新)。 + * + * @param id 轮播图 ID + * @param dto 轮播图表单全部字段 + * @return 空数据成功响应 + */ + @PutMapping("/{id}") + public Result update(@PathVariable Long id, @Valid @RequestBody AppBannerSaveDTO dto) { + appBannerService.update(id, dto); + return Result.success(); + } + + /** + * 删除轮播图(软删除)。 + * + * @param id 轮播图 ID + * @return 空数据成功响应 + */ + @DeleteMapping("/{id}") + public Result remove(@PathVariable Long id) { + appBannerService.delete(id); + return Result.success(); + } + + /** + * 切换轮播图展示状态(显示/隐藏)。 + * + * @param id 轮播图 ID + * @param status 目标状态:0隐藏 1显示 + * @return 空数据成功响应 + */ + @PostMapping("/{id}/status") + public Result updateStatus(@PathVariable Long id, @RequestParam Integer status) { + appBannerService.updateStatus(id, status); + return Result.success(); + } + + /** + * 调整轮播图排序值。 + * + * @param id 轮播图 ID + * @param sortOrder 目标排序值 + * @return 空数据成功响应 + */ + @PostMapping("/{id}/sort") + public Result updateSort(@PathVariable Long id, @RequestParam Integer sortOrder) { + appBannerService.updateSort(id, sortOrder); + return Result.success(); + } +} diff --git a/src/main/java/com/haisen/laop/controller/CourseController.java b/src/main/java/com/haisen/laop/controller/CourseController.java new file mode 100644 index 0000000..4135288 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/CourseController.java @@ -0,0 +1,152 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.CourseQueryDTO; +import com.haisen.laop.dto.CourseSaveDTO; +import com.haisen.laop.service.CourseService; +import com.haisen.laop.vo.AdminCourseAppointmentVO; +import com.haisen.laop.vo.CourseVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 课程模块 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台(管理员电脑端操作)。 + *

路径前缀:{@code /course/*},与小程序端 {@code /api/mini/course/*}(待扩展)严格隔离。 + *

职责:承载研学课程的维护操作(分页查询、详情、新增、编辑、上下架、删除), + * 业务逻辑全部委托 {@link CourseService},本层只做参数接收与 Result 包装。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/course") +@RequiredArgsConstructor +public class CourseController { + + private final CourseService courseService; + + /** + * 课程分页列表。 + * + *

返回结构与小程序端分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 课程 VO 分页数据 + */ + @GetMapping("/list") + public Result> list(CourseQueryDTO query) { + Page page = courseService.page(query); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } + + /** + * 课程详情,用于编辑回显。 + * + * @param id 课程 ID + * @return 课程 VO(含宣传图绝对 URL 与富文本简介) + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(courseService.detail(id)); + } + + /** + * 新增课程。 + * + * @param dto 课程表单全部字段 + * @return 新增课程的 ID + */ + @PostMapping + public Result create(@Valid @RequestBody CourseSaveDTO dto) { + return Result.success(courseService.create(dto)); + } + + /** + * 编辑课程(全量更新)。 + * + * @param id 课程 ID + * @param dto 课程表单全部字段 + * @return 空数据成功响应 + */ + @PutMapping("/{id}") + public Result update(@PathVariable Long id, @Valid @RequestBody CourseSaveDTO dto) { + courseService.update(id, dto); + return Result.success(); + } + + /** + * 删除课程(软删除)。 + * + * @param id 课程 ID + * @return 空数据成功响应 + */ + @DeleteMapping("/{id}") + public Result remove(@PathVariable Long id) { + courseService.delete(id); + return Result.success(); + } + + /** + * 课程上下架。 + * + * @param id 课程 ID + * @param status 目标状态:0下架 1上架 + * @return 空数据成功响应 + */ + @PostMapping("/{id}/status") + public Result updateStatus(@PathVariable Long id, @RequestParam Integer status) { + courseService.updateStatus(id, status); + return Result.success(); + } + + /** + * 课程预约名单(分页):管理端某课程下的全部预约记录。 + * + *

返回结构与其他分页接口一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。预约记录按创建时间倒序(最新预约在最前)。

+ * + * @param courseId 课程 ID(必传,查哪门课的预约) + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @return 管理端预约 VO 分页(含预约人昵称/手机号与课程名称) + */ + @GetMapping("/appointments") + public Result> appointments( + @RequestParam Long courseId, + @RequestParam int pageNo, + @RequestParam int pageSize) { + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page page = courseService.listAppointmentsByCourse(courseId, pageable); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } +} diff --git a/src/main/java/com/haisen/laop/controller/DashboardController.java b/src/main/java/com/haisen/laop/controller/DashboardController.java new file mode 100644 index 0000000..ab85892 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/DashboardController.java @@ -0,0 +1,39 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.service.DashboardService; +import com.haisen.laop.vo.DashboardVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据驾驶舱 —— Web 后台首页统计聚合 Controller。 + * + *

消费端:Web 管理后台 Dashboard 首页。 + *

路径前缀:{@code /dashboard/*},单接口聚合返回全部统计数据,避免多接口瀑布加载。 + *

职责:Controller 层只做路由与 Result 包装,业务逻辑全部委托 {@link DashboardService}。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/dashboard") +@RequiredArgsConstructor +public class DashboardController { + + private final DashboardService dashboardService; + + /** + * 获取数据驾驶舱全量统计数据。 + * + *

一次性返回用户/商家/飞手总量、任务总量与状态分布、近 6 个月月度增长趋势、 + * 任务类型分布等所有 Dashboard 图表所需数据。

+ * + * @return Dashboard 聚合 VO + */ + @GetMapping("/stats") + public Result getStats() { + return Result.success(dashboardService.getDashboardStats()); + } +} diff --git a/src/main/java/com/haisen/laop/controller/ExamController.java b/src/main/java/com/haisen/laop/controller/ExamController.java new file mode 100644 index 0000000..b74bd76 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/ExamController.java @@ -0,0 +1,124 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.ExamQuestionSaveDTO; +import com.haisen.laop.dto.TrainingStoreDTO; +import com.haisen.laop.service.ExamService; +import com.haisen.laop.vo.ExamBankVO; +import com.haisen.laop.vo.ExamQuestionVO; +import com.haisen.laop.vo.TrainingStoreVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 培训考试模块 —— Web 管理端 Controller。 + * + *

消费端:Web 管理后台。 + *

路径前缀:{@code /exam/*}。 + *

职责:仅负责接收请求参数、调用 Service、返回 Result, + * 业务逻辑全部委托 {@link ExamService}。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/exam") +@RequiredArgsConstructor +public class ExamController { + + private final ExamService examService; + + // ==================== 培训 tab ==================== + + /** + * 获取门店培训信息(培训 tab)。 + */ + @GetMapping("/training") + public Result getTrainingStore() { + return Result.success(examService.getTrainingStore()); + } + + /** + * 编辑门店培训信息(管理员操作)。 + */ + @PutMapping("/training") + public Result saveTrainingStore(@RequestBody TrainingStoreDTO dto) { + examService.saveTrainingStore(dto); + return Result.success(null); + } + + // ==================== 题库 tab — 题库管理 ==================== + + /** + * 获取所有有效题库列表(题库 tab 下拉筛选用)。 + */ + @GetMapping("/banks") + public Result> listBanks() { + return Result.success(examService.listBanks()); + } + + // ==================== 题库 tab — 题目 CRUD ==================== + + /** + * 管理端分页查询题目,支持按题库/题型/关键词筛选,返回完整字段(含答案、解析)。 + * + * @param bankId 题库ID(可选) + * @param questionType 题型(可选):1单选 2多选 3判断 + * @param keyword 关键词(题干模糊匹配,可选) + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + */ + @GetMapping("/questions") + public Result> listQuestions( + @RequestParam(required = false) Long bankId, + @RequestParam(required = false) Integer questionType, + @RequestParam(required = false) String keyword, + @RequestParam(defaultValue = "0") int pageNo, + @RequestParam(defaultValue = "20") int pageSize) { + List list = examService.listQuestionsForAdmin(bankId, questionType, keyword, pageNo, pageSize); + long total = examService.countQuestionsForAdmin(bankId, questionType, keyword); + Map data = new HashMap<>(); + data.put("list", list); + data.put("total", total); + return Result.success(data); + } + + /** + * 新增题目。 + */ + @PostMapping("/questions") + public Result createQuestion(@Valid @RequestBody ExamQuestionSaveDTO dto) { + return Result.success(examService.createQuestion(dto)); + } + + /** + * 编辑题目。 + */ + @PutMapping("/questions/{id}") + public Result updateQuestion(@PathVariable Long id, + @Valid @RequestBody ExamQuestionSaveDTO dto) { + dto.setId(id); + return Result.success(examService.updateQuestion(dto)); + } + + /** + * 软删除题目。 + */ + @DeleteMapping("/questions/{id}") + public Result deleteQuestion(@PathVariable Long id) { + examService.deleteQuestion(id); + return Result.success(null); + } +} diff --git a/src/main/java/com/haisen/laop/controller/FileController.java b/src/main/java/com/haisen/laop/controller/FileController.java new file mode 100644 index 0000000..d6ccab0 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/FileController.java @@ -0,0 +1,59 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.common.enums.FileTypeEnum; +import com.haisen.laop.service.FileService; +import com.haisen.laop.vo.FileUploadVO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件模块 Controller,聚焦单文件上传能力。 + * + *

上传协议:HTTP multipart/form-data,文件字段名固定为 {@code file}, + * 业务类型通过 {@code fileType} 表单参数传入(如 {@code SCENE_IMAGE})。

+ * + * @author duhao + */ +@Slf4j +@RestController +@RequestMapping("/api/file") +@RequiredArgsConstructor +public class FileController { + + private final FileService fileService; + + /** + * 单文件上传。 + * + *

请求头需携带 {@code Authorization: Bearer {userId}}, + * 未登录时 uploaderId 为 null(后续可在 FileService 中按需强制校验)。

+ * + * @param file 上传的文件,multipart/form-data 字段名 {@code file} + * @param fileType 文件类型字符串标识,如 {@code SCENE_IMAGE}、{@code AVATAR} + * @return 文件元信息(fileId + fileUrl + fileSize + fileSuffix) + */ + @PostMapping("/upload") + public Result upload( + @RequestParam("file") MultipartFile file, + @RequestParam("fileType") String fileType) { + // fileType 枚举合法性校验,防止非法字符串透传到 Service/存储层 + if (!FileTypeEnum.isValid(fileType)) { + throw new BusinessException("不支持的文件类型:" + fileType); + } + + Long uploaderId = RequestContext.getUserId(); + if (uploaderId == null) { + throw new BusinessException(401, "请先登录"); + } + FileUploadVO vo = fileService.upload(uploaderId, file, fileType); + return Result.success(vo); + } +} diff --git a/src/main/java/com/haisen/laop/controller/MiniConfigController.java b/src/main/java/com/haisen/laop/controller/MiniConfigController.java new file mode 100644 index 0000000..77e1871 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/MiniConfigController.java @@ -0,0 +1,66 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.entity.AppConfig; +import com.haisen.laop.service.AppConfigService; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 小程序功能配置 Controller,承载"消息推送开关、积分规则参数等运营功能配置"的读写。 + * + *

路径前缀:{@code /mini/config/*} + * 消费端:Web 管理端(小程序管理 → 功能配置)。 + * 职责:配置项列表查询 + 单个配置项的值更新,业务逻辑全部委托 {@link AppConfigService}。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/mini/config") +@RequiredArgsConstructor +public class MiniConfigController { + + private final AppConfigService appConfigService; + + /** + * 获取全部功能配置项列表(消息推送开关、积分规则参数等)。 + * + * @return AppConfig 列表 + */ + @GetMapping("/list") + public Result> list() { + return Result.success(appConfigService.listAll()); + } + + /** + * 更新指定配置项的值。 + * + * @param configKey 配置键,如 'mp_push_enabled' + * @param dto 请求体,只包含 configValue 字段('0' 或 '1') + * @return 空数据成功响应 + */ + @PutMapping("/{configKey}") + public Result update( + @PathVariable String configKey, + @RequestBody ConfigUpdateDTO dto) { + appConfigService.updateValue(configKey, dto.getConfigValue(), null); + return Result.success(); + } + + /** + * 配置项更新 DTO,仅包含 configValue 一个字段。 + */ + @Data + public static class ConfigUpdateDTO { + /** 新配置值,布尔开关传 '0' 或 '1'。 */ + private String configValue; + } +} diff --git a/src/main/java/com/haisen/laop/controller/TaskController.java b/src/main/java/com/haisen/laop/controller/TaskController.java new file mode 100644 index 0000000..13dfbc7 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/TaskController.java @@ -0,0 +1,108 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.TaskManageQueryDTO; +import com.haisen.laop.service.TaskService; +import com.haisen.laop.vo.TaskManageVO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * 任务模块 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台(管理员电脑端操作)。 + *

路径前缀:{@code /task/*},不带 /api 前缀,与小程序端 /api/mini/task/* 严格隔离。 + *

职责:承载任务管理类操作(列表查询、详情查看、取消、软删除), + * 不包含任务发布(发布由 {@link com.haisen.laop.controller.mini.MiniTaskController} 承载)。

+ * + *

与小程序端共享同一个 {@link TaskService},Controller 层仅做入口隔离 + 参数接收 + 权限注入。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/task") +@RequiredArgsConstructor +public class TaskController { + + private final TaskService taskService; + + /** + * 任务分页列表(Web 管理端):全量任务,支持关键词/类型/状态筛选。 + * + *

返回结构与小程序端分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 任务管理 VO 分页数据(含发布商家简要信息) + */ + @GetMapping("/list") + public Result> list( + @RequestParam(defaultValue = "0") int pageNo, + @RequestParam(defaultValue = "10") int pageSize, + TaskManageQueryDTO query) { + Pageable pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.DESC, "createdAt")); + Page page = taskService.managePage(query, pageable); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } + + /** + * 任务详情(Web 管理端):全量任务信息 + 发布商家信息 + 场景图 URL。 + * + * @param id 任务 ID + * @return 任务管理 VO + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(taskService.manageDetail(id)); + } + + /** + * 取消任务(管理员干预),将状态置为"已取消"。 + * + *

仅允许从待接单/已接单/执行中状态取消;已完成或已取消的任务不允许再次取消。

+ * + * @param id 任务 ID + * @return 空数据成功响应 + */ + @PostMapping("/{id}/cancel") + public Result cancel(@PathVariable Long id) { + taskService.cancel(id); + return Result.success(); + } + + /** + * 软删除任务(管理员干预),写入 deleted_at。 + * + *

仅允许删除草稿/已完成/已取消的任务;进行中的任务需先取消。

+ * + * @param id 任务 ID + * @return 空数据成功响应 + */ + @DeleteMapping("/{id}") + public Result remove(@PathVariable Long id) { + taskService.delete(id); + return Result.success(); + } +} diff --git a/src/main/java/com/haisen/laop/controller/UserController.java b/src/main/java/com/haisen/laop/controller/UserController.java new file mode 100644 index 0000000..de825e3 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/UserController.java @@ -0,0 +1,155 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.PointsAdjustDTO; +import com.haisen.laop.dto.UserQueryDTO; +import com.haisen.laop.service.UserService; +import com.haisen.laop.vo.UserManageVO; +import com.haisen.laop.vo.UserMerchantDetailVO; +import com.haisen.laop.vo.UserPilotDetailVO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.validation.Valid; +import java.util.HashMap; +import java.util.Map; + +/** + * 用户模块 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台(管理员电脑端操作)。 + *

路径前缀:{@code /user/*},不带 /api 前缀,与小程序端用户接口严格隔离。 + *

职责:仅负责接收请求参数、调用 Service、返回 Result, + * 业务逻辑全部委托 {@link UserService},本层禁止包含任何业务逻辑或 Repository 调用。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + /** + * 用户分页列表(Web 管理端):全量注册用户 + 关键词筛选 + 用户类型(商家/飞手)。 + * + *

返回结构与小程序端分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 用户管理 VO 分页数据 + */ + @GetMapping("/list") + public Result> list( + @RequestParam(defaultValue = "0") int pageNo, + @RequestParam(defaultValue = "10") int pageSize, + UserQueryDTO query) { + Pageable pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.DESC, "createdAt")); + Page page = userService.pageUsers(query, pageable); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } + + /** + * 商家详情弹窗:cert 信息 + 最近发布的任务列表。 + * + * @param userId 用户 ID + * @return 商家详情包装 VO + */ + @GetMapping("/{userId}/merchant") + public Result merchantDetail(@PathVariable Long userId) { + return Result.success(userService.getMerchantDetail(userId)); + } + + /** + * 飞手详情弹窗:cert 信息 + 最近接单的任务列表。 + * + * @param userId 用户 ID + * @return 飞手详情包装 VO + */ + @GetMapping("/{userId}/pilot") + public Result pilotDetail(@PathVariable Long userId) { + return Result.success(userService.getPilotDetail(userId)); + } + + /** + * 强制取消商家认证:软删除 merchant 记录 + 重置 user 绑定标记。 + * + *

前置校验:若该商家存在"待接单/已接单/执行中"的任务,则拒绝取消。

+ * + * @param userId 用户 ID + * @return 操作成功 + */ + @PostMapping("/{userId}/revoke-merchant") + public Result revokeMerchant(@PathVariable Long userId) { + userService.revokeMerchantCert(userId); + return Result.success(null); + } + + /** + * 强制取消飞手认证:软删除 pilot 记录 + 重置 user 绑定标记。 + * + *

前置校验:若该飞手存在"待接单/已接单/执行中"的任务,则拒绝取消。

+ * + * @param userId 用户 ID + * @return 操作成功 + */ + @PostMapping("/{userId}/revoke-pilot") + public Result revokePilot(@PathVariable Long userId) { + userService.revokePilotCert(userId); + return Result.success(null); + } + + /** + * 用户积分明细弹窗:分页查询指定用户的积分增减流水,按时间倒序。 + * + *

业务逻辑(Repository 调用 + PO→VO 转换 + 分页封装)全部委托 UserService。

+ * + * @param userId 用户 ID + * @param pageNo 页码(0 基),默认 0 + * @param pageSize 每页条数,默认 10 + * @return 积分明细分页数据 + */ + @GetMapping("/{userId}/points") + public Result> pointsDetail( + @PathVariable Long userId, + @RequestParam(defaultValue = "0") int pageNo, + @RequestParam(defaultValue = "10") int pageSize) { + return Result.success(userService.pointsDetail(userId, pageNo, pageSize)); + } + + /** + * 手动增减用户积分:管理端在"积分明细"弹窗中对指定用户执行人工新增/扣减。 + * + *

扣减时余额不足由 Service 层拒绝;调整成功返回最新余额,供前端即时刷新弹窗与列表。

+ * + * @param userId 用户 ID + * @param dto 调整请求(变动类型 1新增 2扣减、积分数量、调整原因) + * @return 调整后的最新积分余额 + */ + @PostMapping("/{userId}/points/adjust") + public Result adjustPoints( + @PathVariable Long userId, + @Valid @RequestBody PointsAdjustDTO dto) { + return Result.success(userService.adjustPoints(userId, dto)); + } +} diff --git a/src/main/java/com/haisen/laop/controller/WxMessageLogController.java b/src/main/java/com/haisen/laop/controller/WxMessageLogController.java new file mode 100644 index 0000000..15abb17 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/WxMessageLogController.java @@ -0,0 +1,52 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.MessageLogQueryDTO; +import com.haisen.laop.service.WxMessageLogService; +import com.haisen.laop.vo.WxMessageLogVO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * 微信模板消息发送日志 —— Web 后台管理端 Controller。 + * + *

消费端:Web 管理后台"消息推送日志"页面(只读)。 + *

职责:提供发送日志的分页查询能力,业务逻辑全部委托 + * {@link WxMessageLogService},本层只做参数接收与 Result 包装。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/wx-message-log") +@RequiredArgsConstructor +public class WxMessageLogController { + + private final WxMessageLogService wxMessageLogService; + + /** + * 发送日志分页列表,支持按接收人、业务类型、发送状态、openid 组合筛选。 + * + *

返回结构与 Web 端分页约定保持一致:{list, totalElements, totalPages, pageNo, pageSize}, + * 其中 pageNo 为 0 基页码。

+ * + * @param query 筛选条件(GET 参数自动绑定,全部可选) + * @return 日志 VO 分页数据,按入库时间倒序 + */ + @GetMapping("/list") + public Result> list(MessageLogQueryDTO query) { + Page page = wxMessageLogService.page(query); + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return Result.success(data); + } +} diff --git a/src/main/java/com/haisen/laop/controller/WxMpCallbackController.java b/src/main/java/com/haisen/laop/controller/WxMpCallbackController.java new file mode 100644 index 0000000..908f30a --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/WxMpCallbackController.java @@ -0,0 +1,89 @@ +package com.haisen.laop.controller; + +import com.haisen.laop.service.WxMpCallbackService; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +/** + * 微信服务号回调入口 Controller。 + * + *

消费端:微信服务器(非人类用户)。在服务号后台"服务器配置"中填写 + * {@code {域名}/api/wechat/mp/callback} 与 Token,微信会将服务器验证请求与事件消息 + * (模板消息送达结果、关注/取关)推送到此。

+ * + *

响应约定:微信要求验证请求原样返回 echostr、事件请求应答 "success" + * 均为纯文本报文(非 JSON),故直接写 {@link HttpServletResponse}, + * 避免统一响应结构包装后微信校验失败。

+ * + * @author duhao + */ +@Slf4j +@RestController +@RequestMapping("/api/wechat/mp") +@RequiredArgsConstructor +public class WxMpCallbackController { + + /** 微信约定的成功应答报文 */ + private static final String REPLY_SUCCESS = "success"; + + private final WxMpCallbackService wxMpCallbackService; + + /** + * 服务器配置 URL 有效性验证(微信后台保存配置时触发一次)。 + * + *

验证通过原样返回 echostr;失败返回 403(微信会提示配置失败)。

+ */ + @GetMapping("/callback") + public void verify(@RequestParam(required = false) String signature, + @RequestParam(required = false) String timestamp, + @RequestParam(required = false) String nonce, + @RequestParam(required = false) String echostr, + HttpServletResponse response) throws IOException { + String echo = wxMpCallbackService.verifyUrl(signature, timestamp, nonce, echostr); + writePlain(response, echo, !StringUtils.isEmpty(echo)); + } + + /** + * 接收微信推送的事件消息(模板消息送达结果、关注/取关等)。 + * + *

签名校验失败返回 403 拒绝处理;业务处理异常时全局异常处理器兜底, + * 微信侧收不到 success 应答会按策略重推(日志表按 MsgID 幂等回写,重推无副作用)。

+ */ + @PostMapping("/callback") + public void onEvent(@RequestParam(required = false) String signature, + @RequestParam(required = false) String timestamp, + @RequestParam(required = false) String nonce, + @RequestBody(required = false) String xmlBody, + HttpServletResponse response) throws IOException { + if (!wxMpCallbackService.verifySignature(signature, timestamp, nonce)) { + log.warn("[微信回调] 事件推送验签失败,拒绝处理"); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + return; + } + String reply = wxMpCallbackService.handleEventMessage(xmlBody); + writePlain(response, reply, StringUtils.isNotBlank(reply)); + } + + /** + * 输出纯文本响应(微信回调协议要求,不走统一 JSON 结构)。 + */ + private void writePlain(HttpServletResponse response, String content, boolean ok) throws IOException { + if (!ok) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + return; + } + response.setContentType("text/plain;charset=UTF-8"); + response.getWriter().write(content); + response.getWriter().flush(); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniAnnouncementController.java b/src/main/java/com/haisen/laop/controller/mini/MiniAnnouncementController.java new file mode 100644 index 0000000..98a90bc --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniAnnouncementController.java @@ -0,0 +1,55 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.Result; +import com.haisen.laop.service.AnnouncementService; +import com.haisen.laop.vo.AnnouncementVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 通知公告模块 —— 小程序端 Controller。 + * + *

消费端:微信小程序(首页公告条 + 公告详情页)。 + *

路径前缀:{@code /api/mini/announcement/*},与 Web 后台端 {@code /announcement/*} 严格隔离。 + *

职责:只读展示运营后台配置的公告;固定条件"显示 + 未软删 + 在生效窗口期内", + * 由 {@link AnnouncementService#listForMini} / {@link AnnouncementService#detailForMini} 统一保障。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/announcement") +@RequiredArgsConstructor +public class MiniAnnouncementController { + + private final AnnouncementService announcementService; + + /** + * 首页公告条:拉取最新可见公告列表,按创建时间倒序。 + * + *

前端取列表第一条作为公告条内容,点击跳转 {@link #detail(Long)} 查看正文。

+ * + * @param limit 期望条数,默认 5,上限 20(由 Service 夹紧) + * @return 可见公告 VO 列表 + */ + @GetMapping("/list") + public Result> list(@RequestParam(defaultValue = "5") int limit) { + return Result.success(announcementService.listForMini(limit)); + } + + /** + * 公告详情:点击公告条进入详情页,展示标题 + 正文 + 发布时间。 + * + * @param id 公告 ID + * @return 公告 VO + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(announcementService.detailForMini(id)); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniAuthController.java b/src/main/java/com/haisen/laop/controller/mini/MiniAuthController.java new file mode 100644 index 0000000..c2b9917 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniAuthController.java @@ -0,0 +1,86 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.dto.WxLoginDTO; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.LoginService; +import com.haisen.laop.vo.LoginVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 小程序端鉴权 Controller,承载微信登录入口。 + * + *

登录流程:小程序前端调 {@code wx.login()} → 拿 code → POST 本接口 → + * 后端 code2session 换 openid → 查/建 User → 返回 token。

+ * + * @author haisen + */ +@RestController +@RequestMapping("/api/mini/auth") +@RequiredArgsConstructor +public class MiniAuthController { + + private final LoginService loginService; + private final UserRepository userRepository; + private final PilotRepository pilotRepository; + private final MerchantRepository merchantRepository; + + /** + * 微信小程序登录。 + * + * @param loginDTO 前端 wx.login() 返回的 code + * @return token + userId + 是否新用户 + */ + @PostMapping("/login") + public Result login(@Valid @RequestBody WxLoginDTO loginDTO) { + LoginVO vo = loginService.wxLogin(loginDTO.getCode(), loginDTO.getInviteUserId()); + return Result.success(vo); + } + + /** + * 获取当前登录用户的精简信息(积分、昵称、认证状态等),供前端 UI 展示。 + * + *

认证状态随用户信息一并返回,避免"我的"页面额外发起两次认证查询请求; + * 前端据此在昵称下方渲染 飞手/商家 身份标签。

+ * + * @return {userId, nickname, avatarUrl, points, roleType, pilotCertStatus, merchantCertStatus} + */ + @GetMapping("/me") + public Result> me() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException("用户不存在")); + + Map data = new LinkedHashMap<>(); + data.put("userId", user.getId()); + data.put("nickname", user.getNickname()); + data.put("avatarUrl", user.getAvatarUrl()); + data.put("points", user.getPoints() == null ? 0 : user.getPoints()); + data.put("roleType", user.getRoleType()); + + // 认证状态:无认证记录时返回未认证编码,保证前端类型稳定 + var pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + var merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(userId); + data.put("pilotCertStatus", pilot == null ? CertStatusEnum.NONE.getCode() : pilot.getCertStatus()); + data.put("merchantCertStatus", merchant == null ? CertStatusEnum.NONE.getCode() : merchant.getCertStatus()); + return Result.success(data); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniBannerController.java b/src/main/java/com/haisen/laop/controller/mini/MiniBannerController.java new file mode 100644 index 0000000..98f4a2e --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniBannerController.java @@ -0,0 +1,35 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.Result; +import com.haisen.laop.service.AppBannerService; +import com.haisen.laop.vo.AppBannerVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 小程序首页轮播图接口:获取已显示的轮播图列表。 + * + *

公开访问:首页轮播图内容无需登录即可浏览(与任务大厅一致), + * 登录相关动作由具体交互入口自行保障。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/home/banner") +@RequiredArgsConstructor +public class MiniBannerController { + + private final AppBannerService appBannerService; + + /** + * 获取首页轮播图列表:仅返回已显示、未软删除的轮播图,按 sort_order 升序排列。 + */ + @GetMapping("/list") + public Result> list() { + return Result.success(appBannerService.listForMini()); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniCertController.java b/src/main/java/com/haisen/laop/controller/mini/MiniCertController.java new file mode 100644 index 0000000..d1385fd --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniCertController.java @@ -0,0 +1,87 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.MerchantCertifyDTO; +import com.haisen.laop.dto.PilotCertifyDTO; +import com.haisen.laop.service.CertService; +import com.haisen.laop.vo.MerchantCertVO; +import com.haisen.laop.vo.PilotCertVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 认证模块 —— 小程序端 Controller,承载飞手/商家认证的提交与回显。 + * + *

路径前缀:{@code /api/mini/cert/*};提交人身份由 {@link RequestContext} + * 从 Authorization token 注入,前端不可伪造他人认证。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/cert") +@RequiredArgsConstructor +public class MiniCertController { + + private final CertService certService; + + /** + * 提交飞手认证(个人执照信息)。 + * + * @param dto 飞手执照信息表单 + * @return 提交后的认证信息(含最新认证状态) + */ + @PostMapping("/pilot") + public Result submitPilot(@Valid @RequestBody PilotCertifyDTO dto) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(certService.submitPilot(userId, dto)); + } + + /** + * 查询我的飞手认证信息(认证页回显,从未提交过时 certStatus = 0)。 + */ + @GetMapping("/pilot") + public Result getPilotCert() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(certService.getPilotCert(userId)); + } + + /** + * 提交商家认证(商家信息 + 营业执照)。 + * + * @param dto 商家信息表单 + * @return 提交后的认证信息(含最新认证状态) + */ + @PostMapping("/merchant") + public Result submitMerchant(@Valid @RequestBody MerchantCertifyDTO dto) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(certService.submitMerchant(userId, dto)); + } + + /** + * 查询我的商家认证信息(认证页回显,从未提交过时 certStatus = 0)。 + */ + @GetMapping("/merchant") + public Result getMerchantCert() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(certService.getMerchantCert(userId)); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniCourseController.java b/src/main/java/com/haisen/laop/controller/mini/MiniCourseController.java new file mode 100644 index 0000000..a4f49b8 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniCourseController.java @@ -0,0 +1,168 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.common.constants.CourseConstants; +import com.haisen.laop.dto.CourseAppointmentDTO; +import com.haisen.laop.service.CourseService; +import com.haisen.laop.vo.CourseAppointmentVO; +import com.haisen.laop.vo.MiniCourseVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 研学课程模块 —— 小程序端 Controller。 + * + *

消费端:微信小程序(研学课程 Tab + 课程详情页 + 我的预约)。 + *

路径前缀:{@code /api/mini/course/*},与 Web 后台端 {@code /course/*} 严格隔离。 + *

职责:承载面向 C 端用户的课程浏览与预约操作,业务逻辑全部委托 + * {@link CourseService},本层只做入口隔离 + 参数接收 + 鉴权注入。

+ * + *

鉴权策略:课程列表与详情公开访问(无需登录即可浏览); + * 提交预约与我的预约需登录,身份由 {@link RequestContext} 从 token 注入。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/course") +@RequiredArgsConstructor +public class MiniCourseController { + + private final CourseService courseService; + + /** + * 课程列表(分页):仅返回已上架课程,按创建时间倒序。 + * + *

支持名称模糊 + 分类精确筛选(全部可选,不传即查全量上架课程)。

+ * + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @param name 课程名称(模糊,可选) + * @param category 分类编码(1认知启蒙 2技能进阶 3创新应用 4竞赛辅导,可选) + * @return {list, totalElements, totalPages, pageNo, pageSize} + */ + @GetMapping("/list") + public Result> list( + @RequestParam int pageNo, + @RequestParam int pageSize, + @RequestParam(required = false) String name, + @RequestParam(required = false) Integer category) { + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page page = courseService.listForMini(name, category, pageable); + return Result.success(buildPageData(page)); + } + + /** + * 课程详情:点击列表卡片进入详情页,展示课程全部信息 + 图集 + 商家名称。 + * + * @param id 课程 ID + * @return 小程序课程 VO(含图集绝对 URL 与富文本简介) + */ + @GetMapping("/{id}") + public Result detail(@PathVariable Long id) { + return Result.success(courseService.detailForMini(id)); + } + + /** + * 精选课程列表:仅供小程序首页"精选研学课程"区块调用,轻量接口不做分页。 + * + *

固定条件:上架 + 精选 + 未软删;按创建时间倒序,默认返回 + * {@link CourseConstants#FEATURED_LIST_LIMIT} 条。

+ * + * @param limit 最大条数(可选,默认 6,上限 50) + * @return 小程序课程 VO 列表 + */ + @GetMapping("/featured") + public Result> featured( + @RequestParam(required = false, defaultValue = "6") int limit) { + return Result.success(courseService.listFeatured(limit)); + } + + /** + * 提交课程预约。 + * + *

请求头需携带 {@code Authorization: Bearer {userId}}, + * 提交人身份由 {@link RequestContext} 自动注入;金额由后端按 + * {@code course.price × personCount} 计算,前端不传金额。

+ * + * @param dto 预约表单(课程ID、预约时间、人数、联系人、联系电话、备注) + * @return 新增预约 ID + */ + @PostMapping("/appointment") + public Result createAppointment(@Valid @RequestBody CourseAppointmentDTO dto) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(courseService.createAppointment(userId, dto)); + } + + /** + * 我的预约(分页):当前用户提交的全部课程预约,按创建时间倒序。 + * + *

组装课程名称与宣传图绝对 URL,避免前端再发课程详情请求。

+ * + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @return {list, totalElements, totalPages, pageNo, pageSize} + */ + @GetMapping("/appointments") + public Result> myAppointments( + @RequestParam int pageNo, + @RequestParam int pageSize) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page page = courseService.myAppointments(userId, pageable); + return Result.success(buildPageData(page)); + } + + /** + * 取消我的预约:用户自助取消自己的"已预约"状态预约。 + * + *

仅允许取消 status=1(已预约)的预约;已取消或非本人预约直接拒绝。 + * 预约取消后释放名额,DB 部分唯一索引允许同用户同课程同时段重新预约。

+ * + * @param appointmentId 预约 ID(路径参数) + * @return 空对象 + */ + @PostMapping("/appointment/{appointmentId}/cancel") + public Result cancelAppointment(@PathVariable Long appointmentId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + courseService.cancelAppointment(userId, appointmentId); + return Result.success(); + } + + /** + * 将 Spring Data Page 组装为前端约定的分页数据结构。 + */ + private Map buildPageData(Page page) { + Map data = new HashMap<>(); + data.put("list", page.getContent()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return data; + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniExamController.java b/src/main/java/com/haisen/laop/controller/mini/MiniExamController.java new file mode 100644 index 0000000..1d593da --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniExamController.java @@ -0,0 +1,123 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.Result; +import com.haisen.laop.dto.ExamSubmitDTO; +import com.haisen.laop.service.ExamService; +import com.haisen.laop.vo.ExamBankVO; +import com.haisen.laop.vo.ExamQuestionVO; +import com.haisen.laop.vo.ExamResultVO; +import com.haisen.laop.vo.TrainingStoreVO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 培训考试模块 —— 小程序端 Controller。 + * + *

消费端:微信小程序(培训考试 Tab → 机构列表 / 题库练习)。 + *

路径前缀:{@code /api/mini/exam/*},与 Web 管理端 {@code /exam/*} 严格隔离。 + *

职责:承载面向 C 端用户的培训门店浏览、题库浏览与答题判分(实时、不存储), + * 业务逻辑全部委托 {@link ExamService},本层只做入口隔离 + 参数接收。

+ * + *

鉴权策略:所有接口公开访问(浏览培训门店、题库、题目均无需登录)。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/exam") +@RequiredArgsConstructor +public class MiniExamController { + + private final ExamService examService; + + // ==================== 培训门店(小程序展示) ==================== + + /** + * 获取培训门店信息(小程序端展示"机构列表"tab 详情)。 + */ + @GetMapping("/training") + public Result getTrainingStore() { + return Result.success(examService.getTrainingStore()); + } + + // ==================== 题库列表 ==================== + + /** + * 获取所有题库列表,附带各题库实时聚合的题目数量。 + * + *

返回的 {@link ExamBankVO} 包含 questionCount、singleCount、multiCount、judgeCount, + * 小程序可直接用于卡片展示。

+ */ + @GetMapping("/banks") + public Result> listBanks() { + return Result.success(examService.listBanks()); + } + + // ==================== 小程序答题端 ==================== + + /** + * 分页获取指定题库下的题目(不含答案与解析)。 + * + *

用于"逐题练习"模式。按 sortOrder 从小到大排序,sortOrder 相同时按 id 升序兜底。

+ * + * @param bankId 题库ID + * @param pageNo 页码(0 基,首传 0) + * @param pageSize 每页条数(默认 20) + */ + @GetMapping("/banks/{bankId}/questions") + public Result> listQuestions( + @PathVariable Long bankId, + @RequestParam(defaultValue = "0") int pageNo, + @RequestParam(defaultValue = "20") int pageSize) { + List list = examService.listQuestions(bankId, pageNo, pageSize); + long total = examService.countQuestions(bankId); + + Map data = new HashMap<>(); + data.put("list", list); + data.put("total", total); + data.put("pageNo", pageNo); + data.put("pageSize", pageSize); + data.put("totalPages", (int) Math.ceil((double) total / pageSize)); + return Result.success(data); + } + + /** + * 模拟考试:从指定题库按配比随机抽题组成试卷。 + * + *

配比:30 单选 + 25 多选 + 20 判断 = 75 题 / 100 分。 + * 每次调用独立随机,题目顺序也会打乱。

+ * + * @param bankId 题库ID + */ + @GetMapping("/banks/{bankId}/mock") + public Result> mockExam(@PathVariable Long bankId) { + return Result.success(examService.mockExam(bankId)); + } + + /** + * 提交答题结果并实时判分(不存储)。 + * + *

小程序端"逐题练习"提交全部答案后调用,或"模拟考试"交卷后调用。 + * 返回 {@link ExamResultVO} 包含每题判分明细 + 汇总分数。

+ * + * @param bankId 题库ID + * @param dto 用户作答集合 + */ + @PostMapping("/banks/{bankId}/submit") + public Result submitExam( + @PathVariable Long bankId, + @RequestBody ExamSubmitDTO dto) { + return Result.success(examService.submitExam(bankId, dto)); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniHomeController.java b/src/main/java/com/haisen/laop/controller/mini/MiniHomeController.java new file mode 100644 index 0000000..9339079 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniHomeController.java @@ -0,0 +1,84 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.Result; +import com.haisen.laop.service.HomeService; +import com.haisen.laop.vo.HomeMerchantVO; +import com.haisen.laop.vo.HomePilotVO; +import com.haisen.laop.vo.MerchantDetailVO; +import com.haisen.laop.vo.PilotDetailVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 小程序首页展示接口:实力商家 / 本地飞手列表与公开详情。 + * + *

公开访问:首页内容无需登录即可浏览(与任务大厅一致), + * 登录相关动作由具体交互入口(认证、抢单等)自行保障。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/home") +@RequiredArgsConstructor +public class MiniHomeController { + + private final HomeService homeService; + + /** + * 首页"实力商家"列表:已认证商家,按订单数降序限量返回。 + */ + @GetMapping("/merchants") + public Result> listMerchants() { + return Result.success(homeService.listMerchants()); + } + + /** + * 首页"本地飞手"列表:已认证飞手,按完成任务数降序限量返回。 + */ + @GetMapping("/pilots") + public Result> listPilots() { + return Result.success(homeService.listPilots()); + } + + /** + * 商家列表页:分页查询已认证商家,按订单数降序;支持按商家名称模糊搜索。 + */ + @GetMapping("/merchants/page") + public Result> pageMerchants(@RequestParam("pageNo") int pageNo, + @RequestParam("pageSize") int pageSize, + @RequestParam(value = "name", required = false) String name) { + return Result.success(homeService.pageMerchants(pageNo, pageSize, name)); + } + + /** + * 飞手列表页:分页查询已认证飞手,按完成任务数降序;支持按飞手名称模糊搜索。 + */ + @GetMapping("/pilots/page") + public Result> pagePilots(@RequestParam("pageNo") int pageNo, + @RequestParam("pageSize") int pageSize, + @RequestParam(value = "name", required = false) String name) { + return Result.success(homeService.pagePilots(pageNo, pageSize, name)); + } + + /** + * 商家公开详情:全部商家信息 + 该商家发布的任务列表。 + */ + @GetMapping("/merchant/{id}") + public Result getMerchantDetail(@PathVariable("id") Long id) { + return Result.success(homeService.getMerchantDetail(id)); + } + + /** + * 飞手公开详情:飞手画像 + 参与过的任务列表(不含个人手机号)。 + */ + @GetMapping("/pilot/{id}") + public Result getPilotDetail(@PathVariable("id") Long id) { + return Result.success(homeService.getPilotDetail(id)); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniPointsController.java b/src/main/java/com/haisen/laop/controller/mini/MiniPointsController.java new file mode 100644 index 0000000..9f32787 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniPointsController.java @@ -0,0 +1,124 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.common.constants.PointsConstants; +import com.haisen.laop.common.enums.PointsEventEnum; +import com.haisen.laop.entity.PointsDetail; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.PointsDetailRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.AppConfigService; +import com.haisen.laop.vo.PointsDetailVO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 积分模块 —— 小程序端 Controller,承载"我的-积分明细"列表查询。 + * + *

路径前缀:{@code /api/mini/points/*}。

+ * + *

分页规约:分页参数由前端显式传入,后端不设默认值与上限兜底。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/points") +@RequiredArgsConstructor +public class MiniPointsController { + + private final PointsDetailRepository pointsDetailRepository; + private final UserRepository userRepository; + private final AppConfigService appConfigService; + + /** + * 查询积分规则参数:发布任务获取积分数量、发布优质任务扣减积分数量。 + * + *

供小程序发布任务页渲染"发布优质任务消耗 N 积分"等提示文案, + * 避免前端硬编码与 Web 端功能配置不一致;无需登录态。

+ * + * @return {publishAwardPoints, premiumDeductPoints} + */ + @GetMapping("/config") + public Result> pointsConfig() { + Map data = new LinkedHashMap<>(); + data.put("publishAwardPoints", appConfigService.getIntValue( + PointsConstants.CONFIG_KEY_POINTS_PUBLISH_AWARD, + PointsConstants.DEFAULT_PUBLISH_AWARD_POINTS)); + data.put("premiumDeductPoints", appConfigService.getIntValue( + PointsConstants.CONFIG_KEY_POINTS_PREMIUM_DEDUCT, + PointsConstants.DEFAULT_PREMIUM_DEDUCT_POINTS)); + return Result.success(data); + } + + /** + * 分页查询我的积分明细(增扣流水统一列举,收入为正、支出为负)。 + * + *

同时返回"积分汇总"字段供前端顶部展示:

+ *
    + *
  • {@code totalPoints}:当前积分余额(取自 user.points,避免翻页累计偏差);
  • + *
  • {@code consumedPoints}:累计已消耗积分(仅统计支出流水 points 绝对值之和)。
  • + *
+ * + * @param pageNo 页码,从 1 开始,前端必传 + * @param pageSize 每页条数,前端必传 + * @return {list, totalElements, totalPages, pageNo, pageSize, totalPoints, consumedPoints} + */ + @GetMapping("/detail") + public Result> myPointsDetail( + @RequestParam Integer pageNo, + @RequestParam Integer pageSize) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException("用户不存在")); + Long consumed = pointsDetailRepository.sumConsumedPointsByUserId(userId); + if (consumed == null) { + consumed = 0L; + } + + Pageable pageable = PageRequest.of(pageNo - 1, pageSize); + + Page page = pointsDetailRepository + .findByUserIdAndDeletedAtIsNullOrderByCreatedAtDesc(userId, pageable); + + Map data = new LinkedHashMap<>(); + data.put("list", page.getContent().stream().map(this::toVO).toList()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", pageNo); + data.put("pageSize", pageSize); + // 顶部汇总:余额取当前 user.points(权威值),消耗取流水 SUM 兜底 0 + data.put("totalPoints", user.getPoints() == null ? 0 : user.getPoints()); + data.put("consumedPoints", consumed); + return Result.success(data); + } + + /** + * 流水 PO 转 VO:事件名称按编码翻译,前端直接展示。 + */ + private PointsDetailVO toVO(PointsDetail detail) { + PointsEventEnum event = PointsEventEnum.of(detail.getEventType()); + return PointsDetailVO.builder() + .changeType(detail.getChangeType()) + .eventType(detail.getEventType()) + .eventName(event == null ? "积分变动" : event.getDesc()) + .points(detail.getPoints()) + .remark(detail.getRemark()) + .createdAt(detail.getCreatedAt()) + .build(); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniPromoteController.java b/src/main/java/com/haisen/laop/controller/mini/MiniPromoteController.java new file mode 100644 index 0000000..04c23ce --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniPromoteController.java @@ -0,0 +1,43 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.service.PromoteService; +import com.haisen.laop.vo.PromoteQrVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 推广模块 —— 小程序端 Controller,承载"飞手推广"二维码生成。 + * + *

路径前缀:{@code /api/mini/promote/*}。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/promote") +@RequiredArgsConstructor +public class MiniPromoteController { + + private final PromoteService promoteService; + + /** + * 生成我的专属推广小程序码(scene 携带我的 userId)。 + * + *

好友扫码进入小程序并注册成功后,我方账户 +4 积分(登录链路自动完成)。

+ * + * @return 小程序码 Base64 字符串 + */ + @GetMapping("/qrcode") + public Result getQrCode() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + String qrCodeBase64 = promoteService.getPromoteQrCode(userId); + return Result.success(PromoteQrVO.builder().qrCodeBase64(qrCodeBase64).build()); + } +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniTaskController.java b/src/main/java/com/haisen/laop/controller/mini/MiniTaskController.java new file mode 100644 index 0000000..1ea7b39 --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniTaskController.java @@ -0,0 +1,697 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.InsuranceTypeEnum; +import com.haisen.laop.common.enums.TaskRecordStatusEnum; +import com.haisen.laop.common.enums.TaskStatusEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.dto.TaskHallQueryDTO; +import com.haisen.laop.dto.TaskPublishDTO; +import com.haisen.laop.dto.TaskReviewDTO; +import com.haisen.laop.entity.SysFile; +import com.haisen.laop.entity.Task; +import com.haisen.laop.entity.TaskRecord; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.Pilot; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.SysFileRepository; +import com.haisen.laop.repository.TaskRecordRepository; +import com.haisen.laop.repository.TaskRepository; +import com.haisen.laop.service.TaskService; +import com.haisen.laop.vo.TaskApplicantVO; +import com.haisen.laop.vo.TaskPublishVO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 任务模块 —— 小程序端 Controller。 + * + *

消费端:微信小程序(飞手/商家在手机上操作)。 + *

路径前缀:{@code /api/mini/task/*},与 Web 后台端 /task/* 严格隔离。 + *

职责:承载面向 C 端用户的任务操作(发布、抢单、任务列表、详情、取消、完成等), + * 不包含后台管理操作(审核、置顶等由 Web 后台的 + * {@link com.haisen.laop.controller.TaskController} 承载)。

+ * + *

与 Web 端共享同一个 {@link TaskService},Controller 层仅做入口隔离 + 参数接收 + 鉴权注入。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/task") +@RequiredArgsConstructor +public class MiniTaskController { + + private final TaskService taskService; + private final TaskRepository taskRepository; + private final TaskRecordRepository taskRecordRepository; + private final SysFileRepository sysFileRepository; + private final MerchantRepository merchantRepository; + private final PilotRepository pilotRepository; + + /** 文件访问基础 URL(开发环境 http://localhost:8081/laop,生产填实际域名) */ + @Value("${laop.file-base-url:}") + private String fileBaseUrl; + + /** + * 商家发布新任务。 + * + *

请求头需携带 {@code Authorization: Bearer {userId}}, + * 发布人身份由 {@link RequestContext} 自动注入。

+ * + * @param publishDTO 发布表单全部字段(见原型图"发布任务"页面) + * @return 发布成功后的 taskId + taskNo + */ + @PostMapping("/publish") + public Result publish(@Valid @RequestBody TaskPublishDTO publishDTO) { + Long publisherId = RequestContext.getUserId(); + if (publisherId == null) { + throw new BusinessException(401, "请先登录"); + } + // 商家认证校验:只有已认证商家才能发布任务,非已认证状态直接拒绝 + Merchant merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(publisherId); + if (merchant == null || !Objects.equals(merchant.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) { + Integer status = merchant != null + ? merchant.getCertStatus() + : CertStatusEnum.NONE.getCode(); + CertStatusEnum certStatus = CertStatusEnum.of(status); + String reason = certStatus == null ? "商家认证异常,请重新认证" : switch (certStatus) { + case NONE -> "请先完成商家认证后再发布任务"; + case PENDING -> "商家认证审核中,通过后即可发布任务"; + case REJECTED -> "商家认证未通过,请重新提交认证"; + case REVOKED -> "您的商家资格已被取消"; + // 外层已排除已认证态,此分支理论不可达,仅为 switch 穷举 + case CERTIFIED -> "商家认证异常,请重新认证"; + }; + throw new BusinessException(403, reason); + } + TaskPublishVO vo = taskService.publish(publisherId, publishDTO); + return Result.success(vo); + } + + /** + * 我的发布任务列表(商家视角),按 tab 筛选状态,按创建时间倒序,分页。 + * + *

tab 取值: + *

    + *
  • {@code published}(默认)— 已发布:状态 IN 待接单+已接单
  • + *
  • {@code running} — 进行中:状态 = 执行中
  • + *
  • {@code done} — 已完成:状态 = 已完成
  • + *
+ * + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @param tab 状态分组(published/running/done),默认 published + * @return {list, totalElements, totalPages, pageNo, pageSize} + */ + @GetMapping("/my") + public Result> myTasks( + @RequestParam int pageNo, + @RequestParam int pageSize, + @RequestParam(defaultValue = "published") String tab) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page page; + switch (tab) { + case "running" -> page = taskRepository + .findByPublisherIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc( + userId, TaskStatusEnum.EXECUTING.getCode(), pageable); + case "done" -> page = taskRepository + .findByPublisherIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc( + userId, TaskStatusEnum.COMPLETED.getCode(), pageable); + default -> page = taskRepository + .findByPublisherIdAndStatusInAndDeletedAtIsNullOrderByCreatedAtDesc( + userId, List.of(TaskStatusEnum.PENDING.getCode(), TaskStatusEnum.ACCEPTED.getCode()), + pageable); + } + + // 批量统计各任务的待确认申请数 + 首位申请人姓名(仅"已发布"tab 需要) + Set taskIds = page.getContent().stream().map(Task::getId).collect(Collectors.toSet()); + Map applicantCounts = null; + Map firstApplicantNames = null; + if ("published".equals(tab)) { + applicantCounts = taskService.countApplicants(taskIds); + firstApplicantNames = collectFirstApplicantNameMap(taskIds); + } + return Result.success(buildPageData(page, applicantCounts, firstApplicantNames)); + } + + /** + * 商家"我的任务"各 tab 计数(已发布/进行中/已完成),用于个人中心徽标。 + * + * @return { published, running, done } + */ + @GetMapping("/my/counts") + public Result> myTaskCounts() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(taskService.countMyTasksByTabs(userId)); + } + + /** + * 我的接单任务列表(飞手视角),按 tab 筛选状态,以申请记录为主线分页,最新申请在前。 + * + *

tab 取值: + *

    + *
  • {@code accepted}(默认)— 已接单:申请活跃(待确认+已同意)且任务未开始(待接单+已接单)
  • + *
  • {@code running} — 进行中:飞手已同意且任务执行中
  • + *
  • {@code done} — 已完成:飞手已同意且任务已完成
  • + *
+ * 仅展示活跃申请,已拒绝/已撤销的记录不在任何 tab 展示。

+ * + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @param tab 状态分组(accepted/running/done),默认 accepted + * @return {list, totalElements, totalPages, pageNo, pageSize} + */ + @GetMapping("/accepted") + public Result> myAcceptedTasks( + @RequestParam int pageNo, + @RequestParam int pageSize, + @RequestParam(defaultValue = "accepted") String tab) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + + // 1. 按 tab 确定申请记录状态集合 + 任务状态集合 + List recordStatuses; + List taskStatuses; + switch (tab) { + case "running" -> { + recordStatuses = List.of(TaskRecordStatusEnum.APPROVED.getCode()); + taskStatuses = List.of(TaskStatusEnum.EXECUTING.getCode()); + } + case "done" -> { + recordStatuses = List.of(TaskRecordStatusEnum.APPROVED.getCode()); + taskStatuses = List.of(TaskStatusEnum.COMPLETED.getCode()); + } + default -> { + recordStatuses = List.of(TaskRecordStatusEnum.APPLIED.getCode(), + TaskRecordStatusEnum.APPROVED.getCode()); + taskStatuses = List.of(TaskStatusEnum.PENDING.getCode(), TaskStatusEnum.ACCEPTED.getCode()); + } + } + + // 2. 以申请记录为主线分页(按记录状态+任务状态子查询过滤) + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page recordPage = taskRecordRepository + .findByUserIdAndRecordStatusesAndTaskStatuses(userId, recordStatuses, taskStatuses, pageable); + List records = recordPage.getContent(); + + // 2. 分步批量查任务(先取记录页 → IN 批量取任务),一对多关联禁止 JOIN 膨胀 + Set taskIds = records.stream().map(TaskRecord::getTaskId).collect(Collectors.toSet()); + Map taskMap = taskIds.isEmpty() + ? Map.of() + : taskRepository.findByIdInAndDeletedAtIsNull(taskIds).stream() + .collect(Collectors.toMap(Task::getId, t -> t, (a, b) -> a)); + + // 3. 组装 VO:任务字段与 /my、/hall 完全一致 + 申请进度字段(场景图 URL 批量解析,避免 N+1) + List pageTasks = records.stream() + .map(r -> taskMap.get(r.getTaskId())) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + Map fileUrlMap = collectFileUrlMap(pageTasks); + Map publisherNameMap = collectPublisherNameMap(pageTasks); + Map acceptedPilotNameMap = collectAcceptedPilotNameMap(pageTasks); + List> voList = new ArrayList<>(); + for (TaskRecord record : records) { + Task task = taskMap.get(record.getTaskId()); + if (task == null) { + // 任务已被软删的脏记录跳过展示,不影响分页统计 + continue; + } + Map vo = buildTaskVO(task, fileUrlMap, publisherNameMap, acceptedPilotNameMap); + vo.put("recordStatus", record.getStatus()); + TaskRecordStatusEnum recordStatus = TaskRecordStatusEnum.of(record.getStatus()); + vo.put("recordStatusName", recordStatus != null ? recordStatus.getDesc() : "未知"); + voList.add(vo); + } + + Map data = new HashMap<>(); + data.put("list", voList); + data.put("totalElements", recordPage.getTotalElements()); + data.put("totalPages", recordPage.getTotalPages()); + data.put("pageNo", recordPage.getNumber()); + data.put("pageSize", recordPage.getSize()); + return Result.success(data); + } + + /** + * 抢单大厅(飞手视角):全平台可抢(待接单)任务,按创建时间倒序,分页。 + * + *

支持三个可选筛选(组合使用): + *

    + *
  • 省市区 — {@code province}/{@code city}/{@code district},按最精确层级命中
  • + *
  • 任务类型 — {@code type} 编码(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘)
  • + *
  • 金额区间 — {@code minReward}/{@code maxReward}(元,闭区间,可单边)
  • + *
+ * 筛选拼装逻辑在 {@link TaskService#hall},VO 组装与 /my 完全一致。

+ * + * @param pageNo 页码(0 基),前端必传 + * @param pageSize 每页条数,前端必传 + * @param query 筛选条件(GET 参数按字段名自动绑定,全部可选) + * @return {list, totalElements, totalPages, pageNo, pageSize} + */ + @GetMapping("/hall") + public Result> taskHall( + @RequestParam int pageNo, + @RequestParam int pageSize, + TaskHallQueryDTO query) { + Pageable pageable = PageRequest.of(pageNo, pageSize); + Page page = taskService.hall(query, pageable); + return Result.success(buildPageData(page, null, null)); + } + + /** + * 飞手申请接单(抢单)。 + * + *

业务校验(飞手认证、任务状态、重复申请等)在 {@link TaskService#grab}; + * 申请成功后事务提交自动触发微信模板消息通知商家(队列异步发送,不阻塞本请求)。

+ * + * @param taskId 任务 ID + * @return 申请成功提示 + */ + @PostMapping("/{taskId}/grab") + public Result grab(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.grab(taskId, userId); + return Result.success(null, "申请已提交,等待商家确认"); + } + + /** + * 飞手撤销接单申请。 + * + *

申请后可随时撤销;已被商家同意(已接单)的申请撤销后任务回滚为待接单, + * 任务开始后不可撤销。撤销成功后事务提交自动触发微信模板消息通知商家。

+ * + * @param taskId 任务 ID(按 (task_id, user_id) 定位申请记录,前端无需感知 recordId) + * @return 撤销结果提示 + */ + @PostMapping("/{taskId}/withdraw") + public Result withdraw(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.withdraw(taskId, userId); + return Result.success(null, "已撤销申请"); + } + + /** + * 商家查看任务的申请飞手列表。 + * + *

仅任务发布人可查;返回申请人概要(姓名/电话/认证状态/申请时间/状态), + * 执照资质详情由前端跳转飞手详情页查看,支持商家在此列表直接同意/拒绝。

+ * + * @param taskId 任务 ID + * @return 申请飞手列表 + */ + @GetMapping("/{taskId}/applicants") + public Result> applicants(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(taskService.applicants(taskId, userId)); + } + + /** + * 商家审批申请:同意(任务进入已接单)或拒绝。 + * + * @param recordId 申请记录 ID + * @param dto 审批结果与拒绝原因 + * @return 审批结果提示 + */ + @PostMapping("/records/{recordId}/review") + public Result review(@PathVariable Long recordId, @Valid @RequestBody TaskReviewDTO dto) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.review(recordId, userId, dto); + return Result.success(null, Boolean.TRUE.equals(dto.getApprove()) ? "已同意接单" : "已拒绝该申请"); + } + + // ==================== 商家任务状态流转:撤回 / 确认开始 / 确认完成 ==================== + + /** + * 商家撤回任务:将已发布(待接单/已接单)的任务置为已取消。 + * + *

若已有飞手接单,撤回后飞手侧申请记录同步关闭并收到通知。 + * 撤回不可逆,任务不再出现在商家"已发布/进行中"列表中。

+ * + * @param taskId 任务 ID + * @return 撤回结果提示 + */ + @PostMapping("/{taskId}/recall") + public Result recall(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.recall(taskId, userId); + return Result.success(null, "任务已撤回"); + } + + /** + * 商家确认开始:将已发布(待接单/已接单)的任务推进为执行中。 + * + *

无需飞手已接单也可直接开始;开始后待确认申请自动关闭。

+ * + * @param taskId 任务 ID + * @return 开始结果提示 + */ + @PostMapping("/{taskId}/start") + public Result start(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.start(taskId, userId); + return Result.success(null, "任务已开始"); + } + + /** + * 商家确认完成:将执行中的任务推进为已完成。 + * + * @param taskId 任务 ID + * @return 完成结果提示 + */ + @PostMapping("/{taskId}/complete") + public Result complete(@PathVariable Long taskId) { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + taskService.complete(taskId, userId); + return Result.success(null, "任务已完成"); + } + + // ==================== 飞手任务计数 ==================== + + /** + * 飞手"我的任务"各 tab 计数(已接单/进行中/已完成),用于个人中心徽标。 + * + * @return { accepted, running, done } + */ + @GetMapping("/accepted/counts") + public Result> myAcceptedCounts() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(taskService.countMyAcceptedByTabs(userId)); + } + + /** + * 将分页任务实体组装为前端列表数据(场景图 URL / 区域文本 / 保险名称 / 类型名)。 + * + *

/my 与 /hall 共用,保证两端卡片渲染字段完全一致。

+ * + * @param applicantCounts taskId → 待确认申请数(仅 /my 传入,其余端传 null 不输出该字段) + * @param firstApplicantNames taskId → 首位待确认申请人姓名(仅商家"已发布"tab 传入) + */ + private Map buildPageData(Page page, Map applicantCounts, + Map firstApplicantNames) { + List tasks = page.getContent(); + Map fileUrlMap = collectFileUrlMap(tasks); + Map publisherNameMap = collectPublisherNameMap(tasks); + Map acceptedPilotNameMap = collectAcceptedPilotNameMap(tasks); + + // —— 逐条组装 VO —— + List> voList = new ArrayList<>(); + for (Task task : tasks) { + Map vo = buildTaskVO(task, fileUrlMap, publisherNameMap, acceptedPilotNameMap); + // 待确认申请数 + 首位申请人姓名(仅商家"我的发布"场景传入;其余接口不输出) + if (applicantCounts != null) { + vo.put("applicantCount", applicantCounts.getOrDefault(task.getId(), 0L)); + } + if (firstApplicantNames != null) { + vo.put("firstApplicantName", firstApplicantNames.get(task.getId())); + } + voList.add(vo); + } + + Map data = new HashMap<>(); + data.put("list", voList); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return data; + } + + /** + * 批量收集任务的场景图 fileId → 批量查 SysFile → 构建绝对 URL 映射。 + * + *

分步批量查(先收集 fileId 再 IN 查询),避免逐条任务查库造成 N+1。

+ */ + private Map collectFileUrlMap(List tasks) { + Set allFileIds = new HashSet<>(); + for (Task task : tasks) { + if (StringUtils.isNotBlank(task.getSceneImages())) { + for (String idStr : task.getSceneImages().split(";")) { + try { + allFileIds.add(Long.parseLong(idStr.trim())); + } catch (NumberFormatException ignored) { + // 防御性忽略非法 ID + } + } + } + } + return allFileIds.isEmpty() + ? Map.of() + : sysFileRepository.findAllByIdIn(allFileIds).stream() + .collect(Collectors.toMap(SysFile::getId, SysFile::getFileUrl, (a, b) -> a)); + } + + /** + * 批量收集任务的发布商家名称,构建 publisherId → 商家名称 映射。 + * + *

分步批量查(先收集 publisherId 再 IN 查询 merchant.user_id),避免逐条查库 N+1。 + * 非商家用户发布的任务(如管理员直发)在映射中缺失,前端展示时降级为"匿名商家"。

+ */ + private Map collectPublisherNameMap(List tasks) { + Set publisherIds = new HashSet<>(); + for (Task task : tasks) { + if (task.getPublisherId() != null) { + publisherIds.add(task.getPublisherId()); + } + } + if (publisherIds.isEmpty()) { + return Map.of(); + } + return merchantRepository.findByUserIdInAndDeletedAtIsNull(publisherIds).stream() + .collect(Collectors.toMap(Merchant::getUserId, Merchant::getName, (a, b) -> a)); + } + + /** + * 批量收集任务的已接单飞手姓名,构建 acceptedPilotId → 飞手名称 映射。 + * + *

分步批量查(先收集 acceptedPilotId 再 IN 查询),避免逐条查库 N+1。 + * 无已接单飞手的任务 acceptedPilotId 为 null,自动跳过。

+ */ + private Map collectAcceptedPilotNameMap(List tasks) { + Set pilotIds = new HashSet<>(); + for (Task task : tasks) { + if (task.getAcceptedPilotId() != null) { + pilotIds.add(task.getAcceptedPilotId()); + } + } + if (pilotIds.isEmpty()) { + return Map.of(); + } + return pilotRepository.findByIdInAndDeletedAtIsNull(pilotIds).stream() + .collect(Collectors.toMap(Pilot::getId, Pilot::getName, (a, b) -> a)); + } + + /** + * 批量查询任务的首位待确认申请人姓名,构建 taskId → 申请人姓名 映射。 + * + *

仅返回每个任务最早申请(待确认态)的飞手姓名,用于商家"我的发布"列表卡片, + * 配合"1人申请"徽标展示具体申请人,避免商家点击进入后才知道是谁。

+ */ + private Map collectFirstApplicantNameMap(Set taskIds) { + if (taskIds == null || taskIds.isEmpty()) { + return Map.of(); + } + List rows = taskRecordRepository.findFirstApplicantByTaskIds( + taskIds, TaskRecordStatusEnum.APPLIED.getCode()); + return rows.stream() + .collect(Collectors.toMap( + row -> (Long) row[0], + row -> (String) row[2], + (a, b) -> a)); + } + + /** + * 将单个任务实体组装为前端列表卡片 VO(场景图 URL / 区域文本 / 保险名称 / 类型名 / 发布商家名称 / 已接单飞手姓名)。 + * + *

/my、/hall、/accepted 三端共用,保证列表卡片渲染字段完全一致。

+ * + * @param fileUrlMap fileId → 绝对 URL + * @param publisherNameMap publisherId → 商家名称 + * @param acceptedPilotNameMap acceptedPilotId → 飞手名称 + */ + private Map buildTaskVO(Task task, Map fileUrlMap, + Map publisherNameMap, + Map acceptedPilotNameMap) { + Map vo = new HashMap<>(); + // Task 实体核心字段(手动复制,避免直接序列化暴露不必要的字段) + vo.put("id", task.getId()); + vo.put("taskNo", task.getTaskNo()); + vo.put("name", task.getName()); + vo.put("type", task.getType()); + vo.put("province", task.getProvince()); + vo.put("city", task.getCity()); + vo.put("district", task.getDistrict()); + vo.put("address", task.getAddress()); + vo.put("latitude", task.getLatitude()); + vo.put("longitude", task.getLongitude()); + vo.put("sceneImages", task.getSceneImages()); + vo.put("requiredCount", task.getRequiredCount()); + vo.put("taskStartTime", task.getTaskStartTime()); + vo.put("taskEndTime", task.getTaskEndTime()); + vo.put("reward", task.getReward()); + vo.put("insuranceRequire", task.getInsuranceRequire()); + vo.put("contactName", task.getContactName()); + vo.put("contactPhone", task.getContactPhone()); + vo.put("remark", task.getRemark()); + vo.put("status", task.getStatus()); + // 任务状态中文名(已取消等),用于"我的发布/我的接单"列表展示状态标签 + TaskStatusEnum statusEnum = TaskStatusEnum.of(task.getStatus()); + vo.put("statusName", statusEnum != null ? statusEnum.getDesc() : "未知"); + vo.put("isPremium", task.getIsPremium()); + vo.put("publisherId", task.getPublisherId()); + // 发布商家名称(批量预查映射,缺失时前端降级展示"匿名商家") + String publisherName = task.getPublisherId() != null ? publisherNameMap.get(task.getPublisherId()) : null; + vo.put("publisherName", publisherName); + vo.put("acceptedPilotId", task.getAcceptedPilotId()); + // 已接单飞手名称(acceptedPilotId 有值时解析;未接单/飞手已注销则为 null) + String acceptedPilotName = task.getAcceptedPilotId() != null + ? acceptedPilotNameMap.get(task.getAcceptedPilotId()) : null; + vo.put("acceptedPilotName", acceptedPilotName); + vo.put("createdAt", task.getCreatedAt()); + vo.put("updatedAt", task.getUpdatedAt()); + + // —— 扩展组装字段 —— + // 1. 场景图 URL 列表(绝对 URL,前端可直接用) + List sceneImageUrls = new ArrayList<>(); + if (StringUtils.isNotBlank(task.getSceneImages())) { + for (String idStr : task.getSceneImages().split(";")) { + try { + Long fileId = Long.parseLong(idStr.trim()); + String url = fileUrlMap.get(fileId); + if (StringUtils.isNotBlank(url)) { + sceneImageUrls.add(buildFileUrl(url)); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法 ID + } + } + } + vo.put("sceneImageUrls", sceneImageUrls); + + // 2. 区域合并文本(省·市),直辖市 province==city 时只展示城市 + String province = StringUtils.trimToNull(task.getProvince()); + String city = StringUtils.trimToNull(task.getCity()); + String regionText; + if (province != null && province.equals(city)) { + regionText = city; + } else if (province != null && city != null) { + regionText = province + "·" + city; + } else { + regionText = StringUtils.defaultIfBlank(province, city); + } + vo.put("regionText", regionText); + + // 3. 保险类型名称列表 + List insuranceNames = new ArrayList<>(); + if (StringUtils.isNotBlank(task.getInsuranceRequire())) { + for (String codeStr : task.getInsuranceRequire().split(";")) { + try { + Integer code = Integer.parseInt(codeStr.trim()); + InsuranceTypeEnum type = InsuranceTypeEnum.of(code); + if (type != null) { + insuranceNames.add(type.getDesc()); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码 + } + } + } + vo.put("insuranceNames", insuranceNames); + + // 4. 任务类型中文名称 + TaskTypeEnum typeEnum = TaskTypeEnum.of(task.getType()); + vo.put("typeName", typeEnum != null ? typeEnum.getDesc() : "其他"); + + return vo; + } + + /** + * 将相对文件路径拼接为绝对 URL。 + * + *

如果 fileBaseUrl 已配置且 url 是相对路径(以 '/' 开头),则拼接前缀; + * 如果 url 已经是 http(s) 绝对路径,直接返回。

+ * + * @param url SysFile.fileUrl(可能是相对路径 /static/xxx 或绝对路径) + * @return 可直接被小程序 Image src 使用的完整 URL + */ + private String buildFileUrl(String url) { + if (StringUtils.isBlank(url)) { + return url; + } + // 已经是绝对 URL → 直接返回 + if (url.startsWith("http://") || url.startsWith("https://")) { + return url; + } + // 没有配置前缀 → 原样返回 + if (StringUtils.isBlank(fileBaseUrl)) { + return url; + } + // 确保前缀不以 '/' 结尾,url 以 '/' 开头 + String prefix = fileBaseUrl.endsWith("/") + ? fileBaseUrl.substring(0, fileBaseUrl.length() - 1) + : fileBaseUrl; + String path = url.startsWith("/") ? url : "/" + url; + return prefix + path; + } + + // TODO: 小程序端任务操作待扩展: + // GET /api/mini/task/{id} 任务详情 +} diff --git a/src/main/java/com/haisen/laop/controller/mini/MiniWxController.java b/src/main/java/com/haisen/laop/controller/mini/MiniWxController.java new file mode 100644 index 0000000..dfcf2fe --- /dev/null +++ b/src/main/java/com/haisen/laop/controller/mini/MiniWxController.java @@ -0,0 +1,48 @@ +package com.haisen.laop.controller.mini; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.RequestContext; +import com.haisen.laop.common.Result; +import com.haisen.laop.service.WxMpSubscribeService; +import com.haisen.laop.vo.WxSubscribeStatusVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 微信能力 —— 小程序端 Controller。 + * + *

路径前缀:{@code /api/mini/wx/*},承载小程序端与微信生态相关的辅助查询 + * (服务号关注状态等),与回调入口 /api/wechat/mp/*(微信服务器调用)严格分离。

+ * + * @author duhao + */ +@RestController +@RequestMapping("/api/mini/wx") +@RequiredArgsConstructor +public class MiniWxController { + + private final WxMpSubscribeService wxMpSubscribeService; + + /** + * 查询当前用户是否关注服务号。 + * + *

使用场景:商家发布任务成功后、飞手申请接单成功后,前端调用本接口; + * 未关注时弹"关注公众号"引导弹窗(弹窗不阻断已成功的主流程), + * 已关注时静默通过。产品约定:提示文案区分角色 —— 商家提示"飞手接单即刻获得通知", + * 飞手提示"商家审核后即刻获得通知"。

+ * + * @return {subscribed: true 已关注 / false 未关注} + */ + @GetMapping("/mp/subscribe-status") + public Result subscribeStatus() { + Long userId = RequestContext.getUserId(); + if (userId == null) { + throw new BusinessException(401, "请先登录"); + } + return Result.success(WxSubscribeStatusVO.builder() + .subscribed(wxMpSubscribeService.isSubscribed(userId)) + .build()); + } +} diff --git a/src/main/java/com/haisen/laop/dto/AnnouncementQueryDTO.java b/src/main/java/com/haisen/laop/dto/AnnouncementQueryDTO.java new file mode 100644 index 0000000..0319626 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/AnnouncementQueryDTO.java @@ -0,0 +1,40 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.AnnouncementConstants; +import lombok.Data; + +import java.io.Serializable; + +/** + * 公告列表查询 DTO,对应 Web 管理端公告列表的筛选条件(GET 参数自动绑定)。 + * + *

全部字段可选:不传即查全量;{@code pageNo} 从 0 开始(与小程序端分页约定一致), + * 前端页码由 api 层负责换算。

+ * + * @author duhao + */ +@Data +public class AnnouncementQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 公告标题,模糊匹配(LIKE %title%)。 + */ + private String title; + + /** + * 公告状态:0隐藏 1显示,精确匹配;不传查全部。 + */ + private Integer status; + + /** + * 页码,从 0 开始,默认 0。 + */ + private Integer pageNo = 0; + + /** + * 每页条数,默认 10,上限 {@link AnnouncementConstants#MAX_PAGE_SIZE}。 + */ + private Integer pageSize = AnnouncementConstants.DEFAULT_PAGE_SIZE; +} diff --git a/src/main/java/com/haisen/laop/dto/AnnouncementSaveDTO.java b/src/main/java/com/haisen/laop/dto/AnnouncementSaveDTO.java new file mode 100644 index 0000000..0e2222f --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/AnnouncementSaveDTO.java @@ -0,0 +1,42 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; + +/** + * 公告新增/编辑表单 DTO,对应 Web 管理端公告弹窗提交的表单数据。 + * + *

表单字段:标题 + 正文 + 状态三字段,是公告维护的最小完备集。 + * 生效起止时间暂不开放编辑(保持 null),后续如需定时发布再扩展。

+ * + * @author duhao + */ +@Data +public class AnnouncementSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 公告标题,列表与详情页标题展示,不可为空。 + */ + @NotBlank(message = "公告标题不能为空") + @Size(max = 100, message = "公告标题不能超过100个字符") + private String title; + + /** + * 公告正文,点击公告条进入详情页展示,不可为空。 + */ + @NotBlank(message = "公告内容不能为空") + @Size(max = 5000, message = "公告内容不能超过5000个字符") + private String content; + + /** + * 展示状态:0隐藏 1显示,不可为空。 + */ + @NotNull(message = "请选择公告状态") + private Integer status; +} diff --git a/src/main/java/com/haisen/laop/dto/AppBannerQueryDTO.java b/src/main/java/com/haisen/laop/dto/AppBannerQueryDTO.java new file mode 100644 index 0000000..cf863e4 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/AppBannerQueryDTO.java @@ -0,0 +1,27 @@ +package com.haisen.laop.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 轮播图分页查询 DTO,对应 Web 管理端列表筛选条件。 + * + *

全部字段可选,GET 参数自动绑定。

+ * + * @author duhao + */ +@Data +public class AppBannerQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 状态精确匹配:0隐藏 1显示。 */ + private Integer status; + + /** 页码,0 起(与 Spring Data 约定一致)。 */ + private Integer pageNo; + + /** 每页数量。 */ + private Integer pageSize; +} diff --git a/src/main/java/com/haisen/laop/dto/AppBannerSaveDTO.java b/src/main/java/com/haisen/laop/dto/AppBannerSaveDTO.java new file mode 100644 index 0000000..84c9b6b --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/AppBannerSaveDTO.java @@ -0,0 +1,52 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; + +/** + * 轮播图新增/编辑表单 DTO,对应 Web 管理端弹窗提交的表单数据。 + * + *

说明:title / subtitle 已从表单移除(不再由运营配置), + * 由 Service 层在创建时根据跳转类型自动推导默认值, + * 或沿用原数据(编辑时)。

+ * + * @author duhao + */ +@Data +public class AppBannerSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 轮播图图片 file_id,不可为空。 + */ + @NotNull(message = "请上传轮播图图片") + private Long imageFileId; + + /** + * 跳转类型:caac/performance/merchant/pilot/course/custom。 + */ + @Size(max = 32, message = "跳转类型不能超过32个字符") + private String linkType; + + /** + * 自定义跳转链接,linkType=custom 时使用。 + */ + @Size(max = 500, message = "自定义链接不能超过500个字符") + private String linkUrl; + + /** + * 排序值,升序,值越小越靠前。 + */ + @NotNull(message = "排序值不能为空") + private Integer sortOrder; + + /** + * 展示状态:0隐藏 1显示。 + */ + @NotNull(message = "请选择展示状态") + private Integer status; +} diff --git a/src/main/java/com/haisen/laop/dto/AppConfigChangedEvent.java b/src/main/java/com/haisen/laop/dto/AppConfigChangedEvent.java new file mode 100644 index 0000000..e738657 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/AppConfigChangedEvent.java @@ -0,0 +1,18 @@ +package com.haisen.laop.dto; + +/** + * 平台功能配置变更事件,由 {@code AppConfigServiceImpl.updateValue} 在事务提交后发布。 + * + *

用途:需要感知配置变更的运行时组件(如微信推送消费者)通过监听此事件 + * 即时刷新内存状态并唤醒阻塞线程,避免每轮轮询 {@code app_config} 表感知开关变化。

+ * + *

承载信息:仅包含 {@code configKey} 与 {@code configValue},事件本身不携带 + * "谁改的、何时改的"等审计信息——审计字段已由 {@code app_config.updated_at / updated_by} + * 落库,事件只负责"通知变更发生"。

+ * + * @param configKey 配置键(如 {@code "mp_push_enabled"}) + * @param configValue 新配置值(布尔开关为 {@code "0"} 或 {@code "1"}) + * @author duhao + */ +public record AppConfigChangedEvent(String configKey, String configValue) { +} diff --git a/src/main/java/com/haisen/laop/dto/CourseAppointmentDTO.java b/src/main/java/com/haisen/laop/dto/CourseAppointmentDTO.java new file mode 100644 index 0000000..d365b76 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/CourseAppointmentDTO.java @@ -0,0 +1,51 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 课程预约提交 DTO,对应小程序课程详情页"立即预约"弹窗表单。 + * + *

提交人身份由后端从 token 注入,前端不可伪造;金额由后端按 + * {@code course.price * personCount} 计算,前端不传金额。

+ * + * @author duhao + */ +@Data +public class CourseAppointmentDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 课程ID。 */ + @NotNull(message = "课程ID不能为空") + private Long courseId; + + /** 预约时间(具体上课场次)。 */ + @NotNull(message = "请选择预约时间") + private LocalDateTime appointmentDate; + + /** 预约人数,至少 1。 */ + @NotNull(message = "预约人数不能为空") + @Min(value = 1, message = "预约人数至少为1") + private Integer personCount; + + /** 联系人姓名。 */ + @NotBlank(message = "联系人姓名不能为空") + @Size(max = 50, message = "联系人姓名不能超过50字") + private String contactName; + + /** 联系人电话。 */ + @NotBlank(message = "联系电话不能为空") + @Size(max = 20, message = "联系电话格式不正确") + private String contactPhone; + + /** 备注,选填。 */ + @Size(max = 200, message = "备注不能超过200字") + private String remark; +} diff --git a/src/main/java/com/haisen/laop/dto/CourseQueryDTO.java b/src/main/java/com/haisen/laop/dto/CourseQueryDTO.java new file mode 100644 index 0000000..c313622 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/CourseQueryDTO.java @@ -0,0 +1,40 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.CourseConstants; +import lombok.Data; + +import java.io.Serializable; + +/** + * 课程列表查询 DTO,对应 Web 管理端课程列表的筛选条件(GET 参数自动绑定)。 + * + *

全部字段可选:不传即查全量;{@code pageNo} 从 0 开始(与小程序端分页约定一致), + * 前端页码由 api 层负责换算。

+ * + * @author duhao + */ +@Data +public class CourseQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 课程名称,模糊匹配(LIKE %name%)。 + */ + private String name; + + /** + * 课程状态:0下架 1上架 2已满员,精确匹配;不传查全部。 + */ + private Integer status; + + /** + * 页码,从 0 开始,默认 0。 + */ + private Integer pageNo = 0; + + /** + * 每页条数,默认 10,上限 {@link CourseConstants#MAX_PAGE_SIZE}。 + */ + private Integer pageSize = CourseConstants.DEFAULT_PAGE_SIZE; +} diff --git a/src/main/java/com/haisen/laop/dto/CourseSaveDTO.java b/src/main/java/com/haisen/laop/dto/CourseSaveDTO.java new file mode 100644 index 0000000..a365248 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/CourseSaveDTO.java @@ -0,0 +1,103 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.CourseConstants; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 课程新增/编辑请求 DTO,对应 Web 管理端"研学课程"表单的全部字段。 + * + *

多选字段规约:星期/日期以数组提交,Service 层负责去重、排序后转为 + * 分号拼接的 {@code String} 存入 DB;禁止前端直接拼字符串提交,避免格式校验遗漏。

+ * + *

排课双模式互斥:{@code scheduleType = 1}(每周重复)时必须提交 + * {@code scheduleWeekDays};{@code scheduleType = 2}(日期排课)时必须提交 + * {@code scheduleDates},另一字段自动置空。条件校验在 Service 层完成。

+ * + * @author duhao + */ +@Data +public class CourseSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 课程名称,列表/详情页标题。 + */ + @NotBlank(message = "课程名称不能为空") + @Size(max = 100, message = "课程名称长度不能超过100个字符") + private String name; + + /** + * 课程宣传图片文件ID,关联 sys_file.id;必填。 + */ + @NotNull(message = "课程宣传图片不能为空") + private Long coverImageId; + + /** + * 课程售价(元),必填且必须大于 0。 + */ + @NotNull(message = "课程售价不能为空") + @DecimalMin(value = "0.01", message = "课程售价必须大于0") + private BigDecimal price; + + /** + * 课程状态:0下架 1上架(新增/编辑仅允许这两个值,已满员由名额逻辑控制)。 + */ + @NotNull(message = "课程状态不能为空") + private Integer status; + + /** + * 课程简介,富文本 HTML(支持图片+文字混排),图片经 /api/file/upload 上传后以 URL 内嵌。 + */ + @Size(max = CourseConstants.MAX_DESCRIPTION_LENGTH, message = "课程简介内容过长") + private String description; + + /** + * 排课方式:1每周重复 2日期排课,必填。 + */ + @NotNull(message = "排课方式不能为空") + private Integer scheduleType; + + /** + * 每周上课星期编码列表(1=周一 ... 7=周日),排课方式为"每周重复"时必填。 + * Service 层去重升序后转为分号拼接串。 + */ + private List scheduleWeekDays; + + /** + * 排课日期列表(yyyy-MM-dd),排课方式为"日期排课"时必填。 + * Service 层校验格式、去重升序后转为分号拼接串。 + */ + private List scheduleDates; + + /** + * 联系人姓名,必填。 + */ + @NotBlank(message = "联系人姓名不能为空") + @Size(max = 50, message = "联系人姓名长度不能超过50个字符") + private String contactName; + + /** + * 联系电话,必填;中国大陆手机号正则校验。 + */ + @NotBlank(message = "联系电话不能为空") + @Size(max = 20, message = "联系电话长度不能超过20个字符") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入正确的手机号") + private String contactPhone; + + /** + * 精选标记:0否 1是。开启后小程序首页"精选研学课程"区块展示; + * 非必填,默认 0(新增/编辑表单 el-switch 关闭状态对应 0)。 + */ + private Integer featured; +} diff --git a/src/main/java/com/haisen/laop/dto/ExamQuestionSaveDTO.java b/src/main/java/com/haisen/laop/dto/ExamQuestionSaveDTO.java new file mode 100644 index 0000000..f2153be --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/ExamQuestionSaveDTO.java @@ -0,0 +1,59 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * 习题新增/编辑 DTO,Web 管理端"培训考试 → 题库"tab 使用。 + * + *

前端提交完整题目信息(题干、选项、答案、解析等),后端做基本校验后落库。

+ * + * @author duhao + */ +@Data +public class ExamQuestionSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 编辑时传入,新增时不传。 */ + private Long id; + + /** 所属题库ID。 */ + @NotNull(message = "所属题库不能为空") + private Long bankId; + + /** 题目内容。 */ + @NotBlank(message = "题目内容不能为空") + private String content; + + /** 选项数组:[{"key":"A","val":"..."}],判断题固定传 A=正确、B=错误。 */ + private List> options; + + /** 题型:1单选 2多选 3判断。 */ + @NotNull(message = "题型不能为空") + private Integer questionType; + + /** 标准答案:单选用 "A",多选用 "AB",判断用 "T"/"F"。 */ + @NotBlank(message = "正确答案不能为空") + private String answer; + + /** 答案解析。 */ + private String explanation; + + /** 难度:1简单 2中等 3困难。 */ + @NotNull(message = "难度不能为空") + private Integer difficulty; + + /** 分值,默认 5。 */ + @Positive(message = "分值必须大于0") + private Integer score; + + /** 排序号,越小越靠前,默认取当前题库最大 sort_order + 1。 */ + private Integer sortOrder; +} diff --git a/src/main/java/com/haisen/laop/dto/ExamSubmitDTO.java b/src/main/java/com/haisen/laop/dto/ExamSubmitDTO.java new file mode 100644 index 0000000..5f9de81 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/ExamSubmitDTO.java @@ -0,0 +1,35 @@ +package com.haisen.laop.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 答题提交 DTO,用户作答后提交的答案集合。 + * + * @author duhao + */ +@Data +public class ExamSubmitDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 用户作答列表。 */ + private List answers; + + /** + * 单题作答。 + */ + @Data + public static class UserAnswer implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 题目ID。 */ + private Long questionId; + + /** 用户答案:单选"A",多选"AB",判断"T"/"F"。 */ + private String userAnswer; + } +} diff --git a/src/main/java/com/haisen/laop/dto/MerchantCertifyDTO.java b/src/main/java/com/haisen/laop/dto/MerchantCertifyDTO.java new file mode 100644 index 0000000..4b33e24 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/MerchantCertifyDTO.java @@ -0,0 +1,68 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; + +/** + * 商家认证提交 DTO,对应小程序"商家认证"页面的商家信息表单。 + * + *

字段与 {@link com.haisen.laop.entity.Merchant} PO 对齐;服务类型为飞手能力属性, + * 已从商家认证中移除(merchant.service_types 历史列保留但不再写入)。

+ * + * @author duhao + */ +@Data +public class MerchantCertifyDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 商家名称,对外展示,认证时校验与营业执照一致。 + */ + @NotBlank(message = "商家名称不能为空") + @Size(max = 100, message = "商家名称长度不能超过100个字符") + private String name; + + /** + * 商家地址,选填。 + */ + @Size(max = 200, message = "商家地址长度不能超过200个字符") + private String address; + + /** + * 联系人姓名。 + */ + @NotBlank(message = "联系人不能为空") + @Size(max = 50, message = "联系人长度不能超过50个字符") + private String contactName; + + /** + * 联系电话,中国大陆手机号正则校验。 + */ + @NotBlank(message = "联系电话不能为空") + @Size(max = 20, message = "联系电话长度不能超过20个字符") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入正确的手机号") + private String contactPhone; + + /** + * 商家简介,选填,详情页展示。 + */ + @Size(max = 500, message = "商家简介长度不能超过500个字符") + private String description; + + /** + * 门头照片 file_id,选填。 + */ + private Long doorImageId; + + /** + * 营业执照照片 file_id(sys_file.id),认证审核核心材料,必须上传 1 张。 + */ + @NotNull(message = "请上传营业执照照片") + private Long licenseFileId; +} diff --git a/src/main/java/com/haisen/laop/dto/MessageLogQueryDTO.java b/src/main/java/com/haisen/laop/dto/MessageLogQueryDTO.java new file mode 100644 index 0000000..3ffe09b --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/MessageLogQueryDTO.java @@ -0,0 +1,46 @@ +package com.haisen.laop.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 微信模板消息日志查询条件(Web 管理端),全部字段可选。 + * + * @author duhao + */ +@Data +public class MessageLogQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 接收人用户 ID,精确筛选。 + */ + private Long userId; + + /** + * 业务类型编码,精确筛选(1任务申请通知)。 + */ + private Integer bizType; + + /** + * 发送状态编码,精确筛选(0已跳过 1已提交 2送达成功 3送达失败)。 + */ + private Integer sendStatus; + + /** + * 接收人服务号 openid,支持模糊匹配。 + */ + private String openId; + + /** + * 页码,从 0 开始,默认 0。 + */ + private Integer pageNo = 0; + + /** + * 每页条数,默认 10,上限 100。 + */ + private Integer pageSize = 10; +} diff --git a/src/main/java/com/haisen/laop/dto/PilotCertifyDTO.java b/src/main/java/com/haisen/laop/dto/PilotCertifyDTO.java new file mode 100644 index 0000000..c54bf04 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/PilotCertifyDTO.java @@ -0,0 +1,97 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.CertConstants; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 飞手认证提交 DTO,对应小程序"飞手认证"页面的表单。 + * + *

多执照设计:一个飞手可持有多本执照(如同时持有 AOPA 与 UTC), + * {@code licenses} 为执照列表,每项包含类型/编号/照片;Service 层按下标 + * 拼接为分号串后落库(与 {@link com.haisen.laop.entity.Pilot} PO 对齐)。

+ * + *

认证状态、认证时间等由 Service 层维护,禁止前端提交。

+ * + * @author duhao + */ +@Data +public class PilotCertifyDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 姓名(实名),认证时与身份证/执照一致。 + */ + @NotBlank(message = "姓名不能为空") + @Size(max = 50, message = "姓名长度不能超过50个字符") + private String name; + + /** + * 手机号,中国大陆手机号正则校验。 + */ + @NotBlank(message = "手机号不能为空") + @Size(max = 20, message = "手机号长度不能超过20个字符") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入正确的手机号") + private String phone; + + /** + * 执照列表,至少 1 本、至多 3 本;嵌套校验每本执照的完整性。 + */ + @Valid + @NotEmpty(message = "请至少填写一本执照信息") + @Size(max = CertConstants.MAX_LICENSE_COUNT, message = "执照数量最多3本") + private List licenses; + + /** + * 服务类型编码列表(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘),选填。 + * Service 层转为分号拼接字符串存入 pilot.service_types;编码合法性在 Service 层校验。 + */ + @Size(max = 7, message = "服务类型最多7项") + private List serviceTypes; + + /** + * 单本执照信息。 + */ + @Data + public static class LicenseItemDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * CAAC 执照类型编码(见 {@code LicenseTypeEnum}:1 AOPA 2 UTC 3 ASFC 4 CAAC)。 + * 非空仅做存在性校验,编码合法性由 Service 层按枚举精确校验。 + */ + @NotNull(message = "请选择执照类型") + private Integer licenseType; + + /** + * CAAC 执照编号,提交认证时与 CAAC 接口核验真伪。 + */ + @NotBlank(message = "执照编号不能为空") + @Size(max = 50, message = "执照编号长度不能超过50个字符") + private String licenseNo; + + /** + * 执照照片 file_id(sys_file.id),认证审核核心材料,每本执照必须上传 1 张。 + */ + @NotNull(message = "请上传执照照片") + private Long licenseFileId; + + /** + * 执照获证日期,格式 yyyy-MM-dd(如 2023-06-15); + * 与 licenseType / licenseNo / licenseFileId 按下标一一对应。 + */ + @NotBlank(message = "请选择获证日期") + @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "获证日期格式应为 yyyy-MM-dd") + private String licenseDate; + } +} diff --git a/src/main/java/com/haisen/laop/dto/PointsAdjustDTO.java b/src/main/java/com/haisen/laop/dto/PointsAdjustDTO.java new file mode 100644 index 0000000..dfa8afa --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/PointsAdjustDTO.java @@ -0,0 +1,49 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.PointsConstants; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; + +/** + * Web 后台手动增减积分请求体(用户管理 → 积分明细弹窗)。 + * + *

方向与数量分离建模:{@code changeType} 决定收入/支出, + * {@code points} 统一传正整数(绝对值),符号由后端按方向落库; + * 调整原因必填,作为人工账务调整的审计依据写入 {@code points_detail.remark}。

+ * + * @author duhao + */ +@Data +public class PointsAdjustDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 变动方向:1 收入(手动新增) 2 支出(手动扣减),取值见 PointsConstants。 + */ + @NotNull(message = "请选择变动类型(新增/扣减)") + private Integer changeType; + + /** + * 积分数量(正整数,收入/支出的绝对值),区间由 PointsConstants 统一定义。 + */ + @NotNull(message = "请填写积分数量") + @Min(value = PointsConstants.MIN_MANUAL_ADJUST_POINTS, message = "积分数量必须为正整数") + @Max(value = PointsConstants.MAX_MANUAL_ADJUST_POINTS, + message = "单次调整积分不能超过 " + PointsConstants.MAX_MANUAL_ADJUST_POINTS) + private Integer points; + + /** + * 调整原因(必填),写入积分流水备注,便于后续审计溯源。 + */ + @NotBlank(message = "请填写调整原因") + @Size(max = PointsConstants.MAX_MANUAL_REMARK_LENGTH, + message = "调整原因最长 " + PointsConstants.MAX_MANUAL_REMARK_LENGTH + " 字") + private String remark; +} diff --git a/src/main/java/com/haisen/laop/dto/TaskHallQueryDTO.java b/src/main/java/com/haisen/laop/dto/TaskHallQueryDTO.java new file mode 100644 index 0000000..33db8ea --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/TaskHallQueryDTO.java @@ -0,0 +1,56 @@ +package com.haisen.laop.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 抢单大厅筛选查询 DTO,对应小程序任务中心"抢单大厅"页签的筛选条。 + * + *

区域筛选语义(逐级命中):省市区由微信原生 region Picker 提供, + * 三个参数按用户选择的最精确层级生效——选了区县按区县匹配,仅选到市按市匹配, + * 仅选到省按省匹配(与 {@code Task} PO 的 province/city/district 名称字段对应)。

+ * + *

金额筛选语义:{@code minReward}/{@code maxReward} 为闭区间边界, + * 可单边为空(如"500以上"仅传 minReward)。

+ * + *

GET 查询参数由 Spring 按字段名自动绑定,全部可选。

+ * + * @author duhao + */ +@Data +public class TaskHallQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 省份名称(如"江西省"),任务发布时写入的 province 字段值。 + */ + private String province; + + /** + * 城市名称(如"九江市"),任务发布时写入的 city 字段值。 + */ + private String city; + + /** + * 区县名称(如"浔阳区"),任务发布时写入的 district 字段值。 + */ + private String district; + + /** + * 任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘,空表示不限。 + */ + private Integer type; + + /** + * 报酬区间下限(元),null 表示不设下限。 + */ + private BigDecimal minReward; + + /** + * 报酬区间上限(元),null 表示不设上限。 + */ + private BigDecimal maxReward; +} diff --git a/src/main/java/com/haisen/laop/dto/TaskManageQueryDTO.java b/src/main/java/com/haisen/laop/dto/TaskManageQueryDTO.java new file mode 100644 index 0000000..b557877 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/TaskManageQueryDTO.java @@ -0,0 +1,53 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.TaskConstants; +import lombok.Data; + +import java.io.Serializable; + +/** + * 任务管理列表查询 DTO,对应 Web 管理端任务列表的筛选条件(GET 参数自动绑定)。 + * + *

全部字段可选:不传即查全量;{@code pageNo} 从 0 开始(与小程序端分页约定一致), + * 前端页码由 api 层负责换算。

+ * + *

keyword:同时匹配任务编号(task_no)或任务名称(name),模糊查询, + * 方便管理员快速检索。

+ * + * @author duhao + */ +@Data +public class TaskManageQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 搜索关键词,同时模糊匹配任务编号和任务名称。 + */ + private String keyword; + + /** + * 任务类型编码(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘),精确匹配;不传查全部。 + */ + private Integer type; + + /** + * 任务类别:0普通任务 1优质任务,精确匹配;不传查全部。 + */ + private Integer isPremium; + + /** + * 任务状态(0草稿 1待接单 2已接单 3执行中 4已完成 5已取消),精确匹配;不传查全部。 + */ + private Integer status; + + /** + * 页码,从 0 开始,默认 0。 + */ + private Integer pageNo = 0; + + /** + * 每页条数,默认 10,上限 {@link TaskConstants#MAX_SCENE_IMAGE_COUNT} 对应分页上限。 + */ + private Integer pageSize = 10; +} diff --git a/src/main/java/com/haisen/laop/dto/TaskPublishDTO.java b/src/main/java/com/haisen/laop/dto/TaskPublishDTO.java new file mode 100644 index 0000000..041f784 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/TaskPublishDTO.java @@ -0,0 +1,141 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.*; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 发布任务请求 DTO,对应原型图"发布任务"页面的全部表单字段。 + * + *

多选字段规约:前端以数组提交,Service 层负责转为分号拼接的 {@code String} 存入 DB; + * 禁止前端直接拼字符串提交,避免格式校验遗漏。

+ * + * @author duhao + */ +@Data +public class TaskPublishDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务名称,列表/详情页标题。 + */ + @NotBlank(message = "任务名称不能为空") + @Size(max = 100, message = "任务名称长度不能超过100个字符") + private String name; + + /** + * 任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘。 + */ + @NotNull(message = "任务类型不能为空") + private Integer type; + + /** + * 省份,任务所在地 LBS 筛选维度。 + */ + @Size(max = 20, message = "省份长度不能超过20个字符") + private String province; + + /** + * 城市,任务所在地 LBS 筛选维度。 + */ + @Size(max = 20, message = "城市长度不能超过20个字符") + private String city; + + /** + * 区县。 + */ + @Size(max = 20, message = "区县长度不能超过20个字符") + private String district; + + /** + * 详细地址,飞手导航用;必填(地图选点必带)。 + */ + @NotBlank(message = "详细地址不能为空") + @Size(max = 200, message = "详细地址长度不能超过200个字符") + private String address; + + /** + * 纬度坐标,地图选点时自动填入;String 避免浮点精度问题;必填。 + */ + @NotBlank(message = "纬度不能为空") + @Size(max = 20, message = "纬度长度不能超过20个字符") + private String latitude; + + /** + * 经度坐标,地图选点时自动填入;String 避免浮点精度问题;必填。 + */ + @NotBlank(message = "经度不能为空") + @Size(max = 20, message = "经度长度不能超过20个字符") + private String longitude; + + /** + * 作业场景图 file_id 列表,至少 1 张、最多 5 张。Service 层转为分号拼接字符串。 + */ + @NotNull(message = "场景图不能为空") + @Size(min = 1, max = 5, message = "场景图至少上传1张,最多5张") + private List sceneImageIds; + + /** + * 需求人数,默认 1;团队单/急单可大于 1。 + */ + @NotNull(message = "需求人数不能为空") + @Min(value = 1, message = "需求人数至少为1人") + @Max(value = 99, message = "需求人数最多99人") + private Integer requiredCount; + + /** + * 任务开始时间,精确到分钟。 + */ + @NotNull(message = "开始时间不能为空") + private LocalDateTime taskStartTime; + + /** + * 任务结束时间,必填(作业结束日期)。 + */ + @NotNull(message = "结束时间不能为空") + private LocalDateTime taskEndTime; + + /** + * 报酬(元),必填且必须大于 0。 + */ + @NotNull(message = "报酬不能为空") + @DecimalMin(value = "0.01", message = "报酬必须大于0") + private BigDecimal reward; + + /** + * 保险要求编码列表,Service 层转为分号拼接字符串。 + * 编码:1=三者险 2=飞手险 3=机身险。可空(无保险要求)。 + */ + private List insuranceRequireCodes; + + /** + * 联系人姓名,必填。 + */ + @NotBlank(message = "联系人姓名不能为空") + @Size(max = 50, message = "联系人姓名长度不能超过50个字符") + private String contactName; + + /** + * 联系电话,必填;中国大陆手机号正则校验。 + */ + @NotBlank(message = "联系电话不能为空") + @Size(max = 20, message = "联系电话长度不能超过20个字符") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入正确的手机号") + private String contactPhone; + + /** + * 备注/详细任务描述,选填。 + */ + @Size(max = 2000, message = "备注长度不能超过2000个字符") + private String remark; + + /** + * 是否优质任务,非必填,默认 false。优质任务消耗 4 积分,金色高亮展示。 + */ + private Boolean isPremium; +} diff --git a/src/main/java/com/haisen/laop/dto/TaskReviewDTO.java b/src/main/java/com/haisen/laop/dto/TaskReviewDTO.java new file mode 100644 index 0000000..136d060 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/TaskReviewDTO.java @@ -0,0 +1,33 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serializable; + +/** + * 商家审批任务申请请求体。 + * + *

同意时 reason 忽略;拒绝时 reason 可选填写(最多 200 字),不填时申请人端 + * 展示统一文案"商家已拒绝你的申请"。

+ * + * @author duhao + */ +@Data +public class TaskReviewDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 审批结果:true 同意接单 / false 拒绝。 + */ + @NotNull(message = "请指定审批结果") + private Boolean approve; + + /** + * 拒绝原因,仅拒绝时生效,可空。 + */ + @Size(max = 200, message = "拒绝原因最长200字") + private String reason; +} diff --git a/src/main/java/com/haisen/laop/dto/TrainingStoreDTO.java b/src/main/java/com/haisen/laop/dto/TrainingStoreDTO.java new file mode 100644 index 0000000..73aa298 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/TrainingStoreDTO.java @@ -0,0 +1,34 @@ +package com.haisen.laop.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 门店培训信息编辑 DTO,管理员通过 Web 端编辑门店介绍。 + * + * @author duhao + */ +@Data +public class TrainingStoreDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 门店名称。 */ + private String name; + + /** 门店地址。 */ + private String address; + + /** 联系人。 */ + private String contactName; + + /** 联系电话。 */ + private String contactPhone; + + /** 培训内容介绍。 */ + private String trainingContent; + + /** 封面图 file_id。 */ + private Long coverImage; +} diff --git a/src/main/java/com/haisen/laop/dto/UserProfileUpdateDTO.java b/src/main/java/com/haisen/laop/dto/UserProfileUpdateDTO.java new file mode 100644 index 0000000..4509dde --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/UserProfileUpdateDTO.java @@ -0,0 +1,43 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * 个人信息更新 DTO,承载小程序端"编辑个人资料"弹窗提交的头像与昵称。 + * + *

头像字段存储的是已上传至 OSS 的图片 URL(由前端先调 /api/file/upload 拿到 url, + * 再连同昵称一起提交);昵称走标准长度校验,避免超长脏数据。

+ * + *

注:同时标注 {@link Builder} 与 {@link NoArgsConstructor}+{@link AllArgsConstructor}, + * 既支持后端代码 {@code builder()} 链式构造,也支持 Jackson 反序列化 {@code @RequestBody} 时 + * 走无参构造 + setter 的标准路径。

+ * + * @author duhao + */ +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserProfileUpdateDTO { + + /** + * 头像 URL(OSS 直链),允许为空字符串表示清空头像。 + * 长度上限与 {@code user.avatar_url} 列保持一致。 + */ + @Size(max = 500, message = "头像URL长度不能超过500") + private String avatarUrl; + + /** + * 昵称,不可为空,长度 1~20。 + */ + @NotBlank(message = "昵称不能为空") + @Size(min = 1, max = 20, message = "昵称长度需在1~20之间") + private String nickname; +} diff --git a/src/main/java/com/haisen/laop/dto/UserQueryDTO.java b/src/main/java/com/haisen/laop/dto/UserQueryDTO.java new file mode 100644 index 0000000..8af9860 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/UserQueryDTO.java @@ -0,0 +1,35 @@ +package com.haisen.laop.dto; + +import com.haisen.laop.common.constants.UserConstants; +import lombok.Data; + +import java.io.Serializable; + +/** + * 用户列表查询 DTO,对应 Web 管理端用户管理列表的筛选条件(GET 参数自动绑定)。 + * + *

全部字段可选:不传即查全量;{@code pageNo} 从 0 开始(与小程序端分页约定一致), + * 前端页码由 api 层负责换算。

+ * + * @author duhao + */ +@Data +public class UserQueryDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 关键词,同时模糊匹配昵称与手机号(LIKE %keyword%)。 + */ + private String keyword; + + /** + * 页码,从 0 开始,默认 0。 + */ + private Integer pageNo = 0; + + /** + * 每页条数,默认 10,上限 {@link UserConstants#MAX_PAGE_SIZE}。 + */ + private Integer pageSize = UserConstants.DEFAULT_PAGE_SIZE; +} diff --git a/src/main/java/com/haisen/laop/dto/WxLoginDTO.java b/src/main/java/com/haisen/laop/dto/WxLoginDTO.java new file mode 100644 index 0000000..078853f --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/WxLoginDTO.java @@ -0,0 +1,34 @@ +package com.haisen.laop.dto; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +/** + * 微信小程序登录请求 DTO。 + * + *

小程序前端调 {@code wx.login()} 拿到 code,提交给后端换 openid, + * 后端查/建用户后返回 token(当前阶段 token 即为 userId)。

+ * + * @author duhao + */ +@Getter +@Setter +public class WxLoginDTO { + + /** + * wx.login() 返回的临时登录凭证,有效期 5 分钟。 + */ + @NotBlank(message = "code 不能为空") + private String code; + + /** + * 邀请人用户ID(可选),扫码推广码进入时携带(scene 中的 i={推广人userId})。 + * + *

仅新用户首次注册时生效:给推广人账户加 4 积分并写入积分明细; + * 老用户登录即使携带也忽略,防止刷分。

+ */ + @Min(value = 1, message = "邀请人ID不合法") + private Long inviteUserId; +} diff --git a/src/main/java/com/haisen/laop/dto/WxNotifyTaskDTO.java b/src/main/java/com/haisen/laop/dto/WxNotifyTaskDTO.java new file mode 100644 index 0000000..3eec9b1 --- /dev/null +++ b/src/main/java/com/haisen/laop/dto/WxNotifyTaskDTO.java @@ -0,0 +1,29 @@ +package com.haisen.laop.dto; + +/** + * 微信模板消息发送任务快照(队列载体),承载任务动态类通知(申请/审核/撤销)的通用字段。 + * + *

业务事件事务提交后由事件监听器组装并投入 {@code WxNotifyService} 内存队列; + * 消费者线程取出后按 bizType 选择模板渲染并提交微信。快照在入队前完成数据拼装, + * 消费侧不回查业务表,天然规避"事务未提交读到脏数据"与"业务数据后续变更"问题。

+ * + * @param userId 接收人用户 ID(申请/撤销通知 → 商家;审核通知 → 飞手) + * @param bizType 业务类型,见 {@link com.haisen.laop.common.constants.WxMessageConstants} + * @param bizId 业务单据 ID(任务动态通知为 taskRecord.id) + * @param taskNo 任务编号(模板 character_string14) + * @param taskName 任务名称(模板 thing5) + * @param serviceTypeName 服务类型名称,如"植保"(模板 thing12) + * @param handler 处理人文案:飞手认证姓名 + 电话(模板 thing17) + * @param operateTime 操作时间,格式 yyyy-MM-dd HH:mm(模板 time18) + * @author duhao + */ +public record WxNotifyTaskDTO( + Long userId, + Integer bizType, + Long bizId, + String taskNo, + String taskName, + String serviceTypeName, + String handler, + String operateTime) { +} diff --git a/src/main/java/com/haisen/laop/entity/Announcement.java b/src/main/java/com/haisen/laop/entity/Announcement.java new file mode 100644 index 0000000..bb95021 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Announcement.java @@ -0,0 +1,58 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDateTime; + +/** + * 公告表,承载首页"最新政策/新闻"公告条数据。 + * + *

由运营后台维护,小程序端只读;按 {@code createdAt} 倒序、{@code status} 过滤展示, + * 且仅在生效窗口期({@code validStartTime}≤当前≤{@code validEndTime},空值视为不限制)内可见。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "announcement") +public class Announcement extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 公告标题,首页公告条展示文本。 + */ + @Column(name = "title", nullable = false, length = 100) + private String title; + + /** + * 公告正文,点击公告条进入详情页展示。 + */ + @Column(name = "content", columnDefinition = "text") + private String content; + + /** + * 生效开始时间,与 {@code validEndTime} 共同决定窗口期展示。 + */ + @Column(name = "valid_start_time") + private LocalDateTime validStartTime; + + /** + * 生效结束时间。 + */ + @Column(name = "valid_end_time") + private LocalDateTime validEndTime; + + /** + * 展示状态:0隐藏 1显示。 + */ + @Column(name = "status", nullable = false) + private Integer status; + +} diff --git a/src/main/java/com/haisen/laop/entity/AppBanner.java b/src/main/java/com/haisen/laop/entity/AppBanner.java new file mode 100644 index 0000000..c638aa3 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/AppBanner.java @@ -0,0 +1,57 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * 首页轮播图实体,承载小程序首页轮播 Banner 的运营配置。 + * + *

由 Web 管理端维护(上传图片、设置跳转、排序、启停);小程序端只读, + * 按 {@code sortOrder} 升序、{@code status = 1} 过滤展示。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "app_banner") +public class AppBanner extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 轮播图图片 file_id,关联 {@code sys_file.id}。 + */ + @Column(name = "image_file_id") + private Long imageFileId; + + /** + * 跳转类型:caac/performance/merchant/pilot/course/custom。 + */ + @Column(name = "link_type", length = 32) + private String linkType; + + /** + * 自定义跳转链接,当 {@code linkType = custom} 时使用。 + */ + @Column(name = "link_url", length = 500) + private String linkUrl; + + /** + * 排序值,升序,值越小越靠前。 + */ + @Column(name = "sort_order", nullable = false) + private Integer sortOrder; + + /** + * 展示状态:0隐藏 1显示。 + */ + @Column(name = "status", nullable = false) + private Integer status; + +} diff --git a/src/main/java/com/haisen/laop/entity/AppConfig.java b/src/main/java/com/haisen/laop/entity/AppConfig.java new file mode 100644 index 0000000..a151d6f --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/AppConfig.java @@ -0,0 +1,78 @@ +package com.haisen.laop.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 平台功能配置实体,承载"功能开关 / 参数"等 KV 形式的运营配置。 + * + *

设计说明: + *

    + *
  • 主键为配置键字符串(config_key),而非自增 ID; + *
  • 值统一以 {@code String} 存储,使用时由调用方做类型转换(如布尔开关 '0'/'1'); + *
  • 本表为纯 KV,不继承 AbstractBaseEntity(没有 id 也没有软删除需求)。
  • + *
+ * + *

当前已落地的配置项: + * + * + * + * + * + *
config_key含义取值
mp_push_enabled微信公众号模板消息推送总开关'0'关闭 / '1'开启
points_publish_award发布任务获取积分数量非负整数,'0'表示不奖励,默认 '1'
points_premium_deduct发布任务扣减积分数量(优质任务)非负整数,'0'表示不扣减,默认 '4'
+ * 新增配置项请同步在 V*__*.sql 中 INSERT ON CONFLICT DO NOTHING。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "app_config") +public class AppConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 配置键,唯一标识。 + */ + @Id + @Column(name = "config_key", length = 64) + private String configKey; + + /** + * 配置值(字符串形式,布尔开关用 '0'/'1')。 + */ + @Column(name = "config_value", nullable = false, length = 1000) + private String configValue; + + /** + * 备注说明。 + */ + @Column(name = "remark", length = 200) + private String remark; + + /** + * 创建时间。 + */ + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; + + /** + * 最后更新时间。 + */ + @Column(name = "updated_at", nullable = false) + private LocalDateTime updatedAt; + + /** + * 最后修改人标识(可选)。 + */ + @Column(name = "updated_by", length = 64) + private String updatedBy; +} diff --git a/src/main/java/com/haisen/laop/entity/Course.java b/src/main/java/com/haisen/laop/entity/Course.java new file mode 100644 index 0000000..17c1256 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Course.java @@ -0,0 +1,151 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.math.BigDecimal; + +/** + * 课程表,承载"研学与课程"Tab 展示的全部课程信息。 + * + *

课程由认证商家发布,关联 {@link Merchant};用户在课程详情页"立即预约"后 + * 落库为 {@link CourseAppointment}。

+ * + *

多选字段规约:{@code tags}、{@code images} 均以 {@code String} 存储, + * 多值之间以英文分号 {@code ;} 拼接(如 {@code "1;2;3"}),值为数字编码(关联字典/文件ID), + * 便于 SQL 简单模糊匹配与程序侧 split。

+ * + *

经纬度规约:{@code latitude}/{@code longitude} 统一存为 {@code String}, + * 避免浮点精度问题,前端直接展示。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "course") +public class Course extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 课程名称。 + */ + @Column(name = "name", nullable = false, length = 100) + private String name; + + /** + * 标签编码,多选用分号拼接,如:{@code "1;2"}(1=认知启蒙,2=青少年)。 + */ + @Column(name = "tags", length = 200) + private String tags; + + /** + * 分类编码:1认知启蒙 2技能进阶 3创新应用 4竞赛辅导,索引字段。 + */ + @Column(name = "category") + private Integer category; + + /** + * 适合年龄描述,如:"青少年、初中生、高中生"。 + */ + @Column(name = "target_age", length = 200) + private String targetAge; + + /** + * 上课地点。 + */ + @Column(name = "location", length = 200) + private String location; + + /** + * 纬度,String 存储避免浮点精度损失。 + */ + @Column(name = "latitude", length = 20) + private String latitude; + + /** + * 经度,String 存储避免浮点精度损失。 + */ + @Column(name = "longitude", length = 20) + private String longitude; + + /** + * 课程描述。 + */ + @Column(name = "description", columnDefinition = "text") + private String description; + + /** + * 课程图片 file_id 数组,多选用分号拼接,如:{@code "101;102;103"}。 + */ + @Column(name = "images", length = 500) + private String images; + + /** + * 课程价格(元),列表页展示。 + */ + @Column(name = "price", nullable = false, precision = 10, scale = 2) + private BigDecimal price; + + /** + * 所属商家ID,关联 merchant.id。 + */ + @Column(name = "merchant_id") + private Long merchantId; + + /** + * 排课方式:1每周重复(每周固定星期几上课)2日期排课(指定具体日期上课)。 + */ + @Column(name = "schedule_type", nullable = false) + private Integer scheduleType; + + /** + * 每周上课星期编码串,分号拼接(1=周一 ... 7=周日),如 {@code "1;3;5"}。 + * 仅 {@code scheduleType = 1}(每周重复)时有值。 + */ + @Column(name = "schedule_week_days", length = 20) + private String scheduleWeekDays; + + /** + * 排课日期串,分号拼接(yyyy-MM-dd),如 {@code "2026-09-10;2026-09-12"}。 + * 仅 {@code scheduleType = 2}(日期排课)时有值。 + */ + @Column(name = "schedule_dates", length = 500) + private String scheduleDates; + + /** + * 课程宣传图片文件ID,关联 sys_file.id;课程卡片与详情头图。 + */ + @Column(name = "cover_image_id") + private Long coverImageId; + + /** + * 课程咨询联系人姓名。 + */ + @Column(name = "contact_name", length = 50) + private String contactName; + + /** + * 课程咨询联系电话。 + */ + @Column(name = "contact_phone", length = 20) + private String contactPhone; + + /** + * 状态:0下架 1上架 2已满员。 + */ + @Column(name = "status", nullable = false) + private Integer status; + + /** + * 精选标记:0否 1是。开启后在小程序首页"精选研学课程"区块展示, + * 与 course.status = 1 联合生效(精选但已下架的课程不展示)。 + */ + @Column(name = "featured", nullable = false) + private Integer featured; +} diff --git a/src/main/java/com/haisen/laop/entity/CourseAppointment.java b/src/main/java/com/haisen/laop/entity/CourseAppointment.java new file mode 100644 index 0000000..03b37aa --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/CourseAppointment.java @@ -0,0 +1,91 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 课程预约表,承载用户在课程详情页"立即预约"提交的预约信息。 + * + *

唯一约束由 Flyway 迁移 V19 重建的部分唯一索引 + * {@code uk_course_appointment_active (user_id, course_id, appointment_date) + * WHERE status != 2 AND deleted_at IS NULL}(2 = AppointmentStatusEnum.CANCELLED)保障, + * 防止同一用户对同一课程同一时段重复提交有效预约;取消后允许重新预约。 + * DDL 不通过 JPA 注解维护,故此处不声明 {@code @UniqueConstraint}。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "course_appointment") +public class CourseAppointment extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID,关联 user.id。 + */ + @Column(name = "user_id", nullable = false) + private Long userId; + + /** + * 课程ID,关联 course.id。 + */ + @Column(name = "course_id", nullable = false) + private Long courseId; + + /** + * 商家ID,关联 merchant.id;冗余字段,方便商家后台查询。 + */ + @Column(name = "merchant_id") + private Long merchantId; + + /** + * 预约时间(具体上课场次),用户在预约表单选择。 + */ + @Column(name = "appointment_date", nullable = false) + private LocalDateTime appointmentDate; + + /** + * 预约人数,默认 1;多人团购可大于 1。 + */ + @Column(name = "person_count", nullable = false) + private Integer personCount; + + /** + * 联系人姓名。 + */ + @Column(name = "contact_name", length = 50) + private String contactName; + + /** + * 联系人电话,商家确认/沟通用。 + */ + @Column(name = "contact_phone", length = 20) + private String contactPhone; + + /** + * 备注,用户填写特殊需求。 + */ + @Column(name = "remark", length = 200) + private String remark; + + /** + * 状态:1已预约(用户提交即生效) 2已取消(终态,用户可自助取消)。 + */ + @Column(name = "status", nullable = false) + private Integer status; + + /** + * 支付金额 + */ + @Column(name = "amount", nullable = false, precision = 10, scale = 2) + private BigDecimal amount; +} diff --git a/src/main/java/com/haisen/laop/entity/ExamBank.java b/src/main/java/com/haisen/laop/entity/ExamBank.java new file mode 100644 index 0000000..bacb1de --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/ExamBank.java @@ -0,0 +1,55 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * 题库表,承载 CAAC 备考刷题的题库元信息。 + * + *

题库下挂多道 {@link ExamQuestion},用户进入题库后按顺序刷题、收藏错题。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "exam_bank") +public class ExamBank extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 题库名称。 + */ + @Column(name = "name", nullable = false, length = 100) + private String name; + + /** + * 封面图 file_id。 + */ + @Column(name = "cover_image") + private Long coverImage; + + /** + * 题库描述,列表页展示。 + */ + @Column(name = "description", columnDefinition = "text") + private String description; + + /** + * 难度:1简单 2中等 3困难。 + */ + @Column(name = "difficulty", nullable = false) + private Integer difficulty; + + /** + * 状态:0禁用 1启用。 + */ + @Column(name = "status", nullable = false) + private Integer status; +} diff --git a/src/main/java/com/haisen/laop/entity/ExamQuestion.java b/src/main/java/com/haisen/laop/entity/ExamQuestion.java new file mode 100644 index 0000000..47c6125 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/ExamQuestion.java @@ -0,0 +1,92 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.util.List; +import java.util.Map; + +/** + * 习题表,承载题库下每道题目的题干、选项、答案、解析。 + * + *

{@code options} 以 {@code jsonb} 存储为 {@code List}, + * 结构约定为:{@code [{"key":"A","val":"..."},{"key":"B","val":"..."}]}, + * 兼容单选/多选/判断三种题型。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "exam_question") +public class ExamQuestion extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 所属题库ID,关联 exam_bank.id。 + */ + @Column(name = "bank_id", nullable = false) + private Long bankId; + + /** + * 题目内容,支持富文本。 + */ + @Column(name = "content", nullable = false, columnDefinition = "text") + private String content; + + /** + * 选项数组:[{"key":"A","val":"..."}]。 + */ + @JdbcTypeCode(SqlTypes.JSON) + @Column(name = "options", columnDefinition = "jsonb") + private List> options; + + /** + * 题型:1单选 2多选 3判断。 + */ + @Column(name = "question_type", nullable = false) + private Integer questionType; + + /** + * 标准答案,单选用 "A",多选用 "AB",判断用 "T"/"F"。 + */ + @Column(name = "answer", nullable = false, length = 10) + private String answer; + + /** + * 答案解析,错题回看展示。 + */ + @Column(name = "explanation", columnDefinition = "text") + private String explanation; + + /** + * 难度:1简单 2中等 3困难。 + */ + @Column(name = "difficulty", nullable = false) + private Integer difficulty; + + /** + * 分值,单选/多选默认 5 分。 + */ + @Column(name = "score", nullable = false) + private Integer score; + + /** + * 排序,越小越靠前。 + */ + @Column(name = "sort_order", nullable = false) + private Integer sortOrder; + + /** + * 被使用次数,记录被纳入练习卷的次数,用于热门题统计。 + */ + @Column(name = "used_count", nullable = false) + private Integer usedCount; +} diff --git a/src/main/java/com/haisen/laop/entity/Merchant.java b/src/main/java/com/haisen/laop/entity/Merchant.java new file mode 100644 index 0000000..26a1699 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Merchant.java @@ -0,0 +1,112 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDateTime; + +/** + * 商家表,承载通过认证的商家/机构/服务商信息。 + * + *

与 {@link User} 是一对一关系(user_id 唯一);商家在通过认证后才能在任务中心发布任务、 + * 上架课程、接受研学预约。

+ * + *

多选字段规约:{@code serviceTypes} 以 {@code String} 存储,多值之间以分号 {@code ;} + * 拼接(如 {@code "1;2;3"}),值为服务类型数字编码(关联字典),便于 SQL 模糊匹配。

+ * + *

经纬度规约:{@code latitude}/{@code longitude} 统一存为 {@code String}。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "merchant") +public class Merchant extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 关联用户ID,与 user.id 一一对应。 + */ + @Column(name = "user_id", nullable = false, unique = true) + private Long userId; + + /** + * 商家名称,对外展示,认证时校验与营业执照一致。 + */ + @Column(name = "name", nullable = false, length = 100) + private String name; + + /** + * 商家地址。 + */ + @Column(name = "address", length = 200) + private String address; + + /** + * 门头照片 file_id,关联 sys_file.id。 + */ + @Column(name = "door_image") + private Long doorImage; + + /** + * 营业执照 file_id,认证审核核心材料。 + */ + @Column(name = "license_file_id") + private Long licenseFileId; + + /** + * 联系人姓名。 + */ + @Column(name = "contact_name", length = 50) + private String contactName; + + /** + * 联系电话。 + */ + @Column(name = "contact_phone", length = 20) + private String contactPhone; + + /** + * 纬度,String 存储避免浮点精度损失。 + */ + @Column(name = "latitude", length = 20) + private String latitude; + + /** + * 经度,String 存储避免浮点精度损失。 + */ + @Column(name = "longitude", length = 20) + private String longitude; + + /** + * 服务类型编码,多选用分号拼接,如:{@code "1;2;3"}(1=植保,2=航拍,3=巡检)。 + */ + @Column(name = "service_types", length = 200) + private String serviceTypes; + + /** + * 商家简介,详情页展示。 + */ + @Column(name = "description", columnDefinition = "text") + private String description; + + /** + * 认证状态:0未认证 1认证中 2已认证 3认证失败。 + * + *

未认证或认证中/失败时,发布任务、上架课程将被阻断。

+ */ + @Column(name = "cert_status", nullable = false) + private Integer certStatus; + + /** + * 认证通过时间,作为 1 年有效期起算点。 + */ + @Column(name = "cert_time") + private LocalDateTime certTime; +} diff --git a/src/main/java/com/haisen/laop/entity/Pilot.java b/src/main/java/com/haisen/laop/entity/Pilot.java new file mode 100644 index 0000000..bb888ea --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Pilot.java @@ -0,0 +1,102 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 飞手表,承载持证飞手的实名信息、执照资质、服务范围。 + * + *

与 {@link User} 是一对一关系(user_id 唯一);飞手通过认证后才能在任务中心抢单、 + * 进入"本地飞手"列表。

+ * + *

LBS 规约:{@code serviceCityCodes} 直接录入省市区编码 code(关联 {@link Region} 表), + * 多选用分号 {@code ;} 拼接(如 {@code "310000;110000"}),便于 SQL 简单 IN/LIKE 筛选。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "pilot") +public class Pilot extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 关联用户ID,与 user.id 一一对应。 + */ + @Column(name = "user_id", nullable = false, unique = true) + private Long userId; + + /** + * 姓名(实名)。 + */ + @Column(name = "name", nullable = false, length = 50) + private String name; + + /** + * 手机号。 + */ + @Column(name = "phone", nullable = false, length = 20) + private String phone; + + /** + * 出生年月,由身份证号解析或手动填写。 + */ + @Column(name = "birthday") + private LocalDate birthday; + + /** + * 年龄,由 birthday 自动计算(写入时由 Service 层计算后落库)。 + */ + @Column(name = "age") + private Integer age; + + /** + * 头像 file_id。 + */ + @Column(name = "avatar_file_id") + private Long avatarFileId; + + /** + * 认证状态:0未认证 1认证中 2已认证 3认证失败。 + */ + @Column(name = "cert_status", nullable = false) + private Integer certStatus; + + /** + * 认证通过时间,作为 1 年有效期起算点。 + */ + @Column(name = "cert_time") + private LocalDateTime certTime; + + /** + * 服务城市编码,多选用分号拼接,如:{@code "310000;110000"}(上海;北京)。 + * + *

编码关联 {@link Region#code},用于"本地飞手"LBS 过滤与 SQL 筛选。

+ */ + @Column(name = "service_city_codes", length = 500) + private String serviceCityCodes; + + /** + * 服务类型编码,多选用分号拼接,如:{@code "1;3;5"}(1植保 3航拍 5清洗)。 + * + *

编码与任务类型一致:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘, + * 飞手认证时选填,用于"本地飞手"详情展示与能力画像。

+ */ + @Column(name = "service_types", length = 200) + private String serviceTypes; + + /** + * 个人简介,飞手详情页展示。 + */ + @Column(name = "bio", length = 200) + private String bio; +} diff --git a/src/main/java/com/haisen/laop/entity/PilotLicense.java b/src/main/java/com/haisen/laop/entity/PilotLicense.java new file mode 100644 index 0000000..33ab240 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/PilotLicense.java @@ -0,0 +1,67 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +/** + * 飞手执照实体——独立表替代 pilot 表 4 个分号拼接字段。 + * + *

遵循 AGENTS.md §2.4"一对多分步批量查"规约:Pilot 实体不挂 {@code @OneToMany} 集合, + * 查询时通过 {@link com.haisen.laop.repository.PilotLicenseRepository} 按 pilot_id 单独查。 + * PilotLicense 侧保留 {@code @ManyToOne Pilot pilot} 仅用于写入时便捷设置关联。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "pilot_license") +public class PilotLicense extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 关联飞手,反向由 {@link Pilot#getLicenses()} 持有集合。 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "pilot_id", nullable = false) + private Pilot pilot; + + /** + * CAAC 执照类型编码:1 AOPA 2 UTC 3 ASFC 4 CAAC。 + */ + @Column(name = "license_type", nullable = false) + private Integer licenseType; + + /** + * CAAC 执照编号,提交认证时与 CAAC 接口核验真伪。 + */ + @Column(name = "license_no", length = 50) + private String licenseNo; + + /** + * 执照照片 file_id(sys_file.id),认证审核核心材料。 + */ + @Column(name = "license_file_id") + private Long licenseFileId; + + /** + * 执照获证日期,格式固定为 yyyy-MM-dd(如 "2023-06-15")。 + */ + @Column(name = "license_date", length = 10) + private String licenseDate; +} diff --git a/src/main/java/com/haisen/laop/entity/PointsDetail.java b/src/main/java/com/haisen/laop/entity/PointsDetail.java new file mode 100644 index 0000000..edb76d2 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/PointsDetail.java @@ -0,0 +1,69 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractBaseEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * 积分明细表,记录用户每笔积分增扣流水,是"我的-积分明细"列表的数据来源。 + * + *

设计说明:流水只增不改(无 updated_at,继承 {@link AbstractBaseEntity}), + * 每一笔收入/支出都独立成行,{@code points} 存带符号变动值(收入为正、支出为负), + * 余额以 {@code user.points} 为准,二者在同一事务内同步变更。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "points_detail") +public class PointsDetail extends AbstractBaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID,关联 user.id。 + */ + @Column(name = "user_id", nullable = false) + private Long userId; + + /** + * 变动方向:1收入 2支出。 + */ + @Column(name = "change_type", nullable = false) + private Integer changeType; + + /** + * 事件类型编码:1发布任务 2完成任务 3邀请好友注册 4发布优质任务 5手动新增 6手动扣减。 + */ + @Column(name = "event_type", nullable = false) + private Integer eventType; + + /** + * 积分变动值,收入为正、支出为负(如 +1、-4)。 + */ + @Column(name = "points", nullable = false) + private Integer points; + + /** + * 关联业务ID(任务ID/被邀请用户ID等),用于流水溯源。 + */ + @Column(name = "related_id") + private Long relatedId; + + /** + * 备注说明,补充事件上下文(如关联任务名称)。 + */ + @Column(name = "remark", length = 200) + private String remark; +} diff --git a/src/main/java/com/haisen/laop/entity/Region.java b/src/main/java/com/haisen/laop/entity/Region.java new file mode 100644 index 0000000..9476d1c --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Region.java @@ -0,0 +1,62 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; + +/** + * 省市区表,承载中国行政区划三级数据(省/市/区县)。 + * + *

由 Flyway 启动时初始化预置数据(也可对接民政部区划接口定期同步)。 + * 业务侧所有涉及 LBS 的字段(如 {@link Pilot#getServiceCityCodes()})均以本表 {@code code} + * 为值存储,多选用分号 {@code ;} 拼接,查询时通过程序侧 split + IN 或 SQL 模糊匹配筛选。

+ * + *

设计说明:{@code code} 用 {@code String} 而非 {@code Integer},原因: + *

    + *
  • 行政区划编码是"编码"语义而非"数量",String 更符合直觉;
  • + *
  • 与 {@code Pilot.service_city_codes} 等业务字段类型一致,避免 SQL JOIN 类型转换;
  • + *
  • 兼容未来可能扩展的更长编码(如带国别前缀)。
  • + *
+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "region", + uniqueConstraints = {@UniqueConstraint( + name = "uk_region_code", + columnNames = {"code"})}) +public class Region extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 行政区划编码,6 位数字字符串(如 {@code "110000"} 北京市,{@code "310115"} 浦东新区)。 + */ + @Column(name = "code", nullable = false, length = 12, unique = true) + private String code; + + /** + * 区划名称,如:"北京市"、"上海市"、"浦东新区"。 + */ + @Column(name = "name", nullable = false, length = 50) + private String name; + + /** + * 级别:1省 2市 3区县。 + */ + @Column(name = "level", nullable = false) + private Integer level; + + /** + * 父级编码,省级为 NULL;通过 code 自关联形成三级树。 + */ + @Column(name = "parent_code", length = 12) + private String parentCode; +} diff --git a/src/main/java/com/haisen/laop/entity/SysFile.java b/src/main/java/com/haisen/laop/entity/SysFile.java new file mode 100644 index 0000000..0bcd052 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/SysFile.java @@ -0,0 +1,78 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractBaseEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * 系统文件表,承载用户/飞手/商家上传的所有文件元信息(图片、执照、视频等)。 + * + *

命名说明:PRD 中表名为 {@code file},因 {@code file} 在 Java 中与 + * {@link java.io.File} 命名冲突、且与 SQL 保留字接近,统一改名为 {@code sys_file}, + * 实体类相应命名为 {@link SysFile},符合阿里规约"禁用保留字"精神。

+ * + *

设计说明:文件表只增不改、不更新,因此没有 {@code updated_at} 字段, + * 直接继承 {@link AbstractBaseEntity} 而非 AuditableEntity。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "sys_file") +public class SysFile extends AbstractBaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 原始文件名,用户上传时的本地名称。 + */ + @Column(name = "file_name", nullable = false, length = 200) + private String fileName; + + /** + * 文件后缀,如:jpg、pdf。 + */ + @Column(name = "file_suffix", length = 10) + private String fileSuffix; + + /** + * 访问 URL,OSS 直链或 CDN 链接。 + */ + @Column(name = "file_url", length = 500) + private String fileUrl; + + /** + * 文件大小(字节),用于配额统计与前端展示。 + */ + @Column(name = "file_size") + private Long fileSize; + + /** + * 业务类型编码:1营业执照 2飞手执照 3作业场景图 4课程图片 5头像 9其他。 + */ + @Column(name = "file_type") + private Integer fileType; + + /** + * 上传用户ID,关联 user.id;用于配额与审计。 + */ + @Column(name = "uploader_id") + private Long uploaderId; + + /** + * 状态:0禁用 1正常;违规文件置为 0 后不可访问。 + */ + @Column(name = "status", nullable = false) + private Integer status; +} diff --git a/src/main/java/com/haisen/laop/entity/Task.java b/src/main/java/com/haisen/laop/entity/Task.java new file mode 100644 index 0000000..1dbb8c2 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/Task.java @@ -0,0 +1,176 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 任务表,承载商家发布的任务全量信息,是任务中心交易主战场的数据基础。 + * + *

任务由商家通过"发布任务"页创建,初始状态为草稿;提交后进入"待接单"状态, + * 飞手抢单后流转到"已接单 → 执行中 → 已完成",期间支持取消/申诉。

+ * + *

多选字段规约:{@code sceneImages}、{@code insuranceRequire} 均以 {@code String} + * 存储,多值之间以分号 {@code ;} 拼接(如 {@code "101;102"} 或 {@code "1;2;3"}), + * 值为数字编码(文件ID/保险类型编码),便于 SQL 模糊匹配与程序侧 split。

+ * + *

经纬度规约:{@code latitude}/{@code longitude} 统一存为 {@code String}, + * 避免浮点精度问题,前端直接展示。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "task") +public class Task extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 任务编号,全局唯一,对外展示用;生成规则建议:城市码+日期+流水号。 + */ + @Column(name = "task_no", nullable = false, length = 32, unique = true) + private String taskNo; + + /** + * 任务名称,列表与详情页标题。 + */ + @Column(name = "name", nullable = false, length = 100) + private String name; + + /** + * 任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘。 + */ + @Column(name = "type", nullable = false) + private Integer type; + + /** + * 省份,筛选项"所在地区"。 + */ + @Column(name = "province", length = 20) + private String province; + + /** + * 城市,筛选项"所在地区",索引字段。 + */ + @Column(name = "city", length = 20) + private String city; + + /** + * 区县。 + */ + @Column(name = "district", length = 20) + private String district; + + /** + * 详细地址。 + */ + @Column(name = "address", length = 200) + private String address; + + /** + * 纬度坐标,String 存储避免浮点精度损失,用于"附近"排序与地图标注。 + */ + @Column(name = "latitude", length = 20) + private String latitude; + + /** + * 经度坐标,String 存储避免浮点精度损失,用于"附近"排序与地图标注。 + */ + @Column(name = "longitude", length = 20) + private String longitude; + + /** + * 作业场景图 file_id 数组,多选用分号拼接,如:{@code "101;102;103"},详情页轮播展示。 + */ + @Column(name = "scene_images", length = 500) + private String sceneImages; + + /** + * 需求人数,默认 1;团队单/急单可大于 1。 + */ + @Column(name = "required_count", nullable = false) + private Integer requiredCount; + + /** + * 任务开始时间,筛选项"发布时间"以之外的业务时间窗。 + */ + @Column(name = "task_start_time", nullable = false) + private LocalDateTime taskStartTime; + + /** + * 任务结束时间,长单/长期合作任务可空(持续到商家主动结束)。 + */ + @Column(name = "task_end_time") + private LocalDateTime taskEndTime; + + /** + * 报酬(元),列表页左下大字号展示;优质任务用金色渲染。 + */ + @Column(name = "reward", nullable = false, precision = 10, scale = 2) + private BigDecimal reward; + + /** + * 保险要求编码,多选用分号拼接,如:{@code "1;2;3"}(1=三者险,2=飞手险,3=机身险); + * 抢单时校验飞手保险覆盖情况。 + */ + @Column(name = "insurance_require", length = 100) + private String insuranceRequire; + + /** + * 联系人姓名。 + */ + @Column(name = "contact_name", length = 50) + private String contactName; + + /** + * 联系电话,飞手接单后通过 IM 或电话沟通。 + */ + @Column(name = "contact_phone", nullable = false, length = 20) + private String contactPhone; + + /** + * 备注,详情页飞手可见。 + */ + @Column(name = "remark", columnDefinition = "text") + private String remark; + + /** + * 任务状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消。 + */ + @Column(name = "status", nullable = false) + private Integer status; + + /** + * 是否优质任务:0否 1是;优质任务在首页与列表首卡金色强化展示, + * 发布时消耗 4 积分(消耗记录见积分明细 points_detail,本表不再冗余存储)。 + */ + @Column(name = "is_premium", nullable = false) + private Integer isPremium; + + /** + * 发布人ID,关联 user.id;商家身份校验时反查 merchant.user_id。 + */ + @Column(name = "publisher_id", nullable = false) + private Long publisherId; + + /** + * 接单飞手ID,关联 pilot.id;状态变为"已接单"时写入。 + */ + @Column(name = "accepted_pilot_id") + private Long acceptedPilotId; + +} diff --git a/src/main/java/com/haisen/laop/entity/TaskRecord.java b/src/main/java/com/haisen/laop/entity/TaskRecord.java new file mode 100644 index 0000000..b4737b3 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/TaskRecord.java @@ -0,0 +1,136 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 任务申请记录表,承载"飞手申请接单 → 商家审批"的全过程。 + * + *

与 {@link Task} 关系:1 个任务可被多名飞手申请(1:N),商家从申请人中择优同意一人, + * 被同意者的记录进入已同意态(任务同步写入 accepted_pilot_id),其余申请由商家拒绝或自动关闭。

+ * + *

唯一约束 {@code (task_id, user_id)} 防止同一飞手对同一任务重复申请。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "task_record", + uniqueConstraints = {@UniqueConstraint( + name = "uk_task_record_task_user", + columnNames = {"task_id", "user_id"})}) +public class TaskRecord extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 任务ID,关联 task.id。 + */ + @Column(name = "task_id", nullable = false) + private Long taskId; + + /** + * 关联用户ID,记录"谁参与了此任务",可能是飞手或商家。 + */ + @Column(name = "user_id", nullable = false) + private Long userId; + + /** + * 接单飞手ID,关联 pilot.id;商家发起记录时可为 NULL。 + */ + @Column(name = "pilot_id") + private Long pilotId; + + /** + * 发单商家ID,关联 merchant.id;冗余字段避免再查 task 表。 + */ + @Column(name = "merchant_id") + private Long merchantId; + + /** + * 申请记录状态:1已申请(待商家确认) 2商家已同意(已接单) 3商家已拒绝 4飞手已撤销。 + */ + @Column(name = "status", nullable = false) + private Integer status; + + /** + * 飞手申请接单时间(同时作为模板消息"接收时间"字段的取值)。 + */ + @Column(name = "apply_time") + private LocalDateTime applyTime; + + /** + * 商家同意接单时间。 + */ + @Column(name = "accept_time") + private LocalDateTime acceptTime; + + /** + * 商家拒绝时间。 + */ + @Column(name = "reject_time") + private LocalDateTime rejectTime; + + /** + * 商家拒绝原因,商家审批拒绝时填写;同意其他飞手导致自动关闭时写入统一文案。 + */ + @Column(name = "reject_reason", length = 200) + private String rejectReason; + + /** + * 实际开始时间,状态变为"执行中"时写入。 + */ + @Column(name = "record_start_time") + private LocalDateTime recordStartTime; + + /** + * 实际结束时间(完成时间),状态变为"已完成"时写入。 + */ + @Column(name = "record_end_time") + private LocalDateTime recordEndTime; + + /** + * 取消时间,状态变为"已取消"时写入。 + */ + @Column(name = "cancel_time") + private LocalDateTime cancelTime; + + /** + * 取消原因,取消时由发起方填写;用于申诉与风控审计。 + */ + @Column(name = "cancel_reason", length = 200) + private String cancelReason; + + /** + * 保险是否校验:0否 1是;抢单前置校验,未通过则阻断。 + */ + @Column(name = "insurance_verified", nullable = false) + private Integer insuranceVerified; + + /** + * 实际报酬,结算时可能与 task.reward 不同(协商调价)。 + */ + @Column(name = "actual_reward", precision = 10, scale = 2) + private BigDecimal actualReward; + + /** + * 用户评分(1-5),任务完成后由对方打分。 + */ + @Column(name = "rating") + private Integer rating; + + /** + * 评价内容,与评分一起写入,用于飞手/商家主页展示。 + */ + @Column(name = "rating_comment", length = 200) + private String ratingComment; +} diff --git a/src/main/java/com/haisen/laop/entity/TrainingStore.java b/src/main/java/com/haisen/laop/entity/TrainingStore.java new file mode 100644 index 0000000..c18299b --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/TrainingStore.java @@ -0,0 +1,54 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +/** + * 门店培训信息表,承载 Web 管理端"培训考试 → 培训"tab 展示的门店介绍信息。 + * + *

设计说明:单条记录设计,管理员通过 Web 端编辑门店介绍, + * 查询时返回首条有效(未软删 + status=1)的记录。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "training_store") +public class TrainingStore extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** 门店名称。 */ + @Column(name = "name", nullable = false, length = 100) + private String name; + + /** 门店地址。 */ + @Column(name = "address", length = 200) + private String address; + + /** 联系人。 */ + @Column(name = "contact_name", length = 50) + private String contactName; + + /** 联系电话。 */ + @Column(name = "contact_phone", length = 20) + private String contactPhone; + + /** 培训内容介绍。 */ + @Column(name = "training_content", columnDefinition = "text") + private String trainingContent; + + /** 封面图 file_id(sys_file.id)。 */ + @Column(name = "cover_image") + private Long coverImage; + + /** 状态:0禁用 1启用。 */ + @Column(name = "status", nullable = false) + private Integer status; +} diff --git a/src/main/java/com/haisen/laop/entity/User.java b/src/main/java/com/haisen/laop/entity/User.java new file mode 100644 index 0000000..c89f12d --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/User.java @@ -0,0 +1,133 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDateTime; + +/** + * 用户表,承载微信小程序登录后沉淀的核心用户信息。 + * + *

设计上单用户最多绑定一个飞手身份、一个商家身份; + * 通过 {@code roleType} 区分主身份,{@code isPilotBound/isMerchantBound} 标记绑定状态。

+ * + *

命名说明:表名 {@code user} 在 PostgreSQL 中是保留字,DDL 中以双引号 {@code "user"} + * 引用;此处 {@link Table#name()} 显式带双引号,确保 Hibernate 生成的 SQL 正确。

+ * + * @author duhao + */ +@Getter +@Setter +@Entity +@Table(name = "\"user\"") +public class User extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 微信 openId,登录后由 wx.code2session 换取,作为唯一登录态凭证。 + */ + @Column(name = "openid", nullable = false, length = 64, unique = true) + private String openid; + + /** + * 微信开放平台 unionId,同一开放平台主体下小程序/服务号身份关联键。 + * + *

小程序 code2session 返回时写入;服务号关注回调据此把服务号 openid 绑定到本用户。

+ */ + @Column(name = "unionid", length = 64) + private String unionid; + + /** + * 微信服务号 openId,服务号模板消息的接收地址。 + * + *

由服务号"关注"事件回调自动绑定(通过 unionId 匹配用户);NULL 表示未关注服务号, + * 发送模板消息时将跳过并记录原因。

+ */ + @Column(name = "mp_openid", length = 64) + private String mpOpenid; + + /** + * 用户昵称,来自微信授权或自定义。 + */ + @Column(name = "nickname", length = 50) + private String nickname; + + /** + * 头像 URL,来自微信授权或 OSS 直链。 + */ + @Column(name = "avatar_url", length = 500) + private String avatarUrl; + + /** + * 手机号,用户授权获取或手动填写,绑定后才能发布任务/认证。 + */ + @Column(name = "phone", length = 20) + private String phone; + + /** + * 性别:0未知 1男 2女。 + */ + @Column(name = "gender", nullable = false) + private Integer gender; + + /** + * 个人简介。 + */ + @Column(name = "bio", length = 200) + private String bio; + + /** + * 主角色类型:1普通用户 2飞手 3商家 4机构。 + * + *

同一用户可同时拥有飞手+商家身份,此字段仅标识当前主身份,便于运营分发。

+ */ + @Column(name = "role_type", nullable = false) + private Integer roleType; + + /** + * 积分余额,飞手推广拉新、优质任务消耗使用,可提现。 + */ + @Column(name = "points", nullable = false) + private Integer points; + + /** + * 是否已绑定飞手身份:0否 1是。 + */ + @Column(name = "is_pilot_bound", nullable = false) + private Integer isPilotBound; + + /** + * 是否已绑定商家身份:0否 1是。 + */ + @Column(name = "is_merchant_bound", nullable = false) + private Integer isMerchantBound; + + /** + * 关联飞手ID(pilot.id),未绑定时为 NULL。 + */ + @Column(name = "pilot_id") + private Long pilotId; + + /** + * 关联商家ID(merchant.id),未绑定时为 NULL。 + */ + @Column(name = "merchant_id") + private Long merchantId; + + /** + * 账号状态:0禁用 1正常。封禁用户无法登录和交易。 + */ + @Column(name = "status", nullable = false) + private Integer status; + + /** + * 最后登录时间,用于活跃度统计与冷启动用户唤醒。 + */ + @Column(name = "last_login_at") + private LocalDateTime lastLoginAt; +} diff --git a/src/main/java/com/haisen/laop/entity/WxMessageLog.java b/src/main/java/com/haisen/laop/entity/WxMessageLog.java new file mode 100644 index 0000000..a8c62e8 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/WxMessageLog.java @@ -0,0 +1,127 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDateTime; + +/** + * 微信服务号模板消息发送日志表,记录每一条模板消息从"提交微信"到"送达回调"的完整链路。 + * + *

写入时机:① 队列消费者提交发送后写入(send_status=已提交/送达失败 + msg_id); + * ② 微信服务器异步回调 TEMPLATESENDJOBFINISH 事件时按 msg_id 回写送达结果 + * (send_status=送达成功/送达失败 + result_status/result_time)。

+ * + *

消费方:Web 管理端"消息推送日志"页面按本表展示,用于排查商家未收到通知的问题 + * (未关注服务号 / 用户拒收 / 系统失败等均可追溯)。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "wx_message_log") +public class WxMessageLog extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** + * 关联的发送任务ID(wx_notify_task.id),从日志反查任务调度记录。 + */ + @Column(name = "task_id") + private Long taskId; + + /** + * 接收人用户ID(商家 user.id),用于按用户维度检索。 + */ + @Column(name = "user_id") + private Long userId; + + /** + * 业务类型编码:1任务申请通知,取值见 {@link com.haisen.laop.common.constants.WxMessageConstants}。 + */ + @Column(name = "biz_type", nullable = false) + private Integer bizType; + + /** + * 业务单据ID:任务申请通知为 task_record.id,便于从日志反查业务单。 + */ + @Column(name = "biz_id") + private Long bizId; + + /** + * 微信模板ID,发送时使用的模板。 + */ + @Column(name = "template_id", nullable = false, length = 64) + private String templateId; + + /** + * 接收人服务号 openid,发送目标。 + */ + @Column(name = "open_id", length = 64) + private String openId; + + /** + * 微信返回的消息ID,提交成功后返回;微信回调送达结果时以此字段关联更新本行。 + */ + @Column(name = "msg_id") + private Long msgId; + + /** + * 发送状态:0已跳过 1已提交 2送达成功 3送达失败。 + */ + @Column(name = "send_status", nullable = false) + private Integer sendStatus; + + /** + * 跳过原因:接收人未绑定服务号、微信配置缺失等,发送未执行时填写。 + */ + @Column(name = "skip_reason", length = 200) + private String skipReason; + + /** + * 错误码:提交失败时的微信 errcode,或送达失败的 Status 前缀。 + */ + @Column(name = "err_code", length = 32) + private String errCode; + + /** + * 错误信息:提交失败 errmsg 或送达失败详情。 + */ + @Column(name = "err_msg", length = 500) + private String errMsg; + + /** + * 微信回调送达结果原文(success / failed:user block / failed: system failed 等)。 + */ + @Column(name = "result_status", length = 64) + private String resultStatus; + + /** + * 模板参数 JSON 快照,记录实际下发的字段内容,便于排查模板展示问题。 + */ + @Column(name = "content", columnDefinition = "text") + private String content; + + /** + * 提交微信发送时间。 + */ + @Column(name = "send_time") + private LocalDateTime sendTime; + + /** + * 微信回调送达时间。 + */ + @Column(name = "result_time") + private LocalDateTime resultTime; +} diff --git a/src/main/java/com/haisen/laop/entity/WxNotifyTask.java b/src/main/java/com/haisen/laop/entity/WxNotifyTask.java new file mode 100644 index 0000000..f49dc47 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/WxNotifyTask.java @@ -0,0 +1,100 @@ +package com.haisen.laop.entity; + +import com.haisen.laop.entity.base.AbstractAuditableEntity; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import java.time.LocalDateTime; + +/** + * 微信模板消息发送任务表(DB 持久化队列,替代原内存队列)。 + * + *

生命周期:PENDING(0) → PROCESSING(1) → SUCCESS(2)/FAILED(3), + * 消费完成后软删除(deleted_at 置位)。失败时按 retry_count + next_retry_at + * 指数退避重试,超过上限置 FAILED。

+ * + *

消费机制:CAS 占位({@code UPDATE status=1 WHERE id=? AND status=0}), + * 多实例部署天然安全(无锁竞争),占位成功后执行发送,完成时更新状态并软删除。

+ * + *

与 wx_message_log 的关系:task 表管"调度"(待办/重试/僵尸回收), + * log 表管"发送结果审计"(提交/回调),通过 task_id 关联。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "wx_notify_task") +public class WxNotifyTask extends AbstractAuditableEntity { + + private static final long serialVersionUID = 1L; + + /** 接收人用户ID(申请/撤销通知 → 商家;审核通知 → 飞手) */ + @Column(name = "user_id", nullable = false) + private Long userId; + + /** 业务类型编码:1任务申请 2审核结果 3飞手撤销,取值见 WxMessageConstants */ + @Column(name = "biz_type", nullable = false) + private Integer bizType; + + /** 业务单据ID(任务动态通知为 task_record.id) */ + @Column(name = "biz_id") + private Long bizId; + + /** 任务编号(模板 character_string14) */ + @Column(name = "task_no", length = 64) + private String taskNo; + + /** 任务名称(模板 thing5) */ + @Column(name = "task_name", length = 128) + private String taskName; + + /** 服务类型名称,如"植保"(模板 thing12) */ + @Column(name = "service_type_name", length = 64) + private String serviceTypeName; + + /** 处理人文案:飞手认证姓名 + 电话(模板 thing17) */ + @Column(name = "handler", length = 128) + private String handler; + + /** 操作时间,格式 yyyy-MM-dd HH:mm(模板 time18) */ + @Column(name = "operate_time", length = 32) + private String operateTime; + + /** 使用的模板ID(消费时解析写入,PENDING 阶段为 NULL) */ + @Column(name = "template_id", length = 64) + private String templateId; + + /** 任务状态:0待处理 1处理中 2成功 3失败 */ + @Column(name = "status", nullable = false) + private Integer status; + + /** 已重试次数(0=首次,超过上限置 FAILED) */ + @Column(name = "retry_count", nullable = false) + private Integer retryCount; + + /** 下次重试时间(NULL=立即可处理) */ + @Column(name = "next_retry_at") + private LocalDateTime nextRetryAt; + + /** 跳过原因(未关注服务号等,不实际发送) */ + @Column(name = "skip_reason", length = 200) + private String skipReason; + + /** 最后一次失败的错误码 */ + @Column(name = "err_code", length = 32) + private String errCode; + + /** 最后一次失败的错误信息 */ + @Column(name = "err_msg", length = 500) + private String errMsg; +} diff --git a/src/main/java/com/haisen/laop/entity/base/AbstractAuditableEntity.java b/src/main/java/com/haisen/laop/entity/base/AbstractAuditableEntity.java new file mode 100644 index 0000000..81d43b4 --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/base/AbstractAuditableEntity.java @@ -0,0 +1,42 @@ +package com.haisen.laop.entity.base; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; + +/** + * 在 {@link AbstractBaseEntity} 基础上扩展 {@code updated_at} 字段,用于"创建后可修改" + * 的业务表(绝大多数业务表都属于此类)。 + * + *

{@code updatedAt} 由 PG 端 {@code set_updated_at()} 触发器自动维护, + * 此处仅做读取映射,禁止应用层显式写入,避免覆盖数据库真实时间。

+ * + *

Lombok 说明:继承链上统一使用 {@code @SuperBuilder} + + * {@code @NoArgsConstructor} + {@code @AllArgsConstructor}, + * 确保父类字段(id/createdAt/deletedAt)能被子类 builder 链式访问, + * 同时保留 JPA 要求的无参构造器。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@MappedSuperclass +public abstract class AbstractAuditableEntity extends AbstractBaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 更新时间,由数据库触发器维护,应用层不主动写入。 + */ + @Column(name = "updated_at", nullable = false, insertable = false, updatable = false) + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/haisen/laop/entity/base/AbstractBaseEntity.java b/src/main/java/com/haisen/laop/entity/base/AbstractBaseEntity.java new file mode 100644 index 0000000..43d31ac --- /dev/null +++ b/src/main/java/com/haisen/laop/entity/base/AbstractBaseEntity.java @@ -0,0 +1,61 @@ +package com.haisen.laop.entity.base; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.MappedSuperclass; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 所有 PO 实体的最小公共基类。 + * + *

包含主键、创建时间、软删除时间三个公共字段;不含 {@code updated_at}, + * 用于那些"创建后不修改"的表(如 sys_file)。

+ * + *

{@code id} 采用数据库 IDENTITY 策略,对应 PG 的 + * {@code BIGINT GENERATED BY DEFAULT AS IDENTITY};{@code createdAt} 由数据库 + * 默认值维护;{@code deletedAt} 为软删除标记,NULL 表示未删除。

+ * + *

Lombok 说明:基类使用 {@code @SuperBuilder} 而非 {@code @Builder}, + * 以便子类也能继承父类字段到自己的 builder 方法中。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@MappedSuperclass +public abstract class AbstractBaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键,数据库自增。 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + /** + * 创建时间,由数据库 DEFAULT CURRENT_TIMESTAMP 维护。 + */ + @Column(name = "created_at", nullable = false, updatable = false, insertable = false) + private LocalDateTime createdAt; + + /** + * 软删除时间,NULL 表示未删除。删除时由 Service 层显式写入。 + */ + @Column(name = "deleted_at") + private LocalDateTime deletedAt; +} diff --git a/src/main/java/com/haisen/laop/repository/AnnouncementRepository.java b/src/main/java/com/haisen/laop/repository/AnnouncementRepository.java new file mode 100644 index 0000000..d0a7da2 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/AnnouncementRepository.java @@ -0,0 +1,19 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Announcement; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +/** + * 公告表仓储接口,继承 JpaRepository 获得基础 CRUD 能力。 + * + *

列表分页与动态筛选通过 {@link JpaSpecificationExecutor} 在 Service 层拼装, + * 严禁将业务规则下沉到 Repository。

+ * + * @author duhao + */ +@Repository +public interface AnnouncementRepository extends JpaRepository, + JpaSpecificationExecutor { +} diff --git a/src/main/java/com/haisen/laop/repository/AppBannerRepository.java b/src/main/java/com/haisen/laop/repository/AppBannerRepository.java new file mode 100644 index 0000000..65ec6d4 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/AppBannerRepository.java @@ -0,0 +1,29 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.AppBanner; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 轮播图仓储接口,继承 JpaRepository 获得基础 CRUD 能力。 + * + *

小程序端展示查询通过派生方法名固定"未软删 + 指定状态"条件, + * 状态编码由 Service 层传入枚举值({@code BannerStatusEnum}), + * 避免业务规则与魔法值泄漏到 Repository。

+ * + * @author duhao + */ +@Repository +public interface AppBannerRepository extends JpaRepository, + JpaSpecificationExecutor { + + /** + * 查询指定状态且未软删的轮播图,按 sort_order 升序、id 升序排列。 + * + * @param status 展示状态编码(调用方传 {@code BannerStatusEnum.VISIBLE.getCode()}) + */ + List findByStatusAndDeletedAtIsNullOrderBySortOrderAscIdAsc(Integer status); +} diff --git a/src/main/java/com/haisen/laop/repository/AppConfigRepository.java b/src/main/java/com/haisen/laop/repository/AppConfigRepository.java new file mode 100644 index 0000000..d893497 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/AppConfigRepository.java @@ -0,0 +1,17 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.AppConfig; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +/** + * 功能配置 KV 仓储接口,主键为 config_key 字符串。 + * + *

由于主键非自增,save 时需确保 configKey 已赋值; + * Repository 层无业务逻辑,仅透传 JpaRepository CRUD。

+ * + * @author duhao + */ +@Repository +public interface AppConfigRepository extends JpaRepository { +} diff --git a/src/main/java/com/haisen/laop/repository/CourseAppointmentRepository.java b/src/main/java/com/haisen/laop/repository/CourseAppointmentRepository.java new file mode 100644 index 0000000..5b2ec41 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/CourseAppointmentRepository.java @@ -0,0 +1,53 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.CourseAppointment; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * 课程预约表仓储接口,提供基础 CRUD 与按用户/按课程分页查询能力。 + * + * @author duhao + */ +@Repository +public interface CourseAppointmentRepository extends JpaRepository { + + /** + * 按用户分页查询其课程预约,按创建时间倒序,用于小程序"我的预约"列表。 + */ + Page findByUserIdAndDeletedAtIsNullOrderByCreatedAtDesc(Long userId, Pageable pageable); + + /** + * 按课程分页查询预约名单,按创建时间倒序,用于 Web 管理端"预约名单"Tab。 + */ + Page findByCourseIdAndDeletedAtIsNullOrderByCreatedAtDesc(Long courseId, Pageable pageable); + + /** + * 取消预约前的归属校验:校验某条预约是否属于指定用户、且未软删。 + * + * @param id 预约 ID + * @param userId 归属用户 ID + * @return 存在且归属正确返回 Optional + */ + Optional findByIdAndUserIdAndDeletedAtIsNull(Long id, Long userId); + + /** + * 检查同一用户对同一课程同一时段是否存在"有效预约"(非已取消、未软删)。 + * + *

用于提交预约前的前置校验,提前拦截重复预约,避免直接命中 DB 唯一索引报错。 + * 与部分唯一索引 {@code uk_course_appointment_active} 的过滤条件保持一致。

+ * + * @param userId 用户 ID + * @param courseId 课程 ID + * @param appointmentDate 预约时间 + * @param cancelledStatus 已取消状态编码({@link com.haisen.laop.common.enums.AppointmentStatusEnum#CANCELLED}) + * @return 存在有效预约返回 true + */ + boolean existsByUserIdAndCourseIdAndAppointmentDateAndStatusNotAndDeletedAtIsNull( + Long userId, Long courseId, LocalDateTime appointmentDate, Integer cancelledStatus); +} diff --git a/src/main/java/com/haisen/laop/repository/CourseRepository.java b/src/main/java/com/haisen/laop/repository/CourseRepository.java new file mode 100644 index 0000000..c455524 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/CourseRepository.java @@ -0,0 +1,18 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Course; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +/** + * 课程表仓储接口,提供基础 CRUD 与动态条件分页查询能力。 + * + *

继承 {@link JpaSpecificationExecutor} 用于 Web 管理端课程列表的 + * 动态筛选(名称模糊、状态精确),与任务抢单大厅的查询策略保持一致。

+ * + * @author duhao + */ +@Repository +public interface CourseRepository extends JpaRepository, JpaSpecificationExecutor { +} diff --git a/src/main/java/com/haisen/laop/repository/ExamBankRepository.java b/src/main/java/com/haisen/laop/repository/ExamBankRepository.java new file mode 100644 index 0000000..c910c17 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/ExamBankRepository.java @@ -0,0 +1,19 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.ExamBank; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * 题库 Repository,仅负责数据库读写。 + * + * @author duhao + */ +public interface ExamBankRepository extends JpaRepository { + + /** + * 查询所有有效题库(未软删 + status=1),按 id 排序。 + */ + List findByStatusAndDeletedAtIsNullOrderByIdAsc(Integer status); +} diff --git a/src/main/java/com/haisen/laop/repository/ExamQuestionRepository.java b/src/main/java/com/haisen/laop/repository/ExamQuestionRepository.java new file mode 100644 index 0000000..55e7054 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/ExamQuestionRepository.java @@ -0,0 +1,77 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.ExamQuestion; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + * 习题 Repository,仅负责数据库读写。 + * + *

同时继承 {@link JpaSpecificationExecutor} 以支持 Web 管理端的多条件动态筛选。

+ */ +public interface ExamQuestionRepository extends JpaRepository, + JpaSpecificationExecutor { + + /** + * 分页查询指定题库下的有效题目(未软删),按 sort_order + id 排序。 + */ + Page findByBankIdAndDeletedAtIsNullOrderBySortOrderAscIdAsc(Long bankId, Pageable pageable); + + /** + * 统计指定题库下的有效题目数量。 + */ + long countByBankIdAndDeletedAtIsNull(Long bankId); + + /** + * 批量统计多个题库的有效题目数量,一次 GROUP BY 搞定,避免 N+1 查询。 + * + * @param bankIds 题库ID列表 + * @return [bank_id, question_count] 二维列表 + */ + @Query(value = "SELECT bank_id, COUNT(*) AS question_count FROM exam_question WHERE bank_id IN (:bankIds) AND deleted_at IS NULL GROUP BY bank_id", + nativeQuery = true) + List countByBankIdsAndDeletedAtIsNull(@Param("bankIds") List bankIds); + + /** + * 查询指定题库当前最大 sort_order,用于新增题目时自动顺延排序号。 + */ + @Query("SELECT COALESCE(MAX(q.sortOrder), 0) FROM ExamQuestion q WHERE q.bankId = :bankId AND q.deletedAt IS NULL") + int findMaxSortOrderByBankId(@Param("bankId") Long bankId); + + /** + * 按 题库ID + 题型 双维度聚合有效题目数量,一次性搞定,避免前端 N+1 查询。 + * + * @param bankIds 题库ID列表 + * @return [bank_id, question_type, question_count] 三维列表 + */ + @Query(value = "SELECT bank_id, question_type, COUNT(*) AS question_count " + + "FROM exam_question WHERE bank_id IN (:bankIds) AND deleted_at IS NULL " + + "GROUP BY bank_id, question_type", + nativeQuery = true) + List countByBankIdsGroupByQuestionType(@Param("bankIds") List bankIds); + + /** + * 模拟考试:按题库 + 题型随机抽取指定数量的题目。 + * + *

使用 PostgreSQL 的 {@code ORDER BY RANDOM() LIMIT :limit} 实现真随机; + * 若该题型可用题目数少于 limit,则返回全部可用题目。

+ * + * @param bankId 题库ID + * @param questionType 题型(1单选 2多选 3判断) + * @param limit 最多抽取数量 + * @return 随机抽取的题目列表 + */ + @Query(value = "SELECT * FROM exam_question " + + "WHERE bank_id = :bankId AND question_type = :questionType AND deleted_at IS NULL " + + "ORDER BY RANDOM() LIMIT :limit", + nativeQuery = true) + List randomSample(@Param("bankId") Long bankId, + @Param("questionType") int questionType, + @Param("limit") int limit); +} diff --git a/src/main/java/com/haisen/laop/repository/MerchantRepository.java b/src/main/java/com/haisen/laop/repository/MerchantRepository.java new file mode 100644 index 0000000..d0cba0f --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/MerchantRepository.java @@ -0,0 +1,89 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Merchant; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +/** + * 商家表仓储接口,提供基础 CRUD 与业务查询。 + * + *

列表排序策略:按发布任务数降序 + id 降序。由于 Merchant 实体不再缓存 orderCount + * 统计字段(AGENTS.md 规约),排序通过 native SQL JOIN {@code task} 表实时 COUNT 完成。

+ * + * @author duhao + */ +@Repository +public interface MerchantRepository extends JpaRepository { + + /** + * 统计未软删的商家总数。 + */ + long countByDeletedAtIsNull(); + + /** + * 按认证状态统计未软删的商家数量,用于驾驶舱"已认证商家"计数。 + */ + long countByCertStatusAndDeletedAtIsNull(Integer certStatus); + + /** + * 按用户ID查询绑定的商家记录,用于身份校验和认证状态检查。 + */ + Merchant findByUserIdAndDeletedAtIsNull(Long userId); + + /** + * 按主键查询未软删的商家记录。 + */ + Optional findByIdAndDeletedAtIsNull(Long id); + + /** + * 按用户ID集合批量查询未软删的商家记录,用于任务管理列表组装发布商家信息。 + * + * @param userIds 用户 ID 集合(对应 task.publisher_id) + * @return 匹配到的商家列表 + */ + List findByUserIdInAndDeletedAtIsNull(Collection userIds); + + /** + * 按认证状态查询全部有效商家,按"发布任务数降序 + id 降序"排序。 + * + *

task.publisher_id 关联 user.id,merchant.user_id 也是 user.id,故 JOIN 条件为 + * {@code t.publisher_id = m.user_id}。

+ */ + @Query(value = """ + SELECT m.* FROM merchant m + LEFT JOIN task t ON t.publisher_id = m.user_id AND t.deleted_at IS NULL + WHERE m.cert_status = :certStatus AND m.deleted_at IS NULL + GROUP BY m.id + ORDER BY COUNT(t.id) DESC, m.id DESC + """, nativeQuery = true) + Page findCertifiedOrderByTaskCountDesc(@Param("certStatus") Integer certStatus, Pageable pageable); + + /** + * 按认证状态 + 商家名称模糊查询有效商家,按"发布任务数降序 + id 降序"排序。 + * + *

名称匹配使用 ILIKE(PostgreSQL 不区分大小写模糊匹配),支持商家列表页搜索功能。 + * 当 name 为空时等价于 {@link #findCertifiedOrderByTaskCountDesc}。

+ * + * @param certStatus 认证状态 + * @param name 商家名称关键词(模糊匹配),为空时不做名称过滤 + */ + @Query(value = """ + SELECT m.* FROM merchant m + LEFT JOIN task t ON t.publisher_id = m.user_id AND t.deleted_at IS NULL + WHERE m.cert_status = :certStatus AND m.deleted_at IS NULL + AND (:name IS NULL OR m.name ILIKE '%' || :name || '%') + GROUP BY m.id + ORDER BY COUNT(t.id) DESC, m.id DESC + """, nativeQuery = true) + Page findCertifiedByNameOrderByTaskCountDesc(@Param("certStatus") Integer certStatus, + @Param("name") String name, + Pageable pageable); +} diff --git a/src/main/java/com/haisen/laop/repository/PilotLicenseRepository.java b/src/main/java/com/haisen/laop/repository/PilotLicenseRepository.java new file mode 100644 index 0000000..7804bb4 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/PilotLicenseRepository.java @@ -0,0 +1,25 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.PilotLicense; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * 飞手执照 Repository——独立一对多表,遵循"分步查"规约(不通过 Pilot.licenses 集合访问)。 + * + *

查询按 pilot_id 定位;写入时 Service 层先 DELETE 后 INSERT 实现覆盖更新。

+ * + * @author duhao + */ +public interface PilotLicenseRepository extends JpaRepository { + + /** 按飞手查询全部有效执照,按 id ASC 保持插入顺序。 */ + List findByPilotIdAndDeletedAtIsNullOrderByIdAsc(Long pilotId); + + /** 软删除某飞手的全部执照(覆盖更新前调用)。 */ + int deleteByPilotId(Long pilotId); + + /** 批量按飞手查询(列表页需要)。 */ + List findByPilotIdInAndDeletedAtIsNull(List pilotIds); +} diff --git a/src/main/java/com/haisen/laop/repository/PilotRepository.java b/src/main/java/com/haisen/laop/repository/PilotRepository.java new file mode 100644 index 0000000..f3543ac --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/PilotRepository.java @@ -0,0 +1,101 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Pilot; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +/** + * 飞手表仓储接口,提供基础 CRUD 与业务查询。 + * + *

列表排序策略:按完成任务数降序 + id 降序。由于 Pilot 实体不再缓存 orderCount + * 统计字段(AGENTS.md 规约),排序通过 native SQL JOIN {@code task} 表实时 COUNT 完成, + * 确保分页在 DB 层完成(不能查全量后内存排序)。

+ * + * @author duhao + */ +@Repository +public interface PilotRepository extends JpaRepository { + + /** + * 统计未软删的飞手总数。 + */ + long countByDeletedAtIsNull(); + + /** + * 按认证状态统计未软删的飞手数量,用于驾驶舱"已认证飞手"计数。 + */ + long countByCertStatusAndDeletedAtIsNull(Integer certStatus); + + /** + * 按用户ID查询绑定的飞手记录,用于认证状态检查与飞手身份校验。 + */ + Pilot findByUserIdAndDeletedAtIsNull(Long userId); + + /** + * 按主键查询未软删的飞手记录。 + */ + Optional findByIdAndDeletedAtIsNull(Long id); + + /** + * 按用户ID集合批量查询未软删的飞手记录,用于用户管理列表组装飞手认证状态。 + * + * @param userIds 用户 ID 集合 + * @return 匹配到的飞手列表 + */ + List findByUserIdInAndDeletedAtIsNull(Collection userIds); + + /** + * 按主键集合批量查询未软删的飞手记录,用于"已接单飞手"名称解析。 + * + *

{@code task.accepted_pilot_id} 存的是 {@code pilot.id}, + * 商家"我的任务"列表需要通过此方法批量拿到飞手姓名,避免逐条查库 N+1。

+ * + * @param ids 飞手主键集合 + * @return 匹配到的飞手列表 + */ + List findByIdInAndDeletedAtIsNull(Collection ids); + + /** + * 按认证状态查询全部有效飞手,按"完成任务数降序 + id 降序"排序。 + * + *

LEFT JOIN task + GROUP BY pilot.id + COUNT 实现实时统计排序, + * PG 中 GROUP BY 主键后 SELECT 任意列都是合法的。

+ */ + @Query(value = """ + SELECT p.* FROM pilot p + LEFT JOIN task t ON t.accepted_pilot_id = p.id AND t.deleted_at IS NULL + WHERE p.cert_status = :certStatus AND p.deleted_at IS NULL + GROUP BY p.id + ORDER BY COUNT(t.id) DESC, p.id DESC + """, nativeQuery = true) + Page findCertifiedOrderByTaskCountDesc(@Param("certStatus") Integer certStatus, Pageable pageable); + + /** + * 按认证状态 + 飞手名称模糊查询有效飞手,按"完成任务数降序 + id 降序"排序。 + * + *

名称匹配使用 ILIKE(PostgreSQL 不区分大小写模糊匹配),支持飞手列表页搜索功能。 + * 当 name 为空时等价于 {@link #findCertifiedOrderByTaskCountDesc}。

+ * + * @param certStatus 认证状态 + * @param name 飞手名称关键词(模糊匹配),为空时不做名称过滤 + */ + @Query(value = """ + SELECT p.* FROM pilot p + LEFT JOIN task t ON t.accepted_pilot_id = p.id AND t.deleted_at IS NULL + WHERE p.cert_status = :certStatus AND p.deleted_at IS NULL + AND (:name IS NULL OR p.name ILIKE '%' || :name || '%') + GROUP BY p.id + ORDER BY COUNT(t.id) DESC, p.id DESC + """, nativeQuery = true) + Page findCertifiedByNameOrderByTaskCountDesc(@Param("certStatus") Integer certStatus, + @Param("name") String name, + Pageable pageable); +} diff --git a/src/main/java/com/haisen/laop/repository/PointsDetailRepository.java b/src/main/java/com/haisen/laop/repository/PointsDetailRepository.java new file mode 100644 index 0000000..b28e0d1 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/PointsDetailRepository.java @@ -0,0 +1,36 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.PointsDetail; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +/** + * 积分明细表仓储接口,提供基础 CRUD。 + * + * @author duhao + */ +@Repository +public interface PointsDetailRepository extends JpaRepository { + + /** + * 按用户ID分页查询积分流水,按创建时间倒序,用于"积分明细"列表。 + */ + Page findByUserIdAndDeletedAtIsNullOrderByCreatedAtDesc(Long userId, Pageable pageable); + + /** + * 按用户ID累计已消耗积分(仅统计支出流水 points 取绝对值之和)。 + * + *

供"积分明细"页顶部"已消耗积分"展示。COALESCE 兜底 0, + * 避免新用户无流水时 SUM 返回 null。

+ */ + @Query(value = """ + SELECT COALESCE(SUM(CASE WHEN points < 0 THEN -points ELSE 0 END), 0) + FROM points_detail + WHERE user_id = :userId AND deleted_at IS NULL + """, nativeQuery = true) + Long sumConsumedPointsByUserId(@Param("userId") Long userId); +} diff --git a/src/main/java/com/haisen/laop/repository/RegionRepository.java b/src/main/java/com/haisen/laop/repository/RegionRepository.java new file mode 100644 index 0000000..b10a6e3 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/RegionRepository.java @@ -0,0 +1,36 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Region; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 省市区表仓储接口,提供行政区划数据查询能力。 + * + * @author duhao + */ +@Repository +public interface RegionRepository extends JpaRepository { + + /** + * 按级别查询全部有效的区划(省/市/区县)。 + */ + List findByLevelAndDeletedAtIsNullOrderByCodeAsc(Integer level); + + /** + * 按父级编码查询子区划(查某市下所有区县用)。 + */ + List findByParentCodeAndDeletedAtIsNullOrderByCodeAsc(String parentCode); + + /** + * 按编码查询单个区划。 + */ + Region findByCodeAndDeletedAtIsNull(String code); + + /** + * 批量按编码查询区划,用于 serviceCityCodes 拼接城市名称。 + */ + List findByCodeInAndDeletedAtIsNull(List codes); +} diff --git a/src/main/java/com/haisen/laop/repository/SysFileRepository.java b/src/main/java/com/haisen/laop/repository/SysFileRepository.java new file mode 100644 index 0000000..b14dc7a --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/SysFileRepository.java @@ -0,0 +1,25 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.SysFile; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; + +/** + * 文件表仓储接口,提供基础 CRUD。 + * + * @author duhao + */ +@Repository +public interface SysFileRepository extends JpaRepository { + + /** + * 根据文件ID集合批量查询,用于任务列表组装场景图 URL。 + * + * @param ids 文件 ID 集合 + * @return 匹配到的 SysFile 列表 + */ + List findAllByIdIn(Collection ids); +} diff --git a/src/main/java/com/haisen/laop/repository/TaskRecordRepository.java b/src/main/java/com/haisen/laop/repository/TaskRecordRepository.java new file mode 100644 index 0000000..f130847 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/TaskRecordRepository.java @@ -0,0 +1,169 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.TaskRecord; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +/** + * 任务申请记录仓储接口,提供申请-审批流的数据读写能力。 + * + *

仅承载 CRUD 与统计查询,业务规则(状态机校验、归属校验)由 Service 层实现。

+ * + * @author duhao + */ +@Repository +public interface TaskRecordRepository extends JpaRepository { + + /** + * 判断飞手是否已申请过某任务(含任意状态的历史申请),唯一约束的前置业务校验。 + */ + boolean existsByTaskIdAndUserIdAndDeletedAtIsNull(Long taskId, Long userId); + + /** + * 查询飞手在某任务下的申请记录((task_id, user_id) 唯一约束保证至多一条), + * 飞手撤销申请场景使用。 + */ + Optional findByTaskIdAndUserIdAndDeletedAtIsNull(Long taskId, Long userId); + + /** + * 按主键查询未软删的申请记录。 + */ + Optional findByIdAndDeletedAtIsNull(Long id); + + /** + * 查询任务的全部申请记录(按申请时间正序),商家审批列表使用。 + */ + List findByTaskIdAndDeletedAtIsNullOrderByApplyTimeAscIdAsc(Long taskId); + + /** + * 分页查询用户的全部申请记录(含待确认/已通过/已拒绝/已撤销),按 id 倒序(最新申请在前), + * 用于小程序"我的任务-已接单"列表:以申请记录为主线,抢单后即可见,无需等待商家确认。 + */ + Page findByUserIdAndDeletedAtIsNull(Long userId, Pageable pageable); + + /** + * 按用户 + 申请记录状态集合 + 关联任务状态集合分页查询,按 id 倒序。 + * 用于飞手"我的任务"三 tab 筛选: + *
    + *
  • 已接单:recordStatus IN (1,2) + task.status IN (1,2) —— 申请活跃且任务未开始
  • + *
  • 进行中:recordStatus = 2 + task.status = 3 —— 飞手已同意且任务执行中
  • + *
  • 已完成:recordStatus = 2 + task.status = 4 —— 飞手已同意且任务已完成
  • + *
+ * + * @param userId 当前用户 ID(飞手) + * @param recordStatuses 申请记录状态编码集合 + * @param taskStatuses 任务状态编码集合(子查询过滤关联任务) + * @param pageable 分页参数 + * @return 分页申请记录 + */ + @Query(""" + SELECT r FROM TaskRecord r + WHERE r.userId = :userId + AND r.deletedAt IS NULL + AND r.status IN :recordStatuses + AND r.taskId IN ( + SELECT t.id FROM Task t + WHERE t.status IN :taskStatuses + AND t.deletedAt IS NULL + ) + ORDER BY r.id DESC + """) + Page findByUserIdAndRecordStatusesAndTaskStatuses( + @Param("userId") Long userId, + @Param("recordStatuses") Collection recordStatuses, + @Param("taskStatuses") Collection taskStatuses, + Pageable pageable); + + /** + * 统计用户指定状态集合 + 关联任务状态集合的申请记录数。 + * 用于飞手"我的任务"各 tab 计数(个人中心徽标)。 + * + * @param userId 当前用户 ID(飞手) + * @param recordStatuses 申请记录状态编码集合 + * @param taskStatuses 任务状态编码集合 + * @return 符合条件的记录数 + */ + @Query(""" + SELECT COUNT(r) FROM TaskRecord r + WHERE r.userId = :userId + AND r.deletedAt IS NULL + AND r.status IN :recordStatuses + AND r.taskId IN ( + SELECT t.id FROM Task t + WHERE t.status IN :taskStatuses + AND t.deletedAt IS NULL + ) + """) + long countByUserIdAndRecordStatusesAndTaskStatuses( + @Param("userId") Long userId, + @Param("recordStatuses") Collection recordStatuses, + @Param("taskStatuses") Collection taskStatuses); + + /** + * 按任务 ID 集合 + 状态集合查询申请记录,用于商家撤回/确认开始时批量关闭待确认申请。 + */ + List findByTaskIdInAndStatusInAndDeletedAtIsNull( + Collection taskIds, Collection statuses); + + /** + * 查询任务下指定状态的申请记录,"同意一人自动关闭其余申请"时批量更新使用。 + */ + List findByTaskIdAndStatusAndDeletedAtIsNull(Long taskId, Integer status); + + /** + * 统计任务下指定状态的申请数量(单任务)。 + */ + long countByTaskIdAndStatusAndDeletedAtIsNull(Long taskId, Integer status); + + /** + * 批量统计多个任务下指定状态的申请数量("我的发布"列表申请人数徽标)。 + * + *

聚合在 DB 层完成(GROUP BY),避免列表页 N+1 查询。

+ * + * @return 每行 [taskId, count] + */ + @Query(""" + SELECT r.taskId, COUNT(r) + FROM TaskRecord r + WHERE r.taskId IN :taskIds + AND r.status = :status + AND r.deletedAt IS NULL + GROUP BY r.taskId + """) + List countByTaskIdInGrouped(@Param("taskIds") Collection taskIds, + @Param("status") Integer status); + + /** + * 查询多个任务的首位待确认申请人(按 apply_time 最早者取一条)。 + * + *

用于商家"我的发布"列表卡片,在"1人申请"徽标旁展示申请人姓名, + * 避免逐条查库 N+1。JOIN pilot 表取飞手姓名,一步返回。

+ * + * @param taskIds 任务 ID 集合 + * @param status 申请记录状态(通常传 APPLIED=1) + * @return 每行 [taskId, pilotId, pilotName] + */ + @Query(value = """ + SELECT r.task_id, r.pilot_id, p.name + FROM task_record r + JOIN pilot p ON p.id = r.pilot_id AND p.deleted_at IS NULL + WHERE r.task_id IN :taskIds + AND r.status = :status + AND r.deleted_at IS NULL + AND r.apply_time = ( + SELECT MIN(r2.apply_time) FROM task_record r2 + WHERE r2.task_id = r.task_id AND r2.status = :status AND r2.deleted_at IS NULL + ) + ORDER BY r.task_id + """, nativeQuery = true) + List findFirstApplicantByTaskIds(@Param("taskIds") Collection taskIds, + @Param("status") Integer status); +} diff --git a/src/main/java/com/haisen/laop/repository/TaskRepository.java b/src/main/java/com/haisen/laop/repository/TaskRepository.java new file mode 100644 index 0000000..1365729 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/TaskRepository.java @@ -0,0 +1,172 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.Task; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 任务表仓储接口,继承 JpaRepository 获得基础 CRUD 能力。 + * + *

后续复杂查询(列表筛选、附近排序、分页)通过 {@code @Query} 声明式或 Specification 动态拼装实现, + * 严禁将业务规则下沉到 Repository。

+ * + * @author duhao + */ +@Repository +public interface TaskRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 按任务编号查询,用于唯一性校验。 + */ + boolean existsByTaskNo(String taskNo); + + /** + * 按发布人查询其发布的所有任务,按创建时间倒序,用于"我的任务"列表。 + * + * @param publisherId 发布人 userId + * @param pageable 分页参数 + * @return 分页任务列表 + */ + Page findByPublisherIdOrderByCreatedAtDesc(Long publisherId, Pageable pageable); + + /** + * 按发布人 + 状态集合查询未软删任务,按创建时间倒序。 + * 用于商家"我的任务-已发布"tab(状态 IN 待接单+已接单)。 + * + * @param publisherId 发布人 userId + * @param statuses 任务状态编码集合 + * @param pageable 分页参数 + * @return 分页任务列表 + */ + Page findByPublisherIdAndStatusInAndDeletedAtIsNullOrderByCreatedAtDesc( + Long publisherId, Collection statuses, Pageable pageable); + + /** + * 按发布人 + 单状态查询未软删任务,按创建时间倒序。 + * 用于商家"我的任务-进行中/已完成"tab(状态精确匹配)。 + * + * @param publisherId 发布人 userId + * @param status 任务状态编码 + * @param pageable 分页参数 + * @return 分页任务列表 + */ + Page findByPublisherIdAndStatusAndDeletedAtIsNullOrderByCreatedAtDesc( + Long publisherId, Integer status, Pageable pageable); + + /** + * 按发布人查询未软删任务,按创建时间倒序,用于商家详情页"发布的任务"列表。 + */ + List findByPublisherIdAndDeletedAtIsNullOrderByIdDesc(Long publisherId); + + /** + * 按接单飞手查询未软删任务,按创建时间倒序,用于飞手详情页"参与过的任务"列表。 + */ + List findByAcceptedPilotIdAndDeletedAtIsNullOrderByIdDesc(Long acceptedPilotId); + + /** + * 按接单飞手分页查询任务,按创建时间倒序,用于飞手详情页"参与过的任务"列表。 + */ + Page findByAcceptedPilotIdOrderByCreatedAtDesc(Long acceptedPilotId, Pageable pageable); + + /** + * 按主键集合批量查询未软删任务,用于"已接单"列表按申请记录批量取任务(分步批量查,避免 N+1)。 + */ + List findByIdInAndDeletedAtIsNull(Collection ids); + + /** 统计某商家已发布未删除任务数。 */ + long countByPublisherIdAndDeletedAtIsNull(Long publisherId); + + /** 统计某飞手已接单未删除任务数。 */ + long countByAcceptedPilotIdAndDeletedAtIsNull(Long acceptedPilotId); + + /** + * 统计某商家仍在交易中的任务数(状态 IN 待接单/已接单/进行中), + * 用于"取消商家认证"前置校验:有待完成任务则不允许撤销身份。 + */ + long countByPublisherIdAndStatusInAndDeletedAtIsNull(Long publisherId, List statuses); + + /** + * 统计某飞手仍在交易中的任务数(状态 IN 待接单/已接单/进行中), + * 用于"取消飞手认证"前置校验:有待完成任务则不允许撤销身份。 + */ + long countByAcceptedPilotIdAndStatusInAndDeletedAtIsNull(Long acceptedPilotId, List statuses); + + // ==================== 数据驾驶舱统计方法 ==================== + + /** + * 统计未软删的任务总数。 + */ + long countByDeletedAtIsNull(); + + /** + * 按状态统计未软删的任务数量。 + * + * @param status 任务状态编码 + */ + long countByStatusAndDeletedAtIsNull(Integer status); + + /** + * 按状态集合统计未软删的任务数量。 + * + * @param statuses 任务状态编码集合 + */ + long countByStatusInAndDeletedAtIsNull(List statuses); + + /** + * 统计指定时间范围内新增的任务数,按月分组。 + * + * @param start 起始时间(含) + * @param end 结束时间(含) + * @return 每行一个 Map,key 为 month(yyyy-MM),count 为当月新增数 + */ + @Query(value = """ + SELECT TO_CHAR(date_trunc('month', created_at), 'YYYY-MM') AS month, + COUNT(*) AS count + FROM task + WHERE deleted_at IS NULL + AND created_at >= :start + AND created_at <= :end + GROUP BY date_trunc('month', created_at) + ORDER BY month + """, nativeQuery = true) + List> countMonthlyNewTasks(@Param("start") LocalDateTime start, + @Param("end") LocalDateTime end); + + /** + * 按任务类型统计数量(含软删数据,可选是否过滤软删)。 + * + * @return 每行一个 Map,包含 type 和 count 两个 key + */ + @Query(value = """ + SELECT type, COUNT(*) AS count + FROM task + WHERE deleted_at IS NULL + GROUP BY type + ORDER BY count DESC + """, nativeQuery = true) + List> countByTaskType(); + + /** + * 按任务状态统计数量,用于驾驶舱状态分布。 + * + * @return 每行一个 Map,包含 status 和 count 两个 key + */ + @Query(value = """ + SELECT status, COUNT(*) AS count + FROM task + WHERE deleted_at IS NULL + GROUP BY status + ORDER BY status + """, nativeQuery = true) + List> countByTaskStatus(); +} diff --git a/src/main/java/com/haisen/laop/repository/TrainingStoreRepository.java b/src/main/java/com/haisen/laop/repository/TrainingStoreRepository.java new file mode 100644 index 0000000..980e486 --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/TrainingStoreRepository.java @@ -0,0 +1,19 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.TrainingStore; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +/** + * 门店培训信息 Repository,仅负责数据库读写。 + * + * @author duhao + */ +public interface TrainingStoreRepository extends JpaRepository { + + /** + * 查询首条有效的门店培训记录(未软删 + status=1)。 + */ + Optional findFirstByStatusAndDeletedAtIsNull(Integer status); +} diff --git a/src/main/java/com/haisen/laop/repository/UserRepository.java b/src/main/java/com/haisen/laop/repository/UserRepository.java new file mode 100644 index 0000000..3d9b3bf --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/UserRepository.java @@ -0,0 +1,62 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * 用户表仓储接口,提供基础 CRUD 与 Specification 动态查询能力。 + * + * @author duhao + */ +@Repository +public interface UserRepository extends JpaRepository, JpaSpecificationExecutor { + + /** + * 按微信 openid 查找用户,用于登录时查/建。 + */ + Optional findByOpenid(String openid); + + /** + * 按微信开放平台 unionid 查找用户(未软删),服务号关注事件自动绑定 mp_openid 时使用。 + */ + Optional findByUnionidAndDeletedAtIsNull(String unionid); + + /** + * 按服务号 openid 查找用户(未软删),取关事件解绑时使用。 + */ + Optional findByMpOpenidAndDeletedAtIsNull(String mpOpenid); + + /** + * 统计未软删的用户总数。 + */ + long countByDeletedAtIsNull(); + + /** + * 统计指定时间范围内新增的用户数,按月分组。 + * + * @param start 起始时间(含) + * @param end 结束时间(含) + * @return 每行一个 Map,key 为 month(yyyy-MM),count 为当月新增数 + */ + @Query(value = """ + SELECT TO_CHAR(date_trunc('month', created_at), 'YYYY-MM') AS month, + COUNT(*) AS count + FROM "user" + WHERE deleted_at IS NULL + AND created_at >= :start + AND created_at <= :end + GROUP BY date_trunc('month', created_at) + ORDER BY month + """, nativeQuery = true) + List> countMonthlyNewUsers(@Param("start") LocalDateTime start, + @Param("end") LocalDateTime end); +} diff --git a/src/main/java/com/haisen/laop/repository/WxMessageLogRepository.java b/src/main/java/com/haisen/laop/repository/WxMessageLogRepository.java new file mode 100644 index 0000000..f5496eb --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/WxMessageLogRepository.java @@ -0,0 +1,28 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.WxMessageLog; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * 微信模板消息发送日志仓储接口。 + * + *

查询策略遵循 AGENTS.md §2.4:Web 端分页 + 多条件筛选使用 Specification 动态拼装; + * 回调回写按 msg_id 精确命中。

+ * + * @author duhao + */ +@Repository +public interface WxMessageLogRepository extends JpaRepository, + JpaSpecificationExecutor { + + /** + * 按微信消息 ID 查询日志(送达结果回调回写使用)。 + * + *

微信 MsgID 全局唯一,提交成功时写入;同一 MsgID 仅对应一行日志。

+ */ + Optional findByMsgId(Long msgId); +} diff --git a/src/main/java/com/haisen/laop/repository/WxNotifyTaskRepository.java b/src/main/java/com/haisen/laop/repository/WxNotifyTaskRepository.java new file mode 100644 index 0000000..0cdea6b --- /dev/null +++ b/src/main/java/com/haisen/laop/repository/WxNotifyTaskRepository.java @@ -0,0 +1,133 @@ +package com.haisen.laop.repository; + +import com.haisen.laop.entity.WxNotifyTask; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 微信模板消息发送任务仓储接口(DB 持久化队列)。 + * + *

消费机制:CAS 占位 + 批量查询。查询 PENDING 任务不带行锁 + * ({@code SELECT ... LIMIT}),占位时用 CAS({@code UPDATE status=1 WHERE status=0}) + * 原子性防重复消费,多实例部署天然安全。

+ * + *

状态流转:PENDING(0) → PROCESSING(1) → SUCCESS(2)/FAILED(3), + * 成功/跳过/最终失败均软删除(deleted_at 置位)。 + * 失败时按 retry_count + next_retry_at 回退 PENDING 重试。

+ * + * @author duhao + */ +@Repository +public interface WxNotifyTaskRepository extends JpaRepository { + + /** + * 查询下一批待处理任务(不带行锁,CAS 占位防重复)。 + * + *

过滤条件:未软删除 + status=PENDING + 到达重试时间(NULL=立即可处理)。 + * 按 id 升序保证 FIFO 投递顺序。

+ * + * @param pending PENDING 状态值(见 {@link com.haisen.laop.common.enums.WxNotifyTaskStatusEnum}) + * @param limit 批量上限 + */ + @Query(value = "SELECT * FROM wx_notify_task " + + "WHERE deleted_at IS NULL AND status = :pending " + + "AND (next_retry_at IS NULL OR next_retry_at <= CURRENT_TIMESTAMP) " + + "ORDER BY id LIMIT :limit", nativeQuery = true) + List findPendingTasks(@Param("pending") int pending, @Param("limit") int limit); + + /** + * CAS 占位:PENDING → PROCESSING,返回受影响行数(1=成功,0=已被其他实例取走)。 + * + *

原子操作,多实例部署安全。占位成功后事务提交释放锁, + * 发送微信(外部调用)在事务外执行,不长时间持锁。

+ */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :processing " + + "WHERE t.id = :id AND t.status = :pending AND t.deletedAt IS NULL") + int casToProcessing(@Param("id") Long id, + @Param("pending") int pending, + @Param("processing") int processing); + + /** + * 完成成功:置 SUCCESS + 软删除 + 清空错误信息。 + */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :success, t.deletedAt = CURRENT_TIMESTAMP, " + + "t.templateId = :templateId, t.errCode = NULL, t.errMsg = NULL " + + "WHERE t.id = :id") + void completeSuccess(@Param("id") Long id, + @Param("success") int success, + @Param("templateId") String templateId); + + /** + * 跳过完成:置 SUCCESS + 软删除 + 填写跳过原因(未关注服务号等,不实际发送)。 + */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :success, t.deletedAt = CURRENT_TIMESTAMP, " + + "t.templateId = :templateId, t.skipReason = :skipReason " + + "WHERE t.id = :id") + void completeSkipped(@Param("id") Long id, + @Param("success") int success, + @Param("templateId") String templateId, + @Param("skipReason") String skipReason); + + /** + * 最终失败:置 FAILED + 软删除 + 填写错误信息(重试次数已用尽)。 + */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :failed, t.deletedAt = CURRENT_TIMESTAMP, " + + "t.templateId = :templateId, t.errCode = :errCode, t.errMsg = :errMsg " + + "WHERE t.id = :id") + void completeFailed(@Param("id") Long id, + @Param("failed") int failed, + @Param("templateId") String templateId, + @Param("errCode") String errCode, + @Param("errMsg") String errMsg); + + /** + * 安排重试:回退 PENDING + 递增 retry_count + 设置下次重试时间。 + * + *

next_retry_at 按 {@code retryIntervalMinutes[newRetryCount-1]} 计算, + * 超过最大重试次数由调用方调用 {@link #completeFailed}。

+ */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :pending, t.retryCount = :retryCount, " + + "t.nextRetryAt = :nextRetryAt, t.templateId = :templateId, " + + "t.errCode = :errCode, t.errMsg = :errMsg " + + "WHERE t.id = :id") + void scheduleRetry(@Param("id") Long id, + @Param("pending") int pending, + @Param("retryCount") int retryCount, + @Param("nextRetryAt") LocalDateTime nextRetryAt, + @Param("templateId") String templateId, + @Param("errCode") String errCode, + @Param("errMsg") String errMsg); + + /** + * 回收僵尸任务:PROCESSING 超时未更新 → 回退 PENDING 立即可重试。 + * + *

服务崩溃后残留的 PROCESSING 行,下次消费循环开始时统一回收。 + * cutoff = now - timeoutSeconds。

+ * + * @return 回收行数 + */ + @Modifying + @Transactional + @Query("UPDATE WxNotifyTask t SET t.status = :pending, t.nextRetryAt = NULL " + + "WHERE t.status = :processing AND t.deletedAt IS NULL AND t.updatedAt < :cutoff") + int recoverZombies(@Param("pending") int pending, + @Param("processing") int processing, + @Param("cutoff") LocalDateTime cutoff); +} diff --git a/src/main/java/com/haisen/laop/service/AnnouncementService.java b/src/main/java/com/haisen/laop/service/AnnouncementService.java new file mode 100644 index 0000000..1b19458 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/AnnouncementService.java @@ -0,0 +1,88 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.AnnouncementQueryDTO; +import com.haisen.laop.dto.AnnouncementSaveDTO; +import com.haisen.laop.vo.AnnouncementVO; +import org.springframework.data.domain.Page; + +import java.util.List; + +/** + * 公告服务接口,定义通知公告管理领域的业务能力。 + * + *

面向 Web 管理端的公告维护能力(分页查询、详情、新增、编辑、上下架、删除); + * 小程序端公告展示后续复用本服务的查询能力。

+ * + * @author duhao + */ +public interface AnnouncementService { + + /** + * 公告分页查询(Web 管理端列表)。 + * + *

固定条件:未软删除;可选条件:标题模糊、状态精确;按创建时间倒序。

+ * + * @param query 筛选条件(全部可选) + * @return 公告 VO 分页 + */ + Page page(AnnouncementQueryDTO query); + + /** + * 公告详情查询,用于编辑回显。 + * + * @param id 公告 ID + * @return 公告 VO + */ + AnnouncementVO detail(Long id); + + /** + * 新增公告。 + * + * @param dto 公告表单全部字段 + * @return 新增公告的 ID + */ + Long create(AnnouncementSaveDTO dto); + + /** + * 编辑公告(全量更新表单字段)。 + * + * @param id 公告 ID + * @param dto 公告表单全部字段 + */ + void update(Long id, AnnouncementSaveDTO dto); + + /** + * 删除公告(软删除,写入 deleted_at)。 + * + * @param id 公告 ID + */ + void delete(Long id); + + /** + * 切换公告展示状态(显示/隐藏)。 + * + * @param id 公告 ID + * @param status 目标状态:0隐藏 1显示 + */ + void updateStatus(Long id, Integer status); + + /** + * 小程序端:查询最新可见公告列表,按创建时间倒序。 + * + *

仅返回 status=显示、未软删且在生效窗口期内的公告。

+ * + * @param limit 期望返回条数(会被夹在小程序端常量上下限内) + * @return 公告 VO 列表 + */ + List listForMini(int limit); + + /** + * 小程序端:查询指定公告详情。 + * + *

仅当公告 status=显示、未软删且在生效窗口期内时返回,否则抛业务异常。

+ * + * @param id 公告 ID + * @return 公告 VO + */ + AnnouncementVO detailForMini(Long id); +} diff --git a/src/main/java/com/haisen/laop/service/AppBannerService.java b/src/main/java/com/haisen/laop/service/AppBannerService.java new file mode 100644 index 0000000..0bb10ae --- /dev/null +++ b/src/main/java/com/haisen/laop/service/AppBannerService.java @@ -0,0 +1,83 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.AppBannerQueryDTO; +import com.haisen.laop.dto.AppBannerSaveDTO; +import com.haisen.laop.vo.AppBannerVO; +import org.springframework.data.domain.Page; + +import java.util.List; + +/** + * 轮播图服务接口,承载首页轮播图管理领域的业务能力。 + * + *

面向 Web 管理端的轮播图维护能力(分页查询、详情、新增、编辑、排序调整、启停、删除); + * 小程序端首页展示复用本服务的查询能力。

+ * + * @author duhao + */ +public interface AppBannerService { + + /** + * 轮播图分页查询(Web 管理端列表)。 + * + *

固定条件:未软删除;可选条件:标题模糊、状态精确;按 sortOrder 升序 + id 升序。

+ * + * @param query 筛选条件(全部可选) + * @return 轮播图 VO 分页 + */ + Page page(AppBannerQueryDTO query); + + /** + * 轮播图详情查询,用于编辑回显。 + * + * @param id 轮播图 ID + * @return 轮播图 VO + */ + AppBannerVO detail(Long id); + + /** + * 新增轮播图。 + * + * @param dto 轮播图表单全部字段 + * @return 新增轮播图的 ID + */ + Long create(AppBannerSaveDTO dto); + + /** + * 编辑轮播图(全量更新表单字段)。 + * + * @param id 轮播图 ID + * @param dto 轮播图表单全部字段 + */ + void update(Long id, AppBannerSaveDTO dto); + + /** + * 删除轮播图(软删除,写入 deleted_at)。 + * + * @param id 轮播图 ID + */ + void delete(Long id); + + /** + * 切换轮播图展示状态(显示/隐藏)。 + * + * @param id 轮播图 ID + * @param status 目标状态:0隐藏 1显示 + */ + void updateStatus(Long id, Integer status); + + /** + * 调整轮播图排序值。 + * + * @param id 轮播图 ID + * @param sortOrder 目标排序值 + */ + void updateSort(Long id, Integer sortOrder); + + /** + * 查询小程序端首页可见的轮播图列表(仅已显示、未软删除、按 sortOrder 升序)。 + * + * @return 展示用 VO 列表 + */ + List listForMini(); +} diff --git a/src/main/java/com/haisen/laop/service/AppConfigService.java b/src/main/java/com/haisen/laop/service/AppConfigService.java new file mode 100644 index 0000000..64b1b2f --- /dev/null +++ b/src/main/java/com/haisen/laop/service/AppConfigService.java @@ -0,0 +1,55 @@ +package com.haisen.laop.service; + +import com.haisen.laop.entity.AppConfig; + +import java.util.List; + +/** + * 平台功能配置服务接口,承载 KV 形式的功能开关/参数维护能力。 + * + * @author duhao + */ +public interface AppConfigService { + + /** + * 获取全部功能配置项。 + * + * @return 配置项列表(按 configKey 字母序) + */ + List listAll(); + + /** + * 按配置键获取值,不存在时返回 null。 + * + * @param configKey 配置键 + * @return 配置值字符串,不存在返回 null + */ + String getValue(String configKey); + + /** + * 更新指定配置项的值。 + * + * @param configKey 配置键 + * @param configValue 新配置值 + * @param updatedBy 操作人标识(可选,传 null 不更新) + */ + void updateValue(String configKey, String configValue, String updatedBy); + + /** + * 便捷方法:查询布尔开关值,不存在默认 false。 + * + * @param configKey 配置键 + * @return true 开启 / false 关闭 / 不存在 + */ + boolean isEnabled(String configKey); + + /** + * 便捷方法:查询非负整数参数(如发布任务奖励/扣减积分数), + * 配置缺失或值非法(非数字)时返回调用方给定的兜底默认值。 + * + * @param configKey 配置键 + * @param defaultValue 兜底默认值 + * @return 解析后的整数参数 + */ + int getIntValue(String configKey, int defaultValue); +} diff --git a/src/main/java/com/haisen/laop/service/CertService.java b/src/main/java/com/haisen/laop/service/CertService.java new file mode 100644 index 0000000..7f19dd8 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/CertService.java @@ -0,0 +1,51 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.MerchantCertifyDTO; +import com.haisen.laop.dto.PilotCertifyDTO; +import com.haisen.laop.vo.MerchantCertVO; +import com.haisen.laop.vo.PilotCertVO; + +/** + * 认证服务接口,承载飞手/商家认证的提交与查询。 + * + *

业务规则:已认证用户禁止重复提交;再次提交(认证失败/未认证)覆盖更新原记录; + * 认证状态、认证时间由 Service 层统一维护。

+ * + * @author duhao + */ +public interface CertService { + + /** + * 提交飞手认证。 + * + * @param userId 当前登录用户ID + * @param dto 飞手执照信息表单 + * @return 提交后的认证信息(含最新认证状态) + */ + PilotCertVO submitPilot(Long userId, PilotCertifyDTO dto); + + /** + * 查询当前用户的飞手认证信息(用于认证页回显)。 + * + * @param userId 当前登录用户ID + * @return 认证信息,从未提交过时 certStatus = 0 + */ + PilotCertVO getPilotCert(Long userId); + + /** + * 提交商家认证。 + * + * @param userId 当前登录用户ID + * @param dto 商家信息表单 + * @return 提交后的认证信息(含最新认证状态) + */ + MerchantCertVO submitMerchant(Long userId, MerchantCertifyDTO dto); + + /** + * 查询当前用户的商家认证信息(用于认证页回显)。 + * + * @param userId 当前登录用户ID + * @return 认证信息,从未提交过时 certStatus = 0 + */ + MerchantCertVO getMerchantCert(Long userId); +} diff --git a/src/main/java/com/haisen/laop/service/CourseService.java b/src/main/java/com/haisen/laop/service/CourseService.java new file mode 100644 index 0000000..b87fc6a --- /dev/null +++ b/src/main/java/com/haisen/laop/service/CourseService.java @@ -0,0 +1,157 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.CourseAppointmentDTO; +import com.haisen.laop.dto.CourseQueryDTO; +import com.haisen.laop.dto.CourseSaveDTO; +import com.haisen.laop.vo.AdminCourseAppointmentVO; +import com.haisen.laop.vo.CourseAppointmentVO; +import com.haisen.laop.vo.CourseVO; +import com.haisen.laop.vo.MiniCourseVO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +/** + * 课程服务接口,定义研学课程管理领域的业务能力。 + * + *

当前阶段聚焦 Web 管理端的课程维护能力(分页查询、详情、新增、编辑、 + * 上下架、删除);小程序端课程展示与预约查询后续复用本服务。

+ * + * @author duhao + */ +public interface CourseService { + + /** + * 课程分页查询(Web 管理端列表)。 + * + *

固定条件:未软删除;可选条件:名称模糊、状态精确;按创建时间倒序。

+ * + * @param query 筛选条件(全部可选) + * @return 课程 VO 分页 + */ + Page page(CourseQueryDTO query); + + /** + * 课程详情查询,用于编辑回显。 + * + * @param id 课程 ID + * @return 课程 VO(含宣传图绝对 URL 与富文本简介) + */ + CourseVO detail(Long id); + + /** + * 新增课程。 + * + * @param dto 课程表单全部字段 + * @return 新增课程的 ID + */ + Long create(CourseSaveDTO dto); + + /** + * 编辑课程(全量更新表单字段)。 + * + * @param id 课程 ID + * @param dto 课程表单全部字段 + */ + void update(Long id, CourseSaveDTO dto); + + /** + * 删除课程(软删除,写入 deleted_at)。 + * + * @param id 课程 ID + */ + void delete(Long id); + + /** + * 上下架课程。 + * + * @param id 课程 ID + * @param status 目标状态:0下架 1上架(不允许直接置为已满员) + */ + void updateStatus(Long id, Integer status); + + // ==================== 小程序端:课程展示与预约 ==================== + + /** + * 小程序端:分页查询已上架课程,按创建时间倒序。 + * + *

固定条件:上架(status=1)+ 未软删;可选条件:名称模糊、分类精确。 + * 列表卡片仅需头图 URL,不解析详情图集(节省文件查询开销)。

+ * + * @param name 课程名称(模糊,可空) + * @param category 分类编码(可空) + * @param pageable 分页参数 + * @return 小程序课程 VO 分页 + */ + Page listForMini(String name, Integer category, Pageable pageable); + + /** + * 小程序端:查询课程详情(仅上架课程可见)。 + * + *

详情额外解析课程详情图集绝对 URL 与所属商家名称。

+ * + * @param id 课程 ID + * @return 小程序课程 VO + */ + MiniCourseVO detailForMini(Long id); + + /** + * 小程序端:提交课程预约。 + * + *

金额由后端按 {@code course.price × personCount} 计算,前端不传金额; + * 预约状态初始为"已预约",待商家确认。

+ * + * @param userId 提交人 userId(由 Controller 从 token 注入) + * @param dto 预约表单 + * @return 新增预约 ID + */ + Long createAppointment(Long userId, CourseAppointmentDTO dto); + + /** + * 小程序端:我的预约分页查询,按创建时间倒序。 + * + *

组装课程名称与宣传图绝对 URL,避免前端再发课程详情请求。

+ * + * @param userId 当前用户 userId + * @param pageable 分页参数 + * @return 预约 VO 分页 + */ + Page myAppointments(Long userId, Pageable pageable); + + /** + * 小程序端:查询精选课程列表(首页展示)。 + * + *

固定条件:上架 + 精选 + 未软删;按创建时间倒序,{@code limit} 兜底为常量上限。

+ * + * @param limit 最大返回条数(建议 6) + * @return 小程序课程 VO 列表(非分页) + */ + List listFeatured(int limit); + + // ==================== 管理端:预约名单 ==================== + + /** + * 管理端:查询某课程下的预约名单分页,按创建时间倒序。 + * + *

组装预约人昵称/手机号与课程名称,便于运营核对。

+ * + * @param courseId 课程 ID + * @param pageable 分页参数 + * @return 管理端预约 VO 分页 + */ + Page listAppointmentsByCourse(Long courseId, Pageable pageable); + + // ==================== 小程序端:取消预约 ==================== + + /** + * 小程序端:用户自助取消自己的课程预约。 + * + *

仅允许取消 status=1(已预约)的预约;已取消或非本人预约直接拒绝。 + * 预约取消后释放名额,DB 部分唯一索引允许同用户同课程同时段重新预约。

+ * + * @param userId 当前用户 userId(从 token 注入) + * @param appointmentId 预约 ID + */ + void cancelAppointment(Long userId, Long appointmentId); +} diff --git a/src/main/java/com/haisen/laop/service/DashboardService.java b/src/main/java/com/haisen/laop/service/DashboardService.java new file mode 100644 index 0000000..c0bb692 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/DashboardService.java @@ -0,0 +1,19 @@ +package com.haisen.laop.service; + +import com.haisen.laop.vo.DashboardVO; + +/** + * 数据驾驶舱服务接口,聚合统计查询能力,一次性返回首页 Dashboard 所需全部数据。 + * + * @author duhao + */ +public interface DashboardService { + + /** + * 获取数据驾驶舱全量统计数据,包括用户/商家/飞手总数、任务总量与状态分布、 + * 近 6 个月月度增长趋势、任务类型分布。 + * + *

所有查询均为只读操作,Service 层负责组装空月份补零、枚举映射等逻辑。

+ */ + DashboardVO getDashboardStats(); +} diff --git a/src/main/java/com/haisen/laop/service/ExamService.java b/src/main/java/com/haisen/laop/service/ExamService.java new file mode 100644 index 0000000..b5f9bb2 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/ExamService.java @@ -0,0 +1,113 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.ExamQuestionSaveDTO; +import com.haisen.laop.dto.ExamSubmitDTO; +import com.haisen.laop.dto.TrainingStoreDTO; +import com.haisen.laop.vo.ExamBankVO; +import com.haisen.laop.vo.ExamQuestionVO; +import com.haisen.laop.vo.ExamResultVO; +import com.haisen.laop.vo.TrainingStoreVO; + +import java.util.List; + +/** + * 培训考试服务接口,定义 Web 管理端培训考试领域的业务能力。 + * + *

承载两个 tab 的业务: + *

    + *
  • 培训 tab:门店培训信息的查询与编辑
  • + *
  • 题库 tab:题库列表 + 题目的 CRUD 管理(Web 管理端)
  • + *

+ * + * @author duhao + */ +public interface ExamService { + + /** + * 获取门店培训信息(培训 tab 展示)。 + * + * @return 门店培训 VO,无有效记录时返回 null + */ + TrainingStoreVO getTrainingStore(); + + /** + * 编辑门店培训信息(管理员操作)。 + * + *

若已存在有效记录则更新,否则新建。

+ * + * @param dto 门店编辑 DTO + */ + void saveTrainingStore(TrainingStoreDTO dto); + + // ==================== 题库管理(Web 管理端) ==================== + + /** + * 获取所有有效题库列表,附带实时聚合的题目数量。 + * + * @return 题库 VO 列表 + */ + List listBanks(); + + /** + * 管理端分页查询题目,支持按题库、题型、关键词筛选,返回完整字段(含答案、解析)。 + * + * @param bankId 题库ID(可选) + * @param questionType 题型(可选):1单选 2多选 3判断 + * @param keyword 关键词(题干模糊匹配,可选) + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + * @return 题目 VO 列表 + */ + List listQuestionsForAdmin(Long bankId, Integer questionType, String keyword, + int pageNo, int pageSize); + + /** + * 管理端统计题目总数(带筛选条件)。 + */ + long countQuestionsForAdmin(Long bankId, Integer questionType, String keyword); + + /** + * 新增题目。 + */ + ExamQuestionVO createQuestion(ExamQuestionSaveDTO dto); + + /** + * 编辑题目。 + */ + ExamQuestionVO updateQuestion(ExamQuestionSaveDTO dto); + + /** + * 软删除题目。 + */ + void deleteQuestion(Long id); + + // ==================== 小程序答题端(保留接口供小程序使用) ==================== + + /** + * 小程序端分页查询题目(不含答案与解析)。 + */ + List listQuestions(Long bankId, int pageNo, int pageSize); + + /** + * 统计指定题库下的有效题目总数。 + */ + long countQuestions(Long bankId); + + /** + * 提交答题判分:比对用户答案与标准答案,返回每题判分明细与汇总分数。 + * + *

设计说明:分数不持久化,仅实时计算返回给前端。

+ */ + ExamResultVO submitExam(Long bankId, ExamSubmitDTO dto); + + /** + * 模拟考试:从指定题库中按固定配比随机抽题组成一张试卷。 + * + *

标准配比:30 单选(×1分)+ 25 多选(×2分)+ 20 判断(×1分)= 100 分。 + * 若某题型可用题目不足则返回全部可用题目,总分可能低于 100。

+ * + * @param bankId 题库ID + * @return 随机打乱顺序的题目列表(不含答案与解析) + */ + List mockExam(Long bankId); +} diff --git a/src/main/java/com/haisen/laop/service/FileService.java b/src/main/java/com/haisen/laop/service/FileService.java new file mode 100644 index 0000000..4f53885 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/FileService.java @@ -0,0 +1,22 @@ +package com.haisen.laop.service; + +import com.haisen.laop.vo.FileUploadVO; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件服务接口,封装上传领域的业务能力。 + * + * @author duhao + */ +public interface FileService { + + /** + * 上传单个文件,完成格式/大小校验 → 存储介质写入 → sys_file 记录落库 → 返回 fileId+fileUrl。 + * + * @param uploaderId 上传用户 ID,用于审计和配额统计 + * @param file HTTP multipart 文件对象 + * @param fileType 文件类型字符串标识,如 {@code SCENE_IMAGE},由 {@link com.haisen.laop.common.enums.FileTypeEnum} 解析 + * @return 上传成功后的文件元信息 + */ + FileUploadVO upload(Long uploaderId, MultipartFile file, String fileType); +} diff --git a/src/main/java/com/haisen/laop/service/FileStorageService.java b/src/main/java/com/haisen/laop/service/FileStorageService.java new file mode 100644 index 0000000..a6d3b53 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/FileStorageService.java @@ -0,0 +1,27 @@ +package com.haisen.laop.service; + +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * 文件存储服务接口,抽象底层存储实现(本地磁盘 / OSS / COS)。 + * + *

设计意图:开发阶段用本地磁盘快速迭代,生产环境切换到对象存储时只需新增一个 + * 实现类并切换 {@code application.yml} 中的配置,Service/Controller 层调用点零改动。

+ * + * @author duhao + */ +public interface FileStorageService { + + /** + * 保存上传的文件到存储介质。 + * + * @param file Spring MultipartFile,来自 HTTP multipart 请求 + * @param subDir 子目录(按业务类型分,如 scene_image/),不允许为 null 或包含路径穿越字符 + * @param fileSuffix 文件后缀(不含点,如 jpg),由调用方通过白名单校验后传入 + * @return 相对访问路径,如 {@code /static/scene_image/uuid.jpg} + * @throws IOException 存储介质写入失败时抛出 + */ + String store(MultipartFile file, String subDir, String fileSuffix) throws IOException; +} diff --git a/src/main/java/com/haisen/laop/service/HomeService.java b/src/main/java/com/haisen/laop/service/HomeService.java new file mode 100644 index 0000000..4ef1537 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/HomeService.java @@ -0,0 +1,58 @@ +package com.haisen.laop.service; + +import com.haisen.laop.vo.HomeMerchantVO; +import com.haisen.laop.vo.HomePilotVO; +import com.haisen.laop.vo.MerchantDetailVO; +import com.haisen.laop.vo.PilotDetailVO; + +import java.util.List; + +/** + * 首页展示服务,承载"实力商家 / 本地飞手"列表与商家/飞手公开详情的组装。 + * + * @author duhao + */ +public interface HomeService { + + /** + * 查询首页"实力商家"列表:已认证商家,按订单数降序限量返回。 + */ + List listMerchants(); + + /** + * 分页查询已认证商家列表(商家列表页),按订单数降序。 + * + * @param pageNo 页码(1 起,前端必传) + * @param pageSize 每页数量(前端必传) + * @param name 商家名称关键词(模糊搜索,为空时不过滤) + */ + List pageMerchants(int pageNo, int pageSize, String name); + + /** + * 查询首页"本地飞手"列表:已认证飞手,按完成任务数降序限量返回。 + */ + List listPilots(); + + /** + * 分页查询已认证飞手列表(飞手列表页),按完成任务数降序。 + * + * @param pageNo 页码(1 起,前端必传) + * @param pageSize 每页数量(前端必传) + * @param name 飞手名称关键词(模糊搜索,为空时不过滤) + */ + List pagePilots(int pageNo, int pageSize, String name); + + /** + * 查询商家公开详情:全部商家信息 + 该商家发布的任务列表。 + * + * @param id 商家ID + */ + MerchantDetailVO getMerchantDetail(Long id); + + /** + * 查询飞手公开详情:飞手画像 + 参与过的任务列表(不含个人手机号)。 + * + * @param id 飞手ID + */ + PilotDetailVO getPilotDetail(Long id); +} diff --git a/src/main/java/com/haisen/laop/service/LoginService.java b/src/main/java/com/haisen/laop/service/LoginService.java new file mode 100644 index 0000000..79283de --- /dev/null +++ b/src/main/java/com/haisen/laop/service/LoginService.java @@ -0,0 +1,21 @@ +package com.haisen.laop.service; + +import com.haisen.laop.vo.LoginVO; + +/** + * 登录服务接口,聚焦微信小程序 code2session + 用户查建逻辑。 + * + * @author duhao + */ +public interface LoginService { + + /** + * 微信小程序登录:code → openid → 查/建 User → 返回 token。 + * + * @param code wx.login() 返回的临时登录凭证 + * @param inviteUserId 邀请人用户ID(扫码推广码进入时携带,可空); + * 仅新用户首次注册时生效,推广人账户 +4 积分 + * @return 登录结果(token + userId + 是否新用户) + */ + LoginVO wxLogin(String code, Long inviteUserId); +} diff --git a/src/main/java/com/haisen/laop/service/PointsService.java b/src/main/java/com/haisen/laop/service/PointsService.java new file mode 100644 index 0000000..984a7f0 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/PointsService.java @@ -0,0 +1,42 @@ +package com.haisen.laop.service; + +import com.haisen.laop.common.enums.PointsEventEnum; + +/** + * 积分服务接口,承载积分的增加与扣减。 + * + *

核心约定:每次增扣都会同步做两件事——更新 {@code user.points} 余额 + + * 写入 {@code points_detail} 流水,二者在调用方事务内完成(本方法不额外开事务, + * 保证余额变更与业务操作原子性)。

+ * + *

积分数量:由调用方显式传入正整数(收入/支出的绝对值), + * 事件与方向必须匹配(收入事件只能 award,支出事件只能 deduct), + * 流水内的带符号值由本服务按方向统一落库,禁止业务代码出现裸积分数字。

+ * + * @author duhao + */ +public interface PointsService { + + /** + * 增加积分(如发布任务奖励、邀请注册奖励、后台手动新增)。 + * + * @param userId 用户ID + * @param event 积分事件(必须为收入类事件,方向见 PointsEventEnum.changeType) + * @param points 增加数量,正整数(收入绝对值) + * @param relatedId 关联业务ID(任务ID/被邀请用户ID等),可空 + * @param remark 备注说明,可空 + */ + void award(Long userId, PointsEventEnum event, int points, Long relatedId, String remark); + + /** + * 扣减积分(如发布优质任务、后台手动扣减);余额不足时抛出带 + * {@code PointsConstants.ERROR_CODE_POINTS_INSUFFICIENT} 错误码的异常。 + * + * @param userId 用户ID + * @param event 积分事件(必须为支出类事件,方向见 PointsEventEnum.changeType) + * @param points 扣减数量,正整数(支出绝对值,流水内记为负数) + * @param relatedId 关联业务ID,可空 + * @param remark 备注说明,可空 + */ + void deduct(Long userId, PointsEventEnum event, int points, Long relatedId, String remark); +} diff --git a/src/main/java/com/haisen/laop/service/PromoteService.java b/src/main/java/com/haisen/laop/service/PromoteService.java new file mode 100644 index 0000000..c049e9e --- /dev/null +++ b/src/main/java/com/haisen/laop/service/PromoteService.java @@ -0,0 +1,19 @@ +package com.haisen.laop.service; + +/** + * 推广服务接口,承载"飞手推广"二维码生成。 + * + * @author duhao + */ +public interface PromoteService { + + /** + * 生成当前用户专属的微信小程序推广码(scene 携带用户ID)。 + * + *

好友扫码进入小程序注册成功后,当前用户获得 4 积分(由登录链路完成奖励)。

+ * + * @param userId 当前登录用户ID(即推广人) + * @return 小程序码 Base64 字符串 + */ + String getPromoteQrCode(Long userId); +} diff --git a/src/main/java/com/haisen/laop/service/TaskService.java b/src/main/java/com/haisen/laop/service/TaskService.java new file mode 100644 index 0000000..e536cb5 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/TaskService.java @@ -0,0 +1,184 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.TaskHallQueryDTO; +import com.haisen.laop.dto.TaskManageQueryDTO; +import com.haisen.laop.dto.TaskPublishDTO; +import com.haisen.laop.dto.TaskReviewDTO; +import com.haisen.laop.entity.Task; +import com.haisen.laop.vo.TaskApplicantVO; +import com.haisen.laop.vo.TaskManageVO; +import com.haisen.laop.vo.TaskPublishVO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 任务服务接口,定义任务领域的业务能力。 + * + *

当前阶段聚焦"发布任务"核心能力;后续扩展任务列表查询、详情查询、抢单、完成等方法。

+ * + * @author duhao + */ +public interface TaskService { + + /** + * 发布新任务,接收商家端提交的完整任务信息。 + * + * @param publisherId 发布人用户 ID(从 token 解析得到) + * @param publishDTO 发布请求体 + * @return 发布成功后的简要信息(taskId + taskNo) + */ + TaskPublishVO publish(Long publisherId, TaskPublishDTO publishDTO); + + /** + * 抢单大厅分页查询:全平台待接单任务,支持省市区/任务类型/金额区间筛选。 + * + * @param query 筛选条件(省市区逐级命中、类型精确、金额闭区间),全部可选 + * @param pageable 分页参数 + * @return 待接单任务分页,按创建时间倒序 + */ + Page hall(TaskHallQueryDTO query, Pageable pageable); + + /** + * Web 管理端任务分页查询:全量任务(含所有状态),支持关键词/类型/状态筛选。 + * + *

每条记录额外组装发布商家简要信息(批量查询避免 N+1),按创建时间倒序。

+ * + * @param query 筛选条件(关键词模糊匹配 taskNo/name、类型精确、状态精确),全部可选 + * @param pageable 分页参数 + * @return 任务管理 VO 分页(含发布商家信息,不含场景图 URL) + */ + Page managePage(TaskManageQueryDTO query, Pageable pageable); + + /** + * Web 管理端任务详情:全量任务信息 + 发布商家信息 + 场景图 URL 列表。 + * + * @param id 任务 ID + * @return 任务管理 VO(含场景图 URL 与商家门头照 URL) + */ + TaskManageVO manageDetail(Long id); + + /** + * 取消任务(管理员干预),将状态置为"已取消"。 + * + *

仅允许从待接单/已接单/执行中状态取消;已完成或已取消的任务不允许再次取消。

+ * + * @param id 任务 ID + */ + void cancel(Long id); + + /** + * 软删除任务(管理员干预),写入 deleted_at。 + * + *

仅允许删除草稿/已完成/已取消的任务;进行中的任务需先取消。

+ * + * @param id 任务 ID + */ + void delete(Long id); + + /** + * 飞手申请接单(抢单)。 + * + *

校验链:飞手身份与认证状态(吊销拦截)→ 任务待接单 → 非本人发布 → 未重复申请 + * → 申请人数未达上限;通过后落库申请记录,并在事务提交后经内存队列发送 + * 微信模板消息通知商家(发送失败不影响申请结果)。

+ * + * @param taskId 任务 ID + * @param userId 当前登录用户 ID(飞手) + */ + void grab(Long taskId, Long userId); + + /** + * 商家查看任务申请飞手列表(按申请时间正序)。 + * + *

校验任务归属:仅任务发布人可查看;返回申请人概要信息, + * 执照资质详情由前端复用飞手详情页展示。

+ * + * @param taskId 任务 ID + * @param userId 当前登录用户 ID(商家) + * @return 申请飞手列表 + */ + List applicants(Long taskId, Long userId); + + /** + * 商家审批申请:同意(任务置为已接单,其余申请自动关闭)或拒绝。 + * + * @param recordId 申请记录 ID + * @param userId 当前登录用户 ID(商家) + * @param dto 审批结果与拒绝原因 + */ + void review(Long recordId, Long userId, TaskReviewDTO dto); + + /** + * 飞手撤销接单申请。 + * + *

产品规则:申请后可随时撤销 —— + * ① "待商家确认"的申请直接撤销,任务保持待接单; + * ② 已被商家同意(任务"已接单")的申请,撤销后任务回滚为待接单(释放给其他飞手); + * 任务一旦开始(进行中/已完成/已取消)不可撤销,需联系商家处理。 + * 撤销成功后事务提交经队列通知商家(bizType=3)。

+ * + * @param taskId 任务 ID((task_id, user_id) 唯一约束定位申请记录,前端无需感知 recordId) + * @param userId 当前登录用户 ID(飞手) + */ + void withdraw(Long taskId, Long userId); + + /** + * 批量统计任务待确认申请数量("我的发布"列表徽标)。 + * + * @param taskIds 任务 ID 集合 + * @return taskId → 待确认申请数(无申请的任务不在 map 中) + */ + Map countApplicants(Collection taskIds); + + /** + * 商家撤回任务:将已发布(待接单/已接单)的任务置为已取消,关闭全部活跃申请记录。 + * + *

若已有飞手接单,撤回后飞手侧申请记录同步关闭并收到通知。 + * 撤回操作不可逆,任务不再出现在商家"已发布/进行中"列表中。

+ * + * @param taskId 任务 ID + * @param userId 当前登录用户 ID(商家,须为任务发布人) + */ + void recall(Long taskId, Long userId); + + /** + * 商家确认开始:将已发布(待接单/已接单)的任务推进为执行中。 + * + *

无需飞手已接单也可直接开始;开始后待确认申请自动关闭, + * 已接单飞手记录写入实际开始时间。

+ * + * @param taskId 任务 ID + * @param userId 当前登录用户 ID(商家,须为任务发布人) + */ + void start(Long taskId, Long userId); + + /** + * 商家确认完成:将执行中的任务推进为已完成。 + * + *

已接单飞手记录写入实际结束时间,任务进入终态。

+ * + * @param taskId 任务 ID + * @param userId 当前登录用户 ID(商家,须为任务发布人) + */ + void complete(Long taskId, Long userId); + + /** + * 统计商家"我的任务"三个 tab 的任务数量(已发布/进行中/已完成)。 + * + * @param userId 商家用户 ID + * @return { published, running, done } + */ + Map countMyTasksByTabs(Long userId); + + /** + * 统计飞手"我的任务"三个 tab 的任务数量(已接单/进行中/已完成)。 + * + * @param userId 飞手用户 ID + * @return { accepted, running, done } + */ + Map countMyAcceptedByTabs(Long userId); +} diff --git a/src/main/java/com/haisen/laop/service/UserService.java b/src/main/java/com/haisen/laop/service/UserService.java new file mode 100644 index 0000000..8805ade --- /dev/null +++ b/src/main/java/com/haisen/laop/service/UserService.java @@ -0,0 +1,104 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.PointsAdjustDTO; +import com.haisen.laop.dto.UserQueryDTO; +import com.haisen.laop.vo.PointsDetailVO; +import com.haisen.laop.vo.UserManageVO; +import com.haisen.laop.vo.UserMerchantDetailVO; +import com.haisen.laop.vo.UserPilotDetailVO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * 用户服务接口,定义 Web 管理端用户管理领域的业务能力。 + * + *

承载小程序注册用户的列表查询与商家/飞手详情查看; + * 详情比小程序认证页多了"任务列表",故返回独立包装 VO(UserMerchantDetailVO/UserPilotDetailVO) + * 以避免污染小程序消费的 MerchantCertVO/PilotCertVO。

+ * + * @author duhao + */ +public interface UserService { + + /** + * 用户分页查询(Web 管理端列表):全量注册用户 + 关键词筛选 + 批量组装飞手/商家认证状态。 + * + *

用户类型(商家/飞手)以 Pilot/Merchant 实际记录的 certStatus 为准, + * 不依赖 User 实体的 isPilotBound/isMerchantBound(该字段认证提交后未同步更新)。

+ * + * @param query 筛选条件(全部可选) + * @param pageable 分页与排序 + * @return 用户管理 VO 分页 + */ + Page pageUsers(UserQueryDTO query, Pageable pageable); + + /** + * 商家详情弹窗包装 VO:cert 信息(委托 CertService 组装)+ 最近 10 条发布的任务。 + * + * @param userId 用户 ID + * @return 商家详情包装 VO + * @throws com.haisen.laop.common.BusinessException 该用户未提交商家认证资料时抛出 + */ + UserMerchantDetailVO getMerchantDetail(Long userId); + + /** + * 飞手详情弹窗包装 VO:cert 信息(委托 CertService 组装)+ 最近 10 条接单的任务。 + * + * @param userId 用户 ID + * @return 飞手详情包装 VO + * @throws com.haisen.laop.common.BusinessException 该用户未提交飞手认证资料时抛出 + */ + UserPilotDetailVO getPilotDetail(Long userId); + + /** + * 强制取消商家认证:软删除 merchant 记录 + 重置 user.isMerchantBound + 清空 user.merchantId。 + * + *

前置校验:若该商家存在状态为"待接单/已接单/执行中"的未完成任务, + * 则拒绝取消并返回提示,避免造成在途任务无商家归属的脏数据。

+ * + * @param userId 用户 ID + * @throws com.haisen.laop.common.BusinessException 不满足取消条件时抛出 + */ + void revokeMerchantCert(Long userId); + + /** + * 强制取消飞手认证:软删除 pilot 记录 + 重置 user.isPilotBound + 清空 user.pilotId。 + * + *

前置校验:若该飞手存在状态为"待接单/已接单/执行中"的未完成任务, + * 则拒绝取消并返回提示,避免造成在途任务无飞手归属的脏数据。

+ * + * @param userId 用户 ID + * @throws com.haisen.laop.common.BusinessException 不满足取消条件时抛出 + */ + void revokePilotCert(Long userId); + + /** + * 用户积分明细分页查询:按时间倒序返回指定用户的积分增减流水。 + * + *

返回 Map 结构与前端分页组件对齐,Service 层负责 PO→VO 转换与分页元数据封装。

+ * + * @param userId 用户 ID + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + * @return 分页数据,含 list/totalElements/totalPages/pageNo/pageSize + */ + Map pointsDetail(Long userId, int pageNo, int pageSize); + + /** + * 后台手动增减指定用户积分:余额变更与流水写入(手动新增/手动扣减)在同一事务内完成。 + * + *

业务规则:

+ *
    + *
  • 变动方向仅允许 1收入/2支出,积分数量必须为正整数,调整原因必填;
  • + *
  • 手动扣减时若用户当前余额不足,抛出业务异常拒绝扣减(不允许积分余额为负)。
  • + *
+ * + * @param userId 用户 ID + * @param dto 调整请求(方向 + 数量 + 原因) + * @return 调整后的最新积分余额 + * @throws com.haisen.laop.common.BusinessException 用户不存在、方向非法或余额不足时抛出 + */ + Integer adjustPoints(Long userId, PointsAdjustDTO dto); +} diff --git a/src/main/java/com/haisen/laop/service/WxMessageLogService.java b/src/main/java/com/haisen/laop/service/WxMessageLogService.java new file mode 100644 index 0000000..6d2124f --- /dev/null +++ b/src/main/java/com/haisen/laop/service/WxMessageLogService.java @@ -0,0 +1,24 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.MessageLogQueryDTO; +import com.haisen.laop.vo.WxMessageLogVO; +import org.springframework.data.domain.Page; + +/** + * 微信模板消息发送日志服务接口 —— Web 管理端查询能力。 + * + *

消费端:Web 管理后台"消息推送日志"页面,用于排查商家未收到通知的问题 + * (未关注服务号 / 提交被拒 / 送达失败等均可追溯)。

+ * + * @author duhao + */ +public interface WxMessageLogService { + + /** + * 分页查询模板消息发送日志,支持按接收人、业务类型、发送状态、openid 组合筛选。 + * + * @param query 查询条件(全部可选,含分页参数) + * @return 日志 VO 分页数据,按入库时间倒序 + */ + Page page(MessageLogQueryDTO query); +} diff --git a/src/main/java/com/haisen/laop/service/WxMpCallbackService.java b/src/main/java/com/haisen/laop/service/WxMpCallbackService.java new file mode 100644 index 0000000..27c94fe --- /dev/null +++ b/src/main/java/com/haisen/laop/service/WxMpCallbackService.java @@ -0,0 +1,47 @@ +package com.haisen.laop.service; + +/** + * 微信服务号回调事件处理服务。 + * + *

承载两类回调:① URL 服务器有效性验证(GET echostr);② 事件消息处理(POST XML), + * 包括模板消息送达结果(TEMPLATESENDJOBFINISH)回写日志、关注/取关事件绑定解绑服务号 openid。

+ * + * @author duhao + */ +public interface WxMpCallbackService { + + /** + * 处理微信服务器配置的 URL 有效性验证。 + * + *

微信 GET 请求携带 signature/timestamp/nonce/echostr,服务端按 + * {@code sha1(sort(token, timestamp, nonce))} 校验,通过则原样返回 echostr。

+ * + * @param signature 微信加密签名 + * @param timestamp 时间戳 + * @param nonce 随机数 + * @param echostr 随机字符串(验证通过原样返回) + * @return 验证通过返回 echostr;失败返回 null(Controller 输出 403) + */ + String verifyUrl(String signature, String timestamp, String nonce, String echostr); + + /** + * 校验微信回调请求签名(POST 事件消息同样携带 signature/timestamp/nonce,须先验签再处理)。 + * + * @param signature 微信加密签名 + * @param timestamp 时间戳 + * @param nonce 随机数 + * @return 签名合法返回 true + */ + boolean verifySignature(String signature, String timestamp, String nonce); + + /** + * 处理微信推送的事件消息(XML 明文)。 + * + *

处理范围:TEMPLATESENDJOBFINISH(送达结果回写日志)、 + * subscribe/unsubscribe(绑定/解绑服务号 openid)。其他事件静默忽略。

+ * + * @param xmlBody 微信推送的 XML 报文 + * @return 处理完成返回 "success"(微信约定的应答报文),报文非法返回 null + */ + String handleEventMessage(String xmlBody); +} diff --git a/src/main/java/com/haisen/laop/service/WxMpSubscribeService.java b/src/main/java/com/haisen/laop/service/WxMpSubscribeService.java new file mode 100644 index 0000000..f86083d --- /dev/null +++ b/src/main/java/com/haisen/laop/service/WxMpSubscribeService.java @@ -0,0 +1,20 @@ +package com.haisen.laop.service; + +/** + * 服务号关注状态查询服务。 + * + *

承载"发布任务/抢单等关键动作前校验用户是否关注服务号"的能力, + * 前端据此决定是否弹出关注引导弹窗(弹窗不阻断主流程)。

+ * + * @author duhao + */ +public interface WxMpSubscribeService { + + /** + * 查询用户当前是否关注服务号。 + * + * @param userId 用户 ID + * @return true 已关注;false 未关注 + */ + boolean isSubscribed(Long userId); +} diff --git a/src/main/java/com/haisen/laop/service/WxNotifyService.java b/src/main/java/com/haisen/laop/service/WxNotifyService.java new file mode 100644 index 0000000..33c86b6 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/WxNotifyService.java @@ -0,0 +1,30 @@ +package com.haisen.laop.service; + +import com.haisen.laop.dto.WxNotifyTaskDTO; + +/** + * 微信服务号模板消息通知服务。 + * + *

DB 持久化队列模型(不依赖 MQ 组件):业务事务提交后,事件监听器将发送任务快照 + * {@link WxNotifyTaskDTO} 持久化到 {@code wx_notify_task} 表(status=PENDING), + * 由专属消费者线程轮询 DB、CAS 占位后异步调微信接口发送。 + * 发送链路(含跳过/失败/重试)全量落库 {@code wx_message_log} 供 Web 端检索。

+ * + *

持久化队列的价值:① 服务重启后 PENDING 任务自动恢复消费,不丢失; + * ② 微信接口耗时(百毫秒级)不阻塞业务主流程;③ CAS 占位天然多实例安全。

+ * + * @author duhao + */ +public interface WxNotifyService { + + /** + * 将模板消息发送任务持久化到 DB 队列(INSERT wx_notify_task,status=PENDING)。 + * + *

DB 写入几乎不会失败(除非 DB 宕机),失败时由调用方 catch 并记日志, + * 不抛异常阻断业务。

+ * + * @param task 发送任务快照 + * @return 是否入队成功 + */ + boolean enqueue(WxNotifyTaskDTO task); +} diff --git a/src/main/java/com/haisen/laop/service/impl/AnnouncementServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/AnnouncementServiceImpl.java new file mode 100644 index 0000000..58ade80 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/AnnouncementServiceImpl.java @@ -0,0 +1,200 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.AnnouncementConstants; +import com.haisen.laop.common.enums.AnnouncementStatusEnum; +import com.haisen.laop.dto.AnnouncementQueryDTO; +import com.haisen.laop.dto.AnnouncementSaveDTO; +import com.haisen.laop.entity.Announcement; +import com.haisen.laop.repository.AnnouncementRepository; +import com.haisen.laop.service.AnnouncementService; +import com.haisen.laop.vo.AnnouncementVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 公告服务实现,承载通知公告管理的全部业务逻辑。 + * + *

职责边界:表单校验、动态条件拼装、软删除、状态切换均在本层完成, + * Repository 仅做数据读写,Controller 仅做参数接收。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AnnouncementServiceImpl implements AnnouncementService { + + private final AnnouncementRepository announcementRepository; + + @Override + public Page page(AnnouncementQueryDTO query) { + // 分页参数防御:页码非负、页大小夹在上限内 + int pageNo = query.getPageNo() == null || query.getPageNo() < 0 ? 0 : query.getPageNo(); + int pageSize = query.getPageSize() == null || query.getPageSize() <= 0 + ? AnnouncementConstants.DEFAULT_PAGE_SIZE + : Math.min(query.getPageSize(), AnnouncementConstants.MAX_PAGE_SIZE); + Pageable pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.DESC, "createdAt")); + + // 动态条件:固定"未软删除",可选"标题模糊 + 状态精确" + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.isNull(root.get("deletedAt"))); + if (StringUtils.isNotBlank(query.getTitle())) { + predicates.add(cb.like(root.get("title"), "%" + query.getTitle().trim() + "%")); + } + if (query.getStatus() != null) { + predicates.add(cb.equal(root.get("status"), query.getStatus())); + } + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + return announcementRepository.findAll(spec, pageable).map(this::toVO); + } + + @Override + public AnnouncementVO detail(Long id) { + return toVO(getExistingAnnouncement(id)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long create(AnnouncementSaveDTO dto) { + Announcement announcement = new Announcement(); + applyForm(announcement, dto); + Announcement saved = announcementRepository.save(announcement); + log.info("[公告管理] 新增公告成功, id={}, title={}", saved.getId(), saved.getTitle()); + return saved.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(Long id, AnnouncementSaveDTO dto) { + Announcement announcement = getExistingAnnouncement(id); + applyForm(announcement, dto); + announcementRepository.save(announcement); + log.info("[公告管理] 编辑公告成功, id={}, title={}", id, announcement.getTitle()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + Announcement announcement = getExistingAnnouncement(id); + // 软删除:只写 deleted_at,保留数据可追溯 + announcement.setDeletedAt(LocalDateTime.now()); + announcementRepository.save(announcement); + log.info("[公告管理] 删除公告成功, id={}, title={}", id, announcement.getTitle()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(Long id, Integer status) { + if (status == null + || (!Objects.equals(status, AnnouncementStatusEnum.HIDDEN.getCode()) + && !Objects.equals(status, AnnouncementStatusEnum.VISIBLE.getCode()))) { + throw new BusinessException("非法的状态值,仅允许显示/隐藏"); + } + Announcement announcement = getExistingAnnouncement(id); + announcement.setStatus(status); + announcementRepository.save(announcement); + log.info("[公告管理] 公告状态变更成功, id={}, status={}", id, status); + } + + @Override + public List listForMini(int limit) { + // 拉取条数夹在小程序端常量上下限内,防御异常入参 + int safeLimit = limit <= 0 + ? AnnouncementConstants.MINI_LIST_DEFAULT_LIMIT + : Math.min(limit, AnnouncementConstants.MINI_LIST_MAX_LIMIT); + LocalDateTime now = LocalDateTime.now(); + + // 固定条件:显示 + 未软删 + 在生效窗口期内(空值视为不限制) + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.equal(root.get("status"), AnnouncementStatusEnum.VISIBLE.getCode())); + predicates.add(cb.isNull(root.get("deletedAt"))); + predicates.add(cb.or(cb.isNull(root.get("validStartTime")), + cb.lessThanOrEqualTo(root.get("validStartTime"), now))); + predicates.add(cb.or(cb.isNull(root.get("validEndTime")), + cb.greaterThanOrEqualTo(root.get("validEndTime"), now))); + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + Pageable pageable = PageRequest.of(0, safeLimit); + return announcementRepository.findAll(spec, pageable) + .getContent().stream().map(this::toVO).toList(); + } + + @Override + public AnnouncementVO detailForMini(Long id) { + Announcement announcement = announcementRepository.findById(id).orElse(null); + if (announcement == null || announcement.getDeletedAt() != null + || announcement.getStatus() == null + || !Objects.equals(announcement.getStatus(), AnnouncementStatusEnum.VISIBLE.getCode())) { + throw new BusinessException("公告不存在或已下架"); + } + // 生效窗口校验:未到开始或已过结束均视为不可见 + LocalDateTime now = LocalDateTime.now(); + if (announcement.getValidStartTime() != null && announcement.getValidStartTime().isAfter(now)) { + throw new BusinessException("公告不存在或已下架"); + } + if (announcement.getValidEndTime() != null && announcement.getValidEndTime().isBefore(now)) { + throw new BusinessException("公告不存在或已下架"); + } + return toVO(announcement); + } + + // ==================== 私有方法 ==================== + + /** + * 将表单 DTO 应用到公告实体(新增与编辑共用,保证两条链路校验规则完全一致)。 + */ + private void applyForm(Announcement announcement, AnnouncementSaveDTO dto) { + announcement.setTitle(dto.getTitle().trim()); + announcement.setContent(dto.getContent().trim()); + announcement.setStatus(dto.getStatus()); + } + + /** + * 按 ID 查询未软删除的公告,不存在时抛业务异常。 + */ + private Announcement getExistingAnnouncement(Long id) { + Announcement announcement = announcementRepository.findById(id).orElse(null); + if (announcement == null || announcement.getDeletedAt() != null) { + throw new BusinessException("公告不存在或已删除"); + } + return announcement; + } + + /** + * 公告实体 → VO。 + */ + private AnnouncementVO toVO(Announcement announcement) { + return AnnouncementVO.builder() + .id(announcement.getId()) + .title(announcement.getTitle()) + .content(announcement.getContent()) + .status(announcement.getStatus()) + .createdAt(announcement.getCreatedAt()) + .updatedAt(announcement.getUpdatedAt()) + .build(); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/AppBannerServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/AppBannerServiceImpl.java new file mode 100644 index 0000000..d7bc4c0 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/AppBannerServiceImpl.java @@ -0,0 +1,180 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.AppBannerConstants; +import com.haisen.laop.common.enums.BannerStatusEnum; +import com.haisen.laop.dto.AppBannerQueryDTO; +import com.haisen.laop.dto.AppBannerSaveDTO; +import com.haisen.laop.entity.AppBanner; +import com.haisen.laop.repository.AppBannerRepository; +import com.haisen.laop.service.AppBannerService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.AppBannerVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 轮播图服务实现,承载首页轮播图管理的全部业务逻辑。 + * + *

职责边界:表单校验、动态条件拼装、软删除、状态切换、排序调整均在本层完成, + * Repository 仅做数据读写,Controller 仅做参数接收。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AppBannerServiceImpl implements AppBannerService { + + private final AppBannerRepository appBannerRepository; + private final FileUrlResolver fileUrlResolver; + + @Override + public Page page(AppBannerQueryDTO query) { + // 分页参数防御:页码非负、页大小夹在上限内 + int pageNo = query.getPageNo() == null || query.getPageNo() < 0 ? 0 : query.getPageNo(); + int pageSize = query.getPageSize() == null || query.getPageSize() <= 0 + ? AppBannerConstants.DEFAULT_PAGE_SIZE + : Math.min(query.getPageSize(), AppBannerConstants.MAX_PAGE_SIZE); + Pageable pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.ASC, "sortOrder") + .and(Sort.by(Sort.Direction.ASC, "id"))); + + // 动态条件:固定"未软删除",可选"状态精确匹配" + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.isNull(root.get("deletedAt"))); + if (query.getStatus() != null) { + predicates.add(cb.equal(root.get("status"), query.getStatus())); + } + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.asc(root.get("sortOrder")), cb.asc(root.get("id"))) + .getRestriction(); + }; + + return appBannerRepository.findAll(spec, pageable).map(this::toVO); + } + + @Override + public AppBannerVO detail(Long id) { + return toVO(getExistingBanner(id)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long create(AppBannerSaveDTO dto) { + AppBanner banner = new AppBanner(); + applyForm(banner, dto); + AppBanner saved = appBannerRepository.save(banner); + log.info("[轮播图管理] 新增轮播图成功, id={}", saved.getId()); + return saved.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(Long id, AppBannerSaveDTO dto) { + AppBanner banner = getExistingBanner(id); + applyForm(banner, dto); + appBannerRepository.save(banner); + log.info("[轮播图管理] 编辑轮播图成功, id={}", id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + AppBanner banner = getExistingBanner(id); + // 软删除:只写 deleted_at,保留数据可追溯 + banner.setDeletedAt(LocalDateTime.now()); + appBannerRepository.save(banner); + log.info("[轮播图管理] 删除轮播图成功, id={}", id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(Long id, Integer status) { + if (status == null + || (!Objects.equals(status, BannerStatusEnum.HIDDEN.getCode()) + && !Objects.equals(status, BannerStatusEnum.VISIBLE.getCode()))) { + throw new BusinessException("非法的状态值,仅允许显示/隐藏"); + } + AppBanner banner = getExistingBanner(id); + banner.setStatus(status); + appBannerRepository.save(banner); + log.info("[轮播图管理] 轮播图状态变更成功, id={}, status={}", id, status); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateSort(Long id, Integer sortOrder) { + AppBanner banner = getExistingBanner(id); + banner.setSortOrder(sortOrder); + appBannerRepository.save(banner); + log.info("[轮播图管理] 轮播图排序调整成功, id={}, sortOrder={}", id, sortOrder); + } + + @Override + @Transactional(readOnly = true) + public List listForMini() { + return appBannerRepository + .findByStatusAndDeletedAtIsNullOrderBySortOrderAscIdAsc( + BannerStatusEnum.VISIBLE.getCode()) + .stream() + .map(this::toVO) + .toList(); + } + + // ==================== 私有方法 ==================== + + /** + * 将表单 DTO 应用到轮播图实体(新增与编辑共用)。 + */ + private void applyForm(AppBanner banner, AppBannerSaveDTO dto) { + banner.setImageFileId(dto.getImageFileId()); + banner.setLinkType(StringUtils.trimToNull(dto.getLinkType())); + banner.setLinkUrl(StringUtils.trimToNull(dto.getLinkUrl())); + banner.setSortOrder(dto.getSortOrder()); + banner.setStatus(dto.getStatus()); + } + + /** + * 按 ID 查询未软删除的轮播图,不存在时抛业务异常。 + */ + private AppBanner getExistingBanner(Long id) { + AppBanner banner = appBannerRepository.findById(id).orElse(null); + if (banner == null || banner.getDeletedAt() != null) { + throw new BusinessException("轮播图不存在或已删除"); + } + return banner; + } + + /** + * 轮播图实体 → VO,图片 fileId 通过 FileUrlResolver 解析为完整 URL。 + */ + private AppBannerVO toVO(AppBanner banner) { + return AppBannerVO.builder() + .id(banner.getId()) + .imageFileId(banner.getImageFileId()) + .imageUrl(fileUrlResolver.resolveAbsoluteUrl(banner.getImageFileId())) + .linkType(banner.getLinkType()) + .linkUrl(banner.getLinkUrl()) + .sortOrder(banner.getSortOrder()) + .status(banner.getStatus()) + .createdAt(banner.getCreatedAt()) + .updatedAt(banner.getUpdatedAt()) + .build(); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/AppConfigServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/AppConfigServiceImpl.java new file mode 100644 index 0000000..94eb900 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/AppConfigServiceImpl.java @@ -0,0 +1,133 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.PointsConstants; +import com.haisen.laop.common.constants.WxMessageConstants; +import com.haisen.laop.dto.AppConfigChangedEvent; +import com.haisen.laop.entity.AppConfig; +import com.haisen.laop.repository.AppConfigRepository; +import com.haisen.laop.service.AppConfigService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 平台功能配置服务实现,承载 KV 形式的功能开关/参数维护。 + * + *

职责边界: + *

    + *
  • 配置项"只能改值"——key 由 Flyway 迁移脚本在部署时一次性 INSERT,不允许运行时新增/删除;
  • + *
  • 修改时按配置键做类型校验(布尔开关只能 0/1,数值参数必须落在约定区间);
  • + *
  • 修改时自动刷新 updated_at 和 updated_by,保留操作审计能力。
  • + *
+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AppConfigServiceImpl implements AppConfigService { + + /** 布尔开关取值:关闭。 */ + private static final String SWITCH_OFF = "0"; + + /** 布尔开关取值:开启。 */ + private static final String SWITCH_ON = "1"; + + private final AppConfigRepository appConfigRepository; + private final ApplicationEventPublisher applicationEventPublisher; + + @Override + public List listAll() { + return appConfigRepository.findAll(); + } + + @Override + public String getValue(String configKey) { + return appConfigRepository.findById(configKey) + .map(AppConfig::getConfigValue) + .orElse(null); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateValue(String configKey, String configValue, String updatedBy) { + AppConfig config = appConfigRepository.findById(configKey).orElse(null); + if (config == null) { + throw new BusinessException("配置项不存在:" + configKey); + } + validateConfigValue(configKey, configValue); + + String oldValue = config.getConfigValue(); + config.setConfigValue(configValue.trim()); + config.setUpdatedAt(LocalDateTime.now()); + config.setUpdatedBy(updatedBy); + appConfigRepository.save(config); + + // 发布变更事件:事件本身在事务提交后由监听器处理(@TransactionalEventListener(AFTER_COMMIT)), + // 保证"事务回滚则不通知",避免消费者收到错误的开关状态。 + applicationEventPublisher.publishEvent(new AppConfigChangedEvent(configKey, configValue.trim())); + + log.info("[功能配置] key={} 从 '{}' 更新为 '{}'", configKey, oldValue, configValue.trim()); + } + + @Override + public boolean isEnabled(String configKey) { + String value = getValue(configKey); + return SWITCH_ON.equals(value); + } + + @Override + public int getIntValue(String configKey, int defaultValue) { + String value = getValue(configKey); + if (value == null || value.isBlank()) { + return defaultValue; + } + try { + return Integer.parseInt(value.trim()); + } catch (NumberFormatException e) { + // 配置被写入非法值时不应打断主业务(如发布任务),降级为兜底默认值并告警 + log.warn("[功能配置] 数值型配置无法解析,使用兜底默认值 key={}, value={}, defaultValue={}", + configKey, value, defaultValue); + return defaultValue; + } + } + + /** + * 按配置键校验值合法性:所有配置不可为空白;布尔开关只能 {@code 0/1}; + * 数值型配置(见 {@link PointsConstants#NUMERIC_CONFIG_KEYS})必须是约定区间内的整数。 + * + * @param configKey 配置键 + * @param configValue 待写入的配置值 + */ + private void validateConfigValue(String configKey, String configValue) { + if (configValue == null || configValue.isBlank()) { + throw new BusinessException("配置值不能为空"); + } + String trimmed = configValue.trim(); + + if (PointsConstants.NUMERIC_CONFIG_KEYS.contains(configKey)) { + int parsed; + try { + parsed = Integer.parseInt(trimmed); + } catch (NumberFormatException e) { + throw new BusinessException("配置值必须为整数"); + } + if (parsed < PointsConstants.MIN_CONFIG_POINTS || parsed > PointsConstants.MAX_CONFIG_POINTS) { + throw new BusinessException("配置值超出允许范围(" + + PointsConstants.MIN_CONFIG_POINTS + "~" + PointsConstants.MAX_CONFIG_POINTS + ")"); + } + return; + } + + if (WxMessageConstants.CONFIG_KEY_MP_PUSH_ENABLED.equals(configKey) + && !SWITCH_OFF.equals(trimmed) && !SWITCH_ON.equals(trimmed)) { + throw new BusinessException("开关类配置值只能为 0 或 1"); + } + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/CertServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/CertServiceImpl.java new file mode 100644 index 0000000..c542b8f --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/CertServiceImpl.java @@ -0,0 +1,249 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.LicenseTypeEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.dto.MerchantCertifyDTO; +import com.haisen.laop.dto.PilotCertifyDTO; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.Pilot; +import com.haisen.laop.entity.PilotLicense; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotLicenseRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.service.CertService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.MerchantCertVO; +import com.haisen.laop.vo.PilotCertVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 认证服务实现,承载飞手/商家认证的提交校验、记录维护与 VO 组装。 + * + *

审核策略(当前阶段):提交即通过(certStatus = 已认证), + * 因为 CAAC 执照核验接口与人工审核后台尚未接入;后续接入时只需将此处改为 + * 写入 {@link CertStatusEnum#PENDING},并在后台审核通过后更新为已认证, + * 前端标签与权限逻辑无需变动。

+ * + *

重复提交规则:已认证用户禁止重复提交;未认证/认证失败用户再次提交时 + * 覆盖更新原记录(保留已有认证/运营数据),避免产生重复认证数据。

+ * + * @author duhao + */ +@Service +@RequiredArgsConstructor +public class CertServiceImpl implements CertService { + + private final PilotRepository pilotRepository; + private final PilotLicenseRepository pilotLicenseRepository; + private final MerchantRepository merchantRepository; + private final FileUrlResolver fileUrlResolver; + + @Override + @Transactional + public PilotCertVO submitPilot(Long userId, PilotCertifyDTO dto) { + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + + // 吊销拦截:被强制取消资格的飞手不可重新提交认证绕过吊销,需管理员恢复 + if (pilot != null + && Objects.equals(pilot.getCertStatus(), CertStatusEnum.REVOKED.getCode())) { + throw new BusinessException("您的资格已被强制取消,如需恢复请联系管理员"); + } + + if (pilot == null) { + pilot = new Pilot(); + pilot.setUserId(userId); + } + + pilot.setName(dto.getName().trim()); + pilot.setPhone(dto.getPhone().trim()); + + // 覆盖更新执照:先软删旧记录,再批量保存新记录 + pilotLicenseRepository.deleteByPilotId(pilot.getId()); + List newLicenses = new ArrayList<>(); + for (PilotCertifyDTO.LicenseItemDTO item : dto.getLicenses()) { + // 执照类型按枚举精确校验,拒绝非法/越界编码,避免脏数据落库 + LicenseTypeEnum licenseType = LicenseTypeEnum.of(item.getLicenseType()); + if (licenseType == null) { + throw new BusinessException("执照类型不合法"); + } + PilotLicense pl = new PilotLicense(); + pl.setPilot(pilot); + pl.setLicenseType(licenseType.getCode()); + pl.setLicenseNo(item.getLicenseNo().trim()); + pl.setLicenseFileId(item.getLicenseFileId()); + pl.setLicenseDate(item.getLicenseDate()); + newLicenses.add(pl); + } + pilotLicenseRepository.saveAll(newLicenses); + + // 服务类型为飞手能力属性,选填;编码合法性校验后分号拼接落库 + pilot.setServiceTypes(joinCodes(validateServiceTypes(dto.getServiceTypes()))); + + // 提交即通过:见类注释"审核策略",接入审核后改为 CertStatusEnum.PENDING + pilot.setCertStatus(CertStatusEnum.CERTIFIED.getCode()); + pilot.setCertTime(LocalDateTime.now()); + + pilotRepository.save(pilot); + return buildPilotVO(pilot); + } + + @Override + public PilotCertVO getPilotCert(Long userId) { + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + if (pilot == null) { + // 从未提交过认证:仅返回未认证状态,前端据此渲染空白表单 + return PilotCertVO.builder() + .certStatus(CertStatusEnum.NONE.getCode()) + .build(); + } + return buildPilotVO(pilot); + } + + @Override + @Transactional + public MerchantCertVO submitMerchant(Long userId, MerchantCertifyDTO dto) { + Merchant merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(userId); + + // 吊销拦截:被强制取消资格的商家不可重新提交认证绕过吊销,需管理员恢复 + if (merchant != null + && Objects.equals(merchant.getCertStatus(), CertStatusEnum.REVOKED.getCode())) { + throw new BusinessException("您的资格已被强制取消,如需恢复请联系管理员"); + } + + if (merchant == null) { + merchant = new Merchant(); + merchant.setUserId(userId); + } + + merchant.setName(dto.getName().trim()); + merchant.setContactName(dto.getContactName().trim()); + merchant.setContactPhone(dto.getContactPhone().trim()); + merchant.setAddress(StringUtils.trimToNull(dto.getAddress())); + merchant.setDescription(StringUtils.trimToNull(dto.getDescription())); + merchant.setDoorImage(dto.getDoorImageId()); + merchant.setLicenseFileId(dto.getLicenseFileId()); + + // 提交即通过:见类注释"审核策略",接入审核后改为 CertStatusEnum.PENDING + merchant.setCertStatus(CertStatusEnum.CERTIFIED.getCode()); + merchant.setCertTime(LocalDateTime.now()); + + merchantRepository.save(merchant); + return buildMerchantVO(merchant); + } + + @Override + public MerchantCertVO getMerchantCert(Long userId) { + Merchant merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(userId); + if (merchant == null) { + return MerchantCertVO.builder() + .certStatus(CertStatusEnum.NONE.getCode()) + .build(); + } + return buildMerchantVO(merchant); + } + + /** + * 校验服务类型编码合法性(必须命中 {@link TaskTypeEnum}),非法编码直接拒绝; + * 入参为空返回 null(选填)。 + */ + private List validateServiceTypes(List codes) { + if (codes == null || codes.isEmpty()) { + return null; + } + for (Integer code : codes) { + if (code == null || TaskTypeEnum.of(code) == null) { + throw new BusinessException("服务类型不合法"); + } + } + return codes; + } + + /** + * 服务类型编码列表转分号拼接串(如 [1,3] → "1;3"),空列表返回 null。 + */ + private String joinCodes(List codes) { + if (codes == null || codes.isEmpty()) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (Integer code : codes) { + if (sb.length() > 0) { + sb.append(';'); + } + sb.append(code); + } + return sb.toString(); + } + + /** + * 分号拼接串拆回编码列表(如 "1;3" → [1, 3]),防御性忽略非法片段。 + */ + private List splitCodes(String joined) { + List codes = new ArrayList<>(); + if (StringUtils.isBlank(joined)) { + return codes; + } + for (String piece : joined.split(";")) { + try { + codes.add(Integer.parseInt(piece.trim())); + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码片段 + } + } + return codes; + } + + private PilotCertVO buildPilotVO(Pilot pilot) { + return PilotCertVO.builder() + .certStatus(pilot.getCertStatus()) + .name(pilot.getName()) + .phone(pilot.getPhone()) + .licenses(buildPilotLicenseItems(pilot.getId())) + .certTime(pilot.getCertTime()) + .build(); + } + + /** + * 单独查 PilotLicenseRepository 组装执照回显 VO(遵循"一对多分步查"规约)。 + */ + private List buildPilotLicenseItems(Long pilotId) { + List items = new ArrayList<>(); + for (PilotLicense pl : pilotLicenseRepository.findByPilotIdAndDeletedAtIsNullOrderByIdAsc(pilotId)) { + Long fileId = pl.getLicenseFileId(); + items.add(PilotCertVO.LicenseItemVO.builder() + .licenseType(pl.getLicenseType()) + .licenseNo(pl.getLicenseNo()) + .licenseFileId(fileId) + .licenseImageUrl(fileUrlResolver.resolveAbsoluteUrl(fileId)) + .licenseDate(pl.getLicenseDate()) + .build()); + } + return items; + } + + private MerchantCertVO buildMerchantVO(Merchant merchant) { + return MerchantCertVO.builder() + .certStatus(merchant.getCertStatus()) + .name(merchant.getName()) + .address(merchant.getAddress()) + .contactName(merchant.getContactName()) + .contactPhone(merchant.getContactPhone()) + .description(merchant.getDescription()) + .doorImageId(merchant.getDoorImage()) + .doorImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getDoorImage())) + .licenseFileId(merchant.getLicenseFileId()) + .licenseImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getLicenseFileId())) + .certTime(merchant.getCertTime()) + .build(); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/CourseServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/CourseServiceImpl.java new file mode 100644 index 0000000..ad71649 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/CourseServiceImpl.java @@ -0,0 +1,633 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.CourseConstants; +import com.haisen.laop.common.enums.AppointmentStatusEnum; +import com.haisen.laop.common.enums.CourseCategoryEnum; +import com.haisen.laop.common.enums.CourseStatusEnum; +import com.haisen.laop.common.enums.ScheduleTypeEnum; +import com.haisen.laop.common.enums.YesNoEnum; +import com.haisen.laop.dto.CourseAppointmentDTO; +import com.haisen.laop.dto.CourseQueryDTO; +import com.haisen.laop.dto.CourseSaveDTO; +import com.haisen.laop.entity.Course; +import com.haisen.laop.entity.CourseAppointment; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.SysFile; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.CourseAppointmentRepository; +import com.haisen.laop.repository.CourseRepository; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.SysFileRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.CourseService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.AdminCourseAppointmentVO; +import com.haisen.laop.vo.CourseAppointmentVO; +import com.haisen.laop.vo.CourseVO; +import com.haisen.laop.vo.MiniCourseVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeSet; +import java.util.stream.Collectors; + +/** + * 课程服务实现,承载研学课程管理的全部业务逻辑。 + * + *

职责边界:表单校验(排课双模式互斥校验)、多选字段组装(数组 → 分号串)、 + * 跨 Repository 编排(课程 + 文件)、VO 组装(宣传图 URL 解析)均在本层完成, + * Repository 仅做数据读写,Controller 仅做参数接收。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CourseServiceImpl implements CourseService { + + private final CourseRepository courseRepository; + private final CourseAppointmentRepository courseAppointmentRepository; + private final MerchantRepository merchantRepository; + private final SysFileRepository sysFileRepository; + private final UserRepository userRepository; + private final FileUrlResolver fileUrlResolver; + + @Override + public Page page(CourseQueryDTO query) { + // 分页参数防御:页码非负、页大小夹在上限内,避免一次拉取全量数据 + int pageNo = query.getPageNo() == null || query.getPageNo() < 0 ? 0 : query.getPageNo(); + int pageSize = query.getPageSize() == null || query.getPageSize() <= 0 + ? CourseConstants.DEFAULT_PAGE_SIZE + : Math.min(query.getPageSize(), CourseConstants.MAX_PAGE_SIZE); + Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by(Sort.Direction.DESC, "createdAt")); + + // 动态条件:固定"未软删除",可选"名称模糊 + 状态精确" + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.isNull(root.get("deletedAt"))); + if (StringUtils.isNotBlank(query.getName())) { + predicates.add(cb.like(root.get("name"), "%" + query.getName().trim() + "%")); + } + if (query.getStatus() != null) { + predicates.add(cb.equal(root.get("status"), query.getStatus())); + } + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + return courseRepository.findAll(spec, pageable).map(this::toVO); + } + + @Override + public CourseVO detail(Long id) { + return toVO(getExistingCourse(id)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long create(CourseSaveDTO dto) { + Course course = new Course(); + applyForm(course, dto); + Course saved = courseRepository.save(course); + log.info("[课程管理] 新增课程成功, id={}, name={}", saved.getId(), saved.getName()); + return saved.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(Long id, CourseSaveDTO dto) { + Course course = getExistingCourse(id); + applyForm(course, dto); + courseRepository.save(course); + log.info("[课程管理] 编辑课程成功, id={}, name={}", id, course.getName()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + Course course = getExistingCourse(id); + // 软删除:只写 deleted_at,保留数据可追溯 + course.setDeletedAt(LocalDateTime.now()); + courseRepository.save(course); + log.info("[课程管理] 删除课程成功, id={}, name={}", id, course.getName()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(Long id, Integer status) { + // 已满员(2)由名额逻辑控制,上下架接口只允许 0/1 + if (status == null + || (!Objects.equals(status, CourseStatusEnum.OFF_SHELF.getCode()) + && !Objects.equals(status, CourseStatusEnum.ON_SHELF.getCode()))) { + throw new BusinessException("非法的状态值,仅允许上架/下架"); + } + Course course = getExistingCourse(id); + course.setStatus(status); + courseRepository.save(course); + log.info("[课程管理] 课程状态变更成功, id={}, status={}", id, status); + } + + // ==================== 小程序端:课程展示与预约 ==================== + + @Override + public Page listForMini(String name, Integer category, Pageable pageable) { + // 动态条件:固定"上架 + 未软删",可选"名称模糊 + 分类精确" + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.equal(root.get("status"), CourseStatusEnum.ON_SHELF.getCode())); + predicates.add(cb.isNull(root.get("deletedAt"))); + if (StringUtils.isNotBlank(name)) { + predicates.add(cb.like(root.get("name"), "%" + name.trim() + "%")); + } + if (category != null) { + predicates.add(cb.equal(root.get("category"), category)); + } + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + // 列表卡片仅需头图 URL,不解析详情图集(节省文件查询开销) + return courseRepository.findAll(spec, pageable).map(this::toMiniVO); + } + + @Override + public MiniCourseVO detailForMini(Long id) { + Course course = courseRepository.findById(id).orElse(null); + if (course == null || course.getDeletedAt() != null + || course.getStatus() == null + || !Objects.equals(course.getStatus(), CourseStatusEnum.ON_SHELF.getCode())) { + throw new BusinessException("课程不存在或已下架"); + } + + MiniCourseVO vo = toMiniVO(course); + // 详情额外解析课程图集绝对 URL + vo.setImageUrls(resolveImageUrls(course.getImages())); + // 清洗富文本图片:去掉 标签的 width/height 属性,让前端 CSS 的 max-width:100% 生效, + // 防止后台上传的大图带原始宽高导致小程序端溢出卡片边界 + vo.setDescription(sanitizeDescriptionImages(vo.getDescription())); + // 组装所属商家名称 + if (course.getMerchantId() != null) { + merchantRepository.findByIdAndDeletedAtIsNull(course.getMerchantId()) + .ifPresent(merchant -> vo.setMerchantName(merchant.getName())); + } + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createAppointment(Long userId, CourseAppointmentDTO dto) { + // 1. 校验课程存在且在上架状态(已满员/下架不可预约) + Course course = courseRepository.findById(dto.getCourseId()).orElse(null); + if (course == null || course.getDeletedAt() != null) { + throw new BusinessException("课程不存在或已删除"); + } + Integer status = course.getStatus(); + if (status == null || Objects.equals(status, CourseStatusEnum.OFF_SHELF.getCode())) { + throw new BusinessException("课程已下架,无法预约"); + } + if (Objects.equals(status, CourseStatusEnum.FULL.getCode())) { + throw new BusinessException("课程已满员,无法预约"); + } + + // 2. 前置校验:同一用户对同一课程同一时段是否已有有效预约(提前拦截,避免命中唯一索引报错) + boolean exists = courseAppointmentRepository + .existsByUserIdAndCourseIdAndAppointmentDateAndStatusNotAndDeletedAtIsNull( + userId, dto.getCourseId(), dto.getAppointmentDate(), + AppointmentStatusEnum.CANCELLED.getCode()); + if (exists) { + throw new BusinessException("您已预约该课程该时段,请勿重复预约"); + } + + // 3. 构建预约实体(金额由后端按单价 × 人数计算,前端不传金额) + CourseAppointment appointment = new CourseAppointment(); + appointment.setUserId(userId); + appointment.setCourseId(course.getId()); + appointment.setMerchantId(course.getMerchantId()); + appointment.setAppointmentDate(dto.getAppointmentDate()); + appointment.setPersonCount(dto.getPersonCount()); + appointment.setContactName(dto.getContactName().trim()); + appointment.setContactPhone(dto.getContactPhone().trim()); + appointment.setRemark(StringUtils.isBlank(dto.getRemark()) ? null : dto.getRemark().trim()); + appointment.setStatus(AppointmentStatusEnum.ACTIVE.getCode()); + + // 金额 = 课程单价 × 人数,保留两位小数(HALF_UP 符合金额计算惯例) + BigDecimal amount = course.getPrice() + .multiply(BigDecimal.valueOf(dto.getPersonCount())) + .setScale(2, RoundingMode.HALF_UP); + appointment.setAmount(amount); + + CourseAppointment saved = courseAppointmentRepository.save(appointment); + log.info("[课程预约] 新增预约成功, id={}, courseId={}, userId={}", + saved.getId(), course.getId(), userId); + return saved.getId(); + } + + @Override + public Page myAppointments(Long userId, Pageable pageable) { + Page appointments = courseAppointmentRepository + .findByUserIdAndDeletedAtIsNullOrderByCreatedAtDesc(userId, pageable); + + // 分步批量查课程信息(避免 JOIN 笛卡尔膨胀),组装课程名称与宣传图 URL + Set courseIds = appointments.stream() + .map(CourseAppointment::getCourseId) + .collect(Collectors.toSet()); + Map courseMap = courseIds.isEmpty() + ? Collections.emptyMap() + : courseRepository.findAllById(courseIds).stream() + .collect(Collectors.toMap(Course::getId, c -> c)); + + return appointments.map(appt -> toAppointmentVO(appt, courseMap)); + } + + // ==================== 私有方法:VO 组装 ==================== + + /** + * 课程实体 → 小程序列表 VO(不解析图集,节省文件查询开销)。 + */ + private MiniCourseVO toMiniVO(Course course) { + return MiniCourseVO.builder() + .id(course.getId()) + .name(course.getName()) + .coverUrl(fileUrlResolver.resolveAbsoluteUrl(course.getCoverImageId())) + .price(course.getPrice()) + .category(course.getCategory()) + .categoryName(CourseCategoryEnum.nameOf(course.getCategory())) + .tags(course.getTags()) + .targetAge(course.getTargetAge()) + .location(course.getLocation()) + .latitude(course.getLatitude()) + .longitude(course.getLongitude()) + // 课程简介(富文本 HTML,detailForMini 与 listForMini 共用此方法) + .description(course.getDescription()) + .scheduleType(course.getScheduleType()) + .scheduleWeekDays(course.getScheduleWeekDays()) + .scheduleDates(course.getScheduleDates()) + .contactName(course.getContactName()) + .contactPhone(course.getContactPhone()) + .merchantId(course.getMerchantId()) + .status(course.getStatus()) + .featured(course.getFeatured()) + .createdAt(course.getCreatedAt()) + .build(); + } + + // ==================== 小程序端:首页精选课程 ==================== + + @Override + public List listFeatured(int limit) { + // 防御上限,避免前端传入超大值 + int safeLimit = Math.max(1, Math.min(limit, CourseConstants.MAX_PAGE_SIZE)); + Pageable pageable = PageRequest.of(0, safeLimit, Sort.by(Sort.Direction.DESC, "createdAt")); + + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.equal(root.get("status"), CourseStatusEnum.ON_SHELF.getCode())); + predicates.add(cb.equal(root.get("featured"), YesNoEnum.YES.getCode())); + predicates.add(cb.isNull(root.get("deletedAt"))); + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + List courses = courseRepository.findAll(spec, pageable).getContent(); + + // 批量查商家名,避免循环内单条查(detailForMini 是单条,这里是列表) + Set merchantIds = courses.stream() + .map(Course::getMerchantId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map merchantMap = merchantIds.isEmpty() + ? Collections.emptyMap() + : merchantRepository.findAllById(merchantIds).stream() + .collect(Collectors.toMap(Merchant::getId, m -> m)); + + return courses.stream().map(course -> { + MiniCourseVO vo = toMiniVO(course); + Merchant merchant = merchantMap.get(course.getMerchantId()); + if (merchant != null) { + vo.setMerchantName(merchant.getName()); + } + return vo; + }).toList(); + } + + /** + * 课程图片分号串 → 绝对 URL 列表(按原始顺序解析,无效 fileId 跳过并告警)。 + */ + private List resolveImageUrls(String images) { + if (StringUtils.isBlank(images)) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (String fileIdStr : images.split(CourseConstants.SEPARATOR)) { + try { + Long fileId = Long.parseLong(fileIdStr.trim()); + String url = fileUrlResolver.resolveAbsoluteUrl(fileId); + if (url != null) { + result.add(url); + } + } catch (NumberFormatException ex) { + log.warn("[课程图片] 非法的 fileId:{}", fileIdStr); + } + } + return result; + } + + /** + * 预约实体 → VO,组装课程名称与宣传图绝对 URL(避免前端再发课程详情请求)。 + */ + private CourseAppointmentVO toAppointmentVO(CourseAppointment appt, Map courseMap) { + Course course = courseMap.get(appt.getCourseId()); + return CourseAppointmentVO.builder() + .id(appt.getId()) + .courseId(appt.getCourseId()) + .courseName(course != null ? course.getName() : null) + .coverUrl(course != null ? fileUrlResolver.resolveAbsoluteUrl(course.getCoverImageId()) : null) + .appointmentDate(appt.getAppointmentDate()) + .personCount(appt.getPersonCount()) + .contactName(appt.getContactName()) + .contactPhone(appt.getContactPhone()) + .amount(appt.getAmount()) + .status(appt.getStatus()) + .statusName(appointmentStatusName(appt.getStatus())) + .remark(appt.getRemark()) + .createdAt(appt.getCreatedAt()) + .build(); + } + + /** + * 预约状态编码 → 中文名,用于"我的预约"列表展示状态标签。 + * 二态模型:1已预约 / 2已取消(终态)。 + */ + private String appointmentStatusName(Integer status) { + AppointmentStatusEnum statusEnum = AppointmentStatusEnum.of(status); + if (statusEnum == null) { + return null; + } + return switch (statusEnum) { + case ACTIVE -> "已预约"; + case CANCELLED -> "已取消"; + }; + } + + /** + * 清洗课程简介 HTML 中的 {@code } 标签,去掉 width/height 属性与 style 内的宽高声明。 + * + *

背景:管理后台富文本编辑器上传图片时会自动写入原始像素宽高 + * (如 {@code }), + * 小程序端 RichText 按内联宽高渲染会溢出卡片边界。去掉固定宽高后, + * 前端 CSS {@code max-width:100%; height:auto} 才能生效, + * 图片自然等比例缩小到容器内。

+ * + * @param html 原始富文本 HTML,可为 null + * @return 清洗后的 HTML,null 输入原样返回 + */ + private String sanitizeDescriptionImages(String html) { + if (StringUtils.isBlank(html)) { + return html; + } + // 1. 去掉 width="..." 或 width='...' 属性(含数字和百分比) + String cleaned = html.replaceAll("(?i)\\s+width\\s*=\\s*[\"'][^\"']*[\"']", ""); + // 2. 去掉 height="..." 属性 + cleaned = cleaned.replaceAll("(?i)\\s+height\\s*=\\s*[\"'][^\"']*[\"']", ""); + // 3. 去掉 style="..." 中 width/height 的声明(如 style="width:1080px;max-width:100%") + cleaned = cleaned.replaceAll("(?i)(width|height)\\s*:\\s*[^;\"']+;?", ""); + return cleaned; + } + + // ==================== 私有方法:表单应用与校验 ==================== + + /** + * 将表单 DTO 应用到课程实体(新增与编辑共用,保证两条链路校验规则完全一致)。 + */ + private void applyForm(Course course, CourseSaveDTO dto) { + course.setName(dto.getName().trim()); + course.setPrice(dto.getPrice()); + course.setStatus(dto.getStatus()); + course.setDescription(dto.getDescription()); + + // 宣传图片:校验文件存在且未删除,防止前端提交无效 fileId 导致卡片裂图 + course.setCoverImageId(validateCoverImage(dto.getCoverImageId())); + + // 排课双模式互斥校验与组装 + course.setScheduleType(dto.getScheduleType()); + applySchedule(course, dto); + + course.setContactName(dto.getContactName().trim()); + course.setContactPhone(dto.getContactPhone().trim()); + + // 精选标记:非必填,null 或非法值兜底为"否" + Integer featured = dto.getFeatured(); + course.setFeatured(Objects.equals(featured, YesNoEnum.YES.getCode()) + ? YesNoEnum.YES.getCode() + : YesNoEnum.NO.getCode()); + } + + /** + * 校验宣传图片 fileId 有效性并原样返回;文件不存在或已删除时抛业务异常。 + */ + private Long validateCoverImage(Long coverImageId) { + SysFile file = sysFileRepository.findById(coverImageId).orElse(null); + if (file == null || file.getDeletedAt() != null) { + throw new BusinessException("课程宣传图片不存在,请重新上传"); + } + return coverImageId; + } + + /** + * 排课双模式互斥校验与分号串组装。 + * + *

每周重复:星期编码去重升序后拼接,同时清空日期串; + * 日期排课:日期格式校验(yyyy-MM-dd)、去重升序后拼接,同时清空星期串。 + * 保证实体上始终只有一种模式的数据,避免小程序端展示歧义。

+ */ + private void applySchedule(Course course, CourseSaveDTO dto) { + boolean weekly = Objects.equals(dto.getScheduleType(), ScheduleTypeEnum.WEEKLY.getCode()); + boolean byDate = Objects.equals(dto.getScheduleType(), ScheduleTypeEnum.DATE.getCode()); + if (!weekly && !byDate) { + throw new BusinessException("排课方式不合法,仅支持每周重复或日期排课"); + } + + if (weekly) { + course.setScheduleWeekDays(buildWeekDays(dto.getScheduleWeekDays())); + course.setScheduleDates(null); + } else { + course.setScheduleDates(buildScheduleDates(dto.getScheduleDates())); + course.setScheduleWeekDays(null); + } + } + + /** + * 星期编码列表 → 去重升序分号串(如 "1;3;5"),空列表或含非法编码时抛业务异常。 + */ + private String buildWeekDays(List weekDays) { + if (weekDays == null || weekDays.isEmpty()) { + throw new BusinessException("请选择每周上课的星期"); + } + TreeSet sorted = new TreeSet<>(); + for (Integer day : weekDays) { + if (day == null || day < CourseConstants.WEEK_DAY_MIN || day > CourseConstants.WEEK_DAY_MAX) { + throw new BusinessException("上课星期编码不合法,应为1(周一)至7(周日)"); + } + sorted.add(day); + } + return sorted.stream().map(String::valueOf).collect(Collectors.joining(CourseConstants.SEPARATOR)); + } + + /** + * 排课日期列表 → 格式校验、去重升序后的分号串(如 "2026-09-10;2026-09-12")。 + */ + private String buildScheduleDates(List scheduleDates) { + if (scheduleDates == null || scheduleDates.isEmpty()) { + throw new BusinessException("请选择具体的排课日期"); + } + if (scheduleDates.size() > CourseConstants.MAX_SCHEDULE_DATE_COUNT) { + throw new BusinessException("排课日期最多" + CourseConstants.MAX_SCHEDULE_DATE_COUNT + "个"); + } + TreeSet sorted = new TreeSet<>(); + for (String dateStr : scheduleDates) { + try { + sorted.add(LocalDate.parse(dateStr, CourseConstants.SCHEDULE_DATE_FORMATTER)); + } catch (DateTimeParseException ex) { + throw new BusinessException("排课日期格式不正确:" + dateStr); + } + } + return sorted.stream() + .map(date -> date.format(CourseConstants.SCHEDULE_DATE_FORMATTER)) + .collect(Collectors.joining(CourseConstants.SEPARATOR)); + } + + // ==================== 私有方法:查询与 VO 组装 ==================== + + /** + * 按 ID 查询未软删除的课程,不存在时抛业务异常。 + */ + private Course getExistingCourse(Long id) { + Course course = courseRepository.findById(id).orElse(null); + if (course == null || course.getDeletedAt() != null) { + throw new BusinessException("课程不存在或已删除"); + } + return course; + } + + /** + * 课程实体 → VO:解析宣传图绝对 URL(fileId → sys_file.file_url → 拼接 file-base-url)。 + */ + private CourseVO toVO(Course course) { + return CourseVO.builder() + .id(course.getId()) + .name(course.getName()) + .coverImageId(course.getCoverImageId()) + .coverUrl(fileUrlResolver.resolveAbsoluteUrl(course.getCoverImageId())) + .price(course.getPrice()) + .status(course.getStatus()) + .description(course.getDescription()) + .scheduleType(course.getScheduleType()) + .scheduleWeekDays(course.getScheduleWeekDays()) + .scheduleDates(course.getScheduleDates()) + .contactName(course.getContactName()) + .contactPhone(course.getContactPhone()) + .featured(course.getFeatured()) + .createdAt(course.getCreatedAt()) + .build(); + } + + // ==================== 管理端:预约名单 ==================== + + @Override + public Page listAppointmentsByCourse(Long courseId, Pageable pageable) { + // 先校验课程存在且未软删,避免 courseId 错误时拉取空数据无感知 + Course course = courseRepository.findById(courseId) + .orElseThrow(() -> new BusinessException("课程不存在")); + if (course.getDeletedAt() != null) { + throw new BusinessException("课程已删除"); + } + + Page appointments = courseAppointmentRepository + .findByCourseIdAndDeletedAtIsNullOrderByCreatedAtDesc(courseId, pageable); + + // 分步批量查(避免循环 N+1):课程名称 + 预约人信息 + Set courseIds = Set.of(courseId); + Map courseMap = courseRepository.findAllById(courseIds).stream() + .collect(Collectors.toMap(Course::getId, c -> c)); + + Set userIds = appointments.stream() + .map(CourseAppointment::getUserId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map userMap = userIds.isEmpty() + ? Collections.emptyMap() + : userRepository.findAllById(userIds).stream() + .collect(Collectors.toMap(User::getId, u -> u)); + + return appointments.map(appt -> toAdminAppointmentVO(appt, courseMap, userMap)); + } + + /** + * 预约实体 → 管理端预约 VO,额外组装预约人昵称/手机号(来自 user 表)。 + */ + private AdminCourseAppointmentVO toAdminAppointmentVO(CourseAppointment appt, + Map courseMap, + Map userMap) { + Course course = courseMap.get(appt.getCourseId()); + User user = userMap.get(appt.getUserId()); + return AdminCourseAppointmentVO.builder() + .id(appt.getId()) + .userId(appt.getUserId()) + .userNickName(user != null ? user.getNickname() : null) + .userPhone(user != null ? user.getPhone() : null) + .courseId(appt.getCourseId()) + .courseName(course != null ? course.getName() : null) + .appointmentDate(appt.getAppointmentDate()) + .personCount(appt.getPersonCount()) + .contactName(appt.getContactName()) + .contactPhone(appt.getContactPhone()) + .amount(appt.getAmount()) + .status(appt.getStatus()) + .statusName(appointmentStatusName(appt.getStatus())) + .remark(appt.getRemark()) + .createdAt(appt.getCreatedAt()) + .build(); + } + + // ==================== 小程序端:取消预约 ==================== + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancelAppointment(Long userId, Long appointmentId) { + CourseAppointment appt = courseAppointmentRepository + .findByIdAndUserIdAndDeletedAtIsNull(appointmentId, userId) + .orElseThrow(() -> new BusinessException("预约不存在或无权操作")); + + if (Objects.equals(appt.getStatus(), AppointmentStatusEnum.CANCELLED.getCode())) { + throw new BusinessException("预约已取消,不可重复操作"); + } + + appt.setStatus(AppointmentStatusEnum.CANCELLED.getCode()); + courseAppointmentRepository.save(appt); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/DashboardServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/DashboardServiceImpl.java new file mode 100644 index 0000000..cb1d798 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/DashboardServiceImpl.java @@ -0,0 +1,184 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.TaskStatusEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.TaskRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.DashboardService; +import com.haisen.laop.vo.DashboardVO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 数据驾驶舱服务实现。 + * + *

统计口径:所有计数均过滤软删除({@code deleted_at IS NULL}); + * 商家数/飞手数仅统计认证通过的主体(cert_status = 已认证),与前端标签文案"已认证"对齐; + * 用户总数为小程序注册全量用户(不分角色)。

+ * + *

月度趋势补零策略:DB 层 GROUP BY 只返回有数据的月份,Service 层负责 + * 生成完整的 6 个月月份列表并匹配填充,确保前端折线图横轴连续不断层。

+ * + *

任务状态归类:"进行中"包含 {@link TaskStatusEnum#PENDING} / {@link TaskStatusEnum#ACCEPTED} + * / {@link TaskStatusEnum#EXECUTING} 三种状态(任务已发布但未终态完成)。

+ * + * @author duhao + */ +@Service +@RequiredArgsConstructor +public class DashboardServiceImpl implements DashboardService { + + /** 驾驶舱统计的月度回溯窗口长度(月)。 */ + private static final int TREND_MONTHS = 6; + + /** 月份格式化器,输出 "yyyy-MM" 格式,与 SQL TO_CHAR 对齐。 */ + private static final DateTimeFormatter MONTH_FMT = DateTimeFormatter.ofPattern("yyyy-MM"); + + /** 任务进行中状态集合(待接单 / 已接单 / 执行中),用于"进行中"汇总计数。 */ + private static final List IN_PROGRESS_STATUSES = List.of( + TaskStatusEnum.PENDING.getCode(), + TaskStatusEnum.ACCEPTED.getCode(), + TaskStatusEnum.EXECUTING.getCode() + ); + + private final UserRepository userRepository; + private final MerchantRepository merchantRepository; + private final PilotRepository pilotRepository; + private final TaskRepository taskRepository; + + @Override + @Transactional(readOnly = true) + public DashboardVO getDashboardStats() { + // 计算时间窗口:近 6 个月从当前月往前推 + LocalDate today = LocalDate.now(); + LocalDateTime windowStart = today.minusMonths(TREND_MONTHS - 1) + .withDayOfMonth(1).atStartOfDay(); + LocalDateTime windowEnd = today.withDayOfMonth(today.lengthOfMonth()) + .atTime(LocalTime.MAX); + + return DashboardVO.builder() + // 用户统计 + .userTotalCount(userRepository.countByDeletedAtIsNull()) + .merchantCount(merchantRepository.countByCertStatusAndDeletedAtIsNull(CertStatusEnum.CERTIFIED.getCode())) + .pilotCount(pilotRepository.countByCertStatusAndDeletedAtIsNull(CertStatusEnum.CERTIFIED.getCode())) + .userMonthlyTrend(buildMonthlyTrend( + windowStart, windowEnd, + userRepository.countMonthlyNewUsers(windowStart, windowEnd))) + // 任务统计 + .taskTotalCount(taskRepository.countByDeletedAtIsNull()) + .taskCompletedCount(taskRepository.countByStatusAndDeletedAtIsNull( + TaskStatusEnum.COMPLETED.getCode())) + .taskInProgressCount(taskRepository.countByStatusInAndDeletedAtIsNull( + IN_PROGRESS_STATUSES)) + .taskMonthlyTrend(buildMonthlyTrend( + windowStart, windowEnd, + taskRepository.countMonthlyNewTasks(windowStart, windowEnd))) + .taskTypeDistribution(buildTaskTypeDistribution()) + .taskStatusDistribution(buildTaskStatusDistribution()) + .build(); + } + + /** + * 构建完整的月度趋势 VO:生成 6 个连续月份,将 DB 聚合结果按月匹配填充,无数据月份补 0。 + * + * @param start 统计窗口起始 + * @param end 统计窗口结束 + * @param rawResults DB 层返回的 [{month, count}] 列表,可能缺少某些月份 + * @return 完整填充后的 MonthlyTrend + */ + private DashboardVO.MonthlyTrend buildMonthlyTrend(LocalDateTime start, LocalDateTime end, + List> rawResults) { + // 将 DB 结果转为 month → count 的快速查表 + Map dataMap = new HashMap<>(); + for (Map row : rawResults) { + // PG TO_CHAR 返回 String,COUNT(*) 返回 Long + String month = row.get("month").toString(); + Object countObj = row.get("count"); + long count = countObj instanceof Number n ? n.longValue() : 0L; + dataMap.put(month, count); + } + + // 生成完整月份序列 + List months = new ArrayList<>(); + List values = new ArrayList<>(); + LocalDate cursor = start.toLocalDate().withDayOfMonth(1); + LocalDate endMonth = end.toLocalDate().withDayOfMonth(1); + while (!cursor.isAfter(endMonth)) { + String key = cursor.format(MONTH_FMT); + months.add(key); + values.add(dataMap.getOrDefault(key, 0L)); + cursor = cursor.plusMonths(1); + } + + return DashboardVO.MonthlyTrend.builder() + .months(months) + .values(values) + .build(); + } + + /** + * 构建任务类型分布:遍历全部 7 种任务类型,按实际统计数量排序,无数据类型也会展示(count=0)。 + */ + private List buildTaskTypeDistribution() { + // DB 返回按 count DESC 排序的 [{type, count}] + List> raw = taskRepository.countByTaskType(); + Map dbMap = new HashMap<>(); + for (Map row : raw) { + Object typeObj = row.get("type"); + Object countObj = row.get("count"); + int type = typeObj instanceof Number n ? n.intValue() : 0; + long count = countObj instanceof Number n ? n.longValue() : 0L; + dbMap.put(type, count); + } + + // 按任务类型枚举顺序组装,缺失类型补 0 + List items = new ArrayList<>(); + for (TaskTypeEnum typeEnum : TaskTypeEnum.values()) { + items.add(DashboardVO.TaskTypeItem.builder() + .typeCode(typeEnum.getCode()) + .typeName(typeEnum.getDesc()) + .count(dbMap.getOrDefault(typeEnum.getCode(), 0L)) + .build()); + } + return items; + } + + /** + * 构建任务状态分布:遍历全部 6 种任务状态,无数据状态也会展示(count=0)。 + * 过滤掉草稿状态(对运营无意义),前端图表也不展示草稿。 + */ + private List buildTaskStatusDistribution() { + List> raw = taskRepository.countByTaskStatus(); + Map dbMap = new HashMap<>(); + for (Map row : raw) { + Object statusObj = row.get("status"); + Object countObj = row.get("count"); + int status = statusObj instanceof Number n ? n.intValue() : 0; + long count = countObj instanceof Number n ? n.longValue() : 0L; + dbMap.put(status, count); + } + + List items = new ArrayList<>(); + for (TaskStatusEnum statusEnum : TaskStatusEnum.values()) { + items.add(DashboardVO.TaskStatusItem.builder() + .statusCode(statusEnum.getCode()) + .statusName(statusEnum.getDesc()) + .count(dbMap.getOrDefault(statusEnum.getCode(), 0L)) + .build()); + } + return items; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/ExamServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/ExamServiceImpl.java new file mode 100644 index 0000000..bc5154a --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/ExamServiceImpl.java @@ -0,0 +1,469 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.enums.ExamBankStatusEnum; +import com.haisen.laop.common.enums.ExamDifficultyEnum; +import com.haisen.laop.common.enums.QuestionTypeEnum; +import com.haisen.laop.common.enums.TrainingStoreStatusEnum; +import com.haisen.laop.dto.ExamQuestionSaveDTO; +import com.haisen.laop.dto.ExamSubmitDTO; +import com.haisen.laop.dto.TrainingStoreDTO; +import com.haisen.laop.entity.ExamBank; +import com.haisen.laop.entity.ExamQuestion; +import com.haisen.laop.entity.TrainingStore; +import com.haisen.laop.repository.ExamBankRepository; +import com.haisen.laop.repository.ExamQuestionRepository; +import com.haisen.laop.repository.TrainingStoreRepository; +import com.haisen.laop.service.ExamService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.ExamBankVO; +import com.haisen.laop.vo.ExamQuestionVO; +import com.haisen.laop.vo.ExamResultVO; +import com.haisen.laop.vo.TrainingStoreVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 培训考试服务实现,承载 Web 管理端培训考试领域的全部业务逻辑。 + * + *

职责边界: + *

    + *
  • 培训 tab:门店培训信息的查询(解析封面 URL)与编辑(upsert 语义)
  • + *
  • 题库 tab:题库列表组装、题目 CRUD(Web 管理端)、答题判分(仅实时计算不持久化)
  • + *

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ExamServiceImpl implements ExamService { + + private final ExamBankRepository examBankRepository; + private final ExamQuestionRepository examQuestionRepository; + private final TrainingStoreRepository trainingStoreRepository; + private final FileUrlResolver fileUrlResolver; + + // ==================== 培训 tab ==================== + + @Override + public TrainingStoreVO getTrainingStore() { + return trainingStoreRepository + .findFirstByStatusAndDeletedAtIsNull(TrainingStoreStatusEnum.ENABLED.getCode()) + .map(this::toStoreVO) + .orElse(null); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveTrainingStore(TrainingStoreDTO dto) { + TrainingStore store = trainingStoreRepository + .findFirstByStatusAndDeletedAtIsNull(TrainingStoreStatusEnum.ENABLED.getCode()) + .orElseGet(() -> { + TrainingStore newStore = new TrainingStore(); + newStore.setStatus(TrainingStoreStatusEnum.ENABLED.getCode()); + return newStore; + }); + + store.setName(dto.getName()); + store.setAddress(dto.getAddress()); + store.setContactName(dto.getContactName()); + store.setContactPhone(dto.getContactPhone()); + store.setTrainingContent(dto.getTrainingContent()); + store.setCoverImage(dto.getCoverImage()); + trainingStoreRepository.save(store); + log.info("门店培训信息已更新:id={}, name={}", store.getId(), store.getName()); + } + + // ==================== 题库管理(Web 管理端) ==================== + + @Override + public List listBanks() { + List banks = examBankRepository + .findByStatusAndDeletedAtIsNullOrderByIdAsc(ExamBankStatusEnum.ENABLED.getCode()); + + List bankIds = banks.stream().map(ExamBank::getId).toList(); + + // 1. 各题库总题数 + Map totalMap = examQuestionRepository + .countByBankIdsAndDeletedAtIsNull(bankIds) + .stream() + .collect(Collectors.toMap( + row -> (Long) row[0], + row -> ((Number) row[1]).intValue())); + + // 2. 各题库按题型分组的数量:Map> + Map> typeCountMap = examQuestionRepository + .countByBankIdsGroupByQuestionType(bankIds) + .stream() + .collect(Collectors.groupingBy( + row -> (Long) row[0], + Collectors.toMap( + row -> ((Number) row[1]).intValue(), + row -> ((Number) row[2]).intValue() + ))); + + return banks.stream() + .map(bank -> toBankVO(bank, totalMap.getOrDefault(bank.getId(), 0), + typeCountMap.getOrDefault(bank.getId(), new java.util.HashMap<>()))) + .toList(); + } + + @Override + public List listQuestionsForAdmin(Long bankId, Integer questionType, String keyword, + int pageNo, int pageSize) { + // 管理端按 sortOrder 从小到大排序(同排序值时按 id 升序兜底) + PageRequest pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.ASC, "sortOrder").and(Sort.by(Sort.Direction.ASC, "id"))); + Page page = examQuestionRepository.findAll( + buildQuestionSpec(bankId, questionType, keyword), pageable); + return page.getContent().stream().map(this::toQuestionVO).toList(); + } + + @Override + public long countQuestionsForAdmin(Long bankId, Integer questionType, String keyword) { + return examQuestionRepository.count(buildQuestionSpec(bankId, questionType, keyword)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ExamQuestionVO createQuestion(ExamQuestionSaveDTO dto) { + ExamBank bank = examBankRepository.findById(dto.getBankId()) + .orElseThrow(() -> new BusinessException("所属题库不存在:" + dto.getBankId())); + + ExamQuestion question = new ExamQuestion(); + applyDtoToEntity(dto, question); + + // 未指定 sortOrder 则自动取当前题库最大 + 1 + if (question.getSortOrder() == null) { + int maxSort = examQuestionRepository.findMaxSortOrderByBankId(dto.getBankId()); + question.setSortOrder(maxSort + 1); + } + if (question.getScore() == null) { + question.setScore(5); + } + question.setUsedCount(0); + + ExamQuestion saved = examQuestionRepository.save(question); + log.info("题目已新增:id={}, bankId={}, content={}", saved.getId(), saved.getBankId(), + truncate(saved.getContent(), 30)); + return toQuestionVO(saved); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ExamQuestionVO updateQuestion(ExamQuestionSaveDTO dto) { + if (dto.getId() == null) { + throw new BusinessException("编辑题目必须传入题目ID"); + } + ExamQuestion existing = examQuestionRepository.findById(dto.getId()) + .orElseThrow(() -> new BusinessException("题目不存在:" + dto.getId())); + + // 如果改了 bankId,校验新题库存在 + if (!existing.getBankId().equals(dto.getBankId())) { + examBankRepository.findById(dto.getBankId()) + .orElseThrow(() -> new BusinessException("目标题库不存在:" + dto.getBankId())); + } + + applyDtoToEntity(dto, existing); + ExamQuestion saved = examQuestionRepository.save(existing); + log.info("题目已更新:id={}, bankId={}", saved.getId(), saved.getBankId()); + return toQuestionVO(saved); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteQuestion(Long id) { + ExamQuestion existing = examQuestionRepository.findById(id) + .orElseThrow(() -> new BusinessException("题目不存在:" + id)); + existing.setDeletedAt(java.time.LocalDateTime.now()); + examQuestionRepository.save(existing); + log.info("题目已软删除:id={}", id); + } + + // ==================== 小程序答题端(保留接口供小程序使用) ==================== + + @Override + public List listQuestions(Long bankId, int pageNo, int pageSize) { + PageRequest pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.ASC, "sortOrder").and(Sort.by(Sort.Direction.ASC, "id"))); + Page page = examQuestionRepository + .findByBankIdAndDeletedAtIsNullOrderBySortOrderAscIdAsc(bankId, pageable); + // 小程序端返回时隐藏答案和解析(避免用户提前看到) + return page.getContent().stream().map(q -> toQuestionVOWithoutAnswer(q)).toList(); + } + + @Override + public long countQuestions(Long bankId) { + return examQuestionRepository.countByBankIdAndDeletedAtIsNull(bankId); + } + + @Override + public ExamResultVO submitExam(Long bankId, ExamSubmitDTO dto) { + // 1. 校验题库存在 + examBankRepository.findById(bankId) + .orElseThrow(() -> new BusinessException("题库不存在:" + bankId)); + + // 2. 批量查询题目 + List questionIds = dto.getAnswers().stream() + .map(ExamSubmitDTO.UserAnswer::getQuestionId).toList(); + Map questionMap = examQuestionRepository.findAllById(questionIds).stream() + .collect(Collectors.toMap(ExamQuestion::getId, Function.identity())); + + // 3. 逐题判分 + List results = new ArrayList<>(); + int userScore = 0; + int correctCount = 0; // 完全答对的题数 + int totalScore = 0; + + for (ExamSubmitDTO.UserAnswer ua : dto.getAnswers()) { + ExamQuestion question = questionMap.get(ua.getQuestionId()); + if (question == null) { + log.warn("答题判分:题目不存在,questionId={}", ua.getQuestionId()); + continue; + } + + int fullScore = question.getScore() != null ? question.getScore() : 0; + totalScore += fullScore; + + // 判分核心:返回 {isFullCorrect, actualScore} + JudgeResult jr = judge(question, ua.getUserAnswer()); + + if (jr.fullCorrect) correctCount++; + userScore += jr.actualScore; + + results.add(ExamResultVO.ResultItem.builder() + .questionId(question.getId()) + .correct(jr.fullCorrect) + .userAnswer(ua.getUserAnswer()) + .correctAnswer(question.getAnswer()) + .explanation(question.getExplanation()) + .score(fullScore) + .userScore(jr.actualScore) + .build()); + } + + return ExamResultVO.builder() + .results(results) + .totalScore(totalScore) + .userScore(userScore) + .correctCount(correctCount) + .totalCount(dto.getAnswers().size()) + .build(); + } + + /** + * 判分结果 DTO。 + * + * @param fullCorrect 是否完全答对(多选题全选对才是 true) + * @param actualScore 该题实际得分(满分、半分或 0) + */ + private record JudgeResult(boolean fullCorrect, int actualScore) {} + + /** + * 单题判分核心逻辑。 + * + *
    + *
  • 单选/判断:对 → 满分,错/空 → 0
  • + *
  • 多选: + *
      + *
    • 全部选对 → 满分(如 2 分)
    • + *
    • 选的全是对的但没选完 → 半分(如 1 分)
    • + *
    • 选了任何一个错误选项 → 0 分
    • + *
    • 未作答 → 0 分
    • + *
    + *
  • + *
+ */ + private JudgeResult judge(ExamQuestion question, String userAnswer) { + int fullScore = question.getScore() != null ? question.getScore() : 0; + String correctAnswer = question.getAnswer(); + + // 未作答 → 0 分 + if (userAnswer == null || userAnswer.isBlank()) { + return new JudgeResult(false, 0); + } + + // 单选 / 判断:精确比对 + if (!Objects.equals(question.getQuestionType(), QuestionTypeEnum.MULTI.getCode())) { + boolean exact = userAnswer.equals(correctAnswer); + return new JudgeResult(exact, exact ? fullScore : 0); + } + + // ========== 多选题三档判分 ========== + Set correctSet = toCharSet(correctAnswer); + Set userSet = toCharSet(userAnswer); + + // 选了错误选项(用户答案中有不在正确答案里的字符)→ 0 分 + if (!correctSet.containsAll(userSet)) { + return new JudgeResult(false, 0); + } + + // 完全一致 → 满分 + if (correctSet.equals(userSet)) { + return new JudgeResult(true, fullScore); + } + + // 选的全对但没选完 → 半分 + return new JudgeResult(false, fullScore / 2); + } + + private Set toCharSet(String s) { + Set set = new java.util.HashSet<>(); + for (char c : s.toCharArray()) set.add(c); + return set; + } + + // ==================== 私有方法 ==================== + + /** + * 构建管理端动态筛选 Specification:bankId / questionType / keyword(题干模糊匹配), + * 并始终附加 deletedAt IS NULL 的固定条件。 + */ + private Specification buildQuestionSpec(Long bankId, Integer questionType, String keyword) { + return (root, query, cb) -> { + List predicates = new ArrayList<>(); + // 固定条件:未软删 + predicates.add(cb.isNull(root.get("deletedAt"))); + if (bankId != null) { + predicates.add(cb.equal(root.get("bankId"), bankId)); + } + if (questionType != null) { + predicates.add(cb.equal(root.get("questionType"), questionType)); + } + if (StringUtils.hasText(keyword)) { + String pattern = "%" + keyword.trim() + "%"; + predicates.add(cb.like(root.get("content"), pattern)); + } + return cb.and(predicates.toArray(new Predicate[0])); + }; + } + + /** 将 DTO 中的可变字段应用到 entity(不含 id、createdAt、updatedAt、deletedAt、usedCount)。 */ + private void applyDtoToEntity(ExamQuestionSaveDTO dto, ExamQuestion question) { + question.setBankId(dto.getBankId()); + question.setContent(dto.getContent()); + question.setOptions(dto.getOptions()); + question.setQuestionType(dto.getQuestionType()); + question.setAnswer(dto.getAnswer() != null ? dto.getAnswer().toUpperCase() : null); + question.setExplanation(dto.getExplanation()); + question.setDifficulty(dto.getDifficulty()); + question.setScore(dto.getScore()); + question.setSortOrder(dto.getSortOrder()); + } + + /** Web 管理端 VO:带完整的答案和解析。 */ + private ExamQuestionVO toQuestionVO(ExamQuestion question) { + return ExamQuestionVO.builder() + .id(question.getId()) + .bankId(question.getBankId()) + .content(question.getContent()) + .options(question.getOptions()) + .questionType(question.getQuestionType()) + .questionTypeName(buildQuestionTypeName(question.getQuestionType())) + .answer(question.getAnswer()) + .explanation(question.getExplanation()) + .difficulty(question.getDifficulty()) + .difficultyName(buildDifficultyName(question.getDifficulty())) + .score(question.getScore()) + .sortOrder(question.getSortOrder()) + .build(); + } + + /** 小程序端 VO:隐藏 answer 和 explanation,避免答题时提前看到答案。 */ + private ExamQuestionVO toQuestionVOWithoutAnswer(ExamQuestion question) { + ExamQuestionVO vo = toQuestionVO(question); + vo.setAnswer(null); + vo.setExplanation(null); + return vo; + } + + private String truncate(String s, int max) { + if (s == null) return null; + return s.length() <= max ? s : s.substring(0, max) + "..."; + } + + private TrainingStoreVO toStoreVO(TrainingStore store) { + return TrainingStoreVO.builder() + .id(store.getId()) + .name(store.getName()) + .address(store.getAddress()) + .contactName(store.getContactName()) + .contactPhone(store.getContactPhone()) + .trainingContent(store.getTrainingContent()) + .coverUrl(fileUrlResolver.resolveAbsoluteUrl(store.getCoverImage())) + .build(); + } + + private ExamBankVO toBankVO(ExamBank bank, int total, Map typeCountMap) { + return ExamBankVO.builder() + .id(bank.getId()) + .name(bank.getName()) + .description(bank.getDescription()) + .difficulty(bank.getDifficulty()) + .difficultyName(buildDifficultyName(bank.getDifficulty())) + .questionCount(total) + .singleCount(typeCountMap.getOrDefault(QuestionTypeEnum.SINGLE.getCode(), 0)) + .multiCount(typeCountMap.getOrDefault(QuestionTypeEnum.MULTI.getCode(), 0)) + .judgeCount(typeCountMap.getOrDefault(QuestionTypeEnum.JUDGE.getCode(), 0)) + .build(); + } + + /** 难度编码 → 中文名(枚举 desc 已覆盖全部取值,非法/空编码兜底"未知")。 */ + private String buildDifficultyName(Integer difficulty) { + ExamDifficultyEnum difficultyEnum = ExamDifficultyEnum.of(difficulty); + return difficultyEnum != null ? difficultyEnum.getDesc() : "未知"; + } + + /** 题型编码 → 中文名(枚举 desc 已覆盖全部取值,非法/空编码兜底"未知")。 */ + private String buildQuestionTypeName(Integer questionType) { + QuestionTypeEnum typeEnum = QuestionTypeEnum.of(questionType); + return typeEnum != null ? typeEnum.getDesc() : "未知"; + } + + // ==================== 模拟考试(小程序端) ==================== + + /** 模拟考试配比:单选 30 道 × 1 分 = 30 分 */ + private static final int MOCK_SINGLE_COUNT = 30; + /** 模拟考试配比:多选 25 道 × 2 分 = 50 分 */ + private static final int MOCK_MULTI_COUNT = 25; + /** 模拟考试配比:判断 20 道 × 1 分 = 20 分 */ + private static final int MOCK_JUDGE_COUNT = 20; + + @Override + public List mockExam(Long bankId) { + // 1. 按题型分别随机抽题 + List singles = examQuestionRepository.randomSample( + bankId, QuestionTypeEnum.SINGLE.getCode(), MOCK_SINGLE_COUNT); + List multis = examQuestionRepository.randomSample( + bankId, QuestionTypeEnum.MULTI.getCode(), MOCK_MULTI_COUNT); + List judges = examQuestionRepository.randomSample( + bankId, QuestionTypeEnum.JUDGE.getCode(), MOCK_JUDGE_COUNT); + + // 2. 按 单选→多选→判断 的顺序合并(每类内部保持随机) + List merged = new ArrayList<>(singles); + merged.addAll(multis); + merged.addAll(judges); + + // 3. 转 VO(小程序端不含答案解析) + return merged.stream().map(this::toQuestionVOWithoutAnswer).collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/FileServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/FileServiceImpl.java new file mode 100644 index 0000000..c67c46d --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/FileServiceImpl.java @@ -0,0 +1,116 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.FileConstants; +import com.haisen.laop.common.enums.FileStatusEnum; +import com.haisen.laop.common.enums.FileTypeEnum; +import com.haisen.laop.entity.SysFile; +import com.haisen.laop.repository.SysFileRepository; +import com.haisen.laop.service.FileService; +import com.haisen.laop.service.FileStorageService; +import com.haisen.laop.vo.FileUploadVO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * 文件服务实现类,承载上传领域的完整业务流程。 + * + *

流程:参数校验(文件非空、后缀白名单、大小限制、类型标识合法) + * → 存储介质写入(委托 {@link FileStorageService})→ sys_file 记录落库 → 返回 VO。

+ * + *

安全:后缀白名单只放行常见图片格式,大小上限 5MB 防止恶意大文件; + * 文件名 UUID 化在 {@link LocalFileStorageServiceImpl} 中执行。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class FileServiceImpl implements FileService { + + private final SysFileRepository sysFileRepository; + private final FileStorageService fileStorageService; + + @Override + @Transactional(rollbackFor = Exception.class) + public FileUploadVO upload(Long uploaderId, MultipartFile file, String fileType) { + // 1. 基础校验 + if (file == null || file.isEmpty()) { + throw new BusinessException("上传文件不能为空"); + } + + // 2. 文件大小校验 + long size = file.getSize(); + if (size > FileConstants.MAX_FILE_SIZE) { + throw new BusinessException("文件大小不能超过 5MB"); + } + + // 3. 后缀白名单校验 + String originalName = file.getOriginalFilename(); + String suffix = extractSuffix(originalName); + if (suffix == null || !FileConstants.ALLOWED_IMAGE_SUFFIXES.contains(suffix)) { + throw new BusinessException("仅支持 jpg/jpeg/png/gif/webp/bmp 格式的图片"); + } + + // 4. 文件类型解析(字符串 → 枚举 → 整数编码) + FileTypeEnum typeEnum = FileTypeEnum.of(fileType); + if (typeEnum == null) { + throw new BusinessException("不支持的文件类型标识: " + fileType); + } + + // 5. 存储介质写入(子目录由类型枚举的大类目录规划决定:image/video/license/store) + String subDir = typeEnum.getStorageDir(); + String fileUrl; + try { + fileUrl = fileStorageService.store(file, subDir, suffix); + } catch (IOException ex) { + log.error("[文件上传] 存储写入失败", ex); + throw new BusinessException("文件存储失败,请稍后再试"); + } + + // 6. sys_file 记录落库(Builder 链式构建) + SysFile sysFile = SysFile.builder() + .fileName(originalName) + .fileSuffix(suffix) + .fileUrl(fileUrl) + .fileSize(size) + .fileType(typeEnum.getCode()) + .uploaderId(uploaderId) + .status(FileStatusEnum.NORMAL.getCode()) + .build(); + + SysFile saved = sysFileRepository.save(sysFile); + log.info("[文件上传] uploaderId={}, fileId={}, fileUrl={}", uploaderId, saved.getId(), fileUrl); + + // 7. 构建 VO + return FileUploadVO.builder() + .fileId(saved.getId()) + .fileType(typeEnum.getCode()) + .fileUrl(fileUrl) + .fileSize(size) + .fileSuffix(suffix) + .build(); + } + + /** + * 从原始文件名中提取后缀(小写、不含点)。 + * + * @return 后缀字符串;无后缀或文件名为 null 时返回 null + */ + private String extractSuffix(String originalName) { + if (StringUtils.isBlank(originalName)) { + return null; + } + int dotIdx = originalName.lastIndexOf('.'); + if (dotIdx < 0 || dotIdx == originalName.length() - 1) { + return null; + } + return originalName.substring(dotIdx + 1).toLowerCase(); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/HomeServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/HomeServiceImpl.java new file mode 100644 index 0000000..50f2ef0 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/HomeServiceImpl.java @@ -0,0 +1,392 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.HomeConstants; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.InsuranceTypeEnum; +import com.haisen.laop.common.enums.LicenseTypeEnum; +import com.haisen.laop.common.enums.RegionLevelEnum; +import com.haisen.laop.common.enums.TaskStatusEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.Pilot; +import com.haisen.laop.entity.PilotLicense; +import com.haisen.laop.entity.Region; +import com.haisen.laop.entity.Task; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotLicenseRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.RegionRepository; +import com.haisen.laop.repository.TaskRepository; +import com.haisen.laop.service.HomeService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.HomeMerchantVO; +import com.haisen.laop.vo.HomePilotVO; +import com.haisen.laop.vo.MerchantDetailVO; +import com.haisen.laop.vo.PilotDetailVO; +import com.haisen.laop.vo.TaskBriefVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 首页展示服务实现。 + * + *

列表策略:首页两个版块只展示已认证主体(cert_status = 已认证), + * 按"订单数降序 + id 降序"排序(运营权重优先,同分取后认证者);数量走 + * {@link HomeConstants} 上限,不引入分页参数。

+ * + *

隐私策略:飞手为个人主体,详情不返回手机号;商家为经营主体, + * 联系人/联系电话属对外经营信息,完整返回。

+ * + * @author duhao + */ +@Service +@RequiredArgsConstructor +public class HomeServiceImpl implements HomeService { + + private final MerchantRepository merchantRepository; + private final PilotRepository pilotRepository; + private final PilotLicenseRepository pilotLicenseRepository; + private final RegionRepository regionRepository; + private final TaskRepository taskRepository; + private final FileUrlResolver fileUrlResolver; + + @Override + public List listMerchants() { + Page page = merchantRepository.findCertifiedOrderByTaskCountDesc( + CertStatusEnum.CERTIFIED.getCode(), + PageRequest.of(0, HomeConstants.HOME_MERCHANT_LIMIT)); + return page.getContent().stream() + .map(m -> toHomeMerchantVO(m, taskRepository.countByPublisherIdAndDeletedAtIsNull(m.getUserId()))) + .toList(); + } + + @Override + public List listPilots() { + Page page = pilotRepository.findCertifiedOrderByTaskCountDesc( + CertStatusEnum.CERTIFIED.getCode(), + PageRequest.of(0, HomeConstants.HOME_PILOT_LIMIT)); + List pilots = page.getContent(); + Map> licenseMap = batchLoadLicenses(pilots); + return pilots.stream() + .map(p -> toHomePilotVO(p, licenseMap, taskRepository.countByAcceptedPilotIdAndDeletedAtIsNull(p.getId()))) + .toList(); + } + + @Override + public List pageMerchants(int pageNo, int pageSize, String name) { + String trimmedName = (name == null || name.isBlank()) ? null : name.trim(); + Page page = merchantRepository.findCertifiedByNameOrderByTaskCountDesc( + CertStatusEnum.CERTIFIED.getCode(), + trimmedName, + PageRequest.of(pageNo - 1, pageSize)); + return page.getContent().stream() + .map(m -> toHomeMerchantVO(m, taskRepository.countByPublisherIdAndDeletedAtIsNull(m.getUserId()))) + .toList(); + } + + @Override + public List pagePilots(int pageNo, int pageSize, String name) { + String trimmedName = (name == null || name.isBlank()) ? null : name.trim(); + Page page = pilotRepository.findCertifiedByNameOrderByTaskCountDesc( + CertStatusEnum.CERTIFIED.getCode(), + trimmedName, + PageRequest.of(pageNo - 1, pageSize)); + List pilots = page.getContent(); + Map> licenseMap = batchLoadLicenses(pilots); + return pilots.stream() + .map(p -> toHomePilotVO(p, licenseMap, taskRepository.countByAcceptedPilotIdAndDeletedAtIsNull(p.getId()))) + .toList(); + } + + /** 商家列表项 VO 组装,taskCount 来自 task 表 COUNT。 */ + private HomeMerchantVO toHomeMerchantVO(Merchant merchant, long taskCount) { + return HomeMerchantVO.builder() + .id(merchant.getId()) + .name(merchant.getName()) + .address(merchant.getAddress()) + .doorImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getDoorImage())) + .taskCount((int) taskCount) + .build(); + } + + /** 认证通过时间格式化器,展示为 "2025.03" 风格。 */ + private static final DateTimeFormatter CERT_TIME_FMT = DateTimeFormatter.ofPattern("yyyy.MM"); + + /** 飞手列表项 VO 组装,licenseTypes 从批量查好的 Map 取,避免 N+1。 */ + private HomePilotVO toHomePilotVO(Pilot pilot, Map> licenseMap, long taskCount) { + String certTimeText = pilot.getCertTime() == null ? null : pilot.getCertTime().format(CERT_TIME_FMT); + List licenseTypes = licenseMap.getOrDefault(pilot.getId(), List.of()).stream() + .map(PilotLicense::getLicenseType).toList(); + return HomePilotVO.builder() + .id(pilot.getId()) + .name(pilot.getName()) + .age(pilot.getAge()) + .avatarUrl(fileUrlResolver.resolveAbsoluteUrl(pilot.getAvatarFileId())) + .licenseTypes(licenseTypes) + .serviceTypeNames(buildServiceTypeNames(pilot.getServiceTypes())) + .serviceCityText(buildServiceCityText(pilot.getServiceCityCodes())) + .certTimeText(certTimeText) + .taskCount((int) taskCount) + .build(); + } + + /** 批量查询多飞手的执照,按 pilot_id 分组,避免列表页 N+1 查询。 */ + private Map> batchLoadLicenses(List pilots) { + if (pilots.isEmpty()) { + return Map.of(); + } + List pilotIds = pilots.stream().map(Pilot::getId).toList(); + return pilotLicenseRepository.findByPilotIdInAndDeletedAtIsNull(pilotIds).stream() + .collect(java.util.stream.Collectors.groupingBy(pl -> pl.getPilot().getId())); + } + + /** 服务类型编码串转名称列表(如 "1;3" → ["植保", "航拍"]),防御性忽略非法编码。 */ + private List buildServiceTypeNames(String joined) { + List names = new ArrayList<>(); + if (StringUtils.isBlank(joined)) { + return names; + } + for (String piece : joined.split(";")) { + try { + TaskTypeEnum type = TaskTypeEnum.of(Integer.parseInt(piece.trim())); + if (type != null) { + names.add(type.getDesc()); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码片段 + } + } + return names; + } + + /** + * 服务城市编码串转展示文本,取第一个 code 拼接"上级·本级"(如 "上海市·浦东新区")。 + * 直辖市避免重复("上海市·上海市" → "上海市"),仅展示本级 name。 + */ + private String buildServiceCityText(String joined) { + if (StringUtils.isBlank(joined)) { + return null; + } + String[] codes = joined.split(";"); + Region region = regionRepository.findByCodeAndDeletedAtIsNull(codes[0].trim()); + if (region == null) { + return null; + } + // 省级直接返回 + if (Objects.equals(region.getLevel(), RegionLevelEnum.PROVINCE.getCode()) + || StringUtils.isBlank(region.getParentCode())) { + return region.getName(); + } + // 市级/区县拼父级名称 + Region parent = regionRepository.findByCodeAndDeletedAtIsNull(region.getParentCode()); + if (parent == null || parent.getName().equals(region.getName())) { + return region.getName(); + } + return parent.getName() + "·" + region.getName(); + } + + @Override + @Transactional(readOnly = true) + public MerchantDetailVO getMerchantDetail(Long id) { + Merchant merchant = merchantRepository.findByIdAndDeletedAtIsNull(id) + .filter(m -> Objects.equals(m.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) + .orElseThrow(() -> new BusinessException("商家不存在")); + return MerchantDetailVO.builder() + .id(merchant.getId()) + .name(merchant.getName()) + .address(merchant.getAddress()) + .contactName(merchant.getContactName()) + .contactPhone(merchant.getContactPhone()) + .description(merchant.getDescription()) + .doorImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getDoorImage())) + .licenseImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getLicenseFileId())) + .tasks(buildTaskBriefs(taskRepository + .findByPublisherIdAndDeletedAtIsNullOrderByIdDesc(merchant.getUserId()))) + .build(); + } + + @Override + @Transactional(readOnly = true) + public PilotDetailVO getPilotDetail(Long id) { + Pilot pilot = pilotRepository.findByIdAndDeletedAtIsNull(id) + .filter(p -> Objects.equals(p.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) + .orElseThrow(() -> new BusinessException("飞手不存在")); + return PilotDetailVO.builder() + .id(pilot.getId()) + .name(pilot.getName()) + .phone(pilot.getPhone()) + .licenses(buildLicenses(pilot)) + .serviceTypes(splitCodes(pilot.getServiceTypes())) + .bio(pilot.getBio()) + .orderCount((int) taskRepository.countByAcceptedPilotIdAndDeletedAtIsNull(pilot.getId())) + .tasks(buildTaskBriefs(taskRepository + .findByAcceptedPilotIdAndDeletedAtIsNullOrderByIdDesc(pilot.getId()))) + .build(); + } + + /** + * 详情页单独查 PilotLicenseRepository 组装 LicenseVO(单对象场景,无 N+1 问题)。 + */ + private List buildLicenses(Pilot pilot) { + List result = new ArrayList<>(); + for (PilotLicense pl : pilotLicenseRepository.findByPilotIdAndDeletedAtIsNullOrderByIdAsc(pilot.getId())) { + Long fileId = pl.getLicenseFileId(); + // 执照名称统一由 LicenseTypeEnum 维护,非法/历史脏编码兜底展示"执照" + LicenseTypeEnum licenseType = LicenseTypeEnum.of(pl.getLicenseType()); + result.add(PilotDetailVO.LicenseVO.builder() + .typeCode(pl.getLicenseType()) + .typeName(licenseType != null ? licenseType.getDesc() : "执照") + .no(pl.getLicenseNo()) + .photoUrl(fileUrlResolver.resolveAbsoluteUrl(fileId)) + .date(pl.getLicenseDate()) + .build()); + } + return result; + } + + /** + * 任务实体列表转简要 VO 列表,超出展示上限截断(详情页为展示型列表,不引入分页)。 + * 字段填充与任务大厅卡片渲染需求对齐(保险名称、实景图、城市文本等)。 + */ + private List buildTaskBriefs(List tasks) { + List briefs = new ArrayList<>(); + for (Task task : tasks) { + if (briefs.size() >= HomeConstants.DETAIL_TASK_LIMIT) { + break; + } + TaskTypeEnum typeEnum = TaskTypeEnum.of(task.getType()); + TaskStatusEnum statusEnum = TaskStatusEnum.of(task.getStatus()); + briefs.add(TaskBriefVO.builder() + .id(task.getId()) + .name(task.getName()) + .typeName(typeEnum != null ? typeEnum.getDesc() : "其他") + .reward(task.getReward()) + .status(task.getStatus()) + .statusName(statusEnum != null ? statusEnum.getDesc() : "未知") + .statusTag(resolveStatusTag(task.getStatus())) + .isPremium(task.getIsPremium()) + .regionText(buildRegionText(task)) + .address(task.getAddress()) + .requiredCount(task.getRequiredCount()) + .taskStartTime(task.getTaskStartTime()) + .taskEndTime(task.getTaskEndTime()) + .insuranceNames(buildInsuranceNames(task.getInsuranceRequire())) + .remark(task.getRemark()) + .sceneImageUrls(buildSceneImageUrls(task.getSceneImages())) + .build()); + } + return briefs; + } + + /** + * 省市区拼接展示文本,相邻层级重复时去重(如直辖市"天津市·天津市·和平区" → "天津市·和平区")。 + */ + private String buildRegionText(Task task) { + List parts = new ArrayList<>(); + for (String part : new String[]{task.getProvince(), task.getCity(), task.getDistrict()}) { + if (StringUtils.isNotBlank(part) && (parts.isEmpty() || !parts.get(parts.size() - 1).equals(part))) { + parts.add(part); + } + } + return parts.isEmpty() ? null : String.join("·", parts); + } + + /** + * 保险类型分号编码串转名称列表(如 "1;2" → [三者险, 飞手险]),无保险返回 null。 + */ + private List buildInsuranceNames(String joined) { + List names = new ArrayList<>(); + if (StringUtils.isBlank(joined)) { + return names; + } + for (String piece : joined.split(";")) { + try { + InsuranceTypeEnum type = InsuranceTypeEnum.of(Integer.parseInt(piece.trim())); + if (type != null) { + names.add(type.getDesc()); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码片段 + } + } + return names; + } + + /** + * 实景图分号 fileId 串转完整 URL 列表。 + */ + private List buildSceneImageUrls(String joined) { + List urls = new ArrayList<>(); + if (StringUtils.isBlank(joined)) { + return urls; + } + for (String piece : joined.split(";")) { + try { + String url = fileUrlResolver.resolveAbsoluteUrl(Long.parseLong(piece.trim())); + if (StringUtils.isNotBlank(url)) { + urls.add(url); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码片段 + } + } + return urls; + } + + /** + * 任务状态编码 → el-tag type,与前端标签配色对齐。 + * + *
    + *
  • 0 草稿 → info(灰色)
  • + *
  • 1 待接单 → success(绿色,表示可抢)
  • + *
  • 2 已接单 → primary(紫色/蓝色)
  • + *
  • 3 执行中 → warning(橙色)
  • + *
  • 4 已完成 → info(灰色,表示终态)
  • + *
  • 5 已取消 → danger(红色)
  • + *
+ */ + private String resolveStatusTag(Integer status) { + TaskStatusEnum statusEnum = TaskStatusEnum.of(status); + if (statusEnum == null) { + return "info"; + } + return switch (statusEnum) { + case PENDING -> "success"; + case ACCEPTED -> "primary"; + case EXECUTING -> "warning"; + case CANCELLED -> "danger"; + case DRAFT, COMPLETED -> "info"; + }; + } + + /** + * 分号拼接串拆回编码列表(如 "1;3" → [1, 3]),防御性忽略非法片段。 + */ + private List splitCodes(String joined) { + List codes = new ArrayList<>(); + if (StringUtils.isBlank(joined)) { + return codes; + } + for (String piece : joined.split(";")) { + try { + codes.add(Integer.parseInt(piece.trim())); + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码片段 + } + } + return codes; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/LocalFileStorageServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/LocalFileStorageServiceImpl.java new file mode 100644 index 0000000..b778bc6 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/LocalFileStorageServiceImpl.java @@ -0,0 +1,59 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.service.FileStorageService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +/** + * 本地磁盘文件存储实现,适用于开发阶段快速迭代。 + * + *

安全措施:

+ *
    + *
  • 文件名统一 UUID 重命名,彻底避免路径穿越(如 ../../../etc/passwd)和中文文件名问题
  • + *
  • 子目录参数由上层 FileService 传入,本层仅做 {@code File.separator} 拼接,不做额外路径解析
  • + *
  • 文件后缀白名单和大小限制由上层 FileService 负责,本层假定入参已校验
  • + *
+ * + *

对外路径规则:存储路径 = {@code staticDir + / + subDir + / + uuid.suffix}; + * 对外 URL = {@code /static + / + subDir + / + uuid.suffix}(与 WebConfig 资源映射一致)。

+ * + * @author duhao + */ +@Slf4j +@Service +public class LocalFileStorageServiceImpl implements FileStorageService { + + /** + * 本地磁盘存储根目录,来自 {@code application-{profile}.yml} 的 {@code laop.static-dir} + * (dev 为本机目录,prod 由环境变量 {@code LAOP_STATIC_DIR} 注入)。 + */ + @Value("${laop.static-dir}") + private String staticDir; + + @Override + public String store(MultipartFile file, String subDir, String fileSuffix) throws IOException { + // 1. 构造存储目录 + File dir = new File(staticDir, subDir); + if (!dir.exists() && !dir.mkdirs()) { + throw new BusinessException("文件存储目录创建失败"); + } + + // 2. UUID 重命名 + String fileName = UUID.randomUUID().toString().replace("-", "") + "." + fileSuffix; + File target = new File(dir, fileName); + + // 3. 写入磁盘 + file.transferTo(target); + log.info("[文件存储] 本地保存: {}", target.getAbsolutePath()); + + // 4. 返回对外 URL 路径(/static 前缀与 WebConfig 资源映射保持一致) + return "/static/" + subDir + "/" + fileName; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/LoginServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..c1e5438 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/LoginServiceImpl.java @@ -0,0 +1,128 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.client.wx.WxMiniClient; +import com.haisen.laop.common.constants.PointsConstants; +import com.haisen.laop.common.enums.GenderEnum; +import com.haisen.laop.common.enums.PointsEventEnum; +import com.haisen.laop.common.enums.RoleTypeEnum; +import com.haisen.laop.common.enums.UserStatusEnum; +import com.haisen.laop.common.enums.YesNoEnum; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.LoginService; +import com.haisen.laop.service.PointsService; +import com.haisen.laop.vo.LoginVO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.Optional; + +/** + * 微信小程序登录服务实现。 + * + *

完整登录链路:前端 {@code wx.login()} 拿到 code → 调本接口 → + * 后端经 {@link WxMiniClient} 请求微信 code2session API 换 openid → 按 openid 查 User, + * 不存在则自动注册 → 返回 token(当前即 userId)。

+ * + *

微信接口协议细节(URL 组装、错误码解析)全部收口在 client 包, + * 本类只关心登录业务规则(查/建用户、邀请奖励)。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class LoginServiceImpl implements LoginService { + + /** 新用户初始积分 */ + private static final int POINTS_INIT = 0; + private static final String DEFAULT_NICKNAME = "微信用户"; + + private final UserRepository userRepository; + private final PointsService pointsService; + private final WxMiniClient wxMiniClient; + + @Override + @Transactional + public LoginVO wxLogin(String code, Long inviteUserId) { + // 1. 调微信 code2session 换 openid(同时取 unionid 用于服务号身份关联) + WxMiniClient.WxSession session = wxMiniClient.jscode2session(code); + + // 2. 查/建 User + Optional existing = userRepository.findByOpenid(session.openid()); + if (existing.isPresent()) { + User user = existing.get(); + user.setLastLoginAt(LocalDateTime.now()); + // 补写 unionid:老用户注册时可能未返回(需绑定开放平台),登录时补齐供服务号绑定使用 + if (user.getUnionid() == null && session.unionid() != null) { + user.setUnionid(session.unionid()); + } + userRepository.save(user); + log.info("[登录] 老用户登录 openid={}, userId={}", session.openid(), user.getId()); + return LoginVO.builder() + .token(user.getId().toString()) + .userId(user.getId()) + .isNewUser(false) + .build(); + } + + User newUser = createUser(session); + + // 3. 新用户注册:给推广人 +4 积分(同事务,推广无效时静默跳过,不影响注册) + handleInviteReward(inviteUserId, newUser); + + log.info("[登录] 新用户注册 openid={}, userId={}", session.openid(), newUser.getId()); + return LoginVO.builder() + .token(newUser.getId().toString()) + .userId(newUser.getId()) + .isNewUser(true) + .build(); + } + + /** + * 处理邀请奖励:仅新用户注册路径调用。 + * + *

防刷分规则:无邀请人、自邀、邀请人不存在或被禁用时静默跳过; + * 老用户登录路径不会进入本方法,天然防重复奖励。

+ */ + private void handleInviteReward(Long inviteUserId, User invitee) { + if (inviteUserId == null) { + return; + } + if (inviteUserId.equals(invitee.getId())) { + // 防自邀 + log.warn("[邀请奖励] 自邀请求已忽略 inviteUserId={}", inviteUserId); + return; + } + User inviter = userRepository.findById(inviteUserId).orElse(null); + if (inviter == null + || !Objects.equals(inviter.getStatus(), UserStatusEnum.NORMAL.getCode())) { + log.warn("[邀请奖励] 邀请人无效或已禁用,跳过奖励 inviteUserId={}", inviteUserId); + return; + } + pointsService.award(inviteUserId, PointsEventEnum.INVITE_REGISTER, + PointsConstants.INVITE_REGISTER_POINTS, invitee.getId(), "邀请好友注册成功"); + } + + /** + * 创建新用户,填入所有 NOT NULL 字段的默认值。 + */ + private User createUser(WxMiniClient.WxSession session) { + User user = new User(); + user.setOpenid(session.openid()); + user.setUnionid(session.unionid()); + user.setNickname(DEFAULT_NICKNAME); + user.setGender(GenderEnum.UNKNOWN.getCode()); + user.setRoleType(RoleTypeEnum.NORMAL.getCode()); + user.setPoints(POINTS_INIT); + user.setIsPilotBound(YesNoEnum.NO.getCode()); + user.setIsMerchantBound(YesNoEnum.NO.getCode()); + user.setStatus(UserStatusEnum.NORMAL.getCode()); + user.setLastLoginAt(LocalDateTime.now()); + return userRepository.save(user); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/PointsServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/PointsServiceImpl.java new file mode 100644 index 0000000..f6dc7e9 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/PointsServiceImpl.java @@ -0,0 +1,106 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.PointsConstants; +import com.haisen.laop.common.enums.PointsChangeTypeEnum; +import com.haisen.laop.common.enums.PointsEventEnum; +import com.haisen.laop.entity.PointsDetail; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.PointsDetailRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.PointsService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 积分服务实现,承载积分余额变更与流水写入。 + * + *

事务边界:本类方法不开启独立事务,跟随调用方事务(如发布任务、用户注册、 + * 后台手动调整),保证"业务操作 + 余额变更 + 流水写入"三者原子性。

+ * + *

余额口径:user.points 为余额唯一权威;points_detail 仅流水记录, + * 二者同事务同步写入,不依赖流水汇总回算。

+ * + *

入参约定:积分数量统一传正整数(绝对值),流水落库时由本实现按 + * 事件方向补符号(收入为正、支出为负),并防御性校验"事件方向与方法语义一致"。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PointsServiceImpl implements PointsService { + + private final UserRepository userRepository; + private final PointsDetailRepository pointsDetailRepository; + + @Override + public void award(Long userId, PointsEventEnum event, int points, Long relatedId, String remark) { + if (points <= 0) { + throw new BusinessException("积分增加数量必须为正整数"); + } + if (event.getChangeType() != PointsChangeTypeEnum.GAIN) { + // 防御:award 只允许收入类事件,避免误用导致账务方向错乱 + throw new BusinessException("非法的积分收入事件:" + event); + } + + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException("用户不存在,无法变更积分")); + + int currentPoints = user.getPoints() == null ? 0 : user.getPoints(); + user.setPoints(currentPoints + points); + userRepository.save(user); + + saveDetail(user.getId(), event, points, relatedId, remark); + log.info("[积分收入] userId={}, event={}, points={}→{}", + userId, event, currentPoints, user.getPoints()); + } + + @Override + public void deduct(Long userId, PointsEventEnum event, int points, Long relatedId, String remark) { + if (points <= 0) { + throw new BusinessException("积分扣减数量必须为正整数"); + } + if (event.getChangeType() != PointsChangeTypeEnum.SPEND) { + // 防御:deduct 只允许支出类事件,避免误用导致积分虚增 + throw new BusinessException("非法的积分支出事件:" + event); + } + + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException("用户不存在,无法变更积分")); + + int currentPoints = user.getPoints() == null ? 0 : user.getPoints(); + int nextPoints = currentPoints - points; + if (nextPoints < 0) { + // 积分不足:带特殊错误码抛出,小程序端识别后弹"推广拉新得积分"引导弹窗 + throw new BusinessException(PointsConstants.ERROR_CODE_POINTS_INSUFFICIENT, + PointsConstants.MSG_POINTS_INSUFFICIENT); + } + + user.setPoints(nextPoints); + userRepository.save(user); + + saveDetail(user.getId(), event, -points, relatedId, remark); + log.info("[积分支出] userId={}, event={}, points={}→{}", + userId, event, currentPoints, user.getPoints()); + } + + /** + * 写入积分流水(跟随调用方事务)。 + * + * @param signedPoints 带符号变动值:收入为正、支出为负 + */ + private void saveDetail(Long userId, PointsEventEnum event, int signedPoints, + Long relatedId, String remark) { + PointsDetail detail = PointsDetail.builder() + .userId(userId) + .changeType(event.getChangeType().getCode()) + .eventType(event.getCode()) + .points(signedPoints) + .relatedId(relatedId) + .remark(remark) + .build(); + pointsDetailRepository.save(detail); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/PromoteServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/PromoteServiceImpl.java new file mode 100644 index 0000000..9edc217 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/PromoteServiceImpl.java @@ -0,0 +1,50 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.client.wx.WxMiniClient; +import com.haisen.laop.service.PromoteService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.Base64; + +/** + * 推广服务实现,封装小程序推广码生成。 + * + *

二维码链路:本接口 → 经 {@link WxMiniClient}(token 走 Redis 缓存)调微信 + * {@code getwxacodeunlimit} 生成带 scene 参数的小程序码 → + * scene 格式 {@code i={userId}} → 好友扫码进入小程序,登录链路解析 scene, + * 新用户注册成功后给推广人 +4 积分。

+ * + *

开发环境说明:小程序未发布时通过 {@code check_path=false} 跳过页面校验(client 内固定), + * 并按 {@code wechat.mini.wxacode-env-version} 指定打开版本(develop/trial)。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PromoteServiceImpl implements PromoteService { + + /** 推广码落地页:首页 */ + private static final String QR_PAGE = "pages/home/index"; + + /** scene 参数前缀:i 表示邀请人(invite) */ + private static final String SCENE_PREFIX = "i="; + + /** + * 小程序码打开版本:release(默认)/ trial / develop,开发阶段建议 develop。 + * 配置为空时不传该参数,微信默认 release。 + */ + @Value("${wechat.mini.wxacode-env-version:}") + private String wxacodeEnvVersion; + + private final WxMiniClient wxMiniClient; + + @Override + public String getPromoteQrCode(Long userId) { + byte[] imageBytes = wxMiniClient.getWxacodeUnlimit(QR_PAGE, SCENE_PREFIX + userId, wxacodeEnvVersion); + return Base64.getEncoder().encodeToString(imageBytes); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/TaskServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/TaskServiceImpl.java new file mode 100644 index 0000000..b28455f --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/TaskServiceImpl.java @@ -0,0 +1,1152 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.constants.CertConstants; +import com.haisen.laop.common.constants.PointsConstants; +import com.haisen.laop.common.constants.TaskConstants; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.FileStatusEnum; +import com.haisen.laop.common.enums.FileTypeEnum; +import com.haisen.laop.common.enums.InsuranceTypeEnum; +import com.haisen.laop.common.enums.PointsEventEnum; +import com.haisen.laop.common.enums.TaskRecordStatusEnum; +import com.haisen.laop.common.enums.TaskStatusEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.common.enums.UserStatusEnum; +import com.haisen.laop.common.enums.WxNotifyBizTypeEnum; +import com.haisen.laop.common.enums.YesNoEnum; +import com.haisen.laop.dto.TaskHallQueryDTO; +import com.haisen.laop.dto.TaskManageQueryDTO; +import com.haisen.laop.dto.TaskPublishDTO; +import com.haisen.laop.dto.TaskReviewDTO; +import com.haisen.laop.dto.WxNotifyTaskDTO; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.Pilot; +import com.haisen.laop.entity.SysFile; +import com.haisen.laop.entity.Task; +import com.haisen.laop.entity.TaskRecord; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.SysFileRepository; +import com.haisen.laop.repository.TaskRecordRepository; +import com.haisen.laop.repository.TaskRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.AppConfigService; +import com.haisen.laop.service.PointsService; +import com.haisen.laop.service.TaskService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.TaskApplicantVO; +import com.haisen.laop.vo.TaskManageVO; +import com.haisen.laop.vo.TaskPublishVO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import jakarta.persistence.criteria.Predicate; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 任务服务实现类,承载任务领域所有业务逻辑。 + * + *

职责边界:参数校验 → 多选字段格式转换 → 业务规则校验 → 实体组装 → 持久化 → 返回 VO。 + * 不直接调用其他 Repository,跨仓储协调未来扩展任务列表/详情时再引入。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class TaskServiceImpl implements TaskService { + + private final TaskRepository taskRepository; + private final TaskRecordRepository taskRecordRepository; + private final UserRepository userRepository; + private final PilotRepository pilotRepository; + private final SysFileRepository sysFileRepository; + private final MerchantRepository merchantRepository; + private final FileUrlResolver fileUrlResolver; + private final PointsService pointsService; + private final AppConfigService appConfigService; + private final ApplicationEventPublisher eventPublisher; + + /** + * 是否拦截"申请自己发布的任务"(功能开关,配置 task.grab.self-publish-check-enabled)。 + *

默认 true(代码兜底安全);dev yml 显式关闭便于联调期单账号自测, + * prod yml 显式开启。上线检查项:该开关在正式环境必须为 true。

+ */ + @Value("${task.grab.self-publish-check-enabled:true}") + private boolean selfPublishCheckEnabled; + + @Override + @Transactional(rollbackFor = Exception.class) + public TaskPublishVO publish(Long publisherId, TaskPublishDTO publishDTO) { + // 1. 校验发布人存在性与状态 + User publisher = userRepository.findById(publisherId) + .orElseThrow(() -> new BusinessException("用户不存在")); + if (!Objects.equals(publisher.getStatus(), UserStatusEnum.NORMAL.getCode())) { + throw new BusinessException("账号状态异常,无法发布任务"); + } + + // 1.1 资格吊销拦截:被强制取消资格的商家不可发布任务 + // (认证记录保留,certStatus=4 即吊销态;小程序端发布入口亦会前置弹窗拦截) + Merchant publisherMerchant = merchantRepository.findByUserIdAndDeletedAtIsNull(publisherId); + if (publisherMerchant != null + && Objects.equals(publisherMerchant.getCertStatus(), CertStatusEnum.REVOKED.getCode())) { + throw new BusinessException("您的资格已被强制取消"); + } + + // 2. 业务规则二次校验(@Valid 覆盖不到的) + validateBusinessRules(publishDTO, publisherId); + + // 3. 优质任务仅做标记,积分扣减在任务落库后统一走积分服务(同事务,保证原子性) + boolean isPremium = Boolean.TRUE.equals(publishDTO.getIsPremium()); + + // 4. 多选字段格式转换 + String sceneImageStr = convertListToSemicolonStr(publishDTO.getSceneImageIds()); + String insuranceStr = convertInsuranceCodes(publishDTO.getInsuranceRequireCodes()); + + // 5. 组装实体(Builder 链式构建,避免散落 set 调用) + Task task = Task.builder() + .taskNo(generateTaskNo()) + .name(publishDTO.getName()) + .type(publishDTO.getType()) + .province(publishDTO.getProvince()) + .city(publishDTO.getCity()) + .district(publishDTO.getDistrict()) + .address(publishDTO.getAddress()) + .latitude(publishDTO.getLatitude()) + .longitude(publishDTO.getLongitude()) + .sceneImages(sceneImageStr) + .requiredCount(publishDTO.getRequiredCount()) + .taskStartTime(publishDTO.getTaskStartTime()) + .taskEndTime(publishDTO.getTaskEndTime()) + .reward(publishDTO.getReward()) + .insuranceRequire(insuranceStr) + .contactName(publishDTO.getContactName()) + .contactPhone(publishDTO.getContactPhone()) + .remark(publishDTO.getRemark()) + .status(TaskStatusEnum.PENDING.getCode()) + .isPremium(Boolean.TRUE.equals(isPremium) + ? YesNoEnum.YES.getCode() + : YesNoEnum.NO.getCode()) + .publisherId(publisherId) + .build(); + + // 5. 持久化 + Task saved = taskRepository.save(task); + + // 6. 积分变更(与任务落库同事务,任一失败整体回滚): + // 普通任务奖励积分数 / 优质任务扣减积分数均为运营可配置项(app_config), + // 配置为 0 时表示不奖励 / 不扣减;优质任务积分不足时整体回滚,任务不会被创建 + int awardPoints = appConfigService.getIntValue( + PointsConstants.CONFIG_KEY_POINTS_PUBLISH_AWARD, + PointsConstants.DEFAULT_PUBLISH_AWARD_POINTS); + if (awardPoints > 0) { + pointsService.award(publisherId, PointsEventEnum.PUBLISH_TASK, awardPoints, + saved.getId(), "发布任务:" + saved.getName()); + } + if (isPremium) { + int deductPoints = appConfigService.getIntValue( + PointsConstants.CONFIG_KEY_POINTS_PREMIUM_DEDUCT, + PointsConstants.DEFAULT_PREMIUM_DEDUCT_POINTS); + if (deductPoints > 0) { + pointsService.deduct(publisherId, PointsEventEnum.PREMIUM_TASK, deductPoints, + saved.getId(), "发布优质任务:" + saved.getName()); + } + } + + log.info("[发布任务] publisherId={}, taskId={}, taskNo={}", + publisherId, saved.getId(), saved.getTaskNo()); + + // 7. 构建响应 + return TaskPublishVO.builder() + .taskId(saved.getId()) + .taskNo(saved.getTaskNo()) + .message("发布成功,等待飞手接单") + .build(); + } + + /** + * 校验业务规则(注解校验覆盖不到的跨字段约束和枚举合法性)。 + * + * @param dto 发布表单 + * @param publisherId 发布人 userId,用于校验文件归属 + */ + private void validateBusinessRules(TaskPublishDTO dto, Long publisherId) { + // 任务类型编码合法性 + if (!TaskTypeEnum.isValid(dto.getType())) { + throw new BusinessException("任务类型不合法"); + } + + // 保险类型编码合法性 + if (dto.getInsuranceRequireCodes() != null) { + for (Integer code : dto.getInsuranceRequireCodes()) { + if (!InsuranceTypeEnum.isValid(code)) { + throw new BusinessException("保险类型编码不合法:" + code); + } + } + } + + // 开始时间不能早于今日 00:00:00(允许今日作为开始日期) + LocalDateTime todayStart = LocalDate.now().atStartOfDay(); + if (dto.getTaskStartTime() != null && dto.getTaskStartTime().isBefore(todayStart)) { + throw new BusinessException("开始日期不能早于今日"); + } + + // 结束时间必须晚于开始时间 + if (dto.getTaskStartTime() != null && dto.getTaskEndTime() != null + && !dto.getTaskEndTime().isAfter(dto.getTaskStartTime())) { + throw new BusinessException("结束时间必须晚于开始时间"); + } + + // 场景图数量校验(@Size 已覆盖,此处防御性双重校验) + if (dto.getSceneImageIds() != null && dto.getSceneImageIds().size() > TaskConstants.MAX_SCENE_IMAGE_COUNT) { + throw new BusinessException("场景图最多上传" + TaskConstants.MAX_SCENE_IMAGE_COUNT + "张"); + } + + // 经纬度必须成对出现 + boolean hasLat = StringUtils.isNotBlank(dto.getLatitude()); + boolean hasLng = StringUtils.isNotBlank(dto.getLongitude()); + if (hasLat != hasLng) { + throw new BusinessException("纬度和经度必须同时填写"); + } + + // 场景图文件真实性校验:存在 + 归属当前用户 + 类型是 SCENE_IMAGE + 状态正常 + if (dto.getSceneImageIds() != null && !dto.getSceneImageIds().isEmpty()) { + for (Long fileId : dto.getSceneImageIds()) { + SysFile file = sysFileRepository.findById(fileId) + .orElseThrow(() -> new BusinessException("场景图不存在(fileId=" + fileId + ")")); + + // 归属校验:文件必须是当前用户上传的,防止串改他人文件 + if (file.getUploaderId() == null || !file.getUploaderId().equals(publisherId)) { + throw new BusinessException("场景图不属于当前用户,fileId=" + fileId); + } + + // 类型校验:必须是作业场景图 + if (file.getFileType() == null || !file.getFileType().equals(FileTypeEnum.SCENE_IMAGE.getCode())) { + throw new BusinessException("文件类型不是场景图,fileId=" + fileId); + } + + // 状态校验:文件必须是正常可用状态 + if (!Objects.equals(file.getStatus(), FileStatusEnum.NORMAL.getCode())) { + throw new BusinessException("场景图已被禁用,请重新上传"); + } + } + } + } + + /** + * 将 List 转为分号拼接的 String。null 或空列表返回 null。 + * + *

存储时 null 优于空字符串,避免前端遍历 split 时出现空元素。

+ */ + private String convertListToSemicolonStr(List list) { + if (list == null || list.isEmpty()) { + return null; + } + return list.stream() + .map(Object::toString) + .collect(Collectors.joining(";")); + } + + /** + * 将保险类型编码列表转为分号拼接字符串,并去重。 + */ + private String convertInsuranceCodes(List codes) { + if (codes == null || codes.isEmpty()) { + return null; + } + // 去重排序,保持存储稳定 + return codes.stream() + .distinct() + .sorted() + .map(String::valueOf) + .collect(Collectors.joining(";")); + } + + /** + * 生成任务编号,规则:{@code LAOP + yyyyMMdd + 毫秒后4位},共 13 位。 + * + *

示例:{@code LAOP202608285678}

+ * + *

尾部取毫秒值对 10000 取模后补前导零,冲突时最多重试 10 次。

+ */ + private String generateTaskNo() { + String datePart = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String prefix = TaskConstants.TASK_NO_PREFIX + datePart; + + // 最多重试 10 次保证唯一性;概率极低,几乎不会走到第二遍 + for (int i = 0; i < 10; i++) { + String tailPart = String.format("%0" + TaskConstants.TASK_NO_TAIL_LENGTH + "d", + System.currentTimeMillis() % 10000); + String taskNo = prefix + tailPart; + if (!taskRepository.existsByTaskNo(taskNo)) { + return taskNo; + } + // 冲突时稍微等一下(同一毫秒内极难冲突) + try { Thread.sleep(1); } catch (InterruptedException ignored) { + Thread.currentThread().interrupt(); + } + } + throw new BusinessException("生成任务编号失败,请稍后重试"); + } + + /** + * 抢单大厅分页查询:全平台待接单任务 + 动态筛选(省市区/任务类型/金额区间)。 + * + *

筛选条件为可选组合,用 Specification 动态拼装,避免为每种组合声明派生方法; + * 排序规则:优质任务置顶(isPremium 优先),同组内按创建时间倒序。

+ */ + @Override + public Page hall(TaskHallQueryDTO query, Pageable pageable) { + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + + // 固定条件:仅待接单(可被抢) + 未软删 + predicates.add(cb.equal(root.get("status"), TaskStatusEnum.PENDING.getCode())); + predicates.add(cb.isNull(root.get("deletedAt"))); + + // 区域筛选:按用户选择的最精确层级命中(区县 > 市 > 省) + String province = StringUtils.trimToNull(query.getProvince()); + String city = StringUtils.trimToNull(query.getCity()); + String district = StringUtils.trimToNull(query.getDistrict()); + if (district != null) { + predicates.add(cb.equal(root.get("district"), district)); + } else if (city != null) { + predicates.add(cb.equal(root.get("city"), city)); + } else if (province != null) { + predicates.add(cb.equal(root.get("province"), province)); + } + + // 任务类型:精确匹配 + if (query.getType() != null) { + predicates.add(cb.equal(root.get("type"), query.getType())); + } + + // 金额区间:闭区间,允许单边为空 + BigDecimal minReward = query.getMinReward(); + BigDecimal maxReward = query.getMaxReward(); + if (minReward != null) { + predicates.add(cb.ge(root.get("reward"), minReward)); + } + if (maxReward != null) { + predicates.add(cb.le(root.get("reward"), maxReward)); + } + + // 排序:优质任务置顶,同组内按创建时间倒序 + if (cq != null) { + cq.orderBy(cb.desc(root.get("isPremium")), cb.desc(root.get("createdAt"))); + } + + return cb.and(predicates.toArray(new Predicate[0])); + }; + return taskRepository.findAll(spec, pageable); + } + + // ==================== Web 管理端:任务列表 / 详情 / 取消 / 删除 ==================== + + /** + * Web 管理端任务分页查询:全量任务 + 关键词/类型/状态筛选 + 批量组装发布商家信息。 + * + *

查询策略遵循 AGENTS.md §2.4:Task → Merchant 为多对一关系, + * 先分页查主表(Specification 动态条件),再批量查商家(IN publisherId)组装, + * 避免 JOIN 笛卡尔膨胀与 N+1 查询。

+ */ + @Override + public Page managePage(TaskManageQueryDTO query, Pageable pageable) { + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + // 固定条件:未软删 + predicates.add(cb.isNull(root.get("deletedAt"))); + + // 关键词:同时模糊匹配 taskNo 与 name + String keyword = StringUtils.trimToNull(query.getKeyword()); + if (keyword != null) { + Predicate taskNoLike = cb.like(root.get("taskNo"), "%" + keyword + "%"); + Predicate nameLike = cb.like(root.get("name"), "%" + keyword + "%"); + predicates.add(cb.or(taskNoLike, nameLike)); + } + + // 任务类型:精确匹配 + if (query.getType() != null) { + predicates.add(cb.equal(root.get("type"), query.getType())); + } + + // 是否优质任务:精确匹配 + if (query.getIsPremium() != null) { + predicates.add(cb.equal(root.get("isPremium"), query.getIsPremium())); + } + + // 任务状态:精确匹配 + if (query.getStatus() != null) { + predicates.add(cb.equal(root.get("status"), query.getStatus())); + } + + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + Page taskPage = taskRepository.findAll(spec, pageable); + + // 批量查发布商家:收集 publisherId → IN 查询 → 构建 userId→Merchant 映射 + Set publisherIds = taskPage.getContent().stream() + .map(Task::getPublisherId) + .collect(Collectors.toSet()); + Map merchantMap = publisherIds.isEmpty() + ? Map.of() + : merchantRepository.findByUserIdInAndDeletedAtIsNull(publisherIds).stream() + .collect(Collectors.toMap(Merchant::getUserId, m -> m, (a, b) -> a)); + + // 列表不解析场景图 URL(列表不展示,节省文件查询开销) + return taskPage.map(task -> toManageVO(task, + merchantMap.get(task.getPublisherId()), false, null)); + } + + /** + * Web 管理端任务详情:全量任务信息 + 发布商家信息 + 场景图 URL + 商家门头照 URL。 + */ + @Override + public TaskManageVO manageDetail(Long id) { + Task task = getExistingTask(id); + Merchant merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(task.getPublisherId()); + + // 详情额外填充场景图 URL 和商家门头照/营业执照 URL + List sceneImageUrls = resolveSceneImageUrls(task.getSceneImages()); + return toManageVO(task, merchant, true, sceneImageUrls); + } + + /** + * 强制取消任务:将状态置为"已取消"。 + * + *

仅允许从待接单/已接单/执行中状态取消;草稿/已完成/已取消的任务不允许操作。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(Long id) { + Task task = getExistingTask(id); + Integer currentStatus = task.getStatus(); + if (currentStatus == null + || Objects.equals(currentStatus, TaskStatusEnum.DRAFT.getCode()) + || Objects.equals(currentStatus, TaskStatusEnum.COMPLETED.getCode()) + || Objects.equals(currentStatus, TaskStatusEnum.CANCELLED.getCode())) { + throw new BusinessException("当前任务状态不允许取消"); + } + task.setStatus(TaskStatusEnum.CANCELLED.getCode()); + taskRepository.save(task); + log.info("[任务管理] 强制取消任务成功, id={}, taskNo={}", id, task.getTaskNo()); + } + + /** + * 软删除任务:写入 deleted_at。 + * + *

仅允许删除草稿/已完成/已取消的任务;进行中(待接单/已接单/执行中)的任务需先取消。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + Task task = getExistingTask(id); + Integer currentStatus = task.getStatus(); + if (currentStatus == null + || (!Objects.equals(currentStatus, TaskStatusEnum.DRAFT.getCode()) + && !Objects.equals(currentStatus, TaskStatusEnum.COMPLETED.getCode()) + && !Objects.equals(currentStatus, TaskStatusEnum.CANCELLED.getCode()))) { + throw new BusinessException("进行中的任务不允许删除,请先取消"); + } + task.setDeletedAt(LocalDateTime.now()); + taskRepository.save(task); + log.info("[任务管理] 删除任务成功, id={}, taskNo={}", id, task.getTaskNo()); + } + + // ==================== 飞手申请接单 / 商家审批 ==================== + + /** + * 飞手申请接单:校验链通过后落库申请记录,事务提交后经队列发送商家通知。 + * + *

允许同一任务被多名飞手申请(商家择优),但同一飞手对同一任务仅可申请一次; + * 申请人数上限为防御性设计,防止单任务被刷屏。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void grab(Long taskId, Long userId) { + // 1. 飞手身份校验:未认证 / 已吊销均拦截(吊销文案与产品侧弹窗保持一致) + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + if (pilot == null) { + // 专用业务码 40301:前端据此弹"完成飞手认证"引导弹窗(区别于普通错误 toast) + throw new BusinessException(CertConstants.CODE_NOT_PILOT_CERTIFIED, "请先完成飞手认证后再接单"); + } + if (Objects.equals(pilot.getCertStatus(), CertStatusEnum.REVOKED.getCode())) { + throw new BusinessException("您的资格已被强制取消"); + } + if (!Objects.equals(pilot.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) { + throw new BusinessException("飞手认证审核中,通过后即可接单"); + } + + // 2. 任务状态校验:仅"待接单"可申请 + Task task = getExistingTask(taskId); + if (!Objects.equals(task.getStatus(), TaskStatusEnum.PENDING.getCode())) { + throw new BusinessException("该任务已被接单或已取消"); + } + + // 3. 防止商家以飞手身份抢自己发布的任务。 + // 开发联调期可用单账号自测完整流程,通过配置关闭;正式环境必须开启(prod yml 已固定 true)。 + // 开关按项目规约走配置文件(功能开关属可配置项,禁止硬编码常量切换) + if (selfPublishCheckEnabled && Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException("不能申请自己发布的任务"); + } + + // 4. 重复申请拦截 + 申请人数上限防御 + if (taskRecordRepository.existsByTaskIdAndUserIdAndDeletedAtIsNull(taskId, userId)) { + throw new BusinessException("您已申请过该任务,请等待商家确认"); + } + long appliedCount = taskRecordRepository + .countByTaskIdAndStatusAndDeletedAtIsNull(taskId, TaskRecordStatusEnum.APPLIED.getCode()); + if (appliedCount >= TaskConstants.MAX_APPLICANT_COUNT) { + throw new BusinessException("该任务申请人数已达上限,请关注其他任务"); + } + + // 5. 落库申请记录(merchant_id 冗余发布商家,便于后续按商家维度检索) + LocalDateTime applyTime = LocalDateTime.now(); + Merchant publisherMerchant = merchantRepository + .findByUserIdAndDeletedAtIsNull(task.getPublisherId()); + TaskRecord record = new TaskRecord(); + record.setTaskId(taskId); + record.setUserId(userId); + record.setPilotId(pilot.getId()); + record.setMerchantId(publisherMerchant != null ? publisherMerchant.getId() : null); + record.setStatus(TaskRecordStatusEnum.APPLIED.getCode()); + record.setApplyTime(applyTime); + record.setAcceptTime(null); + record.setInsuranceVerified(YesNoEnum.NO.getCode()); + TaskRecord saved = taskRecordRepository.save(record); + + // 6. 发布通知事件:@TransactionalEventListener(AFTER_COMMIT) 保证事务提交成功后才入队发送, + // 事务回滚(如唯一约束冲突)时不会发出"幽灵通知" + eventPublisher.publishEvent(new WxNotifyTaskDTO( + task.getPublisherId(), + WxNotifyBizTypeEnum.TASK_APPLY.getCode(), + saved.getId(), + task.getTaskNo(), + task.getName(), + resolveTypeName(task.getType()), + buildHandlerText(pilot), + applyTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")))); + + log.info("[任务申请] 飞手申请接单成功: taskId={}, taskNo={}, pilotId={}, userId={}", + taskId, task.getTaskNo(), pilot.getId(), userId); + } + + /** + * 飞手撤销接单申请(产品规则:申请后可随时撤销,任务开始后需联系商家)。 + * + *

状态机:① 申请"待商家确认"→ 直接置为已撤销,任务保持待接单; + * ② 申请"已同意"且任务仍处"已接单"→ 记录置为已撤销,任务回滚为待接单 + * (释放给其他飞手,原自动关闭的其余申请不恢复);任务进入进行中/已完成/已取消后不可撤销。 + * 撤销成功后事务提交经队列发送"飞手撤销通知"给商家(模板未配置时自动跳过并落日志)。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void withdraw(Long taskId, Long userId) { + // 1. 申请记录定位与归属校验(唯一约束 (task_id, user_id) 保证至多一条) + TaskRecord record = taskRecordRepository.findByTaskIdAndUserIdAndDeletedAtIsNull(taskId, userId) + .orElseThrow(() -> new BusinessException("您未申请过该任务")); + Task task = getExistingTask(taskId); + LocalDateTime withdrawTime = LocalDateTime.now(); + + boolean approved = Objects.equals(record.getStatus(), TaskRecordStatusEnum.APPROVED.getCode()); + boolean applied = Objects.equals(record.getStatus(), TaskRecordStatusEnum.APPLIED.getCode()); + if (!applied && !approved) { + throw new BusinessException("该申请已被处理,无法撤销"); + } + + if (approved) { + // 已接单的任务:仅"已接单"态可撤销,任务开始/结束后需联系商家 + if (!Objects.equals(task.getStatus(), TaskStatusEnum.ACCEPTED.getCode())) { + throw new BusinessException("任务已开始或已结束,无法撤销,请联系商家处理"); + } + task.setStatus(TaskStatusEnum.PENDING.getCode()); + task.setAcceptedPilotId(null); + taskRepository.save(task); + } + + // 2. 记录置为已撤销(cancel_time/cancel_reason 留痕,供申诉与风控审计) + record.setStatus(TaskRecordStatusEnum.WITHDRAWN.getCode()); + record.setCancelTime(withdrawTime); + record.setCancelReason(TaskConstants.WITHDRAW_REASON_PILOT); + taskRecordRepository.save(record); + + // 3. 事务提交后通知商家(bizType=3 飞手撤销通知;模板未配置时自动跳过并落日志) + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + eventPublisher.publishEvent(new WxNotifyTaskDTO( + task.getPublisherId(), + WxNotifyBizTypeEnum.CANCEL_NOTIFY.getCode(), + record.getId(), + task.getTaskNo(), + task.getName(), + resolveTypeName(task.getType()), + buildHandlerText(pilot), + withdrawTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")))); + + log.info("[任务申请] 飞手撤销申请成功: taskId={}, taskNo={}, userId={}, wasApproved={}", + taskId, task.getTaskNo(), userId, approved); + } + + /** + * 通知模板"处理人"文案:飞手认证姓名 + 电话;飞手档案缺失时降级为"飞手"。 + */ + private String buildHandlerText(Pilot pilot) { + if (pilot == null) { + return "飞手"; + } + return pilot.getName() + " " + pilot.getPhone(); + } + + /** + * 商家查看任务申请飞手列表:任务归属校验 → 批量查飞手 → 批量解析头像 URL。 + * + *

查询策略遵循 AGENTS.md §2.4:先查申请记录,再按 userId 集合批量查飞手(IN), + * 头像文件批量查(IN),杜绝循环单查。

+ */ + @Override + public List applicants(Long taskId, Long userId) { + Task task = getExistingTask(taskId); + if (!Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException(403, "仅任务发布人可查看申请信息"); + } + + List records = taskRecordRepository + .findByTaskIdAndDeletedAtIsNullOrderByApplyTimeAscIdAsc(taskId); + if (records.isEmpty()) { + return Collections.emptyList(); + } + + // 批量查飞手(申请记录以 user_id 关联飞手) + Set userIds = records.stream().map(TaskRecord::getUserId).collect(Collectors.toSet()); + Map pilotMap = pilotRepository.findByUserIdInAndDeletedAtIsNull(userIds).stream() + .collect(Collectors.toMap(Pilot::getUserId, p -> p, (a, b) -> a)); + + // 批量解析头像绝对 URL:收集 fileId → 批量查文件 → 按 id 顺序拼绝对路径 + Set avatarFileIds = pilotMap.values().stream() + .map(Pilot::getAvatarFileId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map avatarUrlMap = avatarFileIds.isEmpty() + ? Map.of() + : sysFileRepository.findAllByIdIn(avatarFileIds).stream() + .collect(Collectors.toMap(SysFile::getId, SysFile::getFileUrl, (a, b) -> a)); + + return records.stream() + .map(record -> toApplicantVO(record, pilotMap.get(record.getUserId()), avatarUrlMap)) + .collect(Collectors.toList()); + } + + /** + * 商家审批申请。 + * + *

同意:任务状态推进为"已接单"并写入承接飞手;同事务内将其余"已申请" + * 记录自动关闭(统一文案),形成清晰闭环,避免商家对已失效申请继续操作。

+ *

拒绝:仅关闭当前申请,任务保持待接单,可继续接受其他飞手申请。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void review(Long recordId, Long userId, TaskReviewDTO dto) { + TaskRecord record = taskRecordRepository.findByIdAndDeletedAtIsNull(recordId) + .orElseThrow(() -> new BusinessException("申请记录不存在")); + Task task = getExistingTask(record.getTaskId()); + if (!Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException(403, "仅任务发布人可审批申请"); + } + if (!Objects.equals(record.getStatus(), TaskRecordStatusEnum.APPLIED.getCode())) { + throw new BusinessException("该申请已被处理,请勿重复操作"); + } + + LocalDateTime now = LocalDateTime.now(); + if (Boolean.TRUE.equals(dto.getApprove())) { + // 任务已被其他申请占用(并发场景:同任务另一申请先被同意) + if (!Objects.equals(task.getStatus(), TaskStatusEnum.PENDING.getCode())) { + throw new BusinessException("该任务已被接单,无法同意此申请"); + } + // 其余"已申请"记录自动关闭 + List others = taskRecordRepository + .findByTaskIdAndStatusAndDeletedAtIsNull(task.getId(), TaskRecordStatusEnum.APPLIED.getCode()); + for (TaskRecord other : others) { + if (other.getId().equals(record.getId())) { + continue; + } + other.setStatus(TaskRecordStatusEnum.REJECTED.getCode()); + other.setRejectTime(now); + other.setRejectReason(TaskConstants.AUTO_REJECT_REASON); + } + taskRecordRepository.saveAll(others); + + record.setStatus(TaskRecordStatusEnum.APPROVED.getCode()); + record.setAcceptTime(now); + task.setStatus(TaskStatusEnum.ACCEPTED.getCode()); + task.setAcceptedPilotId(record.getPilotId()); + taskRepository.save(task); + log.info("[任务审批] 商家同意接单申请: recordId={}, taskId={}, pilotId={}", + recordId, task.getId(), record.getPilotId()); + } else { + record.setStatus(TaskRecordStatusEnum.REJECTED.getCode()); + record.setRejectTime(now); + record.setRejectReason(StringUtils.trimToNull(dto.getReason())); + log.info("[任务审批] 商家拒绝接单申请: recordId={}, taskId={}, reason={}", + recordId, task.getId(), dto.getReason()); + } + taskRecordRepository.save(record); + } + + @Override + public Map countApplicants(Collection taskIds) { + if (taskIds == null || taskIds.isEmpty()) { + return Map.of(); + } + return taskRecordRepository + .countByTaskIdInGrouped(taskIds, TaskRecordStatusEnum.APPLIED.getCode()) + .stream() + .collect(Collectors.toMap( + row -> (Long) row[0], + row -> (Long) row[1], + (a, b) -> a)); + } + + // ==================== 商家任务状态流转:撤回 / 确认开始 / 确认完成 ==================== + + /** + * 商家撤回任务:已发布(待接单/已接单)→ 已取消,关闭全部活跃申请记录。 + * + *

若已有飞手接单,撤回后飞手侧申请记录同步关闭并收到通知。 + * 撤回不可逆,任务不再出现在商家"已发布/进行中"列表中。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void recall(Long taskId, Long userId) { + Task task = getExistingTask(taskId); + if (!Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException(403, "仅任务发布人可撤回任务"); + } + Integer currentStatus = task.getStatus(); + if (!Objects.equals(currentStatus, TaskStatusEnum.PENDING.getCode()) + && !Objects.equals(currentStatus, TaskStatusEnum.ACCEPTED.getCode())) { + throw new BusinessException("当前任务状态不允许撤回"); + } + + LocalDateTime recallTime = LocalDateTime.now(); + + // 先查出全部活跃申请记录(待确认 + 已同意),在更改状态前捕获已同意记录 + List activeRecords = taskRecordRepository + .findByTaskIdInAndStatusInAndDeletedAtIsNull( + List.of(taskId), + List.of(TaskRecordStatusEnum.APPLIED.getCode(), + TaskRecordStatusEnum.APPROVED.getCode())); + // 记录原本已同意的飞手(撤回后需通知该飞手) + TaskRecord approvedRecord = activeRecords.stream() + .filter(r -> Objects.equals(r.getStatus(), TaskRecordStatusEnum.APPROVED.getCode())) + .findFirst() + .orElse(null); + + // 全部活跃记录统一置为已拒绝 + for (TaskRecord record : activeRecords) { + record.setStatus(TaskRecordStatusEnum.REJECTED.getCode()); + record.setRejectTime(recallTime); + record.setRejectReason(TaskConstants.RECALL_REASON_MERCHANT); + } + taskRecordRepository.saveAll(activeRecords); + + // 任务状态置为已取消,清除已接单飞手 + task.setStatus(TaskStatusEnum.CANCELLED.getCode()); + task.setAcceptedPilotId(null); + taskRepository.save(task); + + // 若有已同意的飞手,事务提交后通知其任务被撤回 + if (approvedRecord != null && approvedRecord.getUserId() != null) { + eventPublisher.publishEvent(new WxNotifyTaskDTO( + approvedRecord.getUserId(), + WxNotifyBizTypeEnum.TASK_RECALL.getCode(), + approvedRecord.getId(), + task.getTaskNo(), + task.getName(), + resolveTypeName(task.getType()), + "商家", + recallTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")))); + } + + log.info("[任务撤回] 商家撤回任务成功: taskId={}, taskNo={}, userId={}, closedRecords={}", + taskId, task.getTaskNo(), userId, activeRecords.size()); + } + + /** + * 商家确认开始:已发布(待接单/已接单)→ 执行中。 + * + *

无需飞手已接单也可直接开始;开始后待确认申请自动关闭, + * 已接单飞手记录写入实际开始时间。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void start(Long taskId, Long userId) { + Task task = getExistingTask(taskId); + if (!Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException(403, "仅任务发布人可确认开始"); + } + Integer currentStatus = task.getStatus(); + if (!Objects.equals(currentStatus, TaskStatusEnum.PENDING.getCode()) + && !Objects.equals(currentStatus, TaskStatusEnum.ACCEPTED.getCode())) { + throw new BusinessException("当前任务状态不允许确认开始"); + } + + LocalDateTime startTime = LocalDateTime.now(); + + // 关闭全部待确认申请(已同意的不动,飞手已接单的进入执行中) + List pendingRecords = taskRecordRepository + .findByTaskIdAndStatusAndDeletedAtIsNull(taskId, TaskRecordStatusEnum.APPLIED.getCode()); + for (TaskRecord record : pendingRecords) { + record.setStatus(TaskRecordStatusEnum.REJECTED.getCode()); + record.setRejectTime(startTime); + record.setRejectReason(TaskConstants.AUTO_REJECT_REASON_TASK_STARTED); + } + taskRecordRepository.saveAll(pendingRecords); + + // 已接单飞手记录写入实际开始时间 + if (task.getAcceptedPilotId() != null) { + TaskRecord approvedRecord = taskRecordRepository + .findByTaskIdAndUserIdAndDeletedAtIsNull(taskId, + getUserIdByPilotId(task.getAcceptedPilotId())) + .orElse(null); + if (approvedRecord != null) { + approvedRecord.setRecordStartTime(startTime); + taskRecordRepository.save(approvedRecord); + } + } + + task.setStatus(TaskStatusEnum.EXECUTING.getCode()); + taskRepository.save(task); + + log.info("[任务开始] 商家确认开始任务: taskId={}, taskNo={}, userId={}", + taskId, task.getTaskNo(), userId); + } + + /** + * 商家确认完成:执行中 → 已完成,已接单飞手记录写入实际结束时间。 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void complete(Long taskId, Long userId) { + Task task = getExistingTask(taskId); + if (!Objects.equals(task.getPublisherId(), userId)) { + throw new BusinessException(403, "仅任务发布人可确认完成"); + } + if (!Objects.equals(task.getStatus(), TaskStatusEnum.EXECUTING.getCode())) { + throw new BusinessException("仅执行中的任务可确认完成"); + } + + LocalDateTime completeTime = LocalDateTime.now(); + + // 已接单飞手记录写入实际结束时间 + if (task.getAcceptedPilotId() != null) { + TaskRecord approvedRecord = taskRecordRepository + .findByTaskIdAndUserIdAndDeletedAtIsNull(taskId, + getUserIdByPilotId(task.getAcceptedPilotId())) + .orElse(null); + if (approvedRecord != null) { + approvedRecord.setRecordEndTime(completeTime); + taskRecordRepository.save(approvedRecord); + } + } + + task.setStatus(TaskStatusEnum.COMPLETED.getCode()); + taskRepository.save(task); + + log.info("[任务完成] 商家确认完成任务: taskId={}, taskNo={}, userId={}", + taskId, task.getTaskNo(), userId); + } + + @Override + public Map countMyTasksByTabs(Long userId) { + long published = taskRepository.countByPublisherIdAndStatusInAndDeletedAtIsNull( + userId, List.of(TaskStatusEnum.PENDING.getCode(), TaskStatusEnum.ACCEPTED.getCode())); + long running = taskRepository.countByPublisherIdAndStatusInAndDeletedAtIsNull( + userId, List.of(TaskStatusEnum.EXECUTING.getCode())); + long done = taskRepository.countByPublisherIdAndStatusInAndDeletedAtIsNull( + userId, List.of(TaskStatusEnum.COMPLETED.getCode())); + Map result = new java.util.HashMap<>(); + result.put("published", published); + result.put("running", running); + result.put("done", done); + return result; + } + + @Override + public Map countMyAcceptedByTabs(Long userId) { + long accepted = taskRecordRepository.countByUserIdAndRecordStatusesAndTaskStatuses( + userId, + List.of(TaskRecordStatusEnum.APPLIED.getCode(), TaskRecordStatusEnum.APPROVED.getCode()), + List.of(TaskStatusEnum.PENDING.getCode(), TaskStatusEnum.ACCEPTED.getCode())); + long running = taskRecordRepository.countByUserIdAndRecordStatusesAndTaskStatuses( + userId, + List.of(TaskRecordStatusEnum.APPROVED.getCode()), + List.of(TaskStatusEnum.EXECUTING.getCode())); + long done = taskRecordRepository.countByUserIdAndRecordStatusesAndTaskStatuses( + userId, + List.of(TaskRecordStatusEnum.APPROVED.getCode()), + List.of(TaskStatusEnum.COMPLETED.getCode())); + Map result = new java.util.HashMap<>(); + result.put("accepted", accepted); + result.put("running", running); + result.put("done", done); + return result; + } + + /** + * 通过飞手 ID 反查用户 ID(task.acceptedPilotId 存的是 pilot.id,需反查 user_id)。 + */ + private Long getUserIdByPilotId(Long pilotId) { + if (pilotId == null) { + return null; + } + Pilot pilot = pilotRepository.findById(pilotId).orElse(null); + return pilot != null ? pilot.getUserId() : null; + } + + /** + * 申请记录 → 审批列表行 VO。 + */ + private TaskApplicantVO toApplicantVO(TaskRecord record, Pilot pilot, Map avatarUrlMap) { + String avatarUrl = null; + if (pilot != null && pilot.getAvatarFileId() != null) { + String relativeUrl = avatarUrlMap.get(pilot.getAvatarFileId()); + avatarUrl = fileUrlResolver.buildAbsoluteUrl(relativeUrl); + } + return TaskApplicantVO.builder() + .recordId(record.getId()) + .pilotId(pilot != null ? pilot.getId() : null) + .pilotName(pilot != null ? pilot.getName() : "飞手已注销") + .phone(pilot != null ? pilot.getPhone() : null) + .avatarUrl(avatarUrl) + .certStatus(pilot != null ? pilot.getCertStatus() : null) + .applyTime(record.getApplyTime()) + .status(record.getStatus()) + .statusName(resolveRecordStatusName(record.getStatus())) + .rejectReason(record.getRejectReason()) + .build(); + } + + /** + * 申请记录状态编码 → 中文名称(商家视角的申请管理文案)。 + * + *

注意与飞手侧"我的接单"列表文案区分:飞手侧同意态展示"已接单" + * ({@link TaskRecordStatusEnum#getDesc()}),商家侧申请列表展示"已同意", + * 两个视角的语义不同,不能共用同一文案。

+ */ + private String resolveRecordStatusName(Integer status) { + TaskRecordStatusEnum recordStatus = TaskRecordStatusEnum.of(status); + if (recordStatus == null) { + return "未知"; + } + return switch (recordStatus) { + case APPLIED -> "待商家确认"; + case APPROVED -> "已同意"; + case REJECTED -> "已拒绝"; + case WITHDRAWN -> "已撤销"; + }; + } + + // ==================== 私有方法:管理端 VO 组装 ==================== + + /** + * 按 ID 查询未软删除的任务,不存在时抛业务异常。 + */ + private Task getExistingTask(Long id) { + Task task = taskRepository.findById(id).orElse(null); + if (task == null || task.getDeletedAt() != null) { + throw new BusinessException("任务不存在或已删除"); + } + return task; + } + + /** + * 任务实体 → 管理端 VO,组装类型名/区域文本/保险名称/商家信息。 + * + * @param task 任务实体 + * @param merchant 发布商家实体(可能为 null,如用户未绑定商家身份) + * @param withMerchantDetail 是否填充商家完整信息(列表只填名称等基础字段,详情额外填服务类型) + * @param sceneImageUrls 场景图绝对 URL 列表(列表传 null,详情解析后传入) + */ + private TaskManageVO toManageVO(Task task, Merchant merchant, boolean withMerchantDetail, + List sceneImageUrls) { + // 商家信息:详情额外填充门头照/营业执照 URL + TaskManageVO.MerchantInfo merchantInfo = merchant != null + ? buildMerchantInfo(merchant, withMerchantDetail, withMerchantDetail) : null; + + return TaskManageVO.builder() + // Task 实体字段 + .id(task.getId()) + .taskNo(task.getTaskNo()) + .name(task.getName()) + .type(task.getType()) + .province(task.getProvince()) + .city(task.getCity()) + .district(task.getDistrict()) + .address(task.getAddress()) + .latitude(task.getLatitude()) + .longitude(task.getLongitude()) + .requiredCount(task.getRequiredCount()) + .taskStartTime(task.getTaskStartTime()) + .taskEndTime(task.getTaskEndTime()) + .reward(task.getReward()) + .insuranceRequire(task.getInsuranceRequire()) + .contactName(task.getContactName()) + .contactPhone(task.getContactPhone()) + .remark(task.getRemark()) + .status(task.getStatus()) + .isPremium(task.getIsPremium()) + .publisherId(task.getPublisherId()) + .acceptedPilotId(task.getAcceptedPilotId()) + .createdAt(task.getCreatedAt()) + .updatedAt(task.getUpdatedAt()) + // 扩展组装字段 + .typeName(resolveTypeName(task.getType())) + .regionText(buildRegionText(task.getProvince(), task.getCity())) + .insuranceNames(buildInsuranceNames(task.getInsuranceRequire())) + .merchant(merchantInfo) + .sceneImageUrls(sceneImageUrls) + .build(); + } + + /** + * 商家实体 → 商家简要信息 VO。 + * + * @param merchant 商家实体 + * @param withDetail 是否填充门头照/营业执照 URL(列表不解析文件,节省开销) + */ + private TaskManageVO.MerchantInfo buildMerchantInfo(Merchant merchant, boolean withDetail, + boolean resolveFileUrls) { + TaskManageVO.MerchantInfo.MerchantInfoBuilder builder = TaskManageVO.MerchantInfo.builder() + .id(merchant.getId()) + .name(merchant.getName()) + .contactName(merchant.getContactName()) + .contactPhone(merchant.getContactPhone()) + .address(merchant.getAddress()) + .certStatus(merchant.getCertStatus()) + .certStatusName(buildCertStatusName(merchant.getCertStatus())); + + // 详情场景额外解析门头照与营业执照绝对 URL + if (resolveFileUrls) { + builder.doorImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getDoorImage())) + .licenseImageUrl(fileUrlResolver.resolveAbsoluteUrl(merchant.getLicenseFileId())); + } + return builder.build(); + } + + /** + * 解析场景图 fileId 分号串 → 绝对 URL 列表(批量查文件,避免 N+1)。 + */ + private List resolveSceneImageUrls(String sceneImages) { + if (StringUtils.isBlank(sceneImages)) { + return Collections.emptyList(); + } + // 收集 fileId + Set fileIds = new HashSet<>(); + for (String idStr : sceneImages.split(";")) { + try { + fileIds.add(Long.parseLong(idStr.trim())); + } catch (NumberFormatException ignored) { + // 防御性忽略非法 ID + } + } + if (fileIds.isEmpty()) { + return Collections.emptyList(); + } + // 批量查文件 → 构建 fileId→relativeUrl 映射 + Map fileUrlMap = sysFileRepository.findAllByIdIn(fileIds).stream() + .collect(Collectors.toMap(SysFile::getId, SysFile::getFileUrl, (a, b) -> a)); + + // 按原始分号串顺序解析绝对 URL + List urls = new ArrayList<>(); + for (String idStr : sceneImages.split(";")) { + try { + Long fileId = Long.parseLong(idStr.trim()); + String relativeUrl = fileUrlMap.get(fileId); + if (StringUtils.isNotBlank(relativeUrl)) { + urls.add(fileUrlResolver.buildAbsoluteUrl(relativeUrl)); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法 ID + } + } + return urls; + } + + /** + * 任务类型编码 → 中文名称。 + */ + private String resolveTypeName(Integer type) { + TaskTypeEnum typeEnum = TaskTypeEnum.of(type); + return typeEnum != null ? typeEnum.getDesc() : "其他"; + } + + /** + * 省/市 → 区域合并文本(直辖市 province==city 时只展示城市)。 + */ + private String buildRegionText(String province, String city) { + String p = StringUtils.trimToNull(province); + String c = StringUtils.trimToNull(city); + if (p != null && p.equals(c)) { + return c; + } + if (p != null && c != null) { + return p + "·" + c; + } + return StringUtils.defaultIfBlank(p, c); + } + + /** + * 保险要求编码分号串 → 保险类型名称列表。 + */ + private List buildInsuranceNames(String insuranceRequire) { + if (StringUtils.isBlank(insuranceRequire)) { + return Collections.emptyList(); + } + List names = new ArrayList<>(); + for (String codeStr : insuranceRequire.split(";")) { + try { + Integer code = Integer.parseInt(codeStr.trim()); + InsuranceTypeEnum type = InsuranceTypeEnum.of(code); + if (type != null) { + names.add(type.getDesc()); + } + } catch (NumberFormatException ignored) { + // 防御性忽略非法编码 + } + } + return names; + } + + /** + * 认证状态编码 → 中文名称(枚举 desc 已覆盖全部取值,非法/空编码兜底"未知")。 + */ + private String buildCertStatusName(Integer certStatus) { + CertStatusEnum certStatusEnum = CertStatusEnum.of(certStatus); + return certStatusEnum != null ? certStatusEnum.getDesc() : "未知"; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/UserServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..2312a4a --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/UserServiceImpl.java @@ -0,0 +1,431 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.BusinessException; +import com.haisen.laop.common.enums.CertStatusEnum; +import com.haisen.laop.common.enums.GenderEnum; +import com.haisen.laop.common.enums.PointsChangeTypeEnum; +import com.haisen.laop.common.enums.PointsEventEnum; +import com.haisen.laop.common.enums.RoleTypeEnum; +import com.haisen.laop.common.enums.TaskStatusEnum; +import com.haisen.laop.common.enums.TaskTypeEnum; +import com.haisen.laop.dto.PointsAdjustDTO; +import com.haisen.laop.dto.UserQueryDTO; +import com.haisen.laop.entity.Merchant; +import com.haisen.laop.entity.Pilot; +import com.haisen.laop.entity.PointsDetail; +import com.haisen.laop.entity.Task; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.MerchantRepository; +import com.haisen.laop.repository.PilotRepository; +import com.haisen.laop.repository.PointsDetailRepository; +import com.haisen.laop.repository.TaskRepository; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.CertService; +import com.haisen.laop.service.PointsService; +import com.haisen.laop.service.UserService; +import com.haisen.laop.service.support.FileUrlResolver; +import com.haisen.laop.vo.MerchantCertVO; +import com.haisen.laop.vo.PilotCertVO; +import com.haisen.laop.vo.PointsDetailVO; +import com.haisen.laop.vo.TaskBriefVO; +import com.haisen.laop.vo.UserManageVO; +import com.haisen.laop.vo.UserMerchantDetailVO; +import com.haisen.laop.vo.UserPilotDetailVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 用户服务实现,承载 Web 管理端用户管理领域的全部业务逻辑。 + * + *

职责边界:用户分页查询(Specification 动态条件)+ 批量组装飞手/商家认证状态; + * 商家/飞手认证详情委托 {@link CertService} 复用既有 VO 组装与文件 URL 解析逻辑; + * 详情弹窗中的"任务列表"由本 Service 独立查询并组装 {@link TaskBriefVO}。

+ * + *

查询策略:User → Pilot/Merchant 为一对一关系(user_id 唯一), + * 遵循 AGENTS.md §2.4 "分步批量查":先分页查主表,再 IN 批量查 Pilot/Merchant, + * 构建 userId → certStatus 映射后组装,避免 JOIN 笛卡尔膨胀与 N+1 查询。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class UserServiceImpl implements UserService { + + /** 详情弹窗任务展示上限,避免一次性拉取过多历史任务。 */ + private static final int TASK_LIMIT = 10; + + /** 取消认证前的"待完成任务"状态集合:1待接单 2已接单 3执行中。 */ + private static final List IN_PROGRESS_STATUSES = List.of( + TaskStatusEnum.PENDING.getCode(), + TaskStatusEnum.ACCEPTED.getCode(), + TaskStatusEnum.EXECUTING.getCode() + ); + + private final UserRepository userRepository; + private final PilotRepository pilotRepository; + private final MerchantRepository merchantRepository; + private final TaskRepository taskRepository; + private final PointsDetailRepository pointsDetailRepository; + private final CertService certService; + private final FileUrlResolver fileUrlResolver; + private final PointsService pointsService; + + /** + * 用户分页查询:固定条件"未软删",可选条件"昵称/手机号模糊"。 + */ + @Override + public Page pageUsers(UserQueryDTO query, Pageable pageable) { + Specification spec = (root, cq, cb) -> { + List predicates = new ArrayList<>(); + // 固定条件:未软删除 + predicates.add(cb.isNull(root.get("deletedAt"))); + + // 关键词:同时模糊匹配昵称与手机号 + String keyword = StringUtils.trimToNull(query.getKeyword()); + if (keyword != null) { + Predicate nicknameLike = cb.like(root.get("nickname"), "%" + keyword + "%"); + Predicate phoneLike = cb.like(root.get("phone"), "%" + keyword + "%"); + predicates.add(cb.or(nicknameLike, phoneLike)); + } + + return cq.where(predicates.toArray(new Predicate[0])) + .orderBy(cb.desc(root.get("createdAt"))) + .getRestriction(); + }; + + Page userPage = userRepository.findAll(spec, pageable); + + // 批量查飞手/商家:收集 userId → IN 查询 → 构建 userId→Pilot / userId→Merchant 映射 + Set userIds = userPage.getContent().stream() + .map(User::getId) + .collect(Collectors.toSet()); + + Map pilotMap = userIds.isEmpty() + ? Map.of() + : pilotRepository.findByUserIdInAndDeletedAtIsNull(userIds).stream() + .collect(Collectors.toMap(Pilot::getUserId, p -> p, (a, b) -> a)); + + Map merchantMap = userIds.isEmpty() + ? Map.of() + : merchantRepository.findByUserIdInAndDeletedAtIsNull(userIds).stream() + .collect(Collectors.toMap(Merchant::getUserId, m -> m, (a, b) -> a)); + + return userPage.map(user -> toManageVO(user, + pilotMap.get(user.getId()), merchantMap.get(user.getId()))); + } + + /** + * 商家详情弹窗包装 VO:cert 信息 + 最近发布的任务列表。 + */ + @Override + public UserMerchantDetailVO getMerchantDetail(Long userId) { + MerchantCertVO cert = certService.getMerchantCert(userId); + if (cert.getCertStatus() == null + || Objects.equals(cert.getCertStatus(), CertStatusEnum.NONE.getCode())) { + throw new BusinessException("该用户未提交商家认证信息"); + } + + // 商家发布的任务:publisherId 即 userId(与 merchant.userId 一致) + List publisherTasks = taskRepository + .findByPublisherIdAndDeletedAtIsNullOrderByIdDesc(userId); + + return UserMerchantDetailVO.builder() + .cert(cert) + .recentTasks(truncateAndBuildBriefs(publisherTasks)) + .build(); + } + + /** + * 飞手详情弹窗包装 VO:cert 信息 + 最近接单的任务列表。 + */ + @Override + public UserPilotDetailVO getPilotDetail(Long userId) { + PilotCertVO cert = certService.getPilotCert(userId); + if (cert.getCertStatus() == null + || Objects.equals(cert.getCertStatus(), CertStatusEnum.NONE.getCode())) { + throw new BusinessException("该用户未提交飞手认证信息"); + } + + // 飞手接单的任务:acceptedPilotId 关联的是 Pilot.id(非 userId),需先查 Pilot + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + List acceptedTasks = pilot != null + ? taskRepository.findByAcceptedPilotIdAndDeletedAtIsNullOrderByIdDesc(pilot.getId()) + : List.of(); + + return UserPilotDetailVO.builder() + .cert(cert) + .recentTasks(truncateAndBuildBriefs(acceptedTasks)) + .build(); + } + + /** + * 强制取消商家认证:将商家认证状态置为"已吊销"(保留记录,不软删), + * 并批量取消该商家仍在交易中的任务(状态置为已取消,不软删,使其在"我的发布"中以"已取消"标签展示)。 + * + *

设计决策:吊销只翻转 certStatus 至 {@link CertStatusEnum#REVOKED}, + * 不删除 merchant 记录——这样小程序个人中心通过查询 merchant.certStatus 即可判断 + * "不展示认证标签",且保留了原认证信息便于管理员恢复资格。被吊销商家不可再发布任务 + * (见 {@link com.haisen.laop.service.impl.TaskServiceImpl#publish} 的吊销拦截)。

+ * + *

事务边界:@Transactional 保证商家状态翻转 + 任务批量取消原子性。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void revokeMerchantCert(Long userId) { + Merchant merchant = merchantRepository.findByUserIdAndDeletedAtIsNull(userId); + if (merchant == null) { + throw new BusinessException("该用户无有效商家认证记录"); + } + if (!Objects.equals(merchant.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) { + throw new BusinessException("仅已认证的商家可执行取消操作"); + } + + // 1. 批量取消该商家仍在交易中的任务:状态置为"已取消",不软删 + // (使其在"我的发布"中以"已取消"标签展示,符合需求#3的展示策略) + List merchantTasks = taskRepository + .findByPublisherIdAndDeletedAtIsNullOrderByIdDesc(userId); + List toCancel = new ArrayList<>(); + for (Task task : merchantTasks) { + if (IN_PROGRESS_STATUSES.contains(task.getStatus())) { + task.setStatus(TaskStatusEnum.CANCELLED.getCode()); + toCancel.add(task); + } + } + if (!toCancel.isEmpty()) { + taskRepository.saveAll(toCancel); + log.info("取消商家认证时批量取消任务:userId={}, taskCount={}", userId, toCancel.size()); + } + + // 2. 翻转商家认证状态为"已吊销"(保留记录,不软删) + merchant.setCertStatus(CertStatusEnum.REVOKED.getCode()); + merchantRepository.save(merchant); + + log.info("强制取消商家认证:userId={}, merchantId={}, 取消任务数={}", + userId, merchant.getId(), toCancel.size()); + } + + /** + * 强制取消飞手认证:校验无进行中任务 → 将飞手认证状态置为"已吊销"(保留记录,不软删)。 + * + *

设计决策:与商家吊销一致,仅翻转 certStatus 至 + * {@link CertStatusEnum#REVOKED},保留 pilot 记录。被吊销飞手不可再接单任务 + * (小程序端在接单入口前置弹窗拦截"您的资格已被强制取消")。

+ * + *

事务边界:@Transactional 保证状态翻转原子性。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public void revokePilotCert(Long userId) { + Pilot pilot = pilotRepository.findByUserIdAndDeletedAtIsNull(userId); + if (pilot == null) { + throw new BusinessException("该用户无有效飞手认证记录"); + } + if (!Objects.equals(pilot.getCertStatus(), CertStatusEnum.CERTIFIED.getCode())) { + throw new BusinessException("仅已认证的飞手可执行取消操作"); + } + + // 前置校验:存在待完成任务时拒绝取消(避免飞手中途弃单) + long pendingTaskCount = taskRepository + .countByAcceptedPilotIdAndStatusInAndDeletedAtIsNull(pilot.getId(), IN_PROGRESS_STATUSES); + if (pendingTaskCount > 0) { + throw new BusinessException("该飞手存在 " + pendingTaskCount + " 条进行中的任务,请先处理完毕后再取消认证"); + } + + // 翻转飞手认证状态为"已吊销"(保留记录,不软删) + pilot.setCertStatus(CertStatusEnum.REVOKED.getCode()); + pilotRepository.save(pilot); + + log.info("强制取消飞手认证:userId={}, pilotId={}", userId, pilot.getId()); + } + + /** + * 用户积分明细分页查询:按时间倒序返回指定用户的积分增减流水。 + * + *

职责说明:Service 层负责 Repository 调用 + PO→VO 转换 + 分页元数据封装, + * Controller 仅接收参数并透传调用,符合 project_rules.md §分层架构要求。

+ * + * @param userId 用户 ID + * @param pageNo 页码(0 基) + * @param pageSize 每页条数 + * @return 分页数据,含 list/totalElements/totalPages/pageNo/pageSize + */ + @Override + public Map pointsDetail(Long userId, int pageNo, int pageSize) { + Pageable pageable = PageRequest.of(pageNo, pageSize, + Sort.by(Sort.Direction.DESC, "createdAt")); + Page page = pointsDetailRepository + .findByUserIdAndDeletedAtIsNullOrderByCreatedAtDesc(userId, pageable); + + Map data = new HashMap<>(); + data.put("list", page.getContent().stream().map(this::toPointsDetailVO).toList()); + data.put("totalElements", page.getTotalElements()); + data.put("totalPages", page.getTotalPages()); + data.put("pageNo", page.getNumber()); + data.put("pageSize", page.getSize()); + return data; + } + + /** + * 后台手动增减积分:方向校验 → 余额预检 → 委托积分服务同事务变更余额并写流水。 + * + *

扣减场景的"积分不足"在此前置拦截,给管理端返回可读的余额提示, + * 不复用积分服务内面向小程序的 10001 推广引导错误码与文案。

+ */ + @Override + @Transactional(rollbackFor = Exception.class) + public Integer adjustPoints(Long userId, PointsAdjustDTO dto) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException("用户不存在,无法调整积分")); + + Integer changeType = dto.getChangeType(); + int points = dto.getPoints(); + String remark = dto.getRemark() == null ? null : dto.getRemark().trim(); + int currentPoints = user.getPoints() == null ? 0 : user.getPoints(); + + if (PointsChangeTypeEnum.GAIN.getCode().equals(changeType)) { + pointsService.award(userId, PointsEventEnum.MANUAL_ADD, points, null, remark); + } else if (PointsChangeTypeEnum.SPEND.getCode().equals(changeType)) { + if (currentPoints < points) { + // 管理端场景:明确告知当前余额与扣减数量,不允许扣成负数 + throw new BusinessException("该用户当前积分余额为 " + currentPoints + + ",不足以扣减 " + points + " 积分"); + } + pointsService.deduct(userId, PointsEventEnum.MANUAL_DEDUCT, points, null, remark); + } else { + throw new BusinessException("变动类型不合法(仅支持 1新增 2扣减)"); + } + + // pointsService 与本方法操作同一持久化上下文的同一实体,此处读到的即最新余额 + log.info("[手动调整积分] userId={}, changeType={}, points={}, balance={}", + userId, changeType, points, user.getPoints()); + return user.getPoints(); + } + + // ==================== 私有方法:VO 组装 ==================== + + /** + * PointsDetail 实体 → PointsDetailVO:事件名称按 PointsEventEnum 翻译,前端直接展示。 + */ + private PointsDetailVO toPointsDetailVO(PointsDetail detail) { + PointsEventEnum event = PointsEventEnum.of(detail.getEventType()); + return PointsDetailVO.builder() + .changeType(detail.getChangeType()) + .eventType(detail.getEventType()) + .eventName(event == null ? "积分变动" : event.getDesc()) + .points(detail.getPoints()) + .remark(detail.getRemark()) + .createdAt(detail.getCreatedAt()) + .build(); + } + + /** + * 取前 {@link #TASK_LIMIT} 条任务并转为 TaskBriefVO 列表(含状态中文名与标签配色)。 + */ + private List truncateAndBuildBriefs(List tasks) { + if (tasks == null || tasks.isEmpty()) { + return null; + } + int end = Math.min(tasks.size(), TASK_LIMIT); + List result = new ArrayList<>(end); + for (int i = 0; i < end; i++) { + Task task = tasks.get(i); + TaskTypeEnum typeEnum = TaskTypeEnum.of(task.getType()); + TaskStatusEnum statusEnum = TaskStatusEnum.of(task.getStatus()); + result.add(TaskBriefVO.builder() + .id(task.getId()) + .name(task.getName()) + .typeName(typeEnum != null ? typeEnum.getDesc() : "其他") + .reward(task.getReward()) + .status(task.getStatus()) + .statusName(statusEnum != null ? statusEnum.getDesc() : "未知") + .statusTag(resolveStatusTag(task.getStatus())) + .isPremium(task.getIsPremium()) + .regionText(buildRegionText(task)) + .build()); + } + return result; + } + + /** + * 省市区拼接展示文本,相邻层级重复时去重(如直辖市"天津市·天津市·和平区" → "天津市·和平区")。 + */ + private String buildRegionText(Task task) { + List parts = new ArrayList<>(); + for (String part : new String[]{task.getProvince(), task.getCity(), task.getDistrict()}) { + if (StringUtils.isNotBlank(part) + && (parts.isEmpty() || !parts.get(parts.size() - 1).equals(part))) { + parts.add(part); + } + } + return parts.isEmpty() ? null : String.join("·", parts); + } + + /** + * 任务状态编码 → el-tag type,与前端标签配色对齐。 + */ + private String resolveStatusTag(Integer status) { + TaskStatusEnum statusEnum = TaskStatusEnum.of(status); + if (statusEnum == null) { + return "info"; + } + return switch (statusEnum) { + case PENDING -> "success"; + case ACCEPTED -> "primary"; + case EXECUTING -> "warning"; + case CANCELLED -> "danger"; + case DRAFT, COMPLETED -> "info"; + }; + } + + /** + * 用户实体 → 管理端 VO,组装性别/角色中文名与飞手/商家认证状态。 + */ + private UserManageVO toManageVO(User user, Pilot pilot, Merchant merchant) { + // 认证状态以 Pilot/Merchant 实际记录为准;无记录则为 null(前端据此渲染用户类型标签) + return UserManageVO.builder() + .id(user.getId()) + .nickname(user.getNickname()) + .avatarUrl(user.getAvatarUrl()) + .phone(user.getPhone()) + .gender(user.getGender()) + .genderName(buildGenderName(user.getGender())) + .roleType(user.getRoleType()) + .roleTypeName(buildRoleTypeName(user.getRoleType())) + .pilotCertStatus(pilot != null ? pilot.getCertStatus() : null) + .merchantCertStatus(merchant != null ? merchant.getCertStatus() : null) + .lastLoginAt(user.getLastLoginAt()) + .createdAt(user.getCreatedAt()) + .points(user.getPoints()) + .build(); + } + + /** 性别编码 → 中文名(枚举 desc 已覆盖全部取值,非法/空编码兜底"未知")。 */ + private String buildGenderName(Integer gender) { + GenderEnum genderEnum = GenderEnum.of(gender); + return genderEnum != null ? genderEnum.getDesc() : "未知"; + } + + /** 主角色类型编码 → 中文名(枚举 desc 已覆盖全部取值,非法/空编码兜底"未知")。 */ + private String buildRoleTypeName(Integer roleType) { + RoleTypeEnum roleTypeEnum = RoleTypeEnum.of(roleType); + return roleTypeEnum != null ? roleTypeEnum.getDesc() : "未知"; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/WxMessageLogServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/WxMessageLogServiceImpl.java new file mode 100644 index 0000000..160e71c --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/WxMessageLogServiceImpl.java @@ -0,0 +1,122 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.common.enums.WxNotifyBizTypeEnum; +import com.haisen.laop.common.enums.WxSendStatusEnum; +import com.haisen.laop.dto.MessageLogQueryDTO; +import com.haisen.laop.entity.WxMessageLog; +import com.haisen.laop.repository.WxMessageLogRepository; +import com.haisen.laop.service.WxMessageLogService; +import com.haisen.laop.vo.WxMessageLogVO; +import jakarta.persistence.criteria.Predicate; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 微信模板消息发送日志服务实现 —— Web 管理端分页查询。 + * + *

查询策略:多条件组合筛选采用 Specification 动态拼装(遵循 AGENTS.md §2.4), + * 单表查询无关联 JOIN,分页与排序完全在 DB 层完成。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WxMessageLogServiceImpl implements WxMessageLogService { + + /** 单页条数上限,防止一次性拉取全量日志拖垮管理端页面。 */ + private static final int MAX_PAGE_SIZE = 100; + + private final WxMessageLogRepository wxMessageLogRepository; + + @Override + public Page page(MessageLogQueryDTO query) { + Specification spec = buildSpec(query); + Pageable pageable = PageRequest.of( + query.getPageNo() == null ? 0 : Math.max(query.getPageNo(), 0), + query.getPageSize() == null ? 10 : Math.min(Math.max(query.getPageSize(), 1), MAX_PAGE_SIZE), + Sort.by(Sort.Direction.DESC, "createdAt")); + + return wxMessageLogRepository.findAll(spec, pageable).map(this::toVO); + } + + /** + * 按筛选条件动态拼装查询规格,全部条件可选、取 AND 连接。 + */ + private Specification buildSpec(MessageLogQueryDTO query) { + return (root, cbQuery, cb) -> { + List predicates = new ArrayList<>(); + if (query.getUserId() != null) { + predicates.add(cb.equal(root.get("userId"), query.getUserId())); + } + if (query.getBizType() != null) { + predicates.add(cb.equal(root.get("bizType"), query.getBizType())); + } + if (query.getSendStatus() != null) { + predicates.add(cb.equal(root.get("sendStatus"), query.getSendStatus())); + } + if (StringUtils.hasText(query.getOpenId())) { + predicates.add(cb.like(root.get("openId"), "%" + query.getOpenId().trim() + "%")); + } + return cb.and(predicates.toArray(new Predicate[0])); + }; + } + + /** + * 实体转 VO,附带业务类型与发送状态的中文描述,供管理端直接渲染。 + */ + private WxMessageLogVO toVO(WxMessageLog entity) { + return WxMessageLogVO.builder() + .id(entity.getId()) + .userId(entity.getUserId()) + .bizType(entity.getBizType()) + .bizTypeName(resolveBizTypeName(entity.getBizType())) + .bizId(entity.getBizId()) + .templateId(entity.getTemplateId()) + .openId(entity.getOpenId()) + .msgId(entity.getMsgId()) + .sendStatus(entity.getSendStatus()) + .sendStatusName(resolveSendStatusName(entity.getSendStatus())) + .skipReason(entity.getSkipReason()) + .errCode(entity.getErrCode()) + .errMsg(entity.getErrMsg()) + .resultStatus(entity.getResultStatus()) + .content(entity.getContent()) + .sendTime(entity.getSendTime()) + .resultTime(entity.getResultTime()) + .createdAt(entity.getCreatedAt()) + .build(); + } + + /** + * 业务类型编码转中文名,未收录的编码原样返回编码值兜底。 + */ + private String resolveBizTypeName(Integer bizType) { + if (bizType == null) { + return null; + } + WxNotifyBizTypeEnum bizTypeEnum = WxNotifyBizTypeEnum.of(bizType); + return bizTypeEnum != null ? bizTypeEnum.getDesc() : String.valueOf(bizType); + } + + /** + * 发送状态编码转中文名,未收录的编码原样返回编码值兜底。 + */ + private String resolveSendStatusName(Integer sendStatus) { + if (sendStatus == null) { + return null; + } + WxSendStatusEnum sendStatusEnum = WxSendStatusEnum.of(sendStatus); + return sendStatusEnum != null ? sendStatusEnum.getDesc() : String.valueOf(sendStatus); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/WxMpCallbackServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/WxMpCallbackServiceImpl.java new file mode 100644 index 0000000..e52c112 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/WxMpCallbackServiceImpl.java @@ -0,0 +1,249 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.client.wx.WxMpClient; +import com.haisen.laop.common.constants.WxMessageConstants; +import com.haisen.laop.common.enums.WxSendStatusEnum; +import com.haisen.laop.entity.User; +import com.haisen.laop.entity.WxMessageLog; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.repository.WxMessageLogRepository; +import com.haisen.laop.service.WxMpCallbackService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.Optional; + +/** + * 微信服务号回调事件处理实现。 + * + *

送达结果回写:微信在模板消息发送任务完成后推送 TEMPLATESENDJOBFINISH 事件 + * (XML 明文,含 MsgID 与 Status),按 MsgID 关联发送日志更新最终送达状态, + * Web 管理端"消息推送日志"页可见全链路结果。

+ * + *

服务号身份绑定:用户关注服务号触发 subscribe 事件,经微信用户信息接口换取 + * unionid,匹配到平台用户后写入 mp_openid;取关触发 unsubscribe 事件解绑, + * 此后模板消息自动跳过并记录原因。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WxMpCallbackServiceImpl implements WxMpCallbackService { + + /** XML 报文字段名(微信事件消息均为一级字段) */ + private static final String XML_FIELD_FROM_USER_NAME = "FromUserName"; + private static final String XML_FIELD_MSG_ID = "MsgID"; + + /** 微信约定的成功应答报文 */ + private static final String REPLY_SUCCESS = "success"; + + @Value("${wechat.mp.server-token:}") + private String serverToken; + + private final WxMessageLogRepository wxMessageLogRepository; + private final UserRepository userRepository; + private final WxMpClient wxMpClient; + + @Override + public String verifyUrl(String signature, String timestamp, String nonce, String echostr) { + if (!verifySignature(signature, timestamp, nonce)) { + log.warn("[微信回调] URL 验证签名不通过: timestamp={}, nonce={}", timestamp, nonce); + return null; + } + return echostr; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String handleEventMessage(String xmlBody) { + if (StringUtils.isBlank(xmlBody)) { + return null; + } + Element root = parseXml(xmlBody); + if (root == null) { + log.warn("[微信回调] XML 报文解析失败,忽略"); + return null; + } + + String event = text(root, WxMessageConstants.XML_FIELD_EVENT); + if (!WxMessageConstants.HANDLED_EVENTS.contains(event)) { + // 其他事件(菜单、客服消息等)当前不处理,直接应答成功避免微信重推 + log.debug("[微信回调] 忽略未接入事件: event={}", event); + return REPLY_SUCCESS; + } + + String fromOpenid = text(root, XML_FIELD_FROM_USER_NAME); + switch (event) { + case WxMessageConstants.EVENT_TEMPLATE_SEND_JOB_FINISH -> handleSendJobFinish(root, fromOpenid); + case WxMessageConstants.EVENT_SUBSCRIBE -> handleSubscribe(fromOpenid); + case WxMessageConstants.EVENT_UNSUBSCRIBE -> handleUnsubscribe(fromOpenid); + default -> log.warn("[微信回调] 未处理的事件类型: event={}", event); + } + return REPLY_SUCCESS; + } + + /** + * 模板消息送达结果:按 MsgID 关联日志,回写最终送达状态。 + * + *

Status 取值:success(成功)/ failed:user block(用户拒收)/ failed: system failed 等。

+ */ + private void handleSendJobFinish(Element root, String fromOpenid) { + Long msgId = longText(root, XML_FIELD_MSG_ID); + String status = text(root, WxMessageConstants.XML_FIELD_STATUS); + if (msgId == null) { + log.warn("[微信回调] 送达结果缺少 MsgID: fromOpenid={}", fromOpenid); + return; + } + + Optional logOpt = wxMessageLogRepository.findByMsgId(msgId); + if (logOpt.isEmpty()) { + // 可能是接入本功能前的历史消息,仅告警不报错 + log.warn("[微信回调] 送达结果未找到对应日志: msgId={}, status={}", msgId, status); + return; + } + + WxMessageLog messageLog = logOpt.get(); + boolean success = WxMessageConstants.STATUS_SUCCESS.equals(status); + messageLog.setSendStatus(success + ? WxSendStatusEnum.DELIVERED.getCode() + : WxSendStatusEnum.FAILED.getCode()); + messageLog.setResultStatus(status); + messageLog.setResultTime(LocalDateTime.now()); + if (!success) { + messageLog.setErrCode(resolveErrCode(status)); + messageLog.setErrMsg("微信送达失败:" + status); + } + wxMessageLogRepository.save(messageLog); + log.info("[微信回调] 送达结果已回写: msgId={}, status={}, logId={}", msgId, status, messageLog.getId()); + } + + /** + * 关注事件:openid → unionid → 平台用户,绑定 mp_openid。 + * + *

若服务号未绑定开放平台(无法取到 unionid)或未匹配到用户, + * 仅记日志待人工排查,不阻断应答。

+ */ + private void handleSubscribe(String mpOpenid) { + if (StringUtils.isBlank(mpOpenid)) { + return; + } + String unionid = wxMpClient.getUserInfo(mpOpenid) + .map(WxMpClient.WxMpUserInfo::unionid) + .orElse(null); + if (unionid == null) { + log.warn("[微信回调] 关注事件无法获取 unionid(服务号可能未绑定开放平台),跳过绑定: mpOpenid={}", mpOpenid); + return; + } + User user = userRepository.findByUnionidAndDeletedAtIsNull(unionid).orElse(null); + if (user == null) { + log.warn("[微信回调] 关注事件未匹配到平台用户: unionid={}, mpOpenid={}", unionid, mpOpenid); + return; + } + user.setMpOpenid(mpOpenid); + userRepository.save(user); + log.info("[微信回调] 服务号 openid 绑定成功: userId={}, mpOpenid={}", user.getId(), mpOpenid); + } + + /** + * 取关事件:清空 mp_openid,后续发送自动跳过并记录原因。 + */ + private void handleUnsubscribe(String mpOpenid) { + if (StringUtils.isBlank(mpOpenid)) { + return; + } + User user = userRepository.findByMpOpenidAndDeletedAtIsNull(mpOpenid).orElse(null); + if (user == null) { + log.info("[微信回调] 取关事件未匹配到绑定用户: mpOpenid={}", mpOpenid); + return; + } + user.setMpOpenid(null); + userRepository.save(user); + log.info("[微信回调] 用户取关,已解绑服务号 openid: userId={}", user.getId()); + } + + /** + * 校验微信回调签名:sha1(字典序排序(token, timestamp, nonce))。 + */ + @Override + public boolean verifySignature(String signature, String timestamp, String nonce) { + if (StringUtils.isAnyBlank(serverToken, signature, timestamp, nonce)) { + return false; + } + try { + String[] arr = {serverToken, timestamp, nonce}; + Arrays.sort(arr); + MessageDigest md = MessageDigest.getInstance("SHA-1"); + byte[] digest = md.digest(String.join("", arr).getBytes(StandardCharsets.UTF_8)); + StringBuilder hex = new StringBuilder(); + for (byte b : digest) { + hex.append(String.format("%02x", b)); + } + return hex.toString().equals(signature); + } catch (Exception e) { + log.error("[微信回调] 签名计算异常", e); + return false; + } + } + + /** + * 解析 XML 报文(禁用外部实体,防 XXE 注入)。 + */ + private Element parseXml(String xml) { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); + Document doc = factory.newDocumentBuilder() + .parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8))); + return doc.getDocumentElement(); + } catch (Exception e) { + log.warn("[微信回调] XML 解析异常: {}", e.getMessage()); + return null; + } + } + + /** + * 读取 XML 一级子节点文本,节点缺失返回空串。 + */ + private String text(Element root, String tagName) { + var nodes = root.getElementsByTagName(tagName); + return nodes.getLength() > 0 ? nodes.item(0).getTextContent() : ""; + } + + /** + * 读取 XML 一级子节点并转 Long,非法或缺省返回 null。 + */ + private Long longText(Element root, String tagName) { + try { + String value = text(root, tagName); + return value.isBlank() ? null : Long.parseLong(value.trim()); + } catch (NumberFormatException e) { + return null; + } + } + + /** + * 从送达 Status 提取错误码(如 failed:user block → USER_BLOCK)。 + */ + private String resolveErrCode(String status) { + if (WxMessageConstants.STATUS_USER_BLOCK.equals(status)) { + return "USER_BLOCK"; + } + return StringUtils.startsWith(status, WxMessageConstants.STATUS_FAILED_PREFIX) ? "SYSTEM_FAILED" : status; + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/WxMpSubscribeServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/WxMpSubscribeServiceImpl.java new file mode 100644 index 0000000..8e88d37 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/WxMpSubscribeServiceImpl.java @@ -0,0 +1,47 @@ +package com.haisen.laop.service.impl; + +import com.haisen.laop.client.wx.WxMpClient; +import com.haisen.laop.common.constants.WxMessageConstants; +import com.haisen.laop.entity.User; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.service.WxMpSubscribeService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +/** + * 服务号关注状态查询服务实现。 + * + *

判定策略(两级):① 未绑定 mp_openid 视为未关注(快速路径,不调微信)—— + * mp_openid 由服务号回调的关注/取关事件维护,绑定即关注;② 已绑定时实时查询 + * 微信 {@code user/info} 的 subscribe 字段,覆盖"取关事件尚未回调"的短暂窗口期, + * 避免对已取关用户继续发消息(发送失败体验差)。

+ * + *

降级策略:微信实时查询失败(网络抖动/凭据异常)时视为已关注—— + * 关注引导弹窗属增强体验而非业务必需,误弹打扰未关注用户的代价 + * 高于漏弹(漏弹仅损失一次提醒机会,下次操作仍会再校验)。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WxMpSubscribeServiceImpl implements WxMpSubscribeService { + + private final UserRepository userRepository; + private final WxMpClient wxMpClient; + + @Override + public boolean isSubscribed(Long userId) { + User user = userRepository.findById(userId).orElse(null); + if (user == null || StringUtils.isBlank(user.getMpOpenid())) { + return false; + } + return wxMpClient.getUserInfo(user.getMpOpenid()) + .map(info -> info.subscribe() != null + && info.subscribe() == WxMessageConstants.MP_SUBSCRIBED) + // 查询失败不阻断业务:视为已关注,避免网络抖动导致误弹关注引导 + .orElse(true); + } +} diff --git a/src/main/java/com/haisen/laop/service/impl/WxNotifyServiceImpl.java b/src/main/java/com/haisen/laop/service/impl/WxNotifyServiceImpl.java new file mode 100644 index 0000000..b366fb9 --- /dev/null +++ b/src/main/java/com/haisen/laop/service/impl/WxNotifyServiceImpl.java @@ -0,0 +1,561 @@ +package com.haisen.laop.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.haisen.laop.client.wx.WxMpClient; +import com.haisen.laop.common.constants.WxMessageConstants; +import com.haisen.laop.common.enums.WxNotifyBizTypeEnum; +import com.haisen.laop.common.enums.WxNotifyTaskStatusEnum; +import com.haisen.laop.common.enums.WxSendStatusEnum; +import com.haisen.laop.dto.AppConfigChangedEvent; +import com.haisen.laop.dto.WxNotifyTaskDTO; +import com.haisen.laop.entity.User; +import com.haisen.laop.entity.WxMessageLog; +import com.haisen.laop.entity.WxNotifyTask; +import com.haisen.laop.repository.UserRepository; +import com.haisen.laop.repository.WxMessageLogRepository; +import com.haisen.laop.repository.WxNotifyTaskRepository; +import com.haisen.laop.service.AppConfigService; +import com.haisen.laop.service.WxNotifyService; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 微信服务号模板消息通知服务实现:DB 持久化队列(替代原内存队列)。 + * + *

生产侧:业务方法发布 {@link WxNotifyTaskDTO} 事件, + * {@code @TransactionalEventListener(AFTER_COMMIT)} 保证仅在业务事务提交成功后入队, + * 杜绝"事务回滚了消息却已发出"的脏通知。入队 = INSERT wx_notify_task(status=PENDING)。

+ * + *

消费侧:单线程 daemon 消费者轮询 DB,CAS 占位(status 0→1)后发送微信。 + * 服务重启后 PENDING 任务自动恢复消费,不丢失。失败按 retry_count + next_retry_at + * 指数退避重试,超过上限置 FAILED 并软删除。

+ * + *

多实例安全:CAS UPDATE 原子性防重复消费,无需行锁竞争。

+ * + *

僵尸回收:服务崩溃后残留的 PROCESSING 行,下次消费循环开始时 + * 按 updated_at 超时统一回退 PENDING。

+ * + *

与 wx_message_log 的关系:task 表管"调度"(待办/重试/僵尸回收), + * log 表管"发送结果审计"(提交/回调),通过 task_id 关联。

+ * + * @author duhao + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WxNotifyServiceImpl implements WxNotifyService { + + /** + * thing 类型字段值上限。 + *

微信模板协议约束(thing 类 20 字符以内,超长提交失败 47003), + * 由外部协议固定、不随部署环境变化,按项目规约保留为代码常量,不配置化。

+ */ + private static final int THING_VALUE_MAX_LENGTH = 20; + + /** 消费者轮询间隔兜底默认值(秒) */ + private static final int DEFAULT_POLL_INTERVAL_SECONDS = 3; + + /** 每批取任务数兜底默认值 */ + private static final int DEFAULT_BATCH_SIZE = 20; + + /** 最大重试次数兜底默认值 */ + private static final int DEFAULT_MAX_RETRY_COUNT = 3; + + /** 重试间隔兜底默认值(分钟,逗号分隔,第 N 次重试取第 N 个值) */ + private static final String DEFAULT_RETRY_INTERVAL_MINUTES = "1,5,30"; + + /** 僵尸任务超时兜底默认值(秒,PROCESSING 超过此时长未更新即回收) */ + private static final int DEFAULT_ZOMBIE_TIMEOUT_SECONDS = 300; + + /** 优雅停机等待兜底默认值(秒) */ + private static final int DEFAULT_SHUTDOWN_WAIT_SECONDS = 10; + + private final UserRepository userRepository; + private final WxMessageLogRepository wxMessageLogRepository; + private final WxNotifyTaskRepository wxNotifyTaskRepository; + private final WxMpClient wxMpClient; + private final ObjectMapper objectMapper; + private final AppConfigService appConfigService; + + /** 模板 ID:任务申请通知(飞手接单 → 通知商家) */ + @Value("${wechat.mp.template-id.task-notify:}") + private String taskNotifyTemplateId; + + /** 模板 ID:商家审核结果通知(→ 通知飞手),未申请时留空自动跳过 */ + @Value("${wechat.mp.template-id.review-notify:}") + private String reviewNotifyTemplateId; + + /** 模板 ID:飞手撤销申请通知(→ 通知商家),未申请时留空自动跳过 */ + @Value("${wechat.mp.template-id.cancel-notify:}") + private String cancelNotifyTemplateId; + + /** 消费者轮询间隔(秒,无任务时等待) */ + @Value("${wechat.mp.notify.poll-interval-seconds:" + DEFAULT_POLL_INTERVAL_SECONDS + "}") + private int pollIntervalSeconds; + + /** 每批取任务数上限 */ + @Value("${wechat.mp.notify.batch-size:" + DEFAULT_BATCH_SIZE + "}") + private int batchSize; + + /** 最大重试次数(超过后置 FAILED 并软删除) */ + @Value("${wechat.mp.notify.max-retry-count:" + DEFAULT_MAX_RETRY_COUNT + "}") + private int maxRetryCount; + + /** 重试间隔(分钟,逗号分隔,第 N 次重试取第 N 个值,超出取最后一个) */ + @Value("${wechat.mp.notify.retry-interval-minutes:" + DEFAULT_RETRY_INTERVAL_MINUTES + "}") + private String retryIntervalMinutes; + + /** 僵尸任务超时阈值(秒,PROCESSING 超过此时长未更新即回收为 PENDING) */ + @Value("${wechat.mp.notify.zombie-timeout-seconds:" + DEFAULT_ZOMBIE_TIMEOUT_SECONDS + "}") + private int zombieTimeoutSeconds; + + /** 优雅停机等待时长(秒) */ + @Value("${wechat.mp.notify.shutdown-wait-seconds:" + DEFAULT_SHUTDOWN_WAIT_SECONDS + "}") + private int shutdownWaitSeconds; + + /** 解析后的重试间隔数组(分钟),@PostConstruct 中从 retryIntervalMinutes 解析 */ + private int[] retryIntervalMinutesArray; + + /** 消费者线程引用,用于优雅停机 */ + private Thread consumerThread; + + /** 运行开关,@PreDestroy 置 false 后消费者退出循环 */ + private volatile boolean running = true; + + /** + * 推送总开关内存镜像({@code app_config.mp_push_enabled})。 + *

由 {@link #onAppConfigChanged} 在配置变更时刷新,关闭时消费者跳过所有 wx_notify_task + * DB 操作。用 volatile 保证监听器线程(事件发布线程)与消费者线程间的可见性。

+ */ + private volatile boolean pushEnabled = true; + + // ==================== 生产侧:事务提交后持久化入队 ==================== + + /** + * 监听"模板消息发送任务"事件:业务事务提交成功后持久化到 wx_notify_task。 + * + *

phase=AFTER_COMMIT 是本设计的关键:入队动作若发生在事务内,消费者可能 + * 先于事务提交读到未提交数据(或事务回滚后仍发出通知)。

+ */ + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, fallbackExecution = true) + public void onNotifyTask(WxNotifyTaskDTO task) { + try { + enqueue(task); + } catch (Exception e) { + log.error("[模板消息] 任务持久化失败: userId={}, bizType={}, bizId={}", + task.userId(), task.bizType(), task.bizId(), e); + } + } + + @Override + public boolean enqueue(WxNotifyTaskDTO task) { + WxNotifyTask entity = WxNotifyTask.builder() + .userId(task.userId()) + .bizType(task.bizType()) + .bizId(task.bizId()) + .taskNo(task.taskNo()) + .taskName(task.taskName()) + .serviceTypeName(task.serviceTypeName()) + .handler(task.handler()) + .operateTime(task.operateTime()) + .status(WxNotifyTaskStatusEnum.PENDING.getCode()) + .retryCount(0) + .build(); + wxNotifyTaskRepository.save(entity); + return true; + } + + // ==================== 消费侧:DB 轮询 + CAS 占位 ==================== + + /** + * 启动消费者线程(Spring 生命周期托管,随应用启停)。 + * + *

启动时从 DB 一次性加载 {@code mp_push_enabled} 初值到内存镜像, + * 之后开关变更通过 {@link #onAppConfigChanged} 事件驱动刷新,不再每轮查 DB。

+ */ + @PostConstruct + public void start() { + retryIntervalMinutesArray = parseRetryIntervals(retryIntervalMinutes); + pushEnabled = appConfigService.isEnabled(WxMessageConstants.CONFIG_KEY_MP_PUSH_ENABLED); + consumerThread = new Thread(this::consumeLoop, "wx-notify-consumer"); + consumerThread.setDaemon(true); + consumerThread.start(); + log.info("[模板消息] DB 队列消费者已启动, pushEnabled={}, pollInterval={}s, batchSize={}, maxRetry={}, retryIntervals={}min, zombieTimeout={}s", + pushEnabled, pollIntervalSeconds, batchSize, maxRetryCount, retryIntervalMinutes, zombieTimeoutSeconds); + } + + /** + * 优雅停机:消费者线程退出循环,等待处理中的批次完成。 + */ + @PreDestroy + public void stop() { + running = false; + if (consumerThread != null) { + consumerThread.interrupt(); + try { + consumerThread.join(TimeUnit.SECONDS.toMillis(shutdownWaitSeconds)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + log.info("[模板消息] 消费者已停止"); + } + + /** + * 监听功能配置变更事件:仅关心 {@code mp_push_enabled},刷新内存镜像并唤醒消费者。 + * + *

设计要点: + *

    + *
  • phase=AFTER_COMMIT 保证"事务回滚则不通知",避免消费者收到错误的开关状态;
  • + *
  • fallbackExecution=true 允许在非事务上下文中发布事件也能触发监听;
  • + *
  • 仅当值真正变化时才 interrupt 消费者线程,避免无意义唤醒。
  • + *
+ */ + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, fallbackExecution = true) + public void onAppConfigChanged(AppConfigChangedEvent event) { + if (!WxMessageConstants.CONFIG_KEY_MP_PUSH_ENABLED.equals(event.configKey())) { + return; + } + boolean newEnabled = "1".equals(event.configValue()); + if (newEnabled == pushEnabled) { + return; + } + pushEnabled = newEnabled; + // 唤醒可能正在 sleep 的消费者线程,使其立即感知新状态(开启则立即消费,关闭则跳过 DB 操作) + if (consumerThread != null) { + consumerThread.interrupt(); + } + log.info("[模板消息] 推送总开关变更为: {}", newEnabled ? "开启" : "关闭"); + } + + /** + * 消费主循环:回收僵尸 → 批量取 PENDING → 逐条 CAS 占位 → 发送。 + * 无任务时按 pollIntervalSeconds 等待,避免 CPU 空转。 + * + *

总开关短路:关闭时只读内存镜像 {@link #pushEnabled},跳过整个 processBatch() + * (僵尸回收 UPDATE、PENDING SELECT 全部短路);开关变更由 {@link #onAppConfigChanged} + * interrupt 唤醒 sleep,实现毫秒级响应,无需轮询 DB 探测。

+ * + *

中断处理:interrupt 来源有二——开关变更(继续循环,用最新 pushEnabled 判断) + * 或停机(循环顶部 {@code while (running)} 退出)。{@link Thread#interrupted()} 静态方法 + * 会清除中断标志,否则下次 sleep 会立即抛异常陷入 CPU 空转。

+ */ + private void consumeLoop() { + while (running) { + try { + if (!pushEnabled) { + TimeUnit.SECONDS.sleep(pollIntervalSeconds); + continue; + } + int processed = processBatch(); + if (processed == 0) { + TimeUnit.SECONDS.sleep(pollIntervalSeconds); + } + } catch (InterruptedException e) { + // interrupt 可能来自开关变更或停机:清除标志后由循环顶部 while(running) 与 pushEnabled 判断走向 + Thread.interrupted(); + } catch (Exception e) { + log.error("[模板消息] 消费批次异常", e); + sleepQuietly(pollIntervalSeconds); + } + } + } + + /** + * 处理一个批次:回收僵尸 + 查询 PENDING + 逐条 CAS 占位发送。 + * + * @return 本批次实际处理的任务数 + */ + private int processBatch() { + // 1. 回收僵尸任务(服务崩溃后残留的 PROCESSING 行) + LocalDateTime cutoff = LocalDateTime.now().minusSeconds(zombieTimeoutSeconds); + int recovered = wxNotifyTaskRepository.recoverZombies( + WxNotifyTaskStatusEnum.PENDING.getCode(), + WxNotifyTaskStatusEnum.PROCESSING.getCode(), + cutoff); + if (recovered > 0) { + log.warn("[模板消息] 回收僵尸任务 {} 条", recovered); + } + + // 2. 查询 PENDING 任务(不带行锁,CAS 占位防重复) + List tasks = wxNotifyTaskRepository.findPendingTasks( + WxNotifyTaskStatusEnum.PENDING.getCode(), batchSize); + + // 3. 逐条 CAS 占位 → 发送 + int processed = 0; + for (WxNotifyTask task : tasks) { + if (!running) { + break; + } + // CAS 占位(PENDING→PROCESSING),失败说明已被其他实例取走 + int locked; + try { + locked = wxNotifyTaskRepository.casToProcessing( + task.getId(), + WxNotifyTaskStatusEnum.PENDING.getCode(), + WxNotifyTaskStatusEnum.PROCESSING.getCode()); + } catch (Exception e) { + log.error("[模板消息] CAS占位异常: taskId={}", task.getId(), e); + continue; + } + if (locked == 0) { + continue; + } + // CAS 成功,task 已 PROCESSING,执行发送 + try { + sendTask(task); + processed++; + } catch (Exception e) { + log.error("[模板消息] 发送任务异常: taskId={}", task.getId(), e); + String templateId = safeResolveTemplateId(task.getBizType()); + handleFailure(task, templateId, "EXCEPTION", e.getMessage()); + } + } + return processed; + } + + /** + * 发送单条模板消息:解析模板 → 前置检查 → 提交微信 → 更新任务状态 → 落库日志。 + */ + private void sendTask(WxNotifyTask task) { + String templateId = resolveTemplateId(task.getBizType()); + Map templateData = buildTemplateData(task); + + WxMessageLog.WxMessageLogBuilder logBuilder = WxMessageLog.builder() + .taskId(task.getId()) + .userId(task.getUserId()) + .bizType(task.getBizType()) + .bizId(task.getBizId()) + .templateId(templateId) + .sendTime(LocalDateTime.now()); + try { + logBuilder.content(objectMapper.writeValueAsString(templateData)); + } catch (Exception e) { + log.warn("[模板消息] 模板参数序列化失败: taskId={}", task.getId(), e); + } + + // 前置检查:模板配置 + 接收人服务号绑定情况 + String skipReason = resolveSkipReason(task.getUserId(), templateId); + if (skipReason != null) { + wxNotifyTaskRepository.completeSkipped( + task.getId(), + WxNotifyTaskStatusEnum.SUCCESS.getCode(), + templateId, + skipReason); + wxMessageLogRepository.save(logBuilder + .sendStatus(WxSendStatusEnum.SKIPPED.getCode()) + .skipReason(skipReason) + .build()); + log.info("[模板消息] 跳过发送: taskId={}, userId={}, reason={}", + task.getId(), task.getUserId(), skipReason); + return; + } + + User receiver = userRepository.findById(task.getUserId()).orElse(null); + String openId = receiver.getMpOpenid(); + + // 提交微信(token 失效自动强刷重试一次) + WxMessageLog messageLog = doSubmit(openId, templateId, templateData, logBuilder, true); + wxMessageLogRepository.save(messageLog); + + // 更新任务状态 + if (Objects.equals(messageLog.getSendStatus(), WxSendStatusEnum.SUBMITTED.getCode())) { + wxNotifyTaskRepository.completeSuccess( + task.getId(), + WxNotifyTaskStatusEnum.SUCCESS.getCode(), + templateId); + log.info("[模板消息] 发送完成: taskId={}, msgId={}", + task.getId(), messageLog.getMsgId()); + } else { + handleFailure(task, templateId, messageLog.getErrCode(), messageLog.getErrMsg()); + } + } + + /** + * 处理发送失败:递增 retry_count,未超上限安排重试,超过上限置 FAILED 并软删除。 + */ + private void handleFailure(WxNotifyTask task, String templateId, String errCode, String errMsg) { + int newRetryCount = task.getRetryCount() + 1; + if (newRetryCount > maxRetryCount) { + wxNotifyTaskRepository.completeFailed( + task.getId(), + WxNotifyTaskStatusEnum.FAILED.getCode(), + templateId, + errCode, + errMsg); + log.error("[模板消息] 重试次数用尽,任务最终失败: taskId={}, retryCount={}, errCode={}", + task.getId(), newRetryCount, errCode); + } else { + int delayMinutes = getRetryDelayMinutes(newRetryCount); + LocalDateTime nextRetryAt = LocalDateTime.now().plus(delayMinutes, ChronoUnit.MINUTES); + wxNotifyTaskRepository.scheduleRetry( + task.getId(), + WxNotifyTaskStatusEnum.PENDING.getCode(), + newRetryCount, + nextRetryAt, + templateId, + errCode, + errMsg); + log.warn("[模板消息] 发送失败,安排重试: taskId={}, retry={}/{}, nextRetry={}, errCode={}", + task.getId(), newRetryCount, maxRetryCount, nextRetryAt, errCode); + } + } + + // ==================== 辅助方法 ==================== + + /** + * 解析重试间隔配置字符串为 int 数组。 + */ + private int[] parseRetryIntervals(String config) { + String[] parts = config.split(","); + int[] result = new int[parts.length]; + for (int i = 0; i < parts.length; i++) { + result[i] = Integer.parseInt(parts[i].trim()); + } + return result; + } + + /** + * 获取第 newRetryCount 次重试的延迟(分钟),超出配置数组长度取最后一个。 + */ + private int getRetryDelayMinutes(int newRetryCount) { + int index = newRetryCount - 1; + if (index < retryIntervalMinutesArray.length) { + return retryIntervalMinutesArray[index]; + } + return retryIntervalMinutesArray[retryIntervalMinutesArray.length - 1]; + } + + /** + * 安全解析模板 ID(异常时返回 null,用于 catch 块兜底)。 + */ + private String safeResolveTemplateId(Integer bizType) { + try { + return resolveTemplateId(bizType); + } catch (Exception e) { + return null; + } + } + + /** + * 按业务类型解析模板 ID。 + */ + private String resolveTemplateId(Integer bizType) { + if (Objects.equals(bizType, WxNotifyBizTypeEnum.REVIEW_NOTIFY.getCode())) { + return reviewNotifyTemplateId; + } + if (Objects.equals(bizType, WxNotifyBizTypeEnum.CANCEL_NOTIFY.getCode())) { + return cancelNotifyTemplateId; + } + return taskNotifyTemplateId; + } + + /** + * 判定发送前置条件,返回跳过原因;可发送时返回 null。 + */ + private String resolveSkipReason(Long userId, String templateId) { + if (StringUtils.isBlank(templateId)) { + return "未配置通知模板ID(wechat.mp.template-id.*)"; + } + if (!wxMpClient.isConfigured()) { + return "未配置微信服务号 appId/appSecret"; + } + User receiver = userRepository.findById(userId).orElse(null); + if (receiver == null) { + return "接收人不存在"; + } + if (StringUtils.isBlank(receiver.getMpOpenid())) { + return "接收人未关注服务号,无法送达模板消息"; + } + return null; + } + + /** + * 调微信提交模板消息(token 失效时强刷重试一次)。 + */ + private WxMessageLog doSubmit(String openId, String templateId, Map data, + WxMessageLog.WxMessageLogBuilder logBuilder, boolean allowRetry) { + String token = wxMpClient.getAccessToken(false); + if (token == null) { + return logBuilder + .sendStatus(WxSendStatusEnum.FAILED.getCode()) + .errCode("NO_TOKEN") + .errMsg("获取服务号 access_token 失败") + .build(); + } + + WxMpClient.WxTemplateSendResult result = + wxMpClient.sendTemplate(token, openId, templateId, data); + + boolean tokenInvalid = result.errcode() == WxMpClient.ERR_INVALID_TOKEN + || result.errcode() == WxMpClient.ERR_TOKEN_EXPIRED; + if (tokenInvalid && allowRetry) { + log.warn("[模板消息] access_token 失效(errcode={}),强刷后重试", result.errcode()); + wxMpClient.getAccessToken(true); + return doSubmit(openId, templateId, data, logBuilder, false); + } + + if (result.errcode() == 0) { + return logBuilder + .openId(openId) + .msgId(result.msgId()) + .sendStatus(WxSendStatusEnum.SUBMITTED.getCode()) + .build(); + } + return logBuilder + .openId(openId) + .sendStatus(WxSendStatusEnum.FAILED.getCode()) + .errCode(String.valueOf(result.errcode())) + .errMsg(result.errmsg()) + .build(); + } + + /** + * 组装任务动态通知模板参数。 + */ + private Map buildTemplateData(WxNotifyTask task) { + Map data = new LinkedHashMap<>(); + data.put(WxMessageConstants.TMPL_TASK_NO, truncate(task.getTaskNo(), THING_VALUE_MAX_LENGTH)); + data.put(WxMessageConstants.TMPL_TASK_NAME, truncate(task.getTaskName(), THING_VALUE_MAX_LENGTH)); + data.put(WxMessageConstants.TMPL_SERVICE_TYPE, truncate(task.getServiceTypeName(), THING_VALUE_MAX_LENGTH)); + data.put(WxMessageConstants.TMPL_HANDLER, truncate(task.getHandler(), THING_VALUE_MAX_LENGTH)); + data.put(WxMessageConstants.TMPL_APPLY_TIME, task.getOperateTime()); + return data; + } + + /** + * 截断超长字段(thing 类型 20 字符上限)。 + */ + private String truncate(String value, int maxLength) { + if (value == null) { + return ""; + } + return value.length() <= maxLength ? value : value.substring(0, maxLength); + } + + /** + * 静默等待(不抛 InterruptedException,仅恢复中断标志)。 + */ + private void sleepQuietly(int seconds) { + try { + TimeUnit.SECONDS.sleep(seconds); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } +} diff --git a/src/main/java/com/haisen/laop/service/support/FileUrlResolver.java b/src/main/java/com/haisen/laop/service/support/FileUrlResolver.java new file mode 100644 index 0000000..5603b0a --- /dev/null +++ b/src/main/java/com/haisen/laop/service/support/FileUrlResolver.java @@ -0,0 +1,60 @@ +package com.haisen.laop.service.support; + +import com.haisen.laop.entity.SysFile; +import com.haisen.laop.repository.SysFileRepository; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 文件 URL 解析器,统一"file_id → 绝对访问 URL"的组装规则。 + * + *

相对路径拼接 {@code laop.file-base-url} 前缀(与小程序端约定一致), + * 已是绝对地址(http/https 开头)直接返回;文件不存在或 id 为空返回 null。

+ * + * @author duhao + */ +@Component +@RequiredArgsConstructor +public class FileUrlResolver { + + private final SysFileRepository sysFileRepository; + + /** 文件访问基础 URL(开发环境 http://localhost:8081/laop,生产填实际域名) */ + @Value("${laop.file-base-url:}") + private String fileBaseUrl; + + /** + * 按 fileId 解析出可直接访问的绝对 URL;文件不存在或 id 为空返回 null。 + */ + public String resolveAbsoluteUrl(Long fileId) { + if (fileId == null) { + return null; + } + String relativeUrl = sysFileRepository.findById(fileId) + .map(SysFile::getFileUrl) + .orElse(null); + return buildAbsoluteUrl(relativeUrl); + } + + /** + * 将相对文件路径拼接为绝对 URL,保证小程序 Image 可直接加载。 + */ + public String buildAbsoluteUrl(String url) { + if (StringUtils.isBlank(url)) { + return url; + } + if (url.startsWith("http://") || url.startsWith("https://")) { + return url; + } + if (StringUtils.isBlank(fileBaseUrl)) { + return url; + } + String prefix = fileBaseUrl.endsWith("/") + ? fileBaseUrl.substring(0, fileBaseUrl.length() - 1) + : fileBaseUrl; + String path = url.startsWith("/") ? url : "/" + url; + return prefix + path; + } +} diff --git a/src/main/java/com/haisen/laop/vo/AdminCourseAppointmentVO.java b/src/main/java/com/haisen/laop/vo/AdminCourseAppointmentVO.java new file mode 100644 index 0000000..7f884e4 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/AdminCourseAppointmentVO.java @@ -0,0 +1,68 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 课程预约管理 VO,用于 Web 管理端某课程下的预约名单展示。 + * + *

相较小程序端 {@link CourseAppointmentVO},额外组装了预约人 + * 昵称、手机号以及课程名称,便于运营同学核对。

+ * + * @author duhao + */ +@Data +@Builder +public class AdminCourseAppointmentVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 预约ID。 */ + private Long id; + + /** 预约人 userID。 */ + private Long userId; + + /** 预约人昵称(来自 user.nickname)。 */ + private String userNickName; + + /** 预约人手机号(来自 user.phone)。 */ + private String userPhone; + + /** 课程ID。 */ + private Long courseId; + + /** 课程名称。 */ + private String courseName; + + /** 预约时间(具体上课场次)。 */ + private LocalDateTime appointmentDate; + + /** 预约人数。 */ + private Integer personCount; + + /** 联系人姓名(通常等同预约人,也可填其他人)。 */ + private String contactName; + + /** 联系人电话。 */ + private String contactPhone; + + /** 支付金额(= 课程单价 × 人数)。 */ + private BigDecimal amount; + + /** 预约状态:1已预约 2已取消。 */ + private Integer status; + + /** 预约状态中文名。 */ + private String statusName; + + /** 备注。 */ + private String remark; + + /** 创建时间(提交预约的时间点)。 */ + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/haisen/laop/vo/AnnouncementVO.java b/src/main/java/com/haisen/laop/vo/AnnouncementVO.java new file mode 100644 index 0000000..62d564d --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/AnnouncementVO.java @@ -0,0 +1,49 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 公告信息 VO,Web 管理端公告列表与详情的响应体。 + * + * @author duhao + */ +@Data +@Builder +public class AnnouncementVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 公告ID。 + */ + private Long id; + + /** + * 公告标题。 + */ + private String title; + + /** + * 公告正文。 + */ + private String content; + + /** + * 展示状态:0隐藏 1显示。 + */ + private Integer status; + + /** + * 创建时间。 + */ + private LocalDateTime createdAt; + + /** + * 更新时间。 + */ + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/haisen/laop/vo/AppBannerVO.java b/src/main/java/com/haisen/laop/vo/AppBannerVO.java new file mode 100644 index 0000000..edbf3af --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/AppBannerVO.java @@ -0,0 +1,50 @@ +package com.haisen.laop.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 轮播图 VO,统一 Web 管理端列表和小程序端首页展示的数据结构。 + * + * @author duhao + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AppBannerVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 主键 ID。 */ + private Long id; + + /** 图片 file_id。 */ + private Long imageFileId; + + /** 图片完整访问 URL,由 Service 层通过 FileUrlResolver 解析。 */ + private String imageUrl; + + /** 跳转类型。 */ + private String linkType; + + /** 自定义跳转链接。 */ + private String linkUrl; + + /** 排序值。 */ + private Integer sortOrder; + + /** 状态:0隐藏 1显示。 */ + private Integer status; + + /** 创建时间。 */ + private LocalDateTime createdAt; + + /** 更新时间。 */ + private LocalDateTime updatedAt; +} diff --git a/src/main/java/com/haisen/laop/vo/CourseAppointmentVO.java b/src/main/java/com/haisen/laop/vo/CourseAppointmentVO.java new file mode 100644 index 0000000..d76df6d --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/CourseAppointmentVO.java @@ -0,0 +1,61 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 课程预约记录 VO,用于小程序"我的预约"列表展示。 + * + *

组装课程名称与宣传图绝对 URL,避免前端再发起课程详情查询。

+ * + * @author duhao + */ +@Data +@Builder +public class CourseAppointmentVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 预约ID。 */ + private Long id; + + /** 课程ID。 */ + private Long courseId; + + /** 课程名称。 */ + private String courseName; + + /** 课程宣传图绝对 URL。 */ + private String coverUrl; + + /** 预约时间(具体上课场次)。 */ + private LocalDateTime appointmentDate; + + /** 预约人数。 */ + private Integer personCount; + + /** 联系人姓名。 */ + private String contactName; + + /** 联系人电话。 */ + private String contactPhone; + + /** 支付金额(= 课程单价 × 人数)。 */ + private BigDecimal amount; + + /** 预约状态:1已预约 2已确认 3已完成 4已取消。 */ + private Integer status; + + /** 预约状态中文名。 */ + private String statusName; + + /** 备注。 */ + private String remark; + + /** 创建时间。 */ + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/haisen/laop/vo/CourseVO.java b/src/main/java/com/haisen/laop/vo/CourseVO.java new file mode 100644 index 0000000..5c221f1 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/CourseVO.java @@ -0,0 +1,96 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 课程信息 VO,Web 管理端课程列表与详情的响应体。 + * + *

URL 组装:{@code coverUrl} 由后端根据 coverImageId 解析出的可直接访问的 + * 绝对地址(含 file-base-url 前缀),前端无需二次拼接。

+ * + *

排课字段:{@code scheduleWeekDays}/{@code scheduleDates} 原样返回分号拼接串, + * 由前端按展示场景切分(如"每周一、周三")。

+ * + * @author duhao + */ +@Data +@Builder +public class CourseVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 课程ID。 + */ + private Long id; + + /** + * 课程名称。 + */ + private String name; + + /** + * 课程宣传图片文件ID(编辑回显时用于重新提交)。 + */ + private Long coverImageId; + + /** + * 课程宣传图片绝对 URL,可直接用于 img src。 + */ + private String coverUrl; + + /** + * 课程售价(元)。 + */ + private BigDecimal price; + + /** + * 课程状态:0下架 1上架 2已满员。 + */ + private Integer status; + + /** + * 课程简介,富文本 HTML(支持图片+文字)。 + */ + private String description; + + /** + * 排课方式:1每周重复 2日期排课。 + */ + private Integer scheduleType; + + /** + * 每周上课星期编码串(分号拼接,1=周一 ... 7=周日),排课方式=1 时有值。 + */ + private String scheduleWeekDays; + + /** + * 排课日期串(分号拼接,yyyy-MM-dd),排课方式=2 时有值。 + */ + private String scheduleDates; + + /** + * 联系人姓名。 + */ + private String contactName; + + /** + * 联系电话。 + */ + private String contactPhone; + + /** + * 创建时间。 + */ + private LocalDateTime createdAt; + + /** + * 精选标记:0否 1是;Web 管理端编辑回显时需要。 + */ + private Integer featured; +} diff --git a/src/main/java/com/haisen/laop/vo/DashboardVO.java b/src/main/java/com/haisen/laop/vo/DashboardVO.java new file mode 100644 index 0000000..ab662b6 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/DashboardVO.java @@ -0,0 +1,156 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.AllArgsConstructor; + +import java.util.List; + +/** + * 数据驾驶舱聚合 VO,一次性返回首页 Dashboard 所需的全部统计数据, + * 避免前端多个接口瀑布式加载。 + * + *

包含两大板块:用户统计(总量 + 结构 + 月度增长)与 + * 任务统计(总量 + 状态分布 + 月度增长 + 类型分布)。

+ * + * @author duhao + */ +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DashboardVO { + + // ==================== 用户统计 ==================== + + /** + * 小程序用户总数(未软删 user 表全部记录)。 + */ + private Long userTotalCount; + + /** + * 已认证商家总数(未软删 merchant 表全部记录)。 + */ + private Long merchantCount; + + /** + * 已认证飞手总数(未软删 pilot 表全部记录)。 + */ + private Long pilotCount; + + /** + * 用户近 6 个月月度新增趋势。 + */ + private MonthlyTrend userMonthlyTrend; + + // ==================== 任务统计 ==================== + + /** + * 任务总数(未软删 task 表全部记录)。 + */ + private Long taskTotalCount; + + /** + * 已完成任务数(status = 4 已完成)。 + */ + private Long taskCompletedCount; + + /** + * 进行中任务数(status IN 1 待接单 / 2 已接单 / 3 执行中)。 + */ + private Long taskInProgressCount; + + /** + * 任务近 6 个月月度新增趋势。 + */ + private MonthlyTrend taskMonthlyTrend; + + /** + * 任务类型分布(7 种类型的任务数量)。 + */ + private List taskTypeDistribution; + + /** + * 任务状态分布(各状态任务数量)。 + */ + private List taskStatusDistribution; + + // ==================== 内部嵌套类 ==================== + + /** + * 月度趋势 VO,包含月份标签与对应数据值数组,一一对应便于前端折线图直接消费。 + */ + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class MonthlyTrend { + + /** + * 月份标签数组,格式为 "yyyy-MM",长度固定 6 个月。 + * 即使某月无新增数据也会以 0 填充,确保图表横轴连续无断层。 + */ + private List months; + + /** + * 每月数据值数组,与 {@link #months} 索引一一对应。 + */ + private List values; + } + + /** + * 任务类型分布项,驱动横向柱状图。 + */ + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class TaskTypeItem { + + /** + * 任务类型编码(1 植保 / 2 吊运 / 3 航拍 / 4 巡检 / 5 清洗 / 6 表演 / 7 测绘)。 + */ + private Integer typeCode; + + /** + * 任务类型中文名(如 "植保"、"航拍")。 + */ + private String typeName; + + /** + * 该类型任务数量。 + */ + private Long count; + } + + /** + * 任务状态分布项,驱动环形饼图。 + */ + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class TaskStatusItem { + + /** + * 任务状态编码(0 草稿 / 1 待接单 / 2 已接单 / 3 执行中 / 4 已完成 / 5 已取消)。 + */ + private Integer statusCode; + + /** + * 状态中文名(如 "已完成"、"进行中")。 + */ + private String statusName; + + /** + * 该状态下任务数量。 + */ + private Long count; + } +} diff --git a/src/main/java/com/haisen/laop/vo/ExamBankVO.java b/src/main/java/com/haisen/laop/vo/ExamBankVO.java new file mode 100644 index 0000000..4c12e10 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/ExamBankVO.java @@ -0,0 +1,47 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 题库列表 VO,Web 管理端"培训考试 → 题库"tab 展示。 + * + *

同时承载左树各节点所需的数量信息:总题数 + 各题型数量。

+ * + * @author duhao + */ +@Data +@Builder +public class ExamBankVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 题库ID。 */ + private Long id; + + /** 题库名称。 */ + private String name; + + /** 题库描述。 */ + private String description; + + /** 难度编码:1简单 2中等 3困难。 */ + private Integer difficulty; + + /** 难度中文名。 */ + private String difficultyName; + + /** 题目总数。 */ + private Integer questionCount; + + /** 单选题数量。 */ + private Integer singleCount; + + /** 多选题数量。 */ + private Integer multiCount; + + /** 判断题数量。 */ + private Integer judgeCount; +} diff --git a/src/main/java/com/haisen/laop/vo/ExamQuestionVO.java b/src/main/java/com/haisen/laop/vo/ExamQuestionVO.java new file mode 100644 index 0000000..12c31bf --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/ExamQuestionVO.java @@ -0,0 +1,59 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * 题目展示 VO。 + * + *

消费端:Web 管理后台(含完整字段含答案/解析)、小程序(忽略 answer/explanation)。 + * 管理后台列表查询时返回完整字段,小程序答题时不应展示答案,在接口层做隐藏处理。

+ * + * @author duhao + */ +@Data +@Builder +public class ExamQuestionVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 题目ID。 */ + private Long id; + + /** 所属题库ID。 */ + private Long bankId; + + /** 题目内容。 */ + private String content; + + /** 选项数组:[{"key":"A","val":"..."}]。 */ + private List> options; + + /** 题型编码:1单选 2多选 3判断。 */ + private Integer questionType; + + /** 题型中文名。 */ + private String questionTypeName; + + /** 标准答案(管理端可见)。 */ + private String answer; + + /** 答案解析(管理端可见)。 */ + private String explanation; + + /** 难度编码:1简单 2中等 3困难。 */ + private Integer difficulty; + + /** 难度中文名。 */ + private String difficultyName; + + /** 分值。 */ + private Integer score; + + /** 排序号。 */ + private Integer sortOrder; +} diff --git a/src/main/java/com/haisen/laop/vo/ExamResultVO.java b/src/main/java/com/haisen/laop/vo/ExamResultVO.java new file mode 100644 index 0000000..0b4feed --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/ExamResultVO.java @@ -0,0 +1,67 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 答题结果 VO,用户提交答案后返回每题判分与解析 + 汇总分数。 + * + *

设计说明:分数不持久化(不写入数据库),仅实时返回给前端展示。

+ * + * @author duhao + */ +@Data +@Builder +public class ExamResultVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 每题判分明细。 */ + private List results; + + /** 总分。 */ + private Integer totalScore; + + /** 用户得分。 */ + private Integer userScore; + + /** 答对题数。 */ + private Integer correctCount; + + /** 总题数。 */ + private Integer totalCount; + + /** + * 单题判分项。 + */ + @Data + @Builder + public static class ResultItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 题目ID。 */ + private Long questionId; + + /** 是否完全正确(全对)。多选题部分对也算 false。 */ + private Boolean correct; + + /** 用户答案。 */ + private String userAnswer; + + /** 正确答案。 */ + private String correctAnswer; + + /** 答案解析。 */ + private String explanation; + + /** 该题满分值(单选/判断=1,多选=2)。 */ + private Integer score; + + /** 该题用户实际得分(多选题可能部分得分)。 */ + private Integer userScore; + } +} diff --git a/src/main/java/com/haisen/laop/vo/FileUploadVO.java b/src/main/java/com/haisen/laop/vo/FileUploadVO.java new file mode 100644 index 0000000..524931e --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/FileUploadVO.java @@ -0,0 +1,47 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 文件上传成功响应 VO。 + * + *

前端据此拿到 fileId 关联到业务实体(如 task.scene_image_ids), + * fileUrl 用于本地预览或直接展示。

+ * + * @author duhao + */ +@Data +@Builder +public class FileUploadVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 文件记录主键 ID,业务表通过此字段关联文件。 + */ + private Long fileId; + + /** + * 文件类型编码,便于前端分类处理。 + */ + private Integer fileType; + + /** + * 相对访问路径(如 {@code /static/scene_image/uuid.jpg}), + * 前端需要拼上服务器 baseUrl 才能直接访问。 + */ + private String fileUrl; + + /** + * 文件原始大小(字节)。 + */ + private Long fileSize; + + /** + * 文件后缀(不含点),如 jpg、png。 + */ + private String fileSuffix; +} diff --git a/src/main/java/com/haisen/laop/vo/HomeMerchantVO.java b/src/main/java/com/haisen/laop/vo/HomeMerchantVO.java new file mode 100644 index 0000000..6bb62ba --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/HomeMerchantVO.java @@ -0,0 +1,33 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 首页"实力商家"列表项 VO,只承载列表卡片展示字段。 + * + * @author duhao + */ +@Data +@Builder +public class HomeMerchantVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 商家ID,跳转商家详情页使用。 */ + private Long id; + + /** 商家名称。 */ + private String name; + + /** 商家地址。 */ + private String address; + + /** 门头照片完整 URL。 */ + private String doorImageUrl; + + /** 已发布任务数(运营数据,列表卡片展示,替代 orderCount)。 */ + private Integer taskCount; +} diff --git a/src/main/java/com/haisen/laop/vo/HomePilotVO.java b/src/main/java/com/haisen/laop/vo/HomePilotVO.java new file mode 100644 index 0000000..4421b0e --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/HomePilotVO.java @@ -0,0 +1,46 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 首页"本地飞手"列表项 VO,承载三段式名片卡片展示字段。 + * + * @author duhao + */ +@Data +@Builder +public class HomePilotVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 飞手ID,跳转飞手详情页使用。 */ + private Long id; + + /** 飞手姓名(实名)。 */ + private String name; + + /** 年龄,列表卡片展示"25岁"。 */ + private Integer age; + + /** 头像完整 URL;无头像时为 null,前端降级为首字圆形占位。 */ + private String avatarUrl; + + /** 执照类型编码列表(1 AOPA 2 UTC 3 ASFC 4 CAAC),前端渲染多标签。 */ + private List licenseTypes; + + /** 服务类型名称列表(如 ["植保", "航拍"]),前端渲染能力标签。 */ + private List serviceTypeNames; + + /** 服务城市文本,如 "上海·松江";多服务城市取第一个。 */ + private String serviceCityText; + + /** 认证通过时间(格式 "2025.03"),展示为"认证 6 个月"等能力资历。 */ + private String certTimeText; + + /** 已参与任务数(运营数据,列表卡片底部窄条展示)。 */ + private Integer taskCount; +} diff --git a/src/main/java/com/haisen/laop/vo/LoginVO.java b/src/main/java/com/haisen/laop/vo/LoginVO.java new file mode 100644 index 0000000..e80545f --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/LoginVO.java @@ -0,0 +1,33 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Getter; + +/** + * 登录成功响应 VO。 + * + *

当前简化实现 token 直接返回 userId 字符串,后续升级 JWT 时 + * 只需替换此字段的生成逻辑,前端存 token 的方式不变。

+ * + * @author duhao + */ +@Getter +@Builder +public class LoginVO { + + /** + * 登录态 token,当前阶段值即为 userId(如 "1"、"42"), + * 后续升级 JWT 后替换为签名字符串。 + */ + private final String token; + + /** + * 用户 ID,便于前端本地展示/缓存当前用户。 + */ + private final Long userId; + + /** + * 是否新注册用户(首次登录自动创建),前端可据此引导完善资料。 + */ + private final Boolean isNewUser; +} diff --git a/src/main/java/com/haisen/laop/vo/MerchantCertVO.java b/src/main/java/com/haisen/laop/vo/MerchantCertVO.java new file mode 100644 index 0000000..9bdbda4 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/MerchantCertVO.java @@ -0,0 +1,77 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 商家认证信息 VO,用于小程序认证页回显与认证状态展示。 + * + *

未提交过认证时仅返回 {@code certStatus = 0},其余字段为 null; + * 服务类型为飞手能力属性,已从商家认证中移除。

+ * + * @author duhao + */ +@Data +@Builder +public class MerchantCertVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 认证状态:0未认证 1认证中 2已认证 3认证失败。 + */ + private Integer certStatus; + + /** + * 商家名称。 + */ + private String name; + + /** + * 商家地址。 + */ + private String address; + + /** + * 联系人姓名。 + */ + private String contactName; + + /** + * 联系电话。 + */ + private String contactPhone; + + /** + * 商家简介。 + */ + private String description; + + /** + * 门头照片 file_id。 + */ + private Long doorImageId; + + /** + * 门头照片完整 URL。 + */ + private String doorImageUrl; + + /** + * 营业执照照片 file_id。 + */ + private Long licenseFileId; + + /** + * 营业执照照片完整 URL。 + */ + private String licenseImageUrl; + + /** + * 认证通过时间。 + */ + private LocalDateTime certTime; +} diff --git a/src/main/java/com/haisen/laop/vo/MerchantDetailVO.java b/src/main/java/com/haisen/laop/vo/MerchantDetailVO.java new file mode 100644 index 0000000..213c951 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/MerchantDetailVO.java @@ -0,0 +1,48 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 商家详情页 VO:全部商家信息 + 该商家发布的任务列表。 + * + *

联系信息为商家对外经营信息,完整展示;手机号脱敏由前端按需处理。

+ * + * @author duhao + */ +@Data +@Builder +public class MerchantDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 商家ID。 */ + private Long id; + + /** 商家名称。 */ + private String name; + + /** 商家地址。 */ + private String address; + + /** 联系人姓名。 */ + private String contactName; + + /** 联系电话。 */ + private String contactPhone; + + /** 商家简介。 */ + private String description; + + /** 门头照片完整 URL。 */ + private String doorImageUrl; + + /** 营业执照照片完整 URL。 */ + private String licenseImageUrl; + + /** 该商家发布的任务列表(按创建时间倒序,限量展示)。 */ + private List tasks; +} diff --git a/src/main/java/com/haisen/laop/vo/MiniCourseVO.java b/src/main/java/com/haisen/laop/vo/MiniCourseVO.java new file mode 100644 index 0000000..76ea943 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/MiniCourseVO.java @@ -0,0 +1,96 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 研学课程小程序端展示 VO,承载课程列表卡片与详情页所需的全部展示字段。 + * + *

URL 组装:{@code coverUrl}/{@code imageUrls} 由后端解析 fileId → 绝对地址, + * 前端 Image 可直接加载,无需二次拼接。

+ * + *

分类字段:{@code categoryName} 由后端根据 {@code category} 编码映射中文名, + * 前端直接展示分类标签。

+ * + * @author duhao + */ +@Data +@Builder +public class MiniCourseVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 课程ID。 */ + private Long id; + + /** 课程名称。 */ + private String name; + + /** 课程宣传图绝对 URL(卡片头图 + 详情头图)。 */ + private String coverUrl; + + /** 课程售价(元)。 */ + private BigDecimal price; + + /** 课程分类编码:1认知启蒙 2技能进阶 3创新应用 4竞赛辅导。 */ + private Integer category; + + /** 课程分类中文名,前端直接展示为分类标签。 */ + private String categoryName; + + /** 标签编码串(分号拼接,原始值),前端按需切分。 */ + private String tags; + + /** 适合年龄描述,如"青少年、初中生"。 */ + private String targetAge; + + /** 上课地点。 */ + private String location; + + /** 纬度,String 存储。 */ + private String latitude; + + /** 经度,String 存储。 */ + private String longitude; + + /** 课程简介,富文本 HTML。 */ + private String description; + + /** 排课方式:1每周重复 2日期排课。 */ + private Integer scheduleType; + + /** 每周上课星期编码串(分号拼接),排课方式=1 时有值。 */ + private String scheduleWeekDays; + + /** 排课日期串(分号拼接 yyyy-MM-dd),排课方式=2 时有值。 */ + private String scheduleDates; + + /** 课程咨询联系人姓名。 */ + private String contactName; + + /** 课程咨询联系电话。 */ + private String contactPhone; + + /** 课程详情图绝对 URL 列表(按原始顺序解析)。 */ + private List imageUrls; + + /** 所属商家ID。 */ + private Long merchantId; + + /** 所属商家名称。 */ + private String merchantName; + + /** 课程状态:0下架 1上架 2已满员。 */ + private Integer status; + + /** 创建时间。 */ + private LocalDateTime createdAt; + + /** 精选标记:0否 1是;小程序首页精选列表仅返回 featured=1 的课程。 */ + private Integer featured; +} diff --git a/src/main/java/com/haisen/laop/vo/PilotCertVO.java b/src/main/java/com/haisen/laop/vo/PilotCertVO.java new file mode 100644 index 0000000..eac9cc9 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/PilotCertVO.java @@ -0,0 +1,87 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 飞手认证信息 VO,用于小程序认证页回显与认证状态展示。 + * + *

未提交过认证时仅返回 {@code certStatus = 0},其余字段为 null。

+ * + * @author duhao + */ +@Data +@Builder +public class PilotCertVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 认证状态:0未认证 1认证中 2已认证 3认证失败。 + */ + private Integer certStatus; + + /** + * 姓名(实名)。 + */ + private String name; + + /** + * 手机号。 + */ + private String phone; + + /** + * 执照列表,每本执照含类型/编号/照片 URL,与 PO 分号拼接字段按下标对应。 + */ + private List licenses; + + /** + * 服务类型编码列表(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘),分号串拆分后返回。 + */ + private List serviceTypes; + + /** + * 认证通过时间。 + */ + private LocalDateTime certTime; + + /** + * 单本执照回显信息。 + */ + @Data + @Builder + public static class LicenseItemVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * CAAC 执照类型编码:1 AOPA 2 UTC 3 ASFC。 + */ + private Integer licenseType; + + /** + * CAAC 执照编号。 + */ + private String licenseNo; + + /** + * 执照照片 file_id。 + */ + private Long licenseFileId; + + /** + * 执照照片完整 URL,前端可直接用于 Image 预览。 + */ + private String licenseImageUrl; + + /** + * 执照获证日期(yyyy-MM-dd),与 licenseType / licenseNo / licenseFileId 按下标对齐。 + */ + private String licenseDate; + } +} diff --git a/src/main/java/com/haisen/laop/vo/PilotDetailVO.java b/src/main/java/com/haisen/laop/vo/PilotDetailVO.java new file mode 100644 index 0000000..ef21003 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/PilotDetailVO.java @@ -0,0 +1,69 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 飞手详情页 VO:飞手公开信息 + 飞行执照详情 + 参与过的任务列表。 + * + * @author duhao + */ +@Data +@Builder +public class PilotDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 飞手ID。 */ + private Long id; + + /** 飞手姓名。 */ + private String name; + + /** 联系电话(飞手公开联系方式,前端支持点击拨号)。 */ + private String phone; + + /** 飞行执照详情列表(每项含类型编码、类型名、编号、照片 URL)。 */ + private List licenses; + + /** 服务类型编码列表(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘),前端渲染多标签。 */ + private List serviceTypes; + + /** 个人简介。 */ + private String bio; + + /** 已完成任务数。 */ + private Integer orderCount; + + /** 该飞手参与过的任务列表(按创建时间倒序,限量展示)。 */ + private List tasks; + + /** + * 单张飞行执照详情(与 Pilot 实体的三个分号字段 licenseType/licenseNo/licenseFileId + * 按下标一一对应,由 Service 层组装后下发)。 + */ + @Data + @Builder + public static class LicenseVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 执照类型编码(1 AOPA 2 UTC 3 ASFC 4 CAAC)。 */ + private Integer typeCode; + + /** 执照类型名称(如 "AOPA"、"CAAC")。 */ + private String typeName; + + /** 执照编号(运营商实名编号,直接展示)。 */ + private String no; + + /** 执照照片完整 URL;无照片时为 null。 */ + private String photoUrl; + + /** 执照获证日期(yyyy-MM-dd);无日期时为 null。 */ + private String date; + } +} diff --git a/src/main/java/com/haisen/laop/vo/PointsDetailVO.java b/src/main/java/com/haisen/laop/vo/PointsDetailVO.java new file mode 100644 index 0000000..6110668 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/PointsDetailVO.java @@ -0,0 +1,52 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 积分明细 VO,用于"我的-积分明细"列表渲染。 + * + *

事件名称由后端按 {@code eventType} 翻译(PointsEventEnum.desc), + * 前端无需维护编码映射。

+ * + * @author duhao + */ +@Data +@Builder +public class PointsDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 变动方向:1收入 2支出。 + */ + private Integer changeType; + + /** + * 事件类型编码:1发布任务 2完成任务 3邀请好友注册 4发布优质任务 5手动新增 6手动扣减。 + */ + private Integer eventType; + + /** + * 事件名称(如"发布任务""邀请好友注册"),直接展示。 + */ + private String eventName; + + /** + * 积分变动值,收入为正、支出为负(如 +1、-4)。 + */ + private Integer points; + + /** + * 备注说明(如"发布任务:XXX")。 + */ + private String remark; + + /** + * 流水时间。 + */ + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/haisen/laop/vo/PromoteQrVO.java b/src/main/java/com/haisen/laop/vo/PromoteQrVO.java new file mode 100644 index 0000000..7b2276c --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/PromoteQrVO.java @@ -0,0 +1,24 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 推广二维码 VO,承载小程序码的 Base64 数据,前端直接渲染 Image。 + * + * @author duhao + */ +@Data +@Builder +public class PromoteQrVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 小程序码图片的 Base64 字符串(不含 data:image 前缀),前端拼接 + * {@code data:image/png;base64,} 前缀后可直接作为 Image src。 + */ + private String qrCodeBase64; +} diff --git a/src/main/java/com/haisen/laop/vo/TaskApplicantVO.java b/src/main/java/com/haisen/laop/vo/TaskApplicantVO.java new file mode 100644 index 0000000..6f4fa20 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/TaskApplicantVO.java @@ -0,0 +1,55 @@ +package com.haisen.laop.vo; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import java.time.LocalDateTime; + +/** + * 任务申请飞手视图对象,商家审批列表行数据。 + * + *

商家在"申请接单的飞手"列表查看申请人概要(姓名/电话/认证状态/申请时间), + * 执照资质详情由前端复用飞手详情页(pilotId 跳转)展示,本 VO 不冗余执照数据。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class TaskApplicantVO { + + /** 申请记录 ID,商家同意/拒绝操作以此为准。 */ + private Long recordId; + + /** 飞手 ID,跳转飞手详情页(查看执照资质)使用。 */ + private Long pilotId; + + /** 飞手姓名(实名)。 */ + private String pilotName; + + /** 飞手联系电话。 */ + private String phone; + + /** 头像绝对 URL(未上传头像时为 null,前端渲染占位图)。 */ + private String avatarUrl; + + /** 飞手认证状态编码,审批时供商家判断资质有效性。 */ + private Integer certStatus; + + /** 申请时间。 */ + private LocalDateTime applyTime; + + /** 申请状态编码:1已申请 2已同意 3已拒绝 4已撤销。 */ + private Integer status; + + /** 申请状态中文名。 */ + private String statusName; + + /** 拒绝原因(已拒绝时返回;含"商家已选择其他飞手"的自动关闭文案)。 */ + private String rejectReason; +} diff --git a/src/main/java/com/haisen/laop/vo/TaskBriefVO.java b/src/main/java/com/haisen/laop/vo/TaskBriefVO.java new file mode 100644 index 0000000..6dbd4e5 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/TaskBriefVO.java @@ -0,0 +1,72 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 任务简要信息 VO,用于商家详情/飞手详情页的任务列表展示。 + * + *

字段与首页任务大厅卡片组件(TaskHallCard)的渲染需求对齐, + * 保证详情页任务列表与大厅排版一致。

+ * + * @author duhao + */ +@Data +@Builder +public class TaskBriefVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 任务ID。 */ + private Long id; + + /** 任务名称。 */ + private String name; + + /** 任务类型中文名称(如"植保")。 */ + private String typeName; + + /** 单人报酬。 */ + private BigDecimal reward; + + /** 任务状态:1待接单 2已接单 3进行中 4已完成 5已取消。 */ + private Integer status; + + /** 任务状态中文名(如"待接单"、"已完成"),前端展示时无需二次映射。 */ + private String statusName; + + /** 任务状态对应的 el-tag type(success/primary/warning/info/danger),前端直接使用。 */ + private String statusTag; + + /** 优质任务标识:1优质 0普通。 */ + private Integer isPremium; + + /** 所在城市展示文本(省市区拼接,直辖市去重)。 */ + private String regionText; + + /** 任务地点。 */ + private String address; + + /** 所需飞手人数。 */ + private Integer requiredCount; + + /** 任务开始日期。 */ + private LocalDateTime taskStartTime; + + /** 任务结束日期。 */ + private LocalDateTime taskEndTime; + + /** 保险要求名称列表(如三者险/飞手险/机身险)。 */ + private List insuranceNames; + + /** 任务描述。 */ + private String remark; + + /** 实景图完整 URL 列表。 */ + private List sceneImageUrls; +} diff --git a/src/main/java/com/haisen/laop/vo/TaskManageVO.java b/src/main/java/com/haisen/laop/vo/TaskManageVO.java new file mode 100644 index 0000000..28e22c7 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/TaskManageVO.java @@ -0,0 +1,154 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 任务管理 VO,Web 管理端任务列表与详情的响应体。 + * + *

在 {@link com.haisen.laop.entity.Task} 实体基础上额外组装: + *

    + *
  • {@code typeName} — 任务类型中文名称
  • + *
  • {@code regionText} — 区域合并文本(省·市)
  • + *
  • {@code insuranceNames} — 保险类型名称列表
  • + *
  • {@code sceneImageUrls} — 场景图绝对 URL 列表(仅详情接口填充,列表接口为 null)
  • + *
  • {@code merchant} — 发布商家简要信息(列表与详情均填充)
  • + *

+ * + * @author duhao + */ +@Data +@Builder +public class TaskManageVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 任务ID。 */ + private Long id; + + /** 任务编号。 */ + private String taskNo; + + /** 任务名称。 */ + private String name; + + /** 任务类型编码。 */ + private Integer type; + + /** 任务类型中文名称。 */ + private String typeName; + + /** 省份。 */ + private String province; + + /** 城市。 */ + private String city; + + /** 区县。 */ + private String district; + + /** 详细地址。 */ + private String address; + + /** 纬度。 */ + private String latitude; + + /** 经度。 */ + private String longitude; + + /** 需求人数。 */ + private Integer requiredCount; + + /** 任务开始时间。 */ + private LocalDateTime taskStartTime; + + /** 任务结束时间。 */ + private LocalDateTime taskEndTime; + + /** 报酬(元)。 */ + private BigDecimal reward; + + /** 保险要求编码分号串(原始值)。 */ + private String insuranceRequire; + + /** 保险类型名称列表。 */ + private List insuranceNames; + + /** 联系人姓名。 */ + private String contactName; + + /** 联系电话。 */ + private String contactPhone; + + /** 备注。 */ + private String remark; + + /** 任务状态编码。 */ + private Integer status; + + /** 是否优质任务:0否 1是。 */ + private Integer isPremium; + + /** 发布人ID。 */ + private Long publisherId; + + /** 接单飞手ID。 */ + private Long acceptedPilotId; + + /** 区域合并文本(省·市,直辖市只展示城市)。 */ + private String regionText; + + /** 场景图绝对 URL 列表(仅详情接口填充)。 */ + private List sceneImageUrls; + + /** 发布商家简要信息。 */ + private MerchantInfo merchant; + + /** 创建时间。 */ + private LocalDateTime createdAt; + + /** 更新时间。 */ + private LocalDateTime updatedAt; + + /** + * 发布商家简要信息,嵌套在任务管理 VO 中,详情弹窗"发布商家"分区展示。 + */ + @Data + @Builder + public static class MerchantInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 商家ID。 */ + private Long id; + + /** 商家名称。 */ + private String name; + + /** 联系人姓名。 */ + private String contactName; + + /** 联系电话。 */ + private String contactPhone; + + /** 商家地址。 */ + private String address; + + /** 认证状态编码。 */ + private Integer certStatus; + + /** 认证状态中文名称。 */ + private String certStatusName; + + /** 门头照片绝对 URL(仅详情接口填充)。 */ + private String doorImageUrl; + + /** 营业执照绝对 URL(仅详情接口填充)。 */ + private String licenseImageUrl; + } +} diff --git a/src/main/java/com/haisen/laop/vo/TaskPublishVO.java b/src/main/java/com/haisen/laop/vo/TaskPublishVO.java new file mode 100644 index 0000000..3fb9ece --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/TaskPublishVO.java @@ -0,0 +1,35 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 发布任务成功响应 VO。 + * + *

仅返回必要的标识信息,前端据此跳转到任务详情页或任务中心。

+ * + * @author duhao + */ +@Data +@Builder +public class TaskPublishVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 任务 ID(主键)。 + */ + private Long taskId; + + /** + * 任务编号(全局唯一,对外展示用)。 + */ + private String taskNo; + + /** + * 发布提示文案,前端可 toast 展示。 + */ + private String message; +} diff --git a/src/main/java/com/haisen/laop/vo/TrainingStoreVO.java b/src/main/java/com/haisen/laop/vo/TrainingStoreVO.java new file mode 100644 index 0000000..30a86ca --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/TrainingStoreVO.java @@ -0,0 +1,41 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 门店培训信息 VO,Web 管理端"培训考试 → 培训"tab 展示。 + * + *

{@code coverUrl} 由后端解析 coverImage(file_id) 为绝对 URL,前端直接展示。

+ * + * @author duhao + */ +@Data +@Builder +public class TrainingStoreVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 门店ID。 */ + private Long id; + + /** 门店名称。 */ + private String name; + + /** 门店地址。 */ + private String address; + + /** 联系人。 */ + private String contactName; + + /** 联系电话。 */ + private String contactPhone; + + /** 培训内容介绍。 */ + private String trainingContent; + + /** 封面图绝对 URL。 */ + private String coverUrl; +} diff --git a/src/main/java/com/haisen/laop/vo/UserManageVO.java b/src/main/java/com/haisen/laop/vo/UserManageVO.java new file mode 100644 index 0000000..170ca5b --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/UserManageVO.java @@ -0,0 +1,69 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 用户管理列表 VO,承载 Web 管理端用户列表的展示信息。 + * + *

用户类型判定策略:{@code isPilotBound}/{@code isMerchantBound} 由注册时初始化, + * 但认证提交后未同步更新(已知设计缺口),故列表的用户类型以 Pilot/Merchant 实际记录的 + * {@code certStatus} 为准:由 Service 层分步批量查 Pilot/Merchant 表后填充。 + * 两个字段为 {@code null} 表示该用户未提交对应身份的认证资料。

+ * + * @author duhao + */ +@Data +@Builder +public class UserManageVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 用户ID。 */ + private Long id; + + /** 用户昵称。 */ + private String nickname; + + /** 头像 URL(微信授权或 OSS 直链,已为绝对地址)。 */ + private String avatarUrl; + + /** 手机号。 */ + private String phone; + + /** 性别编码:0未知 1男 2女。 */ + private Integer gender; + + /** 性别中文名。 */ + private String genderName; + + /** 主角色类型编码:1普通用户 2飞手 3商家 4机构。 */ + private Integer roleType; + + /** 主角色类型中文名。 */ + private String roleTypeName; + + /** + * 飞手认证状态:0未认证 1认证中 2已认证 3认证失败; + * {@code null} 表示该用户从未提交飞手认证资料。 + */ + private Integer pilotCertStatus; + + /** + * 商家认证状态:0未认证 1认证中 2已认证 3认证失败; + * {@code null} 表示该用户从未提交商家认证资料。 + */ + private Integer merchantCertStatus; + + /** 最后登录时间。 */ + private LocalDateTime lastLoginAt; + + /** 注册时间(createdAt)。 */ + private LocalDateTime createdAt; + + /** 当前积分余额(来自 user.points)。 */ + private Integer points; +} diff --git a/src/main/java/com/haisen/laop/vo/UserMerchantDetailVO.java b/src/main/java/com/haisen/laop/vo/UserMerchantDetailVO.java new file mode 100644 index 0000000..cbc7519 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/UserMerchantDetailVO.java @@ -0,0 +1,31 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * Web 管理端 —— 用户详情页(商家信息弹窗)包装 VO。 + * + *

设计意图:Web 端商家详情比小程序认证页多了"已发布任务"列表, + * 为避免污染 {@link MerchantCertVO}(小程序认证页消费),独立包装此 VO。

+ * + * @author duhao + */ +@Data +@Builder +public class UserMerchantDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 商家认证信息(与小程序认证页字段一致)。 */ + private MerchantCertVO cert; + + /** + * 该用户以商家身份发布的最近 10 条任务(按创建时间倒序)。 + * 未发布过任何任务时为 {@code null},前端据此渲染"暂无发布记录"。 + */ + private List recentTasks; +} diff --git a/src/main/java/com/haisen/laop/vo/UserPilotDetailVO.java b/src/main/java/com/haisen/laop/vo/UserPilotDetailVO.java new file mode 100644 index 0000000..7718f4f --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/UserPilotDetailVO.java @@ -0,0 +1,31 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * Web 管理端 —— 用户详情页(飞手信息弹窗)包装 VO。 + * + *

设计意图:Web 端飞手详情比小程序认证页多了"接单过的任务"列表, + * 为避免污染 {@link PilotCertVO}(小程序认证页消费),独立包装此 VO。

+ * + * @author duhao + */ +@Data +@Builder +public class UserPilotDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 飞手认证信息(与小程序认证页字段一致)。 */ + private PilotCertVO cert; + + /** + * 该飞手已接单的最近 10 条任务(按创建时间倒序)。 + * 未接过任何任务时为 {@code null},前端据此渲染"暂无接单记录"。 + */ + private List recentTasks; +} diff --git a/src/main/java/com/haisen/laop/vo/WxMessageLogVO.java b/src/main/java/com/haisen/laop/vo/WxMessageLogVO.java new file mode 100644 index 0000000..60df6d4 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/WxMessageLogVO.java @@ -0,0 +1,79 @@ +package com.haisen.laop.vo; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import java.time.LocalDateTime; + +/** + * 微信模板消息发送日志视图对象,Web 管理端"消息推送日志"页面行数据。 + * + *

完整暴露发送链路三段状态:提交结果(sendStatus + errCode/errMsg)与 + * 微信回调送达结果(resultStatus + resultTime),便于排查商家未收到通知的原因。

+ * + * @author duhao + */ +@Getter +@Setter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class WxMessageLogVO { + + /** 日志 ID。 */ + private Long id; + + /** 接收人用户 ID(商家)。 */ + private Long userId; + + /** 业务类型编码。 */ + private Integer bizType; + + /** 业务类型中文名(任务申请通知)。 */ + private String bizTypeName; + + /** 业务单据 ID(任务申请通知为 taskRecord.id)。 */ + private Long bizId; + + /** 微信模板 ID。 */ + private String templateId; + + /** 接收人服务号 openid。 */ + private String openId; + + /** 微信消息 ID(送达回调关联键)。 */ + private Long msgId; + + /** 发送状态编码:0已跳过 1已提交 2送达成功 3送达失败。 */ + private Integer sendStatus; + + /** 发送状态中文名。 */ + private String sendStatusName; + + /** 跳过原因(未关注服务号等)。 */ + private String skipReason; + + /** 错误码。 */ + private String errCode; + + /** 错误信息。 */ + private String errMsg; + + /** 微信回调送达结果原文(success / failed:user block 等)。 */ + private String resultStatus; + + /** 模板参数 JSON 快照。 */ + private String content; + + /** 提交发送时间。 */ + private LocalDateTime sendTime; + + /** 送达回调时间。 */ + private LocalDateTime resultTime; + + /** 入库时间。 */ + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/haisen/laop/vo/WxSubscribeStatusVO.java b/src/main/java/com/haisen/laop/vo/WxSubscribeStatusVO.java new file mode 100644 index 0000000..c73a5f7 --- /dev/null +++ b/src/main/java/com/haisen/laop/vo/WxSubscribeStatusVO.java @@ -0,0 +1,21 @@ +package com.haisen.laop.vo; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +/** + * 服务号关注状态 VO(小程序端关注引导弹窗的判定依据)。 + * + * @author duhao + */ +@Getter +@Setter +@Builder +public class WxSubscribeStatusVO { + + /** + * 是否已关注服务号:true 已关注(前端不弹引导);false 未关注(前端弹关注引导弹窗)。 + */ + private Boolean subscribed; +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..ed9235c --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,88 @@ +# 开发环境:PostgreSQL 14 + Spring Boot 8081(避开本机 nginx 的 8080) +server: + port: 8081 + +# 应用自定义配置 +laop: + # 文件访问基础 URL(前后端分离部署时填生产域名,开发时填本地后端地址) + file-base-url: http://localhost:8081/laop + # 文件存储根目录(dev:本机临时目录,按文件类型分子目录 image/video/license/store) + static-dir: /Users/duhao/Desktop/fileTemp/LAOP/static + +# 任务业务配置 +task: + grab: + # 是否拦截"申请自己发布的任务":开发联调期关闭,便于单账号自测完整流程;正式环境必须开启 + self-publish-check-enabled: false + +spring: + datasource: + url: jdbc:postgresql://127.0.0.1:5432/postgres?currentSchema=laop&stringtype=unspecified + username: postgres + password: 329512 + driver-class-name: org.postgresql.Driver + hikari: + maximum-pool-size: 10 + minimum-idle: 2 + connection-timeout: 30000 + + flyway: + enabled: false + + data: + redis: + host: 127.0.0.1 + port: 6379 + database: 0 + +redisson: + config: | + singleServerConfig: + address: "redis://127.0.0.1:6379" + database: 0 + connectionMinimumIdleSize: 4 + connectionPoolSize: 16 + +logging: + level: + org.hibernate.SQL: DEBUG + org.hibernate.type.descriptor.sql.BasicBinder: TRACE + +# 微信开放平台配置 +wechat: + # 微信开放平台 API 域名(Client 内只存接口路径,域名统一配置化) + base-url: https://api.weixin.qq.com + # 小程序(code2session 登录 + 推广码 + 订阅消息) + mini: + app-id: wx2ad24c8742860e18 + app-secret: a9e74c2e94a6d8e455e59ab49e0c88d7 + # 推广小程序码打开版本:release / trial / develop(开发阶段用 develop,正式发布后改 release) + wxacode-env-version: develop + # 公众号(模板消息推送) + mp: + app-id: wx38ece89a06339842 + app-secret: acb5f05922c53430028cfe2d29c64d14 + # 模板消息模板 ID(服务号后台申请获得;留空时对应消息自动跳过发送并落日志) + template-id: + # 任务申请通知(飞手接单 → 通知商家) + task-notify: ueR5iDMBpM5H50qbGQBrCD-S8mPFYq_6qm5u4LHwBSY + # 商家审核结果通知(→ 通知飞手):模板未申请,申请后填入 + review-notify: "" + # 飞手撤销申请通知(→ 通知商家):模板未申请,申请后填入 + cancel-notify: "" + # 模板消息发送队列(DB 持久化队列,运营调优参数;不配置时代码内置默认值兜底) + notify: + # 消费者轮询间隔(秒):无任务时等待,避免 CPU 空转 + poll-interval-seconds: 3 + # 每批取任务数上限:按峰值接单量预估 + batch-size: 20 + # 最大重试次数:超过后置 FAILED 并软删除 + max-retry-count: 3 + # 重试间隔(分钟,逗号分隔,第 N 次重试取第 N 个值,超出取最后一个) + retry-interval-minutes: 1,5,30 + # 僵尸任务超时(秒):PROCESSING 超过此时长未更新即回收为 PENDING + zombie-timeout-seconds: 300 + # 优雅停机等待时长(秒):停机时等待当前批次处理完成 + shutdown-wait-seconds: 10 + # 微信回调服务器验证 Token(公众号后台"服务器配置"中填写,需一致;未配置时回调验签失败) + server-token: diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..f269484 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,83 @@ +# 生产环境:PostgreSQL 16 +# 敏感配置通过环境变量注入,禁止硬编码 + +# 任务业务配置 +task: + grab: + # 是否拦截"申请自己发布的任务":正式环境必须开启(上线检查项) + self-publish-check-enabled: true + +spring: + datasource: + url: ${LAOP_DB_URL:jdbc:postgresql://prod-pg:5432/laop?currentSchema=public&stringtype=unspecified} + username: ${LAOP_DB_USER:laop} + password: ${LAOP_DB_PASSWORD} + driver-class-name: org.postgresql.Driver + hikari: + maximum-pool-size: 30 + minimum-idle: 5 + connection-timeout: 30000 + max-lifetime: 1800000 + + data: + redis: + host: ${LAOP_REDIS_HOST} + port: ${LAOP_REDIS_PORT:6379} + database: ${LAOP_REDIS_DB:0} + password: ${LAOP_REDIS_PASSWORD} + +redisson: + config: | + singleServerConfig: + address: "redis://${LAOP_REDIS_HOST}:${LAOP_REDIS_PORT:6379}" + database: ${LAOP_REDIS_DB:0} + password: "${LAOP_REDIS_PASSWORD}" + connectionMinimumIdleSize: 8 + connectionPoolSize: 64 + +logging: + level: + root: INFO + org.hibernate.SQL: WARN + +# 应用自定义配置 +laop: + # 文件访问基础 URL(生产环境填实际访问域名或网关地址) + file-base-url: ${LAOP_FILE_BASE_URL} + # 文件存储根目录(生产环境通过环境变量注入,按文件类型分子目录 image/video/license/store) + static-dir: ${LAOP_STATIC_DIR} + +# 微信开放平台配置 —— 生产环境敏感值通过环境变量注入 +wechat: + # 微信开放平台 API 域名(Client 内只存接口路径,域名统一配置化) + base-url: ${WECHAT_BASE_URL:https://api.weixin.qq.com} + mini: + app-id: ${WECHAT_MINI_APP_ID} + app-secret: ${WECHAT_MINI_APP_SECRET} + mp: + app-id: ${WECHAT_MP_APP_ID} + app-secret: ${WECHAT_MP_APP_SECRET} + # 模板消息模板 ID(微信公众平台申请后配置;留空时对应消息自动跳过发送并落日志) + template-id: + # 任务申请通知(飞手接单 → 通知商家) + task-notify: ${WECHAT_MP_TASK_NOTIFY_TEMPLATE_ID:} + # 商家审核结果通知(→ 通知飞手) + review-notify: ${WECHAT_MP_REVIEW_NOTIFY_TEMPLATE_ID:} + # 飞手撤销申请通知(→ 通知商家) + cancel-notify: ${WECHAT_MP_CANCEL_NOTIFY_TEMPLATE_ID:} + # 模板消息发送队列(DB 持久化队列,运营调优参数,可按环境变量覆盖) + notify: + # 消费者轮询间隔(秒) + poll-interval-seconds: ${WECHAT_MP_NOTIFY_POLL_INTERVAL_SECONDS:3} + # 每批取任务数上限 + batch-size: ${WECHAT_MP_NOTIFY_BATCH_SIZE:20} + # 最大重试次数 + max-retry-count: ${WECHAT_MP_NOTIFY_MAX_RETRY_COUNT:3} + # 重试间隔(分钟,逗号分隔) + retry-interval-minutes: ${WECHAT_MP_NOTIFY_RETRY_INTERVAL_MINUTES:1,5,30} + # 僵尸任务超时(秒) + zombie-timeout-seconds: ${WECHAT_MP_NOTIFY_ZOMBIE_TIMEOUT_SECONDS:300} + # 优雅停机等待时长(秒) + shutdown-wait-seconds: ${WECHAT_MP_NOTIFY_SHUTDOWN_WAIT_SECONDS:10} + # 微信回调服务器验证 Token(公众号后台"服务器配置"中填写,需一致) + server-token: ${WECHAT_MP_SERVER_TOKEN:} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..4999e72 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,43 @@ +server: + port: 8081 + servlet: + context-path: /laop + +spring: + profiles: + active: '@spring.profiles.active@' + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: Asia/Shanghai + default-property-inclusion: non_null + servlet: + multipart: + enabled: true + max-file-size: 10MB + max-request-size: 15MB + jpa: + open-in-view: false + hibernate: + ddl-auto: none + naming: + physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy + implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy + properties: + hibernate: + format_sql: false + jdbc.lob.non_contextual_creation: true + type: + preferred_json_jdbc_type: JSONB + flyway: + enabled: true + locations: classpath:db/migration + baseline-on-migrate: true + baseline-version: 0 + table: flyway_schema_history + +logging: + level: + root: INFO + com.haisen.laop: INFO + org.hibernate.SQL: WARN + org.springframework.web.servlet.resource: WARN diff --git a/src/main/resources/db/data.sql b/src/main/resources/db/data.sql new file mode 100644 index 0000000..331a321 --- /dev/null +++ b/src/main/resources/db/data.sql @@ -0,0 +1,3513 @@ +-- ============================================================ +-- 翼云Hub · 数据库初始化种子数据 +-- ------------------------------------------------------------ +-- 前置条件:schema.sql 已执行完毕,所有表已存在 +-- 执行顺序:本文件内按依赖顺序排列,直接执行即可 +-- 幂等性:除 region 外均带 ON CONFLICT / INSERT OVERRIDE 保护, +-- 可安全重复执行;region 建议首次初始化时使用, +-- 重复执行请先 TRUNCATE region RESTART IDENTITY CASCADE +-- ============================================================ + + +-- ========== 1. 省市区标准行政区划 ========== +-- 来自 V2__seed_region.sql +-- ============================================================ +-- V2: 初始化中国省市区数据(region 表) +-- 数据源: modood/Administrative-divisions-of-China (基于国家统计局标准) +-- 编码规则: 6 位行政区划编码 (省 2 位补 0000 / 市 4 位补 00 / 区 6 位) +-- 级别: 1省 2市 3区县; parent_code 自关联形成三级树, 省级为 NULL +-- 港澳台: 台湾省 710000 / 香港特别行政区 810000 / 澳门特别行政区 820000 +-- (民政部公布口径, 仅省级, 不下钻) +-- 直筒子市: 东莞市(441900)/中山市(442000)/儋州市(460400)/嘉峪关市(620200) +-- 下级街道/镇在数据源中为 9 位编码, 违反"6 位编码"规约, 按民政部 +-- 公布口径仅保留市级一行, 不入库下级 +-- created_at / updated_at 由 DB DEFAULT 维护, deleted_at 默认 NULL, 均不显式写入 +-- 幂等性: 由 flyway_schema_history 表保证本脚本仅执行一次; 若 region 表已有 +-- 历史数据需重置, 先 TRUNCATE region RESTART IDENTITY CASCADE 再重跑 +-- ============================================================ + + + +INSERT INTO region (code, name, level, parent_code) VALUES + ('110000', '北京市', 1, NULL), + ('110100', '市辖区', 2, '110000'), + ('110101', '东城区', 3, '110100'), + ('110102', '西城区', 3, '110100'), + ('110105', '朝阳区', 3, '110100'), + ('110106', '丰台区', 3, '110100'), + ('110107', '石景山区', 3, '110100'), + ('110108', '海淀区', 3, '110100'), + ('110109', '门头沟区', 3, '110100'), + ('110111', '房山区', 3, '110100'), + ('110112', '通州区', 3, '110100'), + ('110113', '顺义区', 3, '110100'), + ('110114', '昌平区', 3, '110100'), + ('110115', '大兴区', 3, '110100'), + ('110116', '怀柔区', 3, '110100'), + ('110117', '平谷区', 3, '110100'), + ('110118', '密云区', 3, '110100'), + ('110119', '延庆区', 3, '110100'), + ('120000', '天津市', 1, NULL), + ('120100', '市辖区', 2, '120000'), + ('120101', '和平区', 3, '120100'), + ('120102', '河东区', 3, '120100'), + ('120103', '河西区', 3, '120100'), + ('120104', '南开区', 3, '120100'), + ('120105', '河北区', 3, '120100'), + ('120106', '红桥区', 3, '120100'), + ('120110', '东丽区', 3, '120100'), + ('120111', '西青区', 3, '120100'), + ('120112', '津南区', 3, '120100'), + ('120113', '北辰区', 3, '120100'), + ('120114', '武清区', 3, '120100'), + ('120115', '宝坻区', 3, '120100'), + ('120116', '滨海新区', 3, '120100'), + ('120117', '宁河区', 3, '120100'), + ('120118', '静海区', 3, '120100'), + ('120119', '蓟州区', 3, '120100'), + ('130000', '河北省', 1, NULL), + ('130100', '石家庄市', 2, '130000'), + ('130102', '长安区', 3, '130100'), + ('130104', '桥西区', 3, '130100'), + ('130105', '新华区', 3, '130100'), + ('130107', '井陉矿区', 3, '130100'), + ('130108', '裕华区', 3, '130100'), + ('130109', '藁城区', 3, '130100'), + ('130110', '鹿泉区', 3, '130100'), + ('130111', '栾城区', 3, '130100'), + ('130121', '井陉县', 3, '130100'), + ('130123', '正定县', 3, '130100'), + ('130125', '行唐县', 3, '130100'), + ('130126', '灵寿县', 3, '130100'), + ('130127', '高邑县', 3, '130100'), + ('130128', '深泽县', 3, '130100'), + ('130129', '赞皇县', 3, '130100'), + ('130130', '无极县', 3, '130100'), + ('130131', '平山县', 3, '130100'), + ('130132', '元氏县', 3, '130100'), + ('130133', '赵县', 3, '130100'), + ('130171', '石家庄高新技术产业开发区', 3, '130100'), + ('130172', '石家庄循环化工园区', 3, '130100'), + ('130181', '辛集市', 3, '130100'), + ('130183', '晋州市', 3, '130100'), + ('130184', '新乐市', 3, '130100'), + ('130200', '唐山市', 2, '130000'), + ('130202', '路南区', 3, '130200'), + ('130203', '路北区', 3, '130200'), + ('130204', '古冶区', 3, '130200'), + ('130205', '开平区', 3, '130200'), + ('130207', '丰南区', 3, '130200'), + ('130208', '丰润区', 3, '130200'), + ('130209', '曹妃甸区', 3, '130200'), + ('130224', '滦南县', 3, '130200'), + ('130225', '乐亭县', 3, '130200'), + ('130227', '迁西县', 3, '130200'), + ('130229', '玉田县', 3, '130200'), + ('130271', '河北唐山芦台经济开发区', 3, '130200'), + ('130272', '唐山市汉沽管理区', 3, '130200'), + ('130273', '唐山高新技术产业开发区', 3, '130200'), + ('130274', '河北唐山海港经济开发区', 3, '130200'), + ('130281', '遵化市', 3, '130200'), + ('130283', '迁安市', 3, '130200'), + ('130284', '滦州市', 3, '130200'), + ('130300', '秦皇岛市', 2, '130000'), + ('130302', '海港区', 3, '130300'), + ('130303', '山海关区', 3, '130300'), + ('130304', '北戴河区', 3, '130300'), + ('130306', '抚宁区', 3, '130300'), + ('130321', '青龙满族自治县', 3, '130300'), + ('130322', '昌黎县', 3, '130300'), + ('130324', '卢龙县', 3, '130300'), + ('130371', '秦皇岛市经济技术开发区', 3, '130300'), + ('130372', '北戴河新区', 3, '130300'), + ('130400', '邯郸市', 2, '130000'), + ('130402', '邯山区', 3, '130400'), + ('130403', '丛台区', 3, '130400'), + ('130404', '复兴区', 3, '130400'), + ('130406', '峰峰矿区', 3, '130400'), + ('130407', '肥乡区', 3, '130400'), + ('130408', '永年区', 3, '130400'), + ('130423', '临漳县', 3, '130400'), + ('130424', '成安县', 3, '130400'), + ('130425', '大名县', 3, '130400'), + ('130426', '涉县', 3, '130400'), + ('130427', '磁县', 3, '130400'), + ('130430', '邱县', 3, '130400'), + ('130431', '鸡泽县', 3, '130400'), + ('130432', '广平县', 3, '130400'), + ('130433', '馆陶县', 3, '130400'), + ('130434', '魏县', 3, '130400'), + ('130435', '曲周县', 3, '130400'), + ('130471', '邯郸经济技术开发区', 3, '130400'), + ('130473', '邯郸冀南新区', 3, '130400'), + ('130481', '武安市', 3, '130400'), + ('130500', '邢台市', 2, '130000'), + ('130502', '襄都区', 3, '130500'), + ('130503', '信都区', 3, '130500'), + ('130505', '任泽区', 3, '130500'), + ('130506', '南和区', 3, '130500'), + ('130522', '临城县', 3, '130500'), + ('130523', '内丘县', 3, '130500'), + ('130524', '柏乡县', 3, '130500'), + ('130525', '隆尧县', 3, '130500'), + ('130528', '宁晋县', 3, '130500'), + ('130529', '巨鹿县', 3, '130500'), + ('130530', '新河县', 3, '130500'), + ('130531', '广宗县', 3, '130500'), + ('130532', '平乡县', 3, '130500'), + ('130533', '威县', 3, '130500'), + ('130534', '清河县', 3, '130500'), + ('130535', '临西县', 3, '130500'), + ('130571', '河北邢台经济开发区', 3, '130500'), + ('130581', '南宫市', 3, '130500'), + ('130582', '沙河市', 3, '130500'), + ('130600', '保定市', 2, '130000'), + ('130602', '竞秀区', 3, '130600'), + ('130606', '莲池区', 3, '130600'), + ('130607', '满城区', 3, '130600'), + ('130608', '清苑区', 3, '130600'), + ('130609', '徐水区', 3, '130600'), + ('130623', '涞水县', 3, '130600'), + ('130624', '阜平县', 3, '130600'), + ('130626', '定兴县', 3, '130600'), + ('130627', '唐县', 3, '130600'), + ('130628', '高阳县', 3, '130600'), + ('130629', '容城县', 3, '130600'), + ('130630', '涞源县', 3, '130600'), + ('130631', '望都县', 3, '130600'), + ('130632', '安新县', 3, '130600'), + ('130633', '易县', 3, '130600'), + ('130634', '曲阳县', 3, '130600'), + ('130635', '蠡县', 3, '130600'), + ('130636', '顺平县', 3, '130600'), + ('130637', '博野县', 3, '130600'), + ('130638', '雄县', 3, '130600'), + ('130671', '保定高新技术产业开发区', 3, '130600'), + ('130672', '保定白沟新城', 3, '130600'), + ('130681', '涿州市', 3, '130600'), + ('130682', '定州市', 3, '130600'), + ('130683', '安国市', 3, '130600'), + ('130684', '高碑店市', 3, '130600'), + ('130700', '张家口市', 2, '130000'), + ('130702', '桥东区', 3, '130700'), + ('130703', '桥西区', 3, '130700'), + ('130705', '宣化区', 3, '130700'), + ('130706', '下花园区', 3, '130700'), + ('130708', '万全区', 3, '130700'), + ('130709', '崇礼区', 3, '130700'), + ('130722', '张北县', 3, '130700'), + ('130723', '康保县', 3, '130700'), + ('130724', '沽源县', 3, '130700'), + ('130725', '尚义县', 3, '130700'), + ('130726', '蔚县', 3, '130700'), + ('130727', '阳原县', 3, '130700'), + ('130728', '怀安县', 3, '130700'), + ('130730', '怀来县', 3, '130700'), + ('130731', '涿鹿县', 3, '130700'), + ('130732', '赤城县', 3, '130700'), + ('130771', '张家口经济开发区', 3, '130700'), + ('130772', '张家口市察北管理区', 3, '130700'), + ('130773', '张家口市塞北管理区', 3, '130700'), + ('130800', '承德市', 2, '130000'), + ('130802', '双桥区', 3, '130800'), + ('130803', '双滦区', 3, '130800'), + ('130804', '鹰手营子矿区', 3, '130800'), + ('130821', '承德县', 3, '130800'), + ('130822', '兴隆县', 3, '130800'), + ('130824', '滦平县', 3, '130800'), + ('130825', '隆化县', 3, '130800'), + ('130826', '丰宁满族自治县', 3, '130800'), + ('130827', '宽城满族自治县', 3, '130800'), + ('130828', '围场满族蒙古族自治县', 3, '130800'), + ('130871', '承德高新技术产业开发区', 3, '130800'), + ('130881', '平泉市', 3, '130800'), + ('130900', '沧州市', 2, '130000'), + ('130902', '新华区', 3, '130900'), + ('130903', '运河区', 3, '130900'), + ('130921', '沧县', 3, '130900'), + ('130922', '青县', 3, '130900'), + ('130923', '东光县', 3, '130900'), + ('130924', '海兴县', 3, '130900'), + ('130925', '盐山县', 3, '130900'), + ('130926', '肃宁县', 3, '130900'), + ('130927', '南皮县', 3, '130900'), + ('130928', '吴桥县', 3, '130900'), + ('130929', '献县', 3, '130900'), + ('130930', '孟村回族自治县', 3, '130900'), + ('130971', '河北沧州经济开发区', 3, '130900'), + ('130972', '沧州高新技术产业开发区', 3, '130900'), + ('130973', '沧州渤海新区', 3, '130900'), + ('130981', '泊头市', 3, '130900'), + ('130982', '任丘市', 3, '130900'), + ('130983', '黄骅市', 3, '130900'), + ('130984', '河间市', 3, '130900'), + ('131000', '廊坊市', 2, '130000'), + ('131002', '安次区', 3, '131000'), + ('131003', '广阳区', 3, '131000'), + ('131022', '固安县', 3, '131000'), + ('131023', '永清县', 3, '131000'), + ('131024', '香河县', 3, '131000'), + ('131025', '大城县', 3, '131000'), + ('131026', '文安县', 3, '131000'), + ('131028', '大厂回族自治县', 3, '131000'), + ('131071', '廊坊经济技术开发区', 3, '131000'), + ('131081', '霸州市', 3, '131000'), + ('131082', '三河市', 3, '131000'), + ('131100', '衡水市', 2, '130000'), + ('131102', '桃城区', 3, '131100'), + ('131103', '冀州区', 3, '131100'), + ('131121', '枣强县', 3, '131100'), + ('131122', '武邑县', 3, '131100'), + ('131123', '武强县', 3, '131100'), + ('131124', '饶阳县', 3, '131100'), + ('131125', '安平县', 3, '131100'), + ('131126', '故城县', 3, '131100'), + ('131127', '景县', 3, '131100'), + ('131128', '阜城县', 3, '131100'), + ('131171', '河北衡水高新技术产业开发区', 3, '131100'), + ('131172', '衡水滨湖新区', 3, '131100'), + ('131182', '深州市', 3, '131100'), + ('140000', '山西省', 1, NULL), + ('140100', '太原市', 2, '140000'), + ('140105', '小店区', 3, '140100'), + ('140106', '迎泽区', 3, '140100'), + ('140107', '杏花岭区', 3, '140100'), + ('140108', '尖草坪区', 3, '140100'), + ('140109', '万柏林区', 3, '140100'), + ('140110', '晋源区', 3, '140100'), + ('140121', '清徐县', 3, '140100'), + ('140122', '阳曲县', 3, '140100'), + ('140123', '娄烦县', 3, '140100'), + ('140171', '山西转型综合改革示范区', 3, '140100'), + ('140181', '古交市', 3, '140100'), + ('140200', '大同市', 2, '140000'), + ('140212', '新荣区', 3, '140200'), + ('140213', '平城区', 3, '140200'), + ('140214', '云冈区', 3, '140200'), + ('140215', '云州区', 3, '140200'), + ('140221', '阳高县', 3, '140200'), + ('140222', '天镇县', 3, '140200'), + ('140223', '广灵县', 3, '140200'), + ('140224', '灵丘县', 3, '140200'), + ('140225', '浑源县', 3, '140200'), + ('140226', '左云县', 3, '140200'), + ('140271', '山西大同经济开发区', 3, '140200'), + ('140300', '阳泉市', 2, '140000'), + ('140302', '城区', 3, '140300'), + ('140303', '矿区', 3, '140300'), + ('140311', '郊区', 3, '140300'), + ('140321', '平定县', 3, '140300'), + ('140322', '盂县', 3, '140300'), + ('140400', '长治市', 2, '140000'), + ('140403', '潞州区', 3, '140400'), + ('140404', '上党区', 3, '140400'), + ('140405', '屯留区', 3, '140400'), + ('140406', '潞城区', 3, '140400'), + ('140423', '襄垣县', 3, '140400'), + ('140425', '平顺县', 3, '140400'), + ('140426', '黎城县', 3, '140400'), + ('140427', '壶关县', 3, '140400'), + ('140428', '长子县', 3, '140400'), + ('140429', '武乡县', 3, '140400'), + ('140430', '沁县', 3, '140400'), + ('140431', '沁源县', 3, '140400'), + ('140500', '晋城市', 2, '140000'), + ('140502', '城区', 3, '140500'), + ('140521', '沁水县', 3, '140500'), + ('140522', '阳城县', 3, '140500'), + ('140524', '陵川县', 3, '140500'), + ('140525', '泽州县', 3, '140500'), + ('140581', '高平市', 3, '140500'), + ('140600', '朔州市', 2, '140000'), + ('140602', '朔城区', 3, '140600'), + ('140603', '平鲁区', 3, '140600'), + ('140621', '山阴县', 3, '140600'), + ('140622', '应县', 3, '140600'), + ('140623', '右玉县', 3, '140600'), + ('140671', '山西朔州经济开发区', 3, '140600'), + ('140681', '怀仁市', 3, '140600'), + ('140700', '晋中市', 2, '140000'), + ('140702', '榆次区', 3, '140700'), + ('140703', '太谷区', 3, '140700'), + ('140721', '榆社县', 3, '140700'), + ('140722', '左权县', 3, '140700'), + ('140723', '和顺县', 3, '140700'), + ('140724', '昔阳县', 3, '140700'), + ('140725', '寿阳县', 3, '140700'), + ('140727', '祁县', 3, '140700'), + ('140728', '平遥县', 3, '140700'), + ('140729', '灵石县', 3, '140700'), + ('140781', '介休市', 3, '140700'), + ('140800', '运城市', 2, '140000'), + ('140802', '盐湖区', 3, '140800'), + ('140821', '临猗县', 3, '140800'), + ('140822', '万荣县', 3, '140800'), + ('140823', '闻喜县', 3, '140800'), + ('140824', '稷山县', 3, '140800'), + ('140825', '新绛县', 3, '140800'), + ('140826', '绛县', 3, '140800'), + ('140827', '垣曲县', 3, '140800'), + ('140828', '夏县', 3, '140800'), + ('140829', '平陆县', 3, '140800'), + ('140830', '芮城县', 3, '140800'), + ('140881', '永济市', 3, '140800'), + ('140882', '河津市', 3, '140800'), + ('140900', '忻州市', 2, '140000'), + ('140902', '忻府区', 3, '140900'), + ('140921', '定襄县', 3, '140900'), + ('140922', '五台县', 3, '140900'), + ('140923', '代县', 3, '140900'), + ('140924', '繁峙县', 3, '140900'), + ('140925', '宁武县', 3, '140900'), + ('140926', '静乐县', 3, '140900'), + ('140927', '神池县', 3, '140900'), + ('140928', '五寨县', 3, '140900'), + ('140929', '岢岚县', 3, '140900'), + ('140930', '河曲县', 3, '140900'), + ('140931', '保德县', 3, '140900'), + ('140932', '偏关县', 3, '140900'), + ('140971', '五台山风景名胜区', 3, '140900'), + ('140981', '原平市', 3, '140900'), + ('141000', '临汾市', 2, '140000'), + ('141002', '尧都区', 3, '141000'), + ('141021', '曲沃县', 3, '141000'), + ('141022', '翼城县', 3, '141000'), + ('141023', '襄汾县', 3, '141000'), + ('141024', '洪洞县', 3, '141000'), + ('141025', '古县', 3, '141000'), + ('141026', '安泽县', 3, '141000'), + ('141027', '浮山县', 3, '141000'), + ('141028', '吉县', 3, '141000'), + ('141029', '乡宁县', 3, '141000'), + ('141030', '大宁县', 3, '141000'), + ('141031', '隰县', 3, '141000'), + ('141032', '永和县', 3, '141000'), + ('141033', '蒲县', 3, '141000'), + ('141034', '汾西县', 3, '141000'), + ('141081', '侯马市', 3, '141000'), + ('141082', '霍州市', 3, '141000'), + ('141100', '吕梁市', 2, '140000'), + ('141102', '离石区', 3, '141100'), + ('141121', '文水县', 3, '141100'), + ('141122', '交城县', 3, '141100'), + ('141123', '兴县', 3, '141100'), + ('141124', '临县', 3, '141100'), + ('141125', '柳林县', 3, '141100'), + ('141126', '石楼县', 3, '141100'), + ('141127', '岚县', 3, '141100'), + ('141128', '方山县', 3, '141100'), + ('141129', '中阳县', 3, '141100'), + ('141130', '交口县', 3, '141100'), + ('141181', '孝义市', 3, '141100'), + ('141182', '汾阳市', 3, '141100'), + ('150000', '内蒙古自治区', 1, NULL), + ('150100', '呼和浩特市', 2, '150000'), + ('150102', '新城区', 3, '150100'), + ('150103', '回民区', 3, '150100'), + ('150104', '玉泉区', 3, '150100'), + ('150105', '赛罕区', 3, '150100'), + ('150121', '土默特左旗', 3, '150100'), + ('150122', '托克托县', 3, '150100'), + ('150123', '和林格尔县', 3, '150100'), + ('150124', '清水河县', 3, '150100'), + ('150125', '武川县', 3, '150100'), + ('150172', '呼和浩特经济技术开发区', 3, '150100'), + ('150200', '包头市', 2, '150000'), + ('150202', '东河区', 3, '150200'), + ('150203', '昆都仑区', 3, '150200'), + ('150204', '青山区', 3, '150200'), + ('150205', '石拐区', 3, '150200'), + ('150206', '白云鄂博矿区', 3, '150200'), + ('150207', '九原区', 3, '150200'), + ('150221', '土默特右旗', 3, '150200'), + ('150222', '固阳县', 3, '150200'), + ('150223', '达尔罕茂明安联合旗', 3, '150200'), + ('150271', '包头稀土高新技术产业开发区', 3, '150200'), + ('150300', '乌海市', 2, '150000'), + ('150302', '海勃湾区', 3, '150300'), + ('150303', '海南区', 3, '150300'), + ('150304', '乌达区', 3, '150300'), + ('150400', '赤峰市', 2, '150000'), + ('150402', '红山区', 3, '150400'), + ('150403', '元宝山区', 3, '150400'), + ('150404', '松山区', 3, '150400'), + ('150421', '阿鲁科尔沁旗', 3, '150400'), + ('150422', '巴林左旗', 3, '150400'), + ('150423', '巴林右旗', 3, '150400'), + ('150424', '林西县', 3, '150400'), + ('150425', '克什克腾旗', 3, '150400'), + ('150426', '翁牛特旗', 3, '150400'), + ('150428', '喀喇沁旗', 3, '150400'), + ('150429', '宁城县', 3, '150400'), + ('150430', '敖汉旗', 3, '150400'), + ('150500', '通辽市', 2, '150000'), + ('150502', '科尔沁区', 3, '150500'), + ('150521', '科尔沁左翼中旗', 3, '150500'), + ('150522', '科尔沁左翼后旗', 3, '150500'), + ('150523', '开鲁县', 3, '150500'), + ('150524', '库伦旗', 3, '150500'), + ('150525', '奈曼旗', 3, '150500'), + ('150526', '扎鲁特旗', 3, '150500'), + ('150571', '通辽经济技术开发区', 3, '150500'), + ('150581', '霍林郭勒市', 3, '150500'), + ('150600', '鄂尔多斯市', 2, '150000'), + ('150602', '东胜区', 3, '150600'), + ('150603', '康巴什区', 3, '150600'), + ('150621', '达拉特旗', 3, '150600'), + ('150622', '准格尔旗', 3, '150600'), + ('150623', '鄂托克前旗', 3, '150600'), + ('150624', '鄂托克旗', 3, '150600'), + ('150625', '杭锦旗', 3, '150600'), + ('150626', '乌审旗', 3, '150600'), + ('150627', '伊金霍洛旗', 3, '150600'), + ('150700', '呼伦贝尔市', 2, '150000'), + ('150702', '海拉尔区', 3, '150700'), + ('150703', '扎赉诺尔区', 3, '150700'), + ('150721', '阿荣旗', 3, '150700'), + ('150722', '莫力达瓦达斡尔族自治旗', 3, '150700'), + ('150723', '鄂伦春自治旗', 3, '150700'), + ('150724', '鄂温克族自治旗', 3, '150700'), + ('150725', '陈巴尔虎旗', 3, '150700'), + ('150726', '新巴尔虎左旗', 3, '150700'), + ('150727', '新巴尔虎右旗', 3, '150700'), + ('150781', '满洲里市', 3, '150700'), + ('150782', '牙克石市', 3, '150700'), + ('150783', '扎兰屯市', 3, '150700'), + ('150784', '额尔古纳市', 3, '150700'), + ('150785', '根河市', 3, '150700'), + ('150800', '巴彦淖尔市', 2, '150000'), + ('150802', '临河区', 3, '150800'), + ('150821', '五原县', 3, '150800'), + ('150822', '磴口县', 3, '150800'), + ('150823', '乌拉特前旗', 3, '150800'), + ('150824', '乌拉特中旗', 3, '150800'), + ('150825', '乌拉特后旗', 3, '150800'), + ('150826', '杭锦后旗', 3, '150800'), + ('150900', '乌兰察布市', 2, '150000'), + ('150902', '集宁区', 3, '150900'), + ('150921', '卓资县', 3, '150900'), + ('150922', '化德县', 3, '150900'), + ('150923', '商都县', 3, '150900'), + ('150924', '兴和县', 3, '150900'), + ('150925', '凉城县', 3, '150900'), + ('150926', '察哈尔右翼前旗', 3, '150900'), + ('150927', '察哈尔右翼中旗', 3, '150900'), + ('150928', '察哈尔右翼后旗', 3, '150900'), + ('150929', '四子王旗', 3, '150900'), + ('150981', '丰镇市', 3, '150900'), + ('152200', '兴安盟', 2, '150000'), + ('152201', '乌兰浩特市', 3, '152200'), + ('152202', '阿尔山市', 3, '152200'), + ('152221', '科尔沁右翼前旗', 3, '152200'), + ('152222', '科尔沁右翼中旗', 3, '152200'), + ('152223', '扎赉特旗', 3, '152200'), + ('152224', '突泉县', 3, '152200'), + ('152500', '锡林郭勒盟', 2, '150000'), + ('152501', '二连浩特市', 3, '152500'), + ('152502', '锡林浩特市', 3, '152500'), + ('152522', '阿巴嘎旗', 3, '152500'), + ('152523', '苏尼特左旗', 3, '152500'), + ('152524', '苏尼特右旗', 3, '152500'), + ('152525', '东乌珠穆沁旗', 3, '152500'), + ('152526', '西乌珠穆沁旗', 3, '152500'), + ('152527', '太仆寺旗', 3, '152500'), + ('152528', '镶黄旗', 3, '152500'), + ('152529', '正镶白旗', 3, '152500'), + ('152530', '正蓝旗', 3, '152500'), + ('152531', '多伦县', 3, '152500'), + ('152571', '乌拉盖管理区管委会', 3, '152500'), + ('152900', '阿拉善盟', 2, '150000'), + ('152921', '阿拉善左旗', 3, '152900'), + ('152922', '阿拉善右旗', 3, '152900'), + ('152923', '额济纳旗', 3, '152900'), + ('152971', '内蒙古阿拉善高新技术产业开发区', 3, '152900'), + ('210000', '辽宁省', 1, NULL), + ('210100', '沈阳市', 2, '210000'), + ('210102', '和平区', 3, '210100'), + ('210103', '沈河区', 3, '210100'), + ('210104', '大东区', 3, '210100'), + ('210105', '皇姑区', 3, '210100'), + ('210106', '铁西区', 3, '210100'), + ('210111', '苏家屯区', 3, '210100'), + ('210112', '浑南区', 3, '210100'), + ('210113', '沈北新区', 3, '210100'), + ('210114', '于洪区', 3, '210100'), + ('210115', '辽中区', 3, '210100'), + ('210123', '康平县', 3, '210100'), + ('210124', '法库县', 3, '210100'), + ('210181', '新民市', 3, '210100'), + ('210200', '大连市', 2, '210000'), + ('210202', '中山区', 3, '210200'), + ('210203', '西岗区', 3, '210200'), + ('210204', '沙河口区', 3, '210200'), + ('210211', '甘井子区', 3, '210200'), + ('210212', '旅顺口区', 3, '210200'), + ('210213', '金州区', 3, '210200'), + ('210214', '普兰店区', 3, '210200'), + ('210224', '长海县', 3, '210200'), + ('210281', '瓦房店市', 3, '210200'), + ('210283', '庄河市', 3, '210200'), + ('210300', '鞍山市', 2, '210000'), + ('210302', '铁东区', 3, '210300'), + ('210303', '铁西区', 3, '210300'), + ('210304', '立山区', 3, '210300'), + ('210311', '千山区', 3, '210300'), + ('210321', '台安县', 3, '210300'), + ('210323', '岫岩满族自治县', 3, '210300'), + ('210381', '海城市', 3, '210300'), + ('210400', '抚顺市', 2, '210000'), + ('210402', '新抚区', 3, '210400'), + ('210403', '东洲区', 3, '210400'), + ('210404', '望花区', 3, '210400'), + ('210411', '顺城区', 3, '210400'), + ('210421', '抚顺县', 3, '210400'), + ('210422', '新宾满族自治县', 3, '210400'), + ('210423', '清原满族自治县', 3, '210400'), + ('210500', '本溪市', 2, '210000'), + ('210502', '平山区', 3, '210500'), + ('210503', '溪湖区', 3, '210500'), + ('210504', '明山区', 3, '210500'), + ('210505', '南芬区', 3, '210500'), + ('210521', '本溪满族自治县', 3, '210500'), + ('210522', '桓仁满族自治县', 3, '210500'), + ('210600', '丹东市', 2, '210000'), + ('210602', '元宝区', 3, '210600'), + ('210603', '振兴区', 3, '210600'), + ('210604', '振安区', 3, '210600'), + ('210624', '宽甸满族自治县', 3, '210600'), + ('210681', '东港市', 3, '210600'), + ('210682', '凤城市', 3, '210600'), + ('210700', '锦州市', 2, '210000'), + ('210702', '古塔区', 3, '210700'), + ('210703', '凌河区', 3, '210700'), + ('210711', '太和区', 3, '210700'), + ('210726', '黑山县', 3, '210700'), + ('210727', '义县', 3, '210700'), + ('210781', '凌海市', 3, '210700'), + ('210782', '北镇市', 3, '210700'), + ('210800', '营口市', 2, '210000'), + ('210802', '站前区', 3, '210800'), + ('210803', '西市区', 3, '210800'), + ('210804', '鲅鱼圈区', 3, '210800'), + ('210811', '老边区', 3, '210800'), + ('210881', '盖州市', 3, '210800'), + ('210882', '大石桥市', 3, '210800'), + ('210900', '阜新市', 2, '210000'), + ('210902', '海州区', 3, '210900'), + ('210903', '新邱区', 3, '210900'), + ('210904', '太平区', 3, '210900'), + ('210905', '清河门区', 3, '210900'), + ('210911', '细河区', 3, '210900'), + ('210921', '阜新蒙古族自治县', 3, '210900'), + ('210922', '彰武县', 3, '210900'), + ('211000', '辽阳市', 2, '210000'), + ('211002', '白塔区', 3, '211000'), + ('211003', '文圣区', 3, '211000'), + ('211004', '宏伟区', 3, '211000'), + ('211005', '弓长岭区', 3, '211000'), + ('211011', '太子河区', 3, '211000'), + ('211021', '辽阳县', 3, '211000'), + ('211081', '灯塔市', 3, '211000'), + ('211100', '盘锦市', 2, '210000'), + ('211102', '双台子区', 3, '211100'), + ('211103', '兴隆台区', 3, '211100'), + ('211104', '大洼区', 3, '211100'), + ('211122', '盘山县', 3, '211100'), + ('211200', '铁岭市', 2, '210000'), + ('211202', '银州区', 3, '211200'), + ('211204', '清河区', 3, '211200'), + ('211221', '铁岭县', 3, '211200'), + ('211223', '西丰县', 3, '211200'), + ('211224', '昌图县', 3, '211200'), + ('211281', '调兵山市', 3, '211200'), + ('211282', '开原市', 3, '211200'), + ('211300', '朝阳市', 2, '210000'), + ('211302', '双塔区', 3, '211300'), + ('211303', '龙城区', 3, '211300'), + ('211321', '朝阳县', 3, '211300'), + ('211322', '建平县', 3, '211300'), + ('211324', '喀喇沁左翼蒙古族自治县', 3, '211300'), + ('211381', '北票市', 3, '211300'), + ('211382', '凌源市', 3, '211300'), + ('211400', '葫芦岛市', 2, '210000'), + ('211402', '连山区', 3, '211400'), + ('211403', '龙港区', 3, '211400'), + ('211404', '南票区', 3, '211400'), + ('211421', '绥中县', 3, '211400'), + ('211422', '建昌县', 3, '211400'), + ('211481', '兴城市', 3, '211400'), + ('220000', '吉林省', 1, NULL), + ('220100', '长春市', 2, '220000'), + ('220102', '南关区', 3, '220100'), + ('220103', '宽城区', 3, '220100'), + ('220104', '朝阳区', 3, '220100'), + ('220105', '二道区', 3, '220100'), + ('220106', '绿园区', 3, '220100'), + ('220112', '双阳区', 3, '220100'), + ('220113', '九台区', 3, '220100'), + ('220122', '农安县', 3, '220100'), + ('220171', '长春经济技术开发区', 3, '220100'), + ('220172', '长春净月高新技术产业开发区', 3, '220100'), + ('220173', '长春高新技术产业开发区', 3, '220100'), + ('220174', '长春汽车经济技术开发区', 3, '220100'), + ('220182', '榆树市', 3, '220100'), + ('220183', '德惠市', 3, '220100'), + ('220184', '公主岭市', 3, '220100'), + ('220200', '吉林市', 2, '220000'), + ('220202', '昌邑区', 3, '220200'), + ('220203', '龙潭区', 3, '220200'), + ('220204', '船营区', 3, '220200'), + ('220211', '丰满区', 3, '220200'), + ('220221', '永吉县', 3, '220200'), + ('220271', '吉林经济开发区', 3, '220200'), + ('220272', '吉林高新技术产业开发区', 3, '220200'), + ('220273', '吉林中国新加坡食品区', 3, '220200'), + ('220281', '蛟河市', 3, '220200'), + ('220282', '桦甸市', 3, '220200'), + ('220283', '舒兰市', 3, '220200'), + ('220284', '磐石市', 3, '220200'), + ('220300', '四平市', 2, '220000'), + ('220302', '铁西区', 3, '220300'), + ('220303', '铁东区', 3, '220300'), + ('220322', '梨树县', 3, '220300'), + ('220323', '伊通满族自治县', 3, '220300'), + ('220382', '双辽市', 3, '220300'), + ('220400', '辽源市', 2, '220000'), + ('220402', '龙山区', 3, '220400'), + ('220403', '西安区', 3, '220400'), + ('220421', '东丰县', 3, '220400'), + ('220422', '东辽县', 3, '220400'), + ('220500', '通化市', 2, '220000'), + ('220502', '东昌区', 3, '220500'), + ('220503', '二道江区', 3, '220500'), + ('220521', '通化县', 3, '220500'), + ('220523', '辉南县', 3, '220500'), + ('220524', '柳河县', 3, '220500'), + ('220581', '梅河口市', 3, '220500'), + ('220582', '集安市', 3, '220500'), + ('220600', '白山市', 2, '220000'), + ('220602', '浑江区', 3, '220600'), + ('220605', '江源区', 3, '220600'), + ('220621', '抚松县', 3, '220600'), + ('220622', '靖宇县', 3, '220600'), + ('220623', '长白朝鲜族自治县', 3, '220600'), + ('220681', '临江市', 3, '220600'), + ('220700', '松原市', 2, '220000'), + ('220702', '宁江区', 3, '220700'), + ('220721', '前郭尔罗斯蒙古族自治县', 3, '220700'), + ('220722', '长岭县', 3, '220700'), + ('220723', '乾安县', 3, '220700'), + ('220771', '吉林松原经济开发区', 3, '220700'), + ('220781', '扶余市', 3, '220700'), + ('220800', '白城市', 2, '220000'), + ('220802', '洮北区', 3, '220800'), + ('220821', '镇赉县', 3, '220800'), + ('220822', '通榆县', 3, '220800'), + ('220871', '吉林白城经济开发区', 3, '220800'), + ('220881', '洮南市', 3, '220800'), + ('220882', '大安市', 3, '220800'), + ('222400', '延边朝鲜族自治州', 2, '220000'), + ('222401', '延吉市', 3, '222400'), + ('222402', '图们市', 3, '222400'), + ('222403', '敦化市', 3, '222400'), + ('222404', '珲春市', 3, '222400'), + ('222405', '龙井市', 3, '222400'), + ('222406', '和龙市', 3, '222400'), + ('222424', '汪清县', 3, '222400'), + ('222426', '安图县', 3, '222400'), + ('230000', '黑龙江省', 1, NULL), + ('230100', '哈尔滨市', 2, '230000'), + ('230102', '道里区', 3, '230100'), + ('230103', '南岗区', 3, '230100'), + ('230104', '道外区', 3, '230100'), + ('230108', '平房区', 3, '230100'), + ('230109', '松北区', 3, '230100'), + ('230110', '香坊区', 3, '230100'), + ('230111', '呼兰区', 3, '230100'), + ('230112', '阿城区', 3, '230100'), + ('230113', '双城区', 3, '230100'), + ('230123', '依兰县', 3, '230100'), + ('230124', '方正县', 3, '230100'), + ('230125', '宾县', 3, '230100'), + ('230126', '巴彦县', 3, '230100'), + ('230127', '木兰县', 3, '230100'), + ('230128', '通河县', 3, '230100'), + ('230129', '延寿县', 3, '230100'), + ('230183', '尚志市', 3, '230100'), + ('230184', '五常市', 3, '230100'), + ('230200', '齐齐哈尔市', 2, '230000'), + ('230202', '龙沙区', 3, '230200'), + ('230203', '建华区', 3, '230200'), + ('230204', '铁锋区', 3, '230200'), + ('230205', '昂昂溪区', 3, '230200'), + ('230206', '富拉尔基区', 3, '230200'), + ('230207', '碾子山区', 3, '230200'), + ('230208', '梅里斯达斡尔族区', 3, '230200'), + ('230221', '龙江县', 3, '230200'), + ('230223', '依安县', 3, '230200'), + ('230224', '泰来县', 3, '230200'), + ('230225', '甘南县', 3, '230200'), + ('230227', '富裕县', 3, '230200'), + ('230229', '克山县', 3, '230200'), + ('230230', '克东县', 3, '230200'), + ('230231', '拜泉县', 3, '230200'), + ('230281', '讷河市', 3, '230200'), + ('230300', '鸡西市', 2, '230000'), + ('230302', '鸡冠区', 3, '230300'), + ('230303', '恒山区', 3, '230300'), + ('230304', '滴道区', 3, '230300'), + ('230305', '梨树区', 3, '230300'), + ('230306', '城子河区', 3, '230300'), + ('230307', '麻山区', 3, '230300'), + ('230321', '鸡东县', 3, '230300'), + ('230381', '虎林市', 3, '230300'), + ('230382', '密山市', 3, '230300'), + ('230400', '鹤岗市', 2, '230000'), + ('230402', '向阳区', 3, '230400'), + ('230403', '工农区', 3, '230400'), + ('230404', '南山区', 3, '230400'), + ('230405', '兴安区', 3, '230400'), + ('230406', '东山区', 3, '230400'), + ('230407', '兴山区', 3, '230400'), + ('230421', '萝北县', 3, '230400'), + ('230422', '绥滨县', 3, '230400'), + ('230500', '双鸭山市', 2, '230000'), + ('230502', '尖山区', 3, '230500'), + ('230503', '岭东区', 3, '230500'), + ('230505', '四方台区', 3, '230500'), + ('230506', '宝山区', 3, '230500'), + ('230521', '集贤县', 3, '230500'), + ('230522', '友谊县', 3, '230500'), + ('230523', '宝清县', 3, '230500'), + ('230524', '饶河县', 3, '230500'), + ('230600', '大庆市', 2, '230000'), + ('230602', '萨尔图区', 3, '230600'), + ('230603', '龙凤区', 3, '230600'), + ('230604', '让胡路区', 3, '230600'), + ('230605', '红岗区', 3, '230600'), + ('230606', '大同区', 3, '230600'), + ('230621', '肇州县', 3, '230600'), + ('230622', '肇源县', 3, '230600'), + ('230623', '林甸县', 3, '230600'), + ('230624', '杜尔伯特蒙古族自治县', 3, '230600'), + ('230671', '大庆高新技术产业开发区', 3, '230600'), + ('230700', '伊春市', 2, '230000'), + ('230717', '伊美区', 3, '230700'), + ('230718', '乌翠区', 3, '230700'), + ('230719', '友好区', 3, '230700'), + ('230722', '嘉荫县', 3, '230700'), + ('230723', '汤旺县', 3, '230700'), + ('230724', '丰林县', 3, '230700'), + ('230725', '大箐山县', 3, '230700'), + ('230726', '南岔县', 3, '230700'), + ('230751', '金林区', 3, '230700'), + ('230781', '铁力市', 3, '230700'), + ('230800', '佳木斯市', 2, '230000'), + ('230803', '向阳区', 3, '230800'), + ('230804', '前进区', 3, '230800'), + ('230805', '东风区', 3, '230800'), + ('230811', '郊区', 3, '230800'), + ('230822', '桦南县', 3, '230800'), + ('230826', '桦川县', 3, '230800'), + ('230828', '汤原县', 3, '230800'), + ('230881', '同江市', 3, '230800'), + ('230882', '富锦市', 3, '230800'), + ('230883', '抚远市', 3, '230800'), + ('230900', '七台河市', 2, '230000'), + ('230902', '新兴区', 3, '230900'), + ('230903', '桃山区', 3, '230900'), + ('230904', '茄子河区', 3, '230900'), + ('230921', '勃利县', 3, '230900'), + ('231000', '牡丹江市', 2, '230000'), + ('231002', '东安区', 3, '231000'), + ('231003', '阳明区', 3, '231000'), + ('231004', '爱民区', 3, '231000'), + ('231005', '西安区', 3, '231000'), + ('231025', '林口县', 3, '231000'), + ('231081', '绥芬河市', 3, '231000'), + ('231083', '海林市', 3, '231000'), + ('231084', '宁安市', 3, '231000'), + ('231085', '穆棱市', 3, '231000'), + ('231086', '东宁市', 3, '231000'), + ('231100', '黑河市', 2, '230000'), + ('231102', '爱辉区', 3, '231100'), + ('231123', '逊克县', 3, '231100'), + ('231124', '孙吴县', 3, '231100'), + ('231181', '北安市', 3, '231100'), + ('231182', '五大连池市', 3, '231100'), + ('231183', '嫩江市', 3, '231100'), + ('231200', '绥化市', 2, '230000'), + ('231202', '北林区', 3, '231200'), + ('231221', '望奎县', 3, '231200'), + ('231222', '兰西县', 3, '231200'), + ('231223', '青冈县', 3, '231200'), + ('231224', '庆安县', 3, '231200'), + ('231225', '明水县', 3, '231200'), + ('231226', '绥棱县', 3, '231200'), + ('231281', '安达市', 3, '231200'), + ('231282', '肇东市', 3, '231200'), + ('231283', '海伦市', 3, '231200'), + ('232700', '大兴安岭地区', 2, '230000'), + ('232701', '漠河市', 3, '232700'), + ('232721', '呼玛县', 3, '232700'), + ('232722', '塔河县', 3, '232700'), + ('232761', '加格达奇区', 3, '232700'), + ('232762', '松岭区', 3, '232700'), + ('232763', '新林区', 3, '232700'), + ('232764', '呼中区', 3, '232700'), + ('310000', '上海市', 1, NULL), + ('310100', '市辖区', 2, '310000'), + ('310101', '黄浦区', 3, '310100'), + ('310104', '徐汇区', 3, '310100'), + ('310105', '长宁区', 3, '310100'), + ('310106', '静安区', 3, '310100'), + ('310107', '普陀区', 3, '310100'), + ('310109', '虹口区', 3, '310100'), + ('310110', '杨浦区', 3, '310100'), + ('310112', '闵行区', 3, '310100'), + ('310113', '宝山区', 3, '310100'), + ('310114', '嘉定区', 3, '310100'), + ('310115', '浦东新区', 3, '310100'), + ('310116', '金山区', 3, '310100'), + ('310117', '松江区', 3, '310100'), + ('310118', '青浦区', 3, '310100'), + ('310120', '奉贤区', 3, '310100'), + ('310151', '崇明区', 3, '310100'), + ('320000', '江苏省', 1, NULL), + ('320100', '南京市', 2, '320000'), + ('320102', '玄武区', 3, '320100'), + ('320104', '秦淮区', 3, '320100'), + ('320105', '建邺区', 3, '320100'), + ('320106', '鼓楼区', 3, '320100'), + ('320111', '浦口区', 3, '320100'), + ('320113', '栖霞区', 3, '320100'), + ('320114', '雨花台区', 3, '320100'), + ('320115', '江宁区', 3, '320100'), + ('320116', '六合区', 3, '320100'), + ('320117', '溧水区', 3, '320100'), + ('320118', '高淳区', 3, '320100'), + ('320200', '无锡市', 2, '320000'), + ('320205', '锡山区', 3, '320200'), + ('320206', '惠山区', 3, '320200'), + ('320211', '滨湖区', 3, '320200'), + ('320213', '梁溪区', 3, '320200'), + ('320214', '新吴区', 3, '320200'), + ('320281', '江阴市', 3, '320200'), + ('320282', '宜兴市', 3, '320200'), + ('320300', '徐州市', 2, '320000'), + ('320302', '鼓楼区', 3, '320300'), + ('320303', '云龙区', 3, '320300'), + ('320305', '贾汪区', 3, '320300'), + ('320311', '泉山区', 3, '320300'), + ('320312', '铜山区', 3, '320300'), + ('320321', '丰县', 3, '320300'), + ('320322', '沛县', 3, '320300'), + ('320324', '睢宁县', 3, '320300'), + ('320371', '徐州经济技术开发区', 3, '320300'), + ('320381', '新沂市', 3, '320300'), + ('320382', '邳州市', 3, '320300'), + ('320400', '常州市', 2, '320000'), + ('320402', '天宁区', 3, '320400'), + ('320404', '钟楼区', 3, '320400'), + ('320411', '新北区', 3, '320400'), + ('320412', '武进区', 3, '320400'), + ('320413', '金坛区', 3, '320400'), + ('320481', '溧阳市', 3, '320400'), + ('320500', '苏州市', 2, '320000'), + ('320505', '虎丘区', 3, '320500'), + ('320506', '吴中区', 3, '320500'), + ('320507', '相城区', 3, '320500'), + ('320508', '姑苏区', 3, '320500'), + ('320509', '吴江区', 3, '320500'), + ('320576', '苏州工业园区', 3, '320500'), + ('320581', '常熟市', 3, '320500'), + ('320582', '张家港市', 3, '320500'), + ('320583', '昆山市', 3, '320500'), + ('320585', '太仓市', 3, '320500'), + ('320600', '南通市', 2, '320000'), + ('320612', '通州区', 3, '320600'), + ('320613', '崇川区', 3, '320600'), + ('320614', '海门区', 3, '320600'), + ('320623', '如东县', 3, '320600'), + ('320671', '南通经济技术开发区', 3, '320600'), + ('320681', '启东市', 3, '320600'), + ('320682', '如皋市', 3, '320600'), + ('320685', '海安市', 3, '320600'), + ('320700', '连云港市', 2, '320000'), + ('320703', '连云区', 3, '320700'), + ('320706', '海州区', 3, '320700'), + ('320707', '赣榆区', 3, '320700'), + ('320722', '东海县', 3, '320700'), + ('320723', '灌云县', 3, '320700'), + ('320724', '灌南县', 3, '320700'), + ('320771', '连云港经济技术开发区', 3, '320700'), + ('320800', '淮安市', 2, '320000'), + ('320803', '淮安区', 3, '320800'), + ('320804', '淮阴区', 3, '320800'), + ('320812', '清江浦区', 3, '320800'), + ('320813', '洪泽区', 3, '320800'), + ('320826', '涟水县', 3, '320800'), + ('320830', '盱眙县', 3, '320800'), + ('320831', '金湖县', 3, '320800'), + ('320871', '淮安经济技术开发区', 3, '320800'), + ('320900', '盐城市', 2, '320000'), + ('320902', '亭湖区', 3, '320900'), + ('320903', '盐都区', 3, '320900'), + ('320904', '大丰区', 3, '320900'), + ('320921', '响水县', 3, '320900'), + ('320922', '滨海县', 3, '320900'), + ('320923', '阜宁县', 3, '320900'), + ('320924', '射阳县', 3, '320900'), + ('320925', '建湖县', 3, '320900'), + ('320971', '盐城经济技术开发区', 3, '320900'), + ('320981', '东台市', 3, '320900'), + ('321000', '扬州市', 2, '320000'), + ('321002', '广陵区', 3, '321000'), + ('321003', '邗江区', 3, '321000'), + ('321012', '江都区', 3, '321000'), + ('321023', '宝应县', 3, '321000'), + ('321071', '扬州经济技术开发区', 3, '321000'), + ('321081', '仪征市', 3, '321000'), + ('321084', '高邮市', 3, '321000'), + ('321100', '镇江市', 2, '320000'), + ('321102', '京口区', 3, '321100'), + ('321111', '润州区', 3, '321100'), + ('321112', '丹徒区', 3, '321100'), + ('321171', '镇江新区', 3, '321100'), + ('321181', '丹阳市', 3, '321100'), + ('321182', '扬中市', 3, '321100'), + ('321183', '句容市', 3, '321100'), + ('321200', '泰州市', 2, '320000'), + ('321202', '海陵区', 3, '321200'), + ('321203', '高港区', 3, '321200'), + ('321204', '姜堰区', 3, '321200'), + ('321281', '兴化市', 3, '321200'), + ('321282', '靖江市', 3, '321200'), + ('321283', '泰兴市', 3, '321200'), + ('321300', '宿迁市', 2, '320000'), + ('321302', '宿城区', 3, '321300'), + ('321311', '宿豫区', 3, '321300'), + ('321322', '沭阳县', 3, '321300'), + ('321323', '泗阳县', 3, '321300'), + ('321324', '泗洪县', 3, '321300'), + ('321371', '宿迁经济技术开发区', 3, '321300'), + ('330000', '浙江省', 1, NULL), + ('330100', '杭州市', 2, '330000'), + ('330102', '上城区', 3, '330100'), + ('330105', '拱墅区', 3, '330100'), + ('330106', '西湖区', 3, '330100'), + ('330108', '滨江区', 3, '330100'), + ('330109', '萧山区', 3, '330100'), + ('330110', '余杭区', 3, '330100'), + ('330111', '富阳区', 3, '330100'), + ('330112', '临安区', 3, '330100'), + ('330113', '临平区', 3, '330100'), + ('330114', '钱塘区', 3, '330100'), + ('330122', '桐庐县', 3, '330100'), + ('330127', '淳安县', 3, '330100'), + ('330182', '建德市', 3, '330100'), + ('330200', '宁波市', 2, '330000'), + ('330203', '海曙区', 3, '330200'), + ('330205', '江北区', 3, '330200'), + ('330206', '北仑区', 3, '330200'), + ('330211', '镇海区', 3, '330200'), + ('330212', '鄞州区', 3, '330200'), + ('330213', '奉化区', 3, '330200'), + ('330225', '象山县', 3, '330200'), + ('330226', '宁海县', 3, '330200'), + ('330281', '余姚市', 3, '330200'), + ('330282', '慈溪市', 3, '330200'), + ('330300', '温州市', 2, '330000'), + ('330302', '鹿城区', 3, '330300'), + ('330303', '龙湾区', 3, '330300'), + ('330304', '瓯海区', 3, '330300'), + ('330305', '洞头区', 3, '330300'), + ('330324', '永嘉县', 3, '330300'), + ('330326', '平阳县', 3, '330300'), + ('330327', '苍南县', 3, '330300'), + ('330328', '文成县', 3, '330300'), + ('330329', '泰顺县', 3, '330300'), + ('330381', '瑞安市', 3, '330300'), + ('330382', '乐清市', 3, '330300'), + ('330383', '龙港市', 3, '330300'), + ('330400', '嘉兴市', 2, '330000'), + ('330402', '南湖区', 3, '330400'), + ('330411', '秀洲区', 3, '330400'), + ('330421', '嘉善县', 3, '330400'), + ('330424', '海盐县', 3, '330400'), + ('330481', '海宁市', 3, '330400'), + ('330482', '平湖市', 3, '330400'), + ('330483', '桐乡市', 3, '330400'), + ('330500', '湖州市', 2, '330000'), + ('330502', '吴兴区', 3, '330500'), + ('330503', '南浔区', 3, '330500'), + ('330521', '德清县', 3, '330500'), + ('330522', '长兴县', 3, '330500'), + ('330523', '安吉县', 3, '330500'), + ('330600', '绍兴市', 2, '330000'), + ('330602', '越城区', 3, '330600'), + ('330603', '柯桥区', 3, '330600'), + ('330604', '上虞区', 3, '330600'), + ('330624', '新昌县', 3, '330600'), + ('330681', '诸暨市', 3, '330600'), + ('330683', '嵊州市', 3, '330600'), + ('330700', '金华市', 2, '330000'), + ('330702', '婺城区', 3, '330700'), + ('330703', '金东区', 3, '330700'), + ('330723', '武义县', 3, '330700'), + ('330726', '浦江县', 3, '330700'), + ('330727', '磐安县', 3, '330700'), + ('330781', '兰溪市', 3, '330700'), + ('330782', '义乌市', 3, '330700'), + ('330783', '东阳市', 3, '330700'), + ('330784', '永康市', 3, '330700'), + ('330800', '衢州市', 2, '330000'), + ('330802', '柯城区', 3, '330800'), + ('330803', '衢江区', 3, '330800'), + ('330822', '常山县', 3, '330800'), + ('330824', '开化县', 3, '330800'), + ('330825', '龙游县', 3, '330800'), + ('330881', '江山市', 3, '330800'), + ('330900', '舟山市', 2, '330000'), + ('330902', '定海区', 3, '330900'), + ('330903', '普陀区', 3, '330900'), + ('330921', '岱山县', 3, '330900'), + ('330922', '嵊泗县', 3, '330900'), + ('331000', '台州市', 2, '330000'), + ('331002', '椒江区', 3, '331000'), + ('331003', '黄岩区', 3, '331000'), + ('331004', '路桥区', 3, '331000'), + ('331022', '三门县', 3, '331000'), + ('331023', '天台县', 3, '331000'), + ('331024', '仙居县', 3, '331000'), + ('331081', '温岭市', 3, '331000'), + ('331082', '临海市', 3, '331000'), + ('331083', '玉环市', 3, '331000'), + ('331100', '丽水市', 2, '330000'), + ('331102', '莲都区', 3, '331100'), + ('331121', '青田县', 3, '331100'), + ('331122', '缙云县', 3, '331100'), + ('331123', '遂昌县', 3, '331100'), + ('331124', '松阳县', 3, '331100'), + ('331125', '云和县', 3, '331100'), + ('331126', '庆元县', 3, '331100'), + ('331127', '景宁畲族自治县', 3, '331100'), + ('331181', '龙泉市', 3, '331100'), + ('340000', '安徽省', 1, NULL), + ('340100', '合肥市', 2, '340000'), + ('340102', '瑶海区', 3, '340100'), + ('340103', '庐阳区', 3, '340100'), + ('340104', '蜀山区', 3, '340100'), + ('340111', '包河区', 3, '340100'), + ('340121', '长丰县', 3, '340100'), + ('340122', '肥东县', 3, '340100'), + ('340123', '肥西县', 3, '340100'), + ('340124', '庐江县', 3, '340100'), + ('340176', '合肥高新技术产业开发区', 3, '340100'), + ('340177', '合肥经济技术开发区', 3, '340100'), + ('340178', '合肥新站高新技术产业开发区', 3, '340100'), + ('340181', '巢湖市', 3, '340100'), + ('340200', '芜湖市', 2, '340000'), + ('340202', '镜湖区', 3, '340200'), + ('340207', '鸠江区', 3, '340200'), + ('340209', '弋江区', 3, '340200'), + ('340210', '湾沚区', 3, '340200'), + ('340212', '繁昌区', 3, '340200'), + ('340223', '南陵县', 3, '340200'), + ('340271', '芜湖经济技术开发区', 3, '340200'), + ('340272', '安徽芜湖三山经济开发区', 3, '340200'), + ('340281', '无为市', 3, '340200'), + ('340300', '蚌埠市', 2, '340000'), + ('340302', '龙子湖区', 3, '340300'), + ('340303', '蚌山区', 3, '340300'), + ('340304', '禹会区', 3, '340300'), + ('340311', '淮上区', 3, '340300'), + ('340321', '怀远县', 3, '340300'), + ('340322', '五河县', 3, '340300'), + ('340323', '固镇县', 3, '340300'), + ('340371', '蚌埠市高新技术开发区', 3, '340300'), + ('340372', '蚌埠市经济开发区', 3, '340300'), + ('340400', '淮南市', 2, '340000'), + ('340402', '大通区', 3, '340400'), + ('340403', '田家庵区', 3, '340400'), + ('340404', '谢家集区', 3, '340400'), + ('340405', '八公山区', 3, '340400'), + ('340406', '潘集区', 3, '340400'), + ('340421', '凤台县', 3, '340400'), + ('340422', '寿县', 3, '340400'), + ('340500', '马鞍山市', 2, '340000'), + ('340503', '花山区', 3, '340500'), + ('340504', '雨山区', 3, '340500'), + ('340506', '博望区', 3, '340500'), + ('340521', '当涂县', 3, '340500'), + ('340522', '含山县', 3, '340500'), + ('340523', '和县', 3, '340500'), + ('340600', '淮北市', 2, '340000'), + ('340602', '杜集区', 3, '340600'), + ('340603', '相山区', 3, '340600'), + ('340604', '烈山区', 3, '340600'), + ('340621', '濉溪县', 3, '340600'), + ('340700', '铜陵市', 2, '340000'), + ('340705', '铜官区', 3, '340700'), + ('340706', '义安区', 3, '340700'), + ('340711', '郊区', 3, '340700'), + ('340722', '枞阳县', 3, '340700'), + ('340800', '安庆市', 2, '340000'), + ('340802', '迎江区', 3, '340800'), + ('340803', '大观区', 3, '340800'), + ('340811', '宜秀区', 3, '340800'), + ('340822', '怀宁县', 3, '340800'), + ('340825', '太湖县', 3, '340800'), + ('340826', '宿松县', 3, '340800'), + ('340827', '望江县', 3, '340800'), + ('340828', '岳西县', 3, '340800'), + ('340871', '安徽安庆经济开发区', 3, '340800'), + ('340881', '桐城市', 3, '340800'), + ('340882', '潜山市', 3, '340800'), + ('341000', '黄山市', 2, '340000'), + ('341002', '屯溪区', 3, '341000'), + ('341003', '黄山区', 3, '341000'), + ('341004', '徽州区', 3, '341000'), + ('341021', '歙县', 3, '341000'), + ('341022', '休宁县', 3, '341000'), + ('341023', '黟县', 3, '341000'), + ('341024', '祁门县', 3, '341000'), + ('341100', '滁州市', 2, '340000'), + ('341102', '琅琊区', 3, '341100'), + ('341103', '南谯区', 3, '341100'), + ('341122', '来安县', 3, '341100'), + ('341124', '全椒县', 3, '341100'), + ('341125', '定远县', 3, '341100'), + ('341126', '凤阳县', 3, '341100'), + ('341171', '中新苏滁高新技术产业开发区', 3, '341100'), + ('341172', '滁州经济技术开发区', 3, '341100'), + ('341181', '天长市', 3, '341100'), + ('341182', '明光市', 3, '341100'), + ('341200', '阜阳市', 2, '340000'), + ('341202', '颍州区', 3, '341200'), + ('341203', '颍东区', 3, '341200'), + ('341204', '颍泉区', 3, '341200'), + ('341221', '临泉县', 3, '341200'), + ('341222', '太和县', 3, '341200'), + ('341225', '阜南县', 3, '341200'), + ('341226', '颍上县', 3, '341200'), + ('341271', '阜阳合肥现代产业园区', 3, '341200'), + ('341272', '阜阳经济技术开发区', 3, '341200'), + ('341282', '界首市', 3, '341200'), + ('341300', '宿州市', 2, '340000'), + ('341302', '埇桥区', 3, '341300'), + ('341321', '砀山县', 3, '341300'), + ('341322', '萧县', 3, '341300'), + ('341323', '灵璧县', 3, '341300'), + ('341324', '泗县', 3, '341300'), + ('341371', '宿州马鞍山现代产业园区', 3, '341300'), + ('341372', '宿州经济技术开发区', 3, '341300'), + ('341500', '六安市', 2, '340000'), + ('341502', '金安区', 3, '341500'), + ('341503', '裕安区', 3, '341500'), + ('341504', '叶集区', 3, '341500'), + ('341522', '霍邱县', 3, '341500'), + ('341523', '舒城县', 3, '341500'), + ('341524', '金寨县', 3, '341500'), + ('341525', '霍山县', 3, '341500'), + ('341600', '亳州市', 2, '340000'), + ('341602', '谯城区', 3, '341600'), + ('341621', '涡阳县', 3, '341600'), + ('341622', '蒙城县', 3, '341600'), + ('341623', '利辛县', 3, '341600'), + ('341700', '池州市', 2, '340000'), + ('341702', '贵池区', 3, '341700'), + ('341721', '东至县', 3, '341700'), + ('341722', '石台县', 3, '341700'), + ('341723', '青阳县', 3, '341700'), + ('341800', '宣城市', 2, '340000'), + ('341802', '宣州区', 3, '341800'), + ('341821', '郎溪县', 3, '341800'), + ('341823', '泾县', 3, '341800'), + ('341824', '绩溪县', 3, '341800'), + ('341825', '旌德县', 3, '341800'), + ('341871', '宣城市经济开发区', 3, '341800'), + ('341881', '宁国市', 3, '341800'), + ('341882', '广德市', 3, '341800'), + ('350000', '福建省', 1, NULL), + ('350100', '福州市', 2, '350000'), + ('350102', '鼓楼区', 3, '350100'), + ('350103', '台江区', 3, '350100'), + ('350104', '仓山区', 3, '350100'), + ('350105', '马尾区', 3, '350100'), + ('350111', '晋安区', 3, '350100'), + ('350112', '长乐区', 3, '350100'), + ('350121', '闽侯县', 3, '350100'), + ('350122', '连江县', 3, '350100'), + ('350123', '罗源县', 3, '350100'), + ('350124', '闽清县', 3, '350100'), + ('350125', '永泰县', 3, '350100'), + ('350128', '平潭县', 3, '350100'), + ('350181', '福清市', 3, '350100'), + ('350200', '厦门市', 2, '350000'), + ('350203', '思明区', 3, '350200'), + ('350205', '海沧区', 3, '350200'), + ('350206', '湖里区', 3, '350200'), + ('350211', '集美区', 3, '350200'), + ('350212', '同安区', 3, '350200'), + ('350213', '翔安区', 3, '350200'), + ('350300', '莆田市', 2, '350000'), + ('350302', '城厢区', 3, '350300'), + ('350303', '涵江区', 3, '350300'), + ('350304', '荔城区', 3, '350300'), + ('350305', '秀屿区', 3, '350300'), + ('350322', '仙游县', 3, '350300'), + ('350400', '三明市', 2, '350000'), + ('350404', '三元区', 3, '350400'), + ('350405', '沙县区', 3, '350400'), + ('350421', '明溪县', 3, '350400'), + ('350423', '清流县', 3, '350400'), + ('350424', '宁化县', 3, '350400'), + ('350425', '大田县', 3, '350400'), + ('350426', '尤溪县', 3, '350400'), + ('350428', '将乐县', 3, '350400'), + ('350429', '泰宁县', 3, '350400'), + ('350430', '建宁县', 3, '350400'), + ('350481', '永安市', 3, '350400'), + ('350500', '泉州市', 2, '350000'), + ('350502', '鲤城区', 3, '350500'), + ('350503', '丰泽区', 3, '350500'), + ('350504', '洛江区', 3, '350500'), + ('350505', '泉港区', 3, '350500'), + ('350521', '惠安县', 3, '350500'), + ('350524', '安溪县', 3, '350500'), + ('350525', '永春县', 3, '350500'), + ('350526', '德化县', 3, '350500'), + ('350527', '金门县', 3, '350500'), + ('350581', '石狮市', 3, '350500'), + ('350582', '晋江市', 3, '350500'), + ('350583', '南安市', 3, '350500'), + ('350600', '漳州市', 2, '350000'), + ('350602', '芗城区', 3, '350600'), + ('350603', '龙文区', 3, '350600'), + ('350604', '龙海区', 3, '350600'), + ('350605', '长泰区', 3, '350600'), + ('350622', '云霄县', 3, '350600'), + ('350623', '漳浦县', 3, '350600'), + ('350624', '诏安县', 3, '350600'), + ('350626', '东山县', 3, '350600'), + ('350627', '南靖县', 3, '350600'), + ('350628', '平和县', 3, '350600'), + ('350629', '华安县', 3, '350600'), + ('350700', '南平市', 2, '350000'), + ('350702', '延平区', 3, '350700'), + ('350703', '建阳区', 3, '350700'), + ('350721', '顺昌县', 3, '350700'), + ('350722', '浦城县', 3, '350700'), + ('350723', '光泽县', 3, '350700'), + ('350724', '松溪县', 3, '350700'), + ('350725', '政和县', 3, '350700'), + ('350781', '邵武市', 3, '350700'), + ('350782', '武夷山市', 3, '350700'), + ('350783', '建瓯市', 3, '350700'), + ('350800', '龙岩市', 2, '350000'), + ('350802', '新罗区', 3, '350800'), + ('350803', '永定区', 3, '350800'), + ('350821', '长汀县', 3, '350800'), + ('350823', '上杭县', 3, '350800'), + ('350824', '武平县', 3, '350800'), + ('350825', '连城县', 3, '350800'), + ('350881', '漳平市', 3, '350800'), + ('350900', '宁德市', 2, '350000'), + ('350902', '蕉城区', 3, '350900'), + ('350921', '霞浦县', 3, '350900'), + ('350922', '古田县', 3, '350900'), + ('350923', '屏南县', 3, '350900'), + ('350924', '寿宁县', 3, '350900'), + ('350925', '周宁县', 3, '350900'), + ('350926', '柘荣县', 3, '350900'), + ('350981', '福安市', 3, '350900'), + ('350982', '福鼎市', 3, '350900'), + ('360000', '江西省', 1, NULL), + ('360100', '南昌市', 2, '360000'), + ('360102', '东湖区', 3, '360100'), + ('360103', '西湖区', 3, '360100'), + ('360104', '青云谱区', 3, '360100'), + ('360111', '青山湖区', 3, '360100'), + ('360112', '新建区', 3, '360100'), + ('360113', '红谷滩区', 3, '360100'), + ('360121', '南昌县', 3, '360100'), + ('360123', '安义县', 3, '360100'), + ('360124', '进贤县', 3, '360100'), + ('360200', '景德镇市', 2, '360000'), + ('360202', '昌江区', 3, '360200'), + ('360203', '珠山区', 3, '360200'), + ('360222', '浮梁县', 3, '360200'), + ('360281', '乐平市', 3, '360200'), + ('360300', '萍乡市', 2, '360000'), + ('360302', '安源区', 3, '360300'), + ('360313', '湘东区', 3, '360300'), + ('360321', '莲花县', 3, '360300'), + ('360322', '上栗县', 3, '360300'), + ('360323', '芦溪县', 3, '360300'), + ('360400', '九江市', 2, '360000'), + ('360402', '濂溪区', 3, '360400'), + ('360403', '浔阳区', 3, '360400'), + ('360404', '柴桑区', 3, '360400'), + ('360423', '武宁县', 3, '360400'), + ('360424', '修水县', 3, '360400'), + ('360425', '永修县', 3, '360400'), + ('360426', '德安县', 3, '360400'), + ('360428', '都昌县', 3, '360400'), + ('360429', '湖口县', 3, '360400'), + ('360430', '彭泽县', 3, '360400'), + ('360481', '瑞昌市', 3, '360400'), + ('360482', '共青城市', 3, '360400'), + ('360483', '庐山市', 3, '360400'), + ('360500', '新余市', 2, '360000'), + ('360502', '渝水区', 3, '360500'), + ('360521', '分宜县', 3, '360500'), + ('360600', '鹰潭市', 2, '360000'), + ('360602', '月湖区', 3, '360600'), + ('360603', '余江区', 3, '360600'), + ('360681', '贵溪市', 3, '360600'), + ('360700', '赣州市', 2, '360000'), + ('360702', '章贡区', 3, '360700'), + ('360703', '南康区', 3, '360700'), + ('360704', '赣县区', 3, '360700'), + ('360722', '信丰县', 3, '360700'), + ('360723', '大余县', 3, '360700'), + ('360724', '上犹县', 3, '360700'), + ('360725', '崇义县', 3, '360700'), + ('360726', '安远县', 3, '360700'), + ('360728', '定南县', 3, '360700'), + ('360729', '全南县', 3, '360700'), + ('360730', '宁都县', 3, '360700'), + ('360731', '于都县', 3, '360700'), + ('360732', '兴国县', 3, '360700'), + ('360733', '会昌县', 3, '360700'), + ('360734', '寻乌县', 3, '360700'), + ('360735', '石城县', 3, '360700'), + ('360781', '瑞金市', 3, '360700'), + ('360783', '龙南市', 3, '360700'), + ('360800', '吉安市', 2, '360000'), + ('360802', '吉州区', 3, '360800'), + ('360803', '青原区', 3, '360800'), + ('360821', '吉安县', 3, '360800'), + ('360822', '吉水县', 3, '360800'), + ('360823', '峡江县', 3, '360800'), + ('360824', '新干县', 3, '360800'), + ('360825', '永丰县', 3, '360800'), + ('360826', '泰和县', 3, '360800'), + ('360827', '遂川县', 3, '360800'), + ('360828', '万安县', 3, '360800'), + ('360829', '安福县', 3, '360800'), + ('360830', '永新县', 3, '360800'), + ('360881', '井冈山市', 3, '360800'), + ('360900', '宜春市', 2, '360000'), + ('360902', '袁州区', 3, '360900'), + ('360921', '奉新县', 3, '360900'), + ('360922', '万载县', 3, '360900'), + ('360923', '上高县', 3, '360900'), + ('360924', '宜丰县', 3, '360900'), + ('360925', '靖安县', 3, '360900'), + ('360926', '铜鼓县', 3, '360900'), + ('360981', '丰城市', 3, '360900'), + ('360982', '樟树市', 3, '360900'), + ('360983', '高安市', 3, '360900'), + ('361000', '抚州市', 2, '360000'), + ('361002', '临川区', 3, '361000'), + ('361003', '东乡区', 3, '361000'), + ('361021', '南城县', 3, '361000'), + ('361022', '黎川县', 3, '361000'), + ('361023', '南丰县', 3, '361000'), + ('361024', '崇仁县', 3, '361000'), + ('361025', '乐安县', 3, '361000'), + ('361026', '宜黄县', 3, '361000'), + ('361027', '金溪县', 3, '361000'), + ('361028', '资溪县', 3, '361000'), + ('361030', '广昌县', 3, '361000'), + ('361100', '上饶市', 2, '360000'), + ('361102', '信州区', 3, '361100'), + ('361103', '广丰区', 3, '361100'), + ('361104', '广信区', 3, '361100'), + ('361123', '玉山县', 3, '361100'), + ('361124', '铅山县', 3, '361100'), + ('361125', '横峰县', 3, '361100'), + ('361126', '弋阳县', 3, '361100'), + ('361127', '余干县', 3, '361100'), + ('361128', '鄱阳县', 3, '361100'), + ('361129', '万年县', 3, '361100'), + ('361130', '婺源县', 3, '361100'), + ('361181', '德兴市', 3, '361100'), + ('370000', '山东省', 1, NULL), + ('370100', '济南市', 2, '370000'), + ('370102', '历下区', 3, '370100'), + ('370103', '市中区', 3, '370100'), + ('370104', '槐荫区', 3, '370100'), + ('370105', '天桥区', 3, '370100'), + ('370112', '历城区', 3, '370100'), + ('370113', '长清区', 3, '370100'), + ('370114', '章丘区', 3, '370100'), + ('370115', '济阳区', 3, '370100'), + ('370116', '莱芜区', 3, '370100'), + ('370117', '钢城区', 3, '370100'), + ('370124', '平阴县', 3, '370100'), + ('370126', '商河县', 3, '370100'), + ('370176', '济南高新技术产业开发区', 3, '370100'), + ('370200', '青岛市', 2, '370000'), + ('370202', '市南区', 3, '370200'), + ('370203', '市北区', 3, '370200'), + ('370211', '黄岛区', 3, '370200'), + ('370212', '崂山区', 3, '370200'), + ('370213', '李沧区', 3, '370200'), + ('370214', '城阳区', 3, '370200'), + ('370215', '即墨区', 3, '370200'), + ('370281', '胶州市', 3, '370200'), + ('370283', '平度市', 3, '370200'), + ('370285', '莱西市', 3, '370200'), + ('370300', '淄博市', 2, '370000'), + ('370302', '淄川区', 3, '370300'), + ('370303', '张店区', 3, '370300'), + ('370304', '博山区', 3, '370300'), + ('370305', '临淄区', 3, '370300'), + ('370306', '周村区', 3, '370300'), + ('370321', '桓台县', 3, '370300'), + ('370322', '高青县', 3, '370300'), + ('370323', '沂源县', 3, '370300'), + ('370400', '枣庄市', 2, '370000'), + ('370402', '市中区', 3, '370400'), + ('370403', '薛城区', 3, '370400'), + ('370404', '峄城区', 3, '370400'), + ('370405', '台儿庄区', 3, '370400'), + ('370406', '山亭区', 3, '370400'), + ('370481', '滕州市', 3, '370400'), + ('370500', '东营市', 2, '370000'), + ('370502', '东营区', 3, '370500'), + ('370503', '河口区', 3, '370500'), + ('370505', '垦利区', 3, '370500'), + ('370522', '利津县', 3, '370500'), + ('370523', '广饶县', 3, '370500'), + ('370571', '东营经济技术开发区', 3, '370500'), + ('370572', '东营港经济开发区', 3, '370500'), + ('370600', '烟台市', 2, '370000'), + ('370602', '芝罘区', 3, '370600'), + ('370611', '福山区', 3, '370600'), + ('370612', '牟平区', 3, '370600'), + ('370613', '莱山区', 3, '370600'), + ('370614', '蓬莱区', 3, '370600'), + ('370671', '烟台高新技术产业开发区', 3, '370600'), + ('370676', '烟台经济技术开发区', 3, '370600'), + ('370681', '龙口市', 3, '370600'), + ('370682', '莱阳市', 3, '370600'), + ('370683', '莱州市', 3, '370600'), + ('370685', '招远市', 3, '370600'), + ('370686', '栖霞市', 3, '370600'), + ('370687', '海阳市', 3, '370600'), + ('370700', '潍坊市', 2, '370000'), + ('370702', '潍城区', 3, '370700'), + ('370703', '寒亭区', 3, '370700'), + ('370704', '坊子区', 3, '370700'), + ('370705', '奎文区', 3, '370700'), + ('370724', '临朐县', 3, '370700'), + ('370725', '昌乐县', 3, '370700'), + ('370772', '潍坊滨海经济技术开发区', 3, '370700'), + ('370781', '青州市', 3, '370700'), + ('370782', '诸城市', 3, '370700'), + ('370783', '寿光市', 3, '370700'), + ('370784', '安丘市', 3, '370700'), + ('370785', '高密市', 3, '370700'), + ('370786', '昌邑市', 3, '370700'), + ('370800', '济宁市', 2, '370000'), + ('370811', '任城区', 3, '370800'), + ('370812', '兖州区', 3, '370800'), + ('370826', '微山县', 3, '370800'), + ('370827', '鱼台县', 3, '370800'), + ('370828', '金乡县', 3, '370800'), + ('370829', '嘉祥县', 3, '370800'), + ('370830', '汶上县', 3, '370800'), + ('370831', '泗水县', 3, '370800'), + ('370832', '梁山县', 3, '370800'), + ('370871', '济宁高新技术产业开发区', 3, '370800'), + ('370881', '曲阜市', 3, '370800'), + ('370883', '邹城市', 3, '370800'), + ('370900', '泰安市', 2, '370000'), + ('370902', '泰山区', 3, '370900'), + ('370911', '岱岳区', 3, '370900'), + ('370921', '宁阳县', 3, '370900'), + ('370923', '东平县', 3, '370900'), + ('370982', '新泰市', 3, '370900'), + ('370983', '肥城市', 3, '370900'), + ('371000', '威海市', 2, '370000'), + ('371002', '环翠区', 3, '371000'), + ('371003', '文登区', 3, '371000'), + ('371071', '威海火炬高技术产业开发区', 3, '371000'), + ('371072', '威海经济技术开发区', 3, '371000'), + ('371073', '威海临港经济技术开发区', 3, '371000'), + ('371082', '荣成市', 3, '371000'), + ('371083', '乳山市', 3, '371000'), + ('371100', '日照市', 2, '370000'), + ('371102', '东港区', 3, '371100'), + ('371103', '岚山区', 3, '371100'), + ('371121', '五莲县', 3, '371100'), + ('371122', '莒县', 3, '371100'), + ('371171', '日照经济技术开发区', 3, '371100'), + ('371300', '临沂市', 2, '370000'), + ('371302', '兰山区', 3, '371300'), + ('371311', '罗庄区', 3, '371300'), + ('371312', '河东区', 3, '371300'), + ('371321', '沂南县', 3, '371300'), + ('371322', '郯城县', 3, '371300'), + ('371323', '沂水县', 3, '371300'), + ('371324', '兰陵县', 3, '371300'), + ('371325', '费县', 3, '371300'), + ('371326', '平邑县', 3, '371300'), + ('371327', '莒南县', 3, '371300'), + ('371328', '蒙阴县', 3, '371300'), + ('371329', '临沭县', 3, '371300'), + ('371371', '临沂高新技术产业开发区', 3, '371300'), + ('371400', '德州市', 2, '370000'), + ('371402', '德城区', 3, '371400'), + ('371403', '陵城区', 3, '371400'), + ('371422', '宁津县', 3, '371400'), + ('371423', '庆云县', 3, '371400'), + ('371424', '临邑县', 3, '371400'), + ('371425', '齐河县', 3, '371400'), + ('371426', '平原县', 3, '371400'), + ('371427', '夏津县', 3, '371400'), + ('371428', '武城县', 3, '371400'), + ('371471', '德州天衢新区', 3, '371400'), + ('371481', '乐陵市', 3, '371400'), + ('371482', '禹城市', 3, '371400'), + ('371500', '聊城市', 2, '370000'), + ('371502', '东昌府区', 3, '371500'), + ('371503', '茌平区', 3, '371500'), + ('371521', '阳谷县', 3, '371500'), + ('371522', '莘县', 3, '371500'), + ('371524', '东阿县', 3, '371500'), + ('371525', '冠县', 3, '371500'), + ('371526', '高唐县', 3, '371500'), + ('371581', '临清市', 3, '371500'), + ('371600', '滨州市', 2, '370000'), + ('371602', '滨城区', 3, '371600'), + ('371603', '沾化区', 3, '371600'), + ('371621', '惠民县', 3, '371600'), + ('371622', '阳信县', 3, '371600'), + ('371623', '无棣县', 3, '371600'), + ('371625', '博兴县', 3, '371600'), + ('371681', '邹平市', 3, '371600'), + ('371700', '菏泽市', 2, '370000'), + ('371702', '牡丹区', 3, '371700'), + ('371703', '定陶区', 3, '371700'), + ('371721', '曹县', 3, '371700'), + ('371722', '单县', 3, '371700'), + ('371723', '成武县', 3, '371700'), + ('371724', '巨野县', 3, '371700'), + ('371725', '郓城县', 3, '371700'), + ('371726', '鄄城县', 3, '371700'), + ('371728', '东明县', 3, '371700'), + ('371771', '菏泽经济技术开发区', 3, '371700'), + ('371772', '菏泽高新技术开发区', 3, '371700'), + ('410000', '河南省', 1, NULL), + ('410100', '郑州市', 2, '410000'), + ('410102', '中原区', 3, '410100'), + ('410103', '二七区', 3, '410100'), + ('410104', '管城回族区', 3, '410100'), + ('410105', '金水区', 3, '410100'), + ('410106', '上街区', 3, '410100'), + ('410108', '惠济区', 3, '410100'), + ('410122', '中牟县', 3, '410100'), + ('410171', '郑州经济技术开发区', 3, '410100'), + ('410172', '郑州高新技术产业开发区', 3, '410100'), + ('410173', '郑州航空港经济综合实验区', 3, '410100'), + ('410181', '巩义市', 3, '410100'), + ('410182', '荥阳市', 3, '410100'), + ('410183', '新密市', 3, '410100'), + ('410184', '新郑市', 3, '410100'), + ('410185', '登封市', 3, '410100'), + ('410200', '开封市', 2, '410000'), + ('410202', '龙亭区', 3, '410200'), + ('410203', '顺河回族区', 3, '410200'), + ('410204', '鼓楼区', 3, '410200'), + ('410205', '禹王台区', 3, '410200'), + ('410212', '祥符区', 3, '410200'), + ('410221', '杞县', 3, '410200'), + ('410222', '通许县', 3, '410200'), + ('410223', '尉氏县', 3, '410200'), + ('410225', '兰考县', 3, '410200'), + ('410300', '洛阳市', 2, '410000'), + ('410302', '老城区', 3, '410300'), + ('410303', '西工区', 3, '410300'), + ('410304', '瀍河回族区', 3, '410300'), + ('410305', '涧西区', 3, '410300'), + ('410307', '偃师区', 3, '410300'), + ('410308', '孟津区', 3, '410300'), + ('410311', '洛龙区', 3, '410300'), + ('410323', '新安县', 3, '410300'), + ('410324', '栾川县', 3, '410300'), + ('410325', '嵩县', 3, '410300'), + ('410326', '汝阳县', 3, '410300'), + ('410327', '宜阳县', 3, '410300'), + ('410328', '洛宁县', 3, '410300'), + ('410329', '伊川县', 3, '410300'), + ('410371', '洛阳高新技术产业开发区', 3, '410300'), + ('410400', '平顶山市', 2, '410000'), + ('410402', '新华区', 3, '410400'), + ('410403', '卫东区', 3, '410400'), + ('410404', '石龙区', 3, '410400'), + ('410411', '湛河区', 3, '410400'), + ('410421', '宝丰县', 3, '410400'), + ('410422', '叶县', 3, '410400'), + ('410423', '鲁山县', 3, '410400'), + ('410425', '郏县', 3, '410400'), + ('410471', '平顶山高新技术产业开发区', 3, '410400'), + ('410472', '平顶山市城乡一体化示范区', 3, '410400'), + ('410481', '舞钢市', 3, '410400'), + ('410482', '汝州市', 3, '410400'), + ('410500', '安阳市', 2, '410000'), + ('410502', '文峰区', 3, '410500'), + ('410503', '北关区', 3, '410500'), + ('410505', '殷都区', 3, '410500'), + ('410506', '龙安区', 3, '410500'), + ('410522', '安阳县', 3, '410500'), + ('410523', '汤阴县', 3, '410500'), + ('410526', '滑县', 3, '410500'), + ('410527', '内黄县', 3, '410500'), + ('410571', '安阳高新技术产业开发区', 3, '410500'), + ('410581', '林州市', 3, '410500'), + ('410600', '鹤壁市', 2, '410000'), + ('410602', '鹤山区', 3, '410600'), + ('410603', '山城区', 3, '410600'), + ('410611', '淇滨区', 3, '410600'), + ('410621', '浚县', 3, '410600'), + ('410622', '淇县', 3, '410600'), + ('410671', '鹤壁经济技术开发区', 3, '410600'), + ('410700', '新乡市', 2, '410000'), + ('410702', '红旗区', 3, '410700'), + ('410703', '卫滨区', 3, '410700'), + ('410704', '凤泉区', 3, '410700'), + ('410711', '牧野区', 3, '410700'), + ('410721', '新乡县', 3, '410700'), + ('410724', '获嘉县', 3, '410700'), + ('410725', '原阳县', 3, '410700'), + ('410726', '延津县', 3, '410700'), + ('410727', '封丘县', 3, '410700'), + ('410771', '新乡高新技术产业开发区', 3, '410700'), + ('410772', '新乡经济技术开发区', 3, '410700'), + ('410773', '新乡市平原城乡一体化示范区', 3, '410700'), + ('410781', '卫辉市', 3, '410700'), + ('410782', '辉县市', 3, '410700'), + ('410783', '长垣市', 3, '410700'), + ('410800', '焦作市', 2, '410000'), + ('410802', '解放区', 3, '410800'), + ('410803', '中站区', 3, '410800'), + ('410804', '马村区', 3, '410800'), + ('410811', '山阳区', 3, '410800'), + ('410821', '修武县', 3, '410800'), + ('410822', '博爱县', 3, '410800'), + ('410823', '武陟县', 3, '410800'), + ('410825', '温县', 3, '410800'), + ('410871', '焦作城乡一体化示范区', 3, '410800'), + ('410882', '沁阳市', 3, '410800'), + ('410883', '孟州市', 3, '410800'), + ('410900', '濮阳市', 2, '410000'), + ('410902', '华龙区', 3, '410900'), + ('410922', '清丰县', 3, '410900'), + ('410923', '南乐县', 3, '410900'), + ('410926', '范县', 3, '410900'), + ('410927', '台前县', 3, '410900'), + ('410928', '濮阳县', 3, '410900'), + ('410971', '河南濮阳工业园区', 3, '410900'), + ('410972', '濮阳经济技术开发区', 3, '410900'), + ('411000', '许昌市', 2, '410000'), + ('411002', '魏都区', 3, '411000'), + ('411003', '建安区', 3, '411000'), + ('411024', '鄢陵县', 3, '411000'), + ('411025', '襄城县', 3, '411000'), + ('411071', '许昌经济技术开发区', 3, '411000'), + ('411081', '禹州市', 3, '411000'), + ('411082', '长葛市', 3, '411000'), + ('411100', '漯河市', 2, '410000'), + ('411102', '源汇区', 3, '411100'), + ('411103', '郾城区', 3, '411100'), + ('411104', '召陵区', 3, '411100'), + ('411121', '舞阳县', 3, '411100'), + ('411122', '临颍县', 3, '411100'), + ('411171', '漯河经济技术开发区', 3, '411100'), + ('411200', '三门峡市', 2, '410000'), + ('411202', '湖滨区', 3, '411200'), + ('411203', '陕州区', 3, '411200'), + ('411221', '渑池县', 3, '411200'), + ('411224', '卢氏县', 3, '411200'), + ('411271', '河南三门峡经济开发区', 3, '411200'), + ('411281', '义马市', 3, '411200'), + ('411282', '灵宝市', 3, '411200'), + ('411300', '南阳市', 2, '410000'), + ('411302', '宛城区', 3, '411300'), + ('411303', '卧龙区', 3, '411300'), + ('411321', '南召县', 3, '411300'), + ('411322', '方城县', 3, '411300'), + ('411323', '西峡县', 3, '411300'), + ('411324', '镇平县', 3, '411300'), + ('411325', '内乡县', 3, '411300'), + ('411326', '淅川县', 3, '411300'), + ('411327', '社旗县', 3, '411300'), + ('411328', '唐河县', 3, '411300'), + ('411329', '新野县', 3, '411300'), + ('411330', '桐柏县', 3, '411300'), + ('411371', '南阳高新技术产业开发区', 3, '411300'), + ('411372', '南阳市城乡一体化示范区', 3, '411300'), + ('411381', '邓州市', 3, '411300'), + ('411400', '商丘市', 2, '410000'), + ('411402', '梁园区', 3, '411400'), + ('411403', '睢阳区', 3, '411400'), + ('411421', '民权县', 3, '411400'), + ('411422', '睢县', 3, '411400'), + ('411423', '宁陵县', 3, '411400'), + ('411424', '柘城县', 3, '411400'), + ('411425', '虞城县', 3, '411400'), + ('411426', '夏邑县', 3, '411400'), + ('411471', '豫东综合物流产业聚集区', 3, '411400'), + ('411472', '河南商丘经济开发区', 3, '411400'), + ('411481', '永城市', 3, '411400'), + ('411500', '信阳市', 2, '410000'), + ('411502', '浉河区', 3, '411500'), + ('411503', '平桥区', 3, '411500'), + ('411521', '罗山县', 3, '411500'), + ('411522', '光山县', 3, '411500'), + ('411523', '新县', 3, '411500'), + ('411524', '商城县', 3, '411500'), + ('411525', '固始县', 3, '411500'), + ('411526', '潢川县', 3, '411500'), + ('411527', '淮滨县', 3, '411500'), + ('411528', '息县', 3, '411500'), + ('411571', '信阳高新技术产业开发区', 3, '411500'), + ('411600', '周口市', 2, '410000'), + ('411602', '川汇区', 3, '411600'), + ('411603', '淮阳区', 3, '411600'), + ('411621', '扶沟县', 3, '411600'), + ('411622', '西华县', 3, '411600'), + ('411623', '商水县', 3, '411600'), + ('411624', '沈丘县', 3, '411600'), + ('411625', '郸城县', 3, '411600'), + ('411627', '太康县', 3, '411600'), + ('411628', '鹿邑县', 3, '411600'), + ('411671', '周口临港开发区', 3, '411600'), + ('411681', '项城市', 3, '411600'), + ('411700', '驻马店市', 2, '410000'), + ('411702', '驿城区', 3, '411700'), + ('411721', '西平县', 3, '411700'), + ('411722', '上蔡县', 3, '411700'), + ('411723', '平舆县', 3, '411700'), + ('411724', '正阳县', 3, '411700'), + ('411725', '确山县', 3, '411700'), + ('411726', '泌阳县', 3, '411700'), + ('411727', '汝南县', 3, '411700'), + ('411728', '遂平县', 3, '411700'), + ('411729', '新蔡县', 3, '411700'), + ('411771', '河南驻马店经济开发区', 3, '411700'), + ('419000', '省直辖县级行政区划', 2, '410000'), + ('419001', '济源市', 3, '419000'), + ('420000', '湖北省', 1, NULL), + ('420100', '武汉市', 2, '420000'), + ('420102', '江岸区', 3, '420100'), + ('420103', '江汉区', 3, '420100'), + ('420104', '硚口区', 3, '420100'), + ('420105', '汉阳区', 3, '420100'), + ('420106', '武昌区', 3, '420100'), + ('420107', '青山区', 3, '420100'), + ('420111', '洪山区', 3, '420100'), + ('420112', '东西湖区', 3, '420100'), + ('420113', '汉南区', 3, '420100'), + ('420114', '蔡甸区', 3, '420100'), + ('420115', '江夏区', 3, '420100'), + ('420116', '黄陂区', 3, '420100'), + ('420117', '新洲区', 3, '420100'), + ('420200', '黄石市', 2, '420000'), + ('420202', '黄石港区', 3, '420200'), + ('420203', '西塞山区', 3, '420200'), + ('420204', '下陆区', 3, '420200'), + ('420205', '铁山区', 3, '420200'), + ('420222', '阳新县', 3, '420200'), + ('420281', '大冶市', 3, '420200'), + ('420300', '十堰市', 2, '420000'), + ('420302', '茅箭区', 3, '420300'), + ('420303', '张湾区', 3, '420300'), + ('420304', '郧阳区', 3, '420300'), + ('420322', '郧西县', 3, '420300'), + ('420323', '竹山县', 3, '420300'), + ('420324', '竹溪县', 3, '420300'), + ('420325', '房县', 3, '420300'), + ('420381', '丹江口市', 3, '420300'), + ('420500', '宜昌市', 2, '420000'), + ('420502', '西陵区', 3, '420500'), + ('420503', '伍家岗区', 3, '420500'), + ('420504', '点军区', 3, '420500'), + ('420505', '猇亭区', 3, '420500'), + ('420506', '夷陵区', 3, '420500'), + ('420525', '远安县', 3, '420500'), + ('420526', '兴山县', 3, '420500'), + ('420527', '秭归县', 3, '420500'), + ('420528', '长阳土家族自治县', 3, '420500'), + ('420529', '五峰土家族自治县', 3, '420500'), + ('420581', '宜都市', 3, '420500'), + ('420582', '当阳市', 3, '420500'), + ('420583', '枝江市', 3, '420500'), + ('420600', '襄阳市', 2, '420000'), + ('420602', '襄城区', 3, '420600'), + ('420606', '樊城区', 3, '420600'), + ('420607', '襄州区', 3, '420600'), + ('420624', '南漳县', 3, '420600'), + ('420625', '谷城县', 3, '420600'), + ('420626', '保康县', 3, '420600'), + ('420682', '老河口市', 3, '420600'), + ('420683', '枣阳市', 3, '420600'), + ('420684', '宜城市', 3, '420600'), + ('420700', '鄂州市', 2, '420000'), + ('420702', '梁子湖区', 3, '420700'), + ('420703', '华容区', 3, '420700'), + ('420704', '鄂城区', 3, '420700'), + ('420800', '荆门市', 2, '420000'), + ('420802', '东宝区', 3, '420800'), + ('420804', '掇刀区', 3, '420800'), + ('420822', '沙洋县', 3, '420800'), + ('420881', '钟祥市', 3, '420800'), + ('420882', '京山市', 3, '420800'), + ('420900', '孝感市', 2, '420000'), + ('420902', '孝南区', 3, '420900'), + ('420921', '孝昌县', 3, '420900'), + ('420922', '大悟县', 3, '420900'), + ('420923', '云梦县', 3, '420900'), + ('420981', '应城市', 3, '420900'), + ('420982', '安陆市', 3, '420900'), + ('420984', '汉川市', 3, '420900'), + ('421000', '荆州市', 2, '420000'), + ('421002', '沙市区', 3, '421000'), + ('421003', '荆州区', 3, '421000'), + ('421022', '公安县', 3, '421000'), + ('421024', '江陵县', 3, '421000'), + ('421071', '荆州经济技术开发区', 3, '421000'), + ('421081', '石首市', 3, '421000'), + ('421083', '洪湖市', 3, '421000'), + ('421087', '松滋市', 3, '421000'), + ('421088', '监利市', 3, '421000'), + ('421100', '黄冈市', 2, '420000'), + ('421102', '黄州区', 3, '421100'), + ('421121', '团风县', 3, '421100'), + ('421122', '红安县', 3, '421100'), + ('421123', '罗田县', 3, '421100'), + ('421124', '英山县', 3, '421100'), + ('421125', '浠水县', 3, '421100'), + ('421126', '蕲春县', 3, '421100'), + ('421127', '黄梅县', 3, '421100'), + ('421171', '龙感湖管理区', 3, '421100'), + ('421181', '麻城市', 3, '421100'), + ('421182', '武穴市', 3, '421100'), + ('421200', '咸宁市', 2, '420000'), + ('421202', '咸安区', 3, '421200'), + ('421221', '嘉鱼县', 3, '421200'), + ('421222', '通城县', 3, '421200'), + ('421223', '崇阳县', 3, '421200'), + ('421224', '通山县', 3, '421200'), + ('421281', '赤壁市', 3, '421200'), + ('421300', '随州市', 2, '420000'), + ('421303', '曾都区', 3, '421300'), + ('421321', '随县', 3, '421300'), + ('421381', '广水市', 3, '421300'), + ('422800', '恩施土家族苗族自治州', 2, '420000'), + ('422801', '恩施市', 3, '422800'), + ('422802', '利川市', 3, '422800'), + ('422822', '建始县', 3, '422800'), + ('422823', '巴东县', 3, '422800'), + ('422825', '宣恩县', 3, '422800'), + ('422826', '咸丰县', 3, '422800'), + ('422827', '来凤县', 3, '422800'), + ('422828', '鹤峰县', 3, '422800'), + ('429000', '省直辖县级行政区划', 2, '420000'), + ('429004', '仙桃市', 3, '429000'), + ('429005', '潜江市', 3, '429000'), + ('429006', '天门市', 3, '429000'), + ('429021', '神农架林区', 3, '429000'), + ('430000', '湖南省', 1, NULL), + ('430100', '长沙市', 2, '430000'), + ('430102', '芙蓉区', 3, '430100'), + ('430103', '天心区', 3, '430100'), + ('430104', '岳麓区', 3, '430100'), + ('430105', '开福区', 3, '430100'), + ('430111', '雨花区', 3, '430100'), + ('430112', '望城区', 3, '430100'), + ('430121', '长沙县', 3, '430100'), + ('430181', '浏阳市', 3, '430100'), + ('430182', '宁乡市', 3, '430100'), + ('430200', '株洲市', 2, '430000'), + ('430202', '荷塘区', 3, '430200'), + ('430203', '芦淞区', 3, '430200'), + ('430204', '石峰区', 3, '430200'), + ('430211', '天元区', 3, '430200'), + ('430212', '渌口区', 3, '430200'), + ('430223', '攸县', 3, '430200'), + ('430224', '茶陵县', 3, '430200'), + ('430225', '炎陵县', 3, '430200'), + ('430281', '醴陵市', 3, '430200'), + ('430300', '湘潭市', 2, '430000'), + ('430302', '雨湖区', 3, '430300'), + ('430304', '岳塘区', 3, '430300'), + ('430321', '湘潭县', 3, '430300'), + ('430371', '湖南湘潭高新技术产业园区', 3, '430300'), + ('430372', '湘潭昭山示范区', 3, '430300'), + ('430373', '湘潭九华示范区', 3, '430300'), + ('430381', '湘乡市', 3, '430300'), + ('430382', '韶山市', 3, '430300'), + ('430400', '衡阳市', 2, '430000'), + ('430405', '珠晖区', 3, '430400'), + ('430406', '雁峰区', 3, '430400'), + ('430407', '石鼓区', 3, '430400'), + ('430408', '蒸湘区', 3, '430400'), + ('430412', '南岳区', 3, '430400'), + ('430421', '衡阳县', 3, '430400'), + ('430422', '衡南县', 3, '430400'), + ('430423', '衡山县', 3, '430400'), + ('430424', '衡东县', 3, '430400'), + ('430426', '祁东县', 3, '430400'), + ('430473', '湖南衡阳松木经济开发区', 3, '430400'), + ('430476', '湖南衡阳高新技术产业园区', 3, '430400'), + ('430481', '耒阳市', 3, '430400'), + ('430482', '常宁市', 3, '430400'), + ('430500', '邵阳市', 2, '430000'), + ('430502', '双清区', 3, '430500'), + ('430503', '大祥区', 3, '430500'), + ('430511', '北塔区', 3, '430500'), + ('430522', '新邵县', 3, '430500'), + ('430523', '邵阳县', 3, '430500'), + ('430524', '隆回县', 3, '430500'), + ('430525', '洞口县', 3, '430500'), + ('430527', '绥宁县', 3, '430500'), + ('430528', '新宁县', 3, '430500'), + ('430529', '城步苗族自治县', 3, '430500'), + ('430581', '武冈市', 3, '430500'), + ('430582', '邵东市', 3, '430500'), + ('430600', '岳阳市', 2, '430000'), + ('430602', '岳阳楼区', 3, '430600'), + ('430603', '云溪区', 3, '430600'), + ('430611', '君山区', 3, '430600'), + ('430621', '岳阳县', 3, '430600'), + ('430623', '华容县', 3, '430600'), + ('430624', '湘阴县', 3, '430600'), + ('430626', '平江县', 3, '430600'), + ('430671', '岳阳市屈原管理区', 3, '430600'), + ('430681', '汨罗市', 3, '430600'), + ('430682', '临湘市', 3, '430600'), + ('430700', '常德市', 2, '430000'), + ('430702', '武陵区', 3, '430700'), + ('430703', '鼎城区', 3, '430700'), + ('430721', '安乡县', 3, '430700'), + ('430722', '汉寿县', 3, '430700'), + ('430723', '澧县', 3, '430700'), + ('430724', '临澧县', 3, '430700'), + ('430725', '桃源县', 3, '430700'), + ('430726', '石门县', 3, '430700'), + ('430771', '常德市西洞庭管理区', 3, '430700'), + ('430781', '津市市', 3, '430700'), + ('430800', '张家界市', 2, '430000'), + ('430802', '永定区', 3, '430800'), + ('430811', '武陵源区', 3, '430800'), + ('430821', '慈利县', 3, '430800'), + ('430822', '桑植县', 3, '430800'), + ('430900', '益阳市', 2, '430000'), + ('430902', '资阳区', 3, '430900'), + ('430903', '赫山区', 3, '430900'), + ('430921', '南县', 3, '430900'), + ('430922', '桃江县', 3, '430900'), + ('430923', '安化县', 3, '430900'), + ('430971', '益阳市大通湖管理区', 3, '430900'), + ('430972', '湖南益阳高新技术产业园区', 3, '430900'), + ('430981', '沅江市', 3, '430900'), + ('431000', '郴州市', 2, '430000'), + ('431002', '北湖区', 3, '431000'), + ('431003', '苏仙区', 3, '431000'), + ('431021', '桂阳县', 3, '431000'), + ('431022', '宜章县', 3, '431000'), + ('431023', '永兴县', 3, '431000'), + ('431024', '嘉禾县', 3, '431000'), + ('431025', '临武县', 3, '431000'), + ('431026', '汝城县', 3, '431000'), + ('431027', '桂东县', 3, '431000'), + ('431028', '安仁县', 3, '431000'), + ('431081', '资兴市', 3, '431000'), + ('431100', '永州市', 2, '430000'), + ('431102', '零陵区', 3, '431100'), + ('431103', '冷水滩区', 3, '431100'), + ('431122', '东安县', 3, '431100'), + ('431123', '双牌县', 3, '431100'), + ('431124', '道县', 3, '431100'), + ('431125', '江永县', 3, '431100'), + ('431126', '宁远县', 3, '431100'), + ('431127', '蓝山县', 3, '431100'), + ('431128', '新田县', 3, '431100'), + ('431129', '江华瑶族自治县', 3, '431100'), + ('431171', '永州经济技术开发区', 3, '431100'), + ('431173', '永州市回龙圩管理区', 3, '431100'), + ('431181', '祁阳市', 3, '431100'), + ('431200', '怀化市', 2, '430000'), + ('431202', '鹤城区', 3, '431200'), + ('431221', '中方县', 3, '431200'), + ('431222', '沅陵县', 3, '431200'), + ('431223', '辰溪县', 3, '431200'), + ('431224', '溆浦县', 3, '431200'), + ('431225', '会同县', 3, '431200'), + ('431226', '麻阳苗族自治县', 3, '431200'), + ('431227', '新晃侗族自治县', 3, '431200'), + ('431228', '芷江侗族自治县', 3, '431200'), + ('431229', '靖州苗族侗族自治县', 3, '431200'), + ('431230', '通道侗族自治县', 3, '431200'), + ('431271', '怀化市洪江管理区', 3, '431200'), + ('431281', '洪江市', 3, '431200'), + ('431300', '娄底市', 2, '430000'), + ('431302', '娄星区', 3, '431300'), + ('431321', '双峰县', 3, '431300'), + ('431322', '新化县', 3, '431300'), + ('431381', '冷水江市', 3, '431300'), + ('431382', '涟源市', 3, '431300'), + ('433100', '湘西土家族苗族自治州', 2, '430000'), + ('433101', '吉首市', 3, '433100'), + ('433122', '泸溪县', 3, '433100'), + ('433123', '凤凰县', 3, '433100'), + ('433124', '花垣县', 3, '433100'), + ('433125', '保靖县', 3, '433100'), + ('433126', '古丈县', 3, '433100'), + ('433127', '永顺县', 3, '433100'), + ('433130', '龙山县', 3, '433100'), + ('440000', '广东省', 1, NULL), + ('440100', '广州市', 2, '440000'), + ('440103', '荔湾区', 3, '440100'), + ('440104', '越秀区', 3, '440100'), + ('440105', '海珠区', 3, '440100'), + ('440106', '天河区', 3, '440100'), + ('440111', '白云区', 3, '440100'), + ('440112', '黄埔区', 3, '440100'), + ('440113', '番禺区', 3, '440100'), + ('440114', '花都区', 3, '440100'), + ('440115', '南沙区', 3, '440100'), + ('440117', '从化区', 3, '440100'), + ('440118', '增城区', 3, '440100'), + ('440200', '韶关市', 2, '440000'), + ('440203', '武江区', 3, '440200'), + ('440204', '浈江区', 3, '440200'), + ('440205', '曲江区', 3, '440200'), + ('440222', '始兴县', 3, '440200'), + ('440224', '仁化县', 3, '440200'), + ('440229', '翁源县', 3, '440200'), + ('440232', '乳源瑶族自治县', 3, '440200'), + ('440233', '新丰县', 3, '440200'), + ('440281', '乐昌市', 3, '440200'), + ('440282', '南雄市', 3, '440200'), + ('440300', '深圳市', 2, '440000'), + ('440303', '罗湖区', 3, '440300'), + ('440304', '福田区', 3, '440300'), + ('440305', '南山区', 3, '440300'), + ('440306', '宝安区', 3, '440300'), + ('440307', '龙岗区', 3, '440300'), + ('440308', '盐田区', 3, '440300'), + ('440309', '龙华区', 3, '440300'), + ('440310', '坪山区', 3, '440300'), + ('440311', '光明区', 3, '440300'), + ('440400', '珠海市', 2, '440000'), + ('440402', '香洲区', 3, '440400'), + ('440403', '斗门区', 3, '440400'), + ('440404', '金湾区', 3, '440400'), + ('440500', '汕头市', 2, '440000'), + ('440507', '龙湖区', 3, '440500'), + ('440511', '金平区', 3, '440500'), + ('440512', '濠江区', 3, '440500'), + ('440513', '潮阳区', 3, '440500'), + ('440514', '潮南区', 3, '440500'), + ('440515', '澄海区', 3, '440500'), + ('440523', '南澳县', 3, '440500'), + ('440600', '佛山市', 2, '440000'), + ('440604', '禅城区', 3, '440600'), + ('440605', '南海区', 3, '440600'), + ('440606', '顺德区', 3, '440600'), + ('440607', '三水区', 3, '440600'), + ('440608', '高明区', 3, '440600'), + ('440700', '江门市', 2, '440000'), + ('440703', '蓬江区', 3, '440700'), + ('440704', '江海区', 3, '440700'), + ('440705', '新会区', 3, '440700'), + ('440781', '台山市', 3, '440700'), + ('440783', '开平市', 3, '440700'), + ('440784', '鹤山市', 3, '440700'), + ('440785', '恩平市', 3, '440700'), + ('440800', '湛江市', 2, '440000'), + ('440802', '赤坎区', 3, '440800'), + ('440803', '霞山区', 3, '440800'), + ('440804', '坡头区', 3, '440800'), + ('440811', '麻章区', 3, '440800'), + ('440823', '遂溪县', 3, '440800'), + ('440825', '徐闻县', 3, '440800'), + ('440881', '廉江市', 3, '440800'), + ('440882', '雷州市', 3, '440800'), + ('440883', '吴川市', 3, '440800'), + ('440900', '茂名市', 2, '440000'), + ('440902', '茂南区', 3, '440900'), + ('440904', '电白区', 3, '440900'), + ('440981', '高州市', 3, '440900'), + ('440982', '化州市', 3, '440900'), + ('440983', '信宜市', 3, '440900'), + ('441200', '肇庆市', 2, '440000'), + ('441202', '端州区', 3, '441200'), + ('441203', '鼎湖区', 3, '441200'), + ('441204', '高要区', 3, '441200'), + ('441223', '广宁县', 3, '441200'), + ('441224', '怀集县', 3, '441200'), + ('441225', '封开县', 3, '441200'), + ('441226', '德庆县', 3, '441200'), + ('441284', '四会市', 3, '441200'), + ('441300', '惠州市', 2, '440000'), + ('441302', '惠城区', 3, '441300'), + ('441303', '惠阳区', 3, '441300'), + ('441322', '博罗县', 3, '441300'), + ('441323', '惠东县', 3, '441300'), + ('441324', '龙门县', 3, '441300'), + ('441400', '梅州市', 2, '440000'), + ('441402', '梅江区', 3, '441400'), + ('441403', '梅县区', 3, '441400'), + ('441422', '大埔县', 3, '441400'), + ('441423', '丰顺县', 3, '441400'), + ('441424', '五华县', 3, '441400'), + ('441426', '平远县', 3, '441400'), + ('441427', '蕉岭县', 3, '441400'), + ('441481', '兴宁市', 3, '441400'), + ('441500', '汕尾市', 2, '440000'), + ('441502', '城区', 3, '441500'), + ('441521', '海丰县', 3, '441500'), + ('441523', '陆河县', 3, '441500'), + ('441581', '陆丰市', 3, '441500'), + ('441600', '河源市', 2, '440000'), + ('441602', '源城区', 3, '441600'), + ('441621', '紫金县', 3, '441600'), + ('441622', '龙川县', 3, '441600'), + ('441623', '连平县', 3, '441600'), + ('441624', '和平县', 3, '441600'), + ('441625', '东源县', 3, '441600'), + ('441700', '阳江市', 2, '440000'), + ('441702', '江城区', 3, '441700'), + ('441704', '阳东区', 3, '441700'), + ('441721', '阳西县', 3, '441700'), + ('441781', '阳春市', 3, '441700'), + ('441800', '清远市', 2, '440000'), + ('441802', '清城区', 3, '441800'), + ('441803', '清新区', 3, '441800'), + ('441821', '佛冈县', 3, '441800'), + ('441823', '阳山县', 3, '441800'), + ('441825', '连山壮族瑶族自治县', 3, '441800'), + ('441826', '连南瑶族自治县', 3, '441800'), + ('441881', '英德市', 3, '441800'), + ('441882', '连州市', 3, '441800'), + ('441900', '东莞市', 2, '440000'), + ('442000', '中山市', 2, '440000'), + ('445100', '潮州市', 2, '440000'), + ('445102', '湘桥区', 3, '445100'), + ('445103', '潮安区', 3, '445100'), + ('445122', '饶平县', 3, '445100'), + ('445200', '揭阳市', 2, '440000'), + ('445202', '榕城区', 3, '445200'), + ('445203', '揭东区', 3, '445200'), + ('445222', '揭西县', 3, '445200'), + ('445224', '惠来县', 3, '445200'), + ('445281', '普宁市', 3, '445200'), + ('445300', '云浮市', 2, '440000'), + ('445302', '云城区', 3, '445300'), + ('445303', '云安区', 3, '445300'), + ('445321', '新兴县', 3, '445300'), + ('445322', '郁南县', 3, '445300'), + ('445381', '罗定市', 3, '445300'), + ('450000', '广西壮族自治区', 1, NULL), + ('450100', '南宁市', 2, '450000'), + ('450102', '兴宁区', 3, '450100'), + ('450103', '青秀区', 3, '450100'), + ('450105', '江南区', 3, '450100'), + ('450107', '西乡塘区', 3, '450100'), + ('450108', '良庆区', 3, '450100'), + ('450109', '邕宁区', 3, '450100'), + ('450110', '武鸣区', 3, '450100'), + ('450123', '隆安县', 3, '450100'), + ('450124', '马山县', 3, '450100'), + ('450125', '上林县', 3, '450100'), + ('450126', '宾阳县', 3, '450100'), + ('450181', '横州市', 3, '450100'), + ('450200', '柳州市', 2, '450000'), + ('450202', '城中区', 3, '450200'), + ('450203', '鱼峰区', 3, '450200'), + ('450204', '柳南区', 3, '450200'), + ('450205', '柳北区', 3, '450200'), + ('450206', '柳江区', 3, '450200'), + ('450222', '柳城县', 3, '450200'), + ('450223', '鹿寨县', 3, '450200'), + ('450224', '融安县', 3, '450200'), + ('450225', '融水苗族自治县', 3, '450200'), + ('450226', '三江侗族自治县', 3, '450200'), + ('450300', '桂林市', 2, '450000'), + ('450302', '秀峰区', 3, '450300'), + ('450303', '叠彩区', 3, '450300'), + ('450304', '象山区', 3, '450300'), + ('450305', '七星区', 3, '450300'), + ('450311', '雁山区', 3, '450300'), + ('450312', '临桂区', 3, '450300'), + ('450321', '阳朔县', 3, '450300'), + ('450323', '灵川县', 3, '450300'), + ('450324', '全州县', 3, '450300'), + ('450325', '兴安县', 3, '450300'), + ('450326', '永福县', 3, '450300'), + ('450327', '灌阳县', 3, '450300'), + ('450328', '龙胜各族自治县', 3, '450300'), + ('450329', '资源县', 3, '450300'), + ('450330', '平乐县', 3, '450300'), + ('450332', '恭城瑶族自治县', 3, '450300'), + ('450381', '荔浦市', 3, '450300'), + ('450400', '梧州市', 2, '450000'), + ('450403', '万秀区', 3, '450400'), + ('450405', '长洲区', 3, '450400'), + ('450406', '龙圩区', 3, '450400'), + ('450421', '苍梧县', 3, '450400'), + ('450422', '藤县', 3, '450400'), + ('450423', '蒙山县', 3, '450400'), + ('450481', '岑溪市', 3, '450400'), + ('450500', '北海市', 2, '450000'), + ('450502', '海城区', 3, '450500'), + ('450503', '银海区', 3, '450500'), + ('450512', '铁山港区', 3, '450500'), + ('450521', '合浦县', 3, '450500'), + ('450600', '防城港市', 2, '450000'), + ('450602', '港口区', 3, '450600'), + ('450603', '防城区', 3, '450600'), + ('450621', '上思县', 3, '450600'), + ('450681', '东兴市', 3, '450600'), + ('450700', '钦州市', 2, '450000'), + ('450702', '钦南区', 3, '450700'), + ('450703', '钦北区', 3, '450700'), + ('450721', '灵山县', 3, '450700'), + ('450722', '浦北县', 3, '450700'), + ('450800', '贵港市', 2, '450000'), + ('450802', '港北区', 3, '450800'), + ('450803', '港南区', 3, '450800'), + ('450804', '覃塘区', 3, '450800'), + ('450821', '平南县', 3, '450800'), + ('450881', '桂平市', 3, '450800'), + ('450900', '玉林市', 2, '450000'), + ('450902', '玉州区', 3, '450900'), + ('450903', '福绵区', 3, '450900'), + ('450921', '容县', 3, '450900'), + ('450922', '陆川县', 3, '450900'), + ('450923', '博白县', 3, '450900'), + ('450924', '兴业县', 3, '450900'), + ('450981', '北流市', 3, '450900'), + ('451000', '百色市', 2, '450000'), + ('451002', '右江区', 3, '451000'), + ('451003', '田阳区', 3, '451000'), + ('451022', '田东县', 3, '451000'), + ('451024', '德保县', 3, '451000'), + ('451026', '那坡县', 3, '451000'), + ('451027', '凌云县', 3, '451000'), + ('451028', '乐业县', 3, '451000'), + ('451029', '田林县', 3, '451000'), + ('451030', '西林县', 3, '451000'), + ('451031', '隆林各族自治县', 3, '451000'), + ('451081', '靖西市', 3, '451000'), + ('451082', '平果市', 3, '451000'), + ('451100', '贺州市', 2, '450000'), + ('451102', '八步区', 3, '451100'), + ('451103', '平桂区', 3, '451100'), + ('451121', '昭平县', 3, '451100'), + ('451122', '钟山县', 3, '451100'), + ('451123', '富川瑶族自治县', 3, '451100'), + ('451200', '河池市', 2, '450000'), + ('451202', '金城江区', 3, '451200'), + ('451203', '宜州区', 3, '451200'), + ('451221', '南丹县', 3, '451200'), + ('451222', '天峨县', 3, '451200'), + ('451223', '凤山县', 3, '451200'), + ('451224', '东兰县', 3, '451200'), + ('451225', '罗城仫佬族自治县', 3, '451200'), + ('451226', '环江毛南族自治县', 3, '451200'), + ('451227', '巴马瑶族自治县', 3, '451200'), + ('451228', '都安瑶族自治县', 3, '451200'), + ('451229', '大化瑶族自治县', 3, '451200'), + ('451300', '来宾市', 2, '450000'), + ('451302', '兴宾区', 3, '451300'), + ('451321', '忻城县', 3, '451300'), + ('451322', '象州县', 3, '451300'), + ('451323', '武宣县', 3, '451300'), + ('451324', '金秀瑶族自治县', 3, '451300'), + ('451381', '合山市', 3, '451300'), + ('451400', '崇左市', 2, '450000'), + ('451402', '江州区', 3, '451400'), + ('451421', '扶绥县', 3, '451400'), + ('451422', '宁明县', 3, '451400'), + ('451423', '龙州县', 3, '451400'), + ('451424', '大新县', 3, '451400'), + ('451425', '天等县', 3, '451400'), + ('451481', '凭祥市', 3, '451400'), + ('460000', '海南省', 1, NULL), + ('460100', '海口市', 2, '460000'), + ('460105', '秀英区', 3, '460100'), + ('460106', '龙华区', 3, '460100'), + ('460107', '琼山区', 3, '460100'), + ('460108', '美兰区', 3, '460100'), + ('460200', '三亚市', 2, '460000'), + ('460202', '海棠区', 3, '460200'), + ('460203', '吉阳区', 3, '460200'), + ('460204', '天涯区', 3, '460200'), + ('460205', '崖州区', 3, '460200'), + ('460300', '三沙市', 2, '460000'), + ('460321', '西沙群岛', 3, '460300'), + ('460322', '南沙群岛', 3, '460300'), + ('460323', '中沙群岛的岛礁及其海域', 3, '460300'), + ('460400', '儋州市', 2, '460000'), + ('469000', '省直辖县级行政区划', 2, '460000'), + ('469001', '五指山市', 3, '469000'), + ('469002', '琼海市', 3, '469000'), + ('469005', '文昌市', 3, '469000'), + ('469006', '万宁市', 3, '469000'), + ('469007', '东方市', 3, '469000'), + ('469021', '定安县', 3, '469000'), + ('469022', '屯昌县', 3, '469000'), + ('469023', '澄迈县', 3, '469000'), + ('469024', '临高县', 3, '469000'), + ('469025', '白沙黎族自治县', 3, '469000'), + ('469026', '昌江黎族自治县', 3, '469000'), + ('469027', '乐东黎族自治县', 3, '469000'), + ('469028', '陵水黎族自治县', 3, '469000'), + ('469029', '保亭黎族苗族自治县', 3, '469000'), + ('469030', '琼中黎族苗族自治县', 3, '469000'), + ('500000', '重庆市', 1, NULL), + ('500100', '市辖区', 2, '500000'), + ('500101', '万州区', 3, '500100'), + ('500102', '涪陵区', 3, '500100'), + ('500103', '渝中区', 3, '500100'), + ('500104', '大渡口区', 3, '500100'), + ('500105', '江北区', 3, '500100'), + ('500106', '沙坪坝区', 3, '500100'), + ('500107', '九龙坡区', 3, '500100'), + ('500108', '南岸区', 3, '500100'), + ('500109', '北碚区', 3, '500100'), + ('500110', '綦江区', 3, '500100'), + ('500111', '大足区', 3, '500100'), + ('500112', '渝北区', 3, '500100'), + ('500113', '巴南区', 3, '500100'), + ('500114', '黔江区', 3, '500100'), + ('500115', '长寿区', 3, '500100'), + ('500116', '江津区', 3, '500100'), + ('500117', '合川区', 3, '500100'), + ('500118', '永川区', 3, '500100'), + ('500119', '南川区', 3, '500100'), + ('500120', '璧山区', 3, '500100'), + ('500151', '铜梁区', 3, '500100'), + ('500152', '潼南区', 3, '500100'), + ('500153', '荣昌区', 3, '500100'), + ('500154', '开州区', 3, '500100'), + ('500155', '梁平区', 3, '500100'), + ('500156', '武隆区', 3, '500100'), + ('500200', '县', 2, '500000'), + ('500229', '城口县', 3, '500200'), + ('500230', '丰都县', 3, '500200'), + ('500231', '垫江县', 3, '500200'), + ('500233', '忠县', 3, '500200'), + ('500235', '云阳县', 3, '500200'), + ('500236', '奉节县', 3, '500200'), + ('500237', '巫山县', 3, '500200'), + ('500238', '巫溪县', 3, '500200'), + ('500240', '石柱土家族自治县', 3, '500200'), + ('500241', '秀山土家族苗族自治县', 3, '500200'), + ('500242', '酉阳土家族苗族自治县', 3, '500200'), + ('500243', '彭水苗族土家族自治县', 3, '500200'), + ('510000', '四川省', 1, NULL), + ('510100', '成都市', 2, '510000'), + ('510104', '锦江区', 3, '510100'), + ('510105', '青羊区', 3, '510100'), + ('510106', '金牛区', 3, '510100'), + ('510107', '武侯区', 3, '510100'), + ('510108', '成华区', 3, '510100'), + ('510112', '龙泉驿区', 3, '510100'), + ('510113', '青白江区', 3, '510100'), + ('510114', '新都区', 3, '510100'), + ('510115', '温江区', 3, '510100'), + ('510116', '双流区', 3, '510100'), + ('510117', '郫都区', 3, '510100'), + ('510118', '新津区', 3, '510100'), + ('510121', '金堂县', 3, '510100'), + ('510129', '大邑县', 3, '510100'), + ('510131', '蒲江县', 3, '510100'), + ('510181', '都江堰市', 3, '510100'), + ('510182', '彭州市', 3, '510100'), + ('510183', '邛崃市', 3, '510100'), + ('510184', '崇州市', 3, '510100'), + ('510185', '简阳市', 3, '510100'), + ('510300', '自贡市', 2, '510000'), + ('510302', '自流井区', 3, '510300'), + ('510303', '贡井区', 3, '510300'), + ('510304', '大安区', 3, '510300'), + ('510311', '沿滩区', 3, '510300'), + ('510321', '荣县', 3, '510300'), + ('510322', '富顺县', 3, '510300'), + ('510400', '攀枝花市', 2, '510000'), + ('510402', '东区', 3, '510400'), + ('510403', '西区', 3, '510400'), + ('510411', '仁和区', 3, '510400'), + ('510421', '米易县', 3, '510400'), + ('510422', '盐边县', 3, '510400'), + ('510500', '泸州市', 2, '510000'), + ('510502', '江阳区', 3, '510500'), + ('510503', '纳溪区', 3, '510500'), + ('510504', '龙马潭区', 3, '510500'), + ('510521', '泸县', 3, '510500'), + ('510522', '合江县', 3, '510500'), + ('510524', '叙永县', 3, '510500'), + ('510525', '古蔺县', 3, '510500'), + ('510600', '德阳市', 2, '510000'), + ('510603', '旌阳区', 3, '510600'), + ('510604', '罗江区', 3, '510600'), + ('510623', '中江县', 3, '510600'), + ('510681', '广汉市', 3, '510600'), + ('510682', '什邡市', 3, '510600'), + ('510683', '绵竹市', 3, '510600'), + ('510700', '绵阳市', 2, '510000'), + ('510703', '涪城区', 3, '510700'), + ('510704', '游仙区', 3, '510700'), + ('510705', '安州区', 3, '510700'), + ('510722', '三台县', 3, '510700'), + ('510723', '盐亭县', 3, '510700'), + ('510725', '梓潼县', 3, '510700'), + ('510726', '北川羌族自治县', 3, '510700'), + ('510727', '平武县', 3, '510700'), + ('510781', '江油市', 3, '510700'), + ('510800', '广元市', 2, '510000'), + ('510802', '利州区', 3, '510800'), + ('510811', '昭化区', 3, '510800'), + ('510812', '朝天区', 3, '510800'), + ('510821', '旺苍县', 3, '510800'), + ('510822', '青川县', 3, '510800'), + ('510823', '剑阁县', 3, '510800'), + ('510824', '苍溪县', 3, '510800'), + ('510900', '遂宁市', 2, '510000'), + ('510903', '船山区', 3, '510900'), + ('510904', '安居区', 3, '510900'), + ('510921', '蓬溪县', 3, '510900'), + ('510923', '大英县', 3, '510900'), + ('510981', '射洪市', 3, '510900'), + ('511000', '内江市', 2, '510000'), + ('511002', '市中区', 3, '511000'), + ('511011', '东兴区', 3, '511000'), + ('511024', '威远县', 3, '511000'), + ('511025', '资中县', 3, '511000'), + ('511083', '隆昌市', 3, '511000'), + ('511100', '乐山市', 2, '510000'), + ('511102', '市中区', 3, '511100'), + ('511111', '沙湾区', 3, '511100'), + ('511112', '五通桥区', 3, '511100'), + ('511113', '金口河区', 3, '511100'), + ('511123', '犍为县', 3, '511100'), + ('511124', '井研县', 3, '511100'), + ('511126', '夹江县', 3, '511100'), + ('511129', '沐川县', 3, '511100'), + ('511132', '峨边彝族自治县', 3, '511100'), + ('511133', '马边彝族自治县', 3, '511100'), + ('511181', '峨眉山市', 3, '511100'), + ('511300', '南充市', 2, '510000'), + ('511302', '顺庆区', 3, '511300'), + ('511303', '高坪区', 3, '511300'), + ('511304', '嘉陵区', 3, '511300'), + ('511321', '南部县', 3, '511300'), + ('511322', '营山县', 3, '511300'), + ('511323', '蓬安县', 3, '511300'), + ('511324', '仪陇县', 3, '511300'), + ('511325', '西充县', 3, '511300'), + ('511381', '阆中市', 3, '511300'), + ('511400', '眉山市', 2, '510000'), + ('511402', '东坡区', 3, '511400'), + ('511403', '彭山区', 3, '511400'), + ('511421', '仁寿县', 3, '511400'), + ('511423', '洪雅县', 3, '511400'), + ('511424', '丹棱县', 3, '511400'), + ('511425', '青神县', 3, '511400'), + ('511500', '宜宾市', 2, '510000'), + ('511502', '翠屏区', 3, '511500'), + ('511503', '南溪区', 3, '511500'), + ('511504', '叙州区', 3, '511500'), + ('511523', '江安县', 3, '511500'), + ('511524', '长宁县', 3, '511500'), + ('511525', '高县', 3, '511500'), + ('511526', '珙县', 3, '511500'), + ('511527', '筠连县', 3, '511500'), + ('511528', '兴文县', 3, '511500'), + ('511529', '屏山县', 3, '511500'), + ('511600', '广安市', 2, '510000'), + ('511602', '广安区', 3, '511600'), + ('511603', '前锋区', 3, '511600'), + ('511621', '岳池县', 3, '511600'), + ('511622', '武胜县', 3, '511600'), + ('511623', '邻水县', 3, '511600'), + ('511681', '华蓥市', 3, '511600'), + ('511700', '达州市', 2, '510000'), + ('511702', '通川区', 3, '511700'), + ('511703', '达川区', 3, '511700'), + ('511722', '宣汉县', 3, '511700'), + ('511723', '开江县', 3, '511700'), + ('511724', '大竹县', 3, '511700'), + ('511725', '渠县', 3, '511700'), + ('511781', '万源市', 3, '511700'), + ('511800', '雅安市', 2, '510000'), + ('511802', '雨城区', 3, '511800'), + ('511803', '名山区', 3, '511800'), + ('511822', '荥经县', 3, '511800'), + ('511823', '汉源县', 3, '511800'), + ('511824', '石棉县', 3, '511800'), + ('511825', '天全县', 3, '511800'), + ('511826', '芦山县', 3, '511800'), + ('511827', '宝兴县', 3, '511800'), + ('511900', '巴中市', 2, '510000'), + ('511902', '巴州区', 3, '511900'), + ('511903', '恩阳区', 3, '511900'), + ('511921', '通江县', 3, '511900'), + ('511922', '南江县', 3, '511900'), + ('511923', '平昌县', 3, '511900'), + ('512000', '资阳市', 2, '510000'), + ('512002', '雁江区', 3, '512000'), + ('512021', '安岳县', 3, '512000'), + ('512022', '乐至县', 3, '512000'), + ('513200', '阿坝藏族羌族自治州', 2, '510000'), + ('513201', '马尔康市', 3, '513200'), + ('513221', '汶川县', 3, '513200'), + ('513222', '理县', 3, '513200'), + ('513223', '茂县', 3, '513200'), + ('513224', '松潘县', 3, '513200'), + ('513225', '九寨沟县', 3, '513200'), + ('513226', '金川县', 3, '513200'), + ('513227', '小金县', 3, '513200'), + ('513228', '黑水县', 3, '513200'), + ('513230', '壤塘县', 3, '513200'), + ('513231', '阿坝县', 3, '513200'), + ('513232', '若尔盖县', 3, '513200'), + ('513233', '红原县', 3, '513200'), + ('513300', '甘孜藏族自治州', 2, '510000'), + ('513301', '康定市', 3, '513300'), + ('513322', '泸定县', 3, '513300'), + ('513323', '丹巴县', 3, '513300'), + ('513324', '九龙县', 3, '513300'), + ('513325', '雅江县', 3, '513300'), + ('513326', '道孚县', 3, '513300'), + ('513327', '炉霍县', 3, '513300'), + ('513328', '甘孜县', 3, '513300'), + ('513329', '新龙县', 3, '513300'), + ('513330', '德格县', 3, '513300'), + ('513331', '白玉县', 3, '513300'), + ('513332', '石渠县', 3, '513300'), + ('513333', '色达县', 3, '513300'), + ('513334', '理塘县', 3, '513300'), + ('513335', '巴塘县', 3, '513300'), + ('513336', '乡城县', 3, '513300'), + ('513337', '稻城县', 3, '513300'), + ('513338', '得荣县', 3, '513300'), + ('513400', '凉山彝族自治州', 2, '510000'), + ('513401', '西昌市', 3, '513400'), + ('513402', '会理市', 3, '513400'), + ('513422', '木里藏族自治县', 3, '513400'), + ('513423', '盐源县', 3, '513400'), + ('513424', '德昌县', 3, '513400'), + ('513426', '会东县', 3, '513400'), + ('513427', '宁南县', 3, '513400'), + ('513428', '普格县', 3, '513400'), + ('513429', '布拖县', 3, '513400'), + ('513430', '金阳县', 3, '513400'), + ('513431', '昭觉县', 3, '513400'), + ('513432', '喜德县', 3, '513400'), + ('513433', '冕宁县', 3, '513400'), + ('513434', '越西县', 3, '513400'), + ('513435', '甘洛县', 3, '513400'), + ('513436', '美姑县', 3, '513400'), + ('513437', '雷波县', 3, '513400'), + ('520000', '贵州省', 1, NULL), + ('520100', '贵阳市', 2, '520000'), + ('520102', '南明区', 3, '520100'), + ('520103', '云岩区', 3, '520100'), + ('520111', '花溪区', 3, '520100'), + ('520112', '乌当区', 3, '520100'), + ('520113', '白云区', 3, '520100'), + ('520115', '观山湖区', 3, '520100'), + ('520121', '开阳县', 3, '520100'), + ('520122', '息烽县', 3, '520100'), + ('520123', '修文县', 3, '520100'), + ('520181', '清镇市', 3, '520100'), + ('520200', '六盘水市', 2, '520000'), + ('520201', '钟山区', 3, '520200'), + ('520203', '六枝特区', 3, '520200'), + ('520204', '水城区', 3, '520200'), + ('520281', '盘州市', 3, '520200'), + ('520300', '遵义市', 2, '520000'), + ('520302', '红花岗区', 3, '520300'), + ('520303', '汇川区', 3, '520300'), + ('520304', '播州区', 3, '520300'), + ('520322', '桐梓县', 3, '520300'), + ('520323', '绥阳县', 3, '520300'), + ('520324', '正安县', 3, '520300'), + ('520325', '道真仡佬族苗族自治县', 3, '520300'), + ('520326', '务川仡佬族苗族自治县', 3, '520300'), + ('520327', '凤冈县', 3, '520300'), + ('520328', '湄潭县', 3, '520300'), + ('520329', '余庆县', 3, '520300'), + ('520330', '习水县', 3, '520300'), + ('520381', '赤水市', 3, '520300'), + ('520382', '仁怀市', 3, '520300'), + ('520400', '安顺市', 2, '520000'), + ('520402', '西秀区', 3, '520400'), + ('520403', '平坝区', 3, '520400'), + ('520422', '普定县', 3, '520400'), + ('520423', '镇宁布依族苗族自治县', 3, '520400'), + ('520424', '关岭布依族苗族自治县', 3, '520400'), + ('520425', '紫云苗族布依族自治县', 3, '520400'), + ('520500', '毕节市', 2, '520000'), + ('520502', '七星关区', 3, '520500'), + ('520521', '大方县', 3, '520500'), + ('520523', '金沙县', 3, '520500'), + ('520524', '织金县', 3, '520500'), + ('520525', '纳雍县', 3, '520500'), + ('520526', '威宁彝族回族苗族自治县', 3, '520500'), + ('520527', '赫章县', 3, '520500'), + ('520581', '黔西市', 3, '520500'), + ('520600', '铜仁市', 2, '520000'), + ('520602', '碧江区', 3, '520600'), + ('520603', '万山区', 3, '520600'), + ('520621', '江口县', 3, '520600'), + ('520622', '玉屏侗族自治县', 3, '520600'), + ('520623', '石阡县', 3, '520600'), + ('520624', '思南县', 3, '520600'), + ('520625', '印江土家族苗族自治县', 3, '520600'), + ('520626', '德江县', 3, '520600'), + ('520627', '沿河土家族自治县', 3, '520600'), + ('520628', '松桃苗族自治县', 3, '520600'), + ('522300', '黔西南布依族苗族自治州', 2, '520000'), + ('522301', '兴义市', 3, '522300'), + ('522302', '兴仁市', 3, '522300'), + ('522323', '普安县', 3, '522300'), + ('522324', '晴隆县', 3, '522300'), + ('522325', '贞丰县', 3, '522300'), + ('522326', '望谟县', 3, '522300'), + ('522327', '册亨县', 3, '522300'), + ('522328', '安龙县', 3, '522300'), + ('522600', '黔东南苗族侗族自治州', 2, '520000'), + ('522601', '凯里市', 3, '522600'), + ('522622', '黄平县', 3, '522600'), + ('522623', '施秉县', 3, '522600'), + ('522624', '三穗县', 3, '522600'), + ('522625', '镇远县', 3, '522600'), + ('522626', '岑巩县', 3, '522600'), + ('522627', '天柱县', 3, '522600'), + ('522628', '锦屏县', 3, '522600'), + ('522629', '剑河县', 3, '522600'), + ('522630', '台江县', 3, '522600'), + ('522631', '黎平县', 3, '522600'), + ('522632', '榕江县', 3, '522600'), + ('522633', '从江县', 3, '522600'), + ('522634', '雷山县', 3, '522600'), + ('522635', '麻江县', 3, '522600'), + ('522636', '丹寨县', 3, '522600'), + ('522700', '黔南布依族苗族自治州', 2, '520000'), + ('522701', '都匀市', 3, '522700'), + ('522702', '福泉市', 3, '522700'), + ('522722', '荔波县', 3, '522700'), + ('522723', '贵定县', 3, '522700'), + ('522725', '瓮安县', 3, '522700'), + ('522726', '独山县', 3, '522700'), + ('522727', '平塘县', 3, '522700'), + ('522728', '罗甸县', 3, '522700'), + ('522729', '长顺县', 3, '522700'), + ('522730', '龙里县', 3, '522700'), + ('522731', '惠水县', 3, '522700'), + ('522732', '三都水族自治县', 3, '522700'), + ('530000', '云南省', 1, NULL), + ('530100', '昆明市', 2, '530000'), + ('530102', '五华区', 3, '530100'), + ('530103', '盘龙区', 3, '530100'), + ('530111', '官渡区', 3, '530100'), + ('530112', '西山区', 3, '530100'), + ('530113', '东川区', 3, '530100'), + ('530114', '呈贡区', 3, '530100'), + ('530115', '晋宁区', 3, '530100'), + ('530124', '富民县', 3, '530100'), + ('530125', '宜良县', 3, '530100'), + ('530126', '石林彝族自治县', 3, '530100'), + ('530127', '嵩明县', 3, '530100'), + ('530128', '禄劝彝族苗族自治县', 3, '530100'), + ('530129', '寻甸回族彝族自治县', 3, '530100'), + ('530181', '安宁市', 3, '530100'), + ('530300', '曲靖市', 2, '530000'), + ('530302', '麒麟区', 3, '530300'), + ('530303', '沾益区', 3, '530300'), + ('530304', '马龙区', 3, '530300'), + ('530322', '陆良县', 3, '530300'), + ('530323', '师宗县', 3, '530300'), + ('530324', '罗平县', 3, '530300'), + ('530325', '富源县', 3, '530300'), + ('530326', '会泽县', 3, '530300'), + ('530381', '宣威市', 3, '530300'), + ('530400', '玉溪市', 2, '530000'), + ('530402', '红塔区', 3, '530400'), + ('530403', '江川区', 3, '530400'), + ('530423', '通海县', 3, '530400'), + ('530424', '华宁县', 3, '530400'), + ('530425', '易门县', 3, '530400'), + ('530426', '峨山彝族自治县', 3, '530400'), + ('530427', '新平彝族傣族自治县', 3, '530400'), + ('530428', '元江哈尼族彝族傣族自治县', 3, '530400'), + ('530481', '澄江市', 3, '530400'), + ('530500', '保山市', 2, '530000'), + ('530502', '隆阳区', 3, '530500'), + ('530521', '施甸县', 3, '530500'), + ('530523', '龙陵县', 3, '530500'), + ('530524', '昌宁县', 3, '530500'), + ('530581', '腾冲市', 3, '530500'), + ('530600', '昭通市', 2, '530000'), + ('530602', '昭阳区', 3, '530600'), + ('530621', '鲁甸县', 3, '530600'), + ('530622', '巧家县', 3, '530600'), + ('530623', '盐津县', 3, '530600'), + ('530624', '大关县', 3, '530600'), + ('530625', '永善县', 3, '530600'), + ('530626', '绥江县', 3, '530600'), + ('530627', '镇雄县', 3, '530600'), + ('530628', '彝良县', 3, '530600'), + ('530629', '威信县', 3, '530600'), + ('530681', '水富市', 3, '530600'), + ('530700', '丽江市', 2, '530000'), + ('530702', '古城区', 3, '530700'), + ('530721', '玉龙纳西族自治县', 3, '530700'), + ('530722', '永胜县', 3, '530700'), + ('530723', '华坪县', 3, '530700'), + ('530724', '宁蒗彝族自治县', 3, '530700'), + ('530800', '普洱市', 2, '530000'), + ('530802', '思茅区', 3, '530800'), + ('530821', '宁洱哈尼族彝族自治县', 3, '530800'), + ('530822', '墨江哈尼族自治县', 3, '530800'), + ('530823', '景东彝族自治县', 3, '530800'), + ('530824', '景谷傣族彝族自治县', 3, '530800'), + ('530825', '镇沅彝族哈尼族拉祜族自治县', 3, '530800'), + ('530826', '江城哈尼族彝族自治县', 3, '530800'), + ('530827', '孟连傣族拉祜族佤族自治县', 3, '530800'), + ('530828', '澜沧拉祜族自治县', 3, '530800'), + ('530829', '西盟佤族自治县', 3, '530800'), + ('530900', '临沧市', 2, '530000'), + ('530902', '临翔区', 3, '530900'), + ('530921', '凤庆县', 3, '530900'), + ('530922', '云县', 3, '530900'), + ('530923', '永德县', 3, '530900'), + ('530924', '镇康县', 3, '530900'), + ('530925', '双江拉祜族佤族布朗族傣族自治县', 3, '530900'), + ('530926', '耿马傣族佤族自治县', 3, '530900'), + ('530927', '沧源佤族自治县', 3, '530900'), + ('532300', '楚雄彝族自治州', 2, '530000'), + ('532301', '楚雄市', 3, '532300'), + ('532302', '禄丰市', 3, '532300'), + ('532322', '双柏县', 3, '532300'), + ('532323', '牟定县', 3, '532300'), + ('532324', '南华县', 3, '532300'), + ('532325', '姚安县', 3, '532300'), + ('532326', '大姚县', 3, '532300'), + ('532327', '永仁县', 3, '532300'), + ('532328', '元谋县', 3, '532300'), + ('532329', '武定县', 3, '532300'), + ('532500', '红河哈尼族彝族自治州', 2, '530000'), + ('532501', '个旧市', 3, '532500'), + ('532502', '开远市', 3, '532500'), + ('532503', '蒙自市', 3, '532500'), + ('532504', '弥勒市', 3, '532500'), + ('532523', '屏边苗族自治县', 3, '532500'), + ('532524', '建水县', 3, '532500'), + ('532525', '石屏县', 3, '532500'), + ('532527', '泸西县', 3, '532500'), + ('532528', '元阳县', 3, '532500'), + ('532529', '红河县', 3, '532500'), + ('532530', '金平苗族瑶族傣族自治县', 3, '532500'), + ('532531', '绿春县', 3, '532500'), + ('532532', '河口瑶族自治县', 3, '532500'), + ('532600', '文山壮族苗族自治州', 2, '530000'), + ('532601', '文山市', 3, '532600'), + ('532622', '砚山县', 3, '532600'), + ('532623', '西畴县', 3, '532600'), + ('532624', '麻栗坡县', 3, '532600'), + ('532625', '马关县', 3, '532600'), + ('532626', '丘北县', 3, '532600'), + ('532627', '广南县', 3, '532600'), + ('532628', '富宁县', 3, '532600'), + ('532800', '西双版纳傣族自治州', 2, '530000'), + ('532801', '景洪市', 3, '532800'), + ('532822', '勐海县', 3, '532800'), + ('532823', '勐腊县', 3, '532800'), + ('532900', '大理白族自治州', 2, '530000'), + ('532901', '大理市', 3, '532900'), + ('532922', '漾濞彝族自治县', 3, '532900'), + ('532923', '祥云县', 3, '532900'), + ('532924', '宾川县', 3, '532900'), + ('532925', '弥渡县', 3, '532900'), + ('532926', '南涧彝族自治县', 3, '532900'), + ('532927', '巍山彝族回族自治县', 3, '532900'), + ('532928', '永平县', 3, '532900'), + ('532929', '云龙县', 3, '532900'), + ('532930', '洱源县', 3, '532900'), + ('532931', '剑川县', 3, '532900'), + ('532932', '鹤庆县', 3, '532900'), + ('533100', '德宏傣族景颇族自治州', 2, '530000'), + ('533102', '瑞丽市', 3, '533100'), + ('533103', '芒市', 3, '533100'), + ('533122', '梁河县', 3, '533100'), + ('533123', '盈江县', 3, '533100'), + ('533124', '陇川县', 3, '533100'), + ('533300', '怒江傈僳族自治州', 2, '530000'), + ('533301', '泸水市', 3, '533300'), + ('533323', '福贡县', 3, '533300'), + ('533324', '贡山独龙族怒族自治县', 3, '533300'), + ('533325', '兰坪白族普米族自治县', 3, '533300'), + ('533400', '迪庆藏族自治州', 2, '530000'), + ('533401', '香格里拉市', 3, '533400'), + ('533422', '德钦县', 3, '533400'), + ('533423', '维西傈僳族自治县', 3, '533400'), + ('540000', '西藏自治区', 1, NULL), + ('540100', '拉萨市', 2, '540000'), + ('540102', '城关区', 3, '540100'), + ('540103', '堆龙德庆区', 3, '540100'), + ('540104', '达孜区', 3, '540100'), + ('540121', '林周县', 3, '540100'), + ('540122', '当雄县', 3, '540100'), + ('540123', '尼木县', 3, '540100'), + ('540124', '曲水县', 3, '540100'), + ('540127', '墨竹工卡县', 3, '540100'), + ('540171', '格尔木藏青工业园区', 3, '540100'), + ('540172', '拉萨经济技术开发区', 3, '540100'), + ('540173', '西藏文化旅游创意园区', 3, '540100'), + ('540174', '达孜工业园区', 3, '540100'), + ('540200', '日喀则市', 2, '540000'), + ('540202', '桑珠孜区', 3, '540200'), + ('540221', '南木林县', 3, '540200'), + ('540222', '江孜县', 3, '540200'), + ('540223', '定日县', 3, '540200'), + ('540224', '萨迦县', 3, '540200'), + ('540225', '拉孜县', 3, '540200'), + ('540226', '昂仁县', 3, '540200'), + ('540227', '谢通门县', 3, '540200'), + ('540228', '白朗县', 3, '540200'), + ('540229', '仁布县', 3, '540200'), + ('540230', '康马县', 3, '540200'), + ('540231', '定结县', 3, '540200'), + ('540232', '仲巴县', 3, '540200'), + ('540233', '亚东县', 3, '540200'), + ('540234', '吉隆县', 3, '540200'), + ('540235', '聂拉木县', 3, '540200'), + ('540236', '萨嘎县', 3, '540200'), + ('540237', '岗巴县', 3, '540200'), + ('540300', '昌都市', 2, '540000'), + ('540302', '卡若区', 3, '540300'), + ('540321', '江达县', 3, '540300'), + ('540322', '贡觉县', 3, '540300'), + ('540323', '类乌齐县', 3, '540300'), + ('540324', '丁青县', 3, '540300'), + ('540325', '察雅县', 3, '540300'), + ('540326', '八宿县', 3, '540300'), + ('540327', '左贡县', 3, '540300'), + ('540328', '芒康县', 3, '540300'), + ('540329', '洛隆县', 3, '540300'), + ('540330', '边坝县', 3, '540300'), + ('540400', '林芝市', 2, '540000'), + ('540402', '巴宜区', 3, '540400'), + ('540421', '工布江达县', 3, '540400'), + ('540423', '墨脱县', 3, '540400'), + ('540424', '波密县', 3, '540400'), + ('540425', '察隅县', 3, '540400'), + ('540426', '朗县', 3, '540400'), + ('540481', '米林市', 3, '540400'), + ('540500', '山南市', 2, '540000'), + ('540502', '乃东区', 3, '540500'), + ('540521', '扎囊县', 3, '540500'), + ('540522', '贡嘎县', 3, '540500'), + ('540523', '桑日县', 3, '540500'), + ('540524', '琼结县', 3, '540500'), + ('540525', '曲松县', 3, '540500'), + ('540526', '措美县', 3, '540500'), + ('540527', '洛扎县', 3, '540500'), + ('540528', '加查县', 3, '540500'), + ('540529', '隆子县', 3, '540500'), + ('540531', '浪卡子县', 3, '540500'), + ('540581', '错那市', 3, '540500'), + ('540600', '那曲市', 2, '540000'), + ('540602', '色尼区', 3, '540600'), + ('540621', '嘉黎县', 3, '540600'), + ('540622', '比如县', 3, '540600'), + ('540623', '聂荣县', 3, '540600'), + ('540624', '安多县', 3, '540600'), + ('540625', '申扎县', 3, '540600'), + ('540626', '索县', 3, '540600'), + ('540627', '班戈县', 3, '540600'), + ('540628', '巴青县', 3, '540600'), + ('540629', '尼玛县', 3, '540600'), + ('540630', '双湖县', 3, '540600'), + ('542500', '阿里地区', 2, '540000'), + ('542521', '普兰县', 3, '542500'), + ('542522', '札达县', 3, '542500'), + ('542523', '噶尔县', 3, '542500'), + ('542524', '日土县', 3, '542500'), + ('542525', '革吉县', 3, '542500'), + ('542526', '改则县', 3, '542500'), + ('542527', '措勤县', 3, '542500'), + ('610000', '陕西省', 1, NULL), + ('610100', '西安市', 2, '610000'), + ('610102', '新城区', 3, '610100'), + ('610103', '碑林区', 3, '610100'), + ('610104', '莲湖区', 3, '610100'), + ('610111', '灞桥区', 3, '610100'), + ('610112', '未央区', 3, '610100'), + ('610113', '雁塔区', 3, '610100'), + ('610114', '阎良区', 3, '610100'), + ('610115', '临潼区', 3, '610100'), + ('610116', '长安区', 3, '610100'), + ('610117', '高陵区', 3, '610100'), + ('610118', '鄠邑区', 3, '610100'), + ('610122', '蓝田县', 3, '610100'), + ('610124', '周至县', 3, '610100'), + ('610200', '铜川市', 2, '610000'), + ('610202', '王益区', 3, '610200'), + ('610203', '印台区', 3, '610200'), + ('610204', '耀州区', 3, '610200'), + ('610222', '宜君县', 3, '610200'), + ('610300', '宝鸡市', 2, '610000'), + ('610302', '渭滨区', 3, '610300'), + ('610303', '金台区', 3, '610300'), + ('610304', '陈仓区', 3, '610300'), + ('610305', '凤翔区', 3, '610300'), + ('610323', '岐山县', 3, '610300'), + ('610324', '扶风县', 3, '610300'), + ('610326', '眉县', 3, '610300'), + ('610327', '陇县', 3, '610300'), + ('610328', '千阳县', 3, '610300'), + ('610329', '麟游县', 3, '610300'), + ('610330', '凤县', 3, '610300'), + ('610331', '太白县', 3, '610300'), + ('610400', '咸阳市', 2, '610000'), + ('610402', '秦都区', 3, '610400'), + ('610403', '杨陵区', 3, '610400'), + ('610404', '渭城区', 3, '610400'), + ('610422', '三原县', 3, '610400'), + ('610423', '泾阳县', 3, '610400'), + ('610424', '乾县', 3, '610400'), + ('610425', '礼泉县', 3, '610400'), + ('610426', '永寿县', 3, '610400'), + ('610428', '长武县', 3, '610400'), + ('610429', '旬邑县', 3, '610400'), + ('610430', '淳化县', 3, '610400'), + ('610431', '武功县', 3, '610400'), + ('610481', '兴平市', 3, '610400'), + ('610482', '彬州市', 3, '610400'), + ('610500', '渭南市', 2, '610000'), + ('610502', '临渭区', 3, '610500'), + ('610503', '华州区', 3, '610500'), + ('610522', '潼关县', 3, '610500'), + ('610523', '大荔县', 3, '610500'), + ('610524', '合阳县', 3, '610500'), + ('610525', '澄城县', 3, '610500'), + ('610526', '蒲城县', 3, '610500'), + ('610527', '白水县', 3, '610500'), + ('610528', '富平县', 3, '610500'), + ('610581', '韩城市', 3, '610500'), + ('610582', '华阴市', 3, '610500'), + ('610600', '延安市', 2, '610000'), + ('610602', '宝塔区', 3, '610600'), + ('610603', '安塞区', 3, '610600'), + ('610621', '延长县', 3, '610600'), + ('610622', '延川县', 3, '610600'), + ('610625', '志丹县', 3, '610600'), + ('610626', '吴起县', 3, '610600'), + ('610627', '甘泉县', 3, '610600'), + ('610628', '富县', 3, '610600'), + ('610629', '洛川县', 3, '610600'), + ('610630', '宜川县', 3, '610600'), + ('610631', '黄龙县', 3, '610600'), + ('610632', '黄陵县', 3, '610600'), + ('610681', '子长市', 3, '610600'), + ('610700', '汉中市', 2, '610000'), + ('610702', '汉台区', 3, '610700'), + ('610703', '南郑区', 3, '610700'), + ('610722', '城固县', 3, '610700'), + ('610723', '洋县', 3, '610700'), + ('610724', '西乡县', 3, '610700'), + ('610725', '勉县', 3, '610700'), + ('610726', '宁强县', 3, '610700'), + ('610727', '略阳县', 3, '610700'), + ('610728', '镇巴县', 3, '610700'), + ('610729', '留坝县', 3, '610700'), + ('610730', '佛坪县', 3, '610700'), + ('610800', '榆林市', 2, '610000'), + ('610802', '榆阳区', 3, '610800'), + ('610803', '横山区', 3, '610800'), + ('610822', '府谷县', 3, '610800'), + ('610824', '靖边县', 3, '610800'), + ('610825', '定边县', 3, '610800'), + ('610826', '绥德县', 3, '610800'), + ('610827', '米脂县', 3, '610800'), + ('610828', '佳县', 3, '610800'), + ('610829', '吴堡县', 3, '610800'), + ('610830', '清涧县', 3, '610800'), + ('610831', '子洲县', 3, '610800'), + ('610881', '神木市', 3, '610800'), + ('610900', '安康市', 2, '610000'), + ('610902', '汉滨区', 3, '610900'), + ('610921', '汉阴县', 3, '610900'), + ('610922', '石泉县', 3, '610900'), + ('610923', '宁陕县', 3, '610900'), + ('610924', '紫阳县', 3, '610900'), + ('610925', '岚皋县', 3, '610900'), + ('610926', '平利县', 3, '610900'), + ('610927', '镇坪县', 3, '610900'), + ('610929', '白河县', 3, '610900'), + ('610981', '旬阳市', 3, '610900'), + ('611000', '商洛市', 2, '610000'), + ('611002', '商州区', 3, '611000'), + ('611021', '洛南县', 3, '611000'), + ('611022', '丹凤县', 3, '611000'), + ('611023', '商南县', 3, '611000'), + ('611024', '山阳县', 3, '611000'), + ('611025', '镇安县', 3, '611000'), + ('611026', '柞水县', 3, '611000'), + ('620000', '甘肃省', 1, NULL), + ('620100', '兰州市', 2, '620000'), + ('620102', '城关区', 3, '620100'), + ('620103', '七里河区', 3, '620100'), + ('620104', '西固区', 3, '620100'), + ('620105', '安宁区', 3, '620100'), + ('620111', '红古区', 3, '620100'), + ('620121', '永登县', 3, '620100'), + ('620122', '皋兰县', 3, '620100'), + ('620123', '榆中县', 3, '620100'), + ('620171', '兰州新区', 3, '620100'), + ('620200', '嘉峪关市', 2, '620000'), + ('620300', '金昌市', 2, '620000'), + ('620302', '金川区', 3, '620300'), + ('620321', '永昌县', 3, '620300'), + ('620400', '白银市', 2, '620000'), + ('620402', '白银区', 3, '620400'), + ('620403', '平川区', 3, '620400'), + ('620421', '靖远县', 3, '620400'), + ('620422', '会宁县', 3, '620400'), + ('620423', '景泰县', 3, '620400'), + ('620500', '天水市', 2, '620000'), + ('620502', '秦州区', 3, '620500'), + ('620503', '麦积区', 3, '620500'), + ('620521', '清水县', 3, '620500'), + ('620522', '秦安县', 3, '620500'), + ('620523', '甘谷县', 3, '620500'), + ('620524', '武山县', 3, '620500'), + ('620525', '张家川回族自治县', 3, '620500'), + ('620600', '武威市', 2, '620000'), + ('620602', '凉州区', 3, '620600'), + ('620621', '民勤县', 3, '620600'), + ('620622', '古浪县', 3, '620600'), + ('620623', '天祝藏族自治县', 3, '620600'), + ('620700', '张掖市', 2, '620000'), + ('620702', '甘州区', 3, '620700'), + ('620721', '肃南裕固族自治县', 3, '620700'), + ('620722', '民乐县', 3, '620700'), + ('620723', '临泽县', 3, '620700'), + ('620724', '高台县', 3, '620700'), + ('620725', '山丹县', 3, '620700'), + ('620800', '平凉市', 2, '620000'), + ('620802', '崆峒区', 3, '620800'), + ('620821', '泾川县', 3, '620800'), + ('620822', '灵台县', 3, '620800'), + ('620823', '崇信县', 3, '620800'), + ('620825', '庄浪县', 3, '620800'), + ('620826', '静宁县', 3, '620800'), + ('620881', '华亭市', 3, '620800'), + ('620900', '酒泉市', 2, '620000'), + ('620902', '肃州区', 3, '620900'), + ('620921', '金塔县', 3, '620900'), + ('620922', '瓜州县', 3, '620900'), + ('620923', '肃北蒙古族自治县', 3, '620900'), + ('620924', '阿克塞哈萨克族自治县', 3, '620900'), + ('620981', '玉门市', 3, '620900'), + ('620982', '敦煌市', 3, '620900'), + ('621000', '庆阳市', 2, '620000'), + ('621002', '西峰区', 3, '621000'), + ('621021', '庆城县', 3, '621000'), + ('621022', '环县', 3, '621000'), + ('621023', '华池县', 3, '621000'), + ('621024', '合水县', 3, '621000'), + ('621025', '正宁县', 3, '621000'), + ('621026', '宁县', 3, '621000'), + ('621027', '镇原县', 3, '621000'), + ('621100', '定西市', 2, '620000'), + ('621102', '安定区', 3, '621100'), + ('621121', '通渭县', 3, '621100'), + ('621122', '陇西县', 3, '621100'), + ('621123', '渭源县', 3, '621100'), + ('621124', '临洮县', 3, '621100'), + ('621125', '漳县', 3, '621100'), + ('621126', '岷县', 3, '621100'), + ('621200', '陇南市', 2, '620000'), + ('621202', '武都区', 3, '621200'), + ('621221', '成县', 3, '621200'), + ('621222', '文县', 3, '621200'), + ('621223', '宕昌县', 3, '621200'), + ('621224', '康县', 3, '621200'), + ('621225', '西和县', 3, '621200'), + ('621226', '礼县', 3, '621200'), + ('621227', '徽县', 3, '621200'), + ('621228', '两当县', 3, '621200'), + ('622900', '临夏回族自治州', 2, '620000'), + ('622901', '临夏市', 3, '622900'), + ('622921', '临夏县', 3, '622900'), + ('622922', '康乐县', 3, '622900'), + ('622923', '永靖县', 3, '622900'), + ('622924', '广河县', 3, '622900'), + ('622925', '和政县', 3, '622900'), + ('622926', '东乡族自治县', 3, '622900'), + ('622927', '积石山保安族东乡族撒拉族自治县', 3, '622900'), + ('623000', '甘南藏族自治州', 2, '620000'), + ('623001', '合作市', 3, '623000'), + ('623021', '临潭县', 3, '623000'), + ('623022', '卓尼县', 3, '623000'), + ('623023', '舟曲县', 3, '623000'), + ('623024', '迭部县', 3, '623000'), + ('623025', '玛曲县', 3, '623000'), + ('623026', '碌曲县', 3, '623000'), + ('623027', '夏河县', 3, '623000'), + ('630000', '青海省', 1, NULL), + ('630100', '西宁市', 2, '630000'), + ('630102', '城东区', 3, '630100'), + ('630103', '城中区', 3, '630100'), + ('630104', '城西区', 3, '630100'), + ('630105', '城北区', 3, '630100'), + ('630106', '湟中区', 3, '630100'), + ('630121', '大通回族土族自治县', 3, '630100'), + ('630123', '湟源县', 3, '630100'), + ('630200', '海东市', 2, '630000'), + ('630202', '乐都区', 3, '630200'), + ('630203', '平安区', 3, '630200'), + ('630222', '民和回族土族自治县', 3, '630200'), + ('630223', '互助土族自治县', 3, '630200'), + ('630224', '化隆回族自治县', 3, '630200'), + ('630225', '循化撒拉族自治县', 3, '630200'), + ('632200', '海北藏族自治州', 2, '630000'), + ('632221', '门源回族自治县', 3, '632200'), + ('632222', '祁连县', 3, '632200'), + ('632223', '海晏县', 3, '632200'), + ('632224', '刚察县', 3, '632200'), + ('632300', '黄南藏族自治州', 2, '630000'), + ('632301', '同仁市', 3, '632300'), + ('632322', '尖扎县', 3, '632300'), + ('632323', '泽库县', 3, '632300'), + ('632324', '河南蒙古族自治县', 3, '632300'), + ('632500', '海南藏族自治州', 2, '630000'), + ('632521', '共和县', 3, '632500'), + ('632522', '同德县', 3, '632500'), + ('632523', '贵德县', 3, '632500'), + ('632524', '兴海县', 3, '632500'), + ('632525', '贵南县', 3, '632500'), + ('632600', '果洛藏族自治州', 2, '630000'), + ('632621', '玛沁县', 3, '632600'), + ('632622', '班玛县', 3, '632600'), + ('632623', '甘德县', 3, '632600'), + ('632624', '达日县', 3, '632600'), + ('632625', '久治县', 3, '632600'), + ('632626', '玛多县', 3, '632600'), + ('632700', '玉树藏族自治州', 2, '630000'), + ('632701', '玉树市', 3, '632700'), + ('632722', '杂多县', 3, '632700'), + ('632723', '称多县', 3, '632700'), + ('632724', '治多县', 3, '632700'), + ('632725', '囊谦县', 3, '632700'), + ('632726', '曲麻莱县', 3, '632700'), + ('632800', '海西蒙古族藏族自治州', 2, '630000'), + ('632801', '格尔木市', 3, '632800'), + ('632802', '德令哈市', 3, '632800'), + ('632803', '茫崖市', 3, '632800'), + ('632821', '乌兰县', 3, '632800'), + ('632822', '都兰县', 3, '632800'), + ('632823', '天峻县', 3, '632800'), + ('632857', '大柴旦行政委员会', 3, '632800'), + ('640000', '宁夏回族自治区', 1, NULL), + ('640100', '银川市', 2, '640000'), + ('640104', '兴庆区', 3, '640100'), + ('640105', '西夏区', 3, '640100'), + ('640106', '金凤区', 3, '640100'), + ('640121', '永宁县', 3, '640100'), + ('640122', '贺兰县', 3, '640100'), + ('640181', '灵武市', 3, '640100'), + ('640200', '石嘴山市', 2, '640000'), + ('640202', '大武口区', 3, '640200'), + ('640205', '惠农区', 3, '640200'), + ('640221', '平罗县', 3, '640200'), + ('640300', '吴忠市', 2, '640000'), + ('640302', '利通区', 3, '640300'), + ('640303', '红寺堡区', 3, '640300'), + ('640323', '盐池县', 3, '640300'), + ('640324', '同心县', 3, '640300'), + ('640381', '青铜峡市', 3, '640300'), + ('640400', '固原市', 2, '640000'), + ('640402', '原州区', 3, '640400'), + ('640422', '西吉县', 3, '640400'), + ('640423', '隆德县', 3, '640400'), + ('640424', '泾源县', 3, '640400'), + ('640425', '彭阳县', 3, '640400'), + ('640500', '中卫市', 2, '640000'), + ('640502', '沙坡头区', 3, '640500'), + ('640521', '中宁县', 3, '640500'), + ('640522', '海原县', 3, '640500'), + ('650000', '新疆维吾尔自治区', 1, NULL), + ('650100', '乌鲁木齐市', 2, '650000'), + ('650102', '天山区', 3, '650100'), + ('650103', '沙依巴克区', 3, '650100'), + ('650104', '新市区', 3, '650100'), + ('650105', '水磨沟区', 3, '650100'), + ('650106', '头屯河区', 3, '650100'), + ('650107', '达坂城区', 3, '650100'), + ('650109', '米东区', 3, '650100'), + ('650121', '乌鲁木齐县', 3, '650100'), + ('650200', '克拉玛依市', 2, '650000'), + ('650202', '独山子区', 3, '650200'), + ('650203', '克拉玛依区', 3, '650200'), + ('650204', '白碱滩区', 3, '650200'), + ('650205', '乌尔禾区', 3, '650200'), + ('650400', '吐鲁番市', 2, '650000'), + ('650402', '高昌区', 3, '650400'), + ('650421', '鄯善县', 3, '650400'), + ('650422', '托克逊县', 3, '650400'), + ('650500', '哈密市', 2, '650000'), + ('650502', '伊州区', 3, '650500'), + ('650521', '巴里坤哈萨克自治县', 3, '650500'), + ('650522', '伊吾县', 3, '650500'), + ('652300', '昌吉回族自治州', 2, '650000'), + ('652301', '昌吉市', 3, '652300'), + ('652302', '阜康市', 3, '652300'), + ('652323', '呼图壁县', 3, '652300'), + ('652324', '玛纳斯县', 3, '652300'), + ('652325', '奇台县', 3, '652300'), + ('652327', '吉木萨尔县', 3, '652300'), + ('652328', '木垒哈萨克自治县', 3, '652300'), + ('652700', '博尔塔拉蒙古自治州', 2, '650000'), + ('652701', '博乐市', 3, '652700'), + ('652702', '阿拉山口市', 3, '652700'), + ('652722', '精河县', 3, '652700'), + ('652723', '温泉县', 3, '652700'), + ('652800', '巴音郭楞蒙古自治州', 2, '650000'), + ('652801', '库尔勒市', 3, '652800'), + ('652822', '轮台县', 3, '652800'), + ('652823', '尉犁县', 3, '652800'), + ('652824', '若羌县', 3, '652800'), + ('652825', '且末县', 3, '652800'), + ('652826', '焉耆回族自治县', 3, '652800'), + ('652827', '和静县', 3, '652800'), + ('652828', '和硕县', 3, '652800'), + ('652829', '博湖县', 3, '652800'), + ('652900', '阿克苏地区', 2, '650000'), + ('652901', '阿克苏市', 3, '652900'), + ('652902', '库车市', 3, '652900'), + ('652922', '温宿县', 3, '652900'), + ('652924', '沙雅县', 3, '652900'), + ('652925', '新和县', 3, '652900'), + ('652926', '拜城县', 3, '652900'), + ('652927', '乌什县', 3, '652900'), + ('652928', '阿瓦提县', 3, '652900'), + ('652929', '柯坪县', 3, '652900'), + ('653000', '克孜勒苏柯尔克孜自治州', 2, '650000'), + ('653001', '阿图什市', 3, '653000'), + ('653022', '阿克陶县', 3, '653000'), + ('653023', '阿合奇县', 3, '653000'), + ('653024', '乌恰县', 3, '653000'), + ('653100', '喀什地区', 2, '650000'), + ('653101', '喀什市', 3, '653100'), + ('653121', '疏附县', 3, '653100'), + ('653122', '疏勒县', 3, '653100'), + ('653123', '英吉沙县', 3, '653100'), + ('653124', '泽普县', 3, '653100'), + ('653125', '莎车县', 3, '653100'), + ('653126', '叶城县', 3, '653100'), + ('653127', '麦盖提县', 3, '653100'), + ('653128', '岳普湖县', 3, '653100'), + ('653129', '伽师县', 3, '653100'), + ('653130', '巴楚县', 3, '653100'), + ('653131', '塔什库尔干塔吉克自治县', 3, '653100'), + ('653200', '和田地区', 2, '650000'), + ('653201', '和田市', 3, '653200'), + ('653221', '和田县', 3, '653200'), + ('653222', '墨玉县', 3, '653200'), + ('653223', '皮山县', 3, '653200'), + ('653224', '洛浦县', 3, '653200'), + ('653225', '策勒县', 3, '653200'), + ('653226', '于田县', 3, '653200'), + ('653227', '民丰县', 3, '653200'), + ('654000', '伊犁哈萨克自治州', 2, '650000'), + ('654002', '伊宁市', 3, '654000'), + ('654003', '奎屯市', 3, '654000'), + ('654004', '霍尔果斯市', 3, '654000'), + ('654021', '伊宁县', 3, '654000'), + ('654022', '察布查尔锡伯自治县', 3, '654000'), + ('654023', '霍城县', 3, '654000'), + ('654024', '巩留县', 3, '654000'), + ('654025', '新源县', 3, '654000'), + ('654026', '昭苏县', 3, '654000'), + ('654027', '特克斯县', 3, '654000'), + ('654028', '尼勒克县', 3, '654000'), + ('654200', '塔城地区', 2, '650000'), + ('654201', '塔城市', 3, '654200'), + ('654202', '乌苏市', 3, '654200'), + ('654203', '沙湾市', 3, '654200'), + ('654221', '额敏县', 3, '654200'), + ('654224', '托里县', 3, '654200'), + ('654225', '裕民县', 3, '654200'), + ('654226', '和布克赛尔蒙古自治县', 3, '654200'), + ('654300', '阿勒泰地区', 2, '650000'), + ('654301', '阿勒泰市', 3, '654300'), + ('654321', '布尔津县', 3, '654300'), + ('654322', '富蕴县', 3, '654300'), + ('654323', '福海县', 3, '654300'), + ('654324', '哈巴河县', 3, '654300'), + ('654325', '青河县', 3, '654300'), + ('654326', '吉木乃县', 3, '654300'), + ('659000', '自治区直辖县级行政区划', 2, '650000'), + ('659001', '石河子市', 3, '659000'), + ('659002', '阿拉尔市', 3, '659000'), + ('659003', '图木舒克市', 3, '659000'), + ('659004', '五家渠市', 3, '659000'), + ('659005', '北屯市', 3, '659000'), + ('659006', '铁门关市', 3, '659000'), + ('659007', '双河市', 3, '659000'), + ('659008', '可克达拉市', 3, '659000'), + ('659009', '昆玉市', 3, '659000'), + ('659010', '胡杨河市', 3, '659000'), + ('659011', '新星市', 3, '659000'), + ('659012', '白杨市', 3, '659000'), + ('710000', '台湾省', 1, NULL), + ('810000', '香港特别行政区', 1, NULL), + ('820000', '澳门特别行政区', 1, NULL); + + +-- ========== 2. 首页轮播图初始数据 ========== +-- 来自 V9__app_banner.sql +-- image_file_id 在第 3 步由 sys_file + UPDATE 补全 + +INSERT INTO app_banner (title, subtitle, link_type, sort_order, status) VALUES + ('CAAC 报名通道开启', '超250g无人机须实名,操控员须持证', 'caac', 1, 1), + ('无人机表演专场', '高客单商业订单,专业飞手接单', 'performance', 2, 1), + ('实力商家招商入驻', '开放聚合生态,精准流量分发', 'merchant', 3, 1); + + +-- ========== 3. 功能配置 KV + Banner 图片注册 + 关联 ========== +-- 来自 V10__app_config.sql + +-- 3.1 app_config 功能开关 + +INSERT INTO app_config (config_key, config_value, remark) +VALUES ('mp_push_enabled', '0', '微信公众号模板消息推送总开关(0关闭 1开启)') +ON CONFLICT (config_key) DO NOTHING; + +-- 3.1.1 积分规则配置项(发布任务相关,Web 端功能配置可运营调整) +INSERT INTO app_config (config_key, config_value, remark) +VALUES + ('points_publish_award', '1', '发布任务获取积分数量:用户每发布一个普通任务奖励的积分(0 表示不奖励)'), + ('points_premium_deduct', '4', '发布任务扣减积分数量:发布优质任务消耗的积分(0 表示不扣减,积分不足时无法发布优质任务)') +ON CONFLICT (config_key) DO NOTHING; + +-- 3.2 Banner 图片注册到 sys_file + 关联 app_banner + +-- ========== 2. 首页轮播图图片补全 ========== +-- 本地磁盘文件已由运维放到 static/image/ 目录下: +-- banner-home-01-yiyunhub.png +-- banner-home-02-performance.png +-- banner-home-03-merchant.png +-- 本脚本负责注册 sys_file 记录 + 关联到 app_banner。 + +-- 注册 3 张图片到 sys_file(file_type = 8 → BANNER_IMAGE) +WITH +reg1 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-01-yiyunhub.png', 'png', '/static/image/banner-home-01-yiyunhub.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +reg2 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-02-performance.png', 'png', '/static/image/banner-home-02-performance.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +reg3 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-03-merchant.png', 'png', '/static/image/banner-home-03-merchant.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +-- 兜底:如果 ON CONFLICT 没返回 id(文件已存在),通过 file_name 反查 +f1 AS (SELECT id FROM reg1 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-01-yiyunhub.png' LIMIT 1), +f2 AS (SELECT id FROM reg2 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-02-performance.png' LIMIT 1), +f3 AS (SELECT id FROM reg3 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-03-merchant.png' LIMIT 1) +-- 把图片关联到轮播图(按标题匹配 V9 初始化的 3 条) +UPDATE app_banner +SET + image_file_id = CASE title + WHEN 'CAAC 报名通道开启' THEN (SELECT id FROM f1) + WHEN '无人机表演专场' THEN (SELECT id FROM f2) + WHEN '实力商家招商入驻' THEN (SELECT id FROM f3) + END, + -- 同步更新标题为小程序实际显示的文案 + title = CASE title + WHEN 'CAAC 报名通道开启' THEN '翼云Hub' + WHEN '无人机表演专场' THEN '商业表演' + WHEN '实力商家招商入驻' THEN '实力商家' + ELSE title + END, + subtitle = CASE title + WHEN 'CAAC 报名通道开启' THEN '无人机信息开放平台' + WHEN '无人机表演专场' THEN '专业飞手 高客单' + WHEN '实力商家招商入驻' THEN '开放生态 精准流量' + ELSE subtitle + END +WHERE deleted_at IS NULL + AND image_file_id IS NULL; + + +-- ========== 4. 培训门店 + 题库种子 ========== +-- 来自 V12__training_store_and_exam_seed.sql + +-- 4.1 默认培训门店 + +INSERT INTO training_store (name, address, contact_name, contact_phone, training_content, status) +VALUES ('翼云Hub无人机培训中心', '上海市松江区科技园区翼云路1号', '王教练', '13800138000', + '本中心提供AOPA/UTC/ASDC/CAAC四类无人机执照理论培训与实操指导,涵盖航空法规、飞行原理、气象学、应急处置等核心模块,由资深飞行教官授课,通过率业内领先。', 1); + +-- 4.2 四个题库 + +INSERT INTO exam_bank (id, name, description, question_count, difficulty, status) VALUES +(1, 'CAAC 无人机理论考试题库', '中国民航局(CAAC)无人机驾驶员执照理论考试题库,涵盖航空法规、空域管理、飞行原理、应急处置等核心考点。', 20, 2, 1), +(2, 'AOPA 无人机理论考试题库', '中国航空器拥有者及驾驶员协会(AOPA)无人机驾驶员考试题库,侧重飞行操作与实操规范。', 5, 2, 1), +(3, 'UTC 无人机理论考试题库', '无人驾驶航空器系统驾驶员训练合格证(UTC)考试题库,涵盖航拍、植保等应用场景知识。', 5, 1, 1), +(4, 'ASDC 无人机理论考试题库', '中国航空运动协会(ASDC)无人机驾驶员考试题库,侧重航模与运动类飞行器知识。', 5, 1, 1); + +-- ========== 5. 题库题目种子 ========== +-- 来自 V13__exam_questions_seed.sql + V15__exam_questions_multi_type.sql + +-- 5.1 单选 + 判断题(V13) + +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 414);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 449); +-- CAAC 判断题 (150题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 549);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 550);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 551);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 552);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 553);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 554);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 555);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 556);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 557);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 558);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 559);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 560);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 561);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 562);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 563);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 564);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 565);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 566);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 567);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 568);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 569);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 570);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 571);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 572);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 573);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 574);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 575);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 576);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 577);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 578);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 579);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 580);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 581);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 582);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 583);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 584);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 585);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 586);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 587);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 588);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 589);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 590);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 591);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 592);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 593);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 594);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 595);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 596);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 597);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 598);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 599); +-- ========== AOPA 题库 (bank_id=2, 目标500题) ==========-- AOPA 单选题 (350题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 414);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 449); +-- AOPA 判断题 (150题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 549);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 550);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 551);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 552);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 553);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 554);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 555);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 556);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 557);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 558);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 559);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 560);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 561);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 562);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 563);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 564);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 565);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 566);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 567);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 568);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 569);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 570);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 571);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 572);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 573);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 574);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 575);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 576);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 577);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 578);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 579);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 580);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 581);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 582);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 583);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 584);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 585);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 586);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 587);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 588);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 589);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 590);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 591);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 592);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 593);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 594);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 595);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 596);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 597);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 598);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 599);-- ========== UTC 题库 (bank_id=3, 目标450题) ==========-- UTC 单选题 (315题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 414); +-- UTC 判断题 (135题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 449);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 549); +-- ========== ASDC 题库 (bank_id=4, 目标450题) ========== +-- ASDC 单选题 (315题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 414); +-- ASDC 判断题 (135题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 449);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 549); + + +-- 5.2 多选题(V15) + +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '民用无人机驾驶员在飞行前应完成的检查项目包括?', '[{"key":"A","val":"电池电量检查"},{"key":"B","val":"螺旋桨安装紧固"},{"key":"C","val":"遥控器信号测试"},{"key":"D","val":"飞行区域空域申请"}]', 2, 'ABCD', '飞行前检查应覆盖硬件状态、通信链路和法规前置条件。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下属于微型无人机(空机质量小于7kg)的飞行限制条件有?', '[{"key":"A","val":"不得飞入管制空域"},{"key":"B","val":"飞行高度不超过120米(真高)"},{"key":"C","val":"必须在视距内飞行"},{"key":"D","val":"夜间飞行需特殊许可"}]', 2, 'ABCD', '微型无人机严格受限,四项均为法规强制要求。', 2, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在飞行过程中遇到GPS信号丢失时,正确的处理措施包括?', '[{"key":"A","val":"立即切换至姿态模式"},{"key":"B","val":"保持冷静不要猛推摇杆"},{"key":"C","val":"观察四周确认无碰撞风险"},{"key":"D","val":"尽快降低高度安全着陆"}]', 2, 'ABCD', 'GPS丢失后应先稳定姿态再降落,避免慌乱操作导致失控。', 2, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机飞控系统的核心传感器?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"磁罗盘"}]', 2, 'ABCD', '飞控通过这四种传感器组合感知姿态、位置和方向。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响无人机续航时间的主要因素有?', '[{"key":"A","val":"飞行速度(空速)"},{"key":"B","val":"风速大小"},{"key":"C","val":"所带载荷重量"},{"key":"D","val":"电池放电倍率"}]', 2, 'ABCD', '四因素均直接影响能耗,其中逆风飞行对续航影响最大。', 1, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '空域管理中,以下哪些属于管制空域?', '[{"key":"A","val":"机场跑道中心线两侧10公里范围内"},{"key":"B","val":"军事管制区上空"},{"key":"C","val":"国务院规定的重点区域上空"},{"key":"D","val":"城市高层建筑密集区"}]', 2, 'ABC', '城市高层建筑密集区不是法定管制空域,但飞行需注意净空限制。', 2, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实施应急降落的正确操作要点包括?', '[{"key":"A","val":"选择平坦无障碍物的地面"},{"key":"B","val":"缓慢下降接近地面"},{"key":"C","val":"接地前稍抬头减速"},{"key":"D","val":"接地后立即切断动力"}]', 2, 'ABCD', '应急降落四步曲:选点-下降-缓冲-断电,缺一不可。', 2, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于电磁干扰对无人机影响的说法正确的有?', '[{"key":"A","val":"可能导致GPS定位漂移"},{"key":"B","val":"可能造成遥控器失控"},{"key":"C","val":"可能引起飞控数据异常"},{"key":"D","val":"对图传信号无影响"}]', 2, 'ABC', '图传也在电磁干扰频率范围内,同样会受到影响出现雪花或断链。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机起飞前应确认的环境条件有?', '[{"key":"A","val":"风速是否在机型允许范围内"},{"key":"B","val":"周边是否有高大建筑物遮挡GPS"},{"key":"C","val":"温度是否在电池工作范围内"},{"key":"D","val":"场地是否足够大且无行人"}]', 2, 'ABCD', '环境四要素:风、遮挡、温、场地,缺一不飞。', 1, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机电池安全使用,以下说法正确的有?', '[{"key":"A","val":"应避免过充过放"},{"key":"B","val":"应在阴凉处充电"},{"key":"C","val":"可在飞行后立即充电"},{"key":"D","val":"应定期检查电池鼓包"}]', 2, 'ABD', '飞行后电池温度高,应待自然冷却后再充电,否则有起火风险。', 2, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些是无人机驾驶员应当具备的基本能力?', '[{"key":"A","val":"掌握气象常识"},{"key":"B","val":"能看懂航空图表"},{"key":"C","val":"具备应急反应能力"},{"key":"D","val":"精通航空发动机维修"}]', 2, 'ABC', '精通发动机维修不是基本能力,属于机务维护范畴。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在城市上空飞行时,应特别注意?', '[{"key":"A","val":"避开高层建筑"},{"key":"B","val":"注意电线杆和树木"},{"key":"C","val":"远离高压电线"},{"key":"D","val":"飞行高度不低于50米即可"}]', 2, 'ABC', '城市飞行需立体规避,高度只是一个维度,水平距离同样重要。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于视距内飞行(VLOS)的说法正确的有?', '[{"key":"A","val":"驾驶员能够直接目视无人机"},{"key":"B","val":"距离通常不超过500米"},{"key":"C","val":"高度不超过120米真高"},{"key":"D","val":"夜间可不受限制"}]', 2, 'ABC', '夜间视距内飞行仍需遵守距离和高度限制,只是允许夜间操作。', 2, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机遥控器出现摇杆漂移时,正确的处理方式有?', '[{"key":"A","val":"尝试摇杆校准"},{"key":"B","val":"更换遥控器电池"},{"key":"C","val":"检查摇杆周围是否有异物"},{"key":"D","val":"继续飞行等它自己恢复"}]', 2, 'ABC', '漂移不处理可能导致失控,必须落地检修后再飞。', 2, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气象条件对无人机飞行影响显著,以下哪些情况不宜飞行?', '[{"key":"A","val":"雷雨天气"},{"key":"B","val":"能见度低于500米"},{"key":"C","val":"逆风超过机型最大抗风等级"},{"key":"D","val":"气温0°C以下"}]', 2, 'ABC', '0°C以下如采取电池预热等保护措施仍可飞行,但雷暴、低能见度、超风速绝对禁飞。', 1, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控"失控保护"功能通常包括?', '[{"key":"A","val":"失控返航(RTH)"},{"key":"B","val":"自动悬停等待信号恢复"},{"key":"C","val":"直线飞往起飞点"},{"key":"D","val":"原地旋转一圈再降落"}]', 2, 'ABC', '失控保护通常是悬停等待→返航→降落三阶段,原地旋转不是标准策略。', 2, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"地面保障"工作?', '[{"key":"A","val":"起飞场地平整"},{"key":"B","val":"电池充电与预热"},{"key":"C","val":"飞行日志记录"},{"key":"D","val":"飞行空域协调"}]', 2, 'ABD', '飞行日志属于机载数据,不需要地面提前保障,但需要起飞前准备的是场地、电池和空域。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自旋(螺旋桨打架)"故障,以下说法正确的有?', '[{"key":"A","val":"通常是桨叶安装方向错误"},{"key":"B","val":"也可能是电机接线反了"},{"key":"C","val":"起飞前自检可避免"},{"key":"D","val":"可在飞行中修正"}]', 2, 'ABC', '自旋在起飞前自检阶段就会暴露,一旦离地自旋失控无法挽救,只能紧急降落。', 2, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机完成飞行任务后,应做的收尾工作包括?', '[{"key":"A","val":"检查设备外观有无损坏"},{"key":"B","val":"整理电池按电压分级存放"},{"key":"C","val":"更新飞行日志"},{"key":"D","val":"立即把所有电池充满"}]', 2, 'ABC', '电池长期满电存放会影响寿命,应降至约3.8V存放。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些场景属于无人机"超视距飞行(BVLOS)"?', '[{"key":"A","val":"无人机飞入云层后看不见"},{"key":"B","val":"距离超过500米但仍能目视"},{"key":"C","val":"使用GPS全自动航线飞行"},{"key":"D","val":"夜间飞行"}]', 2, 'AC', 'BVLOS的核心是"驾驶员无法目视",距离或昼夜本身不是判断标准。', 2, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"地理围栏(Geo-fencing)"功能主要作用包括?', '[{"key":"A","val":"限制飞越禁飞区"},{"key":"B","val":"限制最大飞行半径"},{"key":"C","val":"自动返航至设定边界"},{"key":"D","val":"提高飞行速度"}]', 2, 'ABC', '地理围栏是安全限制功能,与速度无关。', 1, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池充放电特性,以下说法正确的有?', '[{"key":"A","val":"放电电压随电量降低而下降"},{"key":"B","val":"高倍率放电会缩短电池寿命"},{"key":"C","val":"可安全用超过C6倍率充电"},{"key":"D","val":"低温下放电能力下降"}]', 2, 'ABD', '大电流充电会发热损坏电芯,一般不建议超过C2或C3倍率。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机GPS"搜星数量少"的常见原因有?', '[{"key":"A","val":"天空被建筑物或树木遮挡"},{"key":"B","val":"周围有金属结构干扰"},{"key":"C","val":"GPS模块损坏"},{"key":"D","val":"飞行时间太晚"}]', 2, 'ABC', 'GPS卫星信号24小时可用,与时间无关,只是天空遮挡影响。', 1, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在起飞点附近遇到高压线时,正确的应对策略有?', '[{"key":"A","val":"保持至少30米以上距离"},{"key":"B","val":"避免在高压线下方飞行"},{"key":"C","val":"起飞前先观察高压线走向"},{"key":"D","val":"贴着高压线飞可以利用其上升气流"}]', 2, 'ABC', '高压线周围电磁干扰极强,贴近飞行极易失控,绝不能贴近。', 2, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生的"风切变"现象可能导致?', '[{"key":"A","val":"高度突变"},{"key":"B","val":"姿态剧烈晃动"},{"key":"C","val":"续航突然缩短"},{"key":"D","val":"电池快速放电"}]', 2, 'ABCD', '风切变是风向风速剧变,对高度、姿态、能耗均产生剧烈影响。', 3, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些操作会消耗更多电量?', '[{"key":"A","val":"快速飞行转向"},{"key":"B","val":"长时间悬停"},{"key":"C","val":"逆风飞行"},{"key":"D","val":"使用FPV穿越模式"}]', 2, 'ABCD', '四项均增加能耗:转向需克服惯性、悬停维持升力、逆风需额外推力、穿越模式大油门。', 2, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机"返航高度"设置的原则是?', '[{"key":"A","val":"高于航线中最高障碍物"},{"key":"B","val":"考虑返航途中的风况"},{"key":"C","val":"不需要考虑起飞点周围障碍物"},{"key":"D","val":"应留足安全余量"}]', 2, 'ABD', '返航高度必须同时考虑航线和起飞着陆点周围的障碍物,否则返航时会撞。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机螺旋桨的说法正确的有?', '[{"key":"A","val":"正反桨不能混用"},{"key":"B","val":"桨叶破损必须更换"},{"key":"C","val":"桨叶安装方向有讲究"},{"key":"D","val":"桨叶越重飞行越稳"}]', 2, 'ABC', '桨叶过重会增加负载降低续航,稳定由动平衡和安装精度决定。', 1, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员"疲劳驾驶"可能导致?', '[{"key":"A","val":"反应迟钝错过避障时机"},{"key":"B","val":"误触遥控器摇杆"},{"key":"C","val":"无法准确判断飞行距离"},{"key":"D","val":"更有耐心完成复杂任务"}]', 2, 'ABC', '疲劳只会降低操作能力和判断力,不会提高表现。', 1, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于"特殊情况飞行",需要提前申请许可?', '[{"key":"A","val":"夜间在管制机场附近飞行"},{"key":"B","val":"飞越高速公路正上方"},{"key":"C","val":"在大型集会人群上空飞行"},{"key":"D","val":"纯视距内7kg以下微型机日常航拍"}]', 2, 'ABC', '日常微型机视距内航拍无需单独申请,但A/B/C三项均属于风险场景。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控中"磁力计干扰"可能来自?', '[{"key":"A","val":"附近的高压电线"},{"key":"B","val":"地面的金属井盖"},{"key":"C","val":"无人机携带的磁铁"},{"key":"D","val":"遥控器的天线"}]', 2, 'ABCD', '所有磁性源都可能干扰磁力计指南针,包括机载和地面的。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于电池"平衡充电",以下说法正确的有?', '[{"key":"A","val":"使各电芯电压一致"},{"key":"B","val":"延长电池整体寿命"},{"key":"C","val":"可消除已老化电芯的差异"},{"key":"D","val":"每次充电都应开启"}]', 2, 'ABD', '平衡充电可以延缓电芯差异扩大,但无法逆转已经老化的电芯物理性能下降。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行高度的说法正确的有?', '[{"key":"A","val":"绝对高度是相对于平均海平面的高度"},{"key":"B","val":"相对高度是相对于起飞点的高度"},{"key":"C","val":"真高是相对于地面的实际高度"},{"key":"D","val":"三者在任何场景都是相同的"}]', 2, 'ABC', '地形起伏时三者差异明显,如在山上起飞,相对高度和真高可能不同。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在水面上空飞行时需要特别注意?', '[{"key":"A","val":"水面反光影响视觉判断"},{"key":"B","val":"GPS可能受潮汐影响"},{"key":"C","val":"救援难度大必须降低风险"},{"key":"D","val":"水面对图传信号有增益"}]', 2, 'AC', '水面无任何信号增益,GPS不受潮汐直接影响(受潮汐影响的是高度计气压值)。', 2, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些情况说明无人机应该立即降落?', '[{"key":"A","val":"电池剩余电量低于25%"},{"key":"B","val":"收到强风警报"},{"key":"C","val":"发现螺旋桨异响"},{"key":"D","val":"图传画面出现轻微雪花"}]', 2, 'ABCD', '四项均属于风险信号,应尽快降落排查,不能心存侥幸。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"动力失效"故障中,以下哪些原因最常见?', '[{"key":"A","val":"电池接线松动"},{"key":"B","val":"电机烧毁"},{"key":"C","val":"螺旋桨卡入异物"},{"key":"D","val":"遥控器没开机"}]', 2, 'ABC', '遥控器没开属于人为失误,不是"动力失效"本身的原因。', 1, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"低空经济"的说法与无人机相关的有?', '[{"key":"A","val":"无人机物流配送"},{"key":"B","val":"无人机电力巡检"},{"key":"C","val":"无人机消防救援"},{"key":"D","val":"高空飞机民航运输"}]', 2, 'ABC', '民航运输属于高空经济范畴,不是低空无人机应用。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中"姿态不稳"的原因可能是?', '[{"key":"A","val":"GPS搜星数量不足"},{"key":"B","val":"飞控加速度计未校准"},{"key":"C","val":"螺旋桨动平衡差"},{"key":"D","val":"电量充满"}]', 2, 'ABC', '电量满不是姿态不稳的原因,反而低电量可能导致推力不足姿态变差。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些是无人机驾驶员应当随身携带的装备?', '[{"key":"A","val":"备用电池"},{"key":"B","val":"信号良好的遥控器"},{"key":"C","val":"便携GPS手持机"},{"key":"D","val":"备用螺旋桨"}]', 2, 'ABD', '手持GPS不是必备,现代无人机本身GPS精度足够;但备用电池、遥控器、桨叶都是应急必备。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自动返航"功能,以下说法正确的有?', '[{"key":"A","val":"需要GPS信号支持"},{"key":"B","val":"返航点默认为起飞点"},{"key":"C","val":"返回高度可能低于沿途障碍物"},{"key":"D","val":"返航途中可手动接管"}]', 2, 'ABD', '返航高度如果设置不当确实可能撞障碍物,这是驾驶员的责任而非功能缺陷。', 2, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在山区飞行时,应特别注意?', '[{"key":"A","val":"山地上升气流可能造成高度飙升"},{"key":"B","val":"山谷风可能导致航线偏移"},{"key":"C","val":"GPS信号可能被山体遮挡"},{"key":"D","val":"山区永远无风更安全"}]', 2, 'ABC', '山区地形产生的各种风效应反而比平地更复杂危险。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些情况可能导致无人机"炸机"?', '[{"key":"A","val":"电池电压突然降至3.0V以下"},{"key":"B","val":"在信号盲区飞行"},{"key":"C","val":"返航高度低于沿途最高建筑"},{"key":"D","val":"起飞前未校准罗盘"}]', 2, 'ABCD', '四项都是炸机的高频原因,覆盖电源、通信、规划和传感器校准。', 2, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机电池储存,以下说法正确的有?', '[{"key":"A","val":"应在干燥阴凉处存放"},{"key":"B","val":"长期存放应保持3.7-3.9V储存电压"},{"key":"C","val":"可叠放挤压"},{"key":"D","val":"远离火源和高温源"}]', 2, 'ABD', '电池挤压会损坏内部电芯引发短路起火,严禁叠放。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"手动模式(M档)"下飞行员需要?', '[{"key":"A","val":"实时控制所有姿态参数"},{"key":"B","val":"不依赖GPS和气压计"},{"key":"C","val":"适合做穿越机竞速飞行"},{"key":"D","val":"新手最推荐"}]', 2, 'ABC', 'M档需要高度熟练才能操作,新手应先练姿态模式(P档)。', 2, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"被动安全措施"?', '[{"key":"A","val":"地理围栏"},{"key":"B","val":"失控保护"},{"key":"C","val":"自动返航"},{"key":"D","val":"驾驶员的操作技巧"}]', 2, 'ABC', '被动安全是设备自带功能,驾驶员技巧属于主动安全范畴。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机图传画面出现延迟和雪花干扰时,以下操作正确的有?', '[{"key":"A","val":"降低飞行高度"},{"key":"B","val":"远离干扰源"},{"key":"C","val":"切换至5.8GHz频段"},{"key":"D","val":"猛推油门快速飞回"}]', 2, 'ABC', '图传异常时猛推油门增加飞行风险,应稳步返航同时排查干扰。', 2, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于气象云图在无人机飞行中的应用,说法正确的有?', '[{"key":"A","val":"识别雷暴云团位置"},{"key":"B","val":"判断风切变区域"},{"key":"C","val":"精确显示风速大小"},{"key":"D","val":"辅助规划安全航线"}]', 2, 'ABD', '云图显示云层分布,风速需要结合其他气象数据或实地测量。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机螺旋桨的维护保养包括?', '[{"key":"A","val":"每次飞行后检查有无裂纹"},{"key":"B","val":"定期用酒精清洁桨叶表面"},{"key":"C","val":"轻微损伤可用胶带粘贴继续用"},{"key":"D","val":"多飞几个月后整套更换"}]', 2, 'ABD', '桨叶任何损坏都必须更换,哪怕很轻微,胶带无法修复动平衡。', 1, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行"航线规划"的说法正确的有?', '[{"key":"A","val":"规划前应查询空域信息"},{"key":"B","val":"应考虑电池续航留足安全余量"},{"key":"C","val":"城市飞行可随便规划不需要管建筑"},{"key":"D","val":"避开无线电信号盲区"}]', 2, 'ABD', '城市飞行恰恰需要更细致的建筑避让规划。', 1, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机发生"单侧电机失效"时的应急策略有?', '[{"key":"A","val":"立即降低高度寻找迫降点"},{"key":"B","val":"保持航向稳定不要猛打舵"},{"key":"C","val":"如果是六旋翼及以上可继续平稳降落"},{"key":"D","val":"立即切换到自动模式"}]', 2, 'ABC', '电机失效时自动模式无法补偿推力损失,反而需要手动稳定姿态迫降。', 3, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些文件是民用无人机驾驶员应当熟悉的法规文件?', '[{"key":"A","val":"《民用无人驾驶航空器系统驾驶员管理暂行规定》"},{"key":"B","val":"《民用无人驾驶航空器系统实名登记管理规定》"},{"key":"C","val":"《无人驾驶航空器运行管理条例》"},{"key":"D","val":"《道路交通法》"}]', 2, 'ABC', '道路交通法与无人机飞行空域管理无直接关联。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在执行有偿飞行任务时需要注意?', '[{"key":"A","val":"持有相应等级的执照"},{"key":"B","val":"作业前签订安全协议"},{"key":"C","val":"为无人机购买第三者责任险"},{"key":"D","val":"可以不告知客户风险直接开工"}]', 2, 'ABC', '必须如实告知客户飞行风险并签署免责协议。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机实名登记,以下说法正确的有?', '[{"key":"A","val":"空机重量250克以上需要登记"},{"key":"B","val":"登记信息发生变更应及时更新"},{"key":"C","val":"登记码应贴在机身明显位置"},{"key":"D","val":"飞机转让后自动过户不用重新登记"}]', 2, 'ABC', '转让需新所有者重新实名登记。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于A2类无人机执照的描述正确的有?', '[{"key":"A","val":"适用于150kg以下视距内运行无人机"},{"key":"B","val":"持有人可飞行至150米以下真高"},{"key":"C","val":"需要通过理论和实操考试"},{"key":"D","val":"可在管制机场附近自由飞行"}]', 2, 'ABC', '任何等级执照在管制机场附近飞行都需要额外申请,不是执照赋予的特权。', 2, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生事故后,驾驶员应当?', '[{"key":"A","val":"立即采取措施防止二次事故"},{"key":"B","val":"保护现场不得擅自移动残骸"},{"key":"C","val":"48小时内报告当地民航管理部门"},{"key":"D","val":"自行联系保险公司理赔不用报案"}]', 2, 'ABC', '发生事故必须向民航管理部门报案,保险理赔是后续流程。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于电子围栏(Geofence)的设置边界,说法正确的有?', '[{"key":"A","val":"应包含整个计划飞行区域"},{"key":"B","val":"边界外扩留足安全距离"},{"key":"C","val":"可以设成任意形状"},{"key":"D","val":"不需要考虑禁飞区"}]', 2, 'ABC', '电子围栏恰恰是为了明确禁飞区边界,设置时必须纳入法定禁飞区。', 2, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控的"IMU(惯性测量单元)"包括哪些传感器?', '[{"key":"A","val":"三轴陀螺仪"},{"key":"B","val":"三轴加速度计"},{"key":"C","val":"三轴磁力计"},{"key":"D","val":"单轴气压计"}]', 2, 'ABC', 'IMU通常由三轴陀螺+三轴加速度计+三轴磁力计共9轴组成,气压计是独立高度传感器。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于穿越机(FPV)的特点描述正确的有?', '[{"key":"A","val":"机身轻便灵活"},{"key":"B","val":"飞行速度快(可达100km/h以上)"},{"key":"C","val":"通常使用模拟图传"},{"key":"D","val":"自动避障功能很强"}]', 2, 'ABC', '穿越机为追求速度牺牲了很多辅助功能,避障能力非常弱甚至没有。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在严寒环境下飞行需要采取的措施有?', '[{"key":"A","val":"起飞前预热电池"},{"key":"B","val":"使用低温专用电池"},{"key":"C","val":"减少单次飞行时长"},{"key":"D","val":"降低飞行速度以保暖"}]', 2, 'ABC', '飞行速度与电池温度无直接关系,主要靠预热和缩短时长。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"首飞"的说法正确的有?', '[{"key":"A","val":"应选择开阔无障碍物场地"},{"key":"B","val":"先低空悬停再逐步升高"},{"key":"C","val":"首飞时不建议挂载相机等载荷"},{"key":"D","val":"可以直接开启全自动航线"}]', 2, 'ABC', '首飞必须手动在低高度小范围内测试各项功能,绝不能直接全自动。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池"存储电压",以下说法正确的有?', '[{"key":"A","val":"单节3.7-3.9V是最佳存储电压"},{"key":"B","val":"高于4.2V长期存放会鼓包"},{"key":"C","val":"低于3.0V长期存放会损坏电芯"},{"key":"D","val":"可以满电存放一个月以上"}]', 2, 'ABC', '锂电池不能长期满电存放,一个月以上必须放电至储存电压。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控固件升级前应?', '[{"key":"A","val":"备份当前固件版本"},{"key":"B","val":"确认电池电量充足(建议50%以上)"},{"key":"C","val":"检查升级包完整性和对应型号"},{"key":"D","val":"升级过程中断电也不影响"}]', 2, 'ABC', '升级过程中断电可能导致飞控变砖无法启动,必须保证供电稳定。', 1, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"云台"的作用描述正确的有?', '[{"key":"A","val":"保持相机画面稳定"},{"key":"B","val":"隔离机身震动传递到相机"},{"key":"C","val":"可以精确控制相机俯仰和偏航"},{"key":"D","val":"增加无人机整体升力"}]', 2, 'ABC', '云台只是稳定和控制相机姿态,不产生任何升力。', 1, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"无头模式(Headless)"下,以下说法正确的有?', '[{"key":"A","val":"航向由遥控器方向决定而非机头方向"},{"key":"B","val":"适合新手避免方向混乱"},{"key":"C","val":"GPS信号差时可用"},{"key":"D","val":"适合高速穿越飞行"}]', 2, 'AB', '无头模式依赖GPS或罗盘,GPS差时不可用;高速穿越时需要精确控制机头方向,无头模式反而危险。', 3, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"失速(Stall)",以下说法正确的有?', '[{"key":"A","val":"固定翼在迎角过大时发生"},{"key":"B","val":"多旋翼不会失速"},{"key":"C","val":"表现为升力急剧下降"},{"key":"D","val":"直升机旋翼也会失速"}]', 2, 'ACD', '多旋翼实际上也会失速(某旋翼角速度超过物理极限),虽然与固定翼表现不同但本质都是失去升力。', 3, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"机载传感器"?', '[{"key":"A","val":"GPS接收机"},{"key":"B","val":"气压高度计"},{"key":"C","val":"视觉避障模块"},{"key":"D","val":"地面基站接收机"}]', 2, 'ABC', '地面基站是地面设备,不属于机载。', 1, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行前应确认"作业许可"的情况包括?', '[{"key":"A","val":"空域管制部门是否批准"},{"key":"B","val":"地面场地所有者是否同意"},{"key":"C","val":"作业区域是否有法律限制"},{"key":"D","val":"客户是否付清全款"}]', 2, 'ABC', '商业作业中客户付款是商务事项,不属于"作业许可"的安全合规范畴。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池放电倍率,以下说法正确的有?', '[{"key":"A","val":"C2表示持续2小时放电完毕"},{"key":"B","val":"高C倍率电池瞬间爆发力强"},{"key":"C","val":"穿越机通常需要高C倍率电池"},{"key":"D","val":"C倍率越大电池续航越长"}]', 2, 'ABC', 'C倍率是放电能力指标,与续航时间无直接关系,容量才决定续航。', 2, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"姿态模式(P档)"下,驾驶员操作的是?', '[{"key":"A","val":"飞行姿态(俯仰/滚转/偏航)"},{"key":"B","val":"GPS定位"},{"key":"C","val":"气压高度"},{"key":"D","val":"直接控制电机转速"}]', 2, 'A', 'P档驾驶员只控姿态,位置和高度由飞控自动锁定稳定。D是M档的操作。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行前"指南针校准"的说法正确的有?', '[{"key":"A","val":"每次更换起飞点都建议重新校准"},{"key":"B","val":"校准应远离金属物体"},{"key":"C","val":"校准不成功禁止起飞"},{"key":"D","val":"手机上操作即可无需看飞机"}]', 2, 'ABC', '校准需要观察飞机指示灯状态或App提示,不能只看手机。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在城市"低空公共空域"飞行时,应遵守?', '[{"key":"A","val":"不得低于建筑物顶部"},{"key":"B","val":"避开人员密集区域上空"},{"key":"C","val":"飞行高度一般不超过50米"},{"key":"D","val":"可随意在楼群中穿梭"}]', 2, 'ABC', '城市低空飞行必须沿规划航线,严禁随意穿梭楼群。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机的"安全余油/余电"原则,以下说法正确的有?', '[{"key":"A","val":"应预留能返回起飞点的电量"},{"key":"B","val":"再额外预留20%电量余量"},{"key":"C","val":"最后10%电量才开始返航"},{"key":"D","val":"电量不足可就近迫降"}]', 2, 'ABD', '应该在电量足够返航时就开始返航,绝不能等只剩10%才启动返航(风阻等可能消耗更多)。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"图传频段"的说法正确的有?', '[{"key":"A","val":"2.4GHz穿墙能力强但易受WiFi干扰"},{"key":"B","val":"5.8GHz带宽宽干扰少但穿墙弱"},{"key":"C","val":"两者可以自由切换"},{"key":"D","val":"720P分辨率必须用5.8GHz"}]', 2, 'ABC', '分辨率与频段无关,2.4GHz也可传高清画面,只是抗干扰不同。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"无GPS信号"的环境中(如室内),以下说法正确的有?', '[{"key":"A","val":"无法使用自动返航功能"},{"key":"B","val":"姿态模式仍可用"},{"key":"C","val":"可以精确悬停在空间某点"},{"key":"D","val":"可以用视觉定位补充"}]', 2, 'ABD', '无GPS时气压计和IMU仍可维持姿态,但无法精确空间定位,会缓慢漂移。', 3, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机驾驶员"视距保持",以下做法正确的有?', '[{"key":"A","val":"始终让无人机保持在视线中央"},{"key":"B","val":"背后有反光板时注意目视盲区"},{"key":"C","val":"远距离飞行时可借助望远镜"},{"key":"D","val":"天气好时可以完全依赖FPV画面"}]', 2, 'ABC', 'FPV画面可能延迟或断链,驾驶员必须始终保持目视接触作为备份。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"避障系统"的说法正确的有?', '[{"key":"A","val":"光学避障在逆光下可能失效"},{"key":"B","val":"TOF避障测距远精度高"},{"key":"C","val":"超声波避障对细电线检测力弱"},{"key":"D","val":"任何避障系统都有探测盲区"}]', 2, 'ABCD', '四种说法都正确,避障系统各有优劣但都有局限性。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"作业记录"应当包含哪些信息?', '[{"key":"A","val":"起飞与降落时间"},{"key":"B","val":"飞行区域坐标"},{"key":"C","val":"使用的无人机编号"},{"key":"D","val":"驾驶员当天心情"}]', 2, 'ABC', '心情不属于客观记录范畴,但前三项都是合规性和追溯性要求。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"固定翼无人机"的特点说法正确的有?', '[{"key":"A","val":"巡航效率高续航远"},{"key":"B","val":"需要跑道或弹射起飞"},{"key":"C","val":"可以在空中长时间悬停"},{"key":"D","val":"适合大范围巡检任务"}]', 2, 'ABD', '固定翼无法悬停,这是旋翼机的独有优势。', 1, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"安全绳/引导绳"的使用,以下说法正确的有?', '[{"key":"A","val":"可用于限制飞行范围"},{"key":"B","val":"适合在窄小空间作业"},{"key":"C","val":"飞行时绳长需要足够松弛"},{"key":"D","val":"可以完全替代电子围栏"}]', 2, 'ABC', '引导绳受空间限制,无法替代电子围栏的大范围空域限制功能。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生"部分桨叶脱落"时,应采取的紧急措施有?', '[{"key":"A","val":"迅速降低高度"},{"key":"B","val":"保持油门平稳不要乱动"},{"key":"C","val":"观察飞机是否可以稳住"},{"key":"D","val":"继续完成剩余任务"}]', 2, 'ABC', '桨叶脱落意味着动力严重失衡,绝不可能继续完成任务,必须紧急迫降。', 2, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"地面站"功能的说法正确的有?', '[{"key":"A","val":"可进行航线规划"},{"key":"B","val":"可实时显示飞行数据"},{"key":"C","val":"可远程控制无人机飞行"},{"key":"D","val":"可以代替驾驶员目视监控"}]', 2, 'ABC', '地面站不能代替目视监控,驾驶员仍需保持对无人机的视觉观察。', 1, 2, 1081);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"整机重量",以下说法正确的有?', '[{"key":"A","val":"起飞重量含电池和载荷"},{"key":"B","val":"自重不含电池"},{"key":"C","val":"多载电池可以增加续航"},{"key":"D","val":"载荷越重飞行越稳"}]', 2, 'BC', '起飞重量的定义因机型而略有差异,但"自重不含电池"是正确的行业惯例;C中更多电池在一定范围内确实增加续航;D中载荷过重反而可能让飞行不稳定。', 3, 2, 1082);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"风力强劲"的天气下飞行,以下说法正确的有?', '[{"key":"A","val":"悬停会明显漂移"},{"key":"B","val":"航线飞行会偏离预设路径"},{"key":"C","val":"风速可能超过抗风等级无法起飞"},{"key":"D","val":"顺风飞行增加续航"}]', 2, 'ABCD', '四种现象都是强风下飞行的典型表现。', 2, 2, 1083);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"典型应用场景"?', '[{"key":"A","val":"电力线路巡检"},{"key":"B","val":"农业植保作业"},{"key":"C","val":"娱乐自拍拍摄"},{"key":"D","val":"民航客机运输"}]', 2, 'ABC', '民航运输由载人飞机完成,无人机暂不具备该能力。', 1, 2, 1084);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"遥控器与飞机的通信链路",以下说法正确的有?', '[{"key":"A","val":"受天线摆放方向影响"},{"key":"B","val":"距离越远信号越弱"},{"key":"C","val":"中间有金属障碍物会衰减"},{"key":"D","val":"雨天比晴天信号好"}]', 2, 'ABC', '雨天对无线电信号有一定衰减,不会更好。', 1, 2, 1085);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机完成一次长距离飞行后,应检查的项目有?', '[{"key":"A","val":"电池是否有鼓包或发热异常"},{"key":"B","val":"螺旋桨是否正常磨损"},{"key":"C","val":"电机温度是否过高"},{"key":"D","val":"遥控器屏幕是否有划痕"}]', 2, 'ABC', '遥控器屏幕划痕属于外观问题,不影响飞行安全。', 1, 2, 1086);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"集群无人机"的说法正确的有?', '[{"key":"A","val":"多架飞机协同执行任务"},{"key":"B","val":"需要精密的编队控制"},{"key":"C","val":"常用于灯光秀表演"},{"key":"D","val":"单机飞行能力足够时不需要集群"}]', 2, 'ABCD', '四种说法都正确,集群是多机协同的高级应用场景。', 2, 2, 1087);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在飞行中"丢失无人机视线"后,正确的应对步骤有?', '[{"key":"A","val":"立刻停止所有操作冷静观察"},{"key":"B","val":"查看FPV画面确认方向"},{"key":"C","val":"启动返航功能让飞机自行回来"},{"key":"D","val":"猛推油门快速搜索"}]', 2, 'ABC', '视线丢失后猛推油门会让飞机快速飞走更难找,应该稳住姿态再找。', 2, 2, 1088);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"风"的影响,以下说法正确的有?', '[{"key":"A","val":"逆风增加能耗缩短续航"},{"key":"B","val":"顺风降低能耗增加续航"},{"key":"C","val":"侧风会让飞机水平漂移"},{"key":"D","val":"阵风对飞行没有影响"}]', 2, 'ABC', '阵风是风向风速急剧变化,比恒定风危险得多,会导致姿态剧烈波动。', 1, 2, 1089);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"紧急迫降"时,以下操作正确的有?', '[{"key":"A","val":"选择地面较软的区域迫降"},{"key":"B","val":"避免迫降到有人区域"},{"key":"C","val":"接近地面时减速缓冲"},{"key":"D","val":"迫降后立即切断动力"}]', 2, 'ABCD', '四项都是迫降的正确操作原则。', 2, 2, 1090);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"执照等级"的说法正确的有?', '[{"key":"A","val":"A1类适用于大型无人机"},{"key":"B","val":"A2类需年满16岁以上"},{"key":"C","val":"A3类为最低级别执照"},{"key":"D","val":"所有级别都需要实操考试"}]', 2, 'ABCD', '民航局规定的A1/A2/A3/C1/C2等级体系中,各等级对年龄、机型、考试要求都有明确规定。', 2, 2, 1091);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自动巡航"功能,以下说法正确的有?', '[{"key":"A","val":"沿预设航线自动飞行"},{"key":"B","val":"可设置飞行速度和高度"},{"key":"C","val":"飞行中可随时接管手动控制"},{"key":"D","val":"必须保持全程卫星信号"}]', 2, 'ABC', '自动巡航可以在无GPS的情况下依靠视觉导航等方式继续,但精度会下降。', 2, 2, 1092);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池"过充"会导致?', '[{"key":"A","val":"电芯内部发热"},{"key":"B","val":"鼓包变形"},{"key":"C","val":"容量永久性下降"},{"key":"D","val":"增加下次放电续航"}]', 2, 'ABC', '过充只会损坏电池降低续航,绝不会增加续航。', 1, 2, 1093);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些做法可以延长无人机电池寿命?', '[{"key":"A","val":"避免过充过放"},{"key":"B","val":"每次使用后及时降到存储电压"},{"key":"C","val":"使用原厂充电器"},{"key":"D","val":"充满后长期插着充电"}]', 2, 'ABC', '充满后继续充电会过充损伤电芯,必须及时断开。', 1, 2, 1094);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"夜间飞行"时应特别注意?', '[{"key":"A","val":"无人机必须有照明指示灯"},{"key":"B","val":"驾驶员需要更好的目视能力"},{"key":"C","val":"应增加飞行高度保持更远视野"},{"key":"D","val":"地面障碍物在夜间更难识别"}]', 2, 'ABCD', '夜间飞行的四项注意点都正确。', 2, 2, 1095);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"飞控参数调整",以下说法正确的有?', '[{"key":"A","val":"增益过高会导致飞行震荡"},{"key":"B","val":"增益过低会导致响应迟钝"},{"key":"C","val":"应根据机型特性调整"},{"key":"D","val":"出厂参数就是最优不需要动"}]', 2, 'ABC', '出厂参数是通用值,实际使用应根据负载、桨叶、飞控硬件微调。', 2, 2, 1096);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"三原色指示灯"的含义,说法正确的有?', '[{"key":"A","val":"红色常亮通常表示低电量或告警"},{"key":"B","val":"绿色闪烁通常表示GPS搜星中"},{"key":"C","val":"蓝色常亮通常表示已连接遥控器"},{"key":"D","val":"黄色常亮表示指南针校准中"}]', 2, 'ABCD', '不同厂家指示灯语义略有差异,但四项描述都是典型含义。', 2, 2, 1097);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行前检查"遥控器"时,应确认?', '[{"key":"A","val":"摇杆是否居中回中"},{"key":"B","val":"屏幕电量是否充足"},{"key":"C","val":"开关拨片位置是否正确"},{"key":"D","val":"外壳是否有划痕"}]', 2, 'ABC', '外壳划痕不影响功能,前三项才是功能性检查点。', 1, 2, 1098);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"飞控自检"的说法正确的有?', '[{"key":"A","val":"通电后飞控会自动检测传感器"},{"key":"B","val":"检测失败会报警提示"},{"key":"C","val":"自检全部通过才能解锁电机"},{"key":"D","val":"自检可以跳过直接飞行"}]', 2, 'ABC', '跳过自检等于放弃安全保护,飞控设计上不允许。', 1, 2, 1099);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机"飞行日志"中应包含的核心数据有?', '[{"key":"A","val":"GPS坐标轨迹"},{"key":"B","val":"电池电压曲线"},{"key":"C","val":"飞行模式切换记录"},{"key":"D","val":"驾驶员心率变化"}]', 2, 'ABC', '驾驶员心率不属于无人机机载日志范畴,是驾驶员生理数据。', 1, 2, 1100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机起飞前的校准工作通常包括?', '[{"key":"A","val":"陀螺仪校准"},{"key":"B","val":"加速度计校准"},{"key":"C","val":"磁力计校准"},{"key":"D","val":"桨叶平衡校准"}]', 2, 'ABC', 'AOPA强调飞控三校准(陀螺/加速度/磁力计),桨叶平衡属维护范畴而非每次起飞前都做。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA执照持有人可以执行的飞行操作包括?', '[{"key":"A","val":"视距内飞行"},{"key":"B","val":"超视距飞行"},{"key":"C","val":"夜间飞行(有条件)"},{"key":"D","val":"管制空域飞行(需申请)"}]', 2, 'ACD', '持AOPA视距内执照不能直接超视距,需额外考试;管制空域需单独申请许可。', 2, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于多旋翼无人机的"模式切换",以下说法正确的有?', '[{"key":"A","val":"从P档切M档前应确认周围空旷"},{"key":"B","val":"紧急情况下可切P档稳定姿态"},{"key":"C","val":"模式切换需要同时按两个开关"},{"key":"D","val":"可以在高速飞行中随意切换"}]', 2, 'AB', 'AOPA标准要求模式切换应在静止/悬停时进行,高速切换有失控风险。', 2, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行中"失去GPS信号"后的正确操作流程是?', '[{"key":"A","val":"迅速切换到姿态模式"},{"key":"B","val":"观察周围环境避免碰撞"},{"key":"C","val":"判断风力状况决定是否返航"},{"key":"D","val":"启动手动模式(如具备)"}]', 2, 'ABC', '无GPS时P档自动切换姿态模式,驾驶员只需稳住并返航,不必切M档(M档反增风险)。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下关于AOPA考试实操部分的说法正确的有?', '[{"key":"A","val":"包括8字飞行航线"},{"key":"B","val":"包括定点悬停"},{"key":"C","val":"包括应急返航"},{"key":"D","val":"包括夜间盲飞"}]', 2, 'ABC', 'AOPA实操标准包括8字、定点悬停、应急返航等,不考夜间盲飞。', 2, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"摇杆灵敏度"设置时应考虑?', '[{"key":"A","val":"驾驶员个人习惯"},{"key":"B","val":"无人机机型大小"},{"key":"C","val":"载荷重量"},{"key":"D","val":"遥控器颜色"}]', 2, 'ABC', 'AOPA原则:灵敏度应匹配机型和载荷,根据个人习惯微调以达到操作舒适。', 1, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下哪些是AOPA推荐的飞行前检查项目?', '[{"key":"A","val":"无人机电量检查"},{"key":"B","val":"遥控器电量检查"},{"key":"C","val":"起降点周边环境检查"},{"key":"D","val":"飞机外观完整性检查"}]', 2, 'ABCD', 'AOPA强调"六查原则",电量、遥控器、环境、外观都是必查项。', 1, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"定向天线",以下说法正确的有?', '[{"key":"A","val":"发射增益比全向天线大"},{"key":"B","val":"方向性强,适合远距离图传"},{"key":"C","val":"操作时需要对准无人机方向"},{"key":"D","val":"可以随便摆放不用管方向"}]', 2, 'ABC', '定向天线增益高但需要始终对准无人机方向,否则信号会掉。', 1, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"超视距(BVLOS)飞行"的要求包括?', '[{"key":"A","val":"额外的执照等级(如A2以上)"},{"key":"B","val":"通信数据链加密"},{"key":"C","val":"实时位置上报民航"},{"key":"D","val":"只能用手动飞行模式"}]', 2, 'ABC', 'BVLOS要求通信链路加密和位置上报,但可以用自动巡航模式,不限于手动。', 2, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下关于AOPA执照有效期的说法正确的有?', '[{"key":"A","val":"视距内执照长期有效(无年审)"},{"key":"B","val":"超视距执照需定期复审"},{"key":"C","val":"每24个月需累计飞行10小时以保持资质"},{"key":"D","val":"逾期可直接续期不用考试"}]', 2, 'AB', '现行规定视距内长期有效,超视距需复审,逾期过久可能需要重新考试。', 2, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"大风天气"下起降的注意事项有?', '[{"key":"A","val":"逆风起降保持航向稳定"},{"key":"B","val":"起飞时不要推全油门"},{"key":"C","val":"降落前多留一点高度余量"},{"key":"D","val":"风太大时宁可改日飞行"}]', 2, 'ABCD', '大风下起降风险高,四项都是AOPA推荐的应对策略。', 2, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试中"8字飞行"的标准要求包括?', '[{"key":"A","val":"沿两个圆形航迹完成S形飞行"},{"key":"B","val":"高度偏差不超过规定范围"},{"key":"C","val":"全程不得出指定空域"},{"key":"D","val":"必须用手动模式完成"}]', 2, 'ABC', '8字飞行考核的是驾驶员姿态操控能力,但具体模式要求看当年考试大纲。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨"的正确使用,以下说法正确的有?', '[{"key":"A","val":"正反桨不能混用"},{"key":"B","val":"桨叶稍有划痕也应更换"},{"key":"C","val":"安装时注意定位标记"},{"key":"D","val":"不同品牌桨叶可随意互换"}]', 2, 'ABC', '桨叶规格(直径、螺距、安装孔)必须匹配才能互换,不是所有品牌都兼容。', 1, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"气象常识"包括?', '[{"key":"A","val":"风向风速识别"},{"key":"B","val":"云系与天气变化判断"},{"key":"C","val":"气温海拔关系"},{"key":"D","val":"气象雷达图解读"}]', 2, 'ABCD', 'AOPA气象部分覆盖风、云、温、雷达四方面。', 2, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"密集楼群"中飞行时,正确的操作有?', '[{"key":"A","val":"降低飞行速度增加反应时间"},{"key":"B","val":"始终保持与建筑的安全距离"},{"key":"C","val":"利用FPV画面辅助目视判断"},{"key":"D","val":"为了拍好照片快速穿梭"}]', 2, 'ABC', '楼群飞行必须保守操作,快速穿梭极易撞楼。', 1, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA要求驾驶员"飞行前报告"的内容包括?', '[{"key":"A","val":"飞行时间和地点"},{"key":"B","val":"无人机型号和编号"},{"key":"C","val":"驾驶员姓名和执照号"},{"key":"D","val":"携带的私人水杯颜色"}]', 2, 'ABC', '私人水杯不属于合规报告的必要内容,其余三项均是。', 1, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"失控"的正确处理方式,AOPA推荐?', '[{"key":"A","val":"立即切换自动返航"},{"key":"B","val":"尝试短暂切换手动模式恢复控制"},{"key":"C","val":"保持冷静等待失控保护启动"},{"key":"D","val":"扔掉遥控器放弃"}]', 2, 'ABC', 'AOPA原则:先自动返航→再手动尝试→最后等失控保护,绝不能放弃。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"飞行日志"在AOPA体系中的作用包括?', '[{"key":"A","val":"执照复审的飞行时长证明"},{"key":"B","val":"事故调查依据"},{"key":"C","val":"驾驶员技能评估参考"},{"key":"D","val":"销售凭证"}]', 2, 'ABC', '飞行日志与销售无关。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业"的额外要求有?', '[{"key":"A","val":"购买第三者责任险"},{"key":"B","val":"作业区域风险评估"},{"key":"C","val":"为客户签署安全告知书"},{"key":"D","val":"可以无证作业只要没人发现"}]', 2, 'ABC', '无证商业作业违法,一旦查处执照吊销+罚款。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机的"磁罗盘干扰校验"应在什么环境下进行?', '[{"key":"A","val":"开阔的水泥地面广场"},{"key":"B","val":"远离高压线和金属构筑物"},{"key":"C","val":"空旷的草地中央"},{"key":"D","val":"电梯井或金属楼梯间"}]', 2, 'ABC', '校准必须远离金属,电梯井是最差环境。', 1, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行区域规划",以下说法正确的有?', '[{"key":"A","val":"应提前查询公开的禁飞区地图"},{"key":"B","val":"靠近机场5公里以内需要A1级以上执照"},{"key":"C","val":"完全封闭空域禁止任何飞行"},{"key":"D","val":"偏远山区可以不用查空域"}]', 2, 'ABC', '任何飞行前都必须查询空域状态,即使偏远山区也可能是军事禁区。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考试"对场地的要求有?', '[{"key":"A","val":"开阔无遮挡的开阔地"},{"key":"B","val":"场地半径至少50米"},{"key":"C","val":"地面平整无坑洼"},{"key":"D","val":"周围无人员活动"}]', 2, 'ABCD', 'AOPA实操考试场地标准:开阔、半径≥50m、平整、无人干扰。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于穿越机与航拍无人机的差异,AOPA的说法正确的有?', '[{"key":"A","val":"穿越机更强调速度和灵活性"},{"key":"B","val":"航拍无人机重视画质和稳定性"},{"key":"C","val":"两者操控方式完全相同"},{"key":"D","val":"穿越机通常不装GPS"}]', 2, 'ABD', '两者操控逻辑差异大,穿越机多用手动模式,航拍机多用GPS模式。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA要求驾驶员"飞行后"应做的事项有?', '[{"key":"A","val":"记录飞行时间和区域"},{"key":"B","val":"检查设备有无损坏"},{"key":"C","val":"及时给电池充电"},{"key":"D","val":"把遥控器电池取出来存放"}]', 2, 'ABCD', 'AOPA完整飞行流程:前检查→飞行→后记录+维护+整理,四项都是收尾工作。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"反接保护",以下说法正确的有?', '[{"key":"A","val":"防止电池正负极接反烧毁设备"},{"key":"B","val":"低端电调可能没有反接保护"},{"key":"C","val":"即使有保护也应仔细接线"},{"key":"D","val":"反接保护可以防住所有接错情况"}]', 2, 'ABC', '反接保护只防正负极反接,插反信号针等其他错误可能仍会损坏。', 2, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试覆盖的法规内容包括?', '[{"key":"A","val":"《民用无人驾驶航空器系统驾驶员管理暂行规定》"},{"key":"B","val":"《民用航空法》相关章节"},{"key":"C","val":"当地省级空域管理办法"},{"key":"D","val":"《消费者权益保护法》"}]', 2, 'ABC', '消保法与飞行空域管理无关,AOPA不考。', 2, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"强电磁环境"下飞行(如变电站附近),应注意?', '[{"key":"A","val":"保持远距离(至少50米)"},{"key":"B","val":"注意GPS信号可能被干扰"},{"key":"C","val":"指南针会受影响需重新校准"},{"key":"D","val":"飞控固件会自动补偿所有干扰"}]', 2, 'ABC', '飞控固件无法自动补偿强电磁干扰产生的所有影响,必须物理隔离。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA执照"升级考试"通常需要哪些前置条件?', '[{"key":"A","val":"持有当前等级执照满一定时间"},{"key":"B","val":"累计达到规定飞行时长"},{"key":"C","val":"通过更高等级的理论考试"},{"key":"D","val":"购买更高级的无人机"}]', 2, 'ABC', '升级不需要购买特定机型,持有任意符合规格的无人机即可。', 2, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"桨叶平衡",以下说法正确的有?', '[{"key":"A","val":"平衡好的桨叶振动小飞行稳"},{"key":"B","val":"桨叶出厂时已基本平衡"},{"key":"C","val":"轻微失衡可用胶带粘贴平衡"},{"key":"D","val":"严重失衡直接换新桨叶"}]', 2, 'ABCD', '桨叶平衡四原则:出厂初平衡→日常检查→微失衡可贴胶带→严重失衡换新。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA推荐的"安全防护"措施包括?', '[{"key":"A","val":"飞行区域设置警示标志"},{"key":"B","val":"保持周围无无关人员"},{"key":"C","val":"配备急救包"},{"key":"D","val":"购买无人机第三者责任险"}]', 2, 'ABCD', 'AOPA安全体系:物理防护→人员隔离→应急预案→保险兜底。', 1, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机的"电调(ESC)",以下说法正确的有?', '[{"key":"A","val":"负责根据飞控指令驱动电机"},{"key":"B","val":"将直流电池转换为三相交流电驱动无刷电机"},{"key":"C","val":"电调的持续电流应大于电机最大电流的1.5倍"},{"key":"D","val":"电调可以脱离飞控独立工作"}]', 2, 'ABC', '电调是执行机构,必须由飞控提供PWM信号才能工作,不能脱离飞控。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"未成年人飞行"的规定有?', '[{"key":"A","val":"未满14周岁不能考AOPA执照"},{"key":"B","val":"14-18岁需法定监护人书面同意"},{"key":"C","val":"未成年人可在成年人陪同下飞行微型机"},{"key":"D","val":"未成年人任何情况下不能飞行"}]', 2, 'ABC', 'AOPA对未成年人的分级规定:14岁以下无证飞行不行;14-18岁可考需监护人同意;微型机日常飞行有例外。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"GPS模块升级"的好处有?', '[{"key":"A","val":"搜星更快"},{"key":"B","val":"定位更精准(厘米级RTK)"},{"key":"C","val":"耗电量更低"},{"key":"D","val":"不受任何电磁干扰"}]', 2, 'AB', '升级GPS精度提高但功耗可能上升,电磁干扰无法通过升级完全消除。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试"视觉疲劳"相关要求是?', '[{"key":"A","val":"飞行时长超过30分钟应休息5分钟"},{"key":"B","val":"近视驾驶员必须佩戴眼镜或隐形眼镜"},{"key":"C","val":"飞行时可以戴墨镜"},{"key":"D","val":"疲劳后可继续飞但要慢一点"}]', 2, 'ABC', '疲劳驾驶是事故隐患,绝不能"慢一点"将就,必须休息后再飞。', 2, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行高度限制",以下说法正确的有?', '[{"key":"A","val":"真高120米是一般区域的最高飞行高度"},{"key":"B","val":"高度限制因区域和执照而异"},{"key":"C","val":"GPS绝对高度可能因地形起伏误导"},{"key":"D","val":"管制区域通常有专门的高度限制"}]', 2, 'ABCD', '高度限制是分层管理的,一般区120米、管制区特别审批、山区GPS高度要结合气压计。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行器维护保养"的建议包括?', '[{"key":"A","val":"每飞行10次检查一次桨叶"},{"key":"B","val":"定期给电机轴承上油"},{"key":"C","val":"飞控固件有新版本及时更新"},{"key":"D","val":"遥控器电池每半年更换一次"}]', 2, 'ABCD', 'AOPA维护四建议:桨叶10次查→电机定期润滑→固件保持最新→遥控器电池定期换。', 1, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"失去控制"时的"最后手段"是?', '[{"key":"A","val":"关闭遥控器让失控保护生效"},{"key":"B","val":"启动一键返航(如有GPS)"},{"key":"C","val":"硬切换手动模式尝试恢复"},{"key":"D","val":"撞向空旷草地迫降"}]', 2, 'ABD', 'C与A冲突:已经失控硬切手动可能加剧混乱,AOPA建议让飞机自主触发失控保护或直接一键返航。', 2, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行记录保存"的要求是?', '[{"key":"A","val":"至少保存24个月以上"},{"key":"B","val":"执照复审时可能被抽查"},{"key":"C","val":"商业作业的记录要求更久"},{"key":"D","val":"飞完直接删掉就行"}]', 2, 'ABC', '飞行记录是追溯和复审的凭证,绝不能随意删除。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图像传输距离"的说法正确的有?', '[{"key":"A","val":"距离越远信号越弱"},{"key":"B","val":"障碍物会显著缩短有效距离"},{"key":"C","val":"2.4GHz频段穿墙优于5.8GHz"},{"key":"D","val":"金属建筑不影响信号"}]', 2, 'ABC', '金属对无线电信号反射和吸收都极强,是最强的信号屏蔽源。', 2, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业审批"流程的建议步骤包括?', '[{"key":"A","val":"查询空域并申请临时飞行空域"},{"key":"B","val":"办理第三者责任保险"},{"key":"C","val":"作业前签署安全告知"},{"key":"D","val":"作业后提交飞行报告"}]', 2, 'ABCD', 'AOPA完整商业作业流程:空域申请→保险→安全告知→飞行报告。', 2, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试中的"定点悬停"要求有?', '[{"key":"A","val":"悬停在半径3米范围内"},{"key":"B","val":"保持高度偏差不超过1米"},{"key":"C","val":"时间持续不少于30秒"},{"key":"D","val":"可以用GPS辅助"}]', 2, 'AB', '定点悬停考核的是驾驶员姿态操控能力,通常不允许GPS定位辅助(关闭GPS自稳模式)。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞控固件更新",AOPA推荐?', '[{"key":"A","val":"更新前查看更新日志确认新功能"},{"key":"B","val":"备份旧固件以防出问题"},{"key":"C","val":"更新时确保电脑和飞机供电稳定"},{"key":"D","val":"可以在飞行途中无线更新"}]', 2, 'ABC', '固件更新必须在地面静止时进行,飞行中更新会导致飞控重启失控。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"飞行原理"部分包括?', '[{"key":"A","val":"升力、阻力、重力三力平衡"},{"key":"B","val":"旋翼拉力产生原理"},{"key":"C","val":"姿态角定义(俯仰/滚转/偏航)"},{"key":"D","val":"无人机机身材料力学"}]', 2, 'ABC', '材料力学不是AOPA飞行原理考核范围。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电池存放",AOPA标准是?', '[{"key":"A","val":"存放在干燥阴凉通风处"},{"key":"B","val":"远离火源和高温源"},{"key":"C","val":"单独存放避免短路"},{"key":"D","val":"可以叠放挤压节省空间"}]', 2, 'ABC', '电池严禁挤压叠放,物理损伤是起火隐患。', 1, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试中"应急迫降"场景的操作要点有?', '[{"key":"A","val":"迅速选择安全迫降点"},{"key":"B","val":"降低高度的同时保持姿态稳定"},{"key":"C","val":"接近地面时推杆缓冲"},{"key":"D","val":"迫降后立即切断动力"}]', 2, 'ABCD', 'AOPA应急迫降四步:选点→稳姿态降→推杆缓冲→断电。', 2, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图传天线角度",以下说法正确的有?', '[{"key":"A","val":"全向天线保持竖直向上效果最好"},{"key":"B","val":"定向天线应朝向无人机飞行方向"},{"key":"C","val":"天线方向始终要对准卫星"},{"key":"D","val":"可以随便放不影响"}]', 2, 'AB', '图传天线是地对空通信,对准无人机方向而非卫星;随便放信号会变差。', 1, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"驾驶员视力要求"是?', '[{"key":"A","val":"裸眼视力不低于0.5(含矫正)"},{"key":"B","val":"可以佩戴矫正眼镜"},{"key":"C","val":"色盲或色弱不影响飞行"},{"key":"D","val":"夜间飞行有额外视力要求"}]', 2, 'ABD', 'AOPA明确要求无色盲色弱,否则无法正确识别信号灯和色彩导航信息。', 1, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"云台",AOPA实操考试中?', '[{"key":"A","val":"云台保持画面稳定是评分项"},{"key":"B","val":"需要手动控制俯仰角变化"},{"key":"C","val":"云台故障可以跳过该考试项"},{"key":"D","val":"考生必须学会云台校准"}]', 2, 'ABD', '云台故障不可以跳过考试,需要修复后重考。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行事故报告"的时限要求是?', '[{"key":"A","val":"一般事故48小时内报告"},{"key":"B","val":"重大事故24小时内报告"},{"key":"C","val":"轻微财产损失可以不报"},{"key":"D","val":"必须口头+书面双报告"}]', 2, 'AB', 'AOPA现行规定:事故48小时内报告,重大事故缩短时限;任何事故都要报告,不是只有财产损失才报。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨动平衡"的说法正确的有?', '[{"key":"A","val":"好的动平衡飞行时几乎无振动"},{"key":"B","val":"不平衡会导致电机轴承过早损坏"},{"key":"C","val":"轻微划痕可以用砂纸打磨修复平衡"},{"key":"D","val":"不同桨叶型号可以混用"}]', 2, 'ABC', '混用不同型号桨叶会导致动平衡破坏,AOPA严格禁止。', 2, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线飞行"要求考生?', '[{"key":"A","val":"沿预设航线飞行不得偏离"},{"key":"B","val":"保持规定高度"},{"key":"C","val":"完成指定时间或距离"},{"key":"D","val":"想办法抄近路节省时间"}]', 2, 'ABC', '航线飞行考核必须严格沿航迹,抄近路属于作弊扣分。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"FPV第一视角"与目视飞行的差异,AOPA认为?', '[{"key":"A","val":"FPV更精准地操控穿越障碍物"},{"key":"B","val":"目视更有利于大范围姿态判断"},{"key":"C","val":"两者各有优势应灵活使用"},{"key":"D","val":"FPV可以完全代替目视"}]', 2, 'ABC', 'AOPA强制要求:FPV只是辅助,驾驶员必须始终保持目视接触作为安全备份。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"飞行员手册"中应该包含?', '[{"key":"A","val":"所使用无人机的操作手册摘要"},{"key":"B","val":"紧急情况处理流程图"},{"key":"C","val":"个人习惯的灵敏度设置记录"},{"key":"D","val":"每次飞行的详细日志"}]', 2, 'ABCD', '飞行员手册AOPA建议包含:机型操作要点+应急流程+个人设置+飞行日志。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电机"维护,以下说法正确的有?', '[{"key":"A","val":"定期清理电机上的灰尘和飞絮"},{"key":"B","val":"轴承发出异响时应更换电机"},{"key":"C","val":"电机发热属于正常现象不用管"},{"key":"D","val":"电机接线必须牢固防止虚接"}]', 2, 'ABD', '电机异常发热是过载或短路前兆,必须排查原因不能忽视。', 1, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"飞行区域安全评估"的考查内容包括?', '[{"key":"A","val":"识别起降点周围的障碍物"},{"key":"B","val":"评估周围人群活动情况"},{"key":"C","val":"预判可能出现的风力变化"},{"key":"D","val":"场地租金是否合理"}]', 2, 'ABC', '安全评估关注飞行安全相关因素,场地租金与安全无关。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"失控返航"的高度设置,AOPA的建议是?', '[{"key":"A","val":"高于航线沿途最高障碍物20米以上"},{"key":"B","val":"考虑返航过程中的风力影响"},{"key":"C","val":"确保起飞点周围无障碍阻挡"},{"key":"D","val":"设成最高高度(300米以上)就安全了"}]', 2, 'ABC', '不是越高越安全,过高会消耗更多电量导致返航没电,且高空中可能有其他飞行器干扰。', 2, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试"通信原理"理论部分覆盖?', '[{"key":"A","val":"无线电基本原理"},{"key":"B","val":"图传和控制链路频段划分"},{"key":"C","val":"电磁干扰来源与防护"},{"key":"D","val":"卫星通信原理"}]', 2, 'ABC', '卫星通信不是AOPA通信原理考核内容。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电调固件升级",以下说法正确的有?', '[{"key":"A","val":"可以提升电机响应速度"},{"key":"B","val":"修复已知bug"},{"key":"C","val":"不同品牌电调固件不能互刷"},{"key":"D","val":"电调升级可以让电池容量变大"}]', 2, 'ABC', '固件升级不改变硬件物理属性,电池容量不可能因为固件升级而改变。', 1, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"高度控制"的评分标准是?', '[{"key":"A","val":"定点悬停高度偏差±1米以内"},{"key":"B","val":"航线飞行高度偏差±2米以内"},{"key":"C","val":"爬升下降速度平稳无突变"},{"key":"D","val":"可以猛推油门快速爬升"}]', 2, 'ABC', '高度控制讲究平稳过渡,猛推油门会导致姿态突变被扣分。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"指南针"校准失败的常见原因,以下说法正确的有?', '[{"key":"A","val":"校准场地有大量金属"},{"key":"B","val":"周围有手机或其他电子设备"},{"key":"C","val":"校准时飞机旋转速度过快或过慢"},{"key":"D","val":"天气不好"}]', 2, 'ABC', '校准失败通常是环境干扰或操作不当,与天气无关(除非雷暴有强电磁活动)。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"教员执照"相对于普通执照的额外要求有?', '[{"key":"A","val":"累计飞行时长达到100小时以上"},{"key":"B","val":"持有AOPA管理的教员培训合格证书"},{"key":"C","val":"通过教学能力专项评估"},{"key":"D","val":"必须拥有超过5架不同型号的无人机"}]', 2, 'ABC', '教员执照不需要持有多架无人机,而是需要教学能力和飞行时长证明。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"风的影响",AOPA的说法正确的有?', '[{"key":"A","val":"逆风增加电机负载缩短续航"},{"key":"B","val":"顺风虽然省力但返航时消耗大"},{"key":"C","val":"侧风使飞机水平漂移"},{"key":"D","val":"无风天飞行最安全"}]', 2, 'ABCD', '四种关于风的影响都是AOPA气象模块强调的知识点。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"法律责任"部分覆盖?', '[{"key":"A","val":"无证飞行的处罚标准"},{"key":"B","val":"违规飞入管制区的后果"},{"key":"C","val":"事故后的报告义务"},{"key":"D","val":"合同纠纷民事诉讼程序"}]', 2, 'ABC', '合同纠纷属于商业民事范畴,AOPA不考。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"地面站软件"的功能,AOPA认为?', '[{"key":"A","val":"用于航线规划和任务设置"},{"key":"B","val":"实时监控飞行数据"},{"key":"C","val":"代替驾驶员的目视监控"},{"key":"D","val":"记录完整飞行日志"}]', 2, 'ABD', 'AOPA明确规定:地面站不能代替驾驶员的目视监控,驾驶员必须保持对飞机的直接观察。', 1, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"紧急下降"的动作要求有?', '[{"key":"A","val":"先确认下降区域无障碍物"},{"key":"B","val":"平稳降低油门不是猛减"},{"key":"C","val":"保持航向稳定不转向"},{"key":"D","val":"接近地面时推杆缓冲"}]', 2, 'ABCD', 'AOPA紧急下降四步法:确认→缓降→稳航向→缓冲着陆。', 2, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图传雪花"的常见原因,以下说法正确的有?', '[{"key":"A","val":"飞行距离过远信号弱"},{"key":"B","val":"周围有WiFi信号干扰"},{"key":"C","val":"天线摆放方向不对"},{"key":"D","val":"电池电量过低"}]', 2, 'ABC', '雪花是图传信号衰减的表现,与电池电量无关(除非低电压导致VTX功率不足)。', 1, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"低空经济发展趋势"的了解要求包括?', '[{"key":"A","val":"无人机在物流、巡检、植保中的应用"},{"key":"B","val":"城市低空基础设施建设"},{"key":"C","val":"载人飞行器(eVTOL)趋势"},{"key":"D","val":"低空经济的投资回报率精确计算"}]', 2, 'ABC', 'AOPA对低空经济考查应用场景认知,不考具体的投资回报率计算。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"解锁电机"的正确顺序,AOPA推荐?', '[{"key":"A","val":"先检查飞控状态指示灯"},{"key":"B","val":"确认GPS搜星数量足够"},{"key":"C","val":"确认周围空旷无人员"},{"key":"D","val":"先解锁再校准指南针"}]', 2, 'ABC', '解锁前所有校准必须完成,校准是解锁的前置条件不是解锁后再做。', 1, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线精度"的评分标准有?', '[{"key":"A","val":"允许偏离航线中心左右各3米"},{"key":"B","val":"关键转向点误差不超过5米"},{"key":"C","val":"高度保持在±1米以内"},{"key":"D","val":"可以沿航线外侧抄近路"}]', 2, 'ABC', '航线精度考核必须严格沿指定航迹飞行,不能抄近路。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行日志数据格式",AOPA说法正确的有?', '[{"key":"A","val":"DJI无人机使用通用的CSV或DAT格式"},{"key":"B","val":"日志数据可能被加密需专门软件解析"},{"key":"C","val":"不同品牌日志格式不统一"},{"key":"D","val":"日志数据永远无法被篡改"}]', 2, 'ABC', '日志数据在上传平台后可能被处理,但原始飞行日志具有一定的防篡改特性;说"永远无法篡改"太绝对。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"考核发证"的基本流程是?', '[{"key":"A","val":"完成规定的理论和实操课时"},{"key":"B","val":"通过理论考试(70分及格)"},{"key":"C","val":"通过实操考试(考官评估)"},{"key":"D","val":"填写领证申请并缴纳制证费"}]', 2, 'ABCD', 'AOPA完整流程:课时→理论考→实操考→领证申请。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"风切变"的危险表现,AOPA描述有?', '[{"key":"A","val":"高度瞬间大幅变化"},{"key":"B","val":"姿态剧烈晃动难以稳住"},{"key":"C","val":"空速骤减可能导致失速"},{"key":"D","val":"飞机自动升高100米以上"}]', 2, 'ABC', '风切变是风向风速瞬间剧变,最危险的是高度骤降和失速,不会自动升高100米。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试中"飞行区域识别"的考查内容包括?', '[{"key":"A","val":"看懂公开的空域分类地图"},{"key":"B","val":"识别禁区、限制区、开放区"},{"key":"C","val":"判断机场管制范围"},{"key":"D","val":"预测下一小时的天气变化"}]', 2, 'ABC', '天气预测是气象模块的内容,不是空域识别的考查范围。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨"安装方向,以下说法正确的有?', '[{"key":"A","val":"顺时针旋转电机用逆时针桨"},{"key":"B","val":"逆时针旋转电机用顺时针桨"},{"key":"C","val":"正反桨不能装反"},{"key":"D","val":"装反了也看不出来可以先飞"}]', 2, 'ABC', '装反桨叶会导致飞机无法起飞甚至炸机,起飞前自检必查。', 1, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考官"的基本要求有?', '[{"key":"A","val":"持有AOPA教员执照"},{"key":"B","val":"通过考官专项考核"},{"key":"C","val":"累计飞行时长不少于200小时"},{"key":"D","val":"必须是航空公司退休飞行员"}]', 2, 'ABC', '考官资格有明确的飞行时长和教员执照要求,不强制航空公司飞行员背景。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"无线电干扰"导致的故障,以下说法正确的有?', '[{"key":"A","val":"可能导致指南针数据跳变"},{"key":"B","val":"图传画面出现雪花或断链"},{"key":"C","val":"遥控器操作延迟或丢失"},{"key":"D","val":"电池电压突然降低"}]', 2, 'ABC', '电磁干扰影响无线电通信链路和指南针传感器,电池电压是独立物理属性不受干扰。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行后检查"的重点关注项有?', '[{"key":"A","val":"桨叶有无裂纹或磨损"},{"key":"B","val":"电机温度是否正常"},{"key":"C","val":"相机镜头是否完好"},{"key":"D","val":"机身是否有外部损伤"}]', 2, 'ABCD', 'AOPA飞行后检查四重点:桨叶→电机→相机→机身,全覆盖。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行高度与气压计"的关系,以下说法正确的有?', '[{"key":"A","val":"气压计测量的是相对大气压的高度"},{"key":"B","val":"天气变化会影响气压计读数"},{"key":"C","val":"起飞前应校准到起降点的气压基准"},{"key":"D","val":"室内气压计完全失效"}]', 2, 'ABC', '室内气压相对稳定,但不是完全失效,可能因密闭性导致读数缓慢漂移。', 2, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"飞行区域的障碍物规避"考查内容有?', '[{"key":"A","val":"识别电线杆、树木、建筑物等"},{"key":"B","val":"保持至少30米安全距离"},{"key":"C","val":"进入狭窄区域前评估可行性"},{"key":"D","val":"可以在高压电线下方飞行"}]', 2, 'ABC', 'AOPA明确禁止在高压电线正下方飞行(电磁干扰+坠落风险)。', 1, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"黑匣子数据",AOPA认为?', '[{"key":"A","val":"是事故调查的核心依据"},{"key":"B","val":"应随无人机一同妥善保存"},{"key":"C","val":"商业作业数据更要重视保存"},{"key":"D","val":"飞完可以直接删掉不影响"}]', 2, 'ABC', '黑匣子数据是追溯性和事故调查的关键证据,必须按规定保存。', 1, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"飞行力学"部分考查?', '[{"key":"A","val":"空气阻力随速度平方增长"},{"key":"B","val":"旋翼拉力与转速平方成正比"},{"key":"C","val":"载荷增加导致续航缩短"},{"key":"D","val":"无人机机身空气动力学设计"}]', 2, 'ABC', '机身空气动力学设计属于工程师范畴,不是驾驶员考试内容。', 2, 2, 1081);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"遥控器电池"的维护,以下说法正确的有?', '[{"key":"A","val":"应使用专用充电器或USB充电"},{"key":"B","val":"长期存放前充至60-70%"},{"key":"C","val":"发现外壳鼓包应立即更换"},{"key":"D","val":"可以用手机充电器随便充"}]', 2, 'ABC', '遥控器电池有特定的电压和充电曲线,随便充可能损坏。', 1, 2, 1082);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考试"使用的设备要求是?', '[{"key":"A","val":"考试中心提供的标准设备"},{"key":"B","val":"允许考生使用自己的无人机(需符合规格)"},{"key":"C","val":"设备必须经过检验合格"},{"key":"D","val":"可以自带任何品牌遥控器"}]', 2, 'BC', 'AOPA实操允许自带合格设备,但通常由考试中心提供以确保一致性。', 2, 2, 1083);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行前空域查询"的正确做法,AOPA推荐?', '[{"key":"A","val":"通过民航局空管系统查询"},{"key":"B","val":"使用合法合规的APP(如大疆AirHub)"},{"key":"C","val":"直接起飞后再看有没有管制"},{"key":"D","val":"咨询当地空管部门"}]', 2, 'ABD', 'AOPA强制要求飞行前必须查询空域,绝不能飞上去再看。', 1, 2, 1084);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"醉酒驾驶无人机"的处罚有?', '[{"key":"A","val":"吊销执照"},{"key":"B","val":"罚款"},{"key":"C","val":"构成危险驾驶罪的追究刑事责任"},{"key":"D","val":"口头警告就行"}]', 2, 'ABC', '醉酒驾驶无人机与醉酒驾驶机动车类似,有明确的处罚规定,严重可追刑责。', 2, 2, 1085);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"低电量返航"逻辑,AOPA的说法正确的有?', '[{"key":"A","val":"低电量返航阈值应根据任务距离动态设置"},{"key":"B","val":"最后一格电才启动返航太危险"},{"key":"C","val":"应预留20%以上的安全余量"},{"key":"D","val":"电量50%以下就应该考虑返航了"}]', 2, 'ABCD', '四项都是AOPA强调的电量管理原则——永远要留足安全余量。', 2, 2, 1086);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"无人机分类"包括?', '[{"key":"A","val":"按空机质量分(微型/轻型/小型/中型/大型)"},{"key":"B","val":"按用途分(航拍/植保/巡检等)"},{"key":"C","val":"按飞行时间分(短航/中航/长航时)"},{"key":"D","val":"按颜色分"}]', 2, 'ABC', '分类有法定标准(按空机质量)、常用标准(按用途/航时),颜色不影响分类。', 1, 2, 1087);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"固件升级失败"的应对,以下说法正确的有?', '[{"key":"A","val":"不要断电,保持充电线连接"},{"key":"B","val":"重新尝试刷入旧固件"},{"key":"C","val":"通过bootloader模式救砖"},{"key":"D","val":"直接砸掉买新的"}]', 2, 'ABC', '固件升级变砖有完整的救砖流程,砸掉浪费钱不是解决方案。', 1, 2, 1088);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"夜间飞行"的额外要求有?', '[{"key":"A","val":"无人机必须有有效航行灯"},{"key":"B","val":"驾驶员视力条件更严格"},{"key":"C","val":"地面应有辅助照明(起降点)"},{"key":"D","val":"夜间可以随便飞越不亮灯的建筑"}]', 2, 'ABC', '夜间飞行必须遵守更多安全限制,飞越建筑需要更多谨慎。', 2, 2, 1089);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电磁兼容(EMC)"的说法正确的有?', '[{"key":"A","val":"好的EMC设计能减少对周围设备的干扰"},{"key":"B","val":"同时能减少外界对无人机自身的干扰"},{"key":"C","val":"消费级无人机不需要考虑EMC"},{"key":"D","val":"遥控器信号与其他设备之间应有隔离"}]', 2, 'ABD', '消费级无人机也需要EMC设计,否则飞控会受干扰炸机。', 2, 2, 1090);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"教员课程"主要培养的能力包括?', '[{"key":"A","val":"飞行教学理论与方法"},{"key":"B","val":"应急处置教学能力"},{"key":"C","val":"安全管理和风险评估"},{"key":"D","val":"无人机维修保养技能"}]', 2, 'ABCD', 'AOPA教员课程覆盖教学、应急、安全、维护四大能力。', 2, 2, 1091);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行中突发故障"的处理原则,AOPA推荐?', '[{"key":"A","val":"先稳住姿态再排故"},{"key":"B","val":"故障严重时优先迫降保人"},{"key":"C","val":"可以冒险继续飞一段看看"},{"key":"D","val":"评估风险后选择迫降或返航"}]', 2, 'ABD', 'AOPA原则:故障不"试一下",评估风险后果断决策。', 2, 2, 1092);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线规划"的评分要点有?', '[{"key":"A","val":"合理利用空间不浪费电量"},{"key":"B","val":"避开所有障碍物"},{"key":"C","val":"转弯过渡流畅"},{"key":"D","val":"航线画得好看就行不关心实际可行性"}]', 2, 'ABC', '航线规划评分看实际可执行性,不只是好看。', 2, 2, 1093);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"数据链安全"的说法正确的有?', '[{"key":"A","val":"工业级无人机通常使用加密通信"},{"key":"B","val":"消费级2.4GHz频段易被干扰"},{"key":"C","val":"信号可能被非法截获"},{"key":"D","val":"飞控固件自带防火墙不会被攻破"}]', 2, 'ABC', '飞控固件的安全防护远不是企业级防火墙,专业黑客仍可能入侵。', 2, 2, 1094);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行员职业发展"的建议包括?', '[{"key":"A","val":"从视距内逐步升级到超视距"},{"key":"B","val":"积累足够飞行时长保持资质"},{"key":"C","val":"参与多样化作业项目开阔眼界"},{"key":"D","val":"多飞不怕炸机练胆子"}]', 2, 'ABC', '炸机是事故不是"练胆子"的途径,应通过模拟和安全练习提升。', 1, 2, 1095);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"云台抖动"的常见原因,以下说法正确的有?', '[{"key":"A","val":"机身振动过大传递到云台"},{"key":"B","val":"云台电机PID参数不合适"},{"key":"C","val":"云台配重不平衡"},{"key":"D","val":"相机镜头光圈太大"}]', 2, 'ABC', '光圈影响曝光不影响云台抖动,振动传递、PID、配重才是抖动的核心原因。', 2, 2, 1096);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业的报价合理性"有什么建议?', '[{"key":"A","val":"包含设备折旧成本"},{"key":"B","val":"包含人员安全保险成本"},{"key":"C","val":"包含空域申请时间成本"},{"key":"D","val":"打价格战压低利润吸引客户"}]', 2, 'ABC', 'AOPA建议商业报价覆盖合理成本,不鼓励恶性价格战。', 1, 2, 1097);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞控中安全冗余"的说法正确的有?', '[{"key":"A","val":"多旋翼多电机互为冗余"},{"key":"B","val":"某些飞控支持双IMU备份"},{"key":"C","val":"气压计和GPS高度计互为冗余"},{"key":"D","val":"所有传感器永远不会同时失效"}]', 2, 'ABC', '好的冗余设计降低故障概率但不能保证永远不出问题,极端情况下多个传感器可能同时受干扰失效。', 2, 2, 1098);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"选择题评分规则"是?', '[{"key":"A","val":"单选选错不得分"},{"key":"B","val":"多选题少选得一半分(有些题库)"},{"key":"C","val":"判断题选错扣分项"},{"key":"D","val":"答不完可以跳过不计分"}]', 2, 'ABD', 'AOPA考试通常采用"选错不得分"或"部分给分",不是扣分制。', 2, 2, 1099);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于AOPA执照"信息变更"的办理,以下说法正确的有?', '[{"key":"A","val":"执照上的姓名/地址变更需重新申请"},{"key":"B","val":"遗失损毁可申请补发"},{"key":"C","val":"补发需要提交遗失声明"},{"key":"D","val":"可以直接涂改不用重新办"}]', 2, 'ABC', '执照遗失损坏都有正规补发流程,严禁私自涂改。', 1, 2, 1100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍的"黄金构图法则"包括?', '[{"key":"A","val":"三分法(九宫格)"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"满屏填充"}]', 2, 'ABCD', 'UTC航拍培训强调多种构图技法组合运用,四项都是常用黄金法则。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍任务前的"素材规划"应考虑?', '[{"key":"A","val":"镜头景别(全景/中景/特写)"},{"key":"B","val":"拍摄角度(俯视/平视/仰视)"},{"key":"C","val":"运镜方式(推/拉/摇/移/跟)"},{"key":"D","val":"后期滤镜效果选择"}]', 2, 'ABC', 'UTC原则:拍摄前先规划机位和运镜,滤镜属于后期,不在现场拍摄规划内。', 1, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC航拍"ISO感光度"选择,以下说法正确的有?', '[{"key":"A","val":"光线充足时用低ISO(100-400)"},{"key":"B","val":"暗光下提高ISO但会有噪点"},{"key":"C","val":"DJI无人机建议不要超过ISO 800"},{"key":"D","val":"ISO越高画面越清晰"}]', 2, 'ABC', 'ISO高噪点多,不是更清晰。UTC航拍优先低ISO保证画质。', 1, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时的"ND滤镜"作用包括?', '[{"key":"A","val":"降低快门速度避免果冻效应"},{"key":"B","val":"让云层在运动中呈现丝滑效果"},{"key":"C","val":"提高相机感光度"},{"key":"D","val":"保持大光圈拍摄浅景深"}]', 2, 'ABD', 'ND镜减光,让你在强光下仍能用慢快门拍出动感,同时保持大光圈虚化效果。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC实操中的"环绕拍摄(Orbit)"技术要点有?', '[{"key":"A","val":"保持与被摄物等距飞行"},{"key":"B","val":"环绕速度均匀不要忽快忽慢"},{"key":"C","val":"相机始终对准被摄物"},{"key":"D","val":"绕圈半径必须小于5米"}]', 2, 'ABC', '环绕半径根据被摄对象大小灵活确定,没有固定5米限制。', 2, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍视频"后期调色"的常用软件有?', '[{"key":"A","val":"DaVinci Resolve"},{"key":"B","val":"Adobe Premiere Pro"},{"key":"C","val":"Final Cut Pro"},{"key":"D","val":"Microsoft Paint"}]', 2, 'ABC', 'Paint是系统画图工具,完全不支持专业调色。', 1, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保作业中"喷洒均匀性"的影响因素有?', '[{"key":"A","val":"飞行速度(空速)"},{"key":"B","val":"喷洒高度"},{"key":"C","val":"流量设置"},{"key":"D","val":"药剂浓度"}]', 2, 'ABCD', 'UTC植保强调速度/高度/流量/浓度四要素均衡,缺一影响覆盖。', 2, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC植保"药剂飘移"的控制措施有?', '[{"key":"A","val":"降低飞行高度(贴近作物)"},{"key":"B","val":"减小雾滴粒径"},{"key":"C","val":"选择无风或微风天气"},{"key":"D","val":"增大喷嘴压力"}]', 2, 'AC', 'UTC植保标准:降低高度减飘、增大雾滴粒径(更重不易飘)、无风天作业。减小雾滴和增大压力反而加剧飘移。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"延时摄影(Hyperlapse)"的参数设置要点有?', '[{"key":"A","val":"根据目标运动速度选择间隔时间"},{"key":"B","val":"使用ND滤镜保持快门1/50以上"},{"key":"C","val":"架三角架绝对静止"},{"key":"D","val":"电池预热保证低温下正常工作"}]', 2, 'ABD', '延时摄影恰恰需要运动(移动机位),固定三角架那是传统延时不是Hyperlapse。', 2, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"构图时的留白"有什么作用?', '[{"key":"A","val":"让画面呼吸感更强"},{"key":"B","val":"突出主体"},{"key":"C","val":"便于后期加文字或logo"},{"key":"D","val":"增加照片内存大小"}]', 2, 'ABC', '留白是构图手法,与文件大小无关。', 1, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍中"构图的减法原则"是指?', '[{"key":"A","val":"画面只保留核心主体"},{"key":"B","val":"去掉无关元素让画面干净"},{"key":"C","val":"后期裁掉多余部分"},{"key":"D","val":"降低相机分辨率减少画质元素"}]', 2, 'ABC', 'UTC构图减法:拍摄时精简取景→后期裁剪→画面只突出核心,与分辨率无关。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"运动模糊"效果的实现方法有?', '[{"key":"A","val":"降低快门速度(1/30s以下)"},{"key":"B","val":"让被摄物体运动(如车流)"},{"key":"C","val":"使用手动平移跟拍"},{"key":"D","val":"调高ISO感光度"}]', 2, 'ABC', '运动模糊靠慢快门+物体运动/镜头运动实现,ISO影响噪点不影响运动模糊。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍中"HDR(高动态范围)"的使用场景是?', '[{"key":"A","val":"逆光场景(前景暗背景亮)"},{"key":"B","val":"室内外明暗对比大"},{"key":"C","val":"纯逆光剪影拍摄"},{"key":"D","val":"均匀光线下不需要"}]', 2, 'ABD', 'HDR用于明暗反差大的场景保留细节,均匀光线或纯逆光剪影不需要HDR。', 2, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"白平衡",UTC推荐?', '[{"key":"A","val":"晴天正午用5600K日光预设"},{"key":"B","val":"室内或傍晚调至3200K暖光"},{"key":"C","val":"阴天用自动白平衡即可"},{"key":"D","val":"全部用自动后期统一调色"}]', 2, 'ABC', 'UTC航拍原则:尽量用正确白平衡拍摄,减少后期调整量;不是全部依赖自动。', 1, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"低光拍摄"的应对措施有?', '[{"key":"A","val":"提高ISO(但会有噪点)"},{"key":"B","val":"使用更大光圈镜头"},{"key":"C","val":"降低快门速度(但要固定机位)"},{"key":"D","val":"后期用降噪软件处理"}]', 2, 'ABCD', '低光四要素:高ISO噪点→大光圈收光→慢快门进光→后期降噪。', 2, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"曝光三角"的关系是?', '[{"key":"A","val":"光圈越大进光越多"},{"key":"B","val":"快门越慢进光越多"},{"key":"C","val":"ISO越高传感器越敏感"},{"key":"D","val":"三者必须固定值不能调整"}]', 2, 'ABC', '曝光三角三要素互相制衡,UTC强调理解三者关系才能灵活应对各种光线场景。', 1, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"大光圈虚化"效果(景深控制)的实现条件是?', '[{"key":"A","val":"光圈开到最大(f/2.8等)"},{"key":"B","val":"相机离主体近"},{"key":"C","val":"使用长焦距镜头"},{"key":"D","val":"光圈越小虚化越强"}]', 2, 'ABC', '大光圈+近距离+长焦三要素同时满足才能得到好的虚化效果。D说反了。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"黄金时刻(Golden Hour)"的拍摄特点有?', '[{"key":"A","val":"光线柔和呈暖色"},{"key":"B","val":"阴影拉长增加层次"},{"key":"C","val":"对比度降低细节丰富"},{"key":"D","val":"适合拍日出日落风光"}]', 2, 'ABCD', '黄金时刻四特点:柔光+暖色+层次+低对比,是航拍黄金拍摄时间。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"夜间航拍"参数设置,UTC推荐?', '[{"key":"A","val":"ISO设为800-1600可接受噪点"},{"key":"B","val":"快门速度1/30s以上防抖"},{"key":"C","val":"光圈开到最大收光"},{"key":"D","val":"降低分辨率换取感光度提升"}]', 2, 'ABC', 'UTC夜景:高ISO+安全快门+大光圈,不主动降分辨率。', 2, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"构图的引导线"可以用哪些元素?', '[{"key":"A","val":"道路"},{"key":"B","val":"河流/海岸线"},{"key":"C","val":"桥梁"},{"key":"D","val":"不规则云朵"}]', 2, 'ABC', '引导线需要有明确方向感和透视感,不规则云朵不具备引导效果。', 1, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"色彩理论",UTC强调?', '[{"key":"A","val":"互补色搭配产生视觉冲击"},{"key":"B","val":"同色系搭配和谐统一"},{"key":"C","val":"三原色混合产生丰富层次"},{"key":"D","val":"颜色越多画面越好"}]', 2, 'ABC', '色彩丰富不等于画面好,过多颜色容易让画面杂乱,需要控制数量和搭配。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍中"DJI Fly"APP与"Litchi"等第三方APP的差异是?', '[{"key":"A","val":"官方APP功能稳定兼容性好"},{"key":"B","val":"第三方APP支持更高级的航迹规划"},{"key":"C","val":"官方APP实时图传延迟更低"},{"key":"D","val":"第三方APP可能不支持新机型"}]', 2, 'ABCD', '官方APP稳但功能基础,第三方功能强但兼容性需注意。UTC培训都要会用。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"镜头语言"中"推镜头"的作用是?', '[{"key":"A","val":"引导观众视线聚焦主体"},{"key":"B","val":"产生压迫感(快速推进)"},{"key":"C","val":"展示主体与环境的关系"},{"key":"D","val":"压缩空间感"}]', 2, 'AB', '推镜头是从远到近聚焦主体,建立主体与观众的连接感;CD描述的是拉镜头的效果。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"避障系统",UTC实操时的说法正确的有?', '[{"key":"A","val":"避障是辅助不能完全依赖"},{"key":"B","val":"逆光下视觉避障可能失效"},{"key":"C","val":"细线和电线很难被检测到"},{"key":"D","val":"TOF避障不怕任何光线"}]', 2, 'ABC', '避障系统各有局限,TOF虽比光学耐光但也有探测盲区和精度上限。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"光线方向"对画面的影响是?', '[{"key":"A","val":"顺光画面明亮但缺层次"},{"key":"B","val":"侧光形成光影立体感"},{"key":"C","val":"逆光容易过曝或剪影"},{"key":"D","val":"顶光最适合人像摄影"}]', 2, 'ABC', '顶光会在人物脸上产生难看的阴影(如眼窝、下巴暗影),人像通常避免顶光。', 1, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"运镜组合"中"上升+环绕"的效果是?', '[{"key":"A","val":"逐步展现主体的全貌"},{"key":"B","val":"同时展示主体和环境"},{"key":"C","val":"制造宏大叙事感"},{"key":"D","val":"适合短视频开场"}]', 2, 'ABCD', '上升+环绕是经典航拍摄影开场运镜,四种效果同时具备。', 1, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"FPV穿越航拍"与常规航拍的差异,UTC认为?', '[{"key":"A","val":"穿越机视角更具冲击力和动感"},{"key":"B","val":"常规航拍更稳定画质更高"},{"key":"C","val":"穿越机不适合长时间记录"},{"key":"D","val":"两者的后期处理流程完全相同"}]', 2, 'ABC', '两者机位和运动方式不同,后期调色和剪辑节奏都应区别对待。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"倾斜摄影"的特点是?', '[{"key":"A","val":"同时拍摄多个角度用于3D建模"},{"key":"B","val":"比垂直正射更贴近人眼视角"},{"key":"C","val":"可以用于房地产实景展示"},{"key":"D","val":"不需要规划航线飞上去拍就行"}]', 2, 'ABC', '倾斜摄影需要精密规划航线(五个方向同时拍摄),不是随便飞就能拍好。', 2, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC"电力巡检"的拍摄策略,以下说法正确的有?', '[{"key":"A","val":"沿杆塔直线飞保证照片角度一致"},{"key":"B","val":"靠近绝缘子和导线细节特写"},{"key":"C","val":"避开电磁干扰保持安全距离"},{"key":"D","val":"用手动模式保证每根杆塔清晰度"}]', 2, 'ABC', '电力巡检通常用自动航线保持一致性,手动模式不适合长距离巡检作业。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"色彩分级(Color Grading)"与"色彩校正"的区别是?', '[{"key":"A","val":"校正是还原真实色彩"},{"key":"B","val":"分级是创造艺术风格"},{"key":"C","val":"两者没有区别都是调色"},{"key":"D","val":"分级可以用LUT快速实现"}]', 2, 'ABD', 'UTC后期强调:先校正还原→再分级做风格,两者是前后连贯的不同步骤。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于无人机"Gimbal Yaw Lock"(云台偏航锁定)功能,以下说法正确的有?', '[{"key":"A","val":"锁定后相机始终朝向固定方向"},{"key":"B","val":"飞机转向时相机不跟随"},{"key":"C","val":"适合直线跟拍运动主体"},{"key":"D","val":"可以实现环绕效果"}]', 2, 'ABC', 'Yaw Lock锁定相机偏航,飞机转向但相机不动,实现跟拍;环绕需要云台自由转向配合飞机绕圈。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"分辨率与画质"的关系,UTC说法正确的有?', '[{"key":"A","val":"4K分辨率比1080P更清晰"},{"key":"B","val":"高分辨率文件更大占存储"},{"key":"C","val":"可以后期裁切放大不损失画质"},{"key":"D","val":"分辨率越高画面色彩越好"}]', 2, 'ABC', '分辨率描述像素数量,色彩由传感器和白平衡决定,两者独立。', 1, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"DJI Mavic"与"Inspire"系列的航拍差异,UTC认为?', '[{"key":"A","val":"Mavic便携适合单兵作业"},{"key":"B","val":"Inspire画质更好适合专业制作"},{"key":"C","val":"两者都能完成航拍任务但场景不同"},{"key":"D","val":"Inspire能飞的Mavic都能飞"}]', 2, 'ABC', 'Inspire有更高的画质和更强的专业功能(如双控),Mavic也有自己的优势(便携、避障强),不是简单替代关系。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"素材命名和管理"的建议是?', '[{"key":"A","val":"按日期+地点+机位类型命名"},{"key":"B","val":"项目完成后及时备份整理"},{"key":"C","val":"原始素材和后期文件分文件夹存放"},{"key":"D","val":"拍完随便乱放等以后再说"}]', 2, 'ABC', '素材管理混乱会导致后期找不到文件、存储空间浪费,UTC强调当场整理。', 1, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"RAW格式拍摄"的优势,以下说法正确的有?', '[{"key":"A","val":"保留更多动态范围信息"},{"key":"B","val":"后期调整空间大"},{"key":"C","val":"色彩精度更高"},{"key":"D","val":"文件比JPEG小"}]', 2, 'ABC', 'RAW保留传感器原始数据,文件体积远大于压缩后的JPEG,不是更小。', 1, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"构图中的前景使用",以下做法正确的有?', '[{"key":"A","val":"用树叶做框架增加层次"},{"key":"B","val":"用水面倒影增加对称感"},{"key":"C","val":"前景不能遮挡主体"},{"key":"D","val":"前景越复杂越好看"}]', 2, 'ABC', '前景太多太杂会分散注意力破坏构图,应简洁且服务于主体突出。', 2, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"避障系统"在航拍中的正确使用,UTC强调?', '[{"key":"A","val":"了解自家飞机的避障覆盖方向"},{"key":"B","val":"正下方盲区飞行需谨慎"},{"key":"C","val":"低光环境下视觉避障可能失效"},{"key":"D","val":"完全相信避障大胆飞就行"}]', 2, 'ABC', '避障永远是辅助,必须目视确认环境安全再飞。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"视频帧率"的选择,以下说法正确的有?', '[{"key":"A","val":"24fps(电影感)适合剧情片"},{"key":"B","val":"30fps(流畅)适合日常记录"},{"key":"C","val":"60fps适合慢动作回放"},{"key":"D","val":"帧率越高画质越好"}]', 2, 'ABC', '帧率影响流畅度和后期慢动作,与画质(清晰度、色彩)无关。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"低高度贴地飞行"的注意事项是?', '[{"key":"A","val":"保持1.5-3米高度(视距内)"},{"key":"B","val":"注意树木和电线"},{"key":"C","val":"控制速度避免来不及反应"},{"key":"D","val":"可以闭眼飞反正安全"}]', 2, 'ABC', '贴地飞行风险高必须高度专注,闭眼等于自杀式操作。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍后期工作流",UTC推荐的顺序是?', '[{"key":"A","val":"素材导入与备份"},{"key":"B","val":"粗剪(选素材、定节奏)"},{"key":"C","val":"精剪+调色"},{"key":"D","val":"加音乐和字幕"}]', 2, 'ABCD', 'UTC完整后期四步:导入备份→粗剪→精剪调色→音乐字幕。', 1, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保作业"飞行路线规划"的要点有?', '[{"key":"A","val":"航线平行覆盖不留空地"},{"key":"B","val":"相邻航线适当重叠(10-20%)"},{"key":"C","val":"注意风向调整航线方向"},{"key":"D","val":"随便画个圈就行"}]', 2, 'ABC', '植保航线必须专业规划保证覆盖均匀,不能随便画。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于植保作业"喷头选型",UTC说法正确的有?', '[{"key":"A","val":"细雾喷头适合小叶片作物"},{"key":"B","val":"粗雾喷头适合高杆作物"},{"key":"C","val":"扇形喷头覆盖范围大"},{"key":"D","val":"喷头型号随便用不影响效果"}]', 2, 'ABC', '喷头选择直接影响雾滴粒径和覆盖效果,必须根据作物类型和植保需求选型。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保作业中"重复喷施"的控制措施有?', '[{"key":"A","val":"精确记录每次喷施范围"},{"key":"B","val":"航线重叠率不要超过20%"},{"key":"C","val":"利用RTD高精度定位保证航线一致"},{"key":"D","val":"多喷几遍效果更好"}]', 2, 'ABC', '重复喷施会造成农药过量污染和浪费,UTC强调精准覆盖避免重复。', 2, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"防重喷漏喷"的技术手段,UTC推荐?', '[{"key":"A","val":"RTK高精度定位系统"},{"key":"B","val":"飞行轨迹回放功能"},{"key":"C","val":"地面标记物辅助判断"},{"key":"D","val":"凭驾驶员记忆"}]', 2, 'ABC', 'UTC植保作业精度要求高,必须依靠技术手段保证覆盖,不能凭记忆判断。', 2, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保作业"药剂配制"的正确做法是?', '[{"key":"A","val":"按照标签说明书的浓度要求"},{"key":"B","val":"注意不同剂型(水剂/粉剂/乳油)的配比差异"},{"key":"C","val":"混合顺序有讲究(水→助剂→药剂)"},{"key":"D","val":"随便混在一起就行"}]', 2, 'ABC', '药剂配制直接影响效果和安全,必须按规范操作。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于植保"电池续航"规划,UTC建议?', '[{"key":"A","val":"起飞前计算单程飞行时长"},{"key":"B","val":"预留至少20%返航余量"},{"key":"C","val":"多备几块轮换使用"},{"key":"D","val":"飞到没电就迫降在地里"}]', 2, 'ABC', '植保续航规划必须充分,绝不能让飞机没电坠落在农田里(影响作业和可能损坏飞机)。', 2, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"镜头选择"的建议是?', '[{"key":"A","val":"广角镜头适合大场景风光"},{"key":"B","val":"中焦镜头适合人文纪实"},{"key":"C","val":"长焦镜头适合压缩空间"},{"key":"D","val":"用自带云台相机就行不用额外镜头"}]', 2, 'ABC', '航拍机通常自带固定焦距云台相机,但不同焦段的选择思路是通用的。UTC会讲解焦段语言。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机+测绘"的应用,UTC说法正确的有?', '[{"key":"A","val":"可以用于地籍测量"},{"key":"B","val":"可以生成DEM高程模型"},{"key":"C","val":"可以用于数字孪生建模"},{"key":"D","val":"测绘需要专用RTK机型"}]', 2, 'ABCD', '无人机测绘需要RTK定位+正射影像或激光雷达(LiDAR),应用场景覆盖地籍→DEM→数字孪生。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"广告片拍摄"的要点是?', '[{"key":"A","val":"镜头语言服务于品牌调性"},{"key":"B","val":"剪辑节奏配合音乐节拍"},{"key":"C","val":"产品特写要清晰有质感"},{"key":"D","val":"光拍风景不要拍产品"}]', 2, 'ABC', '航拍广告片的核心是产品和品牌表达,不能光拍风景。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"航测成图精度"的影响因素有?', '[{"key":"A","val":"飞行高度越高精度越低"},{"key":"B","val":"RTK定位精度直接影响成图质量"},{"key":"C","val":"相机分辨率越高越好"},{"key":"D","val":"天气晴朗光照充足"}]', 2, 'ABCD', '航测精度四要素:航高→RTK→相机→光照,都是影响成图精度的关键。', 2, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在应急救援中的应用",UTC说法正确的有?', '[{"key":"A","val":"可以快速勘察灾害现场"},{"key":"B","val":"可以为地面救援提供照明和投送物资"},{"key":"C","val":"可以绘制受灾地图辅助决策"},{"key":"D","val":"可以直接灭火救人"}]', 2, 'ABC', '无人机可以辅助救援但不能直接灭火救人(没有这个能力),主要是侦察、投送、测绘。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"建筑摄影"的构图要点有?', '[{"key":"A","val":"用对称构图体现建筑威严"},{"key":"B","val":"低角度仰拍突出宏伟"},{"key":"C","val":"高角度俯拍展示全貌"},{"key":"D","val":"必须等比例不变形"}]', 2, 'ABC', '建筑航拍可以利用透视变形创造视觉冲击力,不追求严格等比例。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"农业数字孪生"的核心技术是?', '[{"key":"A","val":"无人机多光谱遥感"},{"key":"B","val":"地面传感器数据采集"},{"key":"C","val":"AI分析作物长势"},{"key":"D","val":"人工实地考察"}]', 2, 'ABCD', '数字孪生是多源数据融合:无人机遥感+地面IoT+AI分析+人工校验。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍片头的作用",UTC认为?', '[{"key":"A","val":"奠定整部片的基调"},{"key":"B","val":"迅速抓住观众注意力"},{"key":"C","val":"展示主角或核心场景"},{"key":"D","val":"放个logo就行不重要"}]', 2, 'ABC', '片头是整部片子的门面,UTC强调必须精心设计开场。', 1, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"城市夜景"的拍摄技巧有?', '[{"key":"A","val":"选择高机位俯拍(如山顶或高楼顶起飞)"},{"key":"B","val":"用低ISO长曝光拍车流光轨"},{"key":"C","val":"避开飞机自身灯光污染画面"},{"key":"D","val":"必须等烟花绽放时拍"}]', 2, 'ABC', '城市夜景不一定需要烟花,普通夜景有自己独特的美感。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"商业报价"中应包含的项目有?', '[{"key":"A","val":"飞行设备和相机折旧"},{"key":"B","val":"飞手人力成本"},{"key":"C","val":"后期剪辑调色成本"},{"key":"D","val":"空域申请和保险成本"}]', 2, 'ABCD', 'UTC商业报价四要素:设备+人力+后期+合规,避免漏项导致亏损。', 1, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"穿越机竞速航拍"的剪辑节奏,UTC说法正确的有?', '[{"key":"A","val":"与竞速节奏同步,紧张刺激"},{"key":"B","val":"慢动作处理关键时刻"},{"key":"C","val":"配合电子音乐更有感觉"},{"key":"D","val":"应该慢节奏抒情"}]', 2, 'ABC', '竞速FPV的特色就是快节奏刺激,抒情完全不对味。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"水面倒影"的拍摄要点有?', '[{"key":"A","val":"风平浪静时水面如镜"},{"key":"B","val":"从正上方拍可以对称构图"},{"key":"C","val":"傍晚或清晨光线柔和效果最好"},{"key":"D","val":"白天阳光直射最清晰"}]', 2, 'ABC', '正午阳光直射水面时反光强看不清倒影,柔光环境效果好。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训中"商业项目谈判技巧"包括?', '[{"key":"A","val":"了解客户真实需求"},{"key":"B","val":"展示专业作品案例"},{"key":"C","val":"报价时留出合理谈判空间"},{"key":"D","val":"一开始就报最低价快速成交"}]', 2, 'ABC', 'UTC商业谈判策略强调专业和价值展示,不鼓励一开始就低价竞争。', 1, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机素材存储和交付",UTC推荐?', '[{"key":"A","val":"原始文件用SSD存储(速度快)"},{"key":"B","val":"长期归档用机械硬盘(成本低容量大)"},{"key":"C","val":"云端备份防止本地损坏"},{"key":"D","val":"用最便宜的U盘随便拷一下"}]', 2, 'ABC', '素材价值高,UTC强调多介质备份,绝不能随便用U盘拷一下就完事。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"云层之上"的拍摄时机是?', '[{"key":"A","val":"清晨云层较低时爬升穿云"},{"key":"B","val":"阴天云层厚时从顶部俯拍"},{"key":"C","val":"需要足够爬升高度(可能300米以上)"},{"key":"D","val":"随时想飞就飞"}]', 2, 'ABC', '穿云航拍条件苛刻:云层高度、爬升能力、法规限制都要考虑,不是随时能飞。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"无人机植保考试"的实操内容包括?', '[{"key":"A","val":"航线规划与喷洒均匀性"},{"key":"B","val":"药剂浓度配制"},{"key":"C","val":"电池与载荷重量估算"},{"key":"D","val":"植保效果评估与调整"}]', 2, 'ABCD', 'UTC植保考核四方面:规划→药剂→载荷→效果调整。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍摄影师的职业发展",UTC建议?', '[{"key":"A","val":"从通用航拍向垂直领域(如建筑/农业/地理)深耕"},{"key":"B","val":"积累作品集展示个人风格"},{"key":"C","val":"学习后期和平面设计技能互补"},{"key":"D","val":"只想飞不想修图"}]', 2, 'ABC', 'UTC航拍摄影师需要飞+拍+剪综合能力,不可以只想飞不修图。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"雪景"的拍摄技巧是?', '[{"key":"A","val":"减少曝光补偿(自动曝光过曝雪会变灰)"},{"key":"B","val":"阴天拍雪景立体感弱,需要找到其他视觉元素"},{"key":"C","val":"利用阴影增加层次"},{"key":"D","val":"雪越白越好不需要细节"}]', 2, 'ABC', '雪景曝光需要+1到+2档补偿(让雪保持白),太暗会变灰失去细节。D说反了。', 3, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训中"团队协作"的要点有?', '[{"key":"A","val":"飞手+地面助理分工明确"},{"key":"B","val":"拍摄前开会同步计划"},{"key":"C","val":"飞手专注操控,助理负责沟通和监控"},{"key":"D","val":"一个人飞一个人没事干就行"}]', 2, 'ABC', 'UTC商业航拍通常是飞手+助理双人配合,助理负责沟通、监控、应急等,不能闲呆着。', 1, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"DJI Inspire 3"的航拍优势,UTC说法正确的有?', '[{"key":"A","val":"8K全画幅画质专业级"},{"key":"B","val":"ProRes RAW支持电影级后期"},{"key":"C","val":"双控模式适合拍摄复杂镜头"},{"key":"D","val":"机身只有手掌大小便携"}]', 2, 'ABC', 'Inspire 3是专业级设备,机身不小(比Mavic系列大很多),便携性不是它的卖点。', 2, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"极简构图"的特点是?', '[{"key":"A","val":"画面元素极少突出主体"},{"key":"B","val":"大面积留白增加呼吸感"},{"key":"C","val":"利用对称和比例产生美感"},{"key":"D","val":"必须有文字标语"}]', 2, 'ABC', '极简构图靠画面元素和比例,不需要加文字标语。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍作品的版权和授权"的注意事项有?', '[{"key":"A","val":"商业项目作品要签署版权协议"},{"key":"B","val":"注意被拍摄对象的肖像权和隐私权"},{"key":"C","val":"公开发布前确认授权范围"},{"key":"D","val":"拍了就是自己的想怎么用都行"}]', 2, 'ABC', '航拍作品版权、肖像权、隐私权都有法律约束,不能随意使用。', 2, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机热成像"应用,UTC说法正确的有?', '[{"key":"A","val":"电力巡检检测线路发热故障"},{"key":"B","val":"消防救援寻找被困人员"},{"key":"C","val":"建筑屋顶检查渗漏"},{"key":"D","val":"可以代替普通可见光航拍"}]', 2, 'ABC', '热成像是补充探测手段,不能完全代替可见光航拍(各有适用场景)。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"产品展示"的拍摄策略是?', '[{"key":"A","val":"多角度全方位展示产品外观"},{"key":"B","val":"配合场景图体现产品使用场景"},{"key":"C","val":"特写展示产品细节和质感"},{"key":"D","val":"产品拍清楚就行不用创意"}]', 2, 'ABC', '产品航拍需要兼顾清晰和创意,不能只拍清楚没设计感。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训"无人机维修能力"建议的掌握程度是?', '[{"key":"A","val":"至少能排查常见故障(电机/桨叶/电池)"},{"key":"B","val":"会基本的固件升级和参数调整"},{"key":"C","val":"复杂故障交给专业维修"},{"key":"D","val":"必须能完全拆机重新组装"}]', 2, 'ABC', 'UTC航拍摄影师不要求完全的拆机维修能力,掌握常见故障排查和基础维护即可。', 1, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍的未来发展",UTC提到的方向有?', '[{"key":"A","val":"AI自动拍摄和后期辅助"},{"key":"B","val":"XR/VR沉浸式航拍体验"},{"key":"C","val":"无人机与5G/卫星通信融合"},{"key":"D","val":"不再需要人操作完全AI化"}]', 2, 'ABC', 'AI辅助增强但完全AI化还很远,短期内人机协作是主流。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"镜头运动与情绪"的关系,UTC说法正确的有?', '[{"key":"A","val":"推镜头:引导、聚焦、压迫(快推)"},{"key":"B","val":"拉镜头:揭示、疏离、开阔"},{"key":"C","val":"摇镜头:叙事、交代环境"},{"key":"D","val":"镜头运动不影响情绪"}]', 2, 'ABC', '运镜方式直接影响观众情绪,UTC强调掌握运镜语言才能更好表达。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在建筑施工中的应用",UTC说法正确的有?', '[{"key":"A","val":"定期航拍监控施工进度"},{"key":"B","val":"生成数字孪生辅助BIM管理"},{"key":"C","val":"安全巡检(不用人工爬高架)"},{"key":"D","val":"可以代替塔吊吊运材料"}]', 2, 'ABC', '无人机无法替代塔吊的重物吊运功能,UTC强调无人机是辅助工具不是全能替代者。', 2, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍教学方法论"包括?', '[{"key":"A","val":"理论讲解+实操演练结合"},{"key":"B","val":"案例分析拆解优秀作品"},{"key":"C","val":"学员作品点评与修改建议"},{"key":"D","val":"只靠看书就行不用动手"}]', 2, 'ABC', 'UTC教学强调理论+实操+点评三位一体,纯看书无法掌握航拍技能。', 1, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍中''意外''的美丽画面"(如突然的光线/动物),UTC说法正确的有?', '[{"key":"A","val":"保持警觉随时准备捕捉"},{"key":"B","val":"提前预判可能出现的意外时刻"},{"key":"C","val":"拍到了就是运气好不指望太多"},{"key":"D","val":"完全可以靠计划拍出所有好画面"}]', 2, 'AB', '航拍中"意外"的好画面是存在的,摄影师应保持警觉但也不能完全依赖运气。D太绝对。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"无人机电池安全操作"强调?', '[{"key":"A","val":"飞行后等待电池冷却再充电"},{"key":"B","val":"充电时远离易燃物"},{"key":"C","val":"不在无人监控时充电"},{"key":"D","val":"电池鼓包了照样用完"}]', 2, 'ABC', '鼓包电池内部已受损,必须立即更换不能继续使用,否则有起火风险。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在环保监测中的应用",UTC说法正确的有?', '[{"key":"A","val":"巡查森林覆盖率变化"},{"key":"B","val":"监测水体污染情况"},{"key":"C","val":"检查垃圾填埋场渗漏"},{"key":"D","val":"可以直接处理污染物"}]', 2, 'ABC', '无人机可以侦察但无法处理污染物,仍是辅助工具。', 2, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍作品个人IP打造"的建议包括?', '[{"key":"A","val":"保持统一的个人风格和调色"},{"key":"B","val":"选择垂直领域深耕(如建筑/风光)"},{"key":"C","val":"在社交媒体持续输出作品"},{"key":"D","val":"拍什么火拍什么不要坚持风格"}]', 2, 'ABC', 'UTC强调个人IP需要独特风格和持续输出,追逐热点失去自我反而难以建立辨识度。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍后的数据归档",UTC推荐?', '[{"key":"A","val":"按项目分文件夹,每个项目包含原始素材和后期文件"},{"key":"B","val":"同步备份到硬盘和云端"},{"key":"C","val":"重要项目做三重备份"},{"key":"D","val":"存在同一个U盘里就够了"}]', 2, 'ABC', 'UTC数据安全强调多介质多重备份,避免单点故障导致数据丢失。', 1, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC竞速无人机(穿越机)的"机体类型"通常有?', '[{"key":"A","val":"X型四旋翼(最通用)"},{"key":"B","val":"H型六旋翼"},{"key":"C","val":"三角翼固定翼"},{"key":"D","val":"V型尾翼"}]', 2, 'ABCD', '穿越机主流是X型四旋翼,但H型、三角翼、V型都有特定应用场景。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV(第一视角)"系统的组成,包括?', '[{"key":"A","val":"机载摄像头"},{"key":"B","val":"图传发射机(VTX)"},{"key":"C","val":"地面接收眼镜/显示屏"},{"key":"D","val":"GPS定位模块"}]', 2, 'ABC', '穿越机为轻量化经常去掉GPS,FPV核心是摄像头+VTX+地面接收三件套。', 1, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机的"电机规格"通常用哪几个参数描述?', '[{"key":"A","val":"定子直径(mm)"},{"key":"B","val":"定子高度(mm)"},{"key":"C","val":"KV值(转速常数)"},{"key":"D","val":"重量(克)"}]', 2, 'ABCD', '穿越机电机标准描述:XXXXX 代表定子直径×高度(如2207=22mm×07mm),KV值决定转速,重量影响整体平衡。', 1, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机比赛的"竞速赛道"通常包含?', '[{"key":"A","val":"Gate门(必须穿过)"},{"key":"B","val":"Flag旗杆(必须绕行)"},{"key":"C","val":"时间检测点"},{"key":"D","val":"高空跳跃平台"}]', 2, 'ABCD', '穿越机赛道经典元素:Gate门是必须穿越的障碍、旗杆需绕行、计时点记录圈速,跳跃增加观赏性。', 1, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞行模式"中,以下属于常见的有?', '[{"key":"A","val":"Acro(花式翻滚模式)"},{"key":"B","val":"Angle(自稳模式)"},{"key":"C","val":"Horizon(地平线模式)"},{"key":"D","val":"GPS自动返航模式"}]', 2, 'ABC', '穿越机竞赛时几乎不用GPS自动模式,核心是Acro/Angle/Horizon三种手动或半自稳模式。', 1, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"桨叶选择",以下说法正确的有?', '[{"key":"A","val":"4寸桨比5寸桨更灵活适合室内竞速"},{"key":"B","val":"5寸桨效率更高续航更远"},{"key":"C","val":"三叶桨比两叶桨拉力大但噪音高"},{"key":"D","val":"竞速通常用两叶桨"}]', 2, 'ABCD', '穿越机桨叶选择四要素:尺寸、叶数、效率、场景匹配。竞速多用两叶小桨追求灵活。', 2, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控固件"中,Betaflight的主要功能有?', '[{"key":"A","val":"PID参数调节"},{"key":"B","val":"黑匣子飞行数据记录"},{"key":"C","val":"混控矩阵配置"},{"key":"D","val":"遥控器遥测"}]', 2, 'ABCD', 'Betaflight是主流穿越机飞控固件,覆盖PID、黑匣子、混控、遥测全套功能。', 1, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机"花飞(Freestyle)"的特点是?', '[{"key":"A","val":"注重动作流畅和视觉效果"},{"key":"B","val":"经常使用翻滚、螺旋等花式动作"},{"key":"C","val":"竞速速度最快优先"},{"key":"D","val":"常配合慢动作拍摄展示"}]', 2, 'ABD', '花飞重视觉表演,竞速重速度,两者侧重点不同。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池选型",以下说法正确的有?', '[{"key":"A","val":"常用1300-1800mAh 3-4S锂电池"},{"key":"B","val":"C倍率需要30C以上以应对高放电"},{"key":"C","val":"容量越大续航越长也越好飞"},{"key":"D","val":"竞速前电池要预热"}]', 2, 'ABD', '穿越机电池需要高放电倍率,容量过大会增加重量反而降低速度和灵活性。', 1, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"图传频段选择"中,常见的有?', '[{"key":"A","val":"RaceBand(5.8GHz 竞速专用频段)"},{"key":"B","val":"FatShark(标准5.8GHz频段)"},{"key":"C","val":"2.4GHz(低分辨率但穿墙好)"},{"key":"D","val":"毫米波卫星频段"}]', 2, 'ABC', '竞赛常用RaceBand避免干扰,日常可用FatShark频段,2.4GHz适合低清但抗遮挡;毫米波卫星频段不是穿越机图传使用的。', 1, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电机安装"时应注意?', '[{"key":"A","val":"电机出线方向与机身匹配"},{"key":"B","val":"固定螺丝长度合适"},{"key":"C","val":"电调线焊接牢固"},{"key":"D","val":"螺丝拧得越紧越好"}]', 2, 'ABC', '螺丝过紧可能压坏碳纤维板或螺纹滑牙,ASDC标准是"刚好锁紧不松"。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"桨叶动平衡"检查方法有?', '[{"key":"A","val":"装好电机后空转看是否有明显振动"},{"key":"B","val":"用桨叶平衡仪精确检测"},{"key":"C","val":"飞行中感受机身抖动"},{"key":"D","val":"直接目视看不出就行"}]', 2, 'ABC', '穿越机动平衡要求比航拍机严格,空转检查和平衡仪检测都应做,目视看不出不代表没问题。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电调选择",以下说法正确的有?', '[{"key":"A","val":"持续电流应至少是电机电流的1.5倍"},{"key":"B","val":"30A以上电调适合穿越竞速"},{"key":"C","val":"电调固件需要与飞控匹配"},{"key":"D","val":"随便选只要能插上去就行"}]', 2, 'ABC', '穿越机电调需要匹配电机功率、飞控协议,不能随便选。', 1, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机"螺旋桨推荐品牌"通常有?', '[{"key":"A","val":"HQProp"},{"key":"B","val":"GEMFAN"},{"key":"C","val":"DALProp"},{"key":"D","val":"Apple"}]', 2, 'ABC', 'Apple不生产穿越机桨叶,前三家都是穿越机界公认的好品牌。', 1, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速风格"与"花飞风格"的差异包括?', '[{"key":"A","val":"竞速机追求极致速度和灵活性"},{"key":"B","val":"花飞机更重一些带保护框"},{"key":"C","val":"竞速机FPV延迟要求更低"},{"key":"D","val":"两者用完全不同的电机和桨叶"}]', 2, 'ABC', '两者电机桨叶规格类似,只是调教风格不同(竞速激进/花飞柔和),不是完全不同。', 2, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"图传频段拥挤"问题的解决方法有?', '[{"key":"A","val":"使用RaceBand专用竞速频段避免冲突"},{"key":"B","val":"选择干扰少的频道"},{"key":"C","val":"调高发射功率"},{"key":"D","val":"降低发射功率减少干扰他人"}]', 2, 'ABD', '解决图传拥挤三法:专用频段→选干净频道→降低功率;调高功率反而加剧干扰。', 2, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电池"的保养要点有?', '[{"key":"A","val":"飞行后及时降到3.7-3.8V单节"},{"key":"B","val":"避免硬放电到3.0V以下"},{"key":"C","val":"存储电压3.7-3.9V"},{"key":"D","val":"可以用大电流快充减少等待时间"}]', 2, 'ABC', '穿越机大倍率电池(通常30C+)虽然支持大电流放电,但充电不宜超过C2倍率以免过热损伤。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC对"穿越机执照分级"的理解是?', '[{"key":"A","val":"入门级先从5寸室外机练起"},{"key":"B","val":"进阶可以尝试更小的室内机(whoop)"},{"key":"C","val":"竞速需要专门的速度训练"},{"key":"D","val":"直接上6寸暴力机一步到位"}]', 2, 'ABC', '穿越机学习应循序渐进,小机好飞、大机反慢,直接从大机开始难度极高。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控调参"中"PID"指的是?', '[{"key":"A","val":"比例(Proportional)"},{"key":"B","val":"积分(Integral)"},{"key":"C","val":"微分(Derivative)"},{"key":"D","val":"功率(Power)"}]', 2, 'ABC', 'PID是三项经典控制参数,P=当前误差、I=累计误差、D=误差变化率,飞控调参的核心。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"Betaflight Blackbox(黑匣子)"的作用,以下说法正确的有?', '[{"key":"A","val":"记录飞行数据用于事后分析"},{"key":"B","val":"调参后查看PID响应情况"},{"key":"C","val":"分析炸机原因"},{"key":"D","val":"可以存储穿越机的FPV视频"}]', 2, 'ABC', '黑匣子只记录飞行数据(遥测、PID响应、传感器),不存FPV图传视频。', 2, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛道Gate门"的标准尺寸通常是?', '[{"key":"A","val":"宽2-3米高2-3米"},{"key":"B","val":"直径1.5米的圆形门"},{"key":"C","val":"高4米以上的拱门"},{"key":"D","val":"只有1米的小门框"}]', 2, 'AB', 'ASDC标准竞速门通常是2-3米正方形或圆形,太大没挑战太小穿不过。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"OSD(屏幕叠加显示)"的功能,以下说法正确的有?', '[{"key":"A","val":"在FPV画面上叠加显示电池电压"},{"key":"B","val":"显示飞行速度和高度"},{"key":"C","val":"显示飞行模式和计时器"},{"key":"D","val":"可以显示实时股票行情"}]', 2, 'ABC', 'OSD只能显示穿越机自身的飞行数据,与外部信息(股票等)无关。', 1, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞动作"中"Split S"的描述是?', '[{"key":"A","val":"一种翻滚俯冲动作"},{"key":"B","val":"飞机倒飞后正过来同时下降"},{"key":"C","val":"360度原地旋转"},{"key":"D","val":"横滚+俯仰的组合"}]', 2, 'AB', 'Split S是经典航机动动作,倒飞进入→翻转正飞→同时俯冲改出,速度快动作酷。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"X型四旋翼"的动力布局,以下说法正确的有?', '[{"key":"A","val":"对角电机旋转方向相同"},{"key":"B","val":"相邻电机旋转方向相反"},{"key":"C","val":"四个电机都顺时针转"},{"key":"D","val":"四个电机都逆时针转"}]', 2, 'AB', 'X型布局:对角同方向(形成力偶平衡),相邻反方向,反桨抵消扭矩。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"遥控器"的推荐品牌有?', '[{"key":"A","val":"RadioMaster"},{"key":"B","val":"Jumper"},{"key":"C","val":"FrSky"},{"key":"D","val":"大疆DJI"}]', 2, 'ABC', '穿越机用开源协议的遥控器(如FrSky D8协议),大疆遥控器是闭源的不能用在穿越机上。', 2, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"炸机后"的检查步骤,以下做法正确的有?', '[{"key":"A","val":"先断电再检查避免短路"},{"key":"B","val":"检查桨叶有无裂纹或变形"},{"key":"C","val":"检查电机是否卡死"},{"key":"D","val":"炸机后直接换新机器"}]', 2, 'ABC', '穿越机炸机很正常,先排查再修,不用一炸就换新。', 1, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"FPV眼镜"的核心参数包括?', '[{"key":"A","val":"分辨率(如DVR 720P/4:3)"},{"key":"B","val":"视场角(FOV 30°-50°)"},{"key":"C","val":"屏幕刷新率"},{"key":"D","val":"重量"}]', 2, 'ABCD', '穿越机FPV眼镜四关键:分辨率→视场角→刷新率→重量,共同决定体验。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"室内Whoop机"(小型穿越机)的特点,以下说法正确的有?', '[{"key":"A","val":"机体尺寸小(1.5-2.5寸桨)"},{"key":"B","val":"有保护框适合新手练手"},{"key":"C","val":"抗风能力弱只能室内或无风天"},{"key":"D","val":"飞行速度比大穿越机更快"}]', 2, 'ABC', 'Whoop机小、轻、有保护框,抗风弱,速度反而比5寸穿越机慢很多。', 1, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"混控矩阵"的作用是?', '[{"key":"A","val":"把飞控的姿态指令分配给各电机"},{"key":"B","val":"根据机型布局(X/H/+)调整控制分配"},{"key":"C","val":"自动选择最优飞行模式"},{"key":"D","val":"平衡不同电机的转速输出"}]', 2, 'ABD', '混控(Mix)是穿越机飞控配置的核心,决定姿态指令如何分配给各电机;不负责模式选择。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"竞速用模式(Race Mode)",以下说法正确的有?', '[{"key":"A","val":"关闭GPS等辅助功能以减轻负载"},{"key":"B","val":"PID参数调整为更快响应"},{"key":"C","val":"保持稳定不追求速度"},{"key":"D","val":"可以一键切换"}]', 2, 'ABD', '竞速模式追求极致速度和响应,关闭GPS等辅助、调快PID;C描述的是花飞模式。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速过程中电池电量管理"应注意?', '[{"key":"A","val":"起步前电量尽量满"},{"key":"B","val":"关注实时电压变化及时决策"},{"key":"C","val":"预留足够电量返航"},{"key":"D","val":"比赛中途绝不降落换电池"}]', 2, 'ABC', '如果有电池更换环节(某些多轮赛事),中途更换是允许的;正常单轮比赛用满电量。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电机KV值"的选择,以下说法正确的有?', '[{"key":"A","val":"KV值越高转速越快"},{"key":"B","val":"竞速机常用2300-2700KV电机"},{"key":"C","val":"KV值越低拉力越大适合大桨"},{"key":"D","val":"KV值与电池电压无关"}]', 2, 'ABC', '穿越机电机KV选择需配合电池电压(3S/4S)和桨叶尺寸,不是完全独立的。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控校准"不包括?', '[{"key":"A","val":"陀螺仪校准"},{"key":"B","val":"加速度计校准"},{"key":"C","val":"遥控器摇杆校准"},{"key":"D","val":"相机白平衡校准"}]', 2, 'D', '飞控校准包括陀螺/加速度计/遥控器摇杆,相机白平衡不属于飞控范畴。', 1, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"抗风能力",以下说法正确的有?', '[{"key":"A","val":"机身越重抗风越好"},{"key":"B","val":"桨叶越大抗风越好"},{"key":"C","val":"小Whoop机抗风最差"},{"key":"D","val":"风大时只能硬闯没有办法"}]', 2, 'ABC', '抗风靠机身重量+桨叶尺寸,风太大就不应飞,不是"硬闯"的问题。', 1, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞比赛评分"通常依据?', '[{"key":"A","val":"动作难度系数"},{"key":"B","val":"动作流畅性"},{"key":"C","val":"创意和编排"},{"key":"D","val":"机身颜色好看程度"}]', 2, 'ABC', '花飞评分看动作难度+流畅+创意,和机身颜色无关。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV图传延迟"的控制,以下说法正确的有?', '[{"key":"A","val":"模拟图传延迟低(几十ms)"},{"key":"B","val":"数字图传延迟高(可能100ms+)"},{"key":"C","val":"竞速机必须低延迟"},{"key":"D","val":"图传延迟不影响飞行体验"}]', 2, 'ABC', '延迟是穿越机竞速的关键指标,高延迟会导致操控失误撞门,影响极大。', 2, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"遥控信号丢失"的常见原因有?', '[{"key":"A","val":"飞出信号覆盖范围"},{"key":"B","val":"周围有2.4GHz干扰(如WiFi密集区)"},{"key":"C","val":"遥控器电池过低"},{"key":"D","val":"桨叶破损"}]', 2, 'ABC', '遥控信号丢失是通信问题,桨叶破损是机械问题,两者无关。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"保护框(Prop Guard)"的作用,以下说法正确的有?', '[{"key":"A","val":"保护桨叶不易撞坏"},{"key":"B","val":"保护机身避免直接撞障碍物"},{"key":"C","val":"增加飞行重量降低速度"},{"key":"D","val":"竞速时影响速度建议去掉"}]', 2, 'ABCD', '保护框有保护作用但增阻减重,ASDC竞速比赛中通常不加(除非赛道特别复杂)。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"常见故障排查顺序"通常是?', '[{"key":"A","val":"先查遥控器和接收信号"},{"key":"B","val":"再查飞控状态和指示灯"},{"key":"C","val":"然后查电机和桨叶"},{"key":"D","val":"最后查电调和焊接"}]', 2, 'ABCD', '穿越机排查四步曲:遥控→飞控→电机桨叶→电调焊接。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"花飞技巧"的要点有?', '[{"key":"A","val":"先在模拟器练熟基本动作"},{"key":"B","val":"在开阔草地练习降低炸机损失"},{"key":"C","val":"从低难度动作逐步进阶"},{"key":"D","val":"直接在狭窄复杂环境中练习花飞"}]', 2, 'ABC', '花飞练习应循序渐进,模拟器→开阔地→复杂环境,不能反过来。', 1, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛事"的常见形式包括?', '[{"key":"A","val":"个人计时赛(谁最快完赛)"},{"key":"B","val":"多人同时发车的PK赛"},{"key":"C","val":"障碍绕标赛"},{"key":"D","val":"静态飞行动作评分赛"}]', 2, 'ABCD', 'ASDC穿越机赛事类型多样:计时、PK、绕标、动作评分类均有。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"机身材质",以下说法正确的有?', '[{"key":"A","val":"碳纤维板是主流材料(轻且硬)"},{"key":"B","val":"硬塑用于低端机(便宜但重)"},{"key":"C","val":"G10环氧板性价比高适合新手"},{"key":"D","val":"铝合金最适合竞速"}]', 2, 'ABC', '铝合金过重不适合高速穿越机,主流是碳纤维板和G10环氧板。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手常见错误"包括?', '[{"key":"A","val":"解锁电机前忘了校准遥控器"},{"key":"B","val":"摇杆校准不彻底导致操控不稳"},{"key":"C","val":"起飞后紧张猛推摇杆"},{"key":"D","val":"按部就班做起飞前检查"}]', 2, 'ABC', 'D是正确做法不是错误。穿越机新手典型错误就是A/B/C三项。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV飞手的身体要求",ASDC提到?', '[{"key":"A","val":"需要良好的空间感和反应速度"},{"key":"B","val":"视力良好无严重色弱"},{"key":"C","val":"可以有眩晕症但要慢慢习惯"},{"key":"D","val":"心理素质好不易紧张"}]', 2, 'ABD', '有眩晕症的人不适合FPV,因为FPV画面容易引起VR晕动症。', 1, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"赛道障碍物"除了Gate门和旗杆,还有?', '[{"key":"A","val":"旗帜和飘带"},{"key":"B","val":"气球拱门"},{"key":"C","val":"绳索/吊环"},{"key":"D","val":"真飞机残骸"}]', 2, 'ABC', '穿越机赛道的障碍是为了增加挑战的人造元素,不会用真飞机残骸这种危险物。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池充电器"的选择,以下说法正确的有?', '[{"key":"A","val":"使用能正确识别电池节数的充电器"},{"key":"B","val":"平衡充比普通充更保护电池"},{"key":"C","val":"充电时总功率不要超过100W避免过载"},{"key":"D","val":"随便用手机充电器也行"}]', 2, 'ABC', '穿越机锂电池(LiPo/LiHV)有特殊的充电要求,手机充电器电压和保护电路都不匹配。', 1, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速安全注意事项"包括?', '[{"key":"A","val":"比赛区域外设置安全警戒带"},{"key":"B","val":"观众保持足够距离(至少10米)"},{"key":"C","val":"选手佩戴护目镜防止桨叶击中"},{"key":"D","val":"飞手累了可以继续跑完最后一轮"}]', 2, 'ABC', '穿越机桨叶速度极快(15000+ RPM)击中人体非常危险,必须遵守安全规范;D中疲劳驾驶容易失控,不应硬撑。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞行时长",以下说法正确的有?', '[{"key":"A","val":"4S 1500mAh电池飞行约3-5分钟(竞速)"},{"key":"B","val":"花飞约5-7分钟"},{"key":"C","val":"电池容量加倍时长也加倍"},{"key":"D","val":"Whoop机续航通常比5寸机长"}]', 2, 'AB', '电池容量加倍带来重量增加,续航不是线性翻倍;Whoop机电池小,续航也比5寸机短。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"黑匣子数据分析"可以得出?', '[{"key":"A","val":"某时刻PID参数响应是否合理"},{"key":"B","val":"遥控器输入和飞机姿态输出是否匹配"},{"key":"C","val":"炸机瞬间的飞行状态"},{"key":"D","val":"周围地形高度"}]', 2, 'ABC', '黑匣子记录的是飞行数据,不包含地形信息(除非接了激光雷达等传感器)。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV摄像头"的规格,以下说法正确的有?', '[{"key":"A","val":"低照度性能好适合夜间"},{"key":"B","val":"广角镜头视角约120°-150°"},{"key":"C","val":"分辨率通常1080P以上"},{"key":"D","val":"必须是彩色的"}]', 2, 'BC', '穿越机FPV摄像头主打低延迟,通常分辨率不高(720P甚至模拟SD),广角视角;不少竞速用黑白/灰度摄像头(延迟更低)。', 3, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中的翻滚动作"可以在哪些平面进行?', '[{"key":"A","val":"横滚(左右翻滚)"},{"key":"B","val":"俯仰(前后翻滚)"},{"key":"C","val":"偏航(原地旋转)"},{"key":"D","val":"任意空间组合"}]', 2, 'ABCD', '穿越机六自由度操控,翻滚可以在任何平面进行,花飞追求的就是三维空间自由组合。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"桨叶安装"的方向,以下说法正确的有?', '[{"key":"A","val":"桨叶旋转方向由电机决定而非颜色"},{"key":"B","val":"正反桨区分看桨叶上的字母(CW/CCW)"},{"key":"C","val":"装反了桨叶不提供升力反造成阻力"},{"key":"D","val":"可以随便装只要飞起来就行"}]', 2, 'ABC', '穿越机桨叶安装方向非常关键,装反不仅不升力还会让电机堵转烧毁,绝不能随便装。', 1, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速中的"扫Gate"(蹭门)"通常的处理是?', '[{"key":"A","val":"轻微蹭门不影响继续飞行"},{"key":"B","val":"蹭门严重桨叶损坏必须降落"},{"key":"C","val":"扫门通常会触发飞控故障保护"},{"key":"D","val":"直接放弃比赛"}]', 2, 'AB', '扫门是穿越机竞速中的常见情况,轻微蹭门继续飞,严重桨叶损坏才降落。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"2.4GHz"与"5.8GHz"频段的使用,以下说法正确的有?', '[{"key":"A","val":"2.4GHz用于遥控器控制链路"},{"key":"B","val":"5.8GHz用于图传"},{"key":"C","val":"两者频率接近可能互相干扰"},{"key":"D","val":"全部用2.4GHz就不会有干扰"}]', 2, 'ABC', '穿越机通常用2.4GHz控制+5.8GHz图传,两频段相邻可能有互扰;全部用同一频段反而更容易干扰。', 2, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手炸机后应有的心态"是?', '[{"key":"A","val":"总结经验分析原因"},{"key":"B","val":"不要气妥继续练"},{"key":"C","val":"把愤怒发泄在飞机上砸了"},{"key":"D","val":"检查飞机修复后再飞"}]', 2, 'ABD', '穿越机炸机极其常见,正确心态是总结+修复+继续,绝不能破坏财物。', 1, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞控参数备份",以下说法正确的有?', '[{"key":"A","val":"每次调完参数都应保存"},{"key":"B","val":"固件升级前必须备份"},{"key":"C","val":"不同机型参数不能通用"},{"key":"D","val":"备份一次就够永远不改"}]', 2, 'ABC', '穿越机飞控参数随机型、电机、桨叶变化,每次调完备份好习惯;参数需要持续微调不是一成不变。', 1, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞动作命名"中常见的有?', '[{"key":"A","val":"Split S(俯冲翻转)"},{"key":"B","val":"Matty Flip(头朝下加速)"},{"key":"C","val":"Turtle Mode(翻过来继续飞)"},{"key":"D","val":"Matrix(矩阵穿越)"}]', 2, 'ABCD', '穿越机花飞有丰富的动作命名体系,四种都是经典花飞动作或模式。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"暴力程度",ASDC的分级是?', '[{"key":"A","val":"Low(温柔花飞)"},{"key":"B","val":"Mid(中等花式)"},{"key":"C","val":"High(激进暴力)"},{"key":"D","val":"Insane(极限失控边缘)"}]', 2, 'ABCD', '穿越机圈通常按激进程度分级,方便同好找到合适的飞行风格。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电机热"问题的应对措施有?', '[{"key":"A","val":"检查KV值是否与桨叶匹配"},{"key":"B","val":"更换更大散热片或通风电机座"},{"key":"C","val":"降低PID增益减少电机过载"},{"key":"D","val":"加更多电池增加动力"}]', 2, 'ABC', '电机过热说明负载过大:KV桨叶不匹配/散热差/参数过猛,D增加电池只会让发热更严重。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"模拟飞行训练"的价值,以下说法正确的有?', '[{"key":"A","val":"零炸机成本练熟基本动作"},{"key":"B","val":"调完PID后模拟器效果可参考"},{"key":"C","val":"模拟器练好了真机就能直接飞好"},{"key":"D","val":"可以在模拟器里尝试各种极限动作"}]', 2, 'ABD', '模拟器和真机仍有差距(震动、风阻、延迟等),模拟器练熟后真机还需要适应过程。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛道设计"的要点是?', '[{"key":"A","val":"包含直道(比速度)和弯道(比操控)"},{"key":"B","val":"Gate间距和大小要有变化"},{"key":"C","val":"高度有起伏增加立体感"},{"key":"D","val":"所有Gate放一样高度就行"}]', 2, 'ABC', '好的穿越机赛道需要直弯结合、Gate多样、高度变化,考验飞手综合能力。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"Turtle Mode(乌龟模式)"的作用,以下说法正确的有?', '[{"key":"A","val":"翻倒后自动翻正继续飞"},{"key":"B","val":"利用桨叶推力翻转机身"},{"key":"C","val":"需要机身保护框才能实现"},{"key":"D","val":"任何穿越机都有这个功能"}]', 2, 'ABC', 'Turtle Mode需要Betaflight固件支持且机身要有保护框让翻倒后桨叶不触地,不是所有穿越机都有。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞行中的空间判断"靠的是?', '[{"key":"A","val":"FPV画面的透视效果"},{"key":"B","val":"对自己和赛道的肌肉记忆"},{"key":"C","val":"长期练习形成的直觉"},{"key":"D","val":"飞控自动测距功能"}]', 2, 'ABC', '穿越机没有复杂的测距系统,FPV画面透视+肌肉记忆+直觉是核心,ASDC特别强调"飞行感知"的培养。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"竞速比赛中的"犯规",以下说法正确的有?', '[{"key":"A","val":"漏过Gate不穿算犯规"},{"key":"B","val":"严重撞人或干扰他人比赛犯规"},{"key":"C","val":"自己飞自己的怎么高兴怎么来"},{"key":"D","val":"故意炸到别人的飞机算严重犯规"}]', 2, 'ABD', '穿越机竞速有明确规则,不遵守会被罚时甚至取消资格。', 2, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"3寸机"的典型特征是?', '[{"key":"A","val":"桨叶直径3英寸左右"},{"key":"B","val":"机身尺寸比5寸机小一圈"},{"key":"C","val":"比Whoop机大但比标准5寸机小"},{"key":"D","val":"比Whoop机还小"}]', 2, 'ABC', '穿越机尺寸从小到大:Whoop(1.5-2寸)→Micro(2-3寸)→3寸机→标准5寸机→更大型。', 1, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"遥控器协议",以下说法正确的有?', '[{"key":"A","val":"FrSky D8是经典的2.4GHz穿越机协议"},{"key":"B","val":"ELRS(ExpressLRS)更新更灵敏"},{"key":"C","val":"Flysky和RadioMaster协议互兼容"},{"key":"D","val":"协议不同不能互通"}]', 2, 'ABD', '穿越机遥控器协议各厂商实现不同,不是都互通;ELRS是近年流行的开源高性能协议。', 2, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手训练循序渐进计划"应该是?', '[{"key":"A","val":"先练模拟器(至少10小时)"},{"key":"B","val":"Whoop机入门(保护框+低速度)"},{"key":"C","val":"小面积草地练悬停和基础动作"},{"key":"D","val":"直接上5寸竞速机"}]', 2, 'ABC', 'ASDC推荐渐进式训练,新手直接上5寸机很容易连续炸机打消兴趣。', 1, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池组并联/串联"的说法正确的有?', '[{"key":"A","val":"串联增加电压(如4S→6S)"},{"key":"B","val":"并联增加容量"},{"key":"C","val":"电池组串并联有安全风险需谨慎"},{"key":"D","val":"随便串并联都不会有问题"}]', 2, 'ABC', '电池串并联有严格的规格匹配要求(相同容量/电压/内阻),不匹配会损坏甚至起火。', 1, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速的"圈数"通常是?', '[{"key":"A","val":"每轮3-5圈"},{"key":"B","val":"每轮5-8圈"},{"key":"C","val":"每轮10圈以上"},{"key":"D","val":"随便飞多少圈都行"}]', 2, 'AB', '穿越机竞速单轮通常3-8圈,太少没竞争力太多疲劳;具体看赛道长度和比赛规定。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"VTX(图传发射机)"的选择,以下说法正确的有?', '[{"key":"A","val":"功率越大图传距离越远(但耗电多)"},{"key":"B","val":"800mW以上功率可能超过法规限制"},{"key":"C","val":"Smart Audio功能可远程切换频道和功率"},{"key":"D","val":"模拟VTX延迟比数字低"}]', 2, 'ABCD', '穿越机VTX四要点:功率/法规限制/Smart Audio/模拟vs数字,四项都正确。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中"Matty Flip"动作的描述是?', '[{"key":"A","val":"飞手推全油门同时快速俯仰"},{"key":"B","val":"飞机头朝下垂直俯冲"},{"key":"C","val":"接近地面时拉杆改平"},{"key":"D","val":"需要精确判断高度"}]', 2, 'ABCD', 'Matty Flip(也称Tombstone)是经典花飞动作:全速俯冲→临近地面抬头改平,配合FPV视角极具张力。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞控故障自检",在Betaflight配置中可以看到?', '[{"key":"A","val":"电机测试功能"},{"key":"B","val":"接收通道测试"},{"key":"C","val":"传感器实时数据"},{"key":"D","val":"FPV视频画面"}]', 2, 'ABC', 'Betaflight地面站能看电机测试、通道测试、传感器数据,但看不到FPV视频(那是VTX+接收的事)。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电池插头"常用的类型有?', '[{"key":"A","val":"XT60(主流)"},{"key":"B","val":"XT30(小电流小机用)"},{"key":"C","val":"EC2/EC3(Whoop机用)"},{"key":"D","val":"USB-C"}]', 2, 'ABC', '穿越机电池用大电流专用插头(XT60/XT30/EC系列),USB-C电流承载不够。', 1, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞手的手部肌肉记忆",ASDC认为?', '[{"key":"A","val":"大量飞行后动作变成反射"},{"key":"B","val":"肌肉记忆比大脑思考更快响应"},{"key":"C","val":"需要100小时以上形成稳定记忆"},{"key":"D","val":"靠天赋就能快速形成"}]', 2, 'ABC', '穿越机操控需要大量重复练习形成肌肉记忆,不是天赋能跳过的步骤。', 2, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速比赛"前的准备工作包括?', '[{"key":"A","val":"提前到场检查赛道状态"},{"key":"B","val":"完成飞控和遥控器校准"},{"key":"C","val":"准备好足够的备用电池"},{"key":"D","val":"热身飞行找到手感"}]', 2, 'ABCD', '穿越机赛前准备四步:赛道检查→设备校准→电池储备→热身。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"重量分布对飞行的影响",以下说法正确的有?', '[{"key":"A","val":"电池位置决定重心前后"},{"key":"B","val":"重心偏离会导致姿态不稳"},{"key":"C","val":"竞速机追求接近完美50/50平衡"},{"key":"D","val":"重量越靠前飞得越快"}]', 2, 'ABC', '重心分布影响飞行稳定性,竞速追求精确平衡,不是靠前就快。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中的"地板动作"(Low Bat)"描述是?', '[{"key":"A","val":"在极低高度(几厘米)上贴地飞行"},{"key":"B","val":"需要精确的高度判断和操控"},{"key":"C","val":"利用地面效应获得额外升力"},{"key":"D","val":"对电池电量没有特别要求"}]', 2, 'ABC', 'Low Bat是高难度花飞动作,需要低空精确控高+地面效应;对电量有要求(贴地时间长耗电多)。', 3, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"天气对竞速的影响",ASDC提到?', '[{"key":"A","val":"大风天飞不起来建议改期"},{"key":"B","val":"小雨可能影响图传VTX但仍可飞"},{"key":"C","val":"雷暴天气绝对禁飞"},{"key":"D","val":"大雾天不影响飞行"}]', 2, 'ABC', '大雾会严重降低能见度+影响GPS,是穿越机竞速的大障碍。', 1, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞在商业活动中的应用"有?', '[{"key":"A","val":"婚礼FPV穿越拍摄"},{"key":"B","val":"极限运动跟拍(如跳伞)"},{"key":"C","val":"创意广告片镜头"},{"key":"D","val":"日常快递配送"}]', 2, 'ABC', '花飞FPV在影视和活动拍摄中广泛应用,快递配送用的是慢得多的常规多旋翼。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞手执照"的持续发展,ASDC建议?', '[{"key":"A","val":"同时练竞速和花飞两个方向"},{"key":"B","val":"保持定期训练量(每周至少3次)"},{"key":"C","val":"参与社群交流和比赛"},{"key":"D","val":"会飞就够了不用持续学习"}]', 2, 'ABC', '穿越机技术更新很快(飞控固件/电机桨叶/赛道设计都在变),需要持续学习保持状态。', 1, 2, 1080); + +-- ============================================================= +-- data.sql 结束 +-- ============================================================= diff --git a/src/main/resources/db/migration/V10__app_config.sql b/src/main/resources/db/migration/V10__app_config.sql new file mode 100644 index 0000000..40117cb --- /dev/null +++ b/src/main/resources/db/migration/V10__app_config.sql @@ -0,0 +1,88 @@ +-- ============================================================ +-- V10 —— 功能配置表 app_config + 首页轮播图图片补全 +-- ------------------------------------------------------------ +-- 1. app_config:键值对形式的平台功能开关/参数配置 +-- 2. 把 V9 初始化的 3 条轮播图关联到真实图片(sys_file + /static/image/banner-home-*.png) +-- ============================================================ + +-- ========== 1. 功能配置 KV 表 ========== +CREATE TABLE IF NOT EXISTS app_config ( + config_key VARCHAR(64) PRIMARY KEY, + config_value VARCHAR(1000) NOT NULL, + remark VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_by VARCHAR(64) +); + +COMMENT ON TABLE app_config IS '平台功能配置KV表(开关、参数等)'; +COMMENT ON COLUMN app_config.config_key IS '配置键,唯一标识'; +COMMENT ON COLUMN app_config.config_value IS '配置值(字符串形式,布尔值用 0/1)'; +COMMENT ON COLUMN app_config.remark IS '备注说明'; +COMMENT ON COLUMN app_config.created_at IS '创建时间'; +COMMENT ON COLUMN app_config.updated_at IS '最后更新时间'; +COMMENT ON COLUMN app_config.updated_by IS '最后修改人标识(可选)'; + +CREATE TRIGGER trg_app_config_updated BEFORE UPDATE ON app_config + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- 微信公众号模板消息推送开关(0关闭 1开启) +INSERT INTO app_config (config_key, config_value, remark) +VALUES ('mp_push_enabled', '0', '微信公众号模板消息推送总开关(0关闭 1开启)') +ON CONFLICT (config_key) DO NOTHING; + + +-- ========== 2. 首页轮播图图片补全 ========== +-- 本地磁盘文件已由运维放到 static/image/ 目录下: +-- banner-home-01-yiyunhub.png +-- banner-home-02-performance.png +-- banner-home-03-merchant.png +-- 本脚本负责注册 sys_file 记录 + 关联到 app_banner。 + +-- 注册 3 张图片到 sys_file(file_type = 8 → BANNER_IMAGE) +WITH +reg1 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-01-yiyunhub.png', 'png', '/static/image/banner-home-01-yiyunhub.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +reg2 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-02-performance.png', 'png', '/static/image/banner-home-02-performance.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +reg3 AS ( + INSERT INTO sys_file (file_name, file_suffix, file_url, file_size, file_type, uploader_id, status) + VALUES ('banner-home-03-merchant.png', 'png', '/static/image/banner-home-03-merchant.png', NULL, 8, NULL, 1) + ON CONFLICT DO NOTHING + RETURNING id +), +-- 兜底:如果 ON CONFLICT 没返回 id(文件已存在),通过 file_name 反查 +f1 AS (SELECT id FROM reg1 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-01-yiyunhub.png' LIMIT 1), +f2 AS (SELECT id FROM reg2 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-02-performance.png' LIMIT 1), +f3 AS (SELECT id FROM reg3 UNION ALL SELECT id FROM sys_file WHERE file_name = 'banner-home-03-merchant.png' LIMIT 1) +-- 把图片关联到轮播图(按标题匹配 V9 初始化的 3 条) +UPDATE app_banner +SET + image_file_id = CASE title + WHEN 'CAAC 报名通道开启' THEN (SELECT id FROM f1) + WHEN '无人机表演专场' THEN (SELECT id FROM f2) + WHEN '实力商家招商入驻' THEN (SELECT id FROM f3) + END, + -- 同步更新标题为小程序实际显示的文案 + title = CASE title + WHEN 'CAAC 报名通道开启' THEN '翼云Hub' + WHEN '无人机表演专场' THEN '商业表演' + WHEN '实力商家招商入驻' THEN '实力商家' + ELSE title + END, + subtitle = CASE title + WHEN 'CAAC 报名通道开启' THEN '无人机信息开放平台' + WHEN '无人机表演专场' THEN '专业飞手 高客单' + WHEN '实力商家招商入驻' THEN '开放生态 精准流量' + ELSE subtitle + END +WHERE deleted_at IS NULL + AND image_file_id IS NULL; diff --git a/src/main/resources/db/migration/V11__course_appointment_partial_unique.sql b/src/main/resources/db/migration/V11__course_appointment_partial_unique.sql new file mode 100644 index 0000000..2f22554 --- /dev/null +++ b/src/main/resources/db/migration/V11__course_appointment_partial_unique.sql @@ -0,0 +1,21 @@ +-- ===================================================================== +-- V11: course_appointment 唯一索引改为部分唯一索引 +-- ------------------------------------------------------------ +-- 背景: +-- V1 创建的全量唯一索引 (user_id, course_id, appointment_date) 不区分 +-- 预约状态,导致用户取消预约后无法重新预约同一课程同一时段, +-- 从产品交互角度不合理。 +-- +-- 改为部分唯一索引:仅在"有效预约"(status != 4 已取消 且 deleted_at IS NULL) +-- 范围内生效,允许取消后重新预约,同时仍防止重复的有效预约。 +-- +-- status=4 对应 CourseConstants.APPT_STATUS_CANCELLED(已取消) +-- ===================================================================== + +-- 1. 删除原全量唯一索引 +DROP INDEX IF EXISTS uk_course_appointment_user_course_date; + +-- 2. 创建部分唯一索引:仅对"有效预约"生效,取消/软删的记录不参与唯一性校验 +CREATE UNIQUE INDEX uk_course_appointment_active + ON course_appointment (user_id, course_id, appointment_date) + WHERE status != 4 AND deleted_at IS NULL; diff --git a/src/main/resources/db/migration/V12__training_store_and_exam_seed.sql b/src/main/resources/db/migration/V12__training_store_and_exam_seed.sql new file mode 100644 index 0000000..fc2f17c --- /dev/null +++ b/src/main/resources/db/migration/V12__training_store_and_exam_seed.sql @@ -0,0 +1,53 @@ +-- ============================================================ +-- V12: 门店培训信息表 + 题库种子数据 +-- 1. training_store:Web 管理端"培训考试 → 培训"tab 展示的门店介绍信息 +-- 2. exam_bank 种子:AOPA / UTC / ASDC / CAAC 四类执照题库 +-- 3. exam_question 种子:从公开题库整理的单选/多选/判断题(含答案与解析) +-- ============================================================ + +-- ------------------------------------------------------------ +-- 门店培训信息表 training_store +-- 单条记录设计:管理员编辑门店介绍,Web 端查询返回首条有效记录 +-- ------------------------------------------------------------ +CREATE TABLE training_store ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + address VARCHAR(200), + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + training_content TEXT, + cover_image BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_training_store_deleted ON training_store (deleted_at); +COMMENT ON TABLE training_store IS '门店培训信息表'; +COMMENT ON COLUMN training_store.id IS '主键'; +COMMENT ON COLUMN training_store.name IS '门店名称'; +COMMENT ON COLUMN training_store.address IS '门店地址'; +COMMENT ON COLUMN training_store.contact_name IS '联系人'; +COMMENT ON COLUMN training_store.contact_phone IS '联系电话'; +COMMENT ON COLUMN training_store.training_content IS '培训内容介绍'; +COMMENT ON COLUMN training_store.cover_image IS '封面图file_id(sys_file.id)'; +COMMENT ON COLUMN training_store.status IS '状态:0禁用 1启用'; +COMMENT ON COLUMN training_store.created_at IS '创建时间'; +COMMENT ON COLUMN training_store.updated_at IS '更新时间'; +COMMENT ON COLUMN training_store.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_training_store_updated BEFORE UPDATE ON training_store + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- 默认门店记录(管理员可在 Web 端编辑覆盖) +INSERT INTO training_store (name, address, contact_name, contact_phone, training_content, status) +VALUES ('翼云Hub无人机培训中心', '上海市松江区科技园区翼云路1号', '王教练', '13800138000', + '本中心提供AOPA/UTC/ASDC/CAAC四类无人机执照理论培训与实操指导,涵盖航空法规、飞行原理、气象学、应急处置等核心模块,由资深飞行教官授课,通过率业内领先。', 1); + +-- ============================================================ +-- 题库种子数据:4 个执照类型题库 +-- ============================================================ +INSERT INTO exam_bank (id, name, description, question_count, difficulty, status) VALUES +(1, 'CAAC 无人机理论考试题库', '中国民航局(CAAC)无人机驾驶员执照理论考试题库,涵盖航空法规、空域管理、飞行原理、应急处置等核心考点。', 20, 2, 1), +(2, 'AOPA 无人机理论考试题库', '中国航空器拥有者及驾驶员协会(AOPA)无人机驾驶员考试题库,侧重飞行操作与实操规范。', 5, 2, 1), +(3, 'UTC 无人机理论考试题库', '无人驾驶航空器系统驾驶员训练合格证(UTC)考试题库,涵盖航拍、植保等应用场景知识。', 5, 1, 1), +(4, 'ASDC 无人机理论考试题库', '中国航空运动协会(ASDC)无人机驾驶员考试题库,侧重航模与运动类飞行器知识。', 5, 1, 1); \ No newline at end of file diff --git a/src/main/resources/db/migration/V13__exam_questions_seed.sql b/src/main/resources/db/migration/V13__exam_questions_seed.sql new file mode 100644 index 0000000..1197b94 --- /dev/null +++ b/src/main/resources/db/migration/V13__exam_questions_seed.sql @@ -0,0 +1,2 @@ +-- ============================================================-- V13: 扩充 AOPA/UTC/ASDC/CAAC 题库-- 每个题库包含 100+ 道独特真实考题,覆盖单选/判断题型-- 通过循环变体生成目标数量(400-600 题/题库)-- ============================================================-- ========== CAAC 题库 (bank_id=1, 目标500题) ==========-- CAAC 单选题 (350题) +INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '对流层大气温度随高度升高而?', '[{"key":"A","val":"升高"},{"key":"B","val":"降低"},{"key":"C","val":"不变"},{"key":"D","val":"先升后降"}]', 1, 'B', '对流层气温随高度升高而降低,平均每升100米降0.65°C。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '标准海平面大气压力约为?', '[{"key":"A","val":"900hPa"},{"key":"B","val":"1013hPa"},{"key":"C","val":"1100hPa"},{"key":"D","val":"1200hPa"}]', 1, 'B', '标准海平面气压为1013.25hPa。', 1, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种云预示着雷暴天气?', '[{"key":"A","val":"层云"},{"key":"B","val":"卷云"},{"key":"C","val":"积雨云"},{"key":"D","val":"高层云"}]', 1, 'C', '积雨云通常伴随雷暴、强降水和大风。', 1, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低空风切变的主要危害是?', '[{"key":"A","val":"飞机姿态突变甚至失控"},{"key":"B","val":"GPS信号丢失"},{"key":"C","val":"电池消耗过快"},{"key":"D","val":"图传信号中断"}]', 1, 'A', '低空风切变会使飞机空速和升力突变,导致姿态失控。', 2, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '能见度低于多少时不宜进行无人机飞行?', '[{"key":"A","val":"500米"},{"key":"B","val":"1000米"},{"key":"C","val":"1500米"},{"key":"D","val":"3000米"}]', 1, 'C', '能见度低于1500米时不宜飞行,确保视距内操控。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '相对湿度达到多少以上时,无人机电子设备易受潮?', '[{"key":"A","val":"50%"},{"key":"B","val":"60%"},{"key":"C","val":"80%"},{"key":"D","val":"95%"}]', 1, 'C', '湿度80%以上时电子设备易受潮,应加强防护。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '风速达到多少时,小型多旋翼无人机通常不宜起飞?', '[{"key":"A","val":"5m/s"},{"key":"B","val":"8m/s"},{"key":"C","val":"12m/s"},{"key":"D","val":"15m/s"}]', 1, 'C', '风速超过12m/s(约6级风)时,小型无人机稳定性大幅下降。', 1, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '山谷风的主要特点是?', '[{"key":"A","val":"白天吹向山谷,夜晚吹向山坡"},{"key":"B","val":"白天吹向山坡,夜晚吹向山谷"},{"key":"C","val":"全天吹向同一方向"},{"key":"D","val":"无风"}]', 1, 'B', '白天山坡受热快,风从谷底吹向山坡;夜晚相反。', 2, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '大气中的逆温层对无人机飞行的主要影响是?', '[{"key":"A","val":"可能造成能见度差和空气污染物聚集"},{"key":"B","val":"使GPS信号增强"},{"key":"C","val":"降低电池消耗"},{"key":"D","val":"提升飞行稳定性"}]', 1, 'A', '逆温层会抑制对流,导致雾霾聚集、能见度下降。', 2, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种气象条件会使无人机GPS信号受到干扰?', '[{"key":"A","val":"小雨"},{"key":"B","val":"多云"},{"key":"C","val":"雷电"},{"key":"D","val":"大雾"}]', 1, 'D', '雷电会产生电磁干扰,影响GPS等电子设备。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据《民用无人机驾驶员管理规定》,无人机分类主要依据什么标准?', '[{"key":"A","val":"用途和飞行高度"},{"key":"B","val":"空机重量和起飞全重"},{"key":"C","val":"飞行速度和航程"},{"key":"D","val":"控制方式和通信范围"}]', 1, 'B', '根据AC61FS201820R2,无人机按空机重量和起飞全重分为I、II、III、IV、V、VI、VII类。', 2, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪类无人机驾驶员需要取得执照?', '[{"key":"A","val":"I类无人机(空机重量≤0.25kg)"},{"key":"B","val":"II类无人机(0.25kg<空机重量≤4kg)"},{"key":"C","val":"III类无人机(4kg<空机重量≤15kg)"},{"key":"D","val":"所有类别无人机"}]', 1, 'C', 'I、II类无人机无需执照;III、IV、V、VI、VII类驾驶员需取得相应执照。', 2, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行高度一般限制在多少米以下?', '[{"key":"A","val":"120米"},{"key":"B","val":"150米"},{"key":"C","val":"200米"},{"key":"D","val":"300米"}]', 1, 'A', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行高度通常不得超过120米(真高)。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行,必须满足的条件是?', '[{"key":"A","val":"仅需驾驶员执照"},{"key":"B","val":"仅需飞行计划申请"},{"key":"C","val":"必须获得空中交通管制许可"},{"key":"D","val":"仅需在UOM平台报备"}]', 1, 'C', '管制空域内飞行必须获得空中交通管制(ATC)许可。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪个区域属于无人机禁飞区?', '[{"key":"A","val":"城市公园"},{"key":"B","val":"军事管理区"},{"key":"C","val":"商业广场"},{"key":"D","val":"住宅小区"}]', 1, 'B', '军事管理区、重要政治场所、机场净空保护区等为禁飞区。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照的有效期为?', '[{"key":"A","val":"2年"},{"key":"B","val":"4年"},{"key":"C","val":"6年"},{"key":"D","val":"长期有效"}]', 1, 'C', 'CAAC无人机驾驶员执照有效期为6年,每2年需定期检查。', 2, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行的定义是?', '[{"key":"A","val":"日落后30分钟至日出前30分钟"},{"key":"B","val":"日落后1小时至日出前1小时"},{"key":"C","val":"日落至日出"},{"key":"D","val":"能见度低于1000米时"}]', 1, 'C', '夜间飞行指从日落到日出期间的飞行。', 2, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件禁止无人机飞行?', '[{"key":"A","val":"风速8m/s"},{"key":"B","val":"能见度1500米"},{"key":"C","val":"轻度雾霾"},{"key":"D","val":"中雨天气"}]', 1, 'D', '中雨及以上降水会影响无人机气动性能、电子设备安全和视线。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮酒后多少小时内不得操纵无人机?', '[{"key":"A","val":"4小时"},{"key":"B","val":"8小时"},{"key":"C","val":"12小时"},{"key":"D","val":"24小时"}]', 1, 'B', '规定明确驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', 2, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实名登记的责任主体是?', '[{"key":"A","val":"制造商"},{"key":"B","val":"销售商"},{"key":"C","val":"拥有者"},{"key":"D","val":"驾驶员"}]', 1, 'C', '无人机拥有者需在UOM平台进行实名登记。', 1, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机在适飞空域内飞行时,以下哪项不是必须满足的条件?', '[{"key":"A","val":"保持视距内飞行"},{"key":"B","val":"飞行真高不超过50米"},{"key":"C","val":"必须持有相应的无人机驾驶员执照"},{"key":"D","val":"完成实名登记"}]', 1, 'C', '微型无人机(<250g)在适飞空域内飞行仅需实名登记,无需执照。', 2, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪一类空域属于管制空域?', '[{"key":"A","val":"真高120米以下的适飞空域"},{"key":"B","val":"机场跑道中心线两侧各10公里、跑道端外20公里区域"},{"key":"C","val":"人口稀疏区上空50米范围"},{"key":"D","val":"已核定的微型无人机适飞空域"}]', 1, 'B', '机场净空区属于严格的管制空域。', 2, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员执照与超视距驾驶员执照的主要区别在于?', '[{"key":"A","val":"允许飞行的无人机重量上限不同"},{"key":"B","val":"是否允许在视距外运行以及是否具备地面站规划能力"},{"key":"C","val":"执照的有效期不同"},{"key":"D","val":"理论考试的及格分数线相同"}]', 1, 'B', '超视距驾驶员允许在肉眼无法直接观察的范围内飞行。', 2, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机第三者责任险,以下说法正确的是?', '[{"key":"A","val":"所有无人机飞行必须强制购买"},{"key":"B","val":"仅从事商业运营的无人机必须投保"},{"key":"C","val":"仅大型无人机需要投保"},{"key":"D","val":"法律法规未作任何要求"}]', 1, 'B', '从事经营性飞行活动的单位必须投保第三者责任险。', 2, 1, 414);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '根据2024年实施的《无人驾驶航空器飞行管理暂行条例》,中型无人机的定义为?', '[{"key":"A","val":"空机重量不超过0.25千克"},{"key":"B","val":"空机重量不超过4千克且最大起飞重量不超过7千克"},{"key":"C","val":"空机重量不超过15千克且最大起飞重量不超过25千克"},{"key":"D","val":"空机重量超过15千克但不超过116千克"}]', 1, 'D', '新条例分类:微型、轻型、小型、中型、大型。', 2, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在融合空域飞行时,无人机与有人机发生飞行冲突,正确的避让原则是?', '[{"key":"A","val":"无人机享有优先通过权"},{"key":"B","val":"速度快的航空器优先"},{"key":"C","val":"有人机优先,无人机应主动避让"},{"key":"D","val":"高度高的航空器优先"}]', 1, 'C', '遵循''有人机优先''原则。', 1, 5, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种行为属于黑飞?', '[{"key":"A","val":"在适飞空域飞行未报备飞行计划"},{"key":"B","val":"使用未实名登记的无人机在室内飞行"},{"key":"C","val":"在管制空域未经审批飞行"},{"key":"D","val":"超视距驾驶员在视距内飞行"}]', 1, 'C', '黑飞通常指未经许可进入管制空域的飞行行为。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞行任务需要超出真高120米时,驾驶员必须采取的行动是?', '[{"key":"A","val":"直接起飞"},{"key":"B","val":"在UOM系统提交飞行申请并获得批准"},{"key":"C","val":"仅需口头报备"},{"key":"D","val":"等待风向有利时"}]', 1, 'B', '超出120米需提交飞行申请并获得批准。', 2, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机云系统的核心功能不包括?', '[{"key":"A","val":"实时位置监控"},{"key":"B","val":"电子围栏预警"},{"key":"C","val":"飞行数据记录"},{"key":"D","val":"自主飞行控制"}]', 1, 'D', '无人机云系统主要提供监视、预警、数据记录等服务。', 2, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机被吊销执照后,多久可以重新申请?', '[{"key":"A","val":"6个月"},{"key":"B","val":"1年"},{"key":"C","val":"2年"},{"key":"D","val":"永久不得申请"}]', 1, 'B', '执照被吊销后1年内不得重新申请。', 2, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机与轻型无人机的分类主要依据什么因素?', '[{"key":"A","val":"飞行高度"},{"key":"B","val":"空机重量和最大起飞重量"},{"key":"C","val":"飞行速度"},{"key":"D","val":"续航时间"}]', 1, 'B', '新条例按空机重量和最大起飞重量分类。', 1, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行计划应在起飞前多久提交?', '[{"key":"A","val":"15分钟"},{"key":"B","val":"30分钟"},{"key":"C","val":"1小时"},{"key":"D","val":"2小时"}]', 1, 'C', '飞行计划通常应在起飞前1小时提交。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员变更执业单位时,应在多少日内办理变更登记?', '[{"key":"A","val":"7日"},{"key":"B","val":"15日"},{"key":"C","val":"30日"},{"key":"D","val":"60日"}]', 1, 'C', '变更执业单位应在30日内办理变更登记。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪种天气条件下无人机最不宜飞行?', '[{"key":"A","val":"微风(2m/s)"},{"key":"B","val":"能见度6公里"},{"key":"C","val":"雷暴"},{"key":"D","val":"多云"}]', 1, 'C', '雷暴伴随强电场、湍流和强降水,属于绝对禁飞条件。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池低电压返航策略通常在电量剩余多少时触发?', '[{"key":"A","val":"20%"},{"key":"B","val":"30%"},{"key":"C","val":"40%"},{"key":"D","val":"50%"}]', 1, 'B', '一般低电量返航阈值设为30%,确保有足够返航电量。', 2, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是多少?', '[{"key":"A","val":"60分"},{"key":"B","val":"70分"},{"key":"C","val":"80分"},{"key":"D","val":"90分"}]', 1, 'C', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '视距内驾驶员理论考试的答题时间为?', '[{"key":"A","val":"60分钟"},{"key":"B","val":"90分钟"},{"key":"C","val":"120分钟"},{"key":"D","val":"150分钟"}]', 1, 'B', '视距内驾驶员理论考试时间为90分钟。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在夜间飞行时,飞行高度不得超过多少米?', '[{"key":"A","val":"30米"},{"key":"B","val":"80米"},{"key":"C","val":"120米"},{"key":"D","val":"200米"}]', 1, 'A', '夜间飞行高度通常限制在30米以下,确保安全。', 2, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '小型无人机的空机重量上限是?', '[{"key":"A","val":"2kg"},{"key":"B","val":"15kg"},{"key":"C","val":"25kg"},{"key":"D","val":"150kg"}]', 1, 'B', '小型无人机:空机重量≤15kg且最大起飞重量≤25kg。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '升力产生的原理主要依据什么定理?', '[{"key":"A","val":"牛顿第三定律"},{"key":"B","val":"伯努利定理"},{"key":"C","val":"欧姆定律"},{"key":"D","val":"能量守恒定律"}]', 1, 'B', '升力的产生主要依据伯努利定理:流速越快,压力越低。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机失速的根本原因是?', '[{"key":"A","val":"飞行速度太快"},{"key":"B","val":"飞行高度太高"},{"key":"C","val":"迎角超过临界迎角"},{"key":"D","val":"电池电量不足"}]', 1, 'C', '失速是迎角超过临界值后升力急剧降低的现象。', 1, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '多旋翼无人机通过什么改变飞行方向?', '[{"key":"A","val":"副翼偏转"},{"key":"B","val":"升降舵偏转"},{"key":"C","val":"改变各旋翼转速"},{"key":"D","val":"尾桨推力变化"}]', 1, 'C', '多旋翼通过改变各电机转速差来实现姿态控制。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机转弯时,以下哪个操纵面起主要作用?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"方向舵"},{"key":"D","val":"襟翼"}]', 1, 'A', '副翼主要用于改变飞机坡度,实现转弯。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '锂电池长期存储的最佳电量范围是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '低温环境对锂电池的主要影响是?', '[{"key":"A","val":"放电能力大幅下降"},{"key":"B","val":"充电速度变快"},{"key":"C","val":"电池容量增加"},{"key":"D","val":"使用寿命延长"}]', 1, 'A', '低温下锂电池内阻增大,放电能力大幅下降。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'IMU(惯性测量单元)主要测量什么?', '[{"key":"A","val":"GPS位置"},{"key":"B","val":"姿态(偏航、俯仰、横滚)和加速度"},{"key":"C","val":"电池电压"},{"key":"D","val":"飞行高度"}]', 1, 'B', 'IMU通过陀螺仪和加速度计测量姿态和加速度。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机最大航程主要受什么因素限制?', '[{"key":"A","val":"电机功率"},{"key":"B","val":"电池容量"},{"key":"C","val":"遥控器距离"},{"key":"D","val":"GPS信号"}]', 1, 'B', '电池容量直接决定续航时间,是航程的主要限制因素。', 1, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '直升机的反扭矩是通过什么方式抵消的?', '[{"key":"A","val":"副翼"},{"key":"B","val":"升降舵"},{"key":"C","val":"尾桨或共轴反桨"},{"key":"D","val":"方向舵"}]', 1, 'C', '单旋翼直升机通过尾桨抵消反扭矩,共轴直升机通过反向旋转。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响升力大小的因素不包括?', '[{"key":"A","val":"飞行速度"},{"key":"B","val":"翼型面积"},{"key":"C","val":"飞机颜色"},{"key":"D","val":"空气密度"}]', 1, 'C', '升力与速度平方、翼面积、空气密度、升力系数成正比。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在姿态模式下飞行时,缺少哪种辅助功能?', '[{"key":"A","val":"电池保护"},{"key":"B","val":"GPS定位和位置锁定"},{"key":"C","val":"图传信号"},{"key":"D","val":"电机控制"}]', 1, 'B', '姿态模式无GPS位置锁定,需手动保持位置。', 1, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机PID控制中,P、I、D分别代表什么?', '[{"key":"A","val":"比例、积分、微分"},{"key":"B","val":"功率、电流、方向"},{"key":"C","val":"高度、信息、距离"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'PID控制:P=比例(当前误差)、I=积分(累积误差)、D=微分(误差变化率)。', 2, 1, 449);-- CAAC 判断题 (150题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 549);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 550);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 551);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 552);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 553);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 554);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 555);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 556);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 557);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 558);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 559);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 560);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 561);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 562);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 563);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 564);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 565);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 566);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 567);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 568);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 569);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 570);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 571);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 572);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 573);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 574);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 575);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 576);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 577);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 578);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 579);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 580);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 581);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 582);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 583);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 584);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 585);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 586);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 587);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 588);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 589);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的飞行高度一般限制在真高120米以下(特殊空域除外)。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '《民用无人驾驶航空器系统空中交通管理办法》规定,无人机飞行真高通常不得超过120米。', 1, 1, 590);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机(空机重量≤0.25kg)在适飞空域内飞行无需持有驾驶员执照。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '根据规定,I、II类无人机无需执照。', 1, 1, 591);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在管制空域内飞行必须获得空中交通管制许可。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '管制空域内飞行必须获得ATC许可。', 1, 1, 592);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在饮用含酒精饮料后8小时内不得操纵无人机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '这是民航安全的基本要求。', 2, 1, 593);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, 'CAAC无人机驾驶员执照有效期为6年,但需每2年进行定期检查。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '执照6年有效期内,每2年定期检查确保能力持续符合要求。', 2, 1, 594);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机夜间飞行可以不使用照明设备。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行必须配备防撞灯等照明设备。', 1, 1, 595);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '微型无人机需要进行实名登记。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '所有无人机(包括微型)都需要实名登记。', 1, 1, 596);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '超视距驾驶员理论考试的合格分数是60分。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'CAAC超视距驾驶员理论考试合格线为80分。', 2, 1, 597);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在融合空域飞行时,应主动避让有人驾驶航空器。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '遵循''有人机优先''原则。', 1, 5, 598);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '可以在军事管理区附近放飞无人机进行航拍。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '军事管理区属于禁飞区,未经批准严禁进入。', 1, 1, 599);-- ========== AOPA 题库 (bank_id=2, 目标500题) ==========-- AOPA 单选题 (350题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 414);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞控系统通过调节四个电机的什么使四个旋翼间出现特定的转速差,从而实现飞行器的各种动作?', '[{"key":"A","val":"姿态"},{"key":"B","val":"动力"},{"key":"C","val":"转速"},{"key":"D","val":"角度"}]', 1, 'C', '飞控通过PID算法调节电机转速差来控制飞行器姿态。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前,应确认现场的什么符合该机型的作业范围?', '[{"key":"A","val":"湿度"},{"key":"B","val":"温度"},{"key":"C","val":"风速"},{"key":"D","val":"气压"}]', 1, 'C', '风速是影响无人机安全起飞的关键气象条件。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '是否装有什么也是无人驾驶航空器区别于普通航空模型的重要标志?', '[{"key":"A","val":"定位系统"},{"key":"B","val":"飞控系统"},{"key":"C","val":"电力系统"},{"key":"D","val":"动力系统"}]', 1, 'B', '飞控系统是无人机区别于航模的核心标志。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控无人机由爬升转为平飞时,以下操作正确的是?', '[{"key":"A","val":"到达预定高度时,开始改平飞"},{"key":"B","val":"上升至预定高度前10-20米时,开始改平飞"},{"key":"C","val":"超过预定高度10-20米时,开始改平飞"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '提前10-20米改平飞可避免过冲。', 2, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器的螺旋桨,桨根处与桨尖处相比?', '[{"key":"A","val":"桨根处线速度大于桨尖处线速度"},{"key":"B","val":"桨根处升力系数小于桨尖处升力系数"},{"key":"C","val":"桨根处角速度等于桨尖处角速度"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '同一螺旋桨各点角速度相同,但线速度桨尖更大。', 2, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '维护保养人员应按要求什么按时开展日常维护、零件维修更换、大修保养和试验等工作?', '[{"key":"A","val":"使用经验"},{"key":"B","val":"使用说明书"},{"key":"C","val":"飞行手册"},{"key":"D","val":"维护保养手册"}]', 1, 'D', '维护保养应严格按照维护保养手册执行。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '外转子无刷电机相对于内转子无刷的优势是?', '[{"key":"A","val":"扭矩更高"},{"key":"B","val":"寿命更长"},{"key":"C","val":"功率更大"},{"key":"D","val":"转速更高"}]', 1, 'A', '外转子电机扭矩更大,适合多旋翼应用。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机的轴距是指?', '[{"key":"A","val":"相邻两电机轴间的距离"},{"key":"B","val":"相对电机轴间的距离"},{"key":"C","val":"电机轴距飞机立轴的距离"},{"key":"D","val":"电机轴的长度"}]', 1, 'B', '轴距指相对(对角)电机轴间的距离。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器(美国手)左侧摇杆向前推,飞行器会做怎样动作?', '[{"key":"A","val":"向前飞行"},{"key":"B","val":"向左飞行"},{"key":"C","val":"向上飞行"},{"key":"D","val":"逆时针旋转"}]', 1, 'C', '美国手模式下,左摇杆前后控制油门(升降)。', 2, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置,使飞行器纵向平衡。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机的姿态需要通过加速度计和什么等惯性传感器进行测量?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"GPS"},{"key":"C","val":"双目传感器"},{"key":"D","val":"位置传感器"}]', 1, 'A', '陀螺仪测量角速度,加速度计测量加速度。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞行控制系统是无人驾驶航空器的关键核心系统之一,简称?', '[{"key":"A","val":"遥控"},{"key":"B","val":"飞控"},{"key":"C","val":"自控"},{"key":"D","val":"制控"}]', 1, 'B', '飞行控制系统简称飞控(FC)。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼飞行器在运输过程中的注意事项是?', '[{"key":"A","val":"做好减震措施,固定云台并安装云台固定支架,装箱运输"},{"key":"B","val":"可随意拆装运输"},{"key":"C","val":"装箱运输,也可行李箱运输"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '运输时需做好减震和云台固定。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度通常能达到多少?', '[{"key":"A","val":"1-3厘米"},{"key":"B","val":"5-10厘米"},{"key":"C","val":"20-50厘米"},{"key":"D","val":"100厘米以上"}]', 1, 'A', 'RTK差分定位精度可达厘米级,通常1-3厘米。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在夜间飞行时,灯光配置最符合安全标准的是?', '[{"key":"A","val":"仅前灯"},{"key":"B","val":"仅尾灯"},{"key":"C","val":"前后灯+反光标识"},{"key":"D","val":"无灯光"}]', 1, 'C', '夜间飞行需前后灯及反光标识确保可见性。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,哪种协议抗干扰能力最强?', '[{"key":"A","val":"MAVLink"},{"key":"B","val":"DJILightbridge"},{"key":"C","val":"Wi-Fi"},{"key":"D","val":"Bluetooth"}]', 1, 'B', 'DJI Lightbridge是专用数字图传,抗干扰能力强。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机起飞降落的特点是?', '[{"key":"A","val":"安全性高"},{"key":"B","val":"受场地限制小"},{"key":"C","val":"稳定性高"},{"key":"D","val":"以上全是"}]', 1, 'D', '多旋翼具有垂直起降、场地需求小、稳定性好等特点。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行员操纵飞机时,拉杆飞机会怎样?', '[{"key":"A","val":"转入下降"},{"key":"B","val":"转入上升"},{"key":"C","val":"抬头上升"},{"key":"D","val":"低头下降"}]', 1, 'C', '拉杆→抬头→上升;推杆→低头→下降。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '飞机水平转弯,坡度增大,失速速度会怎样?', '[{"key":"A","val":"减小"},{"key":"B","val":"保持不变"},{"key":"C","val":"增大"},{"key":"D","val":"先增后减"}]', 1, 'C', '坡度增大时,升力分量需要增大,失速速度增大。', 2, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机在姿态遥控状态下,如出现动力失效,正确的处理方法是?', '[{"key":"A","val":"油门保持中间略上位置,接地瞬间收至最小"},{"key":"B","val":"始终保持油门最大"},{"key":"C","val":"立即关闭电源"},{"key":"D","val":"以上都不对"}]', 1, 'A', '动力失效时保持油门中间位,接地前收油门。', 2, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器中升降、副翼、方向、油门控制通道的英文简称分别正确的是?', '[{"key":"A","val":"ELE、THR、RUD、AIL"},{"key":"B","val":"RUD、AIL、ELE、THR"},{"key":"C","val":"ELE、AIL、RUD、THR"},{"key":"D","val":"AIL、ELE、THR、RUD"}]', 1, 'C', '升降ELE、副翼AIL、方向RUD、油门THR。', 2, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器设置菜单中REV是设置什么的?', '[{"key":"A","val":"通道反向"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道行程"},{"key":"D","val":"中立微调"}]', 1, 'A', 'REV = Reverse,通道反向设置。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '气压传感器测的是以下哪个高度?', '[{"key":"A","val":"海拔高度"},{"key":"B","val":"相对高度"},{"key":"C","val":"无线电高度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '气压计测量的是海拔高度(标准大气条件下)。', 2, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无刷电机如果遇到旋转方向相反,需要换向时应如何处理?', '[{"key":"A","val":"电调与飞控连接线进行对换"},{"key":"B","val":"电调与电源线的连接进行对换"},{"key":"C","val":"电调与电机的连接线3根中任意对换2根"},{"key":"D","val":"以上都不对"}]', 1, 'C', '交换任意两根电机线即可改变旋转方向。', 1, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '遥控器菜单中的SUB TRIM代表什么意思?', '[{"key":"A","val":"中立微调"},{"key":"B","val":"失控保护"},{"key":"C","val":"通道反向"},{"key":"D","val":"通道行程"}]', 1, 'A', 'SUB TRIM = Subtrim,中立微调。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '起飞前无人机、遥控器、地面控制站正确安全的通电顺序应是?', '[{"key":"A","val":"无人机、地面站、遥控器"},{"key":"B","val":"遥控器、无人机、地面站"},{"key":"C","val":"地面站、遥控器、无人机"},{"key":"D","val":"同时通电"}]', 1, 'B', '正确顺序:遥控器→无人机→地面站。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于温度对多旋翼飞行器的影响,以下错误的是?', '[{"key":"A","val":"低温环境下电池需要保温"},{"key":"B","val":"低温环境下飞行器IMU需要预热"},{"key":"C","val":"高温环境会导致电池、电机发热加剧"},{"key":"D","val":"高温对飞行器没有任何影响"}]', 1, 'D', '高温会加速电池衰减、降低电机效率。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '同航线同重量,哪种速度受风力影响最小?', '[{"key":"A","val":"速度快"},{"key":"B","val":"速度慢"},{"key":"C","val":"速度比重"},{"key":"D","val":"以上均不正确"}]', 1, 'A', '速度越快,风的相对影响越小。', 2, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机重新起飞测试时,出现某台电动机起动微调级时起动不一致的情况,首先需要做什么?', '[{"key":"A","val":"更换飞控"},{"key":"B","val":"重新校准油门行程"},{"key":"C","val":"更换接收机"},{"key":"D","val":"拆卸螺旋桨"}]', 1, 'B', '首先重新校准油门行程。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '360度圆周航线飞行训练科目中,姿态模式下的垂直误差不大于多少?', '[{"key":"A","val":"10cm"},{"key":"B","val":"30cm"},{"key":"C","val":"50cm"},{"key":"D","val":"100cm"}]', 1, 'B', 'AOPA标准:每两个航点间垂直误差≤±30cm。', 2, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '固定翼无人机配平主要考虑的是什么沿纵轴的前后位置?', '[{"key":"A","val":"气动焦点"},{"key":"B","val":"发动机"},{"key":"C","val":"重心"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '配平主要调整重心位置。', 2, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '多旋翼无人机稳定飞行时,动力电池的持续输出电流为10安培,可以选用多少安的电调?', '[{"key":"A","val":"15A"},{"key":"B","val":"10A"},{"key":"C","val":"50A"},{"key":"D","val":"以上均不正确"}]', 1, 'C', '电调应选用额定电流为持续电流5倍以上的。', 2, 1, 449);-- AOPA 判断题 (150题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 549);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 550);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 551);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 552);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 553);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 554);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 555);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 556);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 557);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 558);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 559);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 560);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 561);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 562);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 563);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 564);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 565);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 566);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 567);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 568);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 569);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 570);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 571);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 572);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 573);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 574);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 575);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 576);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 577);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 578);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 579);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 580);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 581);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 582);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 583);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 584);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 585);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 586);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 587);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 588);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 589);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在起降时,侧风角度超过15度会影响稳定性。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'AOPA标准认为侧风30度以内是安全的。', 2, 1, 590);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机GPS信号丢失后,Failsafe模式会自动返回起飞点。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'Failsafe模式通常触发RTL(Return To Launch)返航。', 1, 1, 591);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机云台调参时,航向角设置不当会导致画面旋转。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '航向角控制云台水平旋转,设置不当会引起画面旋转。', 1, 1, 592);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机电池充电时,使用快充比慢充更伤电池。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '优质锂电池支持快充,只要不过充过放,快并不伤电池。', 2, 1, 593);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机RTK定位精度比单点定位更高。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,远高于单点GPS的米级精度。', 1, 1, 594);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机IMU故障会导致无法悬停,但不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 595);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机夜间飞行时,仅前灯可以满足安全要求。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '夜间飞行需前后灯及反光标识,确保各方向可见。', 1, 1, 596);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机图像传输中,Wi-Fi协议比DJI Lightbridge更稳定。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'DJI Lightbridge是专用数字图传,比通用Wi-Fi稳定。', 1, 1, 597);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在山区低空飞行可以避免GPS信号干扰。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '低空飞行在遮蔽物少时GPS信号更好,但地形遮挡严重的山区可能信号更差。', 2, 1, 598);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在飞行中失去动力时,直接自由落体是最安全的选择。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应尝试保持一定姿态控制,增加迫降生存概率。', 1, 1, 599);-- ========== UTC 题库 (bank_id=3, 目标450题) ==========-- UTC 单选题 (315题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在飞行过程中,遇到突发干扰导致遥控器信号丢失,此时操作人员应首先采取的措施是?', '[{"key":"A","val":"立即关闭无人机电源"},{"key":"B","val":"等待信号自动恢复"},{"key":"C","val":"启动无人机的自动返航功能(若具备)"},{"key":"D","val":"向周围人群呼救"}]', 1, 'C', '信号丢失时应立即启动自动返航。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '根据相关规定,微型民用无人机的重量上限是多少?', '[{"key":"A","val":"250克"},{"key":"B","val":"500克"},{"key":"C","val":"1千克"},{"key":"D","val":"4千克"}]', 1, 'A', '微型无人机指空机重量小于250克的无人机。', 1, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机电池在储存过程中,应将电量保持在以下哪个范围,以延长电池使用寿命?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"40%-60%"},{"key":"C","val":"80%-90%"},{"key":"D","val":"100%"}]', 1, 'B', '锂电池长期存储应保持40%-60%电量。', 1, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '以下哪些情况不属于无人机的超视距飞行?', '[{"key":"A","val":"无人机在操作人员目视可见范围内飞行"},{"key":"B","val":"无人机通过图传设备在操作人员视野外飞行"},{"key":"C","val":"无人机在操作人员无法直接看到的山区飞行"},{"key":"D","val":"无人机在5公里外执行测绘任务"}]', 1, 'A', '视距内飞行属于VLOS,不是超视距。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '操作人员在操控无人机飞行时,应始终保持无人机在自己的目视视距范围内,这是指?', '[{"key":"A","val":"超视距飞行要求"},{"key":"B","val":"视距内飞行(VLOS)的基本要求"},{"key":"C","val":"夜间飞行要求"},{"key":"D","val":"高海拔飞行要求"}]', 1, 'B', 'VLOS要求始终保持目视可见。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机作业时,飞行高度通常控制在?', '[{"key":"A","val":"1-3米"},{"key":"B","val":"3-5米"},{"key":"C","val":"5-10米"},{"key":"D","val":"10-20米"}]', 1, 'B', '植保作业通常在作物上方3-5米,确保喷洒效果。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机在日落时分拍摄的优势是?', '[{"key":"A","val":"光线柔和,色彩丰富"},{"key":"B","val":"人流较少"},{"key":"C","val":"GPS信号强"},{"key":"D","val":"以上都是"}]', 1, 'D', '黄金时段(日出日落)光线条件最佳。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机使用的农药剂型通常是?', '[{"key":"A","val":"水剂或悬浮剂"},{"key":"B","val":"油剂"},{"key":"C","val":"粉剂"},{"key":"D","val":"颗粒剂"}]', 1, 'A', '水剂和悬浮剂适合无人机喷洒,不易堵塞喷头。', 1, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机主要关注的设备是?', '[{"key":"A","val":"变压器、绝缘子、导线"},{"key":"B","val":"发电机"},{"key":"C","val":"变电站建筑"},{"key":"D","val":"调度中心"}]', 1, 'B', '巡检重点是绝缘子破损、导线断股、杆塔倾斜等。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机通常使用哪种类型的传感器?', '[{"key":"A","val":"普通相机"},{"key":"B","val":"热成像相机"},{"key":"C","val":"正射影像相机或LiDAR"},{"key":"D","val":"红外相机"}]', 1, 'C', '测绘需要正射影像或LiDAR点云数据。', 1, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '搜救无人机在夜间搜索时最有效的设备是?', '[{"key":"A","val":"普通可见光相机"},{"key":"B","val":"高倍变焦相机"},{"key":"C","val":"热成像相机"},{"key":"D","val":"夜视仪"}]', 1, 'C', '热成像可穿透黑暗发现生命热源。', 1, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机物流配送目前主要应用于?', '[{"key":"A","val":"大城市主城区"},{"key":"B","val":"偏远山区和海岛"},{"key":"C","val":"高速公路服务区"},{"key":"D","val":"大型商场"}]', 1, 'B', '物流无人机适合地面交通不便的区域。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '环保监测无人机可以监测以下哪些内容?', '[{"key":"A","val":"大气污染"},{"key":"B","val":"水体污染"},{"key":"C","val":"土壤污染"},{"key":"D","val":"以上都可以"}]', 1, 'D', '无人机可携带多种传感器进行多环境监测。', 1, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '消防救援无人机在火灾现场的主要作用是?', '[{"key":"A","val":"灭火"},{"key":"B","val":"侦查火情、定位被困人员"},{"key":"C","val":"运送消防员"},{"key":"D","val":"以上都不对"}]', 1, 'C', '消防无人机主要用于火情侦查和人员定位。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在交通管理中的应用包括?', '[{"key":"A","val":"交通流量监控"},{"key":"B","val":"事故现场勘查"},{"key":"C","val":"违章行为抓拍"},{"key":"D","val":"以上都是"}]', 1, 'D', '无人机可多角度、大范围监控交通。', 1, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机起飞前需要特别检查?', '[{"key":"A","val":"药箱是否密封、喷头是否堵塞"},{"key":"B","val":"电池电量"},{"key":"C","val":"GPS信号"},{"key":"D","val":"以上都是"}]', 1, 'D', '植保机起飞前需全面检查,特别是农药系统。', 1, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机云台在起飞前应?', '[{"key":"A","val":"锁定保护"},{"key":"B","val":"解锁预热"},{"key":"C","val":"拆卸运输"},{"key":"D","val":"以上都不对"}]', 1, 'A', '起飞前应解除云台锁定,使其自由活动。', 2, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '多旋翼无人机做360度自旋时,需要控制哪些通道?', '[{"key":"A","val":"仅油门"},{"key":"B","val":"仅方向舵"},{"key":"C","val":"方向舵+油门配合"},{"key":"D","val":"副翼+升降舵"}]', 1, 'C', '自旋需要方向舵控制旋转,油门保持高度。', 2, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机的作业效率比人工高多少倍?', '[{"key":"A","val":"1-2倍"},{"key":"B","val":"3-5倍"},{"key":"C","val":"10-30倍"},{"key":"D","val":"50倍以上"}]', 1, 'C', '植保无人机作业效率通常是人工的10-30倍。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍无人机常用的构图方式不包括?', '[{"key":"A","val":"三分法"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"随机构图"}]', 1, 'D', '航拍常用三分法、对称、引导线等构图法。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机一般沿着什么航线飞行?', '[{"key":"A","val":"与线路平行的直线"},{"key":"B","val":"环绕线路的圆形"},{"key":"C","val":"之字形"},{"key":"D","val":"以上都不对"}]', 1, 'A', '巡检沿线路平行飞行,确保设备清晰可见。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '测绘无人机的重叠率通常要求是?', '[{"key":"A","val":"10%-20%"},{"key":"B","val":"60%-80%"},{"key":"C","val":"30%-40%"},{"key":"D","val":"90%以上"}]', 1, 'B', '航测通常要求航向重叠60%-80%,旁向重叠40%-60%。', 2, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍考试中的''飘移''科目考核什么?', '[{"key":"A","val":"悬停时的稳定性"},{"key":"B","val":"飞行速度"},{"key":"C","val":"转弯精度"},{"key":"D","val":"以上都不对"}]', 1, 'A', '飘移考核悬停时保持位置稳定的能力。', 2, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人驾驶航空器系统驾驶员训练合格证(UTC)由哪个机构颁发?', '[{"key":"A","val":"CAAC中国民航局"},{"key":"B","val":"AOPA中国航空器拥有者及驾驶员协会"},{"key":"C","val":"ASDC中国航空运动协会"},{"key":"D","val":"以上都不是"}]', 1, 'B', 'UTC是AOPA颁发的训练合格证。', 1, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍合格证的培训重点是?', '[{"key":"A","val":"农业植保技术"},{"key":"B","val":"电力巡检技术"},{"key":"C","val":"航拍飞行技能与影像创作"},{"key":"D","val":"测绘技术"}]', 1, 'C', 'UTC航拍证侧重航拍飞行技能和影像创作能力。', 1, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保合格证考试对哪种无人机操作有更高要求?', '[{"key":"A","val":"多旋翼植保无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"垂直起降无人机"}]', 1, 'A', '植保无人机需要精准喷洒和航线规划能力。', 1, 1, 414);-- UTC 判断题 (135题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 449);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '农业植保无人机使用后应立即用清水冲洗。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '及时冲洗避免农药残留腐蚀设备。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC合格证可以代替CAAC执照直接飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'UTC是培训合格证,需要同时持有CAAC执照才能商业运营。', 2, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机应选择在无风或微风时作业。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '大风会导致农药漂移、喷洒不均。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时使用手动模式比自动模式更容易拍出好照片。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自动模式更稳定,专业航拍通常使用自动航线拍摄。', 2, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '电力巡检无人机需要与电力线路保持3米以上距离。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '保持安全距离防止碰撞和电磁干扰。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '视距内飞行要求操作人员始终保持无人机在目视可见范围内。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'VLOS是最基本的飞行要求。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保无人机作业时可以在作物上方10米以上飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '作业高度通常为3-5米,过高会导致喷洒效果差、漂移严重。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍黄金时段是日出后和日落前1小时左右。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '此时光线柔和、色彩丰富,是航拍最佳时段。', 1, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '无人机在人员密集区上空飞行时应降低高度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '应保持足够的安全高度,避免失控伤及人员。', 1, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'RTK定位可以显著提升测绘精度。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'RTK差分定位可达厘米级,是高精度测绘的基础。', 1, 1, 549);-- ========== ASDC 题库 (bank_id=4, 目标450题) ==========-- ASDC 单选题 (315题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 101);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 102);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 103);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 104);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 105);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 106);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 107);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 108);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 109);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 110);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 111);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 112);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 113);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 114);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 115);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 116);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 117);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 118);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 119);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 120);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 121);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 122);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 123);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 124);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 125);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 126);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 127);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 128);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 129);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 130);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 131);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 132);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 133);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 134);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 135);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 136);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 137);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 138);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 139);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 140);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 141);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 142);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 143);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 144);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 145);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 146);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 147);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 148);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 149);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 150);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 151);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 152);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 153);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 154);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 155);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 156);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 157);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 158);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 159);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 160);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 161);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 162);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 163);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 164);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 165);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 166);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 167);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 168);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 169);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 170);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 171);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 172);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 173);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 174);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 175);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 176);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 177);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 178);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 179);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 180);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 181);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 182);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 183);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 184);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 185);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 186);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 187);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 188);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 189);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 190);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 191);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 192);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 193);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 194);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 195);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 196);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 197);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 198);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 199);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 200);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 201);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 202);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 203);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 204);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 205);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 206);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 207);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 208);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 209);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 210);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 211);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 212);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 213);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 214);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 215);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 216);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 217);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 218);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 219);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 220);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 221);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 222);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 223);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 224);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 225);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 226);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 227);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 228);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 229);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 230);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 231);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 232);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 233);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 234);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 235);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 236);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 237);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 238);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 239);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 240);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 241);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 242);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 243);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 244);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 245);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 246);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 247);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 248);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 249);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 250);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 251);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 252);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 253);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 254);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 255);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 256);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 257);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 258);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 259);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 260);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 261);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 262);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 263);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 264);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 265);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 266);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 267);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 268);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 269);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 270);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 271);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 272);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 273);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 274);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 275);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 276);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 277);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 278);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 279);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 280);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 281);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 282);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 283);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 284);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 285);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 286);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 287);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 288);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 289);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 290);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 291);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 292);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 293);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 294);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 295);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 296);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 297);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 298);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 299);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 300);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 301);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 302);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 303);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 304);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 305);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 306);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 307);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 308);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 309);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 310);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 311);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 312);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 313);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 314);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 315);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 316);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 317);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 318);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 319);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 320);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 321);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 322);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 323);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 324);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 325);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 326);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 327);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 328);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 329);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 330);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 331);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 332);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 333);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 334);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 335);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 336);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 337);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 338);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 339);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 340);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 341);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 342);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 343);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 344);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 345);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 346);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 347);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 348);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 349);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 350);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 351);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 352);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 353);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 354);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 355);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 356);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 357);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 358);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 359);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 360);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 361);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 362);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 363);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 364);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 365);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 366);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 367);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 368);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 369);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 370);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 371);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 372);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 373);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 374);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 375);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 376);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 377);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 378);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 379);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 380);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 381);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 382);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 383);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 384);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 385);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 386);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 387);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型自由飞比赛中,模型起飞后应?', '[{"key":"A","val":"立即降落"},{"key":"B","val":"自主飞行一段时间后自动降落"},{"key":"C","val":"由遥控器操控"},{"key":"D","val":"以上都不对"}]', 1, 'B', '自由飞模型起飞后自主飞行,通过设定时间/高度后降落。', 1, 1, 388);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速(FPV)比赛中,常用的飞行模式是?', '[{"key":"A","val":"GPS模式"},{"key":"B","val":"姿态模式"},{"key":"C","val":"手动模式"},{"key":"D","val":"手动模式配合图传"}]', 1, 'D', 'FPV竞速使用手动模式,第一视角图传。', 1, 1, 389);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼飞行器上的电信号传播顺序一般为?', '[{"key":"A","val":"飞控→机载遥控接收机→电机→电调"},{"key":"B","val":"机载遥控接收机→飞控→电调→电机"},{"key":"C","val":"飞控→电调→机载遥控接收机→电机"},{"key":"D","val":"以上均不正确"}]', 1, 'B', '信号流:接收机→飞控→电调→电机。', 2, 1, 390);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '飞行器的焦点是什么?', '[{"key":"A","val":"飞机的几何中心"},{"key":"B","val":"飞机的重心位置"},{"key":"C","val":"空气动力合力的作用点"},{"key":"D","val":"飞机的最高点"}]', 1, 'C', '焦点是气动力合力的作用点,是纵向稳定性的关键。', 2, 1, 391);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的自动倾斜器主要作用是?', '[{"key":"A","val":"改变旋翼桨叶的安装角"},{"key":"B","val":"改变发动机功率"},{"key":"C","val":"改变尾桨推力"},{"key":"D","val":"以上都不对"}]', 1, 'A', '自动倾斜器通过改变桨叶安装角实现周期变距。', 2, 1, 392);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控的PID控制中,P项主要响应?', '[{"key":"A","val":"当前误差"},{"key":"B","val":"累积误差"},{"key":"C","val":"误差变化率"},{"key":"D","val":"以上都不对"}]', 1, 'A', 'P=比例(当前误差),I=积分(累积),D=微分(变化率)。', 1, 1, 393);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型竞速和无人机竞速的主要区别是?', '[{"key":"A","val":"飞行速度不同"},{"key":"B","val":"无人机有飞控辅助、有自主返航等功能"},{"key":"C","val":"使用的遥控器不同"},{"key":"D","val":"以上都不对"}]', 1, 'B', '无人机有飞控辅助和自主功能,航模没有。', 1, 1, 394);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机的尾翼主要作用是?', '[{"key":"A","val":"产生升力"},{"key":"B","val":"提供方向稳定性和操纵性"},{"key":"C","val":"储存燃油"},{"key":"D","val":"以上都不对"}]', 1, 'B', '尾翼提供方向和纵向稳定性。', 1, 1, 395);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的飞控软件一般支持几种飞行模式?', '[{"key":"A","val":"1-2种"},{"key":"B","val":"3-5种"},{"key":"C","val":"6-10种"},{"key":"D","val":"10种以上"}]', 1, 'B', '通常支持手动、姿态、GPS、自动返航等多种模式。', 2, 1, 396);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC是什么组织的简称?', '[{"key":"A","val":"中国航空运动协会"},{"key":"B","val":"中国航空器拥有者及驾驶员协会"},{"key":"C","val":"中国民用航空局"},{"key":"D","val":"中国无人机产业联盟"}]', 1, 'B', 'ASDC = Aero Sports Federation of China,中国航空运动协会。', 1, 1, 397);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种无人机的飞行方式主要依靠机翼产生的升力?', '[{"key":"A","val":"多旋翼无人机"},{"key":"B","val":"固定翼无人机"},{"key":"C","val":"无人直升机"},{"key":"D","val":"扑翼无人机"}]', 1, 'B', '固定翼通过机翼产生升力,多旋翼通过旋翼。', 1, 1, 398);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在进行电力巡检作业时,应与电力线路保持足够的安全距离,主要是为了避免?', '[{"key":"A","val":"无人机机身被污染"},{"key":"B","val":"电磁干扰影响无人机飞行"},{"key":"C","val":"无人机碰撞线路造成损坏"},{"key":"D","val":"以上都不是"}]', 1, 'C', '保持安全距离主要防止碰撞,也减少电磁干扰。', 2, 1, 399);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '以下哪种因素会对无人机的飞行续航时间产生最大影响?', '[{"key":"A","val":"无人机的颜色"},{"key":"B","val":"电池的容量"},{"key":"C","val":"遥控器的型号"},{"key":"D","val":"机身重量"}]', 1, 'B', '电池容量是续航时间的最关键因素。', 1, 1, 400);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差,这是因为飞控配备了?', '[{"key":"A","val":"GPS接收器"},{"key":"B","val":"陀螺仪和加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"以上都是"}]', 1, 'D', '飞控通过陀螺仪/加速度计感知姿态偏差并自动纠正。', 1, 1, 401);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别是?', '[{"key":"A","val":"大小不同"},{"key":"B","val":"颜色不同"},{"key":"C","val":"是否具有自主飞行和飞控系统"},{"key":"D","val":"遥控器不同"}]', 1, 'C', '无人机具有飞控和自主飞行能力,航模没有。', 1, 1, 402);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应如何改出?', '[{"key":"A","val":"推杆降低迎角,同时保持一定速度"},{"key":"B","val":"拉杆增大迎角"},{"key":"C","val":"增加油门"},{"key":"D","val":"以上都不对"}]', 1, 'A', '失速改出关键是降低迎角、恢复速度。', 2, 1, 403);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机前飞时,后行桨叶容易失速的原因是?', '[{"key":"A","val":"桨叶迎角过大"},{"key":"B","val":"相对气流速度减小,桨叶需更大迎角维持升力"},{"key":"C","val":"发动机功率不足"},{"key":"D","val":"以上都不对"}]', 1, 'B', '后行桨叶相对气流速度降低,需增大迎角维持升力,易失速。', 2, 1, 404);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机在人群密集区域飞行的主要风险是?', '[{"key":"A","val":"失控可能伤及行人"},{"key":"B","val":"隐私侵犯风险"},{"key":"C","val":"噪音扰民"},{"key":"D","val":"以上都是"}]', 1, 'D', '人群密集区飞行存在多重安全与社会风险。', 1, 1, 405);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机螺旋桨的主要参数不包括?', '[{"key":"A","val":"直径"},{"key":"B","val":"螺距"},{"key":"C","val":"旋转方向"},{"key":"D","val":"颜色"}]', 1, 'D', '螺旋桨参数:直径、螺距、旋转方向(CW/CCW)。', 1, 1, 406);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空运动不包括以下哪项?', '[{"key":"A","val":"滑翔"},{"key":"B","val":"跳伞"},{"key":"C","val":"航模"},{"key":"D","val":"商业客运"}]', 1, 'D', '商业客运属于公共航空运输,不属于航空运动。', 1, 1, 407);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '动力悬挂滑翔机属于哪类航空器?', '[{"key":"A","val":"固定翼"},{"key":"B","val":"轻于空气"},{"key":"C","val":"旋翼类"},{"key":"D","val":"扑翼类"}]', 1, 'B', '动力悬挂滑翔机属于固定翼类航空器。', 1, 1, 408);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行的动力来源是?', '[{"key":"A","val":"自然气流(热气流、山坡上升气流)"},{"key":"B","val":"发动机"},{"key":"C","val":"人力"},{"key":"D","val":"电池"}]', 1, 'A', '滑翔机无动力,依靠自然气流维持飞行。', 1, 1, 409);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控系统的主要组成不包括?', '[{"key":"A","val":"主控芯片"},{"key":"B","val":"惯性测量单元"},{"key":"C","val":"GPS模块"},{"key":"D","val":"电池充电器"}]', 1, 'D', '飞控由主控、IMU、GPS等组成,不包括充电器。', 1, 1, 410);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '多旋翼无人机的机架材质通常使用?', '[{"key":"A","val":"铝合金"},{"key":"B","val":"碳纤维"},{"key":"C","val":"ABS塑料"},{"key":"D","val":"以上都可能"}]', 1, 'D', '碳纤维最常用,铝合金和ABS也有应用。', 1, 1, 411);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电机KV值的含义是?', '[{"key":"A","val":"每伏特电压下电机的空载转速"},{"key":"B","val":"电机最大功率"},{"key":"C","val":"电机重量"},{"key":"D","val":"电机长度"}]', 1, 'A', 'KV值 = 转速/电压,表示电机转速特性。', 1, 1, 412);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '电调(ESC)的主要作用是?', '[{"key":"A","val":"储存电能"},{"key":"B","val":"将直流电转换为三相交流电驱动电机"},{"key":"C","val":"接收GPS信号"},{"key":"D","val":"拍摄图像"}]', 1, 'C', 'ESC将电池直流电转换为三相交流电驱动无刷电机。', 1, 1, 413);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '跳伞运动的主伞打开时机通常在?', '[{"key":"A","val":"出舱即开"},{"key":"B","val":"自由落体10秒后"},{"key":"C","val":"指定高度(通常1500米左右)"},{"key":"D","val":"落地前瞬间"}]', 1, 'C', '主伞通常在指定高度打开,确保足够的开伞时间。', 2, 1, 414);-- ASDC 判断题 (135题)INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 415);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 416);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 417);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 418);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 419);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 420);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 421);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 422);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 423);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 424);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 425);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 426);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 427);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 428);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 429);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 430);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 431);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 432);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 433);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 434);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 435);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 436);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 437);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 438);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 439);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 440);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 441);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 442);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 443);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 444);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 445);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 446);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 447);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 448);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 449);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 450);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 451);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 452);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 453);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 454);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 455);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 456);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 457);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 458);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 459);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 460);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 461);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 462);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 463);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 464);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 465);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 466);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 467);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 468);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 469);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 470);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 471);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 472);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 473);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 474);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 475);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 476);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 477);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 478);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 479);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 480);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 481);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 482);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 483);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 484);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 485);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 486);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 487);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 488);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 489);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 490);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 491);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 492);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 493);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 494);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 495);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 496);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 497);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 498);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 499);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 500);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 501);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 502);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 503);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 504);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 505);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 506);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 507);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 508);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 509);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 510);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 511);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 512);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 513);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 514);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 515);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 516);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 517);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 518);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 519);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 520);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 521);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 522);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 523);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 524);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 525);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 526);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 527);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 528);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 529);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 530);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 531);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 532);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 533);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 534);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 535);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 536);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 537);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 538);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 539);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '直升机的尾桨主要用于抵消主旋翼的反扭矩。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '单旋翼直升机必须有尾桨抵消反扭矩。', 1, 1, 540);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机飞控中的IMU故障不会影响GPS定位。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', 'IMU故障会导致姿态不稳定,即使GPS正常也无法保持悬停。', 2, 1, 541);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航模自由飞比赛中模型起飞后需要遥控保持飞行。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '自由飞模型完全自主飞行,不进行遥控干预。', 1, 1, 542);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机比多旋翼无人机飞得更远。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '固定翼气动效率更高,续航时间更长。', 1, 1, 543);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'FPV无人机竞速的第一视角通过图传设备实现。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', 'FPV = First Person View,通过图传实现第一视角操控。', 1, 1, 544);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机的飞行控制系统可以自动纠正飞行姿态偏差。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '飞控通过陀螺仪和加速度计感知偏差并自动修正。', 1, 1, 545);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '航空模型与无人机的本质区别在于是否具有自主飞行能力。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '无人机有飞控和自主能力,航模完全依靠操控者。', 1, 1, 546);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '固定翼无人机失速后应推杆降低迎角以改出。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '失速改出关键是降低迎角恢复升力。', 2, 1, 547);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '无人机竞速使用GPS模式可以飞得更快。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'F', '竞速需要完全手动控制,GPS模式会自动限制速度和高度。', 1, 1, 548);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '滑翔机飞行完全不需要发动机。', '[{"key":"T","val":"正确"},{"key":"F","val":"错误"}]', 3, 'T', '滑翔机依靠自然气流维持飞行,无动力系统。', 1, 1, 549); diff --git a/src/main/resources/db/migration/V15__exam_questions_multi_type.sql b/src/main/resources/db/migration/V15__exam_questions_multi_type.sql new file mode 100644 index 0000000..baa8148 --- /dev/null +++ b/src/main/resources/db/migration/V15__exam_questions_multi_type.sql @@ -0,0 +1 @@ +-- V15: 各题库多选题补全(question_type = 2)-- CAAC 100 + AOPA 100 + UTC 80 + ASDC 80 = 360 道INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '民用无人机驾驶员在飞行前应完成的检查项目包括?', '[{"key":"A","val":"电池电量检查"},{"key":"B","val":"螺旋桨安装紧固"},{"key":"C","val":"遥控器信号测试"},{"key":"D","val":"飞行区域空域申请"}]', 2, 'ABCD', '飞行前检查应覆盖硬件状态、通信链路和法规前置条件。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下属于微型无人机(空机质量小于7kg)的飞行限制条件有?', '[{"key":"A","val":"不得飞入管制空域"},{"key":"B","val":"飞行高度不超过120米(真高)"},{"key":"C","val":"必须在视距内飞行"},{"key":"D","val":"夜间飞行需特殊许可"}]', 2, 'ABCD', '微型无人机严格受限,四项均为法规强制要求。', 2, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在飞行过程中遇到GPS信号丢失时,正确的处理措施包括?', '[{"key":"A","val":"立即切换至姿态模式"},{"key":"B","val":"保持冷静不要猛推摇杆"},{"key":"C","val":"观察四周确认无碰撞风险"},{"key":"D","val":"尽快降低高度安全着陆"}]', 2, 'ABCD', 'GPS丢失后应先稳定姿态再降落,避免慌乱操作导致失控。', 2, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机飞控系统的核心传感器?', '[{"key":"A","val":"陀螺仪"},{"key":"B","val":"加速度计"},{"key":"C","val":"气压计"},{"key":"D","val":"磁罗盘"}]', 2, 'ABCD', '飞控通过这四种传感器组合感知姿态、位置和方向。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '影响无人机续航时间的主要因素有?', '[{"key":"A","val":"飞行速度(空速)"},{"key":"B","val":"风速大小"},{"key":"C","val":"所带载荷重量"},{"key":"D","val":"电池放电倍率"}]', 2, 'ABCD', '四因素均直接影响能耗,其中逆风飞行对续航影响最大。', 1, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '空域管理中,以下哪些属于管制空域?', '[{"key":"A","val":"机场跑道中心线两侧10公里范围内"},{"key":"B","val":"军事管制区上空"},{"key":"C","val":"国务院规定的重点区域上空"},{"key":"D","val":"城市高层建筑密集区"}]', 2, 'ABC', '城市高层建筑密集区不是法定管制空域,但飞行需注意净空限制。', 2, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机实施应急降落的正确操作要点包括?', '[{"key":"A","val":"选择平坦无障碍物的地面"},{"key":"B","val":"缓慢下降接近地面"},{"key":"C","val":"接地前稍抬头减速"},{"key":"D","val":"接地后立即切断动力"}]', 2, 'ABCD', '应急降落四步曲:选点-下降-缓冲-断电,缺一不可。', 2, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于电磁干扰对无人机影响的说法正确的有?', '[{"key":"A","val":"可能导致GPS定位漂移"},{"key":"B","val":"可能造成遥控器失控"},{"key":"C","val":"可能引起飞控数据异常"},{"key":"D","val":"对图传信号无影响"}]', 2, 'ABC', '图传也在电磁干扰频率范围内,同样会受到影响出现雪花或断链。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机起飞前应确认的环境条件有?', '[{"key":"A","val":"风速是否在机型允许范围内"},{"key":"B","val":"周边是否有高大建筑物遮挡GPS"},{"key":"C","val":"温度是否在电池工作范围内"},{"key":"D","val":"场地是否足够大且无行人"}]', 2, 'ABCD', '环境四要素:风、遮挡、温、场地,缺一不飞。', 1, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机电池安全使用,以下说法正确的有?', '[{"key":"A","val":"应避免过充过放"},{"key":"B","val":"应在阴凉处充电"},{"key":"C","val":"可在飞行后立即充电"},{"key":"D","val":"应定期检查电池鼓包"}]', 2, 'ABD', '飞行后电池温度高,应待自然冷却后再充电,否则有起火风险。', 2, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些是无人机驾驶员应当具备的基本能力?', '[{"key":"A","val":"掌握气象常识"},{"key":"B","val":"能看懂航空图表"},{"key":"C","val":"具备应急反应能力"},{"key":"D","val":"精通航空发动机维修"}]', 2, 'ABC', '精通发动机维修不是基本能力,属于机务维护范畴。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在城市上空飞行时,应特别注意?', '[{"key":"A","val":"避开高层建筑"},{"key":"B","val":"注意电线杆和树木"},{"key":"C","val":"远离高压电线"},{"key":"D","val":"飞行高度不低于50米即可"}]', 2, 'ABC', '城市飞行需立体规避,高度只是一个维度,水平距离同样重要。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于视距内飞行(VLOS)的说法正确的有?', '[{"key":"A","val":"驾驶员能够直接目视无人机"},{"key":"B","val":"距离通常不超过500米"},{"key":"C","val":"高度不超过120米真高"},{"key":"D","val":"夜间可不受限制"}]', 2, 'ABC', '夜间视距内飞行仍需遵守距离和高度限制,只是允许夜间操作。', 2, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机遥控器出现摇杆漂移时,正确的处理方式有?', '[{"key":"A","val":"尝试摇杆校准"},{"key":"B","val":"更换遥控器电池"},{"key":"C","val":"检查摇杆周围是否有异物"},{"key":"D","val":"继续飞行等它自己恢复"}]', 2, 'ABC', '漂移不处理可能导致失控,必须落地检修后再飞。', 2, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '气象条件对无人机飞行影响显著,以下哪些情况不宜飞行?', '[{"key":"A","val":"雷雨天气"},{"key":"B","val":"能见度低于500米"},{"key":"C","val":"逆风超过机型最大抗风等级"},{"key":"D","val":"气温0°C以下"}]', 2, 'ABC', '0°C以下如采取电池预热等保护措施仍可飞行,但雷暴、低能见度、超风速绝对禁飞。', 1, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控"失控保护"功能通常包括?', '[{"key":"A","val":"失控返航(RTH)"},{"key":"B","val":"自动悬停等待信号恢复"},{"key":"C","val":"直线飞往起飞点"},{"key":"D","val":"原地旋转一圈再降落"}]', 2, 'ABC', '失控保护通常是悬停等待→返航→降落三阶段,原地旋转不是标准策略。', 2, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"地面保障"工作?', '[{"key":"A","val":"起飞场地平整"},{"key":"B","val":"电池充电与预热"},{"key":"C","val":"飞行日志记录"},{"key":"D","val":"飞行空域协调"}]', 2, 'ABD', '飞行日志属于机载数据,不需要地面提前保障,但需要起飞前准备的是场地、电池和空域。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自旋(螺旋桨打架)"故障,以下说法正确的有?', '[{"key":"A","val":"通常是桨叶安装方向错误"},{"key":"B","val":"也可能是电机接线反了"},{"key":"C","val":"起飞前自检可避免"},{"key":"D","val":"可在飞行中修正"}]', 2, 'ABC', '自旋在起飞前自检阶段就会暴露,一旦离地自旋失控无法挽救,只能紧急降落。', 2, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机完成飞行任务后,应做的收尾工作包括?', '[{"key":"A","val":"检查设备外观有无损坏"},{"key":"B","val":"整理电池按电压分级存放"},{"key":"C","val":"更新飞行日志"},{"key":"D","val":"立即把所有电池充满"}]', 2, 'ABC', '电池长期满电存放会影响寿命,应降至约3.8V存放。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些场景属于无人机"超视距飞行(BVLOS)"?', '[{"key":"A","val":"无人机飞入云层后看不见"},{"key":"B","val":"距离超过500米但仍能目视"},{"key":"C","val":"使用GPS全自动航线飞行"},{"key":"D","val":"夜间飞行"}]', 2, 'AC', 'BVLOS的核心是"驾驶员无法目视",距离或昼夜本身不是判断标准。', 2, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"地理围栏(Geo-fencing)"功能主要作用包括?', '[{"key":"A","val":"限制飞越禁飞区"},{"key":"B","val":"限制最大飞行半径"},{"key":"C","val":"自动返航至设定边界"},{"key":"D","val":"提高飞行速度"}]', 2, 'ABC', '地理围栏是安全限制功能,与速度无关。', 1, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池充放电特性,以下说法正确的有?', '[{"key":"A","val":"放电电压随电量降低而下降"},{"key":"B","val":"高倍率放电会缩短电池寿命"},{"key":"C","val":"可安全用超过C6倍率充电"},{"key":"D","val":"低温下放电能力下降"}]', 2, 'ABD', '大电流充电会发热损坏电芯,一般不建议超过C2或C3倍率。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机GPS"搜星数量少"的常见原因有?', '[{"key":"A","val":"天空被建筑物或树木遮挡"},{"key":"B","val":"周围有金属结构干扰"},{"key":"C","val":"GPS模块损坏"},{"key":"D","val":"飞行时间太晚"}]', 2, 'ABC', 'GPS卫星信号24小时可用,与时间无关,只是天空遮挡影响。', 1, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '在起飞点附近遇到高压线时,正确的应对策略有?', '[{"key":"A","val":"保持至少30米以上距离"},{"key":"B","val":"避免在高压线下方飞行"},{"key":"C","val":"起飞前先观察高压线走向"},{"key":"D","val":"贴着高压线飞可以利用其上升气流"}]', 2, 'ABC', '高压线周围电磁干扰极强,贴近飞行极易失控,绝不能贴近。', 2, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生的"风切变"现象可能导致?', '[{"key":"A","val":"高度突变"},{"key":"B","val":"姿态剧烈晃动"},{"key":"C","val":"续航突然缩短"},{"key":"D","val":"电池快速放电"}]', 2, 'ABCD', '风切变是风向风速剧变,对高度、姿态、能耗均产生剧烈影响。', 3, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些操作会消耗更多电量?', '[{"key":"A","val":"快速飞行转向"},{"key":"B","val":"长时间悬停"},{"key":"C","val":"逆风飞行"},{"key":"D","val":"使用FPV穿越模式"}]', 2, 'ABCD', '四项均增加能耗:转向需克服惯性、悬停维持升力、逆风需额外推力、穿越模式大油门。', 2, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机"返航高度"设置的原则是?', '[{"key":"A","val":"高于航线中最高障碍物"},{"key":"B","val":"考虑返航途中的风况"},{"key":"C","val":"不需要考虑起飞点周围障碍物"},{"key":"D","val":"应留足安全余量"}]', 2, 'ABD', '返航高度必须同时考虑航线和起飞着陆点周围的障碍物,否则返航时会撞。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机螺旋桨的说法正确的有?', '[{"key":"A","val":"正反桨不能混用"},{"key":"B","val":"桨叶破损必须更换"},{"key":"C","val":"桨叶安装方向有讲究"},{"key":"D","val":"桨叶越重飞行越稳"}]', 2, 'ABC', '桨叶过重会增加负载降低续航,稳定由动平衡和安装精度决定。', 1, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员"疲劳驾驶"可能导致?', '[{"key":"A","val":"反应迟钝错过避障时机"},{"key":"B","val":"误触遥控器摇杆"},{"key":"C","val":"无法准确判断飞行距离"},{"key":"D","val":"更有耐心完成复杂任务"}]', 2, 'ABC', '疲劳只会降低操作能力和判断力,不会提高表现。', 1, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于"特殊情况飞行",需要提前申请许可?', '[{"key":"A","val":"夜间在管制机场附近飞行"},{"key":"B","val":"飞越高速公路正上方"},{"key":"C","val":"在大型集会人群上空飞行"},{"key":"D","val":"纯视距内7kg以下微型机日常航拍"}]', 2, 'ABC', '日常微型机视距内航拍无需单独申请,但A/B/C三项均属于风险场景。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控中"磁力计干扰"可能来自?', '[{"key":"A","val":"附近的高压电线"},{"key":"B","val":"地面的金属井盖"},{"key":"C","val":"无人机携带的磁铁"},{"key":"D","val":"遥控器的天线"}]', 2, 'ABCD', '所有磁性源都可能干扰磁力计指南针,包括机载和地面的。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于电池"平衡充电",以下说法正确的有?', '[{"key":"A","val":"使各电芯电压一致"},{"key":"B","val":"延长电池整体寿命"},{"key":"C","val":"可消除已老化电芯的差异"},{"key":"D","val":"每次充电都应开启"}]', 2, 'ABD', '平衡充电可以延缓电芯差异扩大,但无法逆转已经老化的电芯物理性能下降。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行高度的说法正确的有?', '[{"key":"A","val":"绝对高度是相对于平均海平面的高度"},{"key":"B","val":"相对高度是相对于起飞点的高度"},{"key":"C","val":"真高是相对于地面的实际高度"},{"key":"D","val":"三者在任何场景都是相同的"}]', 2, 'ABC', '地形起伏时三者差异明显,如在山上起飞,相对高度和真高可能不同。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在水面上空飞行时需要特别注意?', '[{"key":"A","val":"水面反光影响视觉判断"},{"key":"B","val":"GPS可能受潮汐影响"},{"key":"C","val":"救援难度大必须降低风险"},{"key":"D","val":"水面对图传信号有增益"}]', 2, 'AC', '水面无任何信号增益,GPS不受潮汐直接影响(受潮汐影响的是高度计气压值)。', 2, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些情况说明无人机应该立即降落?', '[{"key":"A","val":"电池剩余电量低于25%"},{"key":"B","val":"收到强风警报"},{"key":"C","val":"发现螺旋桨异响"},{"key":"D","val":"图传画面出现轻微雪花"}]', 2, 'ABCD', '四项均属于风险信号,应尽快降落排查,不能心存侥幸。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"动力失效"故障中,以下哪些原因最常见?', '[{"key":"A","val":"电池接线松动"},{"key":"B","val":"电机烧毁"},{"key":"C","val":"螺旋桨卡入异物"},{"key":"D","val":"遥控器没开机"}]', 2, 'ABC', '遥控器没开属于人为失误,不是"动力失效"本身的原因。', 1, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"低空经济"的说法与无人机相关的有?', '[{"key":"A","val":"无人机物流配送"},{"key":"B","val":"无人机电力巡检"},{"key":"C","val":"无人机消防救援"},{"key":"D","val":"高空飞机民航运输"}]', 2, 'ABC', '民航运输属于高空经济范畴,不是低空无人机应用。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中"姿态不稳"的原因可能是?', '[{"key":"A","val":"GPS搜星数量不足"},{"key":"B","val":"飞控加速度计未校准"},{"key":"C","val":"螺旋桨动平衡差"},{"key":"D","val":"电量充满"}]', 2, 'ABC', '电量满不是姿态不稳的原因,反而低电量可能导致推力不足姿态变差。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些是无人机驾驶员应当随身携带的装备?', '[{"key":"A","val":"备用电池"},{"key":"B","val":"信号良好的遥控器"},{"key":"C","val":"便携GPS手持机"},{"key":"D","val":"备用螺旋桨"}]', 2, 'ABD', '手持GPS不是必备,现代无人机本身GPS精度足够;但备用电池、遥控器、桨叶都是应急必备。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自动返航"功能,以下说法正确的有?', '[{"key":"A","val":"需要GPS信号支持"},{"key":"B","val":"返航点默认为起飞点"},{"key":"C","val":"返回高度可能低于沿途障碍物"},{"key":"D","val":"返航途中可手动接管"}]', 2, 'ABD', '返航高度如果设置不当确实可能撞障碍物,这是驾驶员的责任而非功能缺陷。', 2, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在山区飞行时,应特别注意?', '[{"key":"A","val":"山地上升气流可能造成高度飙升"},{"key":"B","val":"山谷风可能导致航线偏移"},{"key":"C","val":"GPS信号可能被山体遮挡"},{"key":"D","val":"山区永远无风更安全"}]', 2, 'ABC', '山区地形产生的各种风效应反而比平地更复杂危险。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些情况可能导致无人机"炸机"?', '[{"key":"A","val":"电池电压突然降至3.0V以下"},{"key":"B","val":"在信号盲区飞行"},{"key":"C","val":"返航高度低于沿途最高建筑"},{"key":"D","val":"起飞前未校准罗盘"}]', 2, 'ABCD', '四项都是炸机的高频原因,覆盖电源、通信、规划和传感器校准。', 2, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机电池储存,以下说法正确的有?', '[{"key":"A","val":"应在干燥阴凉处存放"},{"key":"B","val":"长期存放应保持3.7-3.9V储存电压"},{"key":"C","val":"可叠放挤压"},{"key":"D","val":"远离火源和高温源"}]', 2, 'ABD', '电池挤压会损坏内部电芯引发短路起火,严禁叠放。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"手动模式(M档)"下飞行员需要?', '[{"key":"A","val":"实时控制所有姿态参数"},{"key":"B","val":"不依赖GPS和气压计"},{"key":"C","val":"适合做穿越机竞速飞行"},{"key":"D","val":"新手最推荐"}]', 2, 'ABC', 'M档需要高度熟练才能操作,新手应先练姿态模式(P档)。', 2, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"被动安全措施"?', '[{"key":"A","val":"地理围栏"},{"key":"B","val":"失控保护"},{"key":"C","val":"自动返航"},{"key":"D","val":"驾驶员的操作技巧"}]', 2, 'ABC', '被动安全是设备自带功能,驾驶员技巧属于主动安全范畴。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机图传画面出现延迟和雪花干扰时,以下操作正确的有?', '[{"key":"A","val":"降低飞行高度"},{"key":"B","val":"远离干扰源"},{"key":"C","val":"切换至5.8GHz频段"},{"key":"D","val":"猛推油门快速飞回"}]', 2, 'ABC', '图传异常时猛推油门增加飞行风险,应稳步返航同时排查干扰。', 2, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于气象云图在无人机飞行中的应用,说法正确的有?', '[{"key":"A","val":"识别雷暴云团位置"},{"key":"B","val":"判断风切变区域"},{"key":"C","val":"精确显示风速大小"},{"key":"D","val":"辅助规划安全航线"}]', 2, 'ABD', '云图显示云层分布,风速需要结合其他气象数据或实地测量。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机螺旋桨的维护保养包括?', '[{"key":"A","val":"每次飞行后检查有无裂纹"},{"key":"B","val":"定期用酒精清洁桨叶表面"},{"key":"C","val":"轻微损伤可用胶带粘贴继续用"},{"key":"D","val":"多飞几个月后整套更换"}]', 2, 'ABD', '桨叶任何损坏都必须更换,哪怕很轻微,胶带无法修复动平衡。', 1, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行"航线规划"的说法正确的有?', '[{"key":"A","val":"规划前应查询空域信息"},{"key":"B","val":"应考虑电池续航留足安全余量"},{"key":"C","val":"城市飞行可随便规划不需要管建筑"},{"key":"D","val":"避开无线电信号盲区"}]', 2, 'ABD', '城市飞行恰恰需要更细致的建筑避让规划。', 1, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机发生"单侧电机失效"时的应急策略有?', '[{"key":"A","val":"立即降低高度寻找迫降点"},{"key":"B","val":"保持航向稳定不要猛打舵"},{"key":"C","val":"如果是六旋翼及以上可继续平稳降落"},{"key":"D","val":"立即切换到自动模式"}]', 2, 'ABC', '电机失效时自动模式无法补偿推力损失,反而需要手动稳定姿态迫降。', 3, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些文件是民用无人机驾驶员应当熟悉的法规文件?', '[{"key":"A","val":"《民用无人驾驶航空器系统驾驶员管理暂行规定》"},{"key":"B","val":"《民用无人驾驶航空器系统实名登记管理规定》"},{"key":"C","val":"《无人驾驶航空器运行管理条例》"},{"key":"D","val":"《道路交通法》"}]', 2, 'ABC', '道路交通法与无人机飞行空域管理无直接关联。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在执行有偿飞行任务时需要注意?', '[{"key":"A","val":"持有相应等级的执照"},{"key":"B","val":"作业前签订安全协议"},{"key":"C","val":"为无人机购买第三者责任险"},{"key":"D","val":"可以不告知客户风险直接开工"}]', 2, 'ABC', '必须如实告知客户飞行风险并签署免责协议。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机实名登记,以下说法正确的有?', '[{"key":"A","val":"空机重量250克以上需要登记"},{"key":"B","val":"登记信息发生变更应及时更新"},{"key":"C","val":"登记码应贴在机身明显位置"},{"key":"D","val":"飞机转让后自动过户不用重新登记"}]', 2, 'ABC', '转让需新所有者重新实名登记。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于A2类无人机执照的描述正确的有?', '[{"key":"A","val":"适用于150kg以下视距内运行无人机"},{"key":"B","val":"持有人可飞行至150米以下真高"},{"key":"C","val":"需要通过理论和实操考试"},{"key":"D","val":"可在管制机场附近自由飞行"}]', 2, 'ABC', '任何等级执照在管制机场附近飞行都需要额外申请,不是执照赋予的特权。', 2, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生事故后,驾驶员应当?', '[{"key":"A","val":"立即采取措施防止二次事故"},{"key":"B","val":"保护现场不得擅自移动残骸"},{"key":"C","val":"48小时内报告当地民航管理部门"},{"key":"D","val":"自行联系保险公司理赔不用报案"}]', 2, 'ABC', '发生事故必须向民航管理部门报案,保险理赔是后续流程。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于电子围栏(Geofence)的设置边界,说法正确的有?', '[{"key":"A","val":"应包含整个计划飞行区域"},{"key":"B","val":"边界外扩留足安全距离"},{"key":"C","val":"可以设成任意形状"},{"key":"D","val":"不需要考虑禁飞区"}]', 2, 'ABC', '电子围栏恰恰是为了明确禁飞区边界,设置时必须纳入法定禁飞区。', 2, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控的"IMU(惯性测量单元)"包括哪些传感器?', '[{"key":"A","val":"三轴陀螺仪"},{"key":"B","val":"三轴加速度计"},{"key":"C","val":"三轴磁力计"},{"key":"D","val":"单轴气压计"}]', 2, 'ABC', 'IMU通常由三轴陀螺+三轴加速度计+三轴磁力计共9轴组成,气压计是独立高度传感器。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于穿越机(FPV)的特点描述正确的有?', '[{"key":"A","val":"机身轻便灵活"},{"key":"B","val":"飞行速度快(可达100km/h以上)"},{"key":"C","val":"通常使用模拟图传"},{"key":"D","val":"自动避障功能很强"}]', 2, 'ABC', '穿越机为追求速度牺牲了很多辅助功能,避障能力非常弱甚至没有。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在严寒环境下飞行需要采取的措施有?', '[{"key":"A","val":"起飞前预热电池"},{"key":"B","val":"使用低温专用电池"},{"key":"C","val":"减少单次飞行时长"},{"key":"D","val":"降低飞行速度以保暖"}]', 2, 'ABC', '飞行速度与电池温度无直接关系,主要靠预热和缩短时长。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"首飞"的说法正确的有?', '[{"key":"A","val":"应选择开阔无障碍物场地"},{"key":"B","val":"先低空悬停再逐步升高"},{"key":"C","val":"首飞时不建议挂载相机等载荷"},{"key":"D","val":"可以直接开启全自动航线"}]', 2, 'ABC', '首飞必须手动在低高度小范围内测试各项功能,绝不能直接全自动。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池"存储电压",以下说法正确的有?', '[{"key":"A","val":"单节3.7-3.9V是最佳存储电压"},{"key":"B","val":"高于4.2V长期存放会鼓包"},{"key":"C","val":"低于3.0V长期存放会损坏电芯"},{"key":"D","val":"可以满电存放一个月以上"}]', 2, 'ABC', '锂电池不能长期满电存放,一个月以上必须放电至储存电压。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞控固件升级前应?', '[{"key":"A","val":"备份当前固件版本"},{"key":"B","val":"确认电池电量充足(建议50%以上)"},{"key":"C","val":"检查升级包完整性和对应型号"},{"key":"D","val":"升级过程中断电也不影响"}]', 2, 'ABC', '升级过程中断电可能导致飞控变砖无法启动,必须保证供电稳定。', 1, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"云台"的作用描述正确的有?', '[{"key":"A","val":"保持相机画面稳定"},{"key":"B","val":"隔离机身震动传递到相机"},{"key":"C","val":"可以精确控制相机俯仰和偏航"},{"key":"D","val":"增加无人机整体升力"}]', 2, 'ABC', '云台只是稳定和控制相机姿态,不产生任何升力。', 1, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"无头模式(Headless)"下,以下说法正确的有?', '[{"key":"A","val":"航向由遥控器方向决定而非机头方向"},{"key":"B","val":"适合新手避免方向混乱"},{"key":"C","val":"GPS信号差时可用"},{"key":"D","val":"适合高速穿越飞行"}]', 2, 'AB', '无头模式依赖GPS或罗盘,GPS差时不可用;高速穿越时需要精确控制机头方向,无头模式反而危险。', 3, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"失速(Stall)",以下说法正确的有?', '[{"key":"A","val":"固定翼在迎角过大时发生"},{"key":"B","val":"多旋翼不会失速"},{"key":"C","val":"表现为升力急剧下降"},{"key":"D","val":"直升机旋翼也会失速"}]', 2, 'ACD', '多旋翼实际上也会失速(某旋翼角速度超过物理极限),虽然与固定翼表现不同但本质都是失去升力。', 3, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"机载传感器"?', '[{"key":"A","val":"GPS接收机"},{"key":"B","val":"气压高度计"},{"key":"C","val":"视觉避障模块"},{"key":"D","val":"地面基站接收机"}]', 2, 'ABC', '地面基站是地面设备,不属于机载。', 1, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行前应确认"作业许可"的情况包括?', '[{"key":"A","val":"空域管制部门是否批准"},{"key":"B","val":"地面场地所有者是否同意"},{"key":"C","val":"作业区域是否有法律限制"},{"key":"D","val":"客户是否付清全款"}]', 2, 'ABC', '商业作业中客户付款是商务事项,不属于"作业许可"的安全合规范畴。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于锂电池放电倍率,以下说法正确的有?', '[{"key":"A","val":"C2表示持续2小时放电完毕"},{"key":"B","val":"高C倍率电池瞬间爆发力强"},{"key":"C","val":"穿越机通常需要高C倍率电池"},{"key":"D","val":"C倍率越大电池续航越长"}]', 2, 'ABC', 'C倍率是放电能力指标,与续航时间无直接关系,容量才决定续航。', 2, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"姿态模式(P档)"下,驾驶员操作的是?', '[{"key":"A","val":"飞行姿态(俯仰/滚转/偏航)"},{"key":"B","val":"GPS定位"},{"key":"C","val":"气压高度"},{"key":"D","val":"直接控制电机转速"}]', 2, 'A', 'P档驾驶员只控姿态,位置和高度由飞控自动锁定稳定。D是M档的操作。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机飞行前"指南针校准"的说法正确的有?', '[{"key":"A","val":"每次更换起飞点都建议重新校准"},{"key":"B","val":"校准应远离金属物体"},{"key":"C","val":"校准不成功禁止起飞"},{"key":"D","val":"手机上操作即可无需看飞机"}]', 2, 'ABC', '校准需要观察飞机指示灯状态或App提示,不能只看手机。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在城市"低空公共空域"飞行时,应遵守?', '[{"key":"A","val":"不得低于建筑物顶部"},{"key":"B","val":"避开人员密集区域上空"},{"key":"C","val":"飞行高度一般不超过50米"},{"key":"D","val":"可随意在楼群中穿梭"}]', 2, 'ABC', '城市低空飞行必须沿规划航线,严禁随意穿梭楼群。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机的"安全余油/余电"原则,以下说法正确的有?', '[{"key":"A","val":"应预留能返回起飞点的电量"},{"key":"B","val":"再额外预留20%电量余量"},{"key":"C","val":"最后10%电量才开始返航"},{"key":"D","val":"电量不足可就近迫降"}]', 2, 'ABD', '应该在电量足够返航时就开始返航,绝不能等只剩10%才启动返航(风阻等可能消耗更多)。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"图传频段"的说法正确的有?', '[{"key":"A","val":"2.4GHz穿墙能力强但易受WiFi干扰"},{"key":"B","val":"5.8GHz带宽宽干扰少但穿墙弱"},{"key":"C","val":"两者可以自由切换"},{"key":"D","val":"720P分辨率必须用5.8GHz"}]', 2, 'ABC', '分辨率与频段无关,2.4GHz也可传高清画面,只是抗干扰不同。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"无GPS信号"的环境中(如室内),以下说法正确的有?', '[{"key":"A","val":"无法使用自动返航功能"},{"key":"B","val":"姿态模式仍可用"},{"key":"C","val":"可以精确悬停在空间某点"},{"key":"D","val":"可以用视觉定位补充"}]', 2, 'ABD', '无GPS时气压计和IMU仍可维持姿态,但无法精确空间定位,会缓慢漂移。', 3, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机驾驶员"视距保持",以下做法正确的有?', '[{"key":"A","val":"始终让无人机保持在视线中央"},{"key":"B","val":"背后有反光板时注意目视盲区"},{"key":"C","val":"远距离飞行时可借助望远镜"},{"key":"D","val":"天气好时可以完全依赖FPV画面"}]', 2, 'ABC', 'FPV画面可能延迟或断链,驾驶员必须始终保持目视接触作为备份。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"避障系统"的说法正确的有?', '[{"key":"A","val":"光学避障在逆光下可能失效"},{"key":"B","val":"TOF避障测距远精度高"},{"key":"C","val":"超声波避障对细电线检测力弱"},{"key":"D","val":"任何避障系统都有探测盲区"}]', 2, 'ABCD', '四种说法都正确,避障系统各有优劣但都有局限性。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机的"作业记录"应当包含哪些信息?', '[{"key":"A","val":"起飞与降落时间"},{"key":"B","val":"飞行区域坐标"},{"key":"C","val":"使用的无人机编号"},{"key":"D","val":"驾驶员当天心情"}]', 2, 'ABC', '心情不属于客观记录范畴,但前三项都是合规性和追溯性要求。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"固定翼无人机"的特点说法正确的有?', '[{"key":"A","val":"巡航效率高续航远"},{"key":"B","val":"需要跑道或弹射起飞"},{"key":"C","val":"可以在空中长时间悬停"},{"key":"D","val":"适合大范围巡检任务"}]', 2, 'ABD', '固定翼无法悬停,这是旋翼机的独有优势。', 1, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"安全绳/引导绳"的使用,以下说法正确的有?', '[{"key":"A","val":"可用于限制飞行范围"},{"key":"B","val":"适合在窄小空间作业"},{"key":"C","val":"飞行时绳长需要足够松弛"},{"key":"D","val":"可以完全替代电子围栏"}]', 2, 'ABC', '引导绳受空间限制,无法替代电子围栏的大范围空域限制功能。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行中发生"部分桨叶脱落"时,应采取的紧急措施有?', '[{"key":"A","val":"迅速降低高度"},{"key":"B","val":"保持油门平稳不要乱动"},{"key":"C","val":"观察飞机是否可以稳住"},{"key":"D","val":"继续完成剩余任务"}]', 2, 'ABC', '桨叶脱落意味着动力严重失衡,绝不可能继续完成任务,必须紧急迫降。', 2, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"地面站"功能的说法正确的有?', '[{"key":"A","val":"可进行航线规划"},{"key":"B","val":"可实时显示飞行数据"},{"key":"C","val":"可远程控制无人机飞行"},{"key":"D","val":"可以代替驾驶员目视监控"}]', 2, 'ABC', '地面站不能代替目视监控,驾驶员仍需保持对无人机的视觉观察。', 1, 2, 1081);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"整机重量",以下说法正确的有?', '[{"key":"A","val":"起飞重量含电池和载荷"},{"key":"B","val":"自重不含电池"},{"key":"C","val":"多载电池可以增加续航"},{"key":"D","val":"载荷越重飞行越稳"}]', 2, 'BC', '起飞重量的定义因机型而略有差异,但"自重不含电池"是正确的行业惯例;C中更多电池在一定范围内确实增加续航;D中载荷过重反而可能让飞行不稳定。', 3, 2, 1082);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"风力强劲"的天气下飞行,以下说法正确的有?', '[{"key":"A","val":"悬停会明显漂移"},{"key":"B","val":"航线飞行会偏离预设路径"},{"key":"C","val":"风速可能超过抗风等级无法起飞"},{"key":"D","val":"顺风飞行增加续航"}]', 2, 'ABCD', '四种现象都是强风下飞行的典型表现。', 2, 2, 1083);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些属于无人机的"典型应用场景"?', '[{"key":"A","val":"电力线路巡检"},{"key":"B","val":"农业植保作业"},{"key":"C","val":"娱乐自拍拍摄"},{"key":"D","val":"民航客机运输"}]', 2, 'ABC', '民航运输由载人飞机完成,无人机暂不具备该能力。', 1, 2, 1084);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"遥控器与飞机的通信链路",以下说法正确的有?', '[{"key":"A","val":"受天线摆放方向影响"},{"key":"B","val":"距离越远信号越弱"},{"key":"C","val":"中间有金属障碍物会衰减"},{"key":"D","val":"雨天比晴天信号好"}]', 2, 'ABC', '雨天对无线电信号有一定衰减,不会更好。', 1, 2, 1085);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机完成一次长距离飞行后,应检查的项目有?', '[{"key":"A","val":"电池是否有鼓包或发热异常"},{"key":"B","val":"螺旋桨是否正常磨损"},{"key":"C","val":"电机温度是否过高"},{"key":"D","val":"遥控器屏幕是否有划痕"}]', 2, 'ABC', '遥控器屏幕划痕属于外观问题,不影响飞行安全。', 1, 2, 1086);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于"集群无人机"的说法正确的有?', '[{"key":"A","val":"多架飞机协同执行任务"},{"key":"B","val":"需要精密的编队控制"},{"key":"C","val":"常用于灯光秀表演"},{"key":"D","val":"单机飞行能力足够时不需要集群"}]', 2, 'ABCD', '四种说法都正确,集群是多机协同的高级应用场景。', 2, 2, 1087);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机驾驶员在飞行中"丢失无人机视线"后,正确的应对步骤有?', '[{"key":"A","val":"立刻停止所有操作冷静观察"},{"key":"B","val":"查看FPV画面确认方向"},{"key":"C","val":"启动返航功能让飞机自行回来"},{"key":"D","val":"猛推油门快速搜索"}]', 2, 'ABC', '视线丢失后猛推油门会让飞机快速飞走更难找,应该稳住姿态再找。', 2, 2, 1088);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"风"的影响,以下说法正确的有?', '[{"key":"A","val":"逆风增加能耗缩短续航"},{"key":"B","val":"顺风降低能耗增加续航"},{"key":"C","val":"侧风会让飞机水平漂移"},{"key":"D","val":"阵风对飞行没有影响"}]', 2, 'ABC', '阵风是风向风速急剧变化,比恒定风危险得多,会导致姿态剧烈波动。', 1, 2, 1089);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"紧急迫降"时,以下操作正确的有?', '[{"key":"A","val":"选择地面较软的区域迫降"},{"key":"B","val":"避免迫降到有人区域"},{"key":"C","val":"接近地面时减速缓冲"},{"key":"D","val":"迫降后立即切断动力"}]', 2, 'ABCD', '四项都是迫降的正确操作原则。', 2, 2, 1090);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"执照等级"的说法正确的有?', '[{"key":"A","val":"A1类适用于大型无人机"},{"key":"B","val":"A2类需年满16岁以上"},{"key":"C","val":"A3类为最低级别执照"},{"key":"D","val":"所有级别都需要实操考试"}]', 2, 'ABCD', '民航局规定的A1/A2/A3/C1/C2等级体系中,各等级对年龄、机型、考试要求都有明确规定。', 2, 2, 1091);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"自动巡航"功能,以下说法正确的有?', '[{"key":"A","val":"沿预设航线自动飞行"},{"key":"B","val":"可设置飞行速度和高度"},{"key":"C","val":"飞行中可随时接管手动控制"},{"key":"D","val":"必须保持全程卫星信号"}]', 2, 'ABC', '自动巡航可以在无GPS的情况下依靠视觉导航等方式继续,但精度会下降。', 2, 2, 1092);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机电池"过充"会导致?', '[{"key":"A","val":"电芯内部发热"},{"key":"B","val":"鼓包变形"},{"key":"C","val":"容量永久性下降"},{"key":"D","val":"增加下次放电续航"}]', 2, 'ABC', '过充只会损坏电池降低续航,绝不会增加续航。', 1, 2, 1093);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下哪些做法可以延长无人机电池寿命?', '[{"key":"A","val":"避免过充过放"},{"key":"B","val":"每次使用后及时降到存储电压"},{"key":"C","val":"使用原厂充电器"},{"key":"D","val":"充满后长期插着充电"}]', 2, 'ABC', '充满后继续充电会过充损伤电芯,必须及时断开。', 1, 2, 1094);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机在"夜间飞行"时应特别注意?', '[{"key":"A","val":"无人机必须有照明指示灯"},{"key":"B","val":"驾驶员需要更好的目视能力"},{"key":"C","val":"应增加飞行高度保持更远视野"},{"key":"D","val":"地面障碍物在夜间更难识别"}]', 2, 'ABCD', '夜间飞行的四项注意点都正确。', 2, 2, 1095);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '关于无人机"飞控参数调整",以下说法正确的有?', '[{"key":"A","val":"增益过高会导致飞行震荡"},{"key":"B","val":"增益过低会导致响应迟钝"},{"key":"C","val":"应根据机型特性调整"},{"key":"D","val":"出厂参数就是最优不需要动"}]', 2, 'ABC', '出厂参数是通用值,实际使用应根据负载、桨叶、飞控硬件微调。', 2, 2, 1096);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"三原色指示灯"的含义,说法正确的有?', '[{"key":"A","val":"红色常亮通常表示低电量或告警"},{"key":"B","val":"绿色闪烁通常表示GPS搜星中"},{"key":"C","val":"蓝色常亮通常表示已连接遥控器"},{"key":"D","val":"黄色常亮表示指南针校准中"}]', 2, 'ABCD', '不同厂家指示灯语义略有差异,但四项描述都是典型含义。', 2, 2, 1097);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机飞行前检查"遥控器"时,应确认?', '[{"key":"A","val":"摇杆是否居中回中"},{"key":"B","val":"屏幕电量是否充足"},{"key":"C","val":"开关拨片位置是否正确"},{"key":"D","val":"外壳是否有划痕"}]', 2, 'ABC', '外壳划痕不影响功能,前三项才是功能性检查点。', 1, 2, 1098);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '以下关于无人机"飞控自检"的说法正确的有?', '[{"key":"A","val":"通电后飞控会自动检测传感器"},{"key":"B","val":"检测失败会报警提示"},{"key":"C","val":"自检全部通过才能解锁电机"},{"key":"D","val":"自检可以跳过直接飞行"}]', 2, 'ABC', '跳过自检等于放弃安全保护,飞控设计上不允许。', 1, 2, 1099);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(1, '无人机"飞行日志"中应包含的核心数据有?', '[{"key":"A","val":"GPS坐标轨迹"},{"key":"B","val":"电池电压曲线"},{"key":"C","val":"飞行模式切换记录"},{"key":"D","val":"驾驶员心率变化"}]', 2, 'ABC', '驾驶员心率不属于无人机机载日志范畴,是驾驶员生理数据。', 1, 2, 1100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机起飞前的校准工作通常包括?', '[{"key":"A","val":"陀螺仪校准"},{"key":"B","val":"加速度计校准"},{"key":"C","val":"磁力计校准"},{"key":"D","val":"桨叶平衡校准"}]', 2, 'ABC', 'AOPA强调飞控三校准(陀螺/加速度/磁力计),桨叶平衡属维护范畴而非每次起飞前都做。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA执照持有人可以执行的飞行操作包括?', '[{"key":"A","val":"视距内飞行"},{"key":"B","val":"超视距飞行"},{"key":"C","val":"夜间飞行(有条件)"},{"key":"D","val":"管制空域飞行(需申请)"}]', 2, 'ACD', '持AOPA视距内执照不能直接超视距,需额外考试;管制空域需单独申请许可。', 2, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于多旋翼无人机的"模式切换",以下说法正确的有?', '[{"key":"A","val":"从P档切M档前应确认周围空旷"},{"key":"B","val":"紧急情况下可切P档稳定姿态"},{"key":"C","val":"模式切换需要同时按两个开关"},{"key":"D","val":"可以在高速飞行中随意切换"}]', 2, 'AB', 'AOPA标准要求模式切换应在静止/悬停时进行,高速切换有失控风险。', 2, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机飞行中"失去GPS信号"后的正确操作流程是?', '[{"key":"A","val":"迅速切换到姿态模式"},{"key":"B","val":"观察周围环境避免碰撞"},{"key":"C","val":"判断风力状况决定是否返航"},{"key":"D","val":"启动手动模式(如具备)"}]', 2, 'ABC', '无GPS时P档自动切换姿态模式,驾驶员只需稳住并返航,不必切M档(M档反增风险)。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下关于AOPA考试实操部分的说法正确的有?', '[{"key":"A","val":"包括8字飞行航线"},{"key":"B","val":"包括定点悬停"},{"key":"C","val":"包括应急返航"},{"key":"D","val":"包括夜间盲飞"}]', 2, 'ABC', 'AOPA实操标准包括8字、定点悬停、应急返航等,不考夜间盲飞。', 2, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"摇杆灵敏度"设置时应考虑?', '[{"key":"A","val":"驾驶员个人习惯"},{"key":"B","val":"无人机机型大小"},{"key":"C","val":"载荷重量"},{"key":"D","val":"遥控器颜色"}]', 2, 'ABC', 'AOPA原则:灵敏度应匹配机型和载荷,根据个人习惯微调以达到操作舒适。', 1, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下哪些是AOPA推荐的飞行前检查项目?', '[{"key":"A","val":"无人机电量检查"},{"key":"B","val":"遥控器电量检查"},{"key":"C","val":"起降点周边环境检查"},{"key":"D","val":"飞机外观完整性检查"}]', 2, 'ABCD', 'AOPA强调"六查原则",电量、遥控器、环境、外观都是必查项。', 1, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"定向天线",以下说法正确的有?', '[{"key":"A","val":"发射增益比全向天线大"},{"key":"B","val":"方向性强,适合远距离图传"},{"key":"C","val":"操作时需要对准无人机方向"},{"key":"D","val":"可以随便摆放不用管方向"}]', 2, 'ABC', '定向天线增益高但需要始终对准无人机方向,否则信号会掉。', 1, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"超视距(BVLOS)飞行"的要求包括?', '[{"key":"A","val":"额外的执照等级(如A2以上)"},{"key":"B","val":"通信数据链加密"},{"key":"C","val":"实时位置上报民航"},{"key":"D","val":"只能用手动飞行模式"}]', 2, 'ABC', 'BVLOS要求通信链路加密和位置上报,但可以用自动巡航模式,不限于手动。', 2, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '以下关于AOPA执照有效期的说法正确的有?', '[{"key":"A","val":"视距内执照长期有效(无年审)"},{"key":"B","val":"超视距执照需定期复审"},{"key":"C","val":"每24个月需累计飞行10小时以保持资质"},{"key":"D","val":"逾期可直接续期不用考试"}]', 2, 'AB', '现行规定视距内长期有效,超视距需复审,逾期过久可能需要重新考试。', 2, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"大风天气"下起降的注意事项有?', '[{"key":"A","val":"逆风起降保持航向稳定"},{"key":"B","val":"起飞时不要推全油门"},{"key":"C","val":"降落前多留一点高度余量"},{"key":"D","val":"风太大时宁可改日飞行"}]', 2, 'ABCD', '大风下起降风险高,四项都是AOPA推荐的应对策略。', 2, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试中"8字飞行"的标准要求包括?', '[{"key":"A","val":"沿两个圆形航迹完成S形飞行"},{"key":"B","val":"高度偏差不超过规定范围"},{"key":"C","val":"全程不得出指定空域"},{"key":"D","val":"必须用手动模式完成"}]', 2, 'ABC', '8字飞行考核的是驾驶员姿态操控能力,但具体模式要求看当年考试大纲。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨"的正确使用,以下说法正确的有?', '[{"key":"A","val":"正反桨不能混用"},{"key":"B","val":"桨叶稍有划痕也应更换"},{"key":"C","val":"安装时注意定位标记"},{"key":"D","val":"不同品牌桨叶可随意互换"}]', 2, 'ABC', '桨叶规格(直径、螺距、安装孔)必须匹配才能互换,不是所有品牌都兼容。', 1, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"气象常识"包括?', '[{"key":"A","val":"风向风速识别"},{"key":"B","val":"云系与天气变化判断"},{"key":"C","val":"气温海拔关系"},{"key":"D","val":"气象雷达图解读"}]', 2, 'ABCD', 'AOPA气象部分覆盖风、云、温、雷达四方面。', 2, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"密集楼群"中飞行时,正确的操作有?', '[{"key":"A","val":"降低飞行速度增加反应时间"},{"key":"B","val":"始终保持与建筑的安全距离"},{"key":"C","val":"利用FPV画面辅助目视判断"},{"key":"D","val":"为了拍好照片快速穿梭"}]', 2, 'ABC', '楼群飞行必须保守操作,快速穿梭极易撞楼。', 1, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA要求驾驶员"飞行前报告"的内容包括?', '[{"key":"A","val":"飞行时间和地点"},{"key":"B","val":"无人机型号和编号"},{"key":"C","val":"驾驶员姓名和执照号"},{"key":"D","val":"携带的私人水杯颜色"}]', 2, 'ABC', '私人水杯不属于合规报告的必要内容,其余三项均是。', 1, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"失控"的正确处理方式,AOPA推荐?', '[{"key":"A","val":"立即切换自动返航"},{"key":"B","val":"尝试短暂切换手动模式恢复控制"},{"key":"C","val":"保持冷静等待失控保护启动"},{"key":"D","val":"扔掉遥控器放弃"}]', 2, 'ABC', 'AOPA原则:先自动返航→再手动尝试→最后等失控保护,绝不能放弃。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"飞行日志"在AOPA体系中的作用包括?', '[{"key":"A","val":"执照复审的飞行时长证明"},{"key":"B","val":"事故调查依据"},{"key":"C","val":"驾驶员技能评估参考"},{"key":"D","val":"销售凭证"}]', 2, 'ABC', '飞行日志与销售无关。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业"的额外要求有?', '[{"key":"A","val":"购买第三者责任险"},{"key":"B","val":"作业区域风险评估"},{"key":"C","val":"为客户签署安全告知书"},{"key":"D","val":"可以无证作业只要没人发现"}]', 2, 'ABC', '无证商业作业违法,一旦查处执照吊销+罚款。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机的"磁罗盘干扰校验"应在什么环境下进行?', '[{"key":"A","val":"开阔的水泥地面广场"},{"key":"B","val":"远离高压线和金属构筑物"},{"key":"C","val":"空旷的草地中央"},{"key":"D","val":"电梯井或金属楼梯间"}]', 2, 'ABC', '校准必须远离金属,电梯井是最差环境。', 1, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行区域规划",以下说法正确的有?', '[{"key":"A","val":"应提前查询公开的禁飞区地图"},{"key":"B","val":"靠近机场5公里以内需要A1级以上执照"},{"key":"C","val":"完全封闭空域禁止任何飞行"},{"key":"D","val":"偏远山区可以不用查空域"}]', 2, 'ABC', '任何飞行前都必须查询空域状态,即使偏远山区也可能是军事禁区。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考试"对场地的要求有?', '[{"key":"A","val":"开阔无遮挡的开阔地"},{"key":"B","val":"场地半径至少50米"},{"key":"C","val":"地面平整无坑洼"},{"key":"D","val":"周围无人员活动"}]', 2, 'ABCD', 'AOPA实操考试场地标准:开阔、半径≥50m、平整、无人干扰。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于穿越机与航拍无人机的差异,AOPA的说法正确的有?', '[{"key":"A","val":"穿越机更强调速度和灵活性"},{"key":"B","val":"航拍无人机重视画质和稳定性"},{"key":"C","val":"两者操控方式完全相同"},{"key":"D","val":"穿越机通常不装GPS"}]', 2, 'ABD', '两者操控逻辑差异大,穿越机多用手动模式,航拍机多用GPS模式。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA要求驾驶员"飞行后"应做的事项有?', '[{"key":"A","val":"记录飞行时间和区域"},{"key":"B","val":"检查设备有无损坏"},{"key":"C","val":"及时给电池充电"},{"key":"D","val":"把遥控器电池取出来存放"}]', 2, 'ABCD', 'AOPA完整飞行流程:前检查→飞行→后记录+维护+整理,四项都是收尾工作。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"反接保护",以下说法正确的有?', '[{"key":"A","val":"防止电池正负极接反烧毁设备"},{"key":"B","val":"低端电调可能没有反接保护"},{"key":"C","val":"即使有保护也应仔细接线"},{"key":"D","val":"反接保护可以防住所有接错情况"}]', 2, 'ABC', '反接保护只防正负极反接,插反信号针等其他错误可能仍会损坏。', 2, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试覆盖的法规内容包括?', '[{"key":"A","val":"《民用无人驾驶航空器系统驾驶员管理暂行规定》"},{"key":"B","val":"《民用航空法》相关章节"},{"key":"C","val":"当地省级空域管理办法"},{"key":"D","val":"《消费者权益保护法》"}]', 2, 'ABC', '消保法与飞行空域管理无关,AOPA不考。', 2, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机在"强电磁环境"下飞行(如变电站附近),应注意?', '[{"key":"A","val":"保持远距离(至少50米)"},{"key":"B","val":"注意GPS信号可能被干扰"},{"key":"C","val":"指南针会受影响需重新校准"},{"key":"D","val":"飞控固件会自动补偿所有干扰"}]', 2, 'ABC', '飞控固件无法自动补偿强电磁干扰产生的所有影响,必须物理隔离。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA执照"升级考试"通常需要哪些前置条件?', '[{"key":"A","val":"持有当前等级执照满一定时间"},{"key":"B","val":"累计达到规定飞行时长"},{"key":"C","val":"通过更高等级的理论考试"},{"key":"D","val":"购买更高级的无人机"}]', 2, 'ABC', '升级不需要购买特定机型,持有任意符合规格的无人机即可。', 2, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"桨叶平衡",以下说法正确的有?', '[{"key":"A","val":"平衡好的桨叶振动小飞行稳"},{"key":"B","val":"桨叶出厂时已基本平衡"},{"key":"C","val":"轻微失衡可用胶带粘贴平衡"},{"key":"D","val":"严重失衡直接换新桨叶"}]', 2, 'ABCD', '桨叶平衡四原则:出厂初平衡→日常检查→微失衡可贴胶带→严重失衡换新。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA推荐的"安全防护"措施包括?', '[{"key":"A","val":"飞行区域设置警示标志"},{"key":"B","val":"保持周围无无关人员"},{"key":"C","val":"配备急救包"},{"key":"D","val":"购买无人机第三者责任险"}]', 2, 'ABCD', 'AOPA安全体系:物理防护→人员隔离→应急预案→保险兜底。', 1, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机的"电调(ESC)",以下说法正确的有?', '[{"key":"A","val":"负责根据飞控指令驱动电机"},{"key":"B","val":"将直流电池转换为三相交流电驱动无刷电机"},{"key":"C","val":"电调的持续电流应大于电机最大电流的1.5倍"},{"key":"D","val":"电调可以脱离飞控独立工作"}]', 2, 'ABC', '电调是执行机构,必须由飞控提供PWM信号才能工作,不能脱离飞控。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"未成年人飞行"的规定有?', '[{"key":"A","val":"未满14周岁不能考AOPA执照"},{"key":"B","val":"14-18岁需法定监护人书面同意"},{"key":"C","val":"未成年人可在成年人陪同下飞行微型机"},{"key":"D","val":"未成年人任何情况下不能飞行"}]', 2, 'ABC', 'AOPA对未成年人的分级规定:14岁以下无证飞行不行;14-18岁可考需监护人同意;微型机日常飞行有例外。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"GPS模块升级"的好处有?', '[{"key":"A","val":"搜星更快"},{"key":"B","val":"定位更精准(厘米级RTK)"},{"key":"C","val":"耗电量更低"},{"key":"D","val":"不受任何电磁干扰"}]', 2, 'AB', '升级GPS精度提高但功耗可能上升,电磁干扰无法通过升级完全消除。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试"视觉疲劳"相关要求是?', '[{"key":"A","val":"飞行时长超过30分钟应休息5分钟"},{"key":"B","val":"近视驾驶员必须佩戴眼镜或隐形眼镜"},{"key":"C","val":"飞行时可以戴墨镜"},{"key":"D","val":"疲劳后可继续飞但要慢一点"}]', 2, 'ABC', '疲劳驾驶是事故隐患,绝不能"慢一点"将就,必须休息后再飞。', 2, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行高度限制",以下说法正确的有?', '[{"key":"A","val":"真高120米是一般区域的最高飞行高度"},{"key":"B","val":"高度限制因区域和执照而异"},{"key":"C","val":"GPS绝对高度可能因地形起伏误导"},{"key":"D","val":"管制区域通常有专门的高度限制"}]', 2, 'ABCD', '高度限制是分层管理的,一般区120米、管制区特别审批、山区GPS高度要结合气压计。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行器维护保养"的建议包括?', '[{"key":"A","val":"每飞行10次检查一次桨叶"},{"key":"B","val":"定期给电机轴承上油"},{"key":"C","val":"飞控固件有新版本及时更新"},{"key":"D","val":"遥控器电池每半年更换一次"}]', 2, 'ABCD', 'AOPA维护四建议:桨叶10次查→电机定期润滑→固件保持最新→遥控器电池定期换。', 1, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '无人机"失去控制"时的"最后手段"是?', '[{"key":"A","val":"关闭遥控器让失控保护生效"},{"key":"B","val":"启动一键返航(如有GPS)"},{"key":"C","val":"硬切换手动模式尝试恢复"},{"key":"D","val":"撞向空旷草地迫降"}]', 2, 'ABD', 'C与A冲突:已经失控硬切手动可能加剧混乱,AOPA建议让飞机自主触发失控保护或直接一键返航。', 2, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行记录保存"的要求是?', '[{"key":"A","val":"至少保存24个月以上"},{"key":"B","val":"执照复审时可能被抽查"},{"key":"C","val":"商业作业的记录要求更久"},{"key":"D","val":"飞完直接删掉就行"}]', 2, 'ABC', '飞行记录是追溯和复审的凭证,绝不能随意删除。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图像传输距离"的说法正确的有?', '[{"key":"A","val":"距离越远信号越弱"},{"key":"B","val":"障碍物会显著缩短有效距离"},{"key":"C","val":"2.4GHz频段穿墙优于5.8GHz"},{"key":"D","val":"金属建筑不影响信号"}]', 2, 'ABC', '金属对无线电信号反射和吸收都极强,是最强的信号屏蔽源。', 2, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业审批"流程的建议步骤包括?', '[{"key":"A","val":"查询空域并申请临时飞行空域"},{"key":"B","val":"办理第三者责任保险"},{"key":"C","val":"作业前签署安全告知"},{"key":"D","val":"作业后提交飞行报告"}]', 2, 'ABCD', 'AOPA完整商业作业流程:空域申请→保险→安全告知→飞行报告。', 2, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试中的"定点悬停"要求有?', '[{"key":"A","val":"悬停在半径3米范围内"},{"key":"B","val":"保持高度偏差不超过1米"},{"key":"C","val":"时间持续不少于30秒"},{"key":"D","val":"可以用GPS辅助"}]', 2, 'AB', '定点悬停考核的是驾驶员姿态操控能力,通常不允许GPS定位辅助(关闭GPS自稳模式)。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞控固件更新",AOPA推荐?', '[{"key":"A","val":"更新前查看更新日志确认新功能"},{"key":"B","val":"备份旧固件以防出问题"},{"key":"C","val":"更新时确保电脑和飞机供电稳定"},{"key":"D","val":"可以在飞行途中无线更新"}]', 2, 'ABC', '固件更新必须在地面静止时进行,飞行中更新会导致飞控重启失控。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"飞行原理"部分包括?', '[{"key":"A","val":"升力、阻力、重力三力平衡"},{"key":"B","val":"旋翼拉力产生原理"},{"key":"C","val":"姿态角定义(俯仰/滚转/偏航)"},{"key":"D","val":"无人机机身材料力学"}]', 2, 'ABC', '材料力学不是AOPA飞行原理考核范围。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电池存放",AOPA标准是?', '[{"key":"A","val":"存放在干燥阴凉通风处"},{"key":"B","val":"远离火源和高温源"},{"key":"C","val":"单独存放避免短路"},{"key":"D","val":"可以叠放挤压节省空间"}]', 2, 'ABC', '电池严禁挤压叠放,物理损伤是起火隐患。', 1, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试中"应急迫降"场景的操作要点有?', '[{"key":"A","val":"迅速选择安全迫降点"},{"key":"B","val":"降低高度的同时保持姿态稳定"},{"key":"C","val":"接近地面时推杆缓冲"},{"key":"D","val":"迫降后立即切断动力"}]', 2, 'ABCD', 'AOPA应急迫降四步:选点→稳姿态降→推杆缓冲→断电。', 2, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图传天线角度",以下说法正确的有?', '[{"key":"A","val":"全向天线保持竖直向上效果最好"},{"key":"B","val":"定向天线应朝向无人机飞行方向"},{"key":"C","val":"天线方向始终要对准卫星"},{"key":"D","val":"可以随便放不影响"}]', 2, 'AB', '图传天线是地对空通信,对准无人机方向而非卫星;随便放信号会变差。', 1, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"驾驶员视力要求"是?', '[{"key":"A","val":"裸眼视力不低于0.5(含矫正)"},{"key":"B","val":"可以佩戴矫正眼镜"},{"key":"C","val":"色盲或色弱不影响飞行"},{"key":"D","val":"夜间飞行有额外视力要求"}]', 2, 'ABD', 'AOPA明确要求无色盲色弱,否则无法正确识别信号灯和色彩导航信息。', 1, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"云台",AOPA实操考试中?', '[{"key":"A","val":"云台保持画面稳定是评分项"},{"key":"B","val":"需要手动控制俯仰角变化"},{"key":"C","val":"云台故障可以跳过该考试项"},{"key":"D","val":"考生必须学会云台校准"}]', 2, 'ABD', '云台故障不可以跳过考试,需要修复后重考。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行事故报告"的时限要求是?', '[{"key":"A","val":"一般事故48小时内报告"},{"key":"B","val":"重大事故24小时内报告"},{"key":"C","val":"轻微财产损失可以不报"},{"key":"D","val":"必须口头+书面双报告"}]', 2, 'AB', 'AOPA现行规定:事故48小时内报告,重大事故缩短时限;任何事故都要报告,不是只有财产损失才报。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨动平衡"的说法正确的有?', '[{"key":"A","val":"好的动平衡飞行时几乎无振动"},{"key":"B","val":"不平衡会导致电机轴承过早损坏"},{"key":"C","val":"轻微划痕可以用砂纸打磨修复平衡"},{"key":"D","val":"不同桨叶型号可以混用"}]', 2, 'ABC', '混用不同型号桨叶会导致动平衡破坏,AOPA严格禁止。', 2, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线飞行"要求考生?', '[{"key":"A","val":"沿预设航线飞行不得偏离"},{"key":"B","val":"保持规定高度"},{"key":"C","val":"完成指定时间或距离"},{"key":"D","val":"想办法抄近路节省时间"}]', 2, 'ABC', '航线飞行考核必须严格沿航迹,抄近路属于作弊扣分。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"FPV第一视角"与目视飞行的差异,AOPA认为?', '[{"key":"A","val":"FPV更精准地操控穿越障碍物"},{"key":"B","val":"目视更有利于大范围姿态判断"},{"key":"C","val":"两者各有优势应灵活使用"},{"key":"D","val":"FPV可以完全代替目视"}]', 2, 'ABC', 'AOPA强制要求:FPV只是辅助,驾驶员必须始终保持目视接触作为安全备份。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"飞行员手册"中应该包含?', '[{"key":"A","val":"所使用无人机的操作手册摘要"},{"key":"B","val":"紧急情况处理流程图"},{"key":"C","val":"个人习惯的灵敏度设置记录"},{"key":"D","val":"每次飞行的详细日志"}]', 2, 'ABCD', '飞行员手册AOPA建议包含:机型操作要点+应急流程+个人设置+飞行日志。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电机"维护,以下说法正确的有?', '[{"key":"A","val":"定期清理电机上的灰尘和飞絮"},{"key":"B","val":"轴承发出异响时应更换电机"},{"key":"C","val":"电机发热属于正常现象不用管"},{"key":"D","val":"电机接线必须牢固防止虚接"}]', 2, 'ABD', '电机异常发热是过载或短路前兆,必须排查原因不能忽视。', 1, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"飞行区域安全评估"的考查内容包括?', '[{"key":"A","val":"识别起降点周围的障碍物"},{"key":"B","val":"评估周围人群活动情况"},{"key":"C","val":"预判可能出现的风力变化"},{"key":"D","val":"场地租金是否合理"}]', 2, 'ABC', '安全评估关注飞行安全相关因素,场地租金与安全无关。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"失控返航"的高度设置,AOPA的建议是?', '[{"key":"A","val":"高于航线沿途最高障碍物20米以上"},{"key":"B","val":"考虑返航过程中的风力影响"},{"key":"C","val":"确保起飞点周围无障碍阻挡"},{"key":"D","val":"设成最高高度(300米以上)就安全了"}]', 2, 'ABC', '不是越高越安全,过高会消耗更多电量导致返航没电,且高空中可能有其他飞行器干扰。', 2, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试"通信原理"理论部分覆盖?', '[{"key":"A","val":"无线电基本原理"},{"key":"B","val":"图传和控制链路频段划分"},{"key":"C","val":"电磁干扰来源与防护"},{"key":"D","val":"卫星通信原理"}]', 2, 'ABC', '卫星通信不是AOPA通信原理考核内容。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电调固件升级",以下说法正确的有?', '[{"key":"A","val":"可以提升电机响应速度"},{"key":"B","val":"修复已知bug"},{"key":"C","val":"不同品牌电调固件不能互刷"},{"key":"D","val":"电调升级可以让电池容量变大"}]', 2, 'ABC', '固件升级不改变硬件物理属性,电池容量不可能因为固件升级而改变。', 1, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"高度控制"的评分标准是?', '[{"key":"A","val":"定点悬停高度偏差±1米以内"},{"key":"B","val":"航线飞行高度偏差±2米以内"},{"key":"C","val":"爬升下降速度平稳无突变"},{"key":"D","val":"可以猛推油门快速爬升"}]', 2, 'ABC', '高度控制讲究平稳过渡,猛推油门会导致姿态突变被扣分。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"指南针"校准失败的常见原因,以下说法正确的有?', '[{"key":"A","val":"校准场地有大量金属"},{"key":"B","val":"周围有手机或其他电子设备"},{"key":"C","val":"校准时飞机旋转速度过快或过慢"},{"key":"D","val":"天气不好"}]', 2, 'ABC', '校准失败通常是环境干扰或操作不当,与天气无关(除非雷暴有强电磁活动)。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"教员执照"相对于普通执照的额外要求有?', '[{"key":"A","val":"累计飞行时长达到100小时以上"},{"key":"B","val":"持有AOPA管理的教员培训合格证书"},{"key":"C","val":"通过教学能力专项评估"},{"key":"D","val":"必须拥有超过5架不同型号的无人机"}]', 2, 'ABC', '教员执照不需要持有多架无人机,而是需要教学能力和飞行时长证明。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"风的影响",AOPA的说法正确的有?', '[{"key":"A","val":"逆风增加电机负载缩短续航"},{"key":"B","val":"顺风虽然省力但返航时消耗大"},{"key":"C","val":"侧风使飞机水平漂移"},{"key":"D","val":"无风天飞行最安全"}]', 2, 'ABCD', '四种关于风的影响都是AOPA气象模块强调的知识点。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"法律责任"部分覆盖?', '[{"key":"A","val":"无证飞行的处罚标准"},{"key":"B","val":"违规飞入管制区的后果"},{"key":"C","val":"事故后的报告义务"},{"key":"D","val":"合同纠纷民事诉讼程序"}]', 2, 'ABC', '合同纠纷属于商业民事范畴,AOPA不考。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"地面站软件"的功能,AOPA认为?', '[{"key":"A","val":"用于航线规划和任务设置"},{"key":"B","val":"实时监控飞行数据"},{"key":"C","val":"代替驾驶员的目视监控"},{"key":"D","val":"记录完整飞行日志"}]', 2, 'ABD', 'AOPA明确规定:地面站不能代替驾驶员的目视监控,驾驶员必须保持对飞机的直接观察。', 1, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"紧急下降"的动作要求有?', '[{"key":"A","val":"先确认下降区域无障碍物"},{"key":"B","val":"平稳降低油门不是猛减"},{"key":"C","val":"保持航向稳定不转向"},{"key":"D","val":"接近地面时推杆缓冲"}]', 2, 'ABCD', 'AOPA紧急下降四步法:确认→缓降→稳航向→缓冲着陆。', 2, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"图传雪花"的常见原因,以下说法正确的有?', '[{"key":"A","val":"飞行距离过远信号弱"},{"key":"B","val":"周围有WiFi信号干扰"},{"key":"C","val":"天线摆放方向不对"},{"key":"D","val":"电池电量过低"}]', 2, 'ABC', '雪花是图传信号衰减的表现,与电池电量无关(除非低电压导致VTX功率不足)。', 1, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"低空经济发展趋势"的了解要求包括?', '[{"key":"A","val":"无人机在物流、巡检、植保中的应用"},{"key":"B","val":"城市低空基础设施建设"},{"key":"C","val":"载人飞行器(eVTOL)趋势"},{"key":"D","val":"低空经济的投资回报率精确计算"}]', 2, 'ABC', 'AOPA对低空经济考查应用场景认知,不考具体的投资回报率计算。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"解锁电机"的正确顺序,AOPA推荐?', '[{"key":"A","val":"先检查飞控状态指示灯"},{"key":"B","val":"确认GPS搜星数量足够"},{"key":"C","val":"确认周围空旷无人员"},{"key":"D","val":"先解锁再校准指南针"}]', 2, 'ABC', '解锁前所有校准必须完成,校准是解锁的前置条件不是解锁后再做。', 1, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线精度"的评分标准有?', '[{"key":"A","val":"允许偏离航线中心左右各3米"},{"key":"B","val":"关键转向点误差不超过5米"},{"key":"C","val":"高度保持在±1米以内"},{"key":"D","val":"可以沿航线外侧抄近路"}]', 2, 'ABC', '航线精度考核必须严格沿指定航迹飞行,不能抄近路。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行日志数据格式",AOPA说法正确的有?', '[{"key":"A","val":"DJI无人机使用通用的CSV或DAT格式"},{"key":"B","val":"日志数据可能被加密需专门软件解析"},{"key":"C","val":"不同品牌日志格式不统一"},{"key":"D","val":"日志数据永远无法被篡改"}]', 2, 'ABC', '日志数据在上传平台后可能被处理,但原始飞行日志具有一定的防篡改特性;说"永远无法篡改"太绝对。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"考核发证"的基本流程是?', '[{"key":"A","val":"完成规定的理论和实操课时"},{"key":"B","val":"通过理论考试(70分及格)"},{"key":"C","val":"通过实操考试(考官评估)"},{"key":"D","val":"填写领证申请并缴纳制证费"}]', 2, 'ABCD', 'AOPA完整流程:课时→理论考→实操考→领证申请。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"风切变"的危险表现,AOPA描述有?', '[{"key":"A","val":"高度瞬间大幅变化"},{"key":"B","val":"姿态剧烈晃动难以稳住"},{"key":"C","val":"空速骤减可能导致失速"},{"key":"D","val":"飞机自动升高100米以上"}]', 2, 'ABC', '风切变是风向风速瞬间剧变,最危险的是高度骤降和失速,不会自动升高100米。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试中"飞行区域识别"的考查内容包括?', '[{"key":"A","val":"看懂公开的空域分类地图"},{"key":"B","val":"识别禁区、限制区、开放区"},{"key":"C","val":"判断机场管制范围"},{"key":"D","val":"预测下一小时的天气变化"}]', 2, 'ABC', '天气预测是气象模块的内容,不是空域识别的考查范围。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"螺旋桨"安装方向,以下说法正确的有?', '[{"key":"A","val":"顺时针旋转电机用逆时针桨"},{"key":"B","val":"逆时针旋转电机用顺时针桨"},{"key":"C","val":"正反桨不能装反"},{"key":"D","val":"装反了也看不出来可以先飞"}]', 2, 'ABC', '装反桨叶会导致飞机无法起飞甚至炸机,起飞前自检必查。', 1, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考官"的基本要求有?', '[{"key":"A","val":"持有AOPA教员执照"},{"key":"B","val":"通过考官专项考核"},{"key":"C","val":"累计飞行时长不少于200小时"},{"key":"D","val":"必须是航空公司退休飞行员"}]', 2, 'ABC', '考官资格有明确的飞行时长和教员执照要求,不强制航空公司飞行员背景。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"无线电干扰"导致的故障,以下说法正确的有?', '[{"key":"A","val":"可能导致指南针数据跳变"},{"key":"B","val":"图传画面出现雪花或断链"},{"key":"C","val":"遥控器操作延迟或丢失"},{"key":"D","val":"电池电压突然降低"}]', 2, 'ABC', '电磁干扰影响无线电通信链路和指南针传感器,电池电压是独立物理属性不受干扰。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行后检查"的重点关注项有?', '[{"key":"A","val":"桨叶有无裂纹或磨损"},{"key":"B","val":"电机温度是否正常"},{"key":"C","val":"相机镜头是否完好"},{"key":"D","val":"机身是否有外部损伤"}]', 2, 'ABCD', 'AOPA飞行后检查四重点:桨叶→电机→相机→机身,全覆盖。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行高度与气压计"的关系,以下说法正确的有?', '[{"key":"A","val":"气压计测量的是相对大气压的高度"},{"key":"B","val":"天气变化会影响气压计读数"},{"key":"C","val":"起飞前应校准到起降点的气压基准"},{"key":"D","val":"室内气压计完全失效"}]', 2, 'ABC', '室内气压相对稳定,但不是完全失效,可能因密闭性导致读数缓慢漂移。', 2, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA考试对"飞行区域的障碍物规避"考查内容有?', '[{"key":"A","val":"识别电线杆、树木、建筑物等"},{"key":"B","val":"保持至少30米安全距离"},{"key":"C","val":"进入狭窄区域前评估可行性"},{"key":"D","val":"可以在高压电线下方飞行"}]', 2, 'ABC', 'AOPA明确禁止在高压电线正下方飞行(电磁干扰+坠落风险)。', 1, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"黑匣子数据",AOPA认为?', '[{"key":"A","val":"是事故调查的核心依据"},{"key":"B","val":"应随无人机一同妥善保存"},{"key":"C","val":"商业作业数据更要重视保存"},{"key":"D","val":"飞完可以直接删掉不影响"}]', 2, 'ABC', '黑匣子数据是追溯性和事故调查的关键证据,必须按规定保存。', 1, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"飞行力学"部分考查?', '[{"key":"A","val":"空气阻力随速度平方增长"},{"key":"B","val":"旋翼拉力与转速平方成正比"},{"key":"C","val":"载荷增加导致续航缩短"},{"key":"D","val":"无人机机身空气动力学设计"}]', 2, 'ABC', '机身空气动力学设计属于工程师范畴,不是驾驶员考试内容。', 2, 2, 1081);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"遥控器电池"的维护,以下说法正确的有?', '[{"key":"A","val":"应使用专用充电器或USB充电"},{"key":"B","val":"长期存放前充至60-70%"},{"key":"C","val":"发现外壳鼓包应立即更换"},{"key":"D","val":"可以用手机充电器随便充"}]', 2, 'ABC', '遥控器电池有特定的电压和充电曲线,随便充可能损坏。', 1, 2, 1082);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"实操考试"使用的设备要求是?', '[{"key":"A","val":"考试中心提供的标准设备"},{"key":"B","val":"允许考生使用自己的无人机(需符合规格)"},{"key":"C","val":"设备必须经过检验合格"},{"key":"D","val":"可以自带任何品牌遥控器"}]', 2, 'BC', 'AOPA实操允许自带合格设备,但通常由考试中心提供以确保一致性。', 2, 2, 1083);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行前空域查询"的正确做法,AOPA推荐?', '[{"key":"A","val":"通过民航局空管系统查询"},{"key":"B","val":"使用合法合规的APP(如大疆AirHub)"},{"key":"C","val":"直接起飞后再看有没有管制"},{"key":"D","val":"咨询当地空管部门"}]', 2, 'ABD', 'AOPA强制要求飞行前必须查询空域,绝不能飞上去再看。', 1, 2, 1084);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"醉酒驾驶无人机"的处罚有?', '[{"key":"A","val":"吊销执照"},{"key":"B","val":"罚款"},{"key":"C","val":"构成危险驾驶罪的追究刑事责任"},{"key":"D","val":"口头警告就行"}]', 2, 'ABC', '醉酒驾驶无人机与醉酒驾驶机动车类似,有明确的处罚规定,严重可追刑责。', 2, 2, 1085);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"低电量返航"逻辑,AOPA的说法正确的有?', '[{"key":"A","val":"低电量返航阈值应根据任务距离动态设置"},{"key":"B","val":"最后一格电才启动返航太危险"},{"key":"C","val":"应预留20%以上的安全余量"},{"key":"D","val":"电量50%以下就应该考虑返航了"}]', 2, 'ABCD', '四项都是AOPA强调的电量管理原则——永远要留足安全余量。', 2, 2, 1086);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试中的"无人机分类"包括?', '[{"key":"A","val":"按空机质量分(微型/轻型/小型/中型/大型)"},{"key":"B","val":"按用途分(航拍/植保/巡检等)"},{"key":"C","val":"按飞行时间分(短航/中航/长航时)"},{"key":"D","val":"按颜色分"}]', 2, 'ABC', '分类有法定标准(按空机质量)、常用标准(按用途/航时),颜色不影响分类。', 1, 2, 1087);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"固件升级失败"的应对,以下说法正确的有?', '[{"key":"A","val":"不要断电,保持充电线连接"},{"key":"B","val":"重新尝试刷入旧固件"},{"key":"C","val":"通过bootloader模式救砖"},{"key":"D","val":"直接砸掉买新的"}]', 2, 'ABC', '固件升级变砖有完整的救砖流程,砸掉浪费钱不是解决方案。', 1, 2, 1088);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"夜间飞行"的额外要求有?', '[{"key":"A","val":"无人机必须有有效航行灯"},{"key":"B","val":"驾驶员视力条件更严格"},{"key":"C","val":"地面应有辅助照明(起降点)"},{"key":"D","val":"夜间可以随便飞越不亮灯的建筑"}]', 2, 'ABC', '夜间飞行必须遵守更多安全限制,飞越建筑需要更多谨慎。', 2, 2, 1089);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"电磁兼容(EMC)"的说法正确的有?', '[{"key":"A","val":"好的EMC设计能减少对周围设备的干扰"},{"key":"B","val":"同时能减少外界对无人机自身的干扰"},{"key":"C","val":"消费级无人机不需要考虑EMC"},{"key":"D","val":"遥控器信号与其他设备之间应有隔离"}]', 2, 'ABD', '消费级无人机也需要EMC设计,否则飞控会受干扰炸机。', 2, 2, 1090);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA"教员课程"主要培养的能力包括?', '[{"key":"A","val":"飞行教学理论与方法"},{"key":"B","val":"应急处置教学能力"},{"key":"C","val":"安全管理和风险评估"},{"key":"D","val":"无人机维修保养技能"}]', 2, 'ABCD', 'AOPA教员课程覆盖教学、应急、安全、维护四大能力。', 2, 2, 1091);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞行中突发故障"的处理原则,AOPA推荐?', '[{"key":"A","val":"先稳住姿态再排故"},{"key":"B","val":"故障严重时优先迫降保人"},{"key":"C","val":"可以冒险继续飞一段看看"},{"key":"D","val":"评估风险后选择迫降或返航"}]', 2, 'ABD', 'AOPA原则:故障不"试一下",评估风险后果断决策。', 2, 2, 1092);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA实操考试"航线规划"的评分要点有?', '[{"key":"A","val":"合理利用空间不浪费电量"},{"key":"B","val":"避开所有障碍物"},{"key":"C","val":"转弯过渡流畅"},{"key":"D","val":"航线画得好看就行不关心实际可行性"}]', 2, 'ABC', '航线规划评分看实际可执行性,不只是好看。', 2, 2, 1093);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"数据链安全"的说法正确的有?', '[{"key":"A","val":"工业级无人机通常使用加密通信"},{"key":"B","val":"消费级2.4GHz频段易被干扰"},{"key":"C","val":"信号可能被非法截获"},{"key":"D","val":"飞控固件自带防火墙不会被攻破"}]', 2, 'ABC', '飞控固件的安全防护远不是企业级防火墙,专业黑客仍可能入侵。', 2, 2, 1094);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"飞行员职业发展"的建议包括?', '[{"key":"A","val":"从视距内逐步升级到超视距"},{"key":"B","val":"积累足够飞行时长保持资质"},{"key":"C","val":"参与多样化作业项目开阔眼界"},{"key":"D","val":"多飞不怕炸机练胆子"}]', 2, 'ABC', '炸机是事故不是"练胆子"的途径,应通过模拟和安全练习提升。', 1, 2, 1095);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"云台抖动"的常见原因,以下说法正确的有?', '[{"key":"A","val":"机身振动过大传递到云台"},{"key":"B","val":"云台电机PID参数不合适"},{"key":"C","val":"云台配重不平衡"},{"key":"D","val":"相机镜头光圈太大"}]', 2, 'ABC', '光圈影响曝光不影响云台抖动,振动传递、PID、配重才是抖动的核心原因。', 2, 2, 1096);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA对"商业作业的报价合理性"有什么建议?', '[{"key":"A","val":"包含设备折旧成本"},{"key":"B","val":"包含人员安全保险成本"},{"key":"C","val":"包含空域申请时间成本"},{"key":"D","val":"打价格战压低利润吸引客户"}]', 2, 'ABC', 'AOPA建议商业报价覆盖合理成本,不鼓励恶性价格战。', 1, 2, 1097);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于无人机"飞控中安全冗余"的说法正确的有?', '[{"key":"A","val":"多旋翼多电机互为冗余"},{"key":"B","val":"某些飞控支持双IMU备份"},{"key":"C","val":"气压计和GPS高度计互为冗余"},{"key":"D","val":"所有传感器永远不会同时失效"}]', 2, 'ABC', '好的冗余设计降低故障概率但不能保证永远不出问题,极端情况下多个传感器可能同时受干扰失效。', 2, 2, 1098);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, 'AOPA理论考试"选择题评分规则"是?', '[{"key":"A","val":"单选选错不得分"},{"key":"B","val":"多选题少选得一半分(有些题库)"},{"key":"C","val":"判断题选错扣分项"},{"key":"D","val":"答不完可以跳过不计分"}]', 2, 'ABD', 'AOPA考试通常采用"选错不得分"或"部分给分",不是扣分制。', 2, 2, 1099);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(2, '关于AOPA执照"信息变更"的办理,以下说法正确的有?', '[{"key":"A","val":"执照上的姓名/地址变更需重新申请"},{"key":"B","val":"遗失损毁可申请补发"},{"key":"C","val":"补发需要提交遗失声明"},{"key":"D","val":"可以直接涂改不用重新办"}]', 2, 'ABC', '执照遗失损坏都有正规补发流程,严禁私自涂改。', 1, 2, 1100);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍的"黄金构图法则"包括?', '[{"key":"A","val":"三分法(九宫格)"},{"key":"B","val":"对称构图"},{"key":"C","val":"引导线构图"},{"key":"D","val":"满屏填充"}]', 2, 'ABCD', 'UTC航拍培训强调多种构图技法组合运用,四项都是常用黄金法则。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍任务前的"素材规划"应考虑?', '[{"key":"A","val":"镜头景别(全景/中景/特写)"},{"key":"B","val":"拍摄角度(俯视/平视/仰视)"},{"key":"C","val":"运镜方式(推/拉/摇/移/跟)"},{"key":"D","val":"后期滤镜效果选择"}]', 2, 'ABC', 'UTC原则:拍摄前先规划机位和运镜,滤镜属于后期,不在现场拍摄规划内。', 1, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC航拍"ISO感光度"选择,以下说法正确的有?', '[{"key":"A","val":"光线充足时用低ISO(100-400)"},{"key":"B","val":"暗光下提高ISO但会有噪点"},{"key":"C","val":"DJI无人机建议不要超过ISO 800"},{"key":"D","val":"ISO越高画面越清晰"}]', 2, 'ABC', 'ISO高噪点多,不是更清晰。UTC航拍优先低ISO保证画质。', 1, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍时的"ND滤镜"作用包括?', '[{"key":"A","val":"降低快门速度避免果冻效应"},{"key":"B","val":"让云层在运动中呈现丝滑效果"},{"key":"C","val":"提高相机感光度"},{"key":"D","val":"保持大光圈拍摄浅景深"}]', 2, 'ABD', 'ND镜减光,让你在强光下仍能用慢快门拍出动感,同时保持大光圈虚化效果。', 2, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC实操中的"环绕拍摄(Orbit)"技术要点有?', '[{"key":"A","val":"保持与被摄物等距飞行"},{"key":"B","val":"环绕速度均匀不要忽快忽慢"},{"key":"C","val":"相机始终对准被摄物"},{"key":"D","val":"绕圈半径必须小于5米"}]', 2, 'ABC', '环绕半径根据被摄对象大小灵活确定,没有固定5米限制。', 2, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍视频"后期调色"的常用软件有?', '[{"key":"A","val":"DaVinci Resolve"},{"key":"B","val":"Adobe Premiere Pro"},{"key":"C","val":"Final Cut Pro"},{"key":"D","val":"Microsoft Paint"}]', 2, 'ABC', 'Paint是系统画图工具,完全不支持专业调色。', 1, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保作业中"喷洒均匀性"的影响因素有?', '[{"key":"A","val":"飞行速度(空速)"},{"key":"B","val":"喷洒高度"},{"key":"C","val":"流量设置"},{"key":"D","val":"药剂浓度"}]', 2, 'ABCD', 'UTC植保强调速度/高度/流量/浓度四要素均衡,缺一影响覆盖。', 2, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC植保"药剂飘移"的控制措施有?', '[{"key":"A","val":"降低飞行高度(贴近作物)"},{"key":"B","val":"减小雾滴粒径"},{"key":"C","val":"选择无风或微风天气"},{"key":"D","val":"增大喷嘴压力"}]', 2, 'AC', 'UTC植保标准:降低高度减飘、增大雾滴粒径(更重不易飘)、无风天作业。减小雾滴和增大压力反而加剧飘移。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"延时摄影(Hyperlapse)"的参数设置要点有?', '[{"key":"A","val":"根据目标运动速度选择间隔时间"},{"key":"B","val":"使用ND滤镜保持快门1/50以上"},{"key":"C","val":"架三角架绝对静止"},{"key":"D","val":"电池预热保证低温下正常工作"}]', 2, 'ABD', '延时摄影恰恰需要运动(移动机位),固定三角架那是传统延时不是Hyperlapse。', 2, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"构图时的留白"有什么作用?', '[{"key":"A","val":"让画面呼吸感更强"},{"key":"B","val":"突出主体"},{"key":"C","val":"便于后期加文字或logo"},{"key":"D","val":"增加照片内存大小"}]', 2, 'ABC', '留白是构图手法,与文件大小无关。', 1, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍中"构图的减法原则"是指?', '[{"key":"A","val":"画面只保留核心主体"},{"key":"B","val":"去掉无关元素让画面干净"},{"key":"C","val":"后期裁掉多余部分"},{"key":"D","val":"降低相机分辨率减少画质元素"}]', 2, 'ABC', 'UTC构图减法:拍摄时精简取景→后期裁剪→画面只突出核心,与分辨率无关。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"运动模糊"效果的实现方法有?', '[{"key":"A","val":"降低快门速度(1/30s以下)"},{"key":"B","val":"让被摄物体运动(如车流)"},{"key":"C","val":"使用手动平移跟拍"},{"key":"D","val":"调高ISO感光度"}]', 2, 'ABC', '运动模糊靠慢快门+物体运动/镜头运动实现,ISO影响噪点不影响运动模糊。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍中"HDR(高动态范围)"的使用场景是?', '[{"key":"A","val":"逆光场景(前景暗背景亮)"},{"key":"B","val":"室内外明暗对比大"},{"key":"C","val":"纯逆光剪影拍摄"},{"key":"D","val":"均匀光线下不需要"}]', 2, 'ABD', 'HDR用于明暗反差大的场景保留细节,均匀光线或纯逆光剪影不需要HDR。', 2, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"白平衡",UTC推荐?', '[{"key":"A","val":"晴天正午用5600K日光预设"},{"key":"B","val":"室内或傍晚调至3200K暖光"},{"key":"C","val":"阴天用自动白平衡即可"},{"key":"D","val":"全部用自动后期统一调色"}]', 2, 'ABC', 'UTC航拍原则:尽量用正确白平衡拍摄,减少后期调整量;不是全部依赖自动。', 1, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"低光拍摄"的应对措施有?', '[{"key":"A","val":"提高ISO(但会有噪点)"},{"key":"B","val":"使用更大光圈镜头"},{"key":"C","val":"降低快门速度(但要固定机位)"},{"key":"D","val":"后期用降噪软件处理"}]', 2, 'ABCD', '低光四要素:高ISO噪点→大光圈收光→慢快门进光→后期降噪。', 2, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"曝光三角"的关系是?', '[{"key":"A","val":"光圈越大进光越多"},{"key":"B","val":"快门越慢进光越多"},{"key":"C","val":"ISO越高传感器越敏感"},{"key":"D","val":"三者必须固定值不能调整"}]', 2, 'ABC', '曝光三角三要素互相制衡,UTC强调理解三者关系才能灵活应对各种光线场景。', 1, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"大光圈虚化"效果(景深控制)的实现条件是?', '[{"key":"A","val":"光圈开到最大(f/2.8等)"},{"key":"B","val":"相机离主体近"},{"key":"C","val":"使用长焦距镜头"},{"key":"D","val":"光圈越小虚化越强"}]', 2, 'ABC', '大光圈+近距离+长焦三要素同时满足才能得到好的虚化效果。D说反了。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"黄金时刻(Golden Hour)"的拍摄特点有?', '[{"key":"A","val":"光线柔和呈暖色"},{"key":"B","val":"阴影拉长增加层次"},{"key":"C","val":"对比度降低细节丰富"},{"key":"D","val":"适合拍日出日落风光"}]', 2, 'ABCD', '黄金时刻四特点:柔光+暖色+层次+低对比,是航拍黄金拍摄时间。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"夜间航拍"参数设置,UTC推荐?', '[{"key":"A","val":"ISO设为800-1600可接受噪点"},{"key":"B","val":"快门速度1/30s以上防抖"},{"key":"C","val":"光圈开到最大收光"},{"key":"D","val":"降低分辨率换取感光度提升"}]', 2, 'ABC', 'UTC夜景:高ISO+安全快门+大光圈,不主动降分辨率。', 2, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"构图的引导线"可以用哪些元素?', '[{"key":"A","val":"道路"},{"key":"B","val":"河流/海岸线"},{"key":"C","val":"桥梁"},{"key":"D","val":"不规则云朵"}]', 2, 'ABC', '引导线需要有明确方向感和透视感,不规则云朵不具备引导效果。', 1, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"色彩理论",UTC强调?', '[{"key":"A","val":"互补色搭配产生视觉冲击"},{"key":"B","val":"同色系搭配和谐统一"},{"key":"C","val":"三原色混合产生丰富层次"},{"key":"D","val":"颜色越多画面越好"}]', 2, 'ABC', '色彩丰富不等于画面好,过多颜色容易让画面杂乱,需要控制数量和搭配。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍中"DJI Fly"APP与"Litchi"等第三方APP的差异是?', '[{"key":"A","val":"官方APP功能稳定兼容性好"},{"key":"B","val":"第三方APP支持更高级的航迹规划"},{"key":"C","val":"官方APP实时图传延迟更低"},{"key":"D","val":"第三方APP可能不支持新机型"}]', 2, 'ABCD', '官方APP稳但功能基础,第三方功能强但兼容性需注意。UTC培训都要会用。', 2, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"镜头语言"中"推镜头"的作用是?', '[{"key":"A","val":"引导观众视线聚焦主体"},{"key":"B","val":"产生压迫感(快速推进)"},{"key":"C","val":"展示主体与环境的关系"},{"key":"D","val":"压缩空间感"}]', 2, 'AB', '推镜头是从远到近聚焦主体,建立主体与观众的连接感;CD描述的是拉镜头的效果。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"避障系统",UTC实操时的说法正确的有?', '[{"key":"A","val":"避障是辅助不能完全依赖"},{"key":"B","val":"逆光下视觉避障可能失效"},{"key":"C","val":"细线和电线很难被检测到"},{"key":"D","val":"TOF避障不怕任何光线"}]', 2, 'ABC', '避障系统各有局限,TOF虽比光学耐光但也有探测盲区和精度上限。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"光线方向"对画面的影响是?', '[{"key":"A","val":"顺光画面明亮但缺层次"},{"key":"B","val":"侧光形成光影立体感"},{"key":"C","val":"逆光容易过曝或剪影"},{"key":"D","val":"顶光最适合人像摄影"}]', 2, 'ABC', '顶光会在人物脸上产生难看的阴影(如眼窝、下巴暗影),人像通常避免顶光。', 1, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"运镜组合"中"上升+环绕"的效果是?', '[{"key":"A","val":"逐步展现主体的全貌"},{"key":"B","val":"同时展示主体和环境"},{"key":"C","val":"制造宏大叙事感"},{"key":"D","val":"适合短视频开场"}]', 2, 'ABCD', '上升+环绕是经典航拍摄影开场运镜,四种效果同时具备。', 1, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"FPV穿越航拍"与常规航拍的差异,UTC认为?', '[{"key":"A","val":"穿越机视角更具冲击力和动感"},{"key":"B","val":"常规航拍更稳定画质更高"},{"key":"C","val":"穿越机不适合长时间记录"},{"key":"D","val":"两者的后期处理流程完全相同"}]', 2, 'ABC', '两者机位和运动方式不同,后期调色和剪辑节奏都应区别对待。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"倾斜摄影"的特点是?', '[{"key":"A","val":"同时拍摄多个角度用于3D建模"},{"key":"B","val":"比垂直正射更贴近人眼视角"},{"key":"C","val":"可以用于房地产实景展示"},{"key":"D","val":"不需要规划航线飞上去拍就行"}]', 2, 'ABC', '倾斜摄影需要精密规划航线(五个方向同时拍摄),不是随便飞就能拍好。', 2, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于UTC"电力巡检"的拍摄策略,以下说法正确的有?', '[{"key":"A","val":"沿杆塔直线飞保证照片角度一致"},{"key":"B","val":"靠近绝缘子和导线细节特写"},{"key":"C","val":"避开电磁干扰保持安全距离"},{"key":"D","val":"用手动模式保证每根杆塔清晰度"}]', 2, 'ABC', '电力巡检通常用自动航线保持一致性,手动模式不适合长距离巡检作业。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"色彩分级(Color Grading)"与"色彩校正"的区别是?', '[{"key":"A","val":"校正是还原真实色彩"},{"key":"B","val":"分级是创造艺术风格"},{"key":"C","val":"两者没有区别都是调色"},{"key":"D","val":"分级可以用LUT快速实现"}]', 2, 'ABD', 'UTC后期强调:先校正还原→再分级做风格,两者是前后连贯的不同步骤。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于无人机"Gimbal Yaw Lock"(云台偏航锁定)功能,以下说法正确的有?', '[{"key":"A","val":"锁定后相机始终朝向固定方向"},{"key":"B","val":"飞机转向时相机不跟随"},{"key":"C","val":"适合直线跟拍运动主体"},{"key":"D","val":"可以实现环绕效果"}]', 2, 'ABC', 'Yaw Lock锁定相机偏航,飞机转向但相机不动,实现跟拍;环绕需要云台自由转向配合飞机绕圈。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"分辨率与画质"的关系,UTC说法正确的有?', '[{"key":"A","val":"4K分辨率比1080P更清晰"},{"key":"B","val":"高分辨率文件更大占存储"},{"key":"C","val":"可以后期裁切放大不损失画质"},{"key":"D","val":"分辨率越高画面色彩越好"}]', 2, 'ABC', '分辨率描述像素数量,色彩由传感器和白平衡决定,两者独立。', 1, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"DJI Mavic"与"Inspire"系列的航拍差异,UTC认为?', '[{"key":"A","val":"Mavic便携适合单兵作业"},{"key":"B","val":"Inspire画质更好适合专业制作"},{"key":"C","val":"两者都能完成航拍任务但场景不同"},{"key":"D","val":"Inspire能飞的Mavic都能飞"}]', 2, 'ABC', 'Inspire有更高的画质和更强的专业功能(如双控),Mavic也有自己的优势(便携、避障强),不是简单替代关系。', 2, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"素材命名和管理"的建议是?', '[{"key":"A","val":"按日期+地点+机位类型命名"},{"key":"B","val":"项目完成后及时备份整理"},{"key":"C","val":"原始素材和后期文件分文件夹存放"},{"key":"D","val":"拍完随便乱放等以后再说"}]', 2, 'ABC', '素材管理混乱会导致后期找不到文件、存储空间浪费,UTC强调当场整理。', 1, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于航拍"RAW格式拍摄"的优势,以下说法正确的有?', '[{"key":"A","val":"保留更多动态范围信息"},{"key":"B","val":"后期调整空间大"},{"key":"C","val":"色彩精度更高"},{"key":"D","val":"文件比JPEG小"}]', 2, 'ABC', 'RAW保留传感器原始数据,文件体积远大于压缩后的JPEG,不是更小。', 1, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"构图中的前景使用",以下做法正确的有?', '[{"key":"A","val":"用树叶做框架增加层次"},{"key":"B","val":"用水面倒影增加对称感"},{"key":"C","val":"前景不能遮挡主体"},{"key":"D","val":"前景越复杂越好看"}]', 2, 'ABC', '前景太多太杂会分散注意力破坏构图,应简洁且服务于主体突出。', 2, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"避障系统"在航拍中的正确使用,UTC强调?', '[{"key":"A","val":"了解自家飞机的避障覆盖方向"},{"key":"B","val":"正下方盲区飞行需谨慎"},{"key":"C","val":"低光环境下视觉避障可能失效"},{"key":"D","val":"完全相信避障大胆飞就行"}]', 2, 'ABC', '避障永远是辅助,必须目视确认环境安全再飞。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"视频帧率"的选择,以下说法正确的有?', '[{"key":"A","val":"24fps(电影感)适合剧情片"},{"key":"B","val":"30fps(流畅)适合日常记录"},{"key":"C","val":"60fps适合慢动作回放"},{"key":"D","val":"帧率越高画质越好"}]', 2, 'ABC', '帧率影响流畅度和后期慢动作,与画质(清晰度、色彩)无关。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"低高度贴地飞行"的注意事项是?', '[{"key":"A","val":"保持1.5-3米高度(视距内)"},{"key":"B","val":"注意树木和电线"},{"key":"C","val":"控制速度避免来不及反应"},{"key":"D","val":"可以闭眼飞反正安全"}]', 2, 'ABC', '贴地飞行风险高必须高度专注,闭眼等于自杀式操作。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍后期工作流",UTC推荐的顺序是?', '[{"key":"A","val":"素材导入与备份"},{"key":"B","val":"粗剪(选素材、定节奏)"},{"key":"C","val":"精剪+调色"},{"key":"D","val":"加音乐和字幕"}]', 2, 'ABCD', 'UTC完整后期四步:导入备份→粗剪→精剪调色→音乐字幕。', 1, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC植保作业"飞行路线规划"的要点有?', '[{"key":"A","val":"航线平行覆盖不留空地"},{"key":"B","val":"相邻航线适当重叠(10-20%)"},{"key":"C","val":"注意风向调整航线方向"},{"key":"D","val":"随便画个圈就行"}]', 2, 'ABC', '植保航线必须专业规划保证覆盖均匀,不能随便画。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于植保作业"喷头选型",UTC说法正确的有?', '[{"key":"A","val":"细雾喷头适合小叶片作物"},{"key":"B","val":"粗雾喷头适合高杆作物"},{"key":"C","val":"扇形喷头覆盖范围大"},{"key":"D","val":"喷头型号随便用不影响效果"}]', 2, 'ABC', '喷头选择直接影响雾滴粒径和覆盖效果,必须根据作物类型和植保需求选型。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保作业中"重复喷施"的控制措施有?', '[{"key":"A","val":"精确记录每次喷施范围"},{"key":"B","val":"航线重叠率不要超过20%"},{"key":"C","val":"利用RTD高精度定位保证航线一致"},{"key":"D","val":"多喷几遍效果更好"}]', 2, 'ABC', '重复喷施会造成农药过量污染和浪费,UTC强调精准覆盖避免重复。', 2, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"防重喷漏喷"的技术手段,UTC推荐?', '[{"key":"A","val":"RTK高精度定位系统"},{"key":"B","val":"飞行轨迹回放功能"},{"key":"C","val":"地面标记物辅助判断"},{"key":"D","val":"凭驾驶员记忆"}]', 2, 'ABC', 'UTC植保作业精度要求高,必须依靠技术手段保证覆盖,不能凭记忆判断。', 2, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '植保作业"药剂配制"的正确做法是?', '[{"key":"A","val":"按照标签说明书的浓度要求"},{"key":"B","val":"注意不同剂型(水剂/粉剂/乳油)的配比差异"},{"key":"C","val":"混合顺序有讲究(水→助剂→药剂)"},{"key":"D","val":"随便混在一起就行"}]', 2, 'ABC', '药剂配制直接影响效果和安全,必须按规范操作。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于植保"电池续航"规划,UTC建议?', '[{"key":"A","val":"起飞前计算单程飞行时长"},{"key":"B","val":"预留至少20%返航余量"},{"key":"C","val":"多备几块轮换使用"},{"key":"D","val":"飞到没电就迫降在地里"}]', 2, 'ABC', '植保续航规划必须充分,绝不能让飞机没电坠落在农田里(影响作业和可能损坏飞机)。', 2, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"镜头选择"的建议是?', '[{"key":"A","val":"广角镜头适合大场景风光"},{"key":"B","val":"中焦镜头适合人文纪实"},{"key":"C","val":"长焦镜头适合压缩空间"},{"key":"D","val":"用自带云台相机就行不用额外镜头"}]', 2, 'ABC', '航拍机通常自带固定焦距云台相机,但不同焦段的选择思路是通用的。UTC会讲解焦段语言。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机+测绘"的应用,UTC说法正确的有?', '[{"key":"A","val":"可以用于地籍测量"},{"key":"B","val":"可以生成DEM高程模型"},{"key":"C","val":"可以用于数字孪生建模"},{"key":"D","val":"测绘需要专用RTK机型"}]', 2, 'ABCD', '无人机测绘需要RTK定位+正射影像或激光雷达(LiDAR),应用场景覆盖地籍→DEM→数字孪生。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"广告片拍摄"的要点是?', '[{"key":"A","val":"镜头语言服务于品牌调性"},{"key":"B","val":"剪辑节奏配合音乐节拍"},{"key":"C","val":"产品特写要清晰有质感"},{"key":"D","val":"光拍风景不要拍产品"}]', 2, 'ABC', '航拍广告片的核心是产品和品牌表达,不能光拍风景。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC航拍"航测成图精度"的影响因素有?', '[{"key":"A","val":"飞行高度越高精度越低"},{"key":"B","val":"RTK定位精度直接影响成图质量"},{"key":"C","val":"相机分辨率越高越好"},{"key":"D","val":"天气晴朗光照充足"}]', 2, 'ABCD', '航测精度四要素:航高→RTK→相机→光照,都是影响成图精度的关键。', 2, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在应急救援中的应用",UTC说法正确的有?', '[{"key":"A","val":"可以快速勘察灾害现场"},{"key":"B","val":"可以为地面救援提供照明和投送物资"},{"key":"C","val":"可以绘制受灾地图辅助决策"},{"key":"D","val":"可以直接灭火救人"}]', 2, 'ABC', '无人机可以辅助救援但不能直接灭火救人(没有这个能力),主要是侦察、投送、测绘。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"建筑摄影"的构图要点有?', '[{"key":"A","val":"用对称构图体现建筑威严"},{"key":"B","val":"低角度仰拍突出宏伟"},{"key":"C","val":"高角度俯拍展示全貌"},{"key":"D","val":"必须等比例不变形"}]', 2, 'ABC', '建筑航拍可以利用透视变形创造视觉冲击力,不追求严格等比例。', 2, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"农业数字孪生"的核心技术是?', '[{"key":"A","val":"无人机多光谱遥感"},{"key":"B","val":"地面传感器数据采集"},{"key":"C","val":"AI分析作物长势"},{"key":"D","val":"人工实地考察"}]', 2, 'ABCD', '数字孪生是多源数据融合:无人机遥感+地面IoT+AI分析+人工校验。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍片头的作用",UTC认为?', '[{"key":"A","val":"奠定整部片的基调"},{"key":"B","val":"迅速抓住观众注意力"},{"key":"C","val":"展示主角或核心场景"},{"key":"D","val":"放个logo就行不重要"}]', 2, 'ABC', '片头是整部片子的门面,UTC强调必须精心设计开场。', 1, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"城市夜景"的拍摄技巧有?', '[{"key":"A","val":"选择高机位俯拍(如山顶或高楼顶起飞)"},{"key":"B","val":"用低ISO长曝光拍车流光轨"},{"key":"C","val":"避开飞机自身灯光污染画面"},{"key":"D","val":"必须等烟花绽放时拍"}]', 2, 'ABC', '城市夜景不一定需要烟花,普通夜景有自己独特的美感。', 2, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"商业报价"中应包含的项目有?', '[{"key":"A","val":"飞行设备和相机折旧"},{"key":"B","val":"飞手人力成本"},{"key":"C","val":"后期剪辑调色成本"},{"key":"D","val":"空域申请和保险成本"}]', 2, 'ABCD', 'UTC商业报价四要素:设备+人力+后期+合规,避免漏项导致亏损。', 1, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"穿越机竞速航拍"的剪辑节奏,UTC说法正确的有?', '[{"key":"A","val":"与竞速节奏同步,紧张刺激"},{"key":"B","val":"慢动作处理关键时刻"},{"key":"C","val":"配合电子音乐更有感觉"},{"key":"D","val":"应该慢节奏抒情"}]', 2, 'ABC', '竞速FPV的特色就是快节奏刺激,抒情完全不对味。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"水面倒影"的拍摄要点有?', '[{"key":"A","val":"风平浪静时水面如镜"},{"key":"B","val":"从正上方拍可以对称构图"},{"key":"C","val":"傍晚或清晨光线柔和效果最好"},{"key":"D","val":"白天阳光直射最清晰"}]', 2, 'ABC', '正午阳光直射水面时反光强看不清倒影,柔光环境效果好。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训中"商业项目谈判技巧"包括?', '[{"key":"A","val":"了解客户真实需求"},{"key":"B","val":"展示专业作品案例"},{"key":"C","val":"报价时留出合理谈判空间"},{"key":"D","val":"一开始就报最低价快速成交"}]', 2, 'ABC', 'UTC商业谈判策略强调专业和价值展示,不鼓励一开始就低价竞争。', 1, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机素材存储和交付",UTC推荐?', '[{"key":"A","val":"原始文件用SSD存储(速度快)"},{"key":"B","val":"长期归档用机械硬盘(成本低容量大)"},{"key":"C","val":"云端备份防止本地损坏"},{"key":"D","val":"用最便宜的U盘随便拷一下"}]', 2, 'ABC', '素材价值高,UTC强调多介质备份,绝不能随便用U盘拷一下就完事。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"云层之上"的拍摄时机是?', '[{"key":"A","val":"清晨云层较低时爬升穿云"},{"key":"B","val":"阴天云层厚时从顶部俯拍"},{"key":"C","val":"需要足够爬升高度(可能300米以上)"},{"key":"D","val":"随时想飞就飞"}]', 2, 'ABC', '穿云航拍条件苛刻:云层高度、爬升能力、法规限制都要考虑,不是随时能飞。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"无人机植保考试"的实操内容包括?', '[{"key":"A","val":"航线规划与喷洒均匀性"},{"key":"B","val":"药剂浓度配制"},{"key":"C","val":"电池与载荷重量估算"},{"key":"D","val":"植保效果评估与调整"}]', 2, 'ABCD', 'UTC植保考核四方面:规划→药剂→载荷→效果调整。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍摄影师的职业发展",UTC建议?', '[{"key":"A","val":"从通用航拍向垂直领域(如建筑/农业/地理)深耕"},{"key":"B","val":"积累作品集展示个人风格"},{"key":"C","val":"学习后期和平面设计技能互补"},{"key":"D","val":"只想飞不想修图"}]', 2, 'ABC', 'UTC航拍摄影师需要飞+拍+剪综合能力,不可以只想飞不修图。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"雪景"的拍摄技巧是?', '[{"key":"A","val":"减少曝光补偿(自动曝光过曝雪会变灰)"},{"key":"B","val":"阴天拍雪景立体感弱,需要找到其他视觉元素"},{"key":"C","val":"利用阴影增加层次"},{"key":"D","val":"雪越白越好不需要细节"}]', 2, 'ABC', '雪景曝光需要+1到+2档补偿(让雪保持白),太暗会变灰失去细节。D说反了。', 3, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训中"团队协作"的要点有?', '[{"key":"A","val":"飞手+地面助理分工明确"},{"key":"B","val":"拍摄前开会同步计划"},{"key":"C","val":"飞手专注操控,助理负责沟通和监控"},{"key":"D","val":"一个人飞一个人没事干就行"}]', 2, 'ABC', 'UTC商业航拍通常是飞手+助理双人配合,助理负责沟通、监控、应急等,不能闲呆着。', 1, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"DJI Inspire 3"的航拍优势,UTC说法正确的有?', '[{"key":"A","val":"8K全画幅画质专业级"},{"key":"B","val":"ProRes RAW支持电影级后期"},{"key":"C","val":"双控模式适合拍摄复杂镜头"},{"key":"D","val":"机身只有手掌大小便携"}]', 2, 'ABC', 'Inspire 3是专业级设备,机身不小(比Mavic系列大很多),便携性不是它的卖点。', 2, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"极简构图"的特点是?', '[{"key":"A","val":"画面元素极少突出主体"},{"key":"B","val":"大面积留白增加呼吸感"},{"key":"C","val":"利用对称和比例产生美感"},{"key":"D","val":"必须有文字标语"}]', 2, 'ABC', '极简构图靠画面元素和比例,不需要加文字标语。', 2, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍作品的版权和授权"的注意事项有?', '[{"key":"A","val":"商业项目作品要签署版权协议"},{"key":"B","val":"注意被拍摄对象的肖像权和隐私权"},{"key":"C","val":"公开发布前确认授权范围"},{"key":"D","val":"拍了就是自己的想怎么用都行"}]', 2, 'ABC', '航拍作品版权、肖像权、隐私权都有法律约束,不能随意使用。', 2, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机热成像"应用,UTC说法正确的有?', '[{"key":"A","val":"电力巡检检测线路发热故障"},{"key":"B","val":"消防救援寻找被困人员"},{"key":"C","val":"建筑屋顶检查渗漏"},{"key":"D","val":"可以代替普通可见光航拍"}]', 2, 'ABC', '热成像是补充探测手段,不能完全代替可见光航拍(各有适用场景)。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"产品展示"的拍摄策略是?', '[{"key":"A","val":"多角度全方位展示产品外观"},{"key":"B","val":"配合场景图体现产品使用场景"},{"key":"C","val":"特写展示产品细节和质感"},{"key":"D","val":"产品拍清楚就行不用创意"}]', 2, 'ABC', '产品航拍需要兼顾清晰和创意,不能只拍清楚没设计感。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC培训"无人机维修能力"建议的掌握程度是?', '[{"key":"A","val":"至少能排查常见故障(电机/桨叶/电池)"},{"key":"B","val":"会基本的固件升级和参数调整"},{"key":"C","val":"复杂故障交给专业维修"},{"key":"D","val":"必须能完全拆机重新组装"}]', 2, 'ABC', 'UTC航拍摄影师不要求完全的拆机维修能力,掌握常见故障排查和基础维护即可。', 1, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍的未来发展",UTC提到的方向有?', '[{"key":"A","val":"AI自动拍摄和后期辅助"},{"key":"B","val":"XR/VR沉浸式航拍体验"},{"key":"C","val":"无人机与5G/卫星通信融合"},{"key":"D","val":"不再需要人操作完全AI化"}]', 2, 'ABC', 'AI辅助增强但完全AI化还很远,短期内人机协作是主流。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '航拍"镜头运动与情绪"的关系,UTC说法正确的有?', '[{"key":"A","val":"推镜头:引导、聚焦、压迫(快推)"},{"key":"B","val":"拉镜头:揭示、疏离、开阔"},{"key":"C","val":"摇镜头:叙事、交代环境"},{"key":"D","val":"镜头运动不影响情绪"}]', 2, 'ABC', '运镜方式直接影响观众情绪,UTC强调掌握运镜语言才能更好表达。', 2, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在建筑施工中的应用",UTC说法正确的有?', '[{"key":"A","val":"定期航拍监控施工进度"},{"key":"B","val":"生成数字孪生辅助BIM管理"},{"key":"C","val":"安全巡检(不用人工爬高架)"},{"key":"D","val":"可以代替塔吊吊运材料"}]', 2, 'ABC', '无人机无法替代塔吊的重物吊运功能,UTC强调无人机是辅助工具不是全能替代者。', 2, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍教学方法论"包括?', '[{"key":"A","val":"理论讲解+实操演练结合"},{"key":"B","val":"案例分析拆解优秀作品"},{"key":"C","val":"学员作品点评与修改建议"},{"key":"D","val":"只靠看书就行不用动手"}]', 2, 'ABC', 'UTC教学强调理论+实操+点评三位一体,纯看书无法掌握航拍技能。', 1, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍中''意外''的美丽画面"(如突然的光线/动物),UTC说法正确的有?', '[{"key":"A","val":"保持警觉随时准备捕捉"},{"key":"B","val":"提前预判可能出现的意外时刻"},{"key":"C","val":"拍到了就是运气好不指望太多"},{"key":"D","val":"完全可以靠计划拍出所有好画面"}]', 2, 'AB', '航拍中"意外"的好画面是存在的,摄影师应保持警觉但也不能完全依赖运气。D太绝对。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"无人机电池安全操作"强调?', '[{"key":"A","val":"飞行后等待电池冷却再充电"},{"key":"B","val":"充电时远离易燃物"},{"key":"C","val":"不在无人监控时充电"},{"key":"D","val":"电池鼓包了照样用完"}]', 2, 'ABC', '鼓包电池内部已受损,必须立即更换不能继续使用,否则有起火风险。', 1, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"无人机在环保监测中的应用",UTC说法正确的有?', '[{"key":"A","val":"巡查森林覆盖率变化"},{"key":"B","val":"监测水体污染情况"},{"key":"C","val":"检查垃圾填埋场渗漏"},{"key":"D","val":"可以直接处理污染物"}]', 2, 'ABC', '无人机可以侦察但无法处理污染物,仍是辅助工具。', 2, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, 'UTC"航拍作品个人IP打造"的建议包括?', '[{"key":"A","val":"保持统一的个人风格和调色"},{"key":"B","val":"选择垂直领域深耕(如建筑/风光)"},{"key":"C","val":"在社交媒体持续输出作品"},{"key":"D","val":"拍什么火拍什么不要坚持风格"}]', 2, 'ABC', 'UTC强调个人IP需要独特风格和持续输出,追逐热点失去自我反而难以建立辨识度。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(3, '关于"航拍后的数据归档",UTC推荐?', '[{"key":"A","val":"按项目分文件夹,每个项目包含原始素材和后期文件"},{"key":"B","val":"同步备份到硬盘和云端"},{"key":"C","val":"重要项目做三重备份"},{"key":"D","val":"存在同一个U盘里就够了"}]', 2, 'ABC', 'UTC数据安全强调多介质多重备份,避免单点故障导致数据丢失。', 1, 2, 1080);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC竞速无人机(穿越机)的"机体类型"通常有?', '[{"key":"A","val":"X型四旋翼(最通用)"},{"key":"B","val":"H型六旋翼"},{"key":"C","val":"三角翼固定翼"},{"key":"D","val":"V型尾翼"}]', 2, 'ABCD', '穿越机主流是X型四旋翼,但H型、三角翼、V型都有特定应用场景。', 1, 2, 1001);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV(第一视角)"系统的组成,包括?', '[{"key":"A","val":"机载摄像头"},{"key":"B","val":"图传发射机(VTX)"},{"key":"C","val":"地面接收眼镜/显示屏"},{"key":"D","val":"GPS定位模块"}]', 2, 'ABC', '穿越机为轻量化经常去掉GPS,FPV核心是摄像头+VTX+地面接收三件套。', 1, 2, 1002);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机的"电机规格"通常用哪几个参数描述?', '[{"key":"A","val":"定子直径(mm)"},{"key":"B","val":"定子高度(mm)"},{"key":"C","val":"KV值(转速常数)"},{"key":"D","val":"重量(克)"}]', 2, 'ABCD', '穿越机电机标准描述:XXXXX 代表定子直径×高度(如2207=22mm×07mm),KV值决定转速,重量影响整体平衡。', 1, 2, 1003);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机比赛的"竞速赛道"通常包含?', '[{"key":"A","val":"Gate门(必须穿过)"},{"key":"B","val":"Flag旗杆(必须绕行)"},{"key":"C","val":"时间检测点"},{"key":"D","val":"高空跳跃平台"}]', 2, 'ABCD', '穿越机赛道经典元素:Gate门是必须穿越的障碍、旗杆需绕行、计时点记录圈速,跳跃增加观赏性。', 1, 2, 1004);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞行模式"中,以下属于常见的有?', '[{"key":"A","val":"Acro(花式翻滚模式)"},{"key":"B","val":"Angle(自稳模式)"},{"key":"C","val":"Horizon(地平线模式)"},{"key":"D","val":"GPS自动返航模式"}]', 2, 'ABC', '穿越机竞赛时几乎不用GPS自动模式,核心是Acro/Angle/Horizon三种手动或半自稳模式。', 1, 2, 1005);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"桨叶选择",以下说法正确的有?', '[{"key":"A","val":"4寸桨比5寸桨更灵活适合室内竞速"},{"key":"B","val":"5寸桨效率更高续航更远"},{"key":"C","val":"三叶桨比两叶桨拉力大但噪音高"},{"key":"D","val":"竞速通常用两叶桨"}]', 2, 'ABCD', '穿越机桨叶选择四要素:尺寸、叶数、效率、场景匹配。竞速多用两叶小桨追求灵活。', 2, 2, 1006);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控固件"中,Betaflight的主要功能有?', '[{"key":"A","val":"PID参数调节"},{"key":"B","val":"黑匣子飞行数据记录"},{"key":"C","val":"混控矩阵配置"},{"key":"D","val":"遥控器遥测"}]', 2, 'ABCD', 'Betaflight是主流穿越机飞控固件,覆盖PID、黑匣子、混控、遥测全套功能。', 1, 2, 1007);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机"花飞(Freestyle)"的特点是?', '[{"key":"A","val":"注重动作流畅和视觉效果"},{"key":"B","val":"经常使用翻滚、螺旋等花式动作"},{"key":"C","val":"竞速速度最快优先"},{"key":"D","val":"常配合慢动作拍摄展示"}]', 2, 'ABD', '花飞重视觉表演,竞速重速度,两者侧重点不同。', 2, 2, 1008);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池选型",以下说法正确的有?', '[{"key":"A","val":"常用1300-1800mAh 3-4S锂电池"},{"key":"B","val":"C倍率需要30C以上以应对高放电"},{"key":"C","val":"容量越大续航越长也越好飞"},{"key":"D","val":"竞速前电池要预热"}]', 2, 'ABD', '穿越机电池需要高放电倍率,容量过大会增加重量反而降低速度和灵活性。', 1, 2, 1009);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"图传频段选择"中,常见的有?', '[{"key":"A","val":"RaceBand(5.8GHz 竞速专用频段)"},{"key":"B","val":"FatShark(标准5.8GHz频段)"},{"key":"C","val":"2.4GHz(低分辨率但穿墙好)"},{"key":"D","val":"毫米波卫星频段"}]', 2, 'ABC', '竞赛常用RaceBand避免干扰,日常可用FatShark频段,2.4GHz适合低清但抗遮挡;毫米波卫星频段不是穿越机图传使用的。', 1, 2, 1010);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电机安装"时应注意?', '[{"key":"A","val":"电机出线方向与机身匹配"},{"key":"B","val":"固定螺丝长度合适"},{"key":"C","val":"电调线焊接牢固"},{"key":"D","val":"螺丝拧得越紧越好"}]', 2, 'ABC', '螺丝过紧可能压坏碳纤维板或螺纹滑牙,ASDC标准是"刚好锁紧不松"。', 1, 2, 1011);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"桨叶动平衡"检查方法有?', '[{"key":"A","val":"装好电机后空转看是否有明显振动"},{"key":"B","val":"用桨叶平衡仪精确检测"},{"key":"C","val":"飞行中感受机身抖动"},{"key":"D","val":"直接目视看不出就行"}]', 2, 'ABC', '穿越机动平衡要求比航拍机严格,空转检查和平衡仪检测都应做,目视看不出不代表没问题。', 2, 2, 1012);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电调选择",以下说法正确的有?', '[{"key":"A","val":"持续电流应至少是电机电流的1.5倍"},{"key":"B","val":"30A以上电调适合穿越竞速"},{"key":"C","val":"电调固件需要与飞控匹配"},{"key":"D","val":"随便选只要能插上去就行"}]', 2, 'ABC', '穿越机电调需要匹配电机功率、飞控协议,不能随便选。', 1, 2, 1013);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC穿越机"螺旋桨推荐品牌"通常有?', '[{"key":"A","val":"HQProp"},{"key":"B","val":"GEMFAN"},{"key":"C","val":"DALProp"},{"key":"D","val":"Apple"}]', 2, 'ABC', 'Apple不生产穿越机桨叶,前三家都是穿越机界公认的好品牌。', 1, 2, 1014);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速风格"与"花飞风格"的差异包括?', '[{"key":"A","val":"竞速机追求极致速度和灵活性"},{"key":"B","val":"花飞机更重一些带保护框"},{"key":"C","val":"竞速机FPV延迟要求更低"},{"key":"D","val":"两者用完全不同的电机和桨叶"}]', 2, 'ABC', '两者电机桨叶规格类似,只是调教风格不同(竞速激进/花飞柔和),不是完全不同。', 2, 2, 1015);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"图传频段拥挤"问题的解决方法有?', '[{"key":"A","val":"使用RaceBand专用竞速频段避免冲突"},{"key":"B","val":"选择干扰少的频道"},{"key":"C","val":"调高发射功率"},{"key":"D","val":"降低发射功率减少干扰他人"}]', 2, 'ABD', '解决图传拥挤三法:专用频段→选干净频道→降低功率;调高功率反而加剧干扰。', 2, 2, 1016);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电池"的保养要点有?', '[{"key":"A","val":"飞行后及时降到3.7-3.8V单节"},{"key":"B","val":"避免硬放电到3.0V以下"},{"key":"C","val":"存储电压3.7-3.9V"},{"key":"D","val":"可以用大电流快充减少等待时间"}]', 2, 'ABC', '穿越机大倍率电池(通常30C+)虽然支持大电流放电,但充电不宜超过C2倍率以免过热损伤。', 2, 2, 1017);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, 'ASDC对"穿越机执照分级"的理解是?', '[{"key":"A","val":"入门级先从5寸室外机练起"},{"key":"B","val":"进阶可以尝试更小的室内机(whoop)"},{"key":"C","val":"竞速需要专门的速度训练"},{"key":"D","val":"直接上6寸暴力机一步到位"}]', 2, 'ABC', '穿越机学习应循序渐进,小机好飞、大机反慢,直接从大机开始难度极高。', 1, 2, 1018);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控调参"中"PID"指的是?', '[{"key":"A","val":"比例(Proportional)"},{"key":"B","val":"积分(Integral)"},{"key":"C","val":"微分(Derivative)"},{"key":"D","val":"功率(Power)"}]', 2, 'ABC', 'PID是三项经典控制参数,P=当前误差、I=累计误差、D=误差变化率,飞控调参的核心。', 1, 2, 1019);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"Betaflight Blackbox(黑匣子)"的作用,以下说法正确的有?', '[{"key":"A","val":"记录飞行数据用于事后分析"},{"key":"B","val":"调参后查看PID响应情况"},{"key":"C","val":"分析炸机原因"},{"key":"D","val":"可以存储穿越机的FPV视频"}]', 2, 'ABC', '黑匣子只记录飞行数据(遥测、PID响应、传感器),不存FPV图传视频。', 2, 2, 1020);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛道Gate门"的标准尺寸通常是?', '[{"key":"A","val":"宽2-3米高2-3米"},{"key":"B","val":"直径1.5米的圆形门"},{"key":"C","val":"高4米以上的拱门"},{"key":"D","val":"只有1米的小门框"}]', 2, 'AB', 'ASDC标准竞速门通常是2-3米正方形或圆形,太大没挑战太小穿不过。', 2, 2, 1021);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"OSD(屏幕叠加显示)"的功能,以下说法正确的有?', '[{"key":"A","val":"在FPV画面上叠加显示电池电压"},{"key":"B","val":"显示飞行速度和高度"},{"key":"C","val":"显示飞行模式和计时器"},{"key":"D","val":"可以显示实时股票行情"}]', 2, 'ABC', 'OSD只能显示穿越机自身的飞行数据,与外部信息(股票等)无关。', 1, 2, 1022);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞动作"中"Split S"的描述是?', '[{"key":"A","val":"一种翻滚俯冲动作"},{"key":"B","val":"飞机倒飞后正过来同时下降"},{"key":"C","val":"360度原地旋转"},{"key":"D","val":"横滚+俯仰的组合"}]', 2, 'AB', 'Split S是经典航机动动作,倒飞进入→翻转正飞→同时俯冲改出,速度快动作酷。', 2, 2, 1023);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"X型四旋翼"的动力布局,以下说法正确的有?', '[{"key":"A","val":"对角电机旋转方向相同"},{"key":"B","val":"相邻电机旋转方向相反"},{"key":"C","val":"四个电机都顺时针转"},{"key":"D","val":"四个电机都逆时针转"}]', 2, 'AB', 'X型布局:对角同方向(形成力偶平衡),相邻反方向,反桨抵消扭矩。', 1, 2, 1024);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"遥控器"的推荐品牌有?', '[{"key":"A","val":"RadioMaster"},{"key":"B","val":"Jumper"},{"key":"C","val":"FrSky"},{"key":"D","val":"大疆DJI"}]', 2, 'ABC', '穿越机用开源协议的遥控器(如FrSky D8协议),大疆遥控器是闭源的不能用在穿越机上。', 2, 2, 1025);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"炸机后"的检查步骤,以下做法正确的有?', '[{"key":"A","val":"先断电再检查避免短路"},{"key":"B","val":"检查桨叶有无裂纹或变形"},{"key":"C","val":"检查电机是否卡死"},{"key":"D","val":"炸机后直接换新机器"}]', 2, 'ABC', '穿越机炸机很正常,先排查再修,不用一炸就换新。', 1, 2, 1026);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"FPV眼镜"的核心参数包括?', '[{"key":"A","val":"分辨率(如DVR 720P/4:3)"},{"key":"B","val":"视场角(FOV 30°-50°)"},{"key":"C","val":"屏幕刷新率"},{"key":"D","val":"重量"}]', 2, 'ABCD', '穿越机FPV眼镜四关键:分辨率→视场角→刷新率→重量,共同决定体验。', 2, 2, 1027);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"室内Whoop机"(小型穿越机)的特点,以下说法正确的有?', '[{"key":"A","val":"机体尺寸小(1.5-2.5寸桨)"},{"key":"B","val":"有保护框适合新手练手"},{"key":"C","val":"抗风能力弱只能室内或无风天"},{"key":"D","val":"飞行速度比大穿越机更快"}]', 2, 'ABC', 'Whoop机小、轻、有保护框,抗风弱,速度反而比5寸穿越机慢很多。', 1, 2, 1028);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"混控矩阵"的作用是?', '[{"key":"A","val":"把飞控的姿态指令分配给各电机"},{"key":"B","val":"根据机型布局(X/H/+)调整控制分配"},{"key":"C","val":"自动选择最优飞行模式"},{"key":"D","val":"平衡不同电机的转速输出"}]', 2, 'ABD', '混控(Mix)是穿越机飞控配置的核心,决定姿态指令如何分配给各电机;不负责模式选择。', 2, 2, 1029);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"竞速用模式(Race Mode)",以下说法正确的有?', '[{"key":"A","val":"关闭GPS等辅助功能以减轻负载"},{"key":"B","val":"PID参数调整为更快响应"},{"key":"C","val":"保持稳定不追求速度"},{"key":"D","val":"可以一键切换"}]', 2, 'ABD', '竞速模式追求极致速度和响应,关闭GPS等辅助、调快PID;C描述的是花飞模式。', 2, 2, 1030);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速过程中电池电量管理"应注意?', '[{"key":"A","val":"起步前电量尽量满"},{"key":"B","val":"关注实时电压变化及时决策"},{"key":"C","val":"预留足够电量返航"},{"key":"D","val":"比赛中途绝不降落换电池"}]', 2, 'ABC', '如果有电池更换环节(某些多轮赛事),中途更换是允许的;正常单轮比赛用满电量。', 2, 2, 1031);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电机KV值"的选择,以下说法正确的有?', '[{"key":"A","val":"KV值越高转速越快"},{"key":"B","val":"竞速机常用2300-2700KV电机"},{"key":"C","val":"KV值越低拉力越大适合大桨"},{"key":"D","val":"KV值与电池电压无关"}]', 2, 'ABC', '穿越机电机KV选择需配合电池电压(3S/4S)和桨叶尺寸,不是完全独立的。', 2, 2, 1032);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞控校准"不包括?', '[{"key":"A","val":"陀螺仪校准"},{"key":"B","val":"加速度计校准"},{"key":"C","val":"遥控器摇杆校准"},{"key":"D","val":"相机白平衡校准"}]', 2, 'D', '飞控校准包括陀螺/加速度计/遥控器摇杆,相机白平衡不属于飞控范畴。', 1, 2, 1033);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"抗风能力",以下说法正确的有?', '[{"key":"A","val":"机身越重抗风越好"},{"key":"B","val":"桨叶越大抗风越好"},{"key":"C","val":"小Whoop机抗风最差"},{"key":"D","val":"风大时只能硬闯没有办法"}]', 2, 'ABC', '抗风靠机身重量+桨叶尺寸,风太大就不应飞,不是"硬闯"的问题。', 1, 2, 1034);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞比赛评分"通常依据?', '[{"key":"A","val":"动作难度系数"},{"key":"B","val":"动作流畅性"},{"key":"C","val":"创意和编排"},{"key":"D","val":"机身颜色好看程度"}]', 2, 'ABC', '花飞评分看动作难度+流畅+创意,和机身颜色无关。', 2, 2, 1035);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV图传延迟"的控制,以下说法正确的有?', '[{"key":"A","val":"模拟图传延迟低(几十ms)"},{"key":"B","val":"数字图传延迟高(可能100ms+)"},{"key":"C","val":"竞速机必须低延迟"},{"key":"D","val":"图传延迟不影响飞行体验"}]', 2, 'ABC', '延迟是穿越机竞速的关键指标,高延迟会导致操控失误撞门,影响极大。', 2, 2, 1036);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"遥控信号丢失"的常见原因有?', '[{"key":"A","val":"飞出信号覆盖范围"},{"key":"B","val":"周围有2.4GHz干扰(如WiFi密集区)"},{"key":"C","val":"遥控器电池过低"},{"key":"D","val":"桨叶破损"}]', 2, 'ABC', '遥控信号丢失是通信问题,桨叶破损是机械问题,两者无关。', 1, 2, 1037);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"保护框(Prop Guard)"的作用,以下说法正确的有?', '[{"key":"A","val":"保护桨叶不易撞坏"},{"key":"B","val":"保护机身避免直接撞障碍物"},{"key":"C","val":"增加飞行重量降低速度"},{"key":"D","val":"竞速时影响速度建议去掉"}]', 2, 'ABCD', '保护框有保护作用但增阻减重,ASDC竞速比赛中通常不加(除非赛道特别复杂)。', 2, 2, 1038);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"常见故障排查顺序"通常是?', '[{"key":"A","val":"先查遥控器和接收信号"},{"key":"B","val":"再查飞控状态和指示灯"},{"key":"C","val":"然后查电机和桨叶"},{"key":"D","val":"最后查电调和焊接"}]', 2, 'ABCD', '穿越机排查四步曲:遥控→飞控→电机桨叶→电调焊接。', 1, 2, 1039);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"花飞技巧"的要点有?', '[{"key":"A","val":"先在模拟器练熟基本动作"},{"key":"B","val":"在开阔草地练习降低炸机损失"},{"key":"C","val":"从低难度动作逐步进阶"},{"key":"D","val":"直接在狭窄复杂环境中练习花飞"}]', 2, 'ABC', '花飞练习应循序渐进,模拟器→开阔地→复杂环境,不能反过来。', 1, 2, 1040);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛事"的常见形式包括?', '[{"key":"A","val":"个人计时赛(谁最快完赛)"},{"key":"B","val":"多人同时发车的PK赛"},{"key":"C","val":"障碍绕标赛"},{"key":"D","val":"静态飞行动作评分赛"}]', 2, 'ABCD', 'ASDC穿越机赛事类型多样:计时、PK、绕标、动作评分类均有。', 2, 2, 1041);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"机身材质",以下说法正确的有?', '[{"key":"A","val":"碳纤维板是主流材料(轻且硬)"},{"key":"B","val":"硬塑用于低端机(便宜但重)"},{"key":"C","val":"G10环氧板性价比高适合新手"},{"key":"D","val":"铝合金最适合竞速"}]', 2, 'ABC', '铝合金过重不适合高速穿越机,主流是碳纤维板和G10环氧板。', 1, 2, 1042);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手常见错误"包括?', '[{"key":"A","val":"解锁电机前忘了校准遥控器"},{"key":"B","val":"摇杆校准不彻底导致操控不稳"},{"key":"C","val":"起飞后紧张猛推摇杆"},{"key":"D","val":"按部就班做起飞前检查"}]', 2, 'ABC', 'D是正确做法不是错误。穿越机新手典型错误就是A/B/C三项。', 1, 2, 1043);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV飞手的身体要求",ASDC提到?', '[{"key":"A","val":"需要良好的空间感和反应速度"},{"key":"B","val":"视力良好无严重色弱"},{"key":"C","val":"可以有眩晕症但要慢慢习惯"},{"key":"D","val":"心理素质好不易紧张"}]', 2, 'ABD', '有眩晕症的人不适合FPV,因为FPV画面容易引起VR晕动症。', 1, 2, 1044);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"赛道障碍物"除了Gate门和旗杆,还有?', '[{"key":"A","val":"旗帜和飘带"},{"key":"B","val":"气球拱门"},{"key":"C","val":"绳索/吊环"},{"key":"D","val":"真飞机残骸"}]', 2, 'ABC', '穿越机赛道的障碍是为了增加挑战的人造元素,不会用真飞机残骸这种危险物。', 1, 2, 1045);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池充电器"的选择,以下说法正确的有?', '[{"key":"A","val":"使用能正确识别电池节数的充电器"},{"key":"B","val":"平衡充比普通充更保护电池"},{"key":"C","val":"充电时总功率不要超过100W避免过载"},{"key":"D","val":"随便用手机充电器也行"}]', 2, 'ABC', '穿越机锂电池(LiPo/LiHV)有特殊的充电要求,手机充电器电压和保护电路都不匹配。', 1, 2, 1046);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速安全注意事项"包括?', '[{"key":"A","val":"比赛区域外设置安全警戒带"},{"key":"B","val":"观众保持足够距离(至少10米)"},{"key":"C","val":"选手佩戴护目镜防止桨叶击中"},{"key":"D","val":"飞手累了可以继续跑完最后一轮"}]', 2, 'ABC', '穿越机桨叶速度极快(15000+ RPM)击中人体非常危险,必须遵守安全规范;D中疲劳驾驶容易失控,不应硬撑。', 2, 2, 1047);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞行时长",以下说法正确的有?', '[{"key":"A","val":"4S 1500mAh电池飞行约3-5分钟(竞速)"},{"key":"B","val":"花飞约5-7分钟"},{"key":"C","val":"电池容量加倍时长也加倍"},{"key":"D","val":"Whoop机续航通常比5寸机长"}]', 2, 'AB', '电池容量加倍带来重量增加,续航不是线性翻倍;Whoop机电池小,续航也比5寸机短。', 2, 2, 1048);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"黑匣子数据分析"可以得出?', '[{"key":"A","val":"某时刻PID参数响应是否合理"},{"key":"B","val":"遥控器输入和飞机姿态输出是否匹配"},{"key":"C","val":"炸机瞬间的飞行状态"},{"key":"D","val":"周围地形高度"}]', 2, 'ABC', '黑匣子记录的是飞行数据,不包含地形信息(除非接了激光雷达等传感器)。', 2, 2, 1049);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"FPV摄像头"的规格,以下说法正确的有?', '[{"key":"A","val":"低照度性能好适合夜间"},{"key":"B","val":"广角镜头视角约120°-150°"},{"key":"C","val":"分辨率通常1080P以上"},{"key":"D","val":"必须是彩色的"}]', 2, 'BC', '穿越机FPV摄像头主打低延迟,通常分辨率不高(720P甚至模拟SD),广角视角;不少竞速用黑白/灰度摄像头(延迟更低)。', 3, 2, 1050);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中的翻滚动作"可以在哪些平面进行?', '[{"key":"A","val":"横滚(左右翻滚)"},{"key":"B","val":"俯仰(前后翻滚)"},{"key":"C","val":"偏航(原地旋转)"},{"key":"D","val":"任意空间组合"}]', 2, 'ABCD', '穿越机六自由度操控,翻滚可以在任何平面进行,花飞追求的就是三维空间自由组合。', 2, 2, 1051);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"桨叶安装"的方向,以下说法正确的有?', '[{"key":"A","val":"桨叶旋转方向由电机决定而非颜色"},{"key":"B","val":"正反桨区分看桨叶上的字母(CW/CCW)"},{"key":"C","val":"装反了桨叶不提供升力反造成阻力"},{"key":"D","val":"可以随便装只要飞起来就行"}]', 2, 'ABC', '穿越机桨叶安装方向非常关键,装反不仅不升力还会让电机堵转烧毁,绝不能随便装。', 1, 2, 1052);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速中的"扫Gate"(蹭门)"通常的处理是?', '[{"key":"A","val":"轻微蹭门不影响继续飞行"},{"key":"B","val":"蹭门严重桨叶损坏必须降落"},{"key":"C","val":"扫门通常会触发飞控故障保护"},{"key":"D","val":"直接放弃比赛"}]', 2, 'AB', '扫门是穿越机竞速中的常见情况,轻微蹭门继续飞,严重桨叶损坏才降落。', 2, 2, 1053);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"2.4GHz"与"5.8GHz"频段的使用,以下说法正确的有?', '[{"key":"A","val":"2.4GHz用于遥控器控制链路"},{"key":"B","val":"5.8GHz用于图传"},{"key":"C","val":"两者频率接近可能互相干扰"},{"key":"D","val":"全部用2.4GHz就不会有干扰"}]', 2, 'ABC', '穿越机通常用2.4GHz控制+5.8GHz图传,两频段相邻可能有互扰;全部用同一频段反而更容易干扰。', 2, 2, 1054);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手炸机后应有的心态"是?', '[{"key":"A","val":"总结经验分析原因"},{"key":"B","val":"不要气妥继续练"},{"key":"C","val":"把愤怒发泄在飞机上砸了"},{"key":"D","val":"检查飞机修复后再飞"}]', 2, 'ABD', '穿越机炸机极其常见,正确心态是总结+修复+继续,绝不能破坏财物。', 1, 2, 1055);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞控参数备份",以下说法正确的有?', '[{"key":"A","val":"每次调完参数都应保存"},{"key":"B","val":"固件升级前必须备份"},{"key":"C","val":"不同机型参数不能通用"},{"key":"D","val":"备份一次就够永远不改"}]', 2, 'ABC', '穿越机飞控参数随机型、电机、桨叶变化,每次调完备份好习惯;参数需要持续微调不是一成不变。', 1, 2, 1056);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞动作命名"中常见的有?', '[{"key":"A","val":"Split S(俯冲翻转)"},{"key":"B","val":"Matty Flip(头朝下加速)"},{"key":"C","val":"Turtle Mode(翻过来继续飞)"},{"key":"D","val":"Matrix(矩阵穿越)"}]', 2, 'ABCD', '穿越机花飞有丰富的动作命名体系,四种都是经典花飞动作或模式。', 2, 2, 1057);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"暴力程度",ASDC的分级是?', '[{"key":"A","val":"Low(温柔花飞)"},{"key":"B","val":"Mid(中等花式)"},{"key":"C","val":"High(激进暴力)"},{"key":"D","val":"Insane(极限失控边缘)"}]', 2, 'ABCD', '穿越机圈通常按激进程度分级,方便同好找到合适的飞行风格。', 2, 2, 1058);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电机热"问题的应对措施有?', '[{"key":"A","val":"检查KV值是否与桨叶匹配"},{"key":"B","val":"更换更大散热片或通风电机座"},{"key":"C","val":"降低PID增益减少电机过载"},{"key":"D","val":"加更多电池增加动力"}]', 2, 'ABC', '电机过热说明负载过大:KV桨叶不匹配/散热差/参数过猛,D增加电池只会让发热更严重。', 2, 2, 1059);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"模拟飞行训练"的价值,以下说法正确的有?', '[{"key":"A","val":"零炸机成本练熟基本动作"},{"key":"B","val":"调完PID后模拟器效果可参考"},{"key":"C","val":"模拟器练好了真机就能直接飞好"},{"key":"D","val":"可以在模拟器里尝试各种极限动作"}]', 2, 'ABD', '模拟器和真机仍有差距(震动、风阻、延迟等),模拟器练熟后真机还需要适应过程。', 1, 2, 1060);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速赛道设计"的要点是?', '[{"key":"A","val":"包含直道(比速度)和弯道(比操控)"},{"key":"B","val":"Gate间距和大小要有变化"},{"key":"C","val":"高度有起伏增加立体感"},{"key":"D","val":"所有Gate放一样高度就行"}]', 2, 'ABC', '好的穿越机赛道需要直弯结合、Gate多样、高度变化,考验飞手综合能力。', 2, 2, 1061);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"Turtle Mode(乌龟模式)"的作用,以下说法正确的有?', '[{"key":"A","val":"翻倒后自动翻正继续飞"},{"key":"B","val":"利用桨叶推力翻转机身"},{"key":"C","val":"需要机身保护框才能实现"},{"key":"D","val":"任何穿越机都有这个功能"}]', 2, 'ABC', 'Turtle Mode需要Betaflight固件支持且机身要有保护框让翻倒后桨叶不触地,不是所有穿越机都有。', 2, 2, 1062);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"飞行中的空间判断"靠的是?', '[{"key":"A","val":"FPV画面的透视效果"},{"key":"B","val":"对自己和赛道的肌肉记忆"},{"key":"C","val":"长期练习形成的直觉"},{"key":"D","val":"飞控自动测距功能"}]', 2, 'ABC', '穿越机没有复杂的测距系统,FPV画面透视+肌肉记忆+直觉是核心,ASDC特别强调"飞行感知"的培养。', 2, 2, 1063);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"竞速比赛中的"犯规",以下说法正确的有?', '[{"key":"A","val":"漏过Gate不穿算犯规"},{"key":"B","val":"严重撞人或干扰他人比赛犯规"},{"key":"C","val":"自己飞自己的怎么高兴怎么来"},{"key":"D","val":"故意炸到别人的飞机算严重犯规"}]', 2, 'ABD', '穿越机竞速有明确规则,不遵守会被罚时甚至取消资格。', 2, 2, 1064);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"3寸机"的典型特征是?', '[{"key":"A","val":"桨叶直径3英寸左右"},{"key":"B","val":"机身尺寸比5寸机小一圈"},{"key":"C","val":"比Whoop机大但比标准5寸机小"},{"key":"D","val":"比Whoop机还小"}]', 2, 'ABC', '穿越机尺寸从小到大:Whoop(1.5-2寸)→Micro(2-3寸)→3寸机→标准5寸机→更大型。', 1, 2, 1065);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"遥控器协议",以下说法正确的有?', '[{"key":"A","val":"FrSky D8是经典的2.4GHz穿越机协议"},{"key":"B","val":"ELRS(ExpressLRS)更新更灵敏"},{"key":"C","val":"Flysky和RadioMaster协议互兼容"},{"key":"D","val":"协议不同不能互通"}]', 2, 'ABD', '穿越机遥控器协议各厂商实现不同,不是都互通;ELRS是近年流行的开源高性能协议。', 2, 2, 1066);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"新手训练循序渐进计划"应该是?', '[{"key":"A","val":"先练模拟器(至少10小时)"},{"key":"B","val":"Whoop机入门(保护框+低速度)"},{"key":"C","val":"小面积草地练悬停和基础动作"},{"key":"D","val":"直接上5寸竞速机"}]', 2, 'ABC', 'ASDC推荐渐进式训练,新手直接上5寸机很容易连续炸机打消兴趣。', 1, 2, 1067);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"电池组并联/串联"的说法正确的有?', '[{"key":"A","val":"串联增加电压(如4S→6S)"},{"key":"B","val":"并联增加容量"},{"key":"C","val":"电池组串并联有安全风险需谨慎"},{"key":"D","val":"随便串并联都不会有问题"}]', 2, 'ABC', '电池串并联有严格的规格匹配要求(相同容量/电压/内阻),不匹配会损坏甚至起火。', 1, 2, 1068);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速的"圈数"通常是?', '[{"key":"A","val":"每轮3-5圈"},{"key":"B","val":"每轮5-8圈"},{"key":"C","val":"每轮10圈以上"},{"key":"D","val":"随便飞多少圈都行"}]', 2, 'AB', '穿越机竞速单轮通常3-8圈,太少没竞争力太多疲劳;具体看赛道长度和比赛规定。', 2, 2, 1069);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"VTX(图传发射机)"的选择,以下说法正确的有?', '[{"key":"A","val":"功率越大图传距离越远(但耗电多)"},{"key":"B","val":"800mW以上功率可能超过法规限制"},{"key":"C","val":"Smart Audio功能可远程切换频道和功率"},{"key":"D","val":"模拟VTX延迟比数字低"}]', 2, 'ABCD', '穿越机VTX四要点:功率/法规限制/Smart Audio/模拟vs数字,四项都正确。', 2, 2, 1070);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中"Matty Flip"动作的描述是?', '[{"key":"A","val":"飞手推全油门同时快速俯仰"},{"key":"B","val":"飞机头朝下垂直俯冲"},{"key":"C","val":"接近地面时拉杆改平"},{"key":"D","val":"需要精确判断高度"}]', 2, 'ABCD', 'Matty Flip(也称Tombstone)是经典花飞动作:全速俯冲→临近地面抬头改平,配合FPV视角极具张力。', 2, 2, 1071);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞控故障自检",在Betaflight配置中可以看到?', '[{"key":"A","val":"电机测试功能"},{"key":"B","val":"接收通道测试"},{"key":"C","val":"传感器实时数据"},{"key":"D","val":"FPV视频画面"}]', 2, 'ABC', 'Betaflight地面站能看电机测试、通道测试、传感器数据,但看不到FPV视频(那是VTX+接收的事)。', 2, 2, 1072);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"电池插头"常用的类型有?', '[{"key":"A","val":"XT60(主流)"},{"key":"B","val":"XT30(小电流小机用)"},{"key":"C","val":"EC2/EC3(Whoop机用)"},{"key":"D","val":"USB-C"}]', 2, 'ABC', '穿越机电池用大电流专用插头(XT60/XT30/EC系列),USB-C电流承载不够。', 1, 2, 1073);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞手的手部肌肉记忆",ASDC认为?', '[{"key":"A","val":"大量飞行后动作变成反射"},{"key":"B","val":"肌肉记忆比大脑思考更快响应"},{"key":"C","val":"需要100小时以上形成稳定记忆"},{"key":"D","val":"靠天赋就能快速形成"}]', 2, 'ABC', '穿越机操控需要大量重复练习形成肌肉记忆,不是天赋能跳过的步骤。', 2, 2, 1074);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"竞速比赛"前的准备工作包括?', '[{"key":"A","val":"提前到场检查赛道状态"},{"key":"B","val":"完成飞控和遥控器校准"},{"key":"C","val":"准备好足够的备用电池"},{"key":"D","val":"热身飞行找到手感"}]', 2, 'ABCD', '穿越机赛前准备四步:赛道检查→设备校准→电池储备→热身。', 2, 2, 1075);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"重量分布对飞行的影响",以下说法正确的有?', '[{"key":"A","val":"电池位置决定重心前后"},{"key":"B","val":"重心偏离会导致姿态不稳"},{"key":"C","val":"竞速机追求接近完美50/50平衡"},{"key":"D","val":"重量越靠前飞得越快"}]', 2, 'ABC', '重心分布影响飞行稳定性,竞速追求精确平衡,不是靠前就快。', 2, 2, 1076);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞中的"地板动作"(Low Bat)"描述是?', '[{"key":"A","val":"在极低高度(几厘米)上贴地飞行"},{"key":"B","val":"需要精确的高度判断和操控"},{"key":"C","val":"利用地面效应获得额外升力"},{"key":"D","val":"对电池电量没有特别要求"}]', 2, 'ABC', 'Low Bat是高难度花飞动作,需要低空精确控高+地面效应;对电量有要求(贴地时间长耗电多)。', 3, 2, 1077);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"天气对竞速的影响",ASDC提到?', '[{"key":"A","val":"大风天飞不起来建议改期"},{"key":"B","val":"小雨可能影响图传VTX但仍可飞"},{"key":"C","val":"雷暴天气绝对禁飞"},{"key":"D","val":"大雾天不影响飞行"}]', 2, 'ABC', '大雾会严重降低能见度+影响GPS,是穿越机竞速的大障碍。', 1, 2, 1078);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '穿越机"花飞在商业活动中的应用"有?', '[{"key":"A","val":"婚礼FPV穿越拍摄"},{"key":"B","val":"极限运动跟拍(如跳伞)"},{"key":"C","val":"创意广告片镜头"},{"key":"D","val":"日常快递配送"}]', 2, 'ABC', '花飞FPV在影视和活动拍摄中广泛应用,快递配送用的是慢得多的常规多旋翼。', 2, 2, 1079);INSERT INTO exam_question (bank_id, content, options, question_type, answer, explanation, difficulty, score, sort_order) VALUES(4, '关于穿越机"飞手执照"的持续发展,ASDC建议?', '[{"key":"A","val":"同时练竞速和花飞两个方向"},{"key":"B","val":"保持定期训练量(每周至少3次)"},{"key":"C","val":"参与社群交流和比赛"},{"key":"D","val":"会飞就够了不用持续学习"}]', 2, 'ABC', '穿越机技术更新很快(飞控固件/电机桨叶/赛道设计都在变),需要持续学习保持状态。', 1, 2, 1080); \ No newline at end of file diff --git a/src/main/resources/db/migration/V16__task_apply_and_wx_message.sql b/src/main/resources/db/migration/V16__task_apply_and_wx_message.sql new file mode 100644 index 0000000..c7de06c --- /dev/null +++ b/src/main/resources/db/migration/V16__task_apply_and_wx_message.sql @@ -0,0 +1,83 @@ +-- ============================================================ +-- V16: 任务申请-审批流 + 微信服务号模板消息 +-- 1) task_record 状态语义升级为"飞手申请 → 商家审批"生命周期,补充审核字段 +-- 2) user 表补充微信开放平台 unionid 与服务号 openid(模板消息接收人) +-- 3) 新增 wx_message_log 模板消息发送日志表(Web 端可查) +-- ============================================================ + +-- ------------------------------------------------------------ +-- 1. task_record:申请记录支持商家审批 +-- ------------------------------------------------------------ +ALTER TABLE task_record ADD COLUMN reject_time TIMESTAMP; +ALTER TABLE task_record ADD COLUMN reject_reason VARCHAR(200); + +COMMENT ON TABLE task_record IS '任务申请记录表(飞手申请接单 → 商家审批 → 执行)'; +COMMENT ON COLUMN task_record.status IS '状态:1已申请(待商家确认) 2商家已同意(已接单) 3商家已拒绝 4飞手已撤销'; +COMMENT ON COLUMN task_record.apply_time IS '飞手申请接单时间'; +COMMENT ON COLUMN task_record.accept_time IS '商家同意时间'; +COMMENT ON COLUMN task_record.reject_time IS '商家拒绝时间'; +COMMENT ON COLUMN task_record.reject_reason IS '商家拒绝原因'; + +-- ------------------------------------------------------------ +-- 2. user:服务号模板消息接收人身份 +-- ------------------------------------------------------------ +ALTER TABLE "user" ADD COLUMN unionid VARCHAR(64); +ALTER TABLE "user" ADD COLUMN mp_openid VARCHAR(64); + +CREATE INDEX idx_user_unionid ON "user" (unionid); +CREATE INDEX idx_user_mp_openid ON "user" (mp_openid); + +COMMENT ON COLUMN "user".unionid IS '微信开放平台 unionid(小程序登录返回时写入,跨端身份关联)'; +COMMENT ON COLUMN "user".mp_openid IS '微信服务号 openid(关注服务号事件自动绑定),NULL 表示未关注服务号'; + +-- ------------------------------------------------------------ +-- 3. wx_message_log:模板消息发送日志(发送结果由微信回调回写) +-- ------------------------------------------------------------ +CREATE TABLE wx_message_log ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT, + biz_type SMALLINT NOT NULL, + biz_id BIGINT, + template_id VARCHAR(64) NOT NULL, + open_id VARCHAR(64), + msg_id BIGINT, + send_status SMALLINT NOT NULL, + skip_reason VARCHAR(200), + err_code VARCHAR(32), + err_msg VARCHAR(500), + result_status VARCHAR(64), + content TEXT, + send_time TIMESTAMP, + result_time TIMESTAMP, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); + +CREATE INDEX idx_wx_message_log_user ON wx_message_log (user_id); +CREATE INDEX idx_wx_message_log_msg_id ON wx_message_log (msg_id); +CREATE INDEX idx_wx_message_log_status ON wx_message_log (send_status); +CREATE INDEX idx_wx_message_log_deleted ON wx_message_log (deleted_at); + +COMMENT ON TABLE wx_message_log IS '微信模板消息发送日志表'; +COMMENT ON COLUMN wx_message_log.id IS '主键'; +COMMENT ON COLUMN wx_message_log.user_id IS '接收人用户ID(商家)'; +COMMENT ON COLUMN wx_message_log.biz_type IS '业务类型:1任务申请通知'; +COMMENT ON COLUMN wx_message_log.biz_id IS '业务单据ID(任务申请通知为 task_record.id)'; +COMMENT ON COLUMN wx_message_log.template_id IS '微信模板ID'; +COMMENT ON COLUMN wx_message_log.open_id IS '接收人服务号 openid'; +COMMENT ON COLUMN wx_message_log.msg_id IS '微信返回的消息ID(发送提交成功后返回,回调送达结果以此关联)'; +COMMENT ON COLUMN wx_message_log.send_status IS '发送状态:0已跳过 1已提交 2送达成功 3送达失败'; +COMMENT ON COLUMN wx_message_log.skip_reason IS '跳过原因(未绑定服务号等)'; +COMMENT ON COLUMN wx_message_log.err_code IS '提交/送达错误码'; +COMMENT ON COLUMN wx_message_log.err_msg IS '提交/送达错误信息'; +COMMENT ON COLUMN wx_message_log.result_status IS '微信回调送达结果原文(success / failed:user block 等)'; +COMMENT ON COLUMN wx_message_log.content IS '模板参数 JSON 快照,便于排查展示问题'; +COMMENT ON COLUMN wx_message_log.send_time IS '提交微信发送时间'; +COMMENT ON COLUMN wx_message_log.result_time IS '微信回调送达时间'; +COMMENT ON COLUMN wx_message_log.created_at IS '创建时间'; +COMMENT ON COLUMN wx_message_log.updated_at IS '更新时间'; +COMMENT ON COLUMN wx_message_log.deleted_at IS '软删除时间'; + +CREATE TRIGGER trg_wx_message_log_updated BEFORE UPDATE ON wx_message_log + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); diff --git a/src/main/resources/db/migration/V17__wx_notify_task.sql b/src/main/resources/db/migration/V17__wx_notify_task.sql new file mode 100644 index 0000000..7feb703 --- /dev/null +++ b/src/main/resources/db/migration/V17__wx_notify_task.sql @@ -0,0 +1,70 @@ +-- ============================================================ +-- V17: 模板消息队列持久化(DB 队列替代内存队列) +-- 1) 新建 wx_notify_task 任务表(PENDING → PROCESSING → SUCCESS/FAILED,消费后软删除) +-- 2) wx_message_log 增加 task_id 列,关联发送任务 +-- ============================================================ + +-- ------------------------------------------------------------ +-- 1. wx_notify_task:模板消息发送任务表(DB 持久化队列) +-- 替代原 LinkedBlockingQueue 内存队列,解决服务重启未消费任务丢失问题。 +-- 消费机制:CAS 占位(status 0→1),成功后发送,完成时软删除。 +-- 失败重试:retry_count + next_retry_at 指数退避,超过上限置 FAILED 并软删除。 +-- ------------------------------------------------------------ +CREATE TABLE wx_notify_task ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + biz_type SMALLINT NOT NULL, + biz_id BIGINT, + task_no VARCHAR(64), + task_name VARCHAR(128), + service_type_name VARCHAR(64), + handler VARCHAR(128), + operate_time VARCHAR(32), + template_id VARCHAR(64), + status SMALLINT NOT NULL DEFAULT 0, + retry_count SMALLINT NOT NULL DEFAULT 0, + next_retry_at TIMESTAMP, + skip_reason VARCHAR(200), + err_code VARCHAR(32), + err_msg VARCHAR(500), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); + +-- 部分索引:仅索引未软删除且待处理行,消费查询高效 +CREATE INDEX idx_wx_notify_task_pending ON wx_notify_task (status, next_retry_at) + WHERE deleted_at IS NULL AND status = 0; +CREATE INDEX idx_wx_notify_task_user ON wx_notify_task (user_id); +CREATE INDEX idx_wx_notify_task_biz ON wx_notify_task (biz_type, biz_id); + +COMMENT ON TABLE wx_notify_task IS '微信模板消息发送任务表(DB 持久化队列,消费完成后软删除)'; +COMMENT ON COLUMN wx_notify_task.id IS '主键'; +COMMENT ON COLUMN wx_notify_task.user_id IS '接收人用户ID'; +COMMENT ON COLUMN wx_notify_task.biz_type IS '业务类型:1任务申请 2审核结果 3飞手撤销(同 wx_message_log.biz_type)'; +COMMENT ON COLUMN wx_notify_task.biz_id IS '业务单据ID(任务动态通知为 task_record.id)'; +COMMENT ON COLUMN wx_notify_task.task_no IS '任务编号(模板 character_string14)'; +COMMENT ON COLUMN wx_notify_task.task_name IS '任务名称(模板 thing5)'; +COMMENT ON COLUMN wx_notify_task.service_type_name IS '服务类型名称(模板 thing12)'; +COMMENT ON COLUMN wx_notify_task.handler IS '处理人文案(模板 thing17)'; +COMMENT ON COLUMN wx_notify_task.operate_time IS '操作时间 yyyy-MM-dd HH:mm(模板 time18)'; +COMMENT ON COLUMN wx_notify_task.template_id IS '使用的模板ID(消费时解析写入,PENDING 阶段为 NULL)'; +COMMENT ON COLUMN wx_notify_task.status IS '任务状态:0待处理 1处理中 2成功 3失败'; +COMMENT ON COLUMN wx_notify_task.retry_count IS '已重试次数(0=首次,超过上限置 FAILED)'; +COMMENT ON COLUMN wx_notify_task.next_retry_at IS '下次重试时间(NULL=立即可处理)'; +COMMENT ON COLUMN wx_notify_task.skip_reason IS '跳过原因(未关注服务号等,不实际发送)'; +COMMENT ON COLUMN wx_notify_task.err_code IS '最后一次失败的错误码'; +COMMENT ON COLUMN wx_notify_task.err_msg IS '最后一次失败的错误信息'; +COMMENT ON COLUMN wx_notify_task.created_at IS '创建时间(入队时间)'; +COMMENT ON COLUMN wx_notify_task.updated_at IS '更新时间'; +COMMENT ON COLUMN wx_notify_task.deleted_at IS '软删除时间(消费完成后置位)'; + +CREATE TRIGGER trg_wx_notify_task_updated BEFORE UPDATE ON wx_notify_task + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ------------------------------------------------------------ +-- 2. wx_message_log 增加 task_id 列(关联发送任务,从日志反查任务) +-- ------------------------------------------------------------ +ALTER TABLE wx_message_log ADD COLUMN task_id BIGINT; + +COMMENT ON COLUMN wx_message_log.task_id IS '关联的发送任务ID(wx_notify_task.id),从日志反查任务'; diff --git a/src/main/resources/db/migration/V18__course_featured.sql b/src/main/resources/db/migration/V18__course_featured.sql new file mode 100644 index 0000000..4b4666c --- /dev/null +++ b/src/main/resources/db/migration/V18__course_featured.sql @@ -0,0 +1,9 @@ +-- 研学课程表新增精选开关:开启后在小程序首页"精选研学课程"区块展示 +-- 默认全部课程为非精选,管理员在 Web 管理端手动标记 +ALTER TABLE course + ADD COLUMN featured SMALLINT NOT NULL DEFAULT 0; + +COMMENT ON COLUMN course.featured IS '精选标记:0否 1是,开启后小程序首页精选课程列表展示'; + +-- 为精选标记建立索引,加速首页查询 WHERE featured = 1 +CREATE INDEX idx_course_featured ON course(featured); diff --git a/src/main/resources/db/migration/V19__appointment_status_two_states.sql b/src/main/resources/db/migration/V19__appointment_status_two_states.sql new file mode 100644 index 0000000..bf791f1 --- /dev/null +++ b/src/main/resources/db/migration/V19__appointment_status_two_states.sql @@ -0,0 +1,28 @@ +-- ===================================================================== +-- V19: course_appointment 预约状态二态化 + 部分唯一索引重建 +-- ------------------------------------------------------------ +-- 背景: +-- 原 V1 设计了四态模型(1已预约/2已确认/3已完成/4已取消),产品侧 +-- 简化为二态:1已预约(用户提交即生效,无需商家确认)/ 2已取消 +-- (终态)。不再存在"商家确认"和"已完成"的中间状态。 +-- +-- 旧数据迁移策略: +-- status=2(原已确认)→ 置为 1(已预约),因为不再需要商家确认 +-- status=3(原已完成)→ 置为 2(已取消),视作历史终态 +-- status=1/4 → 不变 +-- +-- 同时重建部分唯一索引:取消状态值从 4 变更为 2,索引条件同步更新。 +-- ===================================================================== + +-- 1. 旧数据回填:把原四态折叠为二态 +UPDATE course_appointment SET status = 1 WHERE status = 2; -- 已确认 → 已预约 +UPDATE course_appointment SET status = 2 WHERE status = 3; -- 已完成 → 已取消(历史终态) +UPDATE course_appointment SET status = 2 WHERE status = 4; -- 原已取消(4) → 新已取消(2) + +-- 2. 删除旧的部分唯一索引(V11 创建的,条件 WHERE status != 4) +DROP INDEX IF EXISTS uk_course_appointment_active; + +-- 3. 按新二态条件重建:有效预约 = status=1(已预约)且未软删 +CREATE UNIQUE INDEX uk_course_appointment_active + ON course_appointment (user_id, course_id, appointment_date) + WHERE status != 2 AND deleted_at IS NULL; diff --git a/src/main/resources/db/migration/V1__init.sql b/src/main/resources/db/migration/V1__init.sql new file mode 100644 index 0000000..e4f8f56 --- /dev/null +++ b/src/main/resources/db/migration/V1__init.sql @@ -0,0 +1,552 @@ +-- ============================================================ +-- 翼云Hub · 数据库初始化脚本 +-- 目标数据库: PostgreSQL 14(开发) / PostgreSQL 16(生产) +-- 字符集: UTF8 (PG 默认) +-- 命名规范: 表名/字段名一律下划线小写,主键统一为 id +-- 软删除: deleted_at,时间戳由 NULL 标记未删除 +-- 时间维护: created_at 由 DEFAULT 维护,updated_at 由触发器维护 +-- 多选字段: 以 String 存储,多值之间用英文分号 ; 拼接(如 "1;2;3") +-- 经纬度字段: 统一用 VARCHAR(20) 存储,避免浮点精度问题 +-- 类型字段: 统一用 SMALLINT 存储数字编码(Java 侧映射为 Integer) +-- ============================================================ + +-- ------------------------------------------------------------ +-- 公共触发器函数:自动维护 updated_at 字段 +-- 任何 UPDATE 命中该函数挂的表,updated_at 都会刷新为当前时间 +-- ------------------------------------------------------------ +CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS +$$ +BEGIN + NEW.updated_at = CURRENT_TIMESTAMP; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +-- ============================================================ +-- 1. 公告表 announcement +-- ============================================================ +CREATE TABLE announcement ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + title VARCHAR(100) NOT NULL, + content TEXT, + valid_start_time TIMESTAMP, + valid_end_time TIMESTAMP, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_announcement_status ON announcement (status); +CREATE INDEX idx_announcement_valid_period ON announcement (valid_start_time, valid_end_time); +CREATE INDEX idx_announcement_deleted ON announcement (deleted_at); +COMMENT ON TABLE announcement IS '公告表'; +COMMENT ON COLUMN announcement.id IS '主键'; +COMMENT ON COLUMN announcement.title IS '公告标题'; +COMMENT ON COLUMN announcement.content IS '公告正文'; +COMMENT ON COLUMN announcement.valid_start_time IS '生效开始时间'; +COMMENT ON COLUMN announcement.valid_end_time IS '生效结束时间'; +COMMENT ON COLUMN announcement.status IS '状态:0隐藏 1显示'; +COMMENT ON COLUMN announcement.created_at IS '创建时间'; +COMMENT ON COLUMN announcement.updated_at IS '更新时间'; +COMMENT ON COLUMN announcement.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_announcement_updated BEFORE UPDATE ON announcement + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 2. 用户表 "user"(user 在 PG 为保留字,需用双引号引用) +-- ============================================================ +CREATE TABLE "user" ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + openid VARCHAR(64) NOT NULL, + nickname VARCHAR(50), + avatar_url VARCHAR(500), + phone VARCHAR(20), + gender SMALLINT NOT NULL DEFAULT 0, + bio VARCHAR(200), + role_type SMALLINT NOT NULL DEFAULT 1, + points INT NOT NULL DEFAULT 0, + is_pilot_bound SMALLINT NOT NULL DEFAULT 0, + is_merchant_bound SMALLINT NOT NULL DEFAULT 0, + pilot_id BIGINT, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + last_login_at TIMESTAMP, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_user_openid ON "user" (openid); +CREATE INDEX idx_user_phone ON "user" (phone); +CREATE INDEX idx_user_deleted ON "user" (deleted_at); +COMMENT ON TABLE "user" IS '用户表'; +COMMENT ON COLUMN "user".id IS '主键'; +COMMENT ON COLUMN "user".openid IS '微信openId'; +COMMENT ON COLUMN "user".nickname IS '用户昵称'; +COMMENT ON COLUMN "user".avatar_url IS '头像URL'; +COMMENT ON COLUMN "user".phone IS '手机号'; +COMMENT ON COLUMN "user".gender IS '性别:0未知 1男 2女'; +COMMENT ON COLUMN "user".bio IS '个人简介'; +COMMENT ON COLUMN "user".role_type IS '角色类型:1普通用户 2飞手 3商家 4机构'; +COMMENT ON COLUMN "user".points IS '积分余额'; +COMMENT ON COLUMN "user".is_pilot_bound IS '是否已绑定飞手身份:0否 1是'; +COMMENT ON COLUMN "user".is_merchant_bound IS '是否已绑定商家身份:0否 1是'; +COMMENT ON COLUMN "user".pilot_id IS '关联飞手ID'; +COMMENT ON COLUMN "user".merchant_id IS '关联商家ID'; +COMMENT ON COLUMN "user".status IS '账号状态:0禁用 1正常'; +COMMENT ON COLUMN "user".last_login_at IS '最后登录时间'; +COMMENT ON COLUMN "user".created_at IS '注册时间'; +COMMENT ON COLUMN "user".updated_at IS '更新时间'; +COMMENT ON COLUMN "user".deleted_at IS '软删除时间'; +CREATE TRIGGER trg_user_updated BEFORE UPDATE ON "user" + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 3. 商家表 merchant +-- ============================================================ +CREATE TABLE merchant ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + name VARCHAR(100) NOT NULL, + address VARCHAR(200), + door_image BIGINT, + license_file_id BIGINT, + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + latitude VARCHAR(20), + longitude VARCHAR(20), + service_types VARCHAR(200), + description TEXT, + cert_status SMALLINT NOT NULL DEFAULT 0, + cert_time TIMESTAMP, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_merchant_user ON merchant (user_id); +CREATE INDEX idx_merchant_cert ON merchant (cert_status); +CREATE INDEX idx_merchant_deleted ON merchant (deleted_at); +COMMENT ON TABLE merchant IS '商家表'; +COMMENT ON COLUMN merchant.id IS '主键'; +COMMENT ON COLUMN merchant.user_id IS '关联用户ID'; +COMMENT ON COLUMN merchant.name IS '商家名称'; +COMMENT ON COLUMN merchant.address IS '商家地址'; +COMMENT ON COLUMN merchant.door_image IS '门头照片file_id'; +COMMENT ON COLUMN merchant.license_file_id IS '营业执照file_id'; +COMMENT ON COLUMN merchant.contact_name IS '联系人'; +COMMENT ON COLUMN merchant.contact_phone IS '联系电话'; +COMMENT ON COLUMN merchant.latitude IS '纬度(字符串存储)'; +COMMENT ON COLUMN merchant.longitude IS '经度(字符串存储)'; +COMMENT ON COLUMN merchant.service_types IS '服务类型编码,多选用分号拼接,如:1;2;3'; +COMMENT ON COLUMN merchant.description IS '商家简介'; +COMMENT ON COLUMN merchant.cert_status IS '认证状态:0未认证 1认证中 2已认证 3认证失败'; +COMMENT ON COLUMN merchant.cert_time IS '认证时间'; +COMMENT ON COLUMN merchant.created_at IS '创建时间'; +COMMENT ON COLUMN merchant.updated_at IS '更新时间'; +COMMENT ON COLUMN merchant.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_merchant_updated BEFORE UPDATE ON merchant + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 4. 飞手表 pilot +-- ============================================================ +CREATE TABLE pilot ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + name VARCHAR(50) NOT NULL, + phone VARCHAR(20) NOT NULL, + birthday DATE, + age SMALLINT, + avatar_file_id BIGINT, + cert_status SMALLINT NOT NULL DEFAULT 0, + cert_time TIMESTAMP, + service_city_codes VARCHAR(500), + bio VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_pilot_user ON pilot (user_id); +CREATE INDEX idx_pilot_cert ON pilot (cert_status); +CREATE INDEX idx_pilot_deleted ON pilot (deleted_at); +COMMENT ON TABLE pilot IS '飞手表'; +COMMENT ON COLUMN pilot.id IS '主键'; +COMMENT ON COLUMN pilot.user_id IS '关联用户ID'; +COMMENT ON COLUMN pilot.name IS '姓名(实名)'; +COMMENT ON COLUMN pilot.phone IS '手机号'; +COMMENT ON COLUMN pilot.birthday IS '出生年月'; +COMMENT ON COLUMN pilot.age IS '年龄(自动计算)'; +COMMENT ON COLUMN pilot.avatar_file_id IS '头像file_id'; +COMMENT ON COLUMN pilot.cert_status IS '认证状态:0未认证 1认证中 2已认证 3认证失败'; +COMMENT ON COLUMN pilot.cert_time IS '认证时间'; +COMMENT ON COLUMN pilot.service_city_codes IS '服务城市编码,多选用分号拼接,关联region.code'; +COMMENT ON COLUMN pilot.bio IS '个人简介'; +COMMENT ON COLUMN pilot.created_at IS '创建时间'; +COMMENT ON COLUMN pilot.updated_at IS '更新时间'; +COMMENT ON COLUMN pilot.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_pilot_updated BEFORE UPDATE ON pilot + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 4.1 飞手执照表 pilot_license(独立一对多表,替代 pilot 上的分号拼接字段) +-- ============================================================ +CREATE TABLE pilot_license ( + id BIGSERIAL PRIMARY KEY, + pilot_id BIGINT NOT NULL REFERENCES pilot(id), + license_type SMALLINT NOT NULL CHECK (license_type IN (1, 2, 3, 4)), + license_no VARCHAR(50), + license_file_id BIGINT, + license_date VARCHAR(10), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_pilot_license_pilot ON pilot_license(pilot_id); +COMMENT ON TABLE pilot_license IS '飞手执照表(多本执照一对多)'; +COMMENT ON COLUMN pilot_license.pilot_id IS '关联飞手ID(pilot.id)'; +COMMENT ON COLUMN pilot_license.license_type IS '执照类型编码:1 AOPA 2 UTC 3 ASFC 4 CAAC'; +COMMENT ON COLUMN pilot_license.license_no IS '执照编号'; +COMMENT ON COLUMN pilot_license.license_file_id IS '执照照片file_id(sys_file.id)'; +COMMENT ON COLUMN pilot_license.license_date IS '获证日期,格式 yyyy-MM-dd'; +COMMENT ON COLUMN pilot_license.created_at IS '创建时间'; +COMMENT ON COLUMN pilot_license.updated_at IS '更新时间'; +COMMENT ON COLUMN pilot_license.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_pilot_license_updated BEFORE UPDATE ON pilot_license + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 5. 任务表 task +-- ============================================================ +CREATE TABLE task ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + task_no VARCHAR(32) NOT NULL, + name VARCHAR(100) NOT NULL, + type SMALLINT NOT NULL, + province VARCHAR(20), + city VARCHAR(20), + district VARCHAR(20), + address VARCHAR(200), + latitude VARCHAR(20), + longitude VARCHAR(20), + scene_images VARCHAR(500), + required_count INT NOT NULL DEFAULT 1, + task_start_time TIMESTAMP NOT NULL, + task_end_time TIMESTAMP, + reward NUMERIC(10, 2) NOT NULL, + insurance_require VARCHAR(100), + contact_name VARCHAR(50), + contact_phone VARCHAR(20) NOT NULL, + remark TEXT, + status SMALLINT NOT NULL DEFAULT 0, + is_premium SMALLINT NOT NULL DEFAULT 0, + premium_cost INT NOT NULL DEFAULT 0, + publisher_id BIGINT NOT NULL, + accepted_pilot_id BIGINT, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_task_task_no ON task (task_no); +CREATE INDEX idx_task_type_status ON task (type, status); +CREATE INDEX idx_task_city_status ON task (city, status); +CREATE INDEX idx_task_publisher ON task (publisher_id); +CREATE INDEX idx_task_pilot ON task (accepted_pilot_id); +CREATE INDEX idx_task_deleted ON task (deleted_at); +COMMENT ON TABLE task IS '任务表'; +COMMENT ON COLUMN task.id IS '主键'; +COMMENT ON COLUMN task.task_no IS '任务编号(全局唯一)'; +COMMENT ON COLUMN task.name IS '任务名称'; +COMMENT ON COLUMN task.type IS '任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘'; +COMMENT ON COLUMN task.province IS '省份'; +COMMENT ON COLUMN task.city IS '城市'; +COMMENT ON COLUMN task.district IS '区县'; +COMMENT ON COLUMN task.address IS '详细地址'; +COMMENT ON COLUMN task.latitude IS '纬度坐标(字符串存储)'; +COMMENT ON COLUMN task.longitude IS '经度坐标(字符串存储)'; +COMMENT ON COLUMN task.scene_images IS '作业场景图file_id数组,多选用分号拼接'; +COMMENT ON COLUMN task.required_count IS '需求人数'; +COMMENT ON COLUMN task.task_start_time IS '任务开始时间'; +COMMENT ON COLUMN task.task_end_time IS '任务结束时间'; +COMMENT ON COLUMN task.reward IS '报酬(元)'; +COMMENT ON COLUMN task.insurance_require IS '保险要求编码,多选用分号拼接:1三者险 2飞手险 3机身险'; +COMMENT ON COLUMN task.contact_name IS '联系人姓名'; +COMMENT ON COLUMN task.contact_phone IS '联系电话'; +COMMENT ON COLUMN task.remark IS '备注'; +COMMENT ON COLUMN task.status IS '状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消'; +COMMENT ON COLUMN task.is_premium IS '是否优质任务:0否 1是'; +COMMENT ON COLUMN task.premium_cost IS '优质任务积分消耗'; +COMMENT ON COLUMN task.publisher_id IS '发布人ID'; +COMMENT ON COLUMN task.accepted_pilot_id IS '接单飞手ID'; +COMMENT ON COLUMN task.created_at IS '创建时间'; +COMMENT ON COLUMN task.updated_at IS '更新时间'; +COMMENT ON COLUMN task.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_task_updated BEFORE UPDATE ON task + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 6. 任务执行记录表 task_record +-- ============================================================ +CREATE TABLE task_record ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + task_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, + pilot_id BIGINT, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + apply_time TIMESTAMP, + accept_time TIMESTAMP, + record_start_time TIMESTAMP, + record_end_time TIMESTAMP, + cancel_time TIMESTAMP, + cancel_reason VARCHAR(200), + insurance_verified SMALLINT NOT NULL DEFAULT 0, + actual_reward NUMERIC(10, 2), + rating SMALLINT, + rating_comment VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_task_record_task_user ON task_record (task_id, user_id); +CREATE INDEX idx_task_record_user ON task_record (user_id, status); +CREATE INDEX idx_task_record_pilot ON task_record (pilot_id, status); +CREATE INDEX idx_task_record_deleted ON task_record (deleted_at); +COMMENT ON TABLE task_record IS '任务执行记录表'; +COMMENT ON COLUMN task_record.id IS '主键'; +COMMENT ON COLUMN task_record.task_id IS '任务ID'; +COMMENT ON COLUMN task_record.user_id IS '关联用户ID'; +COMMENT ON COLUMN task_record.pilot_id IS '接单飞手ID'; +COMMENT ON COLUMN task_record.merchant_id IS '发单商家ID'; +COMMENT ON COLUMN task_record.status IS '状态:1待接单 2已接单 3执行中 4已完成 5已取消'; +COMMENT ON COLUMN task_record.apply_time IS '申请/接单时间'; +COMMENT ON COLUMN task_record.accept_time IS '飞手接单时间'; +COMMENT ON COLUMN task_record.record_start_time IS '实际开始时间'; +COMMENT ON COLUMN task_record.record_end_time IS '实际结束时间(完成时间)'; +COMMENT ON COLUMN task_record.cancel_time IS '取消时间'; +COMMENT ON COLUMN task_record.cancel_reason IS '取消原因'; +COMMENT ON COLUMN task_record.insurance_verified IS '保险是否校验:0否 1是'; +COMMENT ON COLUMN task_record.actual_reward IS '实际报酬'; +COMMENT ON COLUMN task_record.rating IS '用户评分(1-5)'; +COMMENT ON COLUMN task_record.rating_comment IS '评价内容'; +COMMENT ON COLUMN task_record.created_at IS '创建时间'; +COMMENT ON COLUMN task_record.updated_at IS '更新时间'; +COMMENT ON COLUMN task_record.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_task_record_updated BEFORE UPDATE ON task_record + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 7. 文件表 sys_file(避开 Java 与 PG 的保留字 file 冲突) +-- 文件表只增不改、不更新,因此无 updated_at 字段 +-- ============================================================ +CREATE TABLE sys_file ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + file_name VARCHAR(200) NOT NULL, + file_suffix VARCHAR(10), + file_url VARCHAR(500), + file_size BIGINT, + file_type SMALLINT, + uploader_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_sys_file_type ON sys_file (file_type); +CREATE INDEX idx_sys_file_uploader ON sys_file (uploader_id); +CREATE INDEX idx_sys_file_deleted ON sys_file (deleted_at); +COMMENT ON TABLE sys_file IS '文件表'; +COMMENT ON COLUMN sys_file.id IS '主键'; +COMMENT ON COLUMN sys_file.file_name IS '原始文件名'; +COMMENT ON COLUMN sys_file.file_suffix IS '文件后缀'; +COMMENT ON COLUMN sys_file.file_url IS '访问URL'; +COMMENT ON COLUMN sys_file.file_size IS '文件大小(字节)'; +COMMENT ON COLUMN sys_file.file_type IS '业务类型编码:1营业执照 2飞手执照 3作业场景图 4课程图片 5头像 9其他'; +COMMENT ON COLUMN sys_file.uploader_id IS '上传用户ID'; +COMMENT ON COLUMN sys_file.status IS '状态:0禁用 1正常'; +COMMENT ON COLUMN sys_file.created_at IS '上传时间'; +COMMENT ON COLUMN sys_file.deleted_at IS '软删除时间'; + +-- ============================================================ +-- 8. 题库表 exam_bank +-- ============================================================ +CREATE TABLE exam_bank ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + cover_image BIGINT, + description TEXT, + question_count INT NOT NULL DEFAULT 0, + difficulty SMALLINT NOT NULL DEFAULT 1, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_exam_bank_deleted ON exam_bank (deleted_at); +COMMENT ON TABLE exam_bank IS '题库表'; +COMMENT ON COLUMN exam_bank.id IS '主键'; +COMMENT ON COLUMN exam_bank.name IS '题库名称'; +COMMENT ON COLUMN exam_bank.cover_image IS '封面图file_id'; +COMMENT ON COLUMN exam_bank.description IS '题库描述'; +COMMENT ON COLUMN exam_bank.question_count IS '题目数量'; +COMMENT ON COLUMN exam_bank.difficulty IS '难度:1简单 2中等 3困难'; +COMMENT ON COLUMN exam_bank.status IS '状态:0禁用 1启用'; +COMMENT ON COLUMN exam_bank.created_at IS '创建时间'; +COMMENT ON COLUMN exam_bank.updated_at IS '更新时间'; +COMMENT ON COLUMN exam_bank.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_exam_bank_updated BEFORE UPDATE ON exam_bank + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 9. 习题表 exam_question +-- ============================================================ +CREATE TABLE exam_question ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + bank_id BIGINT NOT NULL, + content TEXT NOT NULL, + options JSONB, + question_type SMALLINT NOT NULL, + answer VARCHAR(10) NOT NULL, + explanation TEXT, + difficulty SMALLINT NOT NULL DEFAULT 1, + score SMALLINT NOT NULL DEFAULT 5, + sort_order INT NOT NULL DEFAULT 0, + used_count INT NOT NULL DEFAULT 0, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_exam_question_bank ON exam_question (bank_id); +CREATE INDEX idx_exam_question_type ON exam_question (question_type); +CREATE INDEX idx_exam_question_deleted ON exam_question (deleted_at); +COMMENT ON TABLE exam_question IS '习题表'; +COMMENT ON COLUMN exam_question.id IS '主键'; +COMMENT ON COLUMN exam_question.bank_id IS '所属题库ID'; +COMMENT ON COLUMN exam_question.content IS '题目内容'; +COMMENT ON COLUMN exam_question.options IS '选项数组([{"key":"A","val":"..."},...])'; +COMMENT ON COLUMN exam_question.question_type IS '题型:1单选 2多选 3判断'; +COMMENT ON COLUMN exam_question.answer IS '标准答案(如:A 或 AB)'; +COMMENT ON COLUMN exam_question.explanation IS '答案解析'; +COMMENT ON COLUMN exam_question.difficulty IS '难度:1简单 2中等 3困难'; +COMMENT ON COLUMN exam_question.score IS '分值'; +COMMENT ON COLUMN exam_question.sort_order IS '排序'; +COMMENT ON COLUMN exam_question.used_count IS '被使用次数'; +COMMENT ON COLUMN exam_question.created_at IS '创建时间'; +COMMENT ON COLUMN exam_question.updated_at IS '更新时间'; +COMMENT ON COLUMN exam_question.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_exam_question_updated BEFORE UPDATE ON exam_question + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 10. 课程表 course +-- ============================================================ +CREATE TABLE course ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + tags VARCHAR(200), + category SMALLINT, + target_age VARCHAR(200), + location VARCHAR(200), + latitude VARCHAR(20), + longitude VARCHAR(20), + description TEXT, + images VARCHAR(500), + price NUMERIC(10, 2) NOT NULL, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_course_category ON course (category); +CREATE INDEX idx_course_status ON course (status); +CREATE INDEX idx_course_merchant ON course (merchant_id); +CREATE INDEX idx_course_deleted ON course (deleted_at); +COMMENT ON TABLE course IS '课程表'; +COMMENT ON COLUMN course.id IS '主键'; +COMMENT ON COLUMN course.name IS '课程名称'; +COMMENT ON COLUMN course.tags IS '标签编码,多选用分号拼接'; +COMMENT ON COLUMN course.category IS '分类编码:1认知启蒙 2技能进阶 3创新应用 4竞赛辅导'; +COMMENT ON COLUMN course.target_age IS '适合年龄描述'; +COMMENT ON COLUMN course.location IS '上课地点'; +COMMENT ON COLUMN course.latitude IS '纬度(字符串存储)'; +COMMENT ON COLUMN course.longitude IS '经度(字符串存储)'; +COMMENT ON COLUMN course.description IS '课程描述'; +COMMENT ON COLUMN course.images IS '课程图片file_id数组,多选用分号拼接'; +COMMENT ON COLUMN course.price IS '课程价格'; +COMMENT ON COLUMN course.merchant_id IS '所属商家ID'; +COMMENT ON COLUMN course.status IS '状态:0下架 1上架 2已满员'; +COMMENT ON COLUMN course.created_at IS '创建时间'; +COMMENT ON COLUMN course.updated_at IS '更新时间'; +COMMENT ON COLUMN course.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_course_updated BEFORE UPDATE ON course + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 11. 课程预约表 course_appointment +-- ============================================================ +CREATE TABLE course_appointment ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + course_id BIGINT NOT NULL, + merchant_id BIGINT, + appointment_date TIMESTAMP NOT NULL, + person_count INT NOT NULL DEFAULT 1, + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + remark VARCHAR(200), + status SMALLINT NOT NULL DEFAULT 1, + amount NUMERIC(10, 2) NOT NULL DEFAULT 0.00, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_course_appointment_user_course_date ON course_appointment (user_id, course_id, appointment_date); +CREATE INDEX idx_course_appointment_course_status ON course_appointment (course_id, status); +CREATE INDEX idx_course_appointment_merchant ON course_appointment (merchant_id); +CREATE INDEX idx_course_appointment_deleted ON course_appointment (deleted_at); +COMMENT ON TABLE course_appointment IS '课程预约表'; +COMMENT ON COLUMN course_appointment.id IS '主键'; +COMMENT ON COLUMN course_appointment.user_id IS '用户ID'; +COMMENT ON COLUMN course_appointment.course_id IS '课程ID'; +COMMENT ON COLUMN course_appointment.merchant_id IS '商家ID'; +COMMENT ON COLUMN course_appointment.appointment_date IS '预约时间'; +COMMENT ON COLUMN course_appointment.person_count IS '预约人数'; +COMMENT ON COLUMN course_appointment.contact_name IS '联系人姓名'; +COMMENT ON COLUMN course_appointment.contact_phone IS '联系人电话'; +COMMENT ON COLUMN course_appointment.remark IS '备注'; +COMMENT ON COLUMN course_appointment.status IS '状态:1已预约 2已确认 3已完成 4已取消'; +COMMENT ON COLUMN course_appointment.amount IS '支付金额'; +COMMENT ON COLUMN course_appointment.created_at IS '预约时间'; +COMMENT ON COLUMN course_appointment.updated_at IS '更新时间'; +COMMENT ON COLUMN course_appointment.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_course_appointment_updated BEFORE UPDATE ON course_appointment + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ============================================================ +-- 12. 省市区表 region +-- 业务侧所有涉及 LBS 的字段(如 pilot.service_city_codes)均以本表 code 为值存储, +-- 多选用分号拼接,查询时通过程序侧 split + IN 或 SQL 模糊匹配筛选 +-- ============================================================ +CREATE TABLE region ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + code VARCHAR(12) NOT NULL, + name VARCHAR(50) NOT NULL, + level SMALLINT NOT NULL, + parent_code VARCHAR(12), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_region_code ON region (code); +CREATE INDEX idx_region_parent ON region (parent_code); +CREATE INDEX idx_region_level ON region (level); +CREATE INDEX idx_region_deleted ON region (deleted_at); +COMMENT ON TABLE region IS '省市区表'; +COMMENT ON COLUMN region.id IS '主键'; +COMMENT ON COLUMN region.code IS '行政区划编码(6位数字字符串,如110000北京市)'; +COMMENT ON COLUMN region.name IS '区划名称'; +COMMENT ON COLUMN region.level IS '级别:1省 2市 3区县'; +COMMENT ON COLUMN region.parent_code IS '父级编码,省级为NULL'; +COMMENT ON COLUMN region.created_at IS '创建时间'; +COMMENT ON COLUMN region.updated_at IS '更新时间'; +COMMENT ON COLUMN region.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_region_updated BEFORE UPDATE ON region + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); diff --git a/src/main/resources/db/migration/V2__points_detail.sql b/src/main/resources/db/migration/V2__points_detail.sql new file mode 100644 index 0000000..bd7d935 --- /dev/null +++ b/src/main/resources/db/migration/V2__points_detail.sql @@ -0,0 +1,33 @@ +-- ============================================================ +-- V2: 积分明细表 + 移除 task.premium_cost +-- 设计说明:积分的每一笔收入/支出统一记录到 points_detail 流水表, +-- 余额仍以 user.points 为准;任务表不再冗余存储 premium_cost, +-- 优质任务的积分消耗以 points_detail 中事件类型=4 的流水为准。 +-- ============================================================ + +-- 1. 积分明细表(流水只增不改,继承 created_at,无 updated_at) +CREATE TABLE points_detail ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + change_type SMALLINT NOT NULL, + event_type SMALLINT NOT NULL, + points INT NOT NULL, + related_id BIGINT, + remark VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_points_detail_user ON points_detail (user_id, created_at); +COMMENT ON TABLE points_detail IS '积分明细表:记录用户每笔积分增扣流水'; +COMMENT ON COLUMN points_detail.id IS '主键'; +COMMENT ON COLUMN points_detail.user_id IS '用户ID,关联user.id'; +COMMENT ON COLUMN points_detail.change_type IS '变动方向:1收入 2支出'; +COMMENT ON COLUMN points_detail.event_type IS '事件类型:1发布任务 2完成任务 3邀请好友注册 4发布优质任务'; +COMMENT ON COLUMN points_detail.points IS '积分变动值,收入为正、支出为负'; +COMMENT ON COLUMN points_detail.related_id IS '关联业务ID(任务ID/被邀请用户ID等)'; +COMMENT ON COLUMN points_detail.remark IS '备注说明'; +COMMENT ON COLUMN points_detail.created_at IS '创建时间'; +COMMENT ON COLUMN points_detail.deleted_at IS '软删除时间'; + +-- 2. 任务表移除冗余的优质任务积分消耗字段 +ALTER TABLE task DROP COLUMN premium_cost; diff --git a/src/main/resources/db/migration/V2__seed_region.sql b/src/main/resources/db/migration/V2__seed_region.sql new file mode 100644 index 0000000..b27706b --- /dev/null +++ b/src/main/resources/db/migration/V2__seed_region.sql @@ -0,0 +1,3372 @@ +-- ============================================================ +-- V2: 初始化中国省市区数据(region 表) +-- 数据源: modood/Administrative-divisions-of-China (基于国家统计局标准) +-- 编码规则: 6 位行政区划编码 (省 2 位补 0000 / 市 4 位补 00 / 区 6 位) +-- 级别: 1省 2市 3区县; parent_code 自关联形成三级树, 省级为 NULL +-- 港澳台: 台湾省 710000 / 香港特别行政区 810000 / 澳门特别行政区 820000 +-- (民政部公布口径, 仅省级, 不下钻) +-- 直筒子市: 东莞市(441900)/中山市(442000)/儋州市(460400)/嘉峪关市(620200) +-- 下级街道/镇在数据源中为 9 位编码, 违反"6 位编码"规约, 按民政部 +-- 公布口径仅保留市级一行, 不入库下级 +-- created_at / updated_at 由 DB DEFAULT 维护, deleted_at 默认 NULL, 均不显式写入 +-- 幂等性: 由 flyway_schema_history 表保证本脚本仅执行一次; 若 region 表已有 +-- 历史数据需重置, 先 TRUNCATE region RESTART IDENTITY CASCADE 再重跑 +-- ============================================================ + +BEGIN; + +INSERT INTO region (code, name, level, parent_code) VALUES + ('110000', '北京市', 1, NULL), + ('110100', '市辖区', 2, '110000'), + ('110101', '东城区', 3, '110100'), + ('110102', '西城区', 3, '110100'), + ('110105', '朝阳区', 3, '110100'), + ('110106', '丰台区', 3, '110100'), + ('110107', '石景山区', 3, '110100'), + ('110108', '海淀区', 3, '110100'), + ('110109', '门头沟区', 3, '110100'), + ('110111', '房山区', 3, '110100'), + ('110112', '通州区', 3, '110100'), + ('110113', '顺义区', 3, '110100'), + ('110114', '昌平区', 3, '110100'), + ('110115', '大兴区', 3, '110100'), + ('110116', '怀柔区', 3, '110100'), + ('110117', '平谷区', 3, '110100'), + ('110118', '密云区', 3, '110100'), + ('110119', '延庆区', 3, '110100'), + ('120000', '天津市', 1, NULL), + ('120100', '市辖区', 2, '120000'), + ('120101', '和平区', 3, '120100'), + ('120102', '河东区', 3, '120100'), + ('120103', '河西区', 3, '120100'), + ('120104', '南开区', 3, '120100'), + ('120105', '河北区', 3, '120100'), + ('120106', '红桥区', 3, '120100'), + ('120110', '东丽区', 3, '120100'), + ('120111', '西青区', 3, '120100'), + ('120112', '津南区', 3, '120100'), + ('120113', '北辰区', 3, '120100'), + ('120114', '武清区', 3, '120100'), + ('120115', '宝坻区', 3, '120100'), + ('120116', '滨海新区', 3, '120100'), + ('120117', '宁河区', 3, '120100'), + ('120118', '静海区', 3, '120100'), + ('120119', '蓟州区', 3, '120100'), + ('130000', '河北省', 1, NULL), + ('130100', '石家庄市', 2, '130000'), + ('130102', '长安区', 3, '130100'), + ('130104', '桥西区', 3, '130100'), + ('130105', '新华区', 3, '130100'), + ('130107', '井陉矿区', 3, '130100'), + ('130108', '裕华区', 3, '130100'), + ('130109', '藁城区', 3, '130100'), + ('130110', '鹿泉区', 3, '130100'), + ('130111', '栾城区', 3, '130100'), + ('130121', '井陉县', 3, '130100'), + ('130123', '正定县', 3, '130100'), + ('130125', '行唐县', 3, '130100'), + ('130126', '灵寿县', 3, '130100'), + ('130127', '高邑县', 3, '130100'), + ('130128', '深泽县', 3, '130100'), + ('130129', '赞皇县', 3, '130100'), + ('130130', '无极县', 3, '130100'), + ('130131', '平山县', 3, '130100'), + ('130132', '元氏县', 3, '130100'), + ('130133', '赵县', 3, '130100'), + ('130171', '石家庄高新技术产业开发区', 3, '130100'), + ('130172', '石家庄循环化工园区', 3, '130100'), + ('130181', '辛集市', 3, '130100'), + ('130183', '晋州市', 3, '130100'), + ('130184', '新乐市', 3, '130100'), + ('130200', '唐山市', 2, '130000'), + ('130202', '路南区', 3, '130200'), + ('130203', '路北区', 3, '130200'), + ('130204', '古冶区', 3, '130200'), + ('130205', '开平区', 3, '130200'), + ('130207', '丰南区', 3, '130200'), + ('130208', '丰润区', 3, '130200'), + ('130209', '曹妃甸区', 3, '130200'), + ('130224', '滦南县', 3, '130200'), + ('130225', '乐亭县', 3, '130200'), + ('130227', '迁西县', 3, '130200'), + ('130229', '玉田县', 3, '130200'), + ('130271', '河北唐山芦台经济开发区', 3, '130200'), + ('130272', '唐山市汉沽管理区', 3, '130200'), + ('130273', '唐山高新技术产业开发区', 3, '130200'), + ('130274', '河北唐山海港经济开发区', 3, '130200'), + ('130281', '遵化市', 3, '130200'), + ('130283', '迁安市', 3, '130200'), + ('130284', '滦州市', 3, '130200'), + ('130300', '秦皇岛市', 2, '130000'), + ('130302', '海港区', 3, '130300'), + ('130303', '山海关区', 3, '130300'), + ('130304', '北戴河区', 3, '130300'), + ('130306', '抚宁区', 3, '130300'), + ('130321', '青龙满族自治县', 3, '130300'), + ('130322', '昌黎县', 3, '130300'), + ('130324', '卢龙县', 3, '130300'), + ('130371', '秦皇岛市经济技术开发区', 3, '130300'), + ('130372', '北戴河新区', 3, '130300'), + ('130400', '邯郸市', 2, '130000'), + ('130402', '邯山区', 3, '130400'), + ('130403', '丛台区', 3, '130400'), + ('130404', '复兴区', 3, '130400'), + ('130406', '峰峰矿区', 3, '130400'), + ('130407', '肥乡区', 3, '130400'), + ('130408', '永年区', 3, '130400'), + ('130423', '临漳县', 3, '130400'), + ('130424', '成安县', 3, '130400'), + ('130425', '大名县', 3, '130400'), + ('130426', '涉县', 3, '130400'), + ('130427', '磁县', 3, '130400'), + ('130430', '邱县', 3, '130400'), + ('130431', '鸡泽县', 3, '130400'), + ('130432', '广平县', 3, '130400'), + ('130433', '馆陶县', 3, '130400'), + ('130434', '魏县', 3, '130400'), + ('130435', '曲周县', 3, '130400'), + ('130471', '邯郸经济技术开发区', 3, '130400'), + ('130473', '邯郸冀南新区', 3, '130400'), + ('130481', '武安市', 3, '130400'), + ('130500', '邢台市', 2, '130000'), + ('130502', '襄都区', 3, '130500'), + ('130503', '信都区', 3, '130500'), + ('130505', '任泽区', 3, '130500'), + ('130506', '南和区', 3, '130500'), + ('130522', '临城县', 3, '130500'), + ('130523', '内丘县', 3, '130500'), + ('130524', '柏乡县', 3, '130500'), + ('130525', '隆尧县', 3, '130500'), + ('130528', '宁晋县', 3, '130500'), + ('130529', '巨鹿县', 3, '130500'), + ('130530', '新河县', 3, '130500'), + ('130531', '广宗县', 3, '130500'), + ('130532', '平乡县', 3, '130500'), + ('130533', '威县', 3, '130500'), + ('130534', '清河县', 3, '130500'), + ('130535', '临西县', 3, '130500'), + ('130571', '河北邢台经济开发区', 3, '130500'), + ('130581', '南宫市', 3, '130500'), + ('130582', '沙河市', 3, '130500'), + ('130600', '保定市', 2, '130000'), + ('130602', '竞秀区', 3, '130600'), + ('130606', '莲池区', 3, '130600'), + ('130607', '满城区', 3, '130600'), + ('130608', '清苑区', 3, '130600'), + ('130609', '徐水区', 3, '130600'), + ('130623', '涞水县', 3, '130600'), + ('130624', '阜平县', 3, '130600'), + ('130626', '定兴县', 3, '130600'), + ('130627', '唐县', 3, '130600'), + ('130628', '高阳县', 3, '130600'), + ('130629', '容城县', 3, '130600'), + ('130630', '涞源县', 3, '130600'), + ('130631', '望都县', 3, '130600'), + ('130632', '安新县', 3, '130600'), + ('130633', '易县', 3, '130600'), + ('130634', '曲阳县', 3, '130600'), + ('130635', '蠡县', 3, '130600'), + ('130636', '顺平县', 3, '130600'), + ('130637', '博野县', 3, '130600'), + ('130638', '雄县', 3, '130600'), + ('130671', '保定高新技术产业开发区', 3, '130600'), + ('130672', '保定白沟新城', 3, '130600'), + ('130681', '涿州市', 3, '130600'), + ('130682', '定州市', 3, '130600'), + ('130683', '安国市', 3, '130600'), + ('130684', '高碑店市', 3, '130600'), + ('130700', '张家口市', 2, '130000'), + ('130702', '桥东区', 3, '130700'), + ('130703', '桥西区', 3, '130700'), + ('130705', '宣化区', 3, '130700'), + ('130706', '下花园区', 3, '130700'), + ('130708', '万全区', 3, '130700'), + ('130709', '崇礼区', 3, '130700'), + ('130722', '张北县', 3, '130700'), + ('130723', '康保县', 3, '130700'), + ('130724', '沽源县', 3, '130700'), + ('130725', '尚义县', 3, '130700'), + ('130726', '蔚县', 3, '130700'), + ('130727', '阳原县', 3, '130700'), + ('130728', '怀安县', 3, '130700'), + ('130730', '怀来县', 3, '130700'), + ('130731', '涿鹿县', 3, '130700'), + ('130732', '赤城县', 3, '130700'), + ('130771', '张家口经济开发区', 3, '130700'), + ('130772', '张家口市察北管理区', 3, '130700'), + ('130773', '张家口市塞北管理区', 3, '130700'), + ('130800', '承德市', 2, '130000'), + ('130802', '双桥区', 3, '130800'), + ('130803', '双滦区', 3, '130800'), + ('130804', '鹰手营子矿区', 3, '130800'), + ('130821', '承德县', 3, '130800'), + ('130822', '兴隆县', 3, '130800'), + ('130824', '滦平县', 3, '130800'), + ('130825', '隆化县', 3, '130800'), + ('130826', '丰宁满族自治县', 3, '130800'), + ('130827', '宽城满族自治县', 3, '130800'), + ('130828', '围场满族蒙古族自治县', 3, '130800'), + ('130871', '承德高新技术产业开发区', 3, '130800'), + ('130881', '平泉市', 3, '130800'), + ('130900', '沧州市', 2, '130000'), + ('130902', '新华区', 3, '130900'), + ('130903', '运河区', 3, '130900'), + ('130921', '沧县', 3, '130900'), + ('130922', '青县', 3, '130900'), + ('130923', '东光县', 3, '130900'), + ('130924', '海兴县', 3, '130900'), + ('130925', '盐山县', 3, '130900'), + ('130926', '肃宁县', 3, '130900'), + ('130927', '南皮县', 3, '130900'), + ('130928', '吴桥县', 3, '130900'), + ('130929', '献县', 3, '130900'), + ('130930', '孟村回族自治县', 3, '130900'), + ('130971', '河北沧州经济开发区', 3, '130900'), + ('130972', '沧州高新技术产业开发区', 3, '130900'), + ('130973', '沧州渤海新区', 3, '130900'), + ('130981', '泊头市', 3, '130900'), + ('130982', '任丘市', 3, '130900'), + ('130983', '黄骅市', 3, '130900'), + ('130984', '河间市', 3, '130900'), + ('131000', '廊坊市', 2, '130000'), + ('131002', '安次区', 3, '131000'), + ('131003', '广阳区', 3, '131000'), + ('131022', '固安县', 3, '131000'), + ('131023', '永清县', 3, '131000'), + ('131024', '香河县', 3, '131000'), + ('131025', '大城县', 3, '131000'), + ('131026', '文安县', 3, '131000'), + ('131028', '大厂回族自治县', 3, '131000'), + ('131071', '廊坊经济技术开发区', 3, '131000'), + ('131081', '霸州市', 3, '131000'), + ('131082', '三河市', 3, '131000'), + ('131100', '衡水市', 2, '130000'), + ('131102', '桃城区', 3, '131100'), + ('131103', '冀州区', 3, '131100'), + ('131121', '枣强县', 3, '131100'), + ('131122', '武邑县', 3, '131100'), + ('131123', '武强县', 3, '131100'), + ('131124', '饶阳县', 3, '131100'), + ('131125', '安平县', 3, '131100'), + ('131126', '故城县', 3, '131100'), + ('131127', '景县', 3, '131100'), + ('131128', '阜城县', 3, '131100'), + ('131171', '河北衡水高新技术产业开发区', 3, '131100'), + ('131172', '衡水滨湖新区', 3, '131100'), + ('131182', '深州市', 3, '131100'), + ('140000', '山西省', 1, NULL), + ('140100', '太原市', 2, '140000'), + ('140105', '小店区', 3, '140100'), + ('140106', '迎泽区', 3, '140100'), + ('140107', '杏花岭区', 3, '140100'), + ('140108', '尖草坪区', 3, '140100'), + ('140109', '万柏林区', 3, '140100'), + ('140110', '晋源区', 3, '140100'), + ('140121', '清徐县', 3, '140100'), + ('140122', '阳曲县', 3, '140100'), + ('140123', '娄烦县', 3, '140100'), + ('140171', '山西转型综合改革示范区', 3, '140100'), + ('140181', '古交市', 3, '140100'), + ('140200', '大同市', 2, '140000'), + ('140212', '新荣区', 3, '140200'), + ('140213', '平城区', 3, '140200'), + ('140214', '云冈区', 3, '140200'), + ('140215', '云州区', 3, '140200'), + ('140221', '阳高县', 3, '140200'), + ('140222', '天镇县', 3, '140200'), + ('140223', '广灵县', 3, '140200'), + ('140224', '灵丘县', 3, '140200'), + ('140225', '浑源县', 3, '140200'), + ('140226', '左云县', 3, '140200'), + ('140271', '山西大同经济开发区', 3, '140200'), + ('140300', '阳泉市', 2, '140000'), + ('140302', '城区', 3, '140300'), + ('140303', '矿区', 3, '140300'), + ('140311', '郊区', 3, '140300'), + ('140321', '平定县', 3, '140300'), + ('140322', '盂县', 3, '140300'), + ('140400', '长治市', 2, '140000'), + ('140403', '潞州区', 3, '140400'), + ('140404', '上党区', 3, '140400'), + ('140405', '屯留区', 3, '140400'), + ('140406', '潞城区', 3, '140400'), + ('140423', '襄垣县', 3, '140400'), + ('140425', '平顺县', 3, '140400'), + ('140426', '黎城县', 3, '140400'), + ('140427', '壶关县', 3, '140400'), + ('140428', '长子县', 3, '140400'), + ('140429', '武乡县', 3, '140400'), + ('140430', '沁县', 3, '140400'), + ('140431', '沁源县', 3, '140400'), + ('140500', '晋城市', 2, '140000'), + ('140502', '城区', 3, '140500'), + ('140521', '沁水县', 3, '140500'), + ('140522', '阳城县', 3, '140500'), + ('140524', '陵川县', 3, '140500'), + ('140525', '泽州县', 3, '140500'), + ('140581', '高平市', 3, '140500'), + ('140600', '朔州市', 2, '140000'), + ('140602', '朔城区', 3, '140600'), + ('140603', '平鲁区', 3, '140600'), + ('140621', '山阴县', 3, '140600'), + ('140622', '应县', 3, '140600'), + ('140623', '右玉县', 3, '140600'), + ('140671', '山西朔州经济开发区', 3, '140600'), + ('140681', '怀仁市', 3, '140600'), + ('140700', '晋中市', 2, '140000'), + ('140702', '榆次区', 3, '140700'), + ('140703', '太谷区', 3, '140700'), + ('140721', '榆社县', 3, '140700'), + ('140722', '左权县', 3, '140700'), + ('140723', '和顺县', 3, '140700'), + ('140724', '昔阳县', 3, '140700'), + ('140725', '寿阳县', 3, '140700'), + ('140727', '祁县', 3, '140700'), + ('140728', '平遥县', 3, '140700'), + ('140729', '灵石县', 3, '140700'), + ('140781', '介休市', 3, '140700'), + ('140800', '运城市', 2, '140000'), + ('140802', '盐湖区', 3, '140800'), + ('140821', '临猗县', 3, '140800'), + ('140822', '万荣县', 3, '140800'), + ('140823', '闻喜县', 3, '140800'), + ('140824', '稷山县', 3, '140800'), + ('140825', '新绛县', 3, '140800'), + ('140826', '绛县', 3, '140800'), + ('140827', '垣曲县', 3, '140800'), + ('140828', '夏县', 3, '140800'), + ('140829', '平陆县', 3, '140800'), + ('140830', '芮城县', 3, '140800'), + ('140881', '永济市', 3, '140800'), + ('140882', '河津市', 3, '140800'), + ('140900', '忻州市', 2, '140000'), + ('140902', '忻府区', 3, '140900'), + ('140921', '定襄县', 3, '140900'), + ('140922', '五台县', 3, '140900'), + ('140923', '代县', 3, '140900'), + ('140924', '繁峙县', 3, '140900'), + ('140925', '宁武县', 3, '140900'), + ('140926', '静乐县', 3, '140900'), + ('140927', '神池县', 3, '140900'), + ('140928', '五寨县', 3, '140900'), + ('140929', '岢岚县', 3, '140900'), + ('140930', '河曲县', 3, '140900'), + ('140931', '保德县', 3, '140900'), + ('140932', '偏关县', 3, '140900'), + ('140971', '五台山风景名胜区', 3, '140900'), + ('140981', '原平市', 3, '140900'), + ('141000', '临汾市', 2, '140000'), + ('141002', '尧都区', 3, '141000'), + ('141021', '曲沃县', 3, '141000'), + ('141022', '翼城县', 3, '141000'), + ('141023', '襄汾县', 3, '141000'), + ('141024', '洪洞县', 3, '141000'), + ('141025', '古县', 3, '141000'), + ('141026', '安泽县', 3, '141000'), + ('141027', '浮山县', 3, '141000'), + ('141028', '吉县', 3, '141000'), + ('141029', '乡宁县', 3, '141000'), + ('141030', '大宁县', 3, '141000'), + ('141031', '隰县', 3, '141000'), + ('141032', '永和县', 3, '141000'), + ('141033', '蒲县', 3, '141000'), + ('141034', '汾西县', 3, '141000'), + ('141081', '侯马市', 3, '141000'), + ('141082', '霍州市', 3, '141000'), + ('141100', '吕梁市', 2, '140000'), + ('141102', '离石区', 3, '141100'), + ('141121', '文水县', 3, '141100'), + ('141122', '交城县', 3, '141100'), + ('141123', '兴县', 3, '141100'), + ('141124', '临县', 3, '141100'), + ('141125', '柳林县', 3, '141100'), + ('141126', '石楼县', 3, '141100'), + ('141127', '岚县', 3, '141100'), + ('141128', '方山县', 3, '141100'), + ('141129', '中阳县', 3, '141100'), + ('141130', '交口县', 3, '141100'), + ('141181', '孝义市', 3, '141100'), + ('141182', '汾阳市', 3, '141100'), + ('150000', '内蒙古自治区', 1, NULL), + ('150100', '呼和浩特市', 2, '150000'), + ('150102', '新城区', 3, '150100'), + ('150103', '回民区', 3, '150100'), + ('150104', '玉泉区', 3, '150100'), + ('150105', '赛罕区', 3, '150100'), + ('150121', '土默特左旗', 3, '150100'), + ('150122', '托克托县', 3, '150100'), + ('150123', '和林格尔县', 3, '150100'), + ('150124', '清水河县', 3, '150100'), + ('150125', '武川县', 3, '150100'), + ('150172', '呼和浩特经济技术开发区', 3, '150100'), + ('150200', '包头市', 2, '150000'), + ('150202', '东河区', 3, '150200'), + ('150203', '昆都仑区', 3, '150200'), + ('150204', '青山区', 3, '150200'), + ('150205', '石拐区', 3, '150200'), + ('150206', '白云鄂博矿区', 3, '150200'), + ('150207', '九原区', 3, '150200'), + ('150221', '土默特右旗', 3, '150200'), + ('150222', '固阳县', 3, '150200'), + ('150223', '达尔罕茂明安联合旗', 3, '150200'), + ('150271', '包头稀土高新技术产业开发区', 3, '150200'), + ('150300', '乌海市', 2, '150000'), + ('150302', '海勃湾区', 3, '150300'), + ('150303', '海南区', 3, '150300'), + ('150304', '乌达区', 3, '150300'), + ('150400', '赤峰市', 2, '150000'), + ('150402', '红山区', 3, '150400'), + ('150403', '元宝山区', 3, '150400'), + ('150404', '松山区', 3, '150400'), + ('150421', '阿鲁科尔沁旗', 3, '150400'), + ('150422', '巴林左旗', 3, '150400'), + ('150423', '巴林右旗', 3, '150400'), + ('150424', '林西县', 3, '150400'), + ('150425', '克什克腾旗', 3, '150400'), + ('150426', '翁牛特旗', 3, '150400'), + ('150428', '喀喇沁旗', 3, '150400'), + ('150429', '宁城县', 3, '150400'), + ('150430', '敖汉旗', 3, '150400'), + ('150500', '通辽市', 2, '150000'), + ('150502', '科尔沁区', 3, '150500'), + ('150521', '科尔沁左翼中旗', 3, '150500'), + ('150522', '科尔沁左翼后旗', 3, '150500'), + ('150523', '开鲁县', 3, '150500'), + ('150524', '库伦旗', 3, '150500'), + ('150525', '奈曼旗', 3, '150500'), + ('150526', '扎鲁特旗', 3, '150500'), + ('150571', '通辽经济技术开发区', 3, '150500'), + ('150581', '霍林郭勒市', 3, '150500'), + ('150600', '鄂尔多斯市', 2, '150000'), + ('150602', '东胜区', 3, '150600'), + ('150603', '康巴什区', 3, '150600'), + ('150621', '达拉特旗', 3, '150600'), + ('150622', '准格尔旗', 3, '150600'), + ('150623', '鄂托克前旗', 3, '150600'), + ('150624', '鄂托克旗', 3, '150600'), + ('150625', '杭锦旗', 3, '150600'), + ('150626', '乌审旗', 3, '150600'), + ('150627', '伊金霍洛旗', 3, '150600'), + ('150700', '呼伦贝尔市', 2, '150000'), + ('150702', '海拉尔区', 3, '150700'), + ('150703', '扎赉诺尔区', 3, '150700'), + ('150721', '阿荣旗', 3, '150700'), + ('150722', '莫力达瓦达斡尔族自治旗', 3, '150700'), + ('150723', '鄂伦春自治旗', 3, '150700'), + ('150724', '鄂温克族自治旗', 3, '150700'), + ('150725', '陈巴尔虎旗', 3, '150700'), + ('150726', '新巴尔虎左旗', 3, '150700'), + ('150727', '新巴尔虎右旗', 3, '150700'), + ('150781', '满洲里市', 3, '150700'), + ('150782', '牙克石市', 3, '150700'), + ('150783', '扎兰屯市', 3, '150700'), + ('150784', '额尔古纳市', 3, '150700'), + ('150785', '根河市', 3, '150700'), + ('150800', '巴彦淖尔市', 2, '150000'), + ('150802', '临河区', 3, '150800'), + ('150821', '五原县', 3, '150800'), + ('150822', '磴口县', 3, '150800'), + ('150823', '乌拉特前旗', 3, '150800'), + ('150824', '乌拉特中旗', 3, '150800'), + ('150825', '乌拉特后旗', 3, '150800'), + ('150826', '杭锦后旗', 3, '150800'), + ('150900', '乌兰察布市', 2, '150000'), + ('150902', '集宁区', 3, '150900'), + ('150921', '卓资县', 3, '150900'), + ('150922', '化德县', 3, '150900'), + ('150923', '商都县', 3, '150900'), + ('150924', '兴和县', 3, '150900'), + ('150925', '凉城县', 3, '150900'), + ('150926', '察哈尔右翼前旗', 3, '150900'), + ('150927', '察哈尔右翼中旗', 3, '150900'), + ('150928', '察哈尔右翼后旗', 3, '150900'), + ('150929', '四子王旗', 3, '150900'), + ('150981', '丰镇市', 3, '150900'), + ('152200', '兴安盟', 2, '150000'), + ('152201', '乌兰浩特市', 3, '152200'), + ('152202', '阿尔山市', 3, '152200'), + ('152221', '科尔沁右翼前旗', 3, '152200'), + ('152222', '科尔沁右翼中旗', 3, '152200'), + ('152223', '扎赉特旗', 3, '152200'), + ('152224', '突泉县', 3, '152200'), + ('152500', '锡林郭勒盟', 2, '150000'), + ('152501', '二连浩特市', 3, '152500'), + ('152502', '锡林浩特市', 3, '152500'), + ('152522', '阿巴嘎旗', 3, '152500'), + ('152523', '苏尼特左旗', 3, '152500'), + ('152524', '苏尼特右旗', 3, '152500'), + ('152525', '东乌珠穆沁旗', 3, '152500'), + ('152526', '西乌珠穆沁旗', 3, '152500'), + ('152527', '太仆寺旗', 3, '152500'), + ('152528', '镶黄旗', 3, '152500'), + ('152529', '正镶白旗', 3, '152500'), + ('152530', '正蓝旗', 3, '152500'), + ('152531', '多伦县', 3, '152500'), + ('152571', '乌拉盖管理区管委会', 3, '152500'), + ('152900', '阿拉善盟', 2, '150000'), + ('152921', '阿拉善左旗', 3, '152900'), + ('152922', '阿拉善右旗', 3, '152900'), + ('152923', '额济纳旗', 3, '152900'), + ('152971', '内蒙古阿拉善高新技术产业开发区', 3, '152900'), + ('210000', '辽宁省', 1, NULL), + ('210100', '沈阳市', 2, '210000'), + ('210102', '和平区', 3, '210100'), + ('210103', '沈河区', 3, '210100'), + ('210104', '大东区', 3, '210100'), + ('210105', '皇姑区', 3, '210100'), + ('210106', '铁西区', 3, '210100'), + ('210111', '苏家屯区', 3, '210100'), + ('210112', '浑南区', 3, '210100'), + ('210113', '沈北新区', 3, '210100'), + ('210114', '于洪区', 3, '210100'), + ('210115', '辽中区', 3, '210100'), + ('210123', '康平县', 3, '210100'), + ('210124', '法库县', 3, '210100'), + ('210181', '新民市', 3, '210100'), + ('210200', '大连市', 2, '210000'), + ('210202', '中山区', 3, '210200'), + ('210203', '西岗区', 3, '210200'), + ('210204', '沙河口区', 3, '210200'), + ('210211', '甘井子区', 3, '210200'), + ('210212', '旅顺口区', 3, '210200'), + ('210213', '金州区', 3, '210200'), + ('210214', '普兰店区', 3, '210200'), + ('210224', '长海县', 3, '210200'), + ('210281', '瓦房店市', 3, '210200'), + ('210283', '庄河市', 3, '210200'), + ('210300', '鞍山市', 2, '210000'), + ('210302', '铁东区', 3, '210300'), + ('210303', '铁西区', 3, '210300'), + ('210304', '立山区', 3, '210300'), + ('210311', '千山区', 3, '210300'), + ('210321', '台安县', 3, '210300'), + ('210323', '岫岩满族自治县', 3, '210300'), + ('210381', '海城市', 3, '210300'), + ('210400', '抚顺市', 2, '210000'), + ('210402', '新抚区', 3, '210400'), + ('210403', '东洲区', 3, '210400'), + ('210404', '望花区', 3, '210400'), + ('210411', '顺城区', 3, '210400'), + ('210421', '抚顺县', 3, '210400'), + ('210422', '新宾满族自治县', 3, '210400'), + ('210423', '清原满族自治县', 3, '210400'), + ('210500', '本溪市', 2, '210000'), + ('210502', '平山区', 3, '210500'), + ('210503', '溪湖区', 3, '210500'), + ('210504', '明山区', 3, '210500'), + ('210505', '南芬区', 3, '210500'), + ('210521', '本溪满族自治县', 3, '210500'), + ('210522', '桓仁满族自治县', 3, '210500'), + ('210600', '丹东市', 2, '210000'), + ('210602', '元宝区', 3, '210600'), + ('210603', '振兴区', 3, '210600'), + ('210604', '振安区', 3, '210600'), + ('210624', '宽甸满族自治县', 3, '210600'), + ('210681', '东港市', 3, '210600'), + ('210682', '凤城市', 3, '210600'), + ('210700', '锦州市', 2, '210000'), + ('210702', '古塔区', 3, '210700'), + ('210703', '凌河区', 3, '210700'), + ('210711', '太和区', 3, '210700'), + ('210726', '黑山县', 3, '210700'), + ('210727', '义县', 3, '210700'), + ('210781', '凌海市', 3, '210700'), + ('210782', '北镇市', 3, '210700'), + ('210800', '营口市', 2, '210000'), + ('210802', '站前区', 3, '210800'), + ('210803', '西市区', 3, '210800'), + ('210804', '鲅鱼圈区', 3, '210800'), + ('210811', '老边区', 3, '210800'), + ('210881', '盖州市', 3, '210800'), + ('210882', '大石桥市', 3, '210800'), + ('210900', '阜新市', 2, '210000'), + ('210902', '海州区', 3, '210900'), + ('210903', '新邱区', 3, '210900'), + ('210904', '太平区', 3, '210900'), + ('210905', '清河门区', 3, '210900'), + ('210911', '细河区', 3, '210900'), + ('210921', '阜新蒙古族自治县', 3, '210900'), + ('210922', '彰武县', 3, '210900'), + ('211000', '辽阳市', 2, '210000'), + ('211002', '白塔区', 3, '211000'), + ('211003', '文圣区', 3, '211000'), + ('211004', '宏伟区', 3, '211000'), + ('211005', '弓长岭区', 3, '211000'), + ('211011', '太子河区', 3, '211000'), + ('211021', '辽阳县', 3, '211000'), + ('211081', '灯塔市', 3, '211000'), + ('211100', '盘锦市', 2, '210000'), + ('211102', '双台子区', 3, '211100'), + ('211103', '兴隆台区', 3, '211100'), + ('211104', '大洼区', 3, '211100'), + ('211122', '盘山县', 3, '211100'), + ('211200', '铁岭市', 2, '210000'), + ('211202', '银州区', 3, '211200'), + ('211204', '清河区', 3, '211200'), + ('211221', '铁岭县', 3, '211200'), + ('211223', '西丰县', 3, '211200'), + ('211224', '昌图县', 3, '211200'), + ('211281', '调兵山市', 3, '211200'), + ('211282', '开原市', 3, '211200'), + ('211300', '朝阳市', 2, '210000'), + ('211302', '双塔区', 3, '211300'), + ('211303', '龙城区', 3, '211300'), + ('211321', '朝阳县', 3, '211300'), + ('211322', '建平县', 3, '211300'), + ('211324', '喀喇沁左翼蒙古族自治县', 3, '211300'), + ('211381', '北票市', 3, '211300'), + ('211382', '凌源市', 3, '211300'), + ('211400', '葫芦岛市', 2, '210000'), + ('211402', '连山区', 3, '211400'), + ('211403', '龙港区', 3, '211400'), + ('211404', '南票区', 3, '211400'), + ('211421', '绥中县', 3, '211400'), + ('211422', '建昌县', 3, '211400'), + ('211481', '兴城市', 3, '211400'), + ('220000', '吉林省', 1, NULL), + ('220100', '长春市', 2, '220000'), + ('220102', '南关区', 3, '220100'), + ('220103', '宽城区', 3, '220100'), + ('220104', '朝阳区', 3, '220100'), + ('220105', '二道区', 3, '220100'), + ('220106', '绿园区', 3, '220100'), + ('220112', '双阳区', 3, '220100'), + ('220113', '九台区', 3, '220100'), + ('220122', '农安县', 3, '220100'), + ('220171', '长春经济技术开发区', 3, '220100'), + ('220172', '长春净月高新技术产业开发区', 3, '220100'), + ('220173', '长春高新技术产业开发区', 3, '220100'), + ('220174', '长春汽车经济技术开发区', 3, '220100'), + ('220182', '榆树市', 3, '220100'), + ('220183', '德惠市', 3, '220100'), + ('220184', '公主岭市', 3, '220100'), + ('220200', '吉林市', 2, '220000'), + ('220202', '昌邑区', 3, '220200'), + ('220203', '龙潭区', 3, '220200'), + ('220204', '船营区', 3, '220200'), + ('220211', '丰满区', 3, '220200'), + ('220221', '永吉县', 3, '220200'), + ('220271', '吉林经济开发区', 3, '220200'), + ('220272', '吉林高新技术产业开发区', 3, '220200'), + ('220273', '吉林中国新加坡食品区', 3, '220200'), + ('220281', '蛟河市', 3, '220200'), + ('220282', '桦甸市', 3, '220200'), + ('220283', '舒兰市', 3, '220200'), + ('220284', '磐石市', 3, '220200'), + ('220300', '四平市', 2, '220000'), + ('220302', '铁西区', 3, '220300'), + ('220303', '铁东区', 3, '220300'), + ('220322', '梨树县', 3, '220300'), + ('220323', '伊通满族自治县', 3, '220300'), + ('220382', '双辽市', 3, '220300'), + ('220400', '辽源市', 2, '220000'), + ('220402', '龙山区', 3, '220400'), + ('220403', '西安区', 3, '220400'), + ('220421', '东丰县', 3, '220400'), + ('220422', '东辽县', 3, '220400'), + ('220500', '通化市', 2, '220000'), + ('220502', '东昌区', 3, '220500'), + ('220503', '二道江区', 3, '220500'), + ('220521', '通化县', 3, '220500'), + ('220523', '辉南县', 3, '220500'), + ('220524', '柳河县', 3, '220500'), + ('220581', '梅河口市', 3, '220500'), + ('220582', '集安市', 3, '220500'), + ('220600', '白山市', 2, '220000'), + ('220602', '浑江区', 3, '220600'), + ('220605', '江源区', 3, '220600'), + ('220621', '抚松县', 3, '220600'), + ('220622', '靖宇县', 3, '220600'), + ('220623', '长白朝鲜族自治县', 3, '220600'), + ('220681', '临江市', 3, '220600'), + ('220700', '松原市', 2, '220000'), + ('220702', '宁江区', 3, '220700'), + ('220721', '前郭尔罗斯蒙古族自治县', 3, '220700'), + ('220722', '长岭县', 3, '220700'), + ('220723', '乾安县', 3, '220700'), + ('220771', '吉林松原经济开发区', 3, '220700'), + ('220781', '扶余市', 3, '220700'), + ('220800', '白城市', 2, '220000'), + ('220802', '洮北区', 3, '220800'), + ('220821', '镇赉县', 3, '220800'), + ('220822', '通榆县', 3, '220800'), + ('220871', '吉林白城经济开发区', 3, '220800'), + ('220881', '洮南市', 3, '220800'), + ('220882', '大安市', 3, '220800'), + ('222400', '延边朝鲜族自治州', 2, '220000'), + ('222401', '延吉市', 3, '222400'), + ('222402', '图们市', 3, '222400'), + ('222403', '敦化市', 3, '222400'), + ('222404', '珲春市', 3, '222400'), + ('222405', '龙井市', 3, '222400'), + ('222406', '和龙市', 3, '222400'), + ('222424', '汪清县', 3, '222400'), + ('222426', '安图县', 3, '222400'), + ('230000', '黑龙江省', 1, NULL), + ('230100', '哈尔滨市', 2, '230000'), + ('230102', '道里区', 3, '230100'), + ('230103', '南岗区', 3, '230100'), + ('230104', '道外区', 3, '230100'), + ('230108', '平房区', 3, '230100'), + ('230109', '松北区', 3, '230100'), + ('230110', '香坊区', 3, '230100'), + ('230111', '呼兰区', 3, '230100'), + ('230112', '阿城区', 3, '230100'), + ('230113', '双城区', 3, '230100'), + ('230123', '依兰县', 3, '230100'), + ('230124', '方正县', 3, '230100'), + ('230125', '宾县', 3, '230100'), + ('230126', '巴彦县', 3, '230100'), + ('230127', '木兰县', 3, '230100'), + ('230128', '通河县', 3, '230100'), + ('230129', '延寿县', 3, '230100'), + ('230183', '尚志市', 3, '230100'), + ('230184', '五常市', 3, '230100'), + ('230200', '齐齐哈尔市', 2, '230000'), + ('230202', '龙沙区', 3, '230200'), + ('230203', '建华区', 3, '230200'), + ('230204', '铁锋区', 3, '230200'), + ('230205', '昂昂溪区', 3, '230200'), + ('230206', '富拉尔基区', 3, '230200'), + ('230207', '碾子山区', 3, '230200'), + ('230208', '梅里斯达斡尔族区', 3, '230200'), + ('230221', '龙江县', 3, '230200'), + ('230223', '依安县', 3, '230200'), + ('230224', '泰来县', 3, '230200'), + ('230225', '甘南县', 3, '230200'), + ('230227', '富裕县', 3, '230200'), + ('230229', '克山县', 3, '230200'), + ('230230', '克东县', 3, '230200'), + ('230231', '拜泉县', 3, '230200'), + ('230281', '讷河市', 3, '230200'), + ('230300', '鸡西市', 2, '230000'), + ('230302', '鸡冠区', 3, '230300'), + ('230303', '恒山区', 3, '230300'), + ('230304', '滴道区', 3, '230300'), + ('230305', '梨树区', 3, '230300'), + ('230306', '城子河区', 3, '230300'), + ('230307', '麻山区', 3, '230300'), + ('230321', '鸡东县', 3, '230300'), + ('230381', '虎林市', 3, '230300'), + ('230382', '密山市', 3, '230300'), + ('230400', '鹤岗市', 2, '230000'), + ('230402', '向阳区', 3, '230400'), + ('230403', '工农区', 3, '230400'), + ('230404', '南山区', 3, '230400'), + ('230405', '兴安区', 3, '230400'), + ('230406', '东山区', 3, '230400'), + ('230407', '兴山区', 3, '230400'), + ('230421', '萝北县', 3, '230400'), + ('230422', '绥滨县', 3, '230400'), + ('230500', '双鸭山市', 2, '230000'), + ('230502', '尖山区', 3, '230500'), + ('230503', '岭东区', 3, '230500'), + ('230505', '四方台区', 3, '230500'), + ('230506', '宝山区', 3, '230500'), + ('230521', '集贤县', 3, '230500'), + ('230522', '友谊县', 3, '230500'), + ('230523', '宝清县', 3, '230500'), + ('230524', '饶河县', 3, '230500'), + ('230600', '大庆市', 2, '230000'), + ('230602', '萨尔图区', 3, '230600'), + ('230603', '龙凤区', 3, '230600'), + ('230604', '让胡路区', 3, '230600'), + ('230605', '红岗区', 3, '230600'), + ('230606', '大同区', 3, '230600'), + ('230621', '肇州县', 3, '230600'), + ('230622', '肇源县', 3, '230600'), + ('230623', '林甸县', 3, '230600'), + ('230624', '杜尔伯特蒙古族自治县', 3, '230600'), + ('230671', '大庆高新技术产业开发区', 3, '230600'), + ('230700', '伊春市', 2, '230000'), + ('230717', '伊美区', 3, '230700'), + ('230718', '乌翠区', 3, '230700'), + ('230719', '友好区', 3, '230700'), + ('230722', '嘉荫县', 3, '230700'), + ('230723', '汤旺县', 3, '230700'), + ('230724', '丰林县', 3, '230700'), + ('230725', '大箐山县', 3, '230700'), + ('230726', '南岔县', 3, '230700'), + ('230751', '金林区', 3, '230700'), + ('230781', '铁力市', 3, '230700'), + ('230800', '佳木斯市', 2, '230000'), + ('230803', '向阳区', 3, '230800'), + ('230804', '前进区', 3, '230800'), + ('230805', '东风区', 3, '230800'), + ('230811', '郊区', 3, '230800'), + ('230822', '桦南县', 3, '230800'), + ('230826', '桦川县', 3, '230800'), + ('230828', '汤原县', 3, '230800'), + ('230881', '同江市', 3, '230800'), + ('230882', '富锦市', 3, '230800'), + ('230883', '抚远市', 3, '230800'), + ('230900', '七台河市', 2, '230000'), + ('230902', '新兴区', 3, '230900'), + ('230903', '桃山区', 3, '230900'), + ('230904', '茄子河区', 3, '230900'), + ('230921', '勃利县', 3, '230900'), + ('231000', '牡丹江市', 2, '230000'), + ('231002', '东安区', 3, '231000'), + ('231003', '阳明区', 3, '231000'), + ('231004', '爱民区', 3, '231000'), + ('231005', '西安区', 3, '231000'), + ('231025', '林口县', 3, '231000'), + ('231081', '绥芬河市', 3, '231000'), + ('231083', '海林市', 3, '231000'), + ('231084', '宁安市', 3, '231000'), + ('231085', '穆棱市', 3, '231000'), + ('231086', '东宁市', 3, '231000'), + ('231100', '黑河市', 2, '230000'), + ('231102', '爱辉区', 3, '231100'), + ('231123', '逊克县', 3, '231100'), + ('231124', '孙吴县', 3, '231100'), + ('231181', '北安市', 3, '231100'), + ('231182', '五大连池市', 3, '231100'), + ('231183', '嫩江市', 3, '231100'), + ('231200', '绥化市', 2, '230000'), + ('231202', '北林区', 3, '231200'), + ('231221', '望奎县', 3, '231200'), + ('231222', '兰西县', 3, '231200'), + ('231223', '青冈县', 3, '231200'), + ('231224', '庆安县', 3, '231200'), + ('231225', '明水县', 3, '231200'), + ('231226', '绥棱县', 3, '231200'), + ('231281', '安达市', 3, '231200'), + ('231282', '肇东市', 3, '231200'), + ('231283', '海伦市', 3, '231200'), + ('232700', '大兴安岭地区', 2, '230000'), + ('232701', '漠河市', 3, '232700'), + ('232721', '呼玛县', 3, '232700'), + ('232722', '塔河县', 3, '232700'), + ('232761', '加格达奇区', 3, '232700'), + ('232762', '松岭区', 3, '232700'), + ('232763', '新林区', 3, '232700'), + ('232764', '呼中区', 3, '232700'), + ('310000', '上海市', 1, NULL), + ('310100', '市辖区', 2, '310000'), + ('310101', '黄浦区', 3, '310100'), + ('310104', '徐汇区', 3, '310100'), + ('310105', '长宁区', 3, '310100'), + ('310106', '静安区', 3, '310100'), + ('310107', '普陀区', 3, '310100'), + ('310109', '虹口区', 3, '310100'), + ('310110', '杨浦区', 3, '310100'), + ('310112', '闵行区', 3, '310100'), + ('310113', '宝山区', 3, '310100'), + ('310114', '嘉定区', 3, '310100'), + ('310115', '浦东新区', 3, '310100'), + ('310116', '金山区', 3, '310100'), + ('310117', '松江区', 3, '310100'), + ('310118', '青浦区', 3, '310100'), + ('310120', '奉贤区', 3, '310100'), + ('310151', '崇明区', 3, '310100'), + ('320000', '江苏省', 1, NULL), + ('320100', '南京市', 2, '320000'), + ('320102', '玄武区', 3, '320100'), + ('320104', '秦淮区', 3, '320100'), + ('320105', '建邺区', 3, '320100'), + ('320106', '鼓楼区', 3, '320100'), + ('320111', '浦口区', 3, '320100'), + ('320113', '栖霞区', 3, '320100'), + ('320114', '雨花台区', 3, '320100'), + ('320115', '江宁区', 3, '320100'), + ('320116', '六合区', 3, '320100'), + ('320117', '溧水区', 3, '320100'), + ('320118', '高淳区', 3, '320100'), + ('320200', '无锡市', 2, '320000'), + ('320205', '锡山区', 3, '320200'), + ('320206', '惠山区', 3, '320200'), + ('320211', '滨湖区', 3, '320200'), + ('320213', '梁溪区', 3, '320200'), + ('320214', '新吴区', 3, '320200'), + ('320281', '江阴市', 3, '320200'), + ('320282', '宜兴市', 3, '320200'), + ('320300', '徐州市', 2, '320000'), + ('320302', '鼓楼区', 3, '320300'), + ('320303', '云龙区', 3, '320300'), + ('320305', '贾汪区', 3, '320300'), + ('320311', '泉山区', 3, '320300'), + ('320312', '铜山区', 3, '320300'), + ('320321', '丰县', 3, '320300'), + ('320322', '沛县', 3, '320300'), + ('320324', '睢宁县', 3, '320300'), + ('320371', '徐州经济技术开发区', 3, '320300'), + ('320381', '新沂市', 3, '320300'), + ('320382', '邳州市', 3, '320300'), + ('320400', '常州市', 2, '320000'), + ('320402', '天宁区', 3, '320400'), + ('320404', '钟楼区', 3, '320400'), + ('320411', '新北区', 3, '320400'), + ('320412', '武进区', 3, '320400'), + ('320413', '金坛区', 3, '320400'), + ('320481', '溧阳市', 3, '320400'), + ('320500', '苏州市', 2, '320000'), + ('320505', '虎丘区', 3, '320500'), + ('320506', '吴中区', 3, '320500'), + ('320507', '相城区', 3, '320500'), + ('320508', '姑苏区', 3, '320500'), + ('320509', '吴江区', 3, '320500'), + ('320576', '苏州工业园区', 3, '320500'), + ('320581', '常熟市', 3, '320500'), + ('320582', '张家港市', 3, '320500'), + ('320583', '昆山市', 3, '320500'), + ('320585', '太仓市', 3, '320500'), + ('320600', '南通市', 2, '320000'), + ('320612', '通州区', 3, '320600'), + ('320613', '崇川区', 3, '320600'), + ('320614', '海门区', 3, '320600'), + ('320623', '如东县', 3, '320600'), + ('320671', '南通经济技术开发区', 3, '320600'), + ('320681', '启东市', 3, '320600'), + ('320682', '如皋市', 3, '320600'), + ('320685', '海安市', 3, '320600'), + ('320700', '连云港市', 2, '320000'), + ('320703', '连云区', 3, '320700'), + ('320706', '海州区', 3, '320700'), + ('320707', '赣榆区', 3, '320700'), + ('320722', '东海县', 3, '320700'), + ('320723', '灌云县', 3, '320700'), + ('320724', '灌南县', 3, '320700'), + ('320771', '连云港经济技术开发区', 3, '320700'), + ('320800', '淮安市', 2, '320000'), + ('320803', '淮安区', 3, '320800'), + ('320804', '淮阴区', 3, '320800'), + ('320812', '清江浦区', 3, '320800'), + ('320813', '洪泽区', 3, '320800'), + ('320826', '涟水县', 3, '320800'), + ('320830', '盱眙县', 3, '320800'), + ('320831', '金湖县', 3, '320800'), + ('320871', '淮安经济技术开发区', 3, '320800'), + ('320900', '盐城市', 2, '320000'), + ('320902', '亭湖区', 3, '320900'), + ('320903', '盐都区', 3, '320900'), + ('320904', '大丰区', 3, '320900'), + ('320921', '响水县', 3, '320900'), + ('320922', '滨海县', 3, '320900'), + ('320923', '阜宁县', 3, '320900'), + ('320924', '射阳县', 3, '320900'), + ('320925', '建湖县', 3, '320900'), + ('320971', '盐城经济技术开发区', 3, '320900'), + ('320981', '东台市', 3, '320900'), + ('321000', '扬州市', 2, '320000'), + ('321002', '广陵区', 3, '321000'), + ('321003', '邗江区', 3, '321000'), + ('321012', '江都区', 3, '321000'), + ('321023', '宝应县', 3, '321000'), + ('321071', '扬州经济技术开发区', 3, '321000'), + ('321081', '仪征市', 3, '321000'), + ('321084', '高邮市', 3, '321000'), + ('321100', '镇江市', 2, '320000'), + ('321102', '京口区', 3, '321100'), + ('321111', '润州区', 3, '321100'), + ('321112', '丹徒区', 3, '321100'), + ('321171', '镇江新区', 3, '321100'), + ('321181', '丹阳市', 3, '321100'), + ('321182', '扬中市', 3, '321100'), + ('321183', '句容市', 3, '321100'), + ('321200', '泰州市', 2, '320000'), + ('321202', '海陵区', 3, '321200'), + ('321203', '高港区', 3, '321200'), + ('321204', '姜堰区', 3, '321200'), + ('321281', '兴化市', 3, '321200'), + ('321282', '靖江市', 3, '321200'), + ('321283', '泰兴市', 3, '321200'), + ('321300', '宿迁市', 2, '320000'), + ('321302', '宿城区', 3, '321300'), + ('321311', '宿豫区', 3, '321300'), + ('321322', '沭阳县', 3, '321300'), + ('321323', '泗阳县', 3, '321300'), + ('321324', '泗洪县', 3, '321300'), + ('321371', '宿迁经济技术开发区', 3, '321300'), + ('330000', '浙江省', 1, NULL), + ('330100', '杭州市', 2, '330000'), + ('330102', '上城区', 3, '330100'), + ('330105', '拱墅区', 3, '330100'), + ('330106', '西湖区', 3, '330100'), + ('330108', '滨江区', 3, '330100'), + ('330109', '萧山区', 3, '330100'), + ('330110', '余杭区', 3, '330100'), + ('330111', '富阳区', 3, '330100'), + ('330112', '临安区', 3, '330100'), + ('330113', '临平区', 3, '330100'), + ('330114', '钱塘区', 3, '330100'), + ('330122', '桐庐县', 3, '330100'), + ('330127', '淳安县', 3, '330100'), + ('330182', '建德市', 3, '330100'), + ('330200', '宁波市', 2, '330000'), + ('330203', '海曙区', 3, '330200'), + ('330205', '江北区', 3, '330200'), + ('330206', '北仑区', 3, '330200'), + ('330211', '镇海区', 3, '330200'), + ('330212', '鄞州区', 3, '330200'), + ('330213', '奉化区', 3, '330200'), + ('330225', '象山县', 3, '330200'), + ('330226', '宁海县', 3, '330200'), + ('330281', '余姚市', 3, '330200'), + ('330282', '慈溪市', 3, '330200'), + ('330300', '温州市', 2, '330000'), + ('330302', '鹿城区', 3, '330300'), + ('330303', '龙湾区', 3, '330300'), + ('330304', '瓯海区', 3, '330300'), + ('330305', '洞头区', 3, '330300'), + ('330324', '永嘉县', 3, '330300'), + ('330326', '平阳县', 3, '330300'), + ('330327', '苍南县', 3, '330300'), + ('330328', '文成县', 3, '330300'), + ('330329', '泰顺县', 3, '330300'), + ('330381', '瑞安市', 3, '330300'), + ('330382', '乐清市', 3, '330300'), + ('330383', '龙港市', 3, '330300'), + ('330400', '嘉兴市', 2, '330000'), + ('330402', '南湖区', 3, '330400'), + ('330411', '秀洲区', 3, '330400'), + ('330421', '嘉善县', 3, '330400'), + ('330424', '海盐县', 3, '330400'), + ('330481', '海宁市', 3, '330400'), + ('330482', '平湖市', 3, '330400'), + ('330483', '桐乡市', 3, '330400'), + ('330500', '湖州市', 2, '330000'), + ('330502', '吴兴区', 3, '330500'), + ('330503', '南浔区', 3, '330500'), + ('330521', '德清县', 3, '330500'), + ('330522', '长兴县', 3, '330500'), + ('330523', '安吉县', 3, '330500'), + ('330600', '绍兴市', 2, '330000'), + ('330602', '越城区', 3, '330600'), + ('330603', '柯桥区', 3, '330600'), + ('330604', '上虞区', 3, '330600'), + ('330624', '新昌县', 3, '330600'), + ('330681', '诸暨市', 3, '330600'), + ('330683', '嵊州市', 3, '330600'), + ('330700', '金华市', 2, '330000'), + ('330702', '婺城区', 3, '330700'), + ('330703', '金东区', 3, '330700'), + ('330723', '武义县', 3, '330700'), + ('330726', '浦江县', 3, '330700'), + ('330727', '磐安县', 3, '330700'), + ('330781', '兰溪市', 3, '330700'), + ('330782', '义乌市', 3, '330700'), + ('330783', '东阳市', 3, '330700'), + ('330784', '永康市', 3, '330700'), + ('330800', '衢州市', 2, '330000'), + ('330802', '柯城区', 3, '330800'), + ('330803', '衢江区', 3, '330800'), + ('330822', '常山县', 3, '330800'), + ('330824', '开化县', 3, '330800'), + ('330825', '龙游县', 3, '330800'), + ('330881', '江山市', 3, '330800'), + ('330900', '舟山市', 2, '330000'), + ('330902', '定海区', 3, '330900'), + ('330903', '普陀区', 3, '330900'), + ('330921', '岱山县', 3, '330900'), + ('330922', '嵊泗县', 3, '330900'), + ('331000', '台州市', 2, '330000'), + ('331002', '椒江区', 3, '331000'), + ('331003', '黄岩区', 3, '331000'), + ('331004', '路桥区', 3, '331000'), + ('331022', '三门县', 3, '331000'), + ('331023', '天台县', 3, '331000'), + ('331024', '仙居县', 3, '331000'), + ('331081', '温岭市', 3, '331000'), + ('331082', '临海市', 3, '331000'), + ('331083', '玉环市', 3, '331000'), + ('331100', '丽水市', 2, '330000'), + ('331102', '莲都区', 3, '331100'), + ('331121', '青田县', 3, '331100'), + ('331122', '缙云县', 3, '331100'), + ('331123', '遂昌县', 3, '331100'), + ('331124', '松阳县', 3, '331100'), + ('331125', '云和县', 3, '331100'), + ('331126', '庆元县', 3, '331100'), + ('331127', '景宁畲族自治县', 3, '331100'), + ('331181', '龙泉市', 3, '331100'), + ('340000', '安徽省', 1, NULL), + ('340100', '合肥市', 2, '340000'), + ('340102', '瑶海区', 3, '340100'), + ('340103', '庐阳区', 3, '340100'), + ('340104', '蜀山区', 3, '340100'), + ('340111', '包河区', 3, '340100'), + ('340121', '长丰县', 3, '340100'), + ('340122', '肥东县', 3, '340100'), + ('340123', '肥西县', 3, '340100'), + ('340124', '庐江县', 3, '340100'), + ('340176', '合肥高新技术产业开发区', 3, '340100'), + ('340177', '合肥经济技术开发区', 3, '340100'), + ('340178', '合肥新站高新技术产业开发区', 3, '340100'), + ('340181', '巢湖市', 3, '340100'), + ('340200', '芜湖市', 2, '340000'), + ('340202', '镜湖区', 3, '340200'), + ('340207', '鸠江区', 3, '340200'), + ('340209', '弋江区', 3, '340200'), + ('340210', '湾沚区', 3, '340200'), + ('340212', '繁昌区', 3, '340200'), + ('340223', '南陵县', 3, '340200'), + ('340271', '芜湖经济技术开发区', 3, '340200'), + ('340272', '安徽芜湖三山经济开发区', 3, '340200'), + ('340281', '无为市', 3, '340200'), + ('340300', '蚌埠市', 2, '340000'), + ('340302', '龙子湖区', 3, '340300'), + ('340303', '蚌山区', 3, '340300'), + ('340304', '禹会区', 3, '340300'), + ('340311', '淮上区', 3, '340300'), + ('340321', '怀远县', 3, '340300'), + ('340322', '五河县', 3, '340300'), + ('340323', '固镇县', 3, '340300'), + ('340371', '蚌埠市高新技术开发区', 3, '340300'), + ('340372', '蚌埠市经济开发区', 3, '340300'), + ('340400', '淮南市', 2, '340000'), + ('340402', '大通区', 3, '340400'), + ('340403', '田家庵区', 3, '340400'), + ('340404', '谢家集区', 3, '340400'), + ('340405', '八公山区', 3, '340400'), + ('340406', '潘集区', 3, '340400'), + ('340421', '凤台县', 3, '340400'), + ('340422', '寿县', 3, '340400'), + ('340500', '马鞍山市', 2, '340000'), + ('340503', '花山区', 3, '340500'), + ('340504', '雨山区', 3, '340500'), + ('340506', '博望区', 3, '340500'), + ('340521', '当涂县', 3, '340500'), + ('340522', '含山县', 3, '340500'), + ('340523', '和县', 3, '340500'), + ('340600', '淮北市', 2, '340000'), + ('340602', '杜集区', 3, '340600'), + ('340603', '相山区', 3, '340600'), + ('340604', '烈山区', 3, '340600'), + ('340621', '濉溪县', 3, '340600'), + ('340700', '铜陵市', 2, '340000'), + ('340705', '铜官区', 3, '340700'), + ('340706', '义安区', 3, '340700'), + ('340711', '郊区', 3, '340700'), + ('340722', '枞阳县', 3, '340700'), + ('340800', '安庆市', 2, '340000'), + ('340802', '迎江区', 3, '340800'), + ('340803', '大观区', 3, '340800'), + ('340811', '宜秀区', 3, '340800'), + ('340822', '怀宁县', 3, '340800'), + ('340825', '太湖县', 3, '340800'), + ('340826', '宿松县', 3, '340800'), + ('340827', '望江县', 3, '340800'), + ('340828', '岳西县', 3, '340800'), + ('340871', '安徽安庆经济开发区', 3, '340800'), + ('340881', '桐城市', 3, '340800'), + ('340882', '潜山市', 3, '340800'), + ('341000', '黄山市', 2, '340000'), + ('341002', '屯溪区', 3, '341000'), + ('341003', '黄山区', 3, '341000'), + ('341004', '徽州区', 3, '341000'), + ('341021', '歙县', 3, '341000'), + ('341022', '休宁县', 3, '341000'), + ('341023', '黟县', 3, '341000'), + ('341024', '祁门县', 3, '341000'), + ('341100', '滁州市', 2, '340000'), + ('341102', '琅琊区', 3, '341100'), + ('341103', '南谯区', 3, '341100'), + ('341122', '来安县', 3, '341100'), + ('341124', '全椒县', 3, '341100'), + ('341125', '定远县', 3, '341100'), + ('341126', '凤阳县', 3, '341100'), + ('341171', '中新苏滁高新技术产业开发区', 3, '341100'), + ('341172', '滁州经济技术开发区', 3, '341100'), + ('341181', '天长市', 3, '341100'), + ('341182', '明光市', 3, '341100'), + ('341200', '阜阳市', 2, '340000'), + ('341202', '颍州区', 3, '341200'), + ('341203', '颍东区', 3, '341200'), + ('341204', '颍泉区', 3, '341200'), + ('341221', '临泉县', 3, '341200'), + ('341222', '太和县', 3, '341200'), + ('341225', '阜南县', 3, '341200'), + ('341226', '颍上县', 3, '341200'), + ('341271', '阜阳合肥现代产业园区', 3, '341200'), + ('341272', '阜阳经济技术开发区', 3, '341200'), + ('341282', '界首市', 3, '341200'), + ('341300', '宿州市', 2, '340000'), + ('341302', '埇桥区', 3, '341300'), + ('341321', '砀山县', 3, '341300'), + ('341322', '萧县', 3, '341300'), + ('341323', '灵璧县', 3, '341300'), + ('341324', '泗县', 3, '341300'), + ('341371', '宿州马鞍山现代产业园区', 3, '341300'), + ('341372', '宿州经济技术开发区', 3, '341300'), + ('341500', '六安市', 2, '340000'), + ('341502', '金安区', 3, '341500'), + ('341503', '裕安区', 3, '341500'), + ('341504', '叶集区', 3, '341500'), + ('341522', '霍邱县', 3, '341500'), + ('341523', '舒城县', 3, '341500'), + ('341524', '金寨县', 3, '341500'), + ('341525', '霍山县', 3, '341500'), + ('341600', '亳州市', 2, '340000'), + ('341602', '谯城区', 3, '341600'), + ('341621', '涡阳县', 3, '341600'), + ('341622', '蒙城县', 3, '341600'), + ('341623', '利辛县', 3, '341600'), + ('341700', '池州市', 2, '340000'), + ('341702', '贵池区', 3, '341700'), + ('341721', '东至县', 3, '341700'), + ('341722', '石台县', 3, '341700'), + ('341723', '青阳县', 3, '341700'), + ('341800', '宣城市', 2, '340000'), + ('341802', '宣州区', 3, '341800'), + ('341821', '郎溪县', 3, '341800'), + ('341823', '泾县', 3, '341800'), + ('341824', '绩溪县', 3, '341800'), + ('341825', '旌德县', 3, '341800'), + ('341871', '宣城市经济开发区', 3, '341800'), + ('341881', '宁国市', 3, '341800'), + ('341882', '广德市', 3, '341800'), + ('350000', '福建省', 1, NULL), + ('350100', '福州市', 2, '350000'), + ('350102', '鼓楼区', 3, '350100'), + ('350103', '台江区', 3, '350100'), + ('350104', '仓山区', 3, '350100'), + ('350105', '马尾区', 3, '350100'), + ('350111', '晋安区', 3, '350100'), + ('350112', '长乐区', 3, '350100'), + ('350121', '闽侯县', 3, '350100'), + ('350122', '连江县', 3, '350100'), + ('350123', '罗源县', 3, '350100'), + ('350124', '闽清县', 3, '350100'), + ('350125', '永泰县', 3, '350100'), + ('350128', '平潭县', 3, '350100'), + ('350181', '福清市', 3, '350100'), + ('350200', '厦门市', 2, '350000'), + ('350203', '思明区', 3, '350200'), + ('350205', '海沧区', 3, '350200'), + ('350206', '湖里区', 3, '350200'), + ('350211', '集美区', 3, '350200'), + ('350212', '同安区', 3, '350200'), + ('350213', '翔安区', 3, '350200'), + ('350300', '莆田市', 2, '350000'), + ('350302', '城厢区', 3, '350300'), + ('350303', '涵江区', 3, '350300'), + ('350304', '荔城区', 3, '350300'), + ('350305', '秀屿区', 3, '350300'), + ('350322', '仙游县', 3, '350300'), + ('350400', '三明市', 2, '350000'), + ('350404', '三元区', 3, '350400'), + ('350405', '沙县区', 3, '350400'), + ('350421', '明溪县', 3, '350400'), + ('350423', '清流县', 3, '350400'), + ('350424', '宁化县', 3, '350400'), + ('350425', '大田县', 3, '350400'), + ('350426', '尤溪县', 3, '350400'), + ('350428', '将乐县', 3, '350400'), + ('350429', '泰宁县', 3, '350400'), + ('350430', '建宁县', 3, '350400'), + ('350481', '永安市', 3, '350400'), + ('350500', '泉州市', 2, '350000'), + ('350502', '鲤城区', 3, '350500'), + ('350503', '丰泽区', 3, '350500'), + ('350504', '洛江区', 3, '350500'), + ('350505', '泉港区', 3, '350500'), + ('350521', '惠安县', 3, '350500'), + ('350524', '安溪县', 3, '350500'), + ('350525', '永春县', 3, '350500'), + ('350526', '德化县', 3, '350500'), + ('350527', '金门县', 3, '350500'), + ('350581', '石狮市', 3, '350500'), + ('350582', '晋江市', 3, '350500'), + ('350583', '南安市', 3, '350500'), + ('350600', '漳州市', 2, '350000'), + ('350602', '芗城区', 3, '350600'), + ('350603', '龙文区', 3, '350600'), + ('350604', '龙海区', 3, '350600'), + ('350605', '长泰区', 3, '350600'), + ('350622', '云霄县', 3, '350600'), + ('350623', '漳浦县', 3, '350600'), + ('350624', '诏安县', 3, '350600'), + ('350626', '东山县', 3, '350600'), + ('350627', '南靖县', 3, '350600'), + ('350628', '平和县', 3, '350600'), + ('350629', '华安县', 3, '350600'), + ('350700', '南平市', 2, '350000'), + ('350702', '延平区', 3, '350700'), + ('350703', '建阳区', 3, '350700'), + ('350721', '顺昌县', 3, '350700'), + ('350722', '浦城县', 3, '350700'), + ('350723', '光泽县', 3, '350700'), + ('350724', '松溪县', 3, '350700'), + ('350725', '政和县', 3, '350700'), + ('350781', '邵武市', 3, '350700'), + ('350782', '武夷山市', 3, '350700'), + ('350783', '建瓯市', 3, '350700'), + ('350800', '龙岩市', 2, '350000'), + ('350802', '新罗区', 3, '350800'), + ('350803', '永定区', 3, '350800'), + ('350821', '长汀县', 3, '350800'), + ('350823', '上杭县', 3, '350800'), + ('350824', '武平县', 3, '350800'), + ('350825', '连城县', 3, '350800'), + ('350881', '漳平市', 3, '350800'), + ('350900', '宁德市', 2, '350000'), + ('350902', '蕉城区', 3, '350900'), + ('350921', '霞浦县', 3, '350900'), + ('350922', '古田县', 3, '350900'), + ('350923', '屏南县', 3, '350900'), + ('350924', '寿宁县', 3, '350900'), + ('350925', '周宁县', 3, '350900'), + ('350926', '柘荣县', 3, '350900'), + ('350981', '福安市', 3, '350900'), + ('350982', '福鼎市', 3, '350900'), + ('360000', '江西省', 1, NULL), + ('360100', '南昌市', 2, '360000'), + ('360102', '东湖区', 3, '360100'), + ('360103', '西湖区', 3, '360100'), + ('360104', '青云谱区', 3, '360100'), + ('360111', '青山湖区', 3, '360100'), + ('360112', '新建区', 3, '360100'), + ('360113', '红谷滩区', 3, '360100'), + ('360121', '南昌县', 3, '360100'), + ('360123', '安义县', 3, '360100'), + ('360124', '进贤县', 3, '360100'), + ('360200', '景德镇市', 2, '360000'), + ('360202', '昌江区', 3, '360200'), + ('360203', '珠山区', 3, '360200'), + ('360222', '浮梁县', 3, '360200'), + ('360281', '乐平市', 3, '360200'), + ('360300', '萍乡市', 2, '360000'), + ('360302', '安源区', 3, '360300'), + ('360313', '湘东区', 3, '360300'), + ('360321', '莲花县', 3, '360300'), + ('360322', '上栗县', 3, '360300'), + ('360323', '芦溪县', 3, '360300'), + ('360400', '九江市', 2, '360000'), + ('360402', '濂溪区', 3, '360400'), + ('360403', '浔阳区', 3, '360400'), + ('360404', '柴桑区', 3, '360400'), + ('360423', '武宁县', 3, '360400'), + ('360424', '修水县', 3, '360400'), + ('360425', '永修县', 3, '360400'), + ('360426', '德安县', 3, '360400'), + ('360428', '都昌县', 3, '360400'), + ('360429', '湖口县', 3, '360400'), + ('360430', '彭泽县', 3, '360400'), + ('360481', '瑞昌市', 3, '360400'), + ('360482', '共青城市', 3, '360400'), + ('360483', '庐山市', 3, '360400'), + ('360500', '新余市', 2, '360000'), + ('360502', '渝水区', 3, '360500'), + ('360521', '分宜县', 3, '360500'), + ('360600', '鹰潭市', 2, '360000'), + ('360602', '月湖区', 3, '360600'), + ('360603', '余江区', 3, '360600'), + ('360681', '贵溪市', 3, '360600'), + ('360700', '赣州市', 2, '360000'), + ('360702', '章贡区', 3, '360700'), + ('360703', '南康区', 3, '360700'), + ('360704', '赣县区', 3, '360700'), + ('360722', '信丰县', 3, '360700'), + ('360723', '大余县', 3, '360700'), + ('360724', '上犹县', 3, '360700'), + ('360725', '崇义县', 3, '360700'), + ('360726', '安远县', 3, '360700'), + ('360728', '定南县', 3, '360700'), + ('360729', '全南县', 3, '360700'), + ('360730', '宁都县', 3, '360700'), + ('360731', '于都县', 3, '360700'), + ('360732', '兴国县', 3, '360700'), + ('360733', '会昌县', 3, '360700'), + ('360734', '寻乌县', 3, '360700'), + ('360735', '石城县', 3, '360700'), + ('360781', '瑞金市', 3, '360700'), + ('360783', '龙南市', 3, '360700'), + ('360800', '吉安市', 2, '360000'), + ('360802', '吉州区', 3, '360800'), + ('360803', '青原区', 3, '360800'), + ('360821', '吉安县', 3, '360800'), + ('360822', '吉水县', 3, '360800'), + ('360823', '峡江县', 3, '360800'), + ('360824', '新干县', 3, '360800'), + ('360825', '永丰县', 3, '360800'), + ('360826', '泰和县', 3, '360800'), + ('360827', '遂川县', 3, '360800'), + ('360828', '万安县', 3, '360800'), + ('360829', '安福县', 3, '360800'), + ('360830', '永新县', 3, '360800'), + ('360881', '井冈山市', 3, '360800'), + ('360900', '宜春市', 2, '360000'), + ('360902', '袁州区', 3, '360900'), + ('360921', '奉新县', 3, '360900'), + ('360922', '万载县', 3, '360900'), + ('360923', '上高县', 3, '360900'), + ('360924', '宜丰县', 3, '360900'), + ('360925', '靖安县', 3, '360900'), + ('360926', '铜鼓县', 3, '360900'), + ('360981', '丰城市', 3, '360900'), + ('360982', '樟树市', 3, '360900'), + ('360983', '高安市', 3, '360900'), + ('361000', '抚州市', 2, '360000'), + ('361002', '临川区', 3, '361000'), + ('361003', '东乡区', 3, '361000'), + ('361021', '南城县', 3, '361000'), + ('361022', '黎川县', 3, '361000'), + ('361023', '南丰县', 3, '361000'), + ('361024', '崇仁县', 3, '361000'), + ('361025', '乐安县', 3, '361000'), + ('361026', '宜黄县', 3, '361000'), + ('361027', '金溪县', 3, '361000'), + ('361028', '资溪县', 3, '361000'), + ('361030', '广昌县', 3, '361000'), + ('361100', '上饶市', 2, '360000'), + ('361102', '信州区', 3, '361100'), + ('361103', '广丰区', 3, '361100'), + ('361104', '广信区', 3, '361100'), + ('361123', '玉山县', 3, '361100'), + ('361124', '铅山县', 3, '361100'), + ('361125', '横峰县', 3, '361100'), + ('361126', '弋阳县', 3, '361100'), + ('361127', '余干县', 3, '361100'), + ('361128', '鄱阳县', 3, '361100'), + ('361129', '万年县', 3, '361100'), + ('361130', '婺源县', 3, '361100'), + ('361181', '德兴市', 3, '361100'), + ('370000', '山东省', 1, NULL), + ('370100', '济南市', 2, '370000'), + ('370102', '历下区', 3, '370100'), + ('370103', '市中区', 3, '370100'), + ('370104', '槐荫区', 3, '370100'), + ('370105', '天桥区', 3, '370100'), + ('370112', '历城区', 3, '370100'), + ('370113', '长清区', 3, '370100'), + ('370114', '章丘区', 3, '370100'), + ('370115', '济阳区', 3, '370100'), + ('370116', '莱芜区', 3, '370100'), + ('370117', '钢城区', 3, '370100'), + ('370124', '平阴县', 3, '370100'), + ('370126', '商河县', 3, '370100'), + ('370176', '济南高新技术产业开发区', 3, '370100'), + ('370200', '青岛市', 2, '370000'), + ('370202', '市南区', 3, '370200'), + ('370203', '市北区', 3, '370200'), + ('370211', '黄岛区', 3, '370200'), + ('370212', '崂山区', 3, '370200'), + ('370213', '李沧区', 3, '370200'), + ('370214', '城阳区', 3, '370200'), + ('370215', '即墨区', 3, '370200'), + ('370281', '胶州市', 3, '370200'), + ('370283', '平度市', 3, '370200'), + ('370285', '莱西市', 3, '370200'), + ('370300', '淄博市', 2, '370000'), + ('370302', '淄川区', 3, '370300'), + ('370303', '张店区', 3, '370300'), + ('370304', '博山区', 3, '370300'), + ('370305', '临淄区', 3, '370300'), + ('370306', '周村区', 3, '370300'), + ('370321', '桓台县', 3, '370300'), + ('370322', '高青县', 3, '370300'), + ('370323', '沂源县', 3, '370300'), + ('370400', '枣庄市', 2, '370000'), + ('370402', '市中区', 3, '370400'), + ('370403', '薛城区', 3, '370400'), + ('370404', '峄城区', 3, '370400'), + ('370405', '台儿庄区', 3, '370400'), + ('370406', '山亭区', 3, '370400'), + ('370481', '滕州市', 3, '370400'), + ('370500', '东营市', 2, '370000'), + ('370502', '东营区', 3, '370500'), + ('370503', '河口区', 3, '370500'), + ('370505', '垦利区', 3, '370500'), + ('370522', '利津县', 3, '370500'), + ('370523', '广饶县', 3, '370500'), + ('370571', '东营经济技术开发区', 3, '370500'), + ('370572', '东营港经济开发区', 3, '370500'), + ('370600', '烟台市', 2, '370000'), + ('370602', '芝罘区', 3, '370600'), + ('370611', '福山区', 3, '370600'), + ('370612', '牟平区', 3, '370600'), + ('370613', '莱山区', 3, '370600'), + ('370614', '蓬莱区', 3, '370600'), + ('370671', '烟台高新技术产业开发区', 3, '370600'), + ('370676', '烟台经济技术开发区', 3, '370600'), + ('370681', '龙口市', 3, '370600'), + ('370682', '莱阳市', 3, '370600'), + ('370683', '莱州市', 3, '370600'), + ('370685', '招远市', 3, '370600'), + ('370686', '栖霞市', 3, '370600'), + ('370687', '海阳市', 3, '370600'), + ('370700', '潍坊市', 2, '370000'), + ('370702', '潍城区', 3, '370700'), + ('370703', '寒亭区', 3, '370700'), + ('370704', '坊子区', 3, '370700'), + ('370705', '奎文区', 3, '370700'), + ('370724', '临朐县', 3, '370700'), + ('370725', '昌乐县', 3, '370700'), + ('370772', '潍坊滨海经济技术开发区', 3, '370700'), + ('370781', '青州市', 3, '370700'), + ('370782', '诸城市', 3, '370700'), + ('370783', '寿光市', 3, '370700'), + ('370784', '安丘市', 3, '370700'), + ('370785', '高密市', 3, '370700'), + ('370786', '昌邑市', 3, '370700'), + ('370800', '济宁市', 2, '370000'), + ('370811', '任城区', 3, '370800'), + ('370812', '兖州区', 3, '370800'), + ('370826', '微山县', 3, '370800'), + ('370827', '鱼台县', 3, '370800'), + ('370828', '金乡县', 3, '370800'), + ('370829', '嘉祥县', 3, '370800'), + ('370830', '汶上县', 3, '370800'), + ('370831', '泗水县', 3, '370800'), + ('370832', '梁山县', 3, '370800'), + ('370871', '济宁高新技术产业开发区', 3, '370800'), + ('370881', '曲阜市', 3, '370800'), + ('370883', '邹城市', 3, '370800'), + ('370900', '泰安市', 2, '370000'), + ('370902', '泰山区', 3, '370900'), + ('370911', '岱岳区', 3, '370900'), + ('370921', '宁阳县', 3, '370900'), + ('370923', '东平县', 3, '370900'), + ('370982', '新泰市', 3, '370900'), + ('370983', '肥城市', 3, '370900'), + ('371000', '威海市', 2, '370000'), + ('371002', '环翠区', 3, '371000'), + ('371003', '文登区', 3, '371000'), + ('371071', '威海火炬高技术产业开发区', 3, '371000'), + ('371072', '威海经济技术开发区', 3, '371000'), + ('371073', '威海临港经济技术开发区', 3, '371000'), + ('371082', '荣成市', 3, '371000'), + ('371083', '乳山市', 3, '371000'), + ('371100', '日照市', 2, '370000'), + ('371102', '东港区', 3, '371100'), + ('371103', '岚山区', 3, '371100'), + ('371121', '五莲县', 3, '371100'), + ('371122', '莒县', 3, '371100'), + ('371171', '日照经济技术开发区', 3, '371100'), + ('371300', '临沂市', 2, '370000'), + ('371302', '兰山区', 3, '371300'), + ('371311', '罗庄区', 3, '371300'), + ('371312', '河东区', 3, '371300'), + ('371321', '沂南县', 3, '371300'), + ('371322', '郯城县', 3, '371300'), + ('371323', '沂水县', 3, '371300'), + ('371324', '兰陵县', 3, '371300'), + ('371325', '费县', 3, '371300'), + ('371326', '平邑县', 3, '371300'), + ('371327', '莒南县', 3, '371300'), + ('371328', '蒙阴县', 3, '371300'), + ('371329', '临沭县', 3, '371300'), + ('371371', '临沂高新技术产业开发区', 3, '371300'), + ('371400', '德州市', 2, '370000'), + ('371402', '德城区', 3, '371400'), + ('371403', '陵城区', 3, '371400'), + ('371422', '宁津县', 3, '371400'), + ('371423', '庆云县', 3, '371400'), + ('371424', '临邑县', 3, '371400'), + ('371425', '齐河县', 3, '371400'), + ('371426', '平原县', 3, '371400'), + ('371427', '夏津县', 3, '371400'), + ('371428', '武城县', 3, '371400'), + ('371471', '德州天衢新区', 3, '371400'), + ('371481', '乐陵市', 3, '371400'), + ('371482', '禹城市', 3, '371400'), + ('371500', '聊城市', 2, '370000'), + ('371502', '东昌府区', 3, '371500'), + ('371503', '茌平区', 3, '371500'), + ('371521', '阳谷县', 3, '371500'), + ('371522', '莘县', 3, '371500'), + ('371524', '东阿县', 3, '371500'), + ('371525', '冠县', 3, '371500'), + ('371526', '高唐县', 3, '371500'), + ('371581', '临清市', 3, '371500'), + ('371600', '滨州市', 2, '370000'), + ('371602', '滨城区', 3, '371600'), + ('371603', '沾化区', 3, '371600'), + ('371621', '惠民县', 3, '371600'), + ('371622', '阳信县', 3, '371600'), + ('371623', '无棣县', 3, '371600'), + ('371625', '博兴县', 3, '371600'), + ('371681', '邹平市', 3, '371600'), + ('371700', '菏泽市', 2, '370000'), + ('371702', '牡丹区', 3, '371700'), + ('371703', '定陶区', 3, '371700'), + ('371721', '曹县', 3, '371700'), + ('371722', '单县', 3, '371700'), + ('371723', '成武县', 3, '371700'), + ('371724', '巨野县', 3, '371700'), + ('371725', '郓城县', 3, '371700'), + ('371726', '鄄城县', 3, '371700'), + ('371728', '东明县', 3, '371700'), + ('371771', '菏泽经济技术开发区', 3, '371700'), + ('371772', '菏泽高新技术开发区', 3, '371700'), + ('410000', '河南省', 1, NULL), + ('410100', '郑州市', 2, '410000'), + ('410102', '中原区', 3, '410100'), + ('410103', '二七区', 3, '410100'), + ('410104', '管城回族区', 3, '410100'), + ('410105', '金水区', 3, '410100'), + ('410106', '上街区', 3, '410100'), + ('410108', '惠济区', 3, '410100'), + ('410122', '中牟县', 3, '410100'), + ('410171', '郑州经济技术开发区', 3, '410100'), + ('410172', '郑州高新技术产业开发区', 3, '410100'), + ('410173', '郑州航空港经济综合实验区', 3, '410100'), + ('410181', '巩义市', 3, '410100'), + ('410182', '荥阳市', 3, '410100'), + ('410183', '新密市', 3, '410100'), + ('410184', '新郑市', 3, '410100'), + ('410185', '登封市', 3, '410100'), + ('410200', '开封市', 2, '410000'), + ('410202', '龙亭区', 3, '410200'), + ('410203', '顺河回族区', 3, '410200'), + ('410204', '鼓楼区', 3, '410200'), + ('410205', '禹王台区', 3, '410200'), + ('410212', '祥符区', 3, '410200'), + ('410221', '杞县', 3, '410200'), + ('410222', '通许县', 3, '410200'), + ('410223', '尉氏县', 3, '410200'), + ('410225', '兰考县', 3, '410200'), + ('410300', '洛阳市', 2, '410000'), + ('410302', '老城区', 3, '410300'), + ('410303', '西工区', 3, '410300'), + ('410304', '瀍河回族区', 3, '410300'), + ('410305', '涧西区', 3, '410300'), + ('410307', '偃师区', 3, '410300'), + ('410308', '孟津区', 3, '410300'), + ('410311', '洛龙区', 3, '410300'), + ('410323', '新安县', 3, '410300'), + ('410324', '栾川县', 3, '410300'), + ('410325', '嵩县', 3, '410300'), + ('410326', '汝阳县', 3, '410300'), + ('410327', '宜阳县', 3, '410300'), + ('410328', '洛宁县', 3, '410300'), + ('410329', '伊川县', 3, '410300'), + ('410371', '洛阳高新技术产业开发区', 3, '410300'), + ('410400', '平顶山市', 2, '410000'), + ('410402', '新华区', 3, '410400'), + ('410403', '卫东区', 3, '410400'), + ('410404', '石龙区', 3, '410400'), + ('410411', '湛河区', 3, '410400'), + ('410421', '宝丰县', 3, '410400'), + ('410422', '叶县', 3, '410400'), + ('410423', '鲁山县', 3, '410400'), + ('410425', '郏县', 3, '410400'), + ('410471', '平顶山高新技术产业开发区', 3, '410400'), + ('410472', '平顶山市城乡一体化示范区', 3, '410400'), + ('410481', '舞钢市', 3, '410400'), + ('410482', '汝州市', 3, '410400'), + ('410500', '安阳市', 2, '410000'), + ('410502', '文峰区', 3, '410500'), + ('410503', '北关区', 3, '410500'), + ('410505', '殷都区', 3, '410500'), + ('410506', '龙安区', 3, '410500'), + ('410522', '安阳县', 3, '410500'), + ('410523', '汤阴县', 3, '410500'), + ('410526', '滑县', 3, '410500'), + ('410527', '内黄县', 3, '410500'), + ('410571', '安阳高新技术产业开发区', 3, '410500'), + ('410581', '林州市', 3, '410500'), + ('410600', '鹤壁市', 2, '410000'), + ('410602', '鹤山区', 3, '410600'), + ('410603', '山城区', 3, '410600'), + ('410611', '淇滨区', 3, '410600'), + ('410621', '浚县', 3, '410600'), + ('410622', '淇县', 3, '410600'), + ('410671', '鹤壁经济技术开发区', 3, '410600'), + ('410700', '新乡市', 2, '410000'), + ('410702', '红旗区', 3, '410700'), + ('410703', '卫滨区', 3, '410700'), + ('410704', '凤泉区', 3, '410700'), + ('410711', '牧野区', 3, '410700'), + ('410721', '新乡县', 3, '410700'), + ('410724', '获嘉县', 3, '410700'), + ('410725', '原阳县', 3, '410700'), + ('410726', '延津县', 3, '410700'), + ('410727', '封丘县', 3, '410700'), + ('410771', '新乡高新技术产业开发区', 3, '410700'), + ('410772', '新乡经济技术开发区', 3, '410700'), + ('410773', '新乡市平原城乡一体化示范区', 3, '410700'), + ('410781', '卫辉市', 3, '410700'), + ('410782', '辉县市', 3, '410700'), + ('410783', '长垣市', 3, '410700'), + ('410800', '焦作市', 2, '410000'), + ('410802', '解放区', 3, '410800'), + ('410803', '中站区', 3, '410800'), + ('410804', '马村区', 3, '410800'), + ('410811', '山阳区', 3, '410800'), + ('410821', '修武县', 3, '410800'), + ('410822', '博爱县', 3, '410800'), + ('410823', '武陟县', 3, '410800'), + ('410825', '温县', 3, '410800'), + ('410871', '焦作城乡一体化示范区', 3, '410800'), + ('410882', '沁阳市', 3, '410800'), + ('410883', '孟州市', 3, '410800'), + ('410900', '濮阳市', 2, '410000'), + ('410902', '华龙区', 3, '410900'), + ('410922', '清丰县', 3, '410900'), + ('410923', '南乐县', 3, '410900'), + ('410926', '范县', 3, '410900'), + ('410927', '台前县', 3, '410900'), + ('410928', '濮阳县', 3, '410900'), + ('410971', '河南濮阳工业园区', 3, '410900'), + ('410972', '濮阳经济技术开发区', 3, '410900'), + ('411000', '许昌市', 2, '410000'), + ('411002', '魏都区', 3, '411000'), + ('411003', '建安区', 3, '411000'), + ('411024', '鄢陵县', 3, '411000'), + ('411025', '襄城县', 3, '411000'), + ('411071', '许昌经济技术开发区', 3, '411000'), + ('411081', '禹州市', 3, '411000'), + ('411082', '长葛市', 3, '411000'), + ('411100', '漯河市', 2, '410000'), + ('411102', '源汇区', 3, '411100'), + ('411103', '郾城区', 3, '411100'), + ('411104', '召陵区', 3, '411100'), + ('411121', '舞阳县', 3, '411100'), + ('411122', '临颍县', 3, '411100'), + ('411171', '漯河经济技术开发区', 3, '411100'), + ('411200', '三门峡市', 2, '410000'), + ('411202', '湖滨区', 3, '411200'), + ('411203', '陕州区', 3, '411200'), + ('411221', '渑池县', 3, '411200'), + ('411224', '卢氏县', 3, '411200'), + ('411271', '河南三门峡经济开发区', 3, '411200'), + ('411281', '义马市', 3, '411200'), + ('411282', '灵宝市', 3, '411200'), + ('411300', '南阳市', 2, '410000'), + ('411302', '宛城区', 3, '411300'), + ('411303', '卧龙区', 3, '411300'), + ('411321', '南召县', 3, '411300'), + ('411322', '方城县', 3, '411300'), + ('411323', '西峡县', 3, '411300'), + ('411324', '镇平县', 3, '411300'), + ('411325', '内乡县', 3, '411300'), + ('411326', '淅川县', 3, '411300'), + ('411327', '社旗县', 3, '411300'), + ('411328', '唐河县', 3, '411300'), + ('411329', '新野县', 3, '411300'), + ('411330', '桐柏县', 3, '411300'), + ('411371', '南阳高新技术产业开发区', 3, '411300'), + ('411372', '南阳市城乡一体化示范区', 3, '411300'), + ('411381', '邓州市', 3, '411300'), + ('411400', '商丘市', 2, '410000'), + ('411402', '梁园区', 3, '411400'), + ('411403', '睢阳区', 3, '411400'), + ('411421', '民权县', 3, '411400'), + ('411422', '睢县', 3, '411400'), + ('411423', '宁陵县', 3, '411400'), + ('411424', '柘城县', 3, '411400'), + ('411425', '虞城县', 3, '411400'), + ('411426', '夏邑县', 3, '411400'), + ('411471', '豫东综合物流产业聚集区', 3, '411400'), + ('411472', '河南商丘经济开发区', 3, '411400'), + ('411481', '永城市', 3, '411400'), + ('411500', '信阳市', 2, '410000'), + ('411502', '浉河区', 3, '411500'), + ('411503', '平桥区', 3, '411500'), + ('411521', '罗山县', 3, '411500'), + ('411522', '光山县', 3, '411500'), + ('411523', '新县', 3, '411500'), + ('411524', '商城县', 3, '411500'), + ('411525', '固始县', 3, '411500'), + ('411526', '潢川县', 3, '411500'), + ('411527', '淮滨县', 3, '411500'), + ('411528', '息县', 3, '411500'), + ('411571', '信阳高新技术产业开发区', 3, '411500'), + ('411600', '周口市', 2, '410000'), + ('411602', '川汇区', 3, '411600'), + ('411603', '淮阳区', 3, '411600'), + ('411621', '扶沟县', 3, '411600'), + ('411622', '西华县', 3, '411600'), + ('411623', '商水县', 3, '411600'), + ('411624', '沈丘县', 3, '411600'), + ('411625', '郸城县', 3, '411600'), + ('411627', '太康县', 3, '411600'), + ('411628', '鹿邑县', 3, '411600'), + ('411671', '周口临港开发区', 3, '411600'), + ('411681', '项城市', 3, '411600'), + ('411700', '驻马店市', 2, '410000'), + ('411702', '驿城区', 3, '411700'), + ('411721', '西平县', 3, '411700'), + ('411722', '上蔡县', 3, '411700'), + ('411723', '平舆县', 3, '411700'), + ('411724', '正阳县', 3, '411700'), + ('411725', '确山县', 3, '411700'), + ('411726', '泌阳县', 3, '411700'), + ('411727', '汝南县', 3, '411700'), + ('411728', '遂平县', 3, '411700'), + ('411729', '新蔡县', 3, '411700'), + ('411771', '河南驻马店经济开发区', 3, '411700'), + ('419000', '省直辖县级行政区划', 2, '410000'), + ('419001', '济源市', 3, '419000'), + ('420000', '湖北省', 1, NULL), + ('420100', '武汉市', 2, '420000'), + ('420102', '江岸区', 3, '420100'), + ('420103', '江汉区', 3, '420100'), + ('420104', '硚口区', 3, '420100'), + ('420105', '汉阳区', 3, '420100'), + ('420106', '武昌区', 3, '420100'), + ('420107', '青山区', 3, '420100'), + ('420111', '洪山区', 3, '420100'), + ('420112', '东西湖区', 3, '420100'), + ('420113', '汉南区', 3, '420100'), + ('420114', '蔡甸区', 3, '420100'), + ('420115', '江夏区', 3, '420100'), + ('420116', '黄陂区', 3, '420100'), + ('420117', '新洲区', 3, '420100'), + ('420200', '黄石市', 2, '420000'), + ('420202', '黄石港区', 3, '420200'), + ('420203', '西塞山区', 3, '420200'), + ('420204', '下陆区', 3, '420200'), + ('420205', '铁山区', 3, '420200'), + ('420222', '阳新县', 3, '420200'), + ('420281', '大冶市', 3, '420200'), + ('420300', '十堰市', 2, '420000'), + ('420302', '茅箭区', 3, '420300'), + ('420303', '张湾区', 3, '420300'), + ('420304', '郧阳区', 3, '420300'), + ('420322', '郧西县', 3, '420300'), + ('420323', '竹山县', 3, '420300'), + ('420324', '竹溪县', 3, '420300'), + ('420325', '房县', 3, '420300'), + ('420381', '丹江口市', 3, '420300'), + ('420500', '宜昌市', 2, '420000'), + ('420502', '西陵区', 3, '420500'), + ('420503', '伍家岗区', 3, '420500'), + ('420504', '点军区', 3, '420500'), + ('420505', '猇亭区', 3, '420500'), + ('420506', '夷陵区', 3, '420500'), + ('420525', '远安县', 3, '420500'), + ('420526', '兴山县', 3, '420500'), + ('420527', '秭归县', 3, '420500'), + ('420528', '长阳土家族自治县', 3, '420500'), + ('420529', '五峰土家族自治县', 3, '420500'), + ('420581', '宜都市', 3, '420500'), + ('420582', '当阳市', 3, '420500'), + ('420583', '枝江市', 3, '420500'), + ('420600', '襄阳市', 2, '420000'), + ('420602', '襄城区', 3, '420600'), + ('420606', '樊城区', 3, '420600'), + ('420607', '襄州区', 3, '420600'), + ('420624', '南漳县', 3, '420600'), + ('420625', '谷城县', 3, '420600'), + ('420626', '保康县', 3, '420600'), + ('420682', '老河口市', 3, '420600'), + ('420683', '枣阳市', 3, '420600'), + ('420684', '宜城市', 3, '420600'), + ('420700', '鄂州市', 2, '420000'), + ('420702', '梁子湖区', 3, '420700'), + ('420703', '华容区', 3, '420700'), + ('420704', '鄂城区', 3, '420700'), + ('420800', '荆门市', 2, '420000'), + ('420802', '东宝区', 3, '420800'), + ('420804', '掇刀区', 3, '420800'), + ('420822', '沙洋县', 3, '420800'), + ('420881', '钟祥市', 3, '420800'), + ('420882', '京山市', 3, '420800'), + ('420900', '孝感市', 2, '420000'), + ('420902', '孝南区', 3, '420900'), + ('420921', '孝昌县', 3, '420900'), + ('420922', '大悟县', 3, '420900'), + ('420923', '云梦县', 3, '420900'), + ('420981', '应城市', 3, '420900'), + ('420982', '安陆市', 3, '420900'), + ('420984', '汉川市', 3, '420900'), + ('421000', '荆州市', 2, '420000'), + ('421002', '沙市区', 3, '421000'), + ('421003', '荆州区', 3, '421000'), + ('421022', '公安县', 3, '421000'), + ('421024', '江陵县', 3, '421000'), + ('421071', '荆州经济技术开发区', 3, '421000'), + ('421081', '石首市', 3, '421000'), + ('421083', '洪湖市', 3, '421000'), + ('421087', '松滋市', 3, '421000'), + ('421088', '监利市', 3, '421000'), + ('421100', '黄冈市', 2, '420000'), + ('421102', '黄州区', 3, '421100'), + ('421121', '团风县', 3, '421100'), + ('421122', '红安县', 3, '421100'), + ('421123', '罗田县', 3, '421100'), + ('421124', '英山县', 3, '421100'), + ('421125', '浠水县', 3, '421100'), + ('421126', '蕲春县', 3, '421100'), + ('421127', '黄梅县', 3, '421100'), + ('421171', '龙感湖管理区', 3, '421100'), + ('421181', '麻城市', 3, '421100'), + ('421182', '武穴市', 3, '421100'), + ('421200', '咸宁市', 2, '420000'), + ('421202', '咸安区', 3, '421200'), + ('421221', '嘉鱼县', 3, '421200'), + ('421222', '通城县', 3, '421200'), + ('421223', '崇阳县', 3, '421200'), + ('421224', '通山县', 3, '421200'), + ('421281', '赤壁市', 3, '421200'), + ('421300', '随州市', 2, '420000'), + ('421303', '曾都区', 3, '421300'), + ('421321', '随县', 3, '421300'), + ('421381', '广水市', 3, '421300'), + ('422800', '恩施土家族苗族自治州', 2, '420000'), + ('422801', '恩施市', 3, '422800'), + ('422802', '利川市', 3, '422800'), + ('422822', '建始县', 3, '422800'), + ('422823', '巴东县', 3, '422800'), + ('422825', '宣恩县', 3, '422800'), + ('422826', '咸丰县', 3, '422800'), + ('422827', '来凤县', 3, '422800'), + ('422828', '鹤峰县', 3, '422800'), + ('429000', '省直辖县级行政区划', 2, '420000'), + ('429004', '仙桃市', 3, '429000'), + ('429005', '潜江市', 3, '429000'), + ('429006', '天门市', 3, '429000'), + ('429021', '神农架林区', 3, '429000'), + ('430000', '湖南省', 1, NULL), + ('430100', '长沙市', 2, '430000'), + ('430102', '芙蓉区', 3, '430100'), + ('430103', '天心区', 3, '430100'), + ('430104', '岳麓区', 3, '430100'), + ('430105', '开福区', 3, '430100'), + ('430111', '雨花区', 3, '430100'), + ('430112', '望城区', 3, '430100'), + ('430121', '长沙县', 3, '430100'), + ('430181', '浏阳市', 3, '430100'), + ('430182', '宁乡市', 3, '430100'), + ('430200', '株洲市', 2, '430000'), + ('430202', '荷塘区', 3, '430200'), + ('430203', '芦淞区', 3, '430200'), + ('430204', '石峰区', 3, '430200'), + ('430211', '天元区', 3, '430200'), + ('430212', '渌口区', 3, '430200'), + ('430223', '攸县', 3, '430200'), + ('430224', '茶陵县', 3, '430200'), + ('430225', '炎陵县', 3, '430200'), + ('430281', '醴陵市', 3, '430200'), + ('430300', '湘潭市', 2, '430000'), + ('430302', '雨湖区', 3, '430300'), + ('430304', '岳塘区', 3, '430300'), + ('430321', '湘潭县', 3, '430300'), + ('430371', '湖南湘潭高新技术产业园区', 3, '430300'), + ('430372', '湘潭昭山示范区', 3, '430300'), + ('430373', '湘潭九华示范区', 3, '430300'), + ('430381', '湘乡市', 3, '430300'), + ('430382', '韶山市', 3, '430300'), + ('430400', '衡阳市', 2, '430000'), + ('430405', '珠晖区', 3, '430400'), + ('430406', '雁峰区', 3, '430400'), + ('430407', '石鼓区', 3, '430400'), + ('430408', '蒸湘区', 3, '430400'), + ('430412', '南岳区', 3, '430400'), + ('430421', '衡阳县', 3, '430400'), + ('430422', '衡南县', 3, '430400'), + ('430423', '衡山县', 3, '430400'), + ('430424', '衡东县', 3, '430400'), + ('430426', '祁东县', 3, '430400'), + ('430473', '湖南衡阳松木经济开发区', 3, '430400'), + ('430476', '湖南衡阳高新技术产业园区', 3, '430400'), + ('430481', '耒阳市', 3, '430400'), + ('430482', '常宁市', 3, '430400'), + ('430500', '邵阳市', 2, '430000'), + ('430502', '双清区', 3, '430500'), + ('430503', '大祥区', 3, '430500'), + ('430511', '北塔区', 3, '430500'), + ('430522', '新邵县', 3, '430500'), + ('430523', '邵阳县', 3, '430500'), + ('430524', '隆回县', 3, '430500'), + ('430525', '洞口县', 3, '430500'), + ('430527', '绥宁县', 3, '430500'), + ('430528', '新宁县', 3, '430500'), + ('430529', '城步苗族自治县', 3, '430500'), + ('430581', '武冈市', 3, '430500'), + ('430582', '邵东市', 3, '430500'), + ('430600', '岳阳市', 2, '430000'), + ('430602', '岳阳楼区', 3, '430600'), + ('430603', '云溪区', 3, '430600'), + ('430611', '君山区', 3, '430600'), + ('430621', '岳阳县', 3, '430600'), + ('430623', '华容县', 3, '430600'), + ('430624', '湘阴县', 3, '430600'), + ('430626', '平江县', 3, '430600'), + ('430671', '岳阳市屈原管理区', 3, '430600'), + ('430681', '汨罗市', 3, '430600'), + ('430682', '临湘市', 3, '430600'), + ('430700', '常德市', 2, '430000'), + ('430702', '武陵区', 3, '430700'), + ('430703', '鼎城区', 3, '430700'), + ('430721', '安乡县', 3, '430700'), + ('430722', '汉寿县', 3, '430700'), + ('430723', '澧县', 3, '430700'), + ('430724', '临澧县', 3, '430700'), + ('430725', '桃源县', 3, '430700'), + ('430726', '石门县', 3, '430700'), + ('430771', '常德市西洞庭管理区', 3, '430700'), + ('430781', '津市市', 3, '430700'), + ('430800', '张家界市', 2, '430000'), + ('430802', '永定区', 3, '430800'), + ('430811', '武陵源区', 3, '430800'), + ('430821', '慈利县', 3, '430800'), + ('430822', '桑植县', 3, '430800'), + ('430900', '益阳市', 2, '430000'), + ('430902', '资阳区', 3, '430900'), + ('430903', '赫山区', 3, '430900'), + ('430921', '南县', 3, '430900'), + ('430922', '桃江县', 3, '430900'), + ('430923', '安化县', 3, '430900'), + ('430971', '益阳市大通湖管理区', 3, '430900'), + ('430972', '湖南益阳高新技术产业园区', 3, '430900'), + ('430981', '沅江市', 3, '430900'), + ('431000', '郴州市', 2, '430000'), + ('431002', '北湖区', 3, '431000'), + ('431003', '苏仙区', 3, '431000'), + ('431021', '桂阳县', 3, '431000'), + ('431022', '宜章县', 3, '431000'), + ('431023', '永兴县', 3, '431000'), + ('431024', '嘉禾县', 3, '431000'), + ('431025', '临武县', 3, '431000'), + ('431026', '汝城县', 3, '431000'), + ('431027', '桂东县', 3, '431000'), + ('431028', '安仁县', 3, '431000'), + ('431081', '资兴市', 3, '431000'), + ('431100', '永州市', 2, '430000'), + ('431102', '零陵区', 3, '431100'), + ('431103', '冷水滩区', 3, '431100'), + ('431122', '东安县', 3, '431100'), + ('431123', '双牌县', 3, '431100'), + ('431124', '道县', 3, '431100'), + ('431125', '江永县', 3, '431100'), + ('431126', '宁远县', 3, '431100'), + ('431127', '蓝山县', 3, '431100'), + ('431128', '新田县', 3, '431100'), + ('431129', '江华瑶族自治县', 3, '431100'), + ('431171', '永州经济技术开发区', 3, '431100'), + ('431173', '永州市回龙圩管理区', 3, '431100'), + ('431181', '祁阳市', 3, '431100'), + ('431200', '怀化市', 2, '430000'), + ('431202', '鹤城区', 3, '431200'), + ('431221', '中方县', 3, '431200'), + ('431222', '沅陵县', 3, '431200'), + ('431223', '辰溪县', 3, '431200'), + ('431224', '溆浦县', 3, '431200'), + ('431225', '会同县', 3, '431200'), + ('431226', '麻阳苗族自治县', 3, '431200'), + ('431227', '新晃侗族自治县', 3, '431200'), + ('431228', '芷江侗族自治县', 3, '431200'), + ('431229', '靖州苗族侗族自治县', 3, '431200'), + ('431230', '通道侗族自治县', 3, '431200'), + ('431271', '怀化市洪江管理区', 3, '431200'), + ('431281', '洪江市', 3, '431200'), + ('431300', '娄底市', 2, '430000'), + ('431302', '娄星区', 3, '431300'), + ('431321', '双峰县', 3, '431300'), + ('431322', '新化县', 3, '431300'), + ('431381', '冷水江市', 3, '431300'), + ('431382', '涟源市', 3, '431300'), + ('433100', '湘西土家族苗族自治州', 2, '430000'), + ('433101', '吉首市', 3, '433100'), + ('433122', '泸溪县', 3, '433100'), + ('433123', '凤凰县', 3, '433100'), + ('433124', '花垣县', 3, '433100'), + ('433125', '保靖县', 3, '433100'), + ('433126', '古丈县', 3, '433100'), + ('433127', '永顺县', 3, '433100'), + ('433130', '龙山县', 3, '433100'), + ('440000', '广东省', 1, NULL), + ('440100', '广州市', 2, '440000'), + ('440103', '荔湾区', 3, '440100'), + ('440104', '越秀区', 3, '440100'), + ('440105', '海珠区', 3, '440100'), + ('440106', '天河区', 3, '440100'), + ('440111', '白云区', 3, '440100'), + ('440112', '黄埔区', 3, '440100'), + ('440113', '番禺区', 3, '440100'), + ('440114', '花都区', 3, '440100'), + ('440115', '南沙区', 3, '440100'), + ('440117', '从化区', 3, '440100'), + ('440118', '增城区', 3, '440100'), + ('440200', '韶关市', 2, '440000'), + ('440203', '武江区', 3, '440200'), + ('440204', '浈江区', 3, '440200'), + ('440205', '曲江区', 3, '440200'), + ('440222', '始兴县', 3, '440200'), + ('440224', '仁化县', 3, '440200'), + ('440229', '翁源县', 3, '440200'), + ('440232', '乳源瑶族自治县', 3, '440200'), + ('440233', '新丰县', 3, '440200'), + ('440281', '乐昌市', 3, '440200'), + ('440282', '南雄市', 3, '440200'), + ('440300', '深圳市', 2, '440000'), + ('440303', '罗湖区', 3, '440300'), + ('440304', '福田区', 3, '440300'), + ('440305', '南山区', 3, '440300'), + ('440306', '宝安区', 3, '440300'), + ('440307', '龙岗区', 3, '440300'), + ('440308', '盐田区', 3, '440300'), + ('440309', '龙华区', 3, '440300'), + ('440310', '坪山区', 3, '440300'), + ('440311', '光明区', 3, '440300'), + ('440400', '珠海市', 2, '440000'), + ('440402', '香洲区', 3, '440400'), + ('440403', '斗门区', 3, '440400'), + ('440404', '金湾区', 3, '440400'), + ('440500', '汕头市', 2, '440000'), + ('440507', '龙湖区', 3, '440500'), + ('440511', '金平区', 3, '440500'), + ('440512', '濠江区', 3, '440500'), + ('440513', '潮阳区', 3, '440500'), + ('440514', '潮南区', 3, '440500'), + ('440515', '澄海区', 3, '440500'), + ('440523', '南澳县', 3, '440500'), + ('440600', '佛山市', 2, '440000'), + ('440604', '禅城区', 3, '440600'), + ('440605', '南海区', 3, '440600'), + ('440606', '顺德区', 3, '440600'), + ('440607', '三水区', 3, '440600'), + ('440608', '高明区', 3, '440600'), + ('440700', '江门市', 2, '440000'), + ('440703', '蓬江区', 3, '440700'), + ('440704', '江海区', 3, '440700'), + ('440705', '新会区', 3, '440700'), + ('440781', '台山市', 3, '440700'), + ('440783', '开平市', 3, '440700'), + ('440784', '鹤山市', 3, '440700'), + ('440785', '恩平市', 3, '440700'), + ('440800', '湛江市', 2, '440000'), + ('440802', '赤坎区', 3, '440800'), + ('440803', '霞山区', 3, '440800'), + ('440804', '坡头区', 3, '440800'), + ('440811', '麻章区', 3, '440800'), + ('440823', '遂溪县', 3, '440800'), + ('440825', '徐闻县', 3, '440800'), + ('440881', '廉江市', 3, '440800'), + ('440882', '雷州市', 3, '440800'), + ('440883', '吴川市', 3, '440800'), + ('440900', '茂名市', 2, '440000'), + ('440902', '茂南区', 3, '440900'), + ('440904', '电白区', 3, '440900'), + ('440981', '高州市', 3, '440900'), + ('440982', '化州市', 3, '440900'), + ('440983', '信宜市', 3, '440900'), + ('441200', '肇庆市', 2, '440000'), + ('441202', '端州区', 3, '441200'), + ('441203', '鼎湖区', 3, '441200'), + ('441204', '高要区', 3, '441200'), + ('441223', '广宁县', 3, '441200'), + ('441224', '怀集县', 3, '441200'), + ('441225', '封开县', 3, '441200'), + ('441226', '德庆县', 3, '441200'), + ('441284', '四会市', 3, '441200'), + ('441300', '惠州市', 2, '440000'), + ('441302', '惠城区', 3, '441300'), + ('441303', '惠阳区', 3, '441300'), + ('441322', '博罗县', 3, '441300'), + ('441323', '惠东县', 3, '441300'), + ('441324', '龙门县', 3, '441300'), + ('441400', '梅州市', 2, '440000'), + ('441402', '梅江区', 3, '441400'), + ('441403', '梅县区', 3, '441400'), + ('441422', '大埔县', 3, '441400'), + ('441423', '丰顺县', 3, '441400'), + ('441424', '五华县', 3, '441400'), + ('441426', '平远县', 3, '441400'), + ('441427', '蕉岭县', 3, '441400'), + ('441481', '兴宁市', 3, '441400'), + ('441500', '汕尾市', 2, '440000'), + ('441502', '城区', 3, '441500'), + ('441521', '海丰县', 3, '441500'), + ('441523', '陆河县', 3, '441500'), + ('441581', '陆丰市', 3, '441500'), + ('441600', '河源市', 2, '440000'), + ('441602', '源城区', 3, '441600'), + ('441621', '紫金县', 3, '441600'), + ('441622', '龙川县', 3, '441600'), + ('441623', '连平县', 3, '441600'), + ('441624', '和平县', 3, '441600'), + ('441625', '东源县', 3, '441600'), + ('441700', '阳江市', 2, '440000'), + ('441702', '江城区', 3, '441700'), + ('441704', '阳东区', 3, '441700'), + ('441721', '阳西县', 3, '441700'), + ('441781', '阳春市', 3, '441700'), + ('441800', '清远市', 2, '440000'), + ('441802', '清城区', 3, '441800'), + ('441803', '清新区', 3, '441800'), + ('441821', '佛冈县', 3, '441800'), + ('441823', '阳山县', 3, '441800'), + ('441825', '连山壮族瑶族自治县', 3, '441800'), + ('441826', '连南瑶族自治县', 3, '441800'), + ('441881', '英德市', 3, '441800'), + ('441882', '连州市', 3, '441800'), + ('441900', '东莞市', 2, '440000'), + ('442000', '中山市', 2, '440000'), + ('445100', '潮州市', 2, '440000'), + ('445102', '湘桥区', 3, '445100'), + ('445103', '潮安区', 3, '445100'), + ('445122', '饶平县', 3, '445100'), + ('445200', '揭阳市', 2, '440000'), + ('445202', '榕城区', 3, '445200'), + ('445203', '揭东区', 3, '445200'), + ('445222', '揭西县', 3, '445200'), + ('445224', '惠来县', 3, '445200'), + ('445281', '普宁市', 3, '445200'), + ('445300', '云浮市', 2, '440000'), + ('445302', '云城区', 3, '445300'), + ('445303', '云安区', 3, '445300'), + ('445321', '新兴县', 3, '445300'), + ('445322', '郁南县', 3, '445300'), + ('445381', '罗定市', 3, '445300'), + ('450000', '广西壮族自治区', 1, NULL), + ('450100', '南宁市', 2, '450000'), + ('450102', '兴宁区', 3, '450100'), + ('450103', '青秀区', 3, '450100'), + ('450105', '江南区', 3, '450100'), + ('450107', '西乡塘区', 3, '450100'), + ('450108', '良庆区', 3, '450100'), + ('450109', '邕宁区', 3, '450100'), + ('450110', '武鸣区', 3, '450100'), + ('450123', '隆安县', 3, '450100'), + ('450124', '马山县', 3, '450100'), + ('450125', '上林县', 3, '450100'), + ('450126', '宾阳县', 3, '450100'), + ('450181', '横州市', 3, '450100'), + ('450200', '柳州市', 2, '450000'), + ('450202', '城中区', 3, '450200'), + ('450203', '鱼峰区', 3, '450200'), + ('450204', '柳南区', 3, '450200'), + ('450205', '柳北区', 3, '450200'), + ('450206', '柳江区', 3, '450200'), + ('450222', '柳城县', 3, '450200'), + ('450223', '鹿寨县', 3, '450200'), + ('450224', '融安县', 3, '450200'), + ('450225', '融水苗族自治县', 3, '450200'), + ('450226', '三江侗族自治县', 3, '450200'), + ('450300', '桂林市', 2, '450000'), + ('450302', '秀峰区', 3, '450300'), + ('450303', '叠彩区', 3, '450300'), + ('450304', '象山区', 3, '450300'), + ('450305', '七星区', 3, '450300'), + ('450311', '雁山区', 3, '450300'), + ('450312', '临桂区', 3, '450300'), + ('450321', '阳朔县', 3, '450300'), + ('450323', '灵川县', 3, '450300'), + ('450324', '全州县', 3, '450300'), + ('450325', '兴安县', 3, '450300'), + ('450326', '永福县', 3, '450300'), + ('450327', '灌阳县', 3, '450300'), + ('450328', '龙胜各族自治县', 3, '450300'), + ('450329', '资源县', 3, '450300'), + ('450330', '平乐县', 3, '450300'), + ('450332', '恭城瑶族自治县', 3, '450300'), + ('450381', '荔浦市', 3, '450300'), + ('450400', '梧州市', 2, '450000'), + ('450403', '万秀区', 3, '450400'), + ('450405', '长洲区', 3, '450400'), + ('450406', '龙圩区', 3, '450400'), + ('450421', '苍梧县', 3, '450400'), + ('450422', '藤县', 3, '450400'), + ('450423', '蒙山县', 3, '450400'), + ('450481', '岑溪市', 3, '450400'), + ('450500', '北海市', 2, '450000'), + ('450502', '海城区', 3, '450500'), + ('450503', '银海区', 3, '450500'), + ('450512', '铁山港区', 3, '450500'), + ('450521', '合浦县', 3, '450500'), + ('450600', '防城港市', 2, '450000'), + ('450602', '港口区', 3, '450600'), + ('450603', '防城区', 3, '450600'), + ('450621', '上思县', 3, '450600'), + ('450681', '东兴市', 3, '450600'), + ('450700', '钦州市', 2, '450000'), + ('450702', '钦南区', 3, '450700'), + ('450703', '钦北区', 3, '450700'), + ('450721', '灵山县', 3, '450700'), + ('450722', '浦北县', 3, '450700'), + ('450800', '贵港市', 2, '450000'), + ('450802', '港北区', 3, '450800'), + ('450803', '港南区', 3, '450800'), + ('450804', '覃塘区', 3, '450800'), + ('450821', '平南县', 3, '450800'), + ('450881', '桂平市', 3, '450800'), + ('450900', '玉林市', 2, '450000'), + ('450902', '玉州区', 3, '450900'), + ('450903', '福绵区', 3, '450900'), + ('450921', '容县', 3, '450900'), + ('450922', '陆川县', 3, '450900'), + ('450923', '博白县', 3, '450900'), + ('450924', '兴业县', 3, '450900'), + ('450981', '北流市', 3, '450900'), + ('451000', '百色市', 2, '450000'), + ('451002', '右江区', 3, '451000'), + ('451003', '田阳区', 3, '451000'), + ('451022', '田东县', 3, '451000'), + ('451024', '德保县', 3, '451000'), + ('451026', '那坡县', 3, '451000'), + ('451027', '凌云县', 3, '451000'), + ('451028', '乐业县', 3, '451000'), + ('451029', '田林县', 3, '451000'), + ('451030', '西林县', 3, '451000'), + ('451031', '隆林各族自治县', 3, '451000'), + ('451081', '靖西市', 3, '451000'), + ('451082', '平果市', 3, '451000'), + ('451100', '贺州市', 2, '450000'), + ('451102', '八步区', 3, '451100'), + ('451103', '平桂区', 3, '451100'), + ('451121', '昭平县', 3, '451100'), + ('451122', '钟山县', 3, '451100'), + ('451123', '富川瑶族自治县', 3, '451100'), + ('451200', '河池市', 2, '450000'), + ('451202', '金城江区', 3, '451200'), + ('451203', '宜州区', 3, '451200'), + ('451221', '南丹县', 3, '451200'), + ('451222', '天峨县', 3, '451200'), + ('451223', '凤山县', 3, '451200'), + ('451224', '东兰县', 3, '451200'), + ('451225', '罗城仫佬族自治县', 3, '451200'), + ('451226', '环江毛南族自治县', 3, '451200'), + ('451227', '巴马瑶族自治县', 3, '451200'), + ('451228', '都安瑶族自治县', 3, '451200'), + ('451229', '大化瑶族自治县', 3, '451200'), + ('451300', '来宾市', 2, '450000'), + ('451302', '兴宾区', 3, '451300'), + ('451321', '忻城县', 3, '451300'), + ('451322', '象州县', 3, '451300'), + ('451323', '武宣县', 3, '451300'), + ('451324', '金秀瑶族自治县', 3, '451300'), + ('451381', '合山市', 3, '451300'), + ('451400', '崇左市', 2, '450000'), + ('451402', '江州区', 3, '451400'), + ('451421', '扶绥县', 3, '451400'), + ('451422', '宁明县', 3, '451400'), + ('451423', '龙州县', 3, '451400'), + ('451424', '大新县', 3, '451400'), + ('451425', '天等县', 3, '451400'), + ('451481', '凭祥市', 3, '451400'), + ('460000', '海南省', 1, NULL), + ('460100', '海口市', 2, '460000'), + ('460105', '秀英区', 3, '460100'), + ('460106', '龙华区', 3, '460100'), + ('460107', '琼山区', 3, '460100'), + ('460108', '美兰区', 3, '460100'), + ('460200', '三亚市', 2, '460000'), + ('460202', '海棠区', 3, '460200'), + ('460203', '吉阳区', 3, '460200'), + ('460204', '天涯区', 3, '460200'), + ('460205', '崖州区', 3, '460200'), + ('460300', '三沙市', 2, '460000'), + ('460321', '西沙群岛', 3, '460300'), + ('460322', '南沙群岛', 3, '460300'), + ('460323', '中沙群岛的岛礁及其海域', 3, '460300'), + ('460400', '儋州市', 2, '460000'), + ('469000', '省直辖县级行政区划', 2, '460000'), + ('469001', '五指山市', 3, '469000'), + ('469002', '琼海市', 3, '469000'), + ('469005', '文昌市', 3, '469000'), + ('469006', '万宁市', 3, '469000'), + ('469007', '东方市', 3, '469000'), + ('469021', '定安县', 3, '469000'), + ('469022', '屯昌县', 3, '469000'), + ('469023', '澄迈县', 3, '469000'), + ('469024', '临高县', 3, '469000'), + ('469025', '白沙黎族自治县', 3, '469000'), + ('469026', '昌江黎族自治县', 3, '469000'), + ('469027', '乐东黎族自治县', 3, '469000'), + ('469028', '陵水黎族自治县', 3, '469000'), + ('469029', '保亭黎族苗族自治县', 3, '469000'), + ('469030', '琼中黎族苗族自治县', 3, '469000'), + ('500000', '重庆市', 1, NULL), + ('500100', '市辖区', 2, '500000'), + ('500101', '万州区', 3, '500100'), + ('500102', '涪陵区', 3, '500100'), + ('500103', '渝中区', 3, '500100'), + ('500104', '大渡口区', 3, '500100'), + ('500105', '江北区', 3, '500100'), + ('500106', '沙坪坝区', 3, '500100'), + ('500107', '九龙坡区', 3, '500100'), + ('500108', '南岸区', 3, '500100'), + ('500109', '北碚区', 3, '500100'), + ('500110', '綦江区', 3, '500100'), + ('500111', '大足区', 3, '500100'), + ('500112', '渝北区', 3, '500100'), + ('500113', '巴南区', 3, '500100'), + ('500114', '黔江区', 3, '500100'), + ('500115', '长寿区', 3, '500100'), + ('500116', '江津区', 3, '500100'), + ('500117', '合川区', 3, '500100'), + ('500118', '永川区', 3, '500100'), + ('500119', '南川区', 3, '500100'), + ('500120', '璧山区', 3, '500100'), + ('500151', '铜梁区', 3, '500100'), + ('500152', '潼南区', 3, '500100'), + ('500153', '荣昌区', 3, '500100'), + ('500154', '开州区', 3, '500100'), + ('500155', '梁平区', 3, '500100'), + ('500156', '武隆区', 3, '500100'), + ('500200', '县', 2, '500000'), + ('500229', '城口县', 3, '500200'), + ('500230', '丰都县', 3, '500200'), + ('500231', '垫江县', 3, '500200'), + ('500233', '忠县', 3, '500200'), + ('500235', '云阳县', 3, '500200'), + ('500236', '奉节县', 3, '500200'), + ('500237', '巫山县', 3, '500200'), + ('500238', '巫溪县', 3, '500200'), + ('500240', '石柱土家族自治县', 3, '500200'), + ('500241', '秀山土家族苗族自治县', 3, '500200'), + ('500242', '酉阳土家族苗族自治县', 3, '500200'), + ('500243', '彭水苗族土家族自治县', 3, '500200'), + ('510000', '四川省', 1, NULL), + ('510100', '成都市', 2, '510000'), + ('510104', '锦江区', 3, '510100'), + ('510105', '青羊区', 3, '510100'), + ('510106', '金牛区', 3, '510100'), + ('510107', '武侯区', 3, '510100'), + ('510108', '成华区', 3, '510100'), + ('510112', '龙泉驿区', 3, '510100'), + ('510113', '青白江区', 3, '510100'), + ('510114', '新都区', 3, '510100'), + ('510115', '温江区', 3, '510100'), + ('510116', '双流区', 3, '510100'), + ('510117', '郫都区', 3, '510100'), + ('510118', '新津区', 3, '510100'), + ('510121', '金堂县', 3, '510100'), + ('510129', '大邑县', 3, '510100'), + ('510131', '蒲江县', 3, '510100'), + ('510181', '都江堰市', 3, '510100'), + ('510182', '彭州市', 3, '510100'), + ('510183', '邛崃市', 3, '510100'), + ('510184', '崇州市', 3, '510100'), + ('510185', '简阳市', 3, '510100'), + ('510300', '自贡市', 2, '510000'), + ('510302', '自流井区', 3, '510300'), + ('510303', '贡井区', 3, '510300'), + ('510304', '大安区', 3, '510300'), + ('510311', '沿滩区', 3, '510300'), + ('510321', '荣县', 3, '510300'), + ('510322', '富顺县', 3, '510300'), + ('510400', '攀枝花市', 2, '510000'), + ('510402', '东区', 3, '510400'), + ('510403', '西区', 3, '510400'), + ('510411', '仁和区', 3, '510400'), + ('510421', '米易县', 3, '510400'), + ('510422', '盐边县', 3, '510400'), + ('510500', '泸州市', 2, '510000'), + ('510502', '江阳区', 3, '510500'), + ('510503', '纳溪区', 3, '510500'), + ('510504', '龙马潭区', 3, '510500'), + ('510521', '泸县', 3, '510500'), + ('510522', '合江县', 3, '510500'), + ('510524', '叙永县', 3, '510500'), + ('510525', '古蔺县', 3, '510500'), + ('510600', '德阳市', 2, '510000'), + ('510603', '旌阳区', 3, '510600'), + ('510604', '罗江区', 3, '510600'), + ('510623', '中江县', 3, '510600'), + ('510681', '广汉市', 3, '510600'), + ('510682', '什邡市', 3, '510600'), + ('510683', '绵竹市', 3, '510600'), + ('510700', '绵阳市', 2, '510000'), + ('510703', '涪城区', 3, '510700'), + ('510704', '游仙区', 3, '510700'), + ('510705', '安州区', 3, '510700'), + ('510722', '三台县', 3, '510700'), + ('510723', '盐亭县', 3, '510700'), + ('510725', '梓潼县', 3, '510700'), + ('510726', '北川羌族自治县', 3, '510700'), + ('510727', '平武县', 3, '510700'), + ('510781', '江油市', 3, '510700'), + ('510800', '广元市', 2, '510000'), + ('510802', '利州区', 3, '510800'), + ('510811', '昭化区', 3, '510800'), + ('510812', '朝天区', 3, '510800'), + ('510821', '旺苍县', 3, '510800'), + ('510822', '青川县', 3, '510800'), + ('510823', '剑阁县', 3, '510800'), + ('510824', '苍溪县', 3, '510800'), + ('510900', '遂宁市', 2, '510000'), + ('510903', '船山区', 3, '510900'), + ('510904', '安居区', 3, '510900'), + ('510921', '蓬溪县', 3, '510900'), + ('510923', '大英县', 3, '510900'), + ('510981', '射洪市', 3, '510900'), + ('511000', '内江市', 2, '510000'), + ('511002', '市中区', 3, '511000'), + ('511011', '东兴区', 3, '511000'), + ('511024', '威远县', 3, '511000'), + ('511025', '资中县', 3, '511000'), + ('511083', '隆昌市', 3, '511000'), + ('511100', '乐山市', 2, '510000'), + ('511102', '市中区', 3, '511100'), + ('511111', '沙湾区', 3, '511100'), + ('511112', '五通桥区', 3, '511100'), + ('511113', '金口河区', 3, '511100'), + ('511123', '犍为县', 3, '511100'), + ('511124', '井研县', 3, '511100'), + ('511126', '夹江县', 3, '511100'), + ('511129', '沐川县', 3, '511100'), + ('511132', '峨边彝族自治县', 3, '511100'), + ('511133', '马边彝族自治县', 3, '511100'), + ('511181', '峨眉山市', 3, '511100'), + ('511300', '南充市', 2, '510000'), + ('511302', '顺庆区', 3, '511300'), + ('511303', '高坪区', 3, '511300'), + ('511304', '嘉陵区', 3, '511300'), + ('511321', '南部县', 3, '511300'), + ('511322', '营山县', 3, '511300'), + ('511323', '蓬安县', 3, '511300'), + ('511324', '仪陇县', 3, '511300'), + ('511325', '西充县', 3, '511300'), + ('511381', '阆中市', 3, '511300'), + ('511400', '眉山市', 2, '510000'), + ('511402', '东坡区', 3, '511400'), + ('511403', '彭山区', 3, '511400'), + ('511421', '仁寿县', 3, '511400'), + ('511423', '洪雅县', 3, '511400'), + ('511424', '丹棱县', 3, '511400'), + ('511425', '青神县', 3, '511400'), + ('511500', '宜宾市', 2, '510000'), + ('511502', '翠屏区', 3, '511500'), + ('511503', '南溪区', 3, '511500'), + ('511504', '叙州区', 3, '511500'), + ('511523', '江安县', 3, '511500'), + ('511524', '长宁县', 3, '511500'), + ('511525', '高县', 3, '511500'), + ('511526', '珙县', 3, '511500'), + ('511527', '筠连县', 3, '511500'), + ('511528', '兴文县', 3, '511500'), + ('511529', '屏山县', 3, '511500'), + ('511600', '广安市', 2, '510000'), + ('511602', '广安区', 3, '511600'), + ('511603', '前锋区', 3, '511600'), + ('511621', '岳池县', 3, '511600'), + ('511622', '武胜县', 3, '511600'), + ('511623', '邻水县', 3, '511600'), + ('511681', '华蓥市', 3, '511600'), + ('511700', '达州市', 2, '510000'), + ('511702', '通川区', 3, '511700'), + ('511703', '达川区', 3, '511700'), + ('511722', '宣汉县', 3, '511700'), + ('511723', '开江县', 3, '511700'), + ('511724', '大竹县', 3, '511700'), + ('511725', '渠县', 3, '511700'), + ('511781', '万源市', 3, '511700'), + ('511800', '雅安市', 2, '510000'), + ('511802', '雨城区', 3, '511800'), + ('511803', '名山区', 3, '511800'), + ('511822', '荥经县', 3, '511800'), + ('511823', '汉源县', 3, '511800'), + ('511824', '石棉县', 3, '511800'), + ('511825', '天全县', 3, '511800'), + ('511826', '芦山县', 3, '511800'), + ('511827', '宝兴县', 3, '511800'), + ('511900', '巴中市', 2, '510000'), + ('511902', '巴州区', 3, '511900'), + ('511903', '恩阳区', 3, '511900'), + ('511921', '通江县', 3, '511900'), + ('511922', '南江县', 3, '511900'), + ('511923', '平昌县', 3, '511900'), + ('512000', '资阳市', 2, '510000'), + ('512002', '雁江区', 3, '512000'), + ('512021', '安岳县', 3, '512000'), + ('512022', '乐至县', 3, '512000'), + ('513200', '阿坝藏族羌族自治州', 2, '510000'), + ('513201', '马尔康市', 3, '513200'), + ('513221', '汶川县', 3, '513200'), + ('513222', '理县', 3, '513200'), + ('513223', '茂县', 3, '513200'), + ('513224', '松潘县', 3, '513200'), + ('513225', '九寨沟县', 3, '513200'), + ('513226', '金川县', 3, '513200'), + ('513227', '小金县', 3, '513200'), + ('513228', '黑水县', 3, '513200'), + ('513230', '壤塘县', 3, '513200'), + ('513231', '阿坝县', 3, '513200'), + ('513232', '若尔盖县', 3, '513200'), + ('513233', '红原县', 3, '513200'), + ('513300', '甘孜藏族自治州', 2, '510000'), + ('513301', '康定市', 3, '513300'), + ('513322', '泸定县', 3, '513300'), + ('513323', '丹巴县', 3, '513300'), + ('513324', '九龙县', 3, '513300'), + ('513325', '雅江县', 3, '513300'), + ('513326', '道孚县', 3, '513300'), + ('513327', '炉霍县', 3, '513300'), + ('513328', '甘孜县', 3, '513300'), + ('513329', '新龙县', 3, '513300'), + ('513330', '德格县', 3, '513300'), + ('513331', '白玉县', 3, '513300'), + ('513332', '石渠县', 3, '513300'), + ('513333', '色达县', 3, '513300'), + ('513334', '理塘县', 3, '513300'), + ('513335', '巴塘县', 3, '513300'), + ('513336', '乡城县', 3, '513300'), + ('513337', '稻城县', 3, '513300'), + ('513338', '得荣县', 3, '513300'), + ('513400', '凉山彝族自治州', 2, '510000'), + ('513401', '西昌市', 3, '513400'), + ('513402', '会理市', 3, '513400'), + ('513422', '木里藏族自治县', 3, '513400'), + ('513423', '盐源县', 3, '513400'), + ('513424', '德昌县', 3, '513400'), + ('513426', '会东县', 3, '513400'), + ('513427', '宁南县', 3, '513400'), + ('513428', '普格县', 3, '513400'), + ('513429', '布拖县', 3, '513400'), + ('513430', '金阳县', 3, '513400'), + ('513431', '昭觉县', 3, '513400'), + ('513432', '喜德县', 3, '513400'), + ('513433', '冕宁县', 3, '513400'), + ('513434', '越西县', 3, '513400'), + ('513435', '甘洛县', 3, '513400'), + ('513436', '美姑县', 3, '513400'), + ('513437', '雷波县', 3, '513400'), + ('520000', '贵州省', 1, NULL), + ('520100', '贵阳市', 2, '520000'), + ('520102', '南明区', 3, '520100'), + ('520103', '云岩区', 3, '520100'), + ('520111', '花溪区', 3, '520100'), + ('520112', '乌当区', 3, '520100'), + ('520113', '白云区', 3, '520100'), + ('520115', '观山湖区', 3, '520100'), + ('520121', '开阳县', 3, '520100'), + ('520122', '息烽县', 3, '520100'), + ('520123', '修文县', 3, '520100'), + ('520181', '清镇市', 3, '520100'), + ('520200', '六盘水市', 2, '520000'), + ('520201', '钟山区', 3, '520200'), + ('520203', '六枝特区', 3, '520200'), + ('520204', '水城区', 3, '520200'), + ('520281', '盘州市', 3, '520200'), + ('520300', '遵义市', 2, '520000'), + ('520302', '红花岗区', 3, '520300'), + ('520303', '汇川区', 3, '520300'), + ('520304', '播州区', 3, '520300'), + ('520322', '桐梓县', 3, '520300'), + ('520323', '绥阳县', 3, '520300'), + ('520324', '正安县', 3, '520300'), + ('520325', '道真仡佬族苗族自治县', 3, '520300'), + ('520326', '务川仡佬族苗族自治县', 3, '520300'), + ('520327', '凤冈县', 3, '520300'), + ('520328', '湄潭县', 3, '520300'), + ('520329', '余庆县', 3, '520300'), + ('520330', '习水县', 3, '520300'), + ('520381', '赤水市', 3, '520300'), + ('520382', '仁怀市', 3, '520300'), + ('520400', '安顺市', 2, '520000'), + ('520402', '西秀区', 3, '520400'), + ('520403', '平坝区', 3, '520400'), + ('520422', '普定县', 3, '520400'), + ('520423', '镇宁布依族苗族自治县', 3, '520400'), + ('520424', '关岭布依族苗族自治县', 3, '520400'), + ('520425', '紫云苗族布依族自治县', 3, '520400'), + ('520500', '毕节市', 2, '520000'), + ('520502', '七星关区', 3, '520500'), + ('520521', '大方县', 3, '520500'), + ('520523', '金沙县', 3, '520500'), + ('520524', '织金县', 3, '520500'), + ('520525', '纳雍县', 3, '520500'), + ('520526', '威宁彝族回族苗族自治县', 3, '520500'), + ('520527', '赫章县', 3, '520500'), + ('520581', '黔西市', 3, '520500'), + ('520600', '铜仁市', 2, '520000'), + ('520602', '碧江区', 3, '520600'), + ('520603', '万山区', 3, '520600'), + ('520621', '江口县', 3, '520600'), + ('520622', '玉屏侗族自治县', 3, '520600'), + ('520623', '石阡县', 3, '520600'), + ('520624', '思南县', 3, '520600'), + ('520625', '印江土家族苗族自治县', 3, '520600'), + ('520626', '德江县', 3, '520600'), + ('520627', '沿河土家族自治县', 3, '520600'), + ('520628', '松桃苗族自治县', 3, '520600'), + ('522300', '黔西南布依族苗族自治州', 2, '520000'), + ('522301', '兴义市', 3, '522300'), + ('522302', '兴仁市', 3, '522300'), + ('522323', '普安县', 3, '522300'), + ('522324', '晴隆县', 3, '522300'), + ('522325', '贞丰县', 3, '522300'), + ('522326', '望谟县', 3, '522300'), + ('522327', '册亨县', 3, '522300'), + ('522328', '安龙县', 3, '522300'), + ('522600', '黔东南苗族侗族自治州', 2, '520000'), + ('522601', '凯里市', 3, '522600'), + ('522622', '黄平县', 3, '522600'), + ('522623', '施秉县', 3, '522600'), + ('522624', '三穗县', 3, '522600'), + ('522625', '镇远县', 3, '522600'), + ('522626', '岑巩县', 3, '522600'), + ('522627', '天柱县', 3, '522600'), + ('522628', '锦屏县', 3, '522600'), + ('522629', '剑河县', 3, '522600'), + ('522630', '台江县', 3, '522600'), + ('522631', '黎平县', 3, '522600'), + ('522632', '榕江县', 3, '522600'), + ('522633', '从江县', 3, '522600'), + ('522634', '雷山县', 3, '522600'), + ('522635', '麻江县', 3, '522600'), + ('522636', '丹寨县', 3, '522600'), + ('522700', '黔南布依族苗族自治州', 2, '520000'), + ('522701', '都匀市', 3, '522700'), + ('522702', '福泉市', 3, '522700'), + ('522722', '荔波县', 3, '522700'), + ('522723', '贵定县', 3, '522700'), + ('522725', '瓮安县', 3, '522700'), + ('522726', '独山县', 3, '522700'), + ('522727', '平塘县', 3, '522700'), + ('522728', '罗甸县', 3, '522700'), + ('522729', '长顺县', 3, '522700'), + ('522730', '龙里县', 3, '522700'), + ('522731', '惠水县', 3, '522700'), + ('522732', '三都水族自治县', 3, '522700'), + ('530000', '云南省', 1, NULL), + ('530100', '昆明市', 2, '530000'), + ('530102', '五华区', 3, '530100'), + ('530103', '盘龙区', 3, '530100'), + ('530111', '官渡区', 3, '530100'), + ('530112', '西山区', 3, '530100'), + ('530113', '东川区', 3, '530100'), + ('530114', '呈贡区', 3, '530100'), + ('530115', '晋宁区', 3, '530100'), + ('530124', '富民县', 3, '530100'), + ('530125', '宜良县', 3, '530100'), + ('530126', '石林彝族自治县', 3, '530100'), + ('530127', '嵩明县', 3, '530100'), + ('530128', '禄劝彝族苗族自治县', 3, '530100'), + ('530129', '寻甸回族彝族自治县', 3, '530100'), + ('530181', '安宁市', 3, '530100'), + ('530300', '曲靖市', 2, '530000'), + ('530302', '麒麟区', 3, '530300'), + ('530303', '沾益区', 3, '530300'), + ('530304', '马龙区', 3, '530300'), + ('530322', '陆良县', 3, '530300'), + ('530323', '师宗县', 3, '530300'), + ('530324', '罗平县', 3, '530300'), + ('530325', '富源县', 3, '530300'), + ('530326', '会泽县', 3, '530300'), + ('530381', '宣威市', 3, '530300'), + ('530400', '玉溪市', 2, '530000'), + ('530402', '红塔区', 3, '530400'), + ('530403', '江川区', 3, '530400'), + ('530423', '通海县', 3, '530400'), + ('530424', '华宁县', 3, '530400'), + ('530425', '易门县', 3, '530400'), + ('530426', '峨山彝族自治县', 3, '530400'), + ('530427', '新平彝族傣族自治县', 3, '530400'), + ('530428', '元江哈尼族彝族傣族自治县', 3, '530400'), + ('530481', '澄江市', 3, '530400'), + ('530500', '保山市', 2, '530000'), + ('530502', '隆阳区', 3, '530500'), + ('530521', '施甸县', 3, '530500'), + ('530523', '龙陵县', 3, '530500'), + ('530524', '昌宁县', 3, '530500'), + ('530581', '腾冲市', 3, '530500'), + ('530600', '昭通市', 2, '530000'), + ('530602', '昭阳区', 3, '530600'), + ('530621', '鲁甸县', 3, '530600'), + ('530622', '巧家县', 3, '530600'), + ('530623', '盐津县', 3, '530600'), + ('530624', '大关县', 3, '530600'), + ('530625', '永善县', 3, '530600'), + ('530626', '绥江县', 3, '530600'), + ('530627', '镇雄县', 3, '530600'), + ('530628', '彝良县', 3, '530600'), + ('530629', '威信县', 3, '530600'), + ('530681', '水富市', 3, '530600'), + ('530700', '丽江市', 2, '530000'), + ('530702', '古城区', 3, '530700'), + ('530721', '玉龙纳西族自治县', 3, '530700'), + ('530722', '永胜县', 3, '530700'), + ('530723', '华坪县', 3, '530700'), + ('530724', '宁蒗彝族自治县', 3, '530700'), + ('530800', '普洱市', 2, '530000'), + ('530802', '思茅区', 3, '530800'), + ('530821', '宁洱哈尼族彝族自治县', 3, '530800'), + ('530822', '墨江哈尼族自治县', 3, '530800'), + ('530823', '景东彝族自治县', 3, '530800'), + ('530824', '景谷傣族彝族自治县', 3, '530800'), + ('530825', '镇沅彝族哈尼族拉祜族自治县', 3, '530800'), + ('530826', '江城哈尼族彝族自治县', 3, '530800'), + ('530827', '孟连傣族拉祜族佤族自治县', 3, '530800'), + ('530828', '澜沧拉祜族自治县', 3, '530800'), + ('530829', '西盟佤族自治县', 3, '530800'), + ('530900', '临沧市', 2, '530000'), + ('530902', '临翔区', 3, '530900'), + ('530921', '凤庆县', 3, '530900'), + ('530922', '云县', 3, '530900'), + ('530923', '永德县', 3, '530900'), + ('530924', '镇康县', 3, '530900'), + ('530925', '双江拉祜族佤族布朗族傣族自治县', 3, '530900'), + ('530926', '耿马傣族佤族自治县', 3, '530900'), + ('530927', '沧源佤族自治县', 3, '530900'), + ('532300', '楚雄彝族自治州', 2, '530000'), + ('532301', '楚雄市', 3, '532300'), + ('532302', '禄丰市', 3, '532300'), + ('532322', '双柏县', 3, '532300'), + ('532323', '牟定县', 3, '532300'), + ('532324', '南华县', 3, '532300'), + ('532325', '姚安县', 3, '532300'), + ('532326', '大姚县', 3, '532300'), + ('532327', '永仁县', 3, '532300'), + ('532328', '元谋县', 3, '532300'), + ('532329', '武定县', 3, '532300'), + ('532500', '红河哈尼族彝族自治州', 2, '530000'), + ('532501', '个旧市', 3, '532500'), + ('532502', '开远市', 3, '532500'), + ('532503', '蒙自市', 3, '532500'), + ('532504', '弥勒市', 3, '532500'), + ('532523', '屏边苗族自治县', 3, '532500'), + ('532524', '建水县', 3, '532500'), + ('532525', '石屏县', 3, '532500'), + ('532527', '泸西县', 3, '532500'), + ('532528', '元阳县', 3, '532500'), + ('532529', '红河县', 3, '532500'), + ('532530', '金平苗族瑶族傣族自治县', 3, '532500'), + ('532531', '绿春县', 3, '532500'), + ('532532', '河口瑶族自治县', 3, '532500'), + ('532600', '文山壮族苗族自治州', 2, '530000'), + ('532601', '文山市', 3, '532600'), + ('532622', '砚山县', 3, '532600'), + ('532623', '西畴县', 3, '532600'), + ('532624', '麻栗坡县', 3, '532600'), + ('532625', '马关县', 3, '532600'), + ('532626', '丘北县', 3, '532600'), + ('532627', '广南县', 3, '532600'), + ('532628', '富宁县', 3, '532600'), + ('532800', '西双版纳傣族自治州', 2, '530000'), + ('532801', '景洪市', 3, '532800'), + ('532822', '勐海县', 3, '532800'), + ('532823', '勐腊县', 3, '532800'), + ('532900', '大理白族自治州', 2, '530000'), + ('532901', '大理市', 3, '532900'), + ('532922', '漾濞彝族自治县', 3, '532900'), + ('532923', '祥云县', 3, '532900'), + ('532924', '宾川县', 3, '532900'), + ('532925', '弥渡县', 3, '532900'), + ('532926', '南涧彝族自治县', 3, '532900'), + ('532927', '巍山彝族回族自治县', 3, '532900'), + ('532928', '永平县', 3, '532900'), + ('532929', '云龙县', 3, '532900'), + ('532930', '洱源县', 3, '532900'), + ('532931', '剑川县', 3, '532900'), + ('532932', '鹤庆县', 3, '532900'), + ('533100', '德宏傣族景颇族自治州', 2, '530000'), + ('533102', '瑞丽市', 3, '533100'), + ('533103', '芒市', 3, '533100'), + ('533122', '梁河县', 3, '533100'), + ('533123', '盈江县', 3, '533100'), + ('533124', '陇川县', 3, '533100'), + ('533300', '怒江傈僳族自治州', 2, '530000'), + ('533301', '泸水市', 3, '533300'), + ('533323', '福贡县', 3, '533300'), + ('533324', '贡山独龙族怒族自治县', 3, '533300'), + ('533325', '兰坪白族普米族自治县', 3, '533300'), + ('533400', '迪庆藏族自治州', 2, '530000'), + ('533401', '香格里拉市', 3, '533400'), + ('533422', '德钦县', 3, '533400'), + ('533423', '维西傈僳族自治县', 3, '533400'), + ('540000', '西藏自治区', 1, NULL), + ('540100', '拉萨市', 2, '540000'), + ('540102', '城关区', 3, '540100'), + ('540103', '堆龙德庆区', 3, '540100'), + ('540104', '达孜区', 3, '540100'), + ('540121', '林周县', 3, '540100'), + ('540122', '当雄县', 3, '540100'), + ('540123', '尼木县', 3, '540100'), + ('540124', '曲水县', 3, '540100'), + ('540127', '墨竹工卡县', 3, '540100'), + ('540171', '格尔木藏青工业园区', 3, '540100'), + ('540172', '拉萨经济技术开发区', 3, '540100'), + ('540173', '西藏文化旅游创意园区', 3, '540100'), + ('540174', '达孜工业园区', 3, '540100'), + ('540200', '日喀则市', 2, '540000'), + ('540202', '桑珠孜区', 3, '540200'), + ('540221', '南木林县', 3, '540200'), + ('540222', '江孜县', 3, '540200'), + ('540223', '定日县', 3, '540200'), + ('540224', '萨迦县', 3, '540200'), + ('540225', '拉孜县', 3, '540200'), + ('540226', '昂仁县', 3, '540200'), + ('540227', '谢通门县', 3, '540200'), + ('540228', '白朗县', 3, '540200'), + ('540229', '仁布县', 3, '540200'), + ('540230', '康马县', 3, '540200'), + ('540231', '定结县', 3, '540200'), + ('540232', '仲巴县', 3, '540200'), + ('540233', '亚东县', 3, '540200'), + ('540234', '吉隆县', 3, '540200'), + ('540235', '聂拉木县', 3, '540200'), + ('540236', '萨嘎县', 3, '540200'), + ('540237', '岗巴县', 3, '540200'), + ('540300', '昌都市', 2, '540000'), + ('540302', '卡若区', 3, '540300'), + ('540321', '江达县', 3, '540300'), + ('540322', '贡觉县', 3, '540300'), + ('540323', '类乌齐县', 3, '540300'), + ('540324', '丁青县', 3, '540300'), + ('540325', '察雅县', 3, '540300'), + ('540326', '八宿县', 3, '540300'), + ('540327', '左贡县', 3, '540300'), + ('540328', '芒康县', 3, '540300'), + ('540329', '洛隆县', 3, '540300'), + ('540330', '边坝县', 3, '540300'), + ('540400', '林芝市', 2, '540000'), + ('540402', '巴宜区', 3, '540400'), + ('540421', '工布江达县', 3, '540400'), + ('540423', '墨脱县', 3, '540400'), + ('540424', '波密县', 3, '540400'), + ('540425', '察隅县', 3, '540400'), + ('540426', '朗县', 3, '540400'), + ('540481', '米林市', 3, '540400'), + ('540500', '山南市', 2, '540000'), + ('540502', '乃东区', 3, '540500'), + ('540521', '扎囊县', 3, '540500'), + ('540522', '贡嘎县', 3, '540500'), + ('540523', '桑日县', 3, '540500'), + ('540524', '琼结县', 3, '540500'), + ('540525', '曲松县', 3, '540500'), + ('540526', '措美县', 3, '540500'), + ('540527', '洛扎县', 3, '540500'), + ('540528', '加查县', 3, '540500'), + ('540529', '隆子县', 3, '540500'), + ('540531', '浪卡子县', 3, '540500'), + ('540581', '错那市', 3, '540500'), + ('540600', '那曲市', 2, '540000'), + ('540602', '色尼区', 3, '540600'), + ('540621', '嘉黎县', 3, '540600'), + ('540622', '比如县', 3, '540600'), + ('540623', '聂荣县', 3, '540600'), + ('540624', '安多县', 3, '540600'), + ('540625', '申扎县', 3, '540600'), + ('540626', '索县', 3, '540600'), + ('540627', '班戈县', 3, '540600'), + ('540628', '巴青县', 3, '540600'), + ('540629', '尼玛县', 3, '540600'), + ('540630', '双湖县', 3, '540600'), + ('542500', '阿里地区', 2, '540000'), + ('542521', '普兰县', 3, '542500'), + ('542522', '札达县', 3, '542500'), + ('542523', '噶尔县', 3, '542500'), + ('542524', '日土县', 3, '542500'), + ('542525', '革吉县', 3, '542500'), + ('542526', '改则县', 3, '542500'), + ('542527', '措勤县', 3, '542500'), + ('610000', '陕西省', 1, NULL), + ('610100', '西安市', 2, '610000'), + ('610102', '新城区', 3, '610100'), + ('610103', '碑林区', 3, '610100'), + ('610104', '莲湖区', 3, '610100'), + ('610111', '灞桥区', 3, '610100'), + ('610112', '未央区', 3, '610100'), + ('610113', '雁塔区', 3, '610100'), + ('610114', '阎良区', 3, '610100'), + ('610115', '临潼区', 3, '610100'), + ('610116', '长安区', 3, '610100'), + ('610117', '高陵区', 3, '610100'), + ('610118', '鄠邑区', 3, '610100'), + ('610122', '蓝田县', 3, '610100'), + ('610124', '周至县', 3, '610100'), + ('610200', '铜川市', 2, '610000'), + ('610202', '王益区', 3, '610200'), + ('610203', '印台区', 3, '610200'), + ('610204', '耀州区', 3, '610200'), + ('610222', '宜君县', 3, '610200'), + ('610300', '宝鸡市', 2, '610000'), + ('610302', '渭滨区', 3, '610300'), + ('610303', '金台区', 3, '610300'), + ('610304', '陈仓区', 3, '610300'), + ('610305', '凤翔区', 3, '610300'), + ('610323', '岐山县', 3, '610300'), + ('610324', '扶风县', 3, '610300'), + ('610326', '眉县', 3, '610300'), + ('610327', '陇县', 3, '610300'), + ('610328', '千阳县', 3, '610300'), + ('610329', '麟游县', 3, '610300'), + ('610330', '凤县', 3, '610300'), + ('610331', '太白县', 3, '610300'), + ('610400', '咸阳市', 2, '610000'), + ('610402', '秦都区', 3, '610400'), + ('610403', '杨陵区', 3, '610400'), + ('610404', '渭城区', 3, '610400'), + ('610422', '三原县', 3, '610400'), + ('610423', '泾阳县', 3, '610400'), + ('610424', '乾县', 3, '610400'), + ('610425', '礼泉县', 3, '610400'), + ('610426', '永寿县', 3, '610400'), + ('610428', '长武县', 3, '610400'), + ('610429', '旬邑县', 3, '610400'), + ('610430', '淳化县', 3, '610400'), + ('610431', '武功县', 3, '610400'), + ('610481', '兴平市', 3, '610400'), + ('610482', '彬州市', 3, '610400'), + ('610500', '渭南市', 2, '610000'), + ('610502', '临渭区', 3, '610500'), + ('610503', '华州区', 3, '610500'), + ('610522', '潼关县', 3, '610500'), + ('610523', '大荔县', 3, '610500'), + ('610524', '合阳县', 3, '610500'), + ('610525', '澄城县', 3, '610500'), + ('610526', '蒲城县', 3, '610500'), + ('610527', '白水县', 3, '610500'), + ('610528', '富平县', 3, '610500'), + ('610581', '韩城市', 3, '610500'), + ('610582', '华阴市', 3, '610500'), + ('610600', '延安市', 2, '610000'), + ('610602', '宝塔区', 3, '610600'), + ('610603', '安塞区', 3, '610600'), + ('610621', '延长县', 3, '610600'), + ('610622', '延川县', 3, '610600'), + ('610625', '志丹县', 3, '610600'), + ('610626', '吴起县', 3, '610600'), + ('610627', '甘泉县', 3, '610600'), + ('610628', '富县', 3, '610600'), + ('610629', '洛川县', 3, '610600'), + ('610630', '宜川县', 3, '610600'), + ('610631', '黄龙县', 3, '610600'), + ('610632', '黄陵县', 3, '610600'), + ('610681', '子长市', 3, '610600'), + ('610700', '汉中市', 2, '610000'), + ('610702', '汉台区', 3, '610700'), + ('610703', '南郑区', 3, '610700'), + ('610722', '城固县', 3, '610700'), + ('610723', '洋县', 3, '610700'), + ('610724', '西乡县', 3, '610700'), + ('610725', '勉县', 3, '610700'), + ('610726', '宁强县', 3, '610700'), + ('610727', '略阳县', 3, '610700'), + ('610728', '镇巴县', 3, '610700'), + ('610729', '留坝县', 3, '610700'), + ('610730', '佛坪县', 3, '610700'), + ('610800', '榆林市', 2, '610000'), + ('610802', '榆阳区', 3, '610800'), + ('610803', '横山区', 3, '610800'), + ('610822', '府谷县', 3, '610800'), + ('610824', '靖边县', 3, '610800'), + ('610825', '定边县', 3, '610800'), + ('610826', '绥德县', 3, '610800'), + ('610827', '米脂县', 3, '610800'), + ('610828', '佳县', 3, '610800'), + ('610829', '吴堡县', 3, '610800'), + ('610830', '清涧县', 3, '610800'), + ('610831', '子洲县', 3, '610800'), + ('610881', '神木市', 3, '610800'), + ('610900', '安康市', 2, '610000'), + ('610902', '汉滨区', 3, '610900'), + ('610921', '汉阴县', 3, '610900'), + ('610922', '石泉县', 3, '610900'), + ('610923', '宁陕县', 3, '610900'), + ('610924', '紫阳县', 3, '610900'), + ('610925', '岚皋县', 3, '610900'), + ('610926', '平利县', 3, '610900'), + ('610927', '镇坪县', 3, '610900'), + ('610929', '白河县', 3, '610900'), + ('610981', '旬阳市', 3, '610900'), + ('611000', '商洛市', 2, '610000'), + ('611002', '商州区', 3, '611000'), + ('611021', '洛南县', 3, '611000'), + ('611022', '丹凤县', 3, '611000'), + ('611023', '商南县', 3, '611000'), + ('611024', '山阳县', 3, '611000'), + ('611025', '镇安县', 3, '611000'), + ('611026', '柞水县', 3, '611000'), + ('620000', '甘肃省', 1, NULL), + ('620100', '兰州市', 2, '620000'), + ('620102', '城关区', 3, '620100'), + ('620103', '七里河区', 3, '620100'), + ('620104', '西固区', 3, '620100'), + ('620105', '安宁区', 3, '620100'), + ('620111', '红古区', 3, '620100'), + ('620121', '永登县', 3, '620100'), + ('620122', '皋兰县', 3, '620100'), + ('620123', '榆中县', 3, '620100'), + ('620171', '兰州新区', 3, '620100'), + ('620200', '嘉峪关市', 2, '620000'), + ('620300', '金昌市', 2, '620000'), + ('620302', '金川区', 3, '620300'), + ('620321', '永昌县', 3, '620300'), + ('620400', '白银市', 2, '620000'), + ('620402', '白银区', 3, '620400'), + ('620403', '平川区', 3, '620400'), + ('620421', '靖远县', 3, '620400'), + ('620422', '会宁县', 3, '620400'), + ('620423', '景泰县', 3, '620400'), + ('620500', '天水市', 2, '620000'), + ('620502', '秦州区', 3, '620500'), + ('620503', '麦积区', 3, '620500'), + ('620521', '清水县', 3, '620500'), + ('620522', '秦安县', 3, '620500'), + ('620523', '甘谷县', 3, '620500'), + ('620524', '武山县', 3, '620500'), + ('620525', '张家川回族自治县', 3, '620500'), + ('620600', '武威市', 2, '620000'), + ('620602', '凉州区', 3, '620600'), + ('620621', '民勤县', 3, '620600'), + ('620622', '古浪县', 3, '620600'), + ('620623', '天祝藏族自治县', 3, '620600'), + ('620700', '张掖市', 2, '620000'), + ('620702', '甘州区', 3, '620700'), + ('620721', '肃南裕固族自治县', 3, '620700'), + ('620722', '民乐县', 3, '620700'), + ('620723', '临泽县', 3, '620700'), + ('620724', '高台县', 3, '620700'), + ('620725', '山丹县', 3, '620700'), + ('620800', '平凉市', 2, '620000'), + ('620802', '崆峒区', 3, '620800'), + ('620821', '泾川县', 3, '620800'), + ('620822', '灵台县', 3, '620800'), + ('620823', '崇信县', 3, '620800'), + ('620825', '庄浪县', 3, '620800'), + ('620826', '静宁县', 3, '620800'), + ('620881', '华亭市', 3, '620800'), + ('620900', '酒泉市', 2, '620000'), + ('620902', '肃州区', 3, '620900'), + ('620921', '金塔县', 3, '620900'), + ('620922', '瓜州县', 3, '620900'), + ('620923', '肃北蒙古族自治县', 3, '620900'), + ('620924', '阿克塞哈萨克族自治县', 3, '620900'), + ('620981', '玉门市', 3, '620900'), + ('620982', '敦煌市', 3, '620900'), + ('621000', '庆阳市', 2, '620000'), + ('621002', '西峰区', 3, '621000'), + ('621021', '庆城县', 3, '621000'), + ('621022', '环县', 3, '621000'), + ('621023', '华池县', 3, '621000'), + ('621024', '合水县', 3, '621000'), + ('621025', '正宁县', 3, '621000'), + ('621026', '宁县', 3, '621000'), + ('621027', '镇原县', 3, '621000'), + ('621100', '定西市', 2, '620000'), + ('621102', '安定区', 3, '621100'), + ('621121', '通渭县', 3, '621100'), + ('621122', '陇西县', 3, '621100'), + ('621123', '渭源县', 3, '621100'), + ('621124', '临洮县', 3, '621100'), + ('621125', '漳县', 3, '621100'), + ('621126', '岷县', 3, '621100'), + ('621200', '陇南市', 2, '620000'), + ('621202', '武都区', 3, '621200'), + ('621221', '成县', 3, '621200'), + ('621222', '文县', 3, '621200'), + ('621223', '宕昌县', 3, '621200'), + ('621224', '康县', 3, '621200'), + ('621225', '西和县', 3, '621200'), + ('621226', '礼县', 3, '621200'), + ('621227', '徽县', 3, '621200'), + ('621228', '两当县', 3, '621200'), + ('622900', '临夏回族自治州', 2, '620000'), + ('622901', '临夏市', 3, '622900'), + ('622921', '临夏县', 3, '622900'), + ('622922', '康乐县', 3, '622900'), + ('622923', '永靖县', 3, '622900'), + ('622924', '广河县', 3, '622900'), + ('622925', '和政县', 3, '622900'), + ('622926', '东乡族自治县', 3, '622900'), + ('622927', '积石山保安族东乡族撒拉族自治县', 3, '622900'), + ('623000', '甘南藏族自治州', 2, '620000'), + ('623001', '合作市', 3, '623000'), + ('623021', '临潭县', 3, '623000'), + ('623022', '卓尼县', 3, '623000'), + ('623023', '舟曲县', 3, '623000'), + ('623024', '迭部县', 3, '623000'), + ('623025', '玛曲县', 3, '623000'), + ('623026', '碌曲县', 3, '623000'), + ('623027', '夏河县', 3, '623000'), + ('630000', '青海省', 1, NULL), + ('630100', '西宁市', 2, '630000'), + ('630102', '城东区', 3, '630100'), + ('630103', '城中区', 3, '630100'), + ('630104', '城西区', 3, '630100'), + ('630105', '城北区', 3, '630100'), + ('630106', '湟中区', 3, '630100'), + ('630121', '大通回族土族自治县', 3, '630100'), + ('630123', '湟源县', 3, '630100'), + ('630200', '海东市', 2, '630000'), + ('630202', '乐都区', 3, '630200'), + ('630203', '平安区', 3, '630200'), + ('630222', '民和回族土族自治县', 3, '630200'), + ('630223', '互助土族自治县', 3, '630200'), + ('630224', '化隆回族自治县', 3, '630200'), + ('630225', '循化撒拉族自治县', 3, '630200'), + ('632200', '海北藏族自治州', 2, '630000'), + ('632221', '门源回族自治县', 3, '632200'), + ('632222', '祁连县', 3, '632200'), + ('632223', '海晏县', 3, '632200'), + ('632224', '刚察县', 3, '632200'), + ('632300', '黄南藏族自治州', 2, '630000'), + ('632301', '同仁市', 3, '632300'), + ('632322', '尖扎县', 3, '632300'), + ('632323', '泽库县', 3, '632300'), + ('632324', '河南蒙古族自治县', 3, '632300'), + ('632500', '海南藏族自治州', 2, '630000'), + ('632521', '共和县', 3, '632500'), + ('632522', '同德县', 3, '632500'), + ('632523', '贵德县', 3, '632500'), + ('632524', '兴海县', 3, '632500'), + ('632525', '贵南县', 3, '632500'), + ('632600', '果洛藏族自治州', 2, '630000'), + ('632621', '玛沁县', 3, '632600'), + ('632622', '班玛县', 3, '632600'), + ('632623', '甘德县', 3, '632600'), + ('632624', '达日县', 3, '632600'), + ('632625', '久治县', 3, '632600'), + ('632626', '玛多县', 3, '632600'), + ('632700', '玉树藏族自治州', 2, '630000'), + ('632701', '玉树市', 3, '632700'), + ('632722', '杂多县', 3, '632700'), + ('632723', '称多县', 3, '632700'), + ('632724', '治多县', 3, '632700'), + ('632725', '囊谦县', 3, '632700'), + ('632726', '曲麻莱县', 3, '632700'), + ('632800', '海西蒙古族藏族自治州', 2, '630000'), + ('632801', '格尔木市', 3, '632800'), + ('632802', '德令哈市', 3, '632800'), + ('632803', '茫崖市', 3, '632800'), + ('632821', '乌兰县', 3, '632800'), + ('632822', '都兰县', 3, '632800'), + ('632823', '天峻县', 3, '632800'), + ('632857', '大柴旦行政委员会', 3, '632800'), + ('640000', '宁夏回族自治区', 1, NULL), + ('640100', '银川市', 2, '640000'), + ('640104', '兴庆区', 3, '640100'), + ('640105', '西夏区', 3, '640100'), + ('640106', '金凤区', 3, '640100'), + ('640121', '永宁县', 3, '640100'), + ('640122', '贺兰县', 3, '640100'), + ('640181', '灵武市', 3, '640100'), + ('640200', '石嘴山市', 2, '640000'), + ('640202', '大武口区', 3, '640200'), + ('640205', '惠农区', 3, '640200'), + ('640221', '平罗县', 3, '640200'), + ('640300', '吴忠市', 2, '640000'), + ('640302', '利通区', 3, '640300'), + ('640303', '红寺堡区', 3, '640300'), + ('640323', '盐池县', 3, '640300'), + ('640324', '同心县', 3, '640300'), + ('640381', '青铜峡市', 3, '640300'), + ('640400', '固原市', 2, '640000'), + ('640402', '原州区', 3, '640400'), + ('640422', '西吉县', 3, '640400'), + ('640423', '隆德县', 3, '640400'), + ('640424', '泾源县', 3, '640400'), + ('640425', '彭阳县', 3, '640400'), + ('640500', '中卫市', 2, '640000'), + ('640502', '沙坡头区', 3, '640500'), + ('640521', '中宁县', 3, '640500'), + ('640522', '海原县', 3, '640500'), + ('650000', '新疆维吾尔自治区', 1, NULL), + ('650100', '乌鲁木齐市', 2, '650000'), + ('650102', '天山区', 3, '650100'), + ('650103', '沙依巴克区', 3, '650100'), + ('650104', '新市区', 3, '650100'), + ('650105', '水磨沟区', 3, '650100'), + ('650106', '头屯河区', 3, '650100'), + ('650107', '达坂城区', 3, '650100'), + ('650109', '米东区', 3, '650100'), + ('650121', '乌鲁木齐县', 3, '650100'), + ('650200', '克拉玛依市', 2, '650000'), + ('650202', '独山子区', 3, '650200'), + ('650203', '克拉玛依区', 3, '650200'), + ('650204', '白碱滩区', 3, '650200'), + ('650205', '乌尔禾区', 3, '650200'), + ('650400', '吐鲁番市', 2, '650000'), + ('650402', '高昌区', 3, '650400'), + ('650421', '鄯善县', 3, '650400'), + ('650422', '托克逊县', 3, '650400'), + ('650500', '哈密市', 2, '650000'), + ('650502', '伊州区', 3, '650500'), + ('650521', '巴里坤哈萨克自治县', 3, '650500'), + ('650522', '伊吾县', 3, '650500'), + ('652300', '昌吉回族自治州', 2, '650000'), + ('652301', '昌吉市', 3, '652300'), + ('652302', '阜康市', 3, '652300'), + ('652323', '呼图壁县', 3, '652300'), + ('652324', '玛纳斯县', 3, '652300'), + ('652325', '奇台县', 3, '652300'), + ('652327', '吉木萨尔县', 3, '652300'), + ('652328', '木垒哈萨克自治县', 3, '652300'), + ('652700', '博尔塔拉蒙古自治州', 2, '650000'), + ('652701', '博乐市', 3, '652700'), + ('652702', '阿拉山口市', 3, '652700'), + ('652722', '精河县', 3, '652700'), + ('652723', '温泉县', 3, '652700'), + ('652800', '巴音郭楞蒙古自治州', 2, '650000'), + ('652801', '库尔勒市', 3, '652800'), + ('652822', '轮台县', 3, '652800'), + ('652823', '尉犁县', 3, '652800'), + ('652824', '若羌县', 3, '652800'), + ('652825', '且末县', 3, '652800'), + ('652826', '焉耆回族自治县', 3, '652800'), + ('652827', '和静县', 3, '652800'), + ('652828', '和硕县', 3, '652800'), + ('652829', '博湖县', 3, '652800'), + ('652900', '阿克苏地区', 2, '650000'), + ('652901', '阿克苏市', 3, '652900'), + ('652902', '库车市', 3, '652900'), + ('652922', '温宿县', 3, '652900'), + ('652924', '沙雅县', 3, '652900'), + ('652925', '新和县', 3, '652900'), + ('652926', '拜城县', 3, '652900'), + ('652927', '乌什县', 3, '652900'), + ('652928', '阿瓦提县', 3, '652900'), + ('652929', '柯坪县', 3, '652900'), + ('653000', '克孜勒苏柯尔克孜自治州', 2, '650000'), + ('653001', '阿图什市', 3, '653000'), + ('653022', '阿克陶县', 3, '653000'), + ('653023', '阿合奇县', 3, '653000'), + ('653024', '乌恰县', 3, '653000'), + ('653100', '喀什地区', 2, '650000'), + ('653101', '喀什市', 3, '653100'), + ('653121', '疏附县', 3, '653100'), + ('653122', '疏勒县', 3, '653100'), + ('653123', '英吉沙县', 3, '653100'), + ('653124', '泽普县', 3, '653100'), + ('653125', '莎车县', 3, '653100'), + ('653126', '叶城县', 3, '653100'), + ('653127', '麦盖提县', 3, '653100'), + ('653128', '岳普湖县', 3, '653100'), + ('653129', '伽师县', 3, '653100'), + ('653130', '巴楚县', 3, '653100'), + ('653131', '塔什库尔干塔吉克自治县', 3, '653100'), + ('653200', '和田地区', 2, '650000'), + ('653201', '和田市', 3, '653200'), + ('653221', '和田县', 3, '653200'), + ('653222', '墨玉县', 3, '653200'), + ('653223', '皮山县', 3, '653200'), + ('653224', '洛浦县', 3, '653200'), + ('653225', '策勒县', 3, '653200'), + ('653226', '于田县', 3, '653200'), + ('653227', '民丰县', 3, '653200'), + ('654000', '伊犁哈萨克自治州', 2, '650000'), + ('654002', '伊宁市', 3, '654000'), + ('654003', '奎屯市', 3, '654000'), + ('654004', '霍尔果斯市', 3, '654000'), + ('654021', '伊宁县', 3, '654000'), + ('654022', '察布查尔锡伯自治县', 3, '654000'), + ('654023', '霍城县', 3, '654000'), + ('654024', '巩留县', 3, '654000'), + ('654025', '新源县', 3, '654000'), + ('654026', '昭苏县', 3, '654000'), + ('654027', '特克斯县', 3, '654000'), + ('654028', '尼勒克县', 3, '654000'), + ('654200', '塔城地区', 2, '650000'), + ('654201', '塔城市', 3, '654200'), + ('654202', '乌苏市', 3, '654200'), + ('654203', '沙湾市', 3, '654200'), + ('654221', '额敏县', 3, '654200'), + ('654224', '托里县', 3, '654200'), + ('654225', '裕民县', 3, '654200'), + ('654226', '和布克赛尔蒙古自治县', 3, '654200'), + ('654300', '阿勒泰地区', 2, '650000'), + ('654301', '阿勒泰市', 3, '654300'), + ('654321', '布尔津县', 3, '654300'), + ('654322', '富蕴县', 3, '654300'), + ('654323', '福海县', 3, '654300'), + ('654324', '哈巴河县', 3, '654300'), + ('654325', '青河县', 3, '654300'), + ('654326', '吉木乃县', 3, '654300'), + ('659000', '自治区直辖县级行政区划', 2, '650000'), + ('659001', '石河子市', 3, '659000'), + ('659002', '阿拉尔市', 3, '659000'), + ('659003', '图木舒克市', 3, '659000'), + ('659004', '五家渠市', 3, '659000'), + ('659005', '北屯市', 3, '659000'), + ('659006', '铁门关市', 3, '659000'), + ('659007', '双河市', 3, '659000'), + ('659008', '可克达拉市', 3, '659000'), + ('659009', '昆玉市', 3, '659000'), + ('659010', '胡杨河市', 3, '659000'), + ('659011', '新星市', 3, '659000'), + ('659012', '白杨市', 3, '659000'), + ('710000', '台湾省', 1, NULL), + ('810000', '香港特别行政区', 1, NULL), + ('820000', '澳门特别行政区', 1, NULL); + +COMMIT; + +-- 数据统计: 3350 行 (省 34 / 市 342 / 区县 2974) diff --git a/src/main/resources/db/migration/V3__pilot_license_multi.sql b/src/main/resources/db/migration/V3__pilot_license_multi.sql new file mode 100644 index 0000000..905f6e1 --- /dev/null +++ b/src/main/resources/db/migration/V3__pilot_license_multi.sql @@ -0,0 +1,23 @@ +-- ===================================================================== +-- V3: 飞手执照支持多本(执照类型/编号/照片 改为分号拼接的多值存储) +-- 规约依据:AGENTS.md §4 "多选字段统一用 String 分号拼接,值为数字编码" +-- 注意:dev 环境未启用 Flyway,需手动在 PG 执行本脚本 +-- ===================================================================== + +-- 执照类型编码:单本 SMALLINT → 多本拼接串(如 "1;2" 表示 AOPA+UTC) +ALTER TABLE pilot + ALTER COLUMN license_type TYPE VARCHAR(32) USING license_type::VARCHAR; + +COMMENT ON COLUMN pilot.license_type IS 'CAAC执照类型编码,多本执照分号拼接(如 1;2 表示 AOPA+UTC):1 AOPA 2 UTC 3 ASFC'; + +-- 执照编号:多本编号按下标与 license_type 一一对应,分号拼接 +ALTER TABLE pilot + ALTER COLUMN license_no TYPE VARCHAR(255); + +COMMENT ON COLUMN pilot.license_no IS 'CAAC执照编号,多本执照分号拼接,与license_type按下标一一对应'; + +-- 执照照片 file_id:多张照片按下标对应,分号拼接(关联 sys_file.id) +ALTER TABLE pilot + ALTER COLUMN license_file_id TYPE VARCHAR(255) USING license_file_id::VARCHAR; + +COMMENT ON COLUMN pilot.license_file_id IS '执照照片file_id,多张分号拼接(如 12;13),与license_type按下标一一对应,关联sys_file.id'; diff --git a/src/main/resources/db/migration/V4__pilot_service_type.sql b/src/main/resources/db/migration/V4__pilot_service_type.sql new file mode 100644 index 0000000..195fbc4 --- /dev/null +++ b/src/main/resources/db/migration/V4__pilot_service_type.sql @@ -0,0 +1,8 @@ +-- V4: 飞手新增服务类型字段 +-- 服务类型为飞手能力属性(1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘),多选分号拼接; +-- 商家认证表单已移除服务类型录入(历史列保留不再使用,避免破坏存量数据)。 + +ALTER TABLE pilot + ADD COLUMN service_types VARCHAR(200) NULL; + +COMMENT ON COLUMN pilot.service_types IS '服务类型编码,多选分号拼接:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘'; diff --git a/src/main/resources/db/migration/V5__pilot_license_date.sql b/src/main/resources/db/migration/V5__pilot_license_date.sql new file mode 100644 index 0000000..b0159be --- /dev/null +++ b/src/main/resources/db/migration/V5__pilot_license_date.sql @@ -0,0 +1,11 @@ +-- ===================================================================== +-- V5: 飞手执照新增获证日期字段(多本执照分号拼接,按下标对齐) +-- 规约依据:AGENTS.md §4 "多选字段统一用 String 分号拼接" +-- 存储格式:yyyy-MM-dd(如 "2023-06-15"),多本执照如 "2023-06-15;2024-03-20" +-- 注意:dev 环境未启用 Flyway,需手动在 PG 执行本脚本 +-- ===================================================================== + +ALTER TABLE pilot + ADD COLUMN license_date VARCHAR(500); + +COMMENT ON COLUMN pilot.license_date IS '执照获证日期,多本执照分号拼接(如 2023-06-15;2024-03-20),与license_type按下标一一对应,格式yyyy-MM-dd'; diff --git a/src/main/resources/db/migration/V6__pilot_license_table.sql b/src/main/resources/db/migration/V6__pilot_license_table.sql new file mode 100644 index 0000000..e22c5f4 --- /dev/null +++ b/src/main/resources/db/migration/V6__pilot_license_table.sql @@ -0,0 +1,48 @@ +-- ===================================================================== +-- V6: 飞手执照独立表 pilot_license(替代 pilot 表 4 个分号拼接字段) +-- 架构升级:多本执照从 String 分号拼接 → 独立表一对多关系 +-- 影响范围:Entity / DTO / VO / CertServiceImpl / HomeServiceImpl +-- 注意:dev 环境未启用 Flyway,需手动在 PG 执行本脚本 +-- ===================================================================== + +-- 1. 建表:继承项目审计字段规约(id BIGSERIAL + created_at/updated_at/deleted_at) +CREATE TABLE pilot_license ( + id BIGSERIAL PRIMARY KEY, + pilot_id BIGINT NOT NULL REFERENCES pilot(id), + license_type SMALLINT NOT NULL, + license_no VARCHAR(50), + license_file_id BIGINT, + license_date VARCHAR(10), + created_at TIMESTAMP NOT NULL DEFAULT NOW(), + updated_at TIMESTAMP NOT NULL DEFAULT NOW(), + deleted_at TIMESTAMP, + CONSTRAINT ck_license_type CHECK (license_type IN (1, 2, 3, 4)) +); + +COMMENT ON TABLE pilot_license IS '飞手执照表(多本执照一对多)'; +COMMENT ON COLUMN pilot_license.pilot_id IS '关联飞手ID(pilot.id)'; +COMMENT ON COLUMN pilot_license.license_type IS '执照类型编码:1 AOPA 2 UTC 3 ASFC 4 CAAC'; +COMMENT ON COLUMN pilot_license.license_no IS '执照编号'; +COMMENT ON COLUMN pilot_license.license_file_id IS '执照照片file_id(sys_file.id)'; +COMMENT ON COLUMN pilot_license.license_date IS '获证日期,格式 yyyy-MM-dd'; + +CREATE INDEX idx_pilot_license_pilot ON pilot_license(pilot_id); + +-- 2. 数据迁移:从 pilot 表 4 个分号串按下标对齐插入已有执照 +-- PG 原生 string_to_array + unnest + WITH ORDINALITY 实现"并行数组按下标对齐" +INSERT INTO pilot_license (pilot_id, license_type, license_no, license_file_id, license_date) +SELECT + p.id, + types_arr.elem::SMALLINT, + nos_arr.elem, + file_arr.elem::BIGINT, + date_arr.elem +FROM pilot p +CROSS JOIN LATERAL unnest(string_to_array(COALESCE(p.license_type, ''), ';')) WITH ORDINALITY AS types_arr(elem, ord) +LEFT JOIN LATERAL unnest(string_to_array(COALESCE(p.license_no, ''), ';')) WITH ORDINALITY AS nos_arr (elem, ord) ON nos_arr.ord = types_arr.ord AND nos_arr.elem <> '' +LEFT JOIN LATERAL unnest(string_to_array(COALESCE(p.license_file_id, ''), ';')) WITH ORDINALITY AS file_arr(elem, ord) ON file_arr.ord = types_arr.ord AND file_arr.elem <> '' +LEFT JOIN LATERAL unnest(string_to_array(COALESCE(p.license_date, ''), ';')) WITH ORDINALITY AS date_arr(elem, ord) ON date_arr.ord = types_arr.ord AND date_arr.elem <> '' +WHERE COALESCE(p.license_type, '') <> ''; + +-- 3. 验证迁移结果(执行完本脚本后可选运行) +-- SELECT pilot_id, COUNT(*) AS license_count FROM pilot_license GROUP BY pilot_id; diff --git a/src/main/resources/db/migration/V7__drop_order_count.sql b/src/main/resources/db/migration/V7__drop_order_count.sql new file mode 100644 index 0000000..33ac320 --- /dev/null +++ b/src/main/resources/db/migration/V7__drop_order_count.sql @@ -0,0 +1,8 @@ +-- ===================================================================== +-- V7: 删除 Pilot / Merchant 表的 order_count 统计字段 +-- 规约依据:AGENTS.md §2.6 + §4 — 统计/派生字段禁止定义在 PO/Entity 中 +-- 排序改为 Repository native SQL JOIN task COUNT 实时聚合 +-- ===================================================================== + +ALTER TABLE pilot DROP COLUMN IF EXISTS order_count; +ALTER TABLE merchant DROP COLUMN IF EXISTS order_count; diff --git a/src/main/resources/db/migration/V8__course_schedule.sql b/src/main/resources/db/migration/V8__course_schedule.sql new file mode 100644 index 0000000..428d264 --- /dev/null +++ b/src/main/resources/db/migration/V8__course_schedule.sql @@ -0,0 +1,34 @@ +-- ===================================================================== +-- V8: course 表新增"排课 / 宣传图 / 联系人"字段(Web 管理端研学课程管理) +-- 背景: +-- Web 管理端需要维护课程的排课信息与咨询联系人,小程序端课程详情同步展示。 +-- 排课支持两种互斥方式(schedule_type 区分): +-- 1=每周重复:每周固定星期几上课,取值存 schedule_week_days(1=周一 ... 7=周日,分号拼接) +-- 2=日期排课:指定具体日期上课,取值存 schedule_dates(yyyy-MM-dd,分号拼接) +-- 遵循项目多选字段规约:多值统一 String + 英文分号拼接,禁止 jsonb(简单标量多值)。 +-- ===================================================================== + +-- 排课方式:1每周重复 2日期排课(必填,历史数据默认"每周重复") +ALTER TABLE course ADD COLUMN schedule_type SMALLINT NOT NULL DEFAULT 1; + +-- 每周上课星期编码串(schedule_type=1 时有值,如 "1;3;5" 表示周一/周三/周五) +ALTER TABLE course ADD COLUMN schedule_week_days VARCHAR(20); + +-- 排课日期串(schedule_type=2 时有值,如 "2026-09-10;2026-09-12") +ALTER TABLE course ADD COLUMN schedule_dates VARCHAR(500); + +-- 课程宣传图片文件ID(关联 sys_file.id,小程序端课程卡片/详情头图) +ALTER TABLE course ADD COLUMN cover_image_id BIGINT; + +-- 课程咨询联系人姓名 +ALTER TABLE course ADD COLUMN contact_name VARCHAR(50); + +-- 课程咨询联系电话 +ALTER TABLE course ADD COLUMN contact_phone VARCHAR(20); + +COMMENT ON COLUMN course.schedule_type IS '排课方式:1每周重复 2日期排课'; +COMMENT ON COLUMN course.schedule_week_days IS '每周上课星期编码串(1=周一...7=周日,分号拼接,schedule_type=1 时有值)'; +COMMENT ON COLUMN course.schedule_dates IS '排课日期串(yyyy-MM-dd 分号拼接,schedule_type=2 时有值)'; +COMMENT ON COLUMN course.cover_image_id IS '课程宣传图片文件ID(关联 sys_file.id)'; +COMMENT ON COLUMN course.contact_name IS '课程咨询联系人姓名'; +COMMENT ON COLUMN course.contact_phone IS '课程咨询联系电话'; diff --git a/src/main/resources/db/migration/V9__app_banner.sql b/src/main/resources/db/migration/V9__app_banner.sql new file mode 100644 index 0000000..778cce4 --- /dev/null +++ b/src/main/resources/db/migration/V9__app_banner.sql @@ -0,0 +1,46 @@ +-- ============================================================ +-- V9 —— 首页轮播图表 app_banner +-- 承载小程序首页轮播 Banner 的运营配置,支持图片上传、跳转链接、排序、启停 +-- ============================================================ +CREATE TABLE app_banner ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + title VARCHAR(100) NOT NULL, + subtitle VARCHAR(200), + image_file_id BIGINT, + link_type VARCHAR(32), + link_url VARCHAR(500), + sort_order INT NOT NULL DEFAULT 0, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); + +CREATE INDEX idx_app_banner_status ON app_banner (status); +CREATE INDEX idx_app_banner_sort ON app_banner (sort_order); +CREATE INDEX idx_app_banner_deleted ON app_banner (deleted_at); + +COMMENT ON TABLE app_banner IS '首页轮播图表'; +COMMENT ON COLUMN app_banner.id IS '主键'; +COMMENT ON COLUMN app_banner.title IS '轮播图标题'; +COMMENT ON COLUMN app_banner.subtitle IS '轮播图副标题/描述'; +COMMENT ON COLUMN app_banner.image_file_id IS '轮播图图片file_id(关联 sys_file.id)'; +COMMENT ON COLUMN app_banner.link_type IS '跳转类型:caac/performance/merchant/pilot/course/custom'; +COMMENT ON COLUMN app_banner.link_url IS '自定义跳转链接(link_type=custom 时使用)'; +COMMENT ON COLUMN app_banner.sort_order IS '排序值,升序,值越小越靠前'; +COMMENT ON COLUMN app_banner.status IS '状态:0隐藏 1显示'; +COMMENT ON COLUMN app_banner.created_at IS '创建时间'; +COMMENT ON COLUMN app_banner.updated_at IS '更新时间'; +COMMENT ON COLUMN app_banner.deleted_at IS '软删除时间'; + +CREATE TRIGGER trg_app_banner_updated BEFORE UPDATE ON app_banner + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + +-- ------------------------------------------------------------ +-- 初始化 3 条轮播图数据(对应小程序现有的硬编码 bannerList) +-- image_file_id 暂设 NULL,后续通过 Web 管理端上传真实图片补全 +-- ------------------------------------------------------------ +INSERT INTO app_banner (title, subtitle, link_type, sort_order, status) VALUES + ('CAAC 报名通道开启', '超250g无人机须实名,操控员须持证', 'caac', 1, 1), + ('无人机表演专场', '高客单商业订单,专业飞手接单', 'performance', 2, 1), + ('实力商家招商入驻', '开放聚合生态,精准流量分发', 'merchant', 3, 1); diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql new file mode 100644 index 0000000..5a7dcf2 --- /dev/null +++ b/src/main/resources/db/schema.sql @@ -0,0 +1,848 @@ +-- ============================================================ +-- 翼云Hub · 数据库完整 DDL(整理版) +-- ------------------------------------------------------------ +-- 本文件合并了 V1 ~ V19 全部 Flyway 迁移的最终效果, +-- 按依赖顺序从零建库,供新环境初始化使用。 +-- +-- 与 Flyway 迁移脚本的关系: +-- 现有 V1 ~ V19 保持原样不动(已部署环境正在使用), +-- 新环境可选: +-- a) 继续走 Flyway(V1~V19 依次执行)——与已部署环境一致 +-- b) 直接执行本 schema.sql + data.sql(跳过 Flyway)——更快 +-- +-- 目标数据库:PostgreSQL 14 / 16 +-- 字符集:UTF8(PG 默认) +-- 排序:下划线小写,主键统一 id +-- 软删除:deleted_at(NULL=未删除) +-- 时间维护:created_at 由 DEFAULT 维护;updated_at 由触发器维护 +-- 多选字段:String 存储,分号 ; 拼接 +-- 经纬度:VARCHAR(20),避免浮点精度问题 +-- 类型字段:SMALLINT,数字编码 +-- 业务码:PO 实体禁用基本类型,全部包装类 +-- ============================================================ + +-- ------------------------------------------------------------ +-- 公共触发器函数:任何表 UPDATE 时自动刷新 updated_at +-- ------------------------------------------------------------ +CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS +$$ +BEGIN + NEW.updated_at = CURRENT_TIMESTAMP; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + + +-- ============================================================ +-- 1. 公告表 announcement +-- ============================================================ +CREATE TABLE announcement ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + title VARCHAR(100) NOT NULL, + content TEXT, + valid_start_time TIMESTAMP, + valid_end_time TIMESTAMP, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_announcement_status ON announcement (status); +CREATE INDEX idx_announcement_valid_period ON announcement (valid_start_time, valid_end_time); +CREATE INDEX idx_announcement_deleted ON announcement (deleted_at); +COMMENT ON TABLE announcement IS '公告表'; +COMMENT ON COLUMN announcement.id IS '主键'; +COMMENT ON COLUMN announcement.title IS '公告标题'; +COMMENT ON COLUMN announcement.content IS '公告正文'; +COMMENT ON COLUMN announcement.valid_start_time IS '生效开始时间'; +COMMENT ON COLUMN announcement.valid_end_time IS '生效结束时间'; +COMMENT ON COLUMN announcement.status IS '状态:0隐藏 1显示'; +COMMENT ON COLUMN announcement.created_at IS '创建时间'; +COMMENT ON COLUMN announcement.updated_at IS '更新时间'; +COMMENT ON COLUMN announcement.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_announcement_updated BEFORE UPDATE ON announcement + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 2. 用户表 "user"(user 在 PG 为保留字,需双引号引用) +-- V16 新增 unionid / mp_openid(微信服务号模板消息关联) +-- ============================================================ +CREATE TABLE "user" ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + openid VARCHAR(64) NOT NULL, + nickname VARCHAR(50), + avatar_url VARCHAR(500), + phone VARCHAR(20), + gender SMALLINT NOT NULL DEFAULT 0, + bio VARCHAR(200), + role_type SMALLINT NOT NULL DEFAULT 1, + points INT NOT NULL DEFAULT 0, + is_pilot_bound SMALLINT NOT NULL DEFAULT 0, + is_merchant_bound SMALLINT NOT NULL DEFAULT 0, + pilot_id BIGINT, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + last_login_at TIMESTAMP, + unionid VARCHAR(64), + mp_openid VARCHAR(64), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_user_openid ON "user" (openid); +CREATE INDEX idx_user_phone ON "user" (phone); +CREATE INDEX idx_user_unionid ON "user" (unionid); +CREATE INDEX idx_user_mp_openid ON "user" (mp_openid); +CREATE INDEX idx_user_deleted ON "user" (deleted_at); +COMMENT ON TABLE "user" IS '用户表'; +COMMENT ON COLUMN "user".id IS '主键'; +COMMENT ON COLUMN "user".openid IS '微信openId'; +COMMENT ON COLUMN "user".nickname IS '用户昵称'; +COMMENT ON COLUMN "user".avatar_url IS '头像URL'; +COMMENT ON COLUMN "user".phone IS '手机号'; +COMMENT ON COLUMN "user".gender IS '性别:0未知 1男 2女'; +COMMENT ON COLUMN "user".bio IS '个人简介'; +COMMENT ON COLUMN "user".role_type IS '角色类型:1普通用户 2飞手 3商家 4机构'; +COMMENT ON COLUMN "user".points IS '积分余额'; +COMMENT ON COLUMN "user".is_pilot_bound IS '是否已绑定飞手身份:0否 1是'; +COMMENT ON COLUMN "user".is_merchant_bound IS '是否已绑定商家身份:0否 1是'; +COMMENT ON COLUMN "user".pilot_id IS '关联飞手ID'; +COMMENT ON COLUMN "user".merchant_id IS '关联商家ID'; +COMMENT ON COLUMN "user".status IS '账号状态:0禁用 1正常'; +COMMENT ON COLUMN "user".last_login_at IS '最后登录时间'; +COMMENT ON COLUMN "user".unionid IS '微信开放平台 unionid(跨端身份关联)'; +COMMENT ON COLUMN "user".mp_openid IS '微信服务号 openid(NULL=未关注服务号)'; +COMMENT ON COLUMN "user".created_at IS '注册时间'; +COMMENT ON COLUMN "user".updated_at IS '更新时间'; +COMMENT ON COLUMN "user".deleted_at IS '软删除时间'; +CREATE TRIGGER trg_user_updated BEFORE UPDATE ON "user" + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 3. 商家表 merchant +-- V7 DROP order_count(统计字段禁止存主表) +-- V2 DROP premium_cost(原在 task 表,此处不受影响) +-- ============================================================ +CREATE TABLE merchant ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + name VARCHAR(100) NOT NULL, + address VARCHAR(200), + door_image BIGINT, + license_file_id BIGINT, + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + latitude VARCHAR(20), + longitude VARCHAR(20), + service_types VARCHAR(200), + description TEXT, + cert_status SMALLINT NOT NULL DEFAULT 0, + cert_time TIMESTAMP, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_merchant_user ON merchant (user_id); +CREATE INDEX idx_merchant_cert ON merchant (cert_status); +CREATE INDEX idx_merchant_deleted ON merchant (deleted_at); +COMMENT ON TABLE merchant IS '商家表'; +COMMENT ON COLUMN merchant.id IS '主键'; +COMMENT ON COLUMN merchant.user_id IS '关联用户ID'; +COMMENT ON COLUMN merchant.name IS '商家名称'; +COMMENT ON COLUMN merchant.address IS '商家地址'; +COMMENT ON COLUMN merchant.door_image IS '门头照片file_id'; +COMMENT ON COLUMN merchant.license_file_id IS '营业执照file_id'; +COMMENT ON COLUMN merchant.contact_name IS '联系人'; +COMMENT ON COLUMN merchant.contact_phone IS '联系电话'; +COMMENT ON COLUMN merchant.latitude IS '纬度(字符串存储)'; +COMMENT ON COLUMN merchant.longitude IS '经度(字符串存储)'; +COMMENT ON COLUMN merchant.service_types IS '服务类型编码,多选用分号拼接,如:1;2;3'; +COMMENT ON COLUMN merchant.description IS '商家简介'; +COMMENT ON COLUMN merchant.cert_status IS '认证状态:0未认证 1认证中 2已认证 3认证失败'; +COMMENT ON COLUMN merchant.cert_time IS '认证时间'; +COMMENT ON COLUMN merchant.created_at IS '创建时间'; +COMMENT ON COLUMN merchant.updated_at IS '更新时间'; +COMMENT ON COLUMN merchant.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_merchant_updated BEFORE UPDATE ON merchant + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 4. 飞手表 pilot +-- V4 ADD service_types(服务类型分号拼接) +-- V7 DROP order_count(统计字段禁止存主表) +-- V3/V5 的 license_* 分号拼接字段已废弃,由 pilot_license 独立表替代 +-- ============================================================ +CREATE TABLE pilot ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + name VARCHAR(50) NOT NULL, + phone VARCHAR(20) NOT NULL, + birthday DATE, + age SMALLINT, + avatar_file_id BIGINT, + cert_status SMALLINT NOT NULL DEFAULT 0, + cert_time TIMESTAMP, + service_city_codes VARCHAR(500), + service_types VARCHAR(200), + bio VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_pilot_user ON pilot (user_id); +CREATE INDEX idx_pilot_cert ON pilot (cert_status); +CREATE INDEX idx_pilot_deleted ON pilot (deleted_at); +COMMENT ON TABLE pilot IS '飞手表'; +COMMENT ON COLUMN pilot.id IS '主键'; +COMMENT ON COLUMN pilot.user_id IS '关联用户ID'; +COMMENT ON COLUMN pilot.name IS '姓名(实名)'; +COMMENT ON COLUMN pilot.phone IS '手机号'; +COMMENT ON COLUMN pilot.birthday IS '出生年月'; +COMMENT ON COLUMN pilot.age IS '年龄(自动计算)'; +COMMENT ON COLUMN pilot.avatar_file_id IS '头像file_id'; +COMMENT ON COLUMN pilot.cert_status IS '认证状态:0未认证 1认证中 2已认证 3认证失败'; +COMMENT ON COLUMN pilot.cert_time IS '认证时间'; +COMMENT ON COLUMN pilot.service_city_codes IS '服务城市编码,多选用分号拼接,关联region.code'; +COMMENT ON COLUMN pilot.service_types IS '服务类型编码,多选分号拼接:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘'; +COMMENT ON COLUMN pilot.bio IS '个人简介'; +COMMENT ON COLUMN pilot.created_at IS '创建时间'; +COMMENT ON COLUMN pilot.updated_at IS '更新时间'; +COMMENT ON COLUMN pilot.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_pilot_updated BEFORE UPDATE ON pilot + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 5. 飞手执照表 pilot_license(独立一对多表) +-- V6 最终版(V1 旧版缺 license_date,已废弃) +-- 一个飞手可有多本执照,每本一条记录 +-- ============================================================ +CREATE TABLE pilot_license ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + pilot_id BIGINT NOT NULL REFERENCES pilot(id), + license_type SMALLINT NOT NULL CHECK (license_type IN (1, 2, 3, 4)), + license_no VARCHAR(50), + license_file_id BIGINT, + license_date VARCHAR(10), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_pilot_license_pilot ON pilot_license(pilot_id); +COMMENT ON TABLE pilot_license IS '飞手执照表(多本执照一对多)'; +COMMENT ON COLUMN pilot_license.pilot_id IS '关联飞手ID(pilot.id)'; +COMMENT ON COLUMN pilot_license.license_type IS '执照类型编码:1 AOPA 2 UTC 3 ASFC 4 CAAC'; +COMMENT ON COLUMN pilot_license.license_no IS '执照编号'; +COMMENT ON COLUMN pilot_license.license_file_id IS '执照照片file_id(sys_file.id)'; +COMMENT ON COLUMN pilot_license.license_date IS '获证日期,格式 yyyy-MM-dd'; +COMMENT ON COLUMN pilot_license.created_at IS '创建时间'; +COMMENT ON COLUMN pilot_license.updated_at IS '更新时间'; +COMMENT ON COLUMN pilot_license.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_pilot_license_updated BEFORE UPDATE ON pilot_license + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 6. 任务表 task +-- V2 DROP premium_cost(优质任务积分消耗改从 points_detail 查) +-- V7 DROP order_count(统计字段禁止存主表) +-- V1 已不含 order_count;premium_cost 原本在 V1,V2 DROP 掉 +-- ============================================================ +CREATE TABLE task ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + task_no VARCHAR(32) NOT NULL, + name VARCHAR(100) NOT NULL, + type SMALLINT NOT NULL, + province VARCHAR(20), + city VARCHAR(20), + district VARCHAR(20), + address VARCHAR(200), + latitude VARCHAR(20), + longitude VARCHAR(20), + scene_images VARCHAR(500), + required_count INT NOT NULL DEFAULT 1, + task_start_time TIMESTAMP NOT NULL, + task_end_time TIMESTAMP, + reward NUMERIC(10, 2) NOT NULL, + insurance_require VARCHAR(100), + contact_name VARCHAR(50), + contact_phone VARCHAR(20) NOT NULL, + remark TEXT, + status SMALLINT NOT NULL DEFAULT 0, + is_premium SMALLINT NOT NULL DEFAULT 0, + publisher_id BIGINT NOT NULL, + accepted_pilot_id BIGINT, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_task_task_no ON task (task_no); +CREATE INDEX idx_task_type_status ON task (type, status); +CREATE INDEX idx_task_city_status ON task (city, status); +CREATE INDEX idx_task_publisher ON task (publisher_id); +CREATE INDEX idx_task_pilot ON task (accepted_pilot_id); +CREATE INDEX idx_task_deleted ON task (deleted_at); +COMMENT ON TABLE task IS '任务表'; +COMMENT ON COLUMN task.id IS '主键'; +COMMENT ON COLUMN task.task_no IS '任务编号(全局唯一)'; +COMMENT ON COLUMN task.name IS '任务名称'; +COMMENT ON COLUMN task.type IS '任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘'; +COMMENT ON COLUMN task.province IS '省份'; +COMMENT ON COLUMN task.city IS '城市'; +COMMENT ON COLUMN task.district IS '区县'; +COMMENT ON COLUMN task.address IS '详细地址'; +COMMENT ON COLUMN task.latitude IS '纬度坐标(字符串存储)'; +COMMENT ON COLUMN task.longitude IS '经度坐标(字符串存储)'; +COMMENT ON COLUMN task.scene_images IS '作业场景图file_id数组,多选用分号拼接'; +COMMENT ON COLUMN task.required_count IS '需求人数'; +COMMENT ON COLUMN task.task_start_time IS '任务开始时间'; +COMMENT ON COLUMN task.task_end_time IS '任务结束时间'; +COMMENT ON COLUMN task.reward IS '报酬(元)'; +COMMENT ON COLUMN task.insurance_require IS '保险要求编码,多选用分号拼接:1三者险 2飞手险 3机身险'; +COMMENT ON COLUMN task.contact_name IS '联系人姓名'; +COMMENT ON COLUMN task.contact_phone IS '联系电话'; +COMMENT ON COLUMN task.remark IS '备注'; +COMMENT ON COLUMN task.status IS '状态:0草稿 1待接单 2已接单 3执行中 4已完成 5已取消'; +COMMENT ON COLUMN task.is_premium IS '是否优质任务:0否 1是'; +COMMENT ON COLUMN task.publisher_id IS '发布人ID'; +COMMENT ON COLUMN task.accepted_pilot_id IS '接单飞手ID'; +COMMENT ON COLUMN task.created_at IS '创建时间'; +COMMENT ON COLUMN task.updated_at IS '更新时间'; +COMMENT ON COLUMN task.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_task_updated BEFORE UPDATE ON task + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 7. 任务申请记录表 task_record +-- V16 补充 reject_time / reject_reason + COMMENT 更新 +-- 状态语义升级为"飞手申请 → 商家审批"生命周期 +-- ============================================================ +CREATE TABLE task_record ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + task_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, + pilot_id BIGINT, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + apply_time TIMESTAMP, + accept_time TIMESTAMP, + reject_time TIMESTAMP, + reject_reason VARCHAR(200), + record_start_time TIMESTAMP, + record_end_time TIMESTAMP, + cancel_time TIMESTAMP, + cancel_reason VARCHAR(200), + insurance_verified SMALLINT NOT NULL DEFAULT 0, + actual_reward NUMERIC(10, 2), + rating SMALLINT, + rating_comment VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_task_record_task_user ON task_record (task_id, user_id); +CREATE INDEX idx_task_record_user ON task_record (user_id, status); +CREATE INDEX idx_task_record_pilot ON task_record (pilot_id, status); +CREATE INDEX idx_task_record_deleted ON task_record (deleted_at); +COMMENT ON TABLE task_record IS '任务申请记录表(飞手申请接单 → 商家审批 → 执行)'; +COMMENT ON COLUMN task_record.id IS '主键'; +COMMENT ON COLUMN task_record.task_id IS '任务ID'; +COMMENT ON COLUMN task_record.user_id IS '关联用户ID'; +COMMENT ON COLUMN task_record.pilot_id IS '接单飞手ID'; +COMMENT ON COLUMN task_record.merchant_id IS '发单商家ID'; +COMMENT ON COLUMN task_record.status IS '状态:1已申请(待商家确认) 2商家已同意(已接单) 3商家已拒绝 4飞手已撤销'; +COMMENT ON COLUMN task_record.apply_time IS '飞手申请接单时间'; +COMMENT ON COLUMN task_record.accept_time IS '商家同意时间'; +COMMENT ON COLUMN task_record.reject_time IS '商家拒绝时间'; +COMMENT ON COLUMN task_record.reject_reason IS '商家拒绝原因'; +COMMENT ON COLUMN task_record.record_start_time IS '实际开始时间'; +COMMENT ON COLUMN task_record.record_end_time IS '实际结束时间(完成时间)'; +COMMENT ON COLUMN task_record.cancel_time IS '取消时间'; +COMMENT ON COLUMN task_record.cancel_reason IS '取消原因'; +COMMENT ON COLUMN task_record.insurance_verified IS '保险是否校验:0否 1是'; +COMMENT ON COLUMN task_record.actual_reward IS '实际报酬'; +COMMENT ON COLUMN task_record.rating IS '用户评分(1-5)'; +COMMENT ON COLUMN task_record.rating_comment IS '评价内容'; +COMMENT ON COLUMN task_record.created_at IS '创建时间'; +COMMENT ON COLUMN task_record.updated_at IS '更新时间'; +COMMENT ON COLUMN task_record.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_task_record_updated BEFORE UPDATE ON task_record + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 8. 文件表 sys_file(避开 Java 与 PG 的保留字 file 冲突) +-- 只增不改、不更新——无 updated_at、无触发器 +-- ============================================================ +CREATE TABLE sys_file ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + file_name VARCHAR(200) NOT NULL, + file_suffix VARCHAR(10), + file_url VARCHAR(500), + file_size BIGINT, + file_type SMALLINT, + uploader_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_sys_file_type ON sys_file (file_type); +CREATE INDEX idx_sys_file_uploader ON sys_file (uploader_id); +CREATE INDEX idx_sys_file_deleted ON sys_file (deleted_at); +COMMENT ON TABLE sys_file IS '文件表'; +COMMENT ON COLUMN sys_file.id IS '主键'; +COMMENT ON COLUMN sys_file.file_name IS '原始文件名'; +COMMENT ON COLUMN sys_file.file_suffix IS '文件后缀'; +COMMENT ON COLUMN sys_file.file_url IS '访问URL'; +COMMENT ON COLUMN sys_file.file_size IS '文件大小(字节)'; +COMMENT ON COLUMN sys_file.file_type IS '业务类型编码:1营业执照 2飞手执照 3作业场景图 4课程图片 5头像 8Banner图 9其他'; +COMMENT ON COLUMN sys_file.uploader_id IS '上传用户ID'; +COMMENT ON COLUMN sys_file.status IS '状态:0禁用 1正常'; +COMMENT ON COLUMN sys_file.created_at IS '上传时间'; +COMMENT ON COLUMN sys_file.deleted_at IS '软删除时间'; + + +-- ============================================================ +-- 9. 题库表 exam_bank +-- ============================================================ +CREATE TABLE exam_bank ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + cover_image BIGINT, + description TEXT, + question_count INT NOT NULL DEFAULT 0, + difficulty SMALLINT NOT NULL DEFAULT 1, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_exam_bank_deleted ON exam_bank (deleted_at); +COMMENT ON TABLE exam_bank IS '题库表'; +COMMENT ON COLUMN exam_bank.id IS '主键'; +COMMENT ON COLUMN exam_bank.name IS '题库名称'; +COMMENT ON COLUMN exam_bank.cover_image IS '封面图file_id'; +COMMENT ON COLUMN exam_bank.description IS '题库描述'; +COMMENT ON COLUMN exam_bank.question_count IS '题目数量'; +COMMENT ON COLUMN exam_bank.difficulty IS '难度:1简单 2中等 3困难'; +COMMENT ON COLUMN exam_bank.status IS '状态:0禁用 1启用'; +COMMENT ON COLUMN exam_bank.created_at IS '创建时间'; +COMMENT ON COLUMN exam_bank.updated_at IS '更新时间'; +COMMENT ON COLUMN exam_bank.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_exam_bank_updated BEFORE UPDATE ON exam_bank + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 10. 习题表 exam_question +-- options 使用 Hibernate 6 + PG jsonb 存储选项数组 +-- ============================================================ +CREATE TABLE exam_question ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + bank_id BIGINT NOT NULL, + content TEXT NOT NULL, + options JSONB, + question_type SMALLINT NOT NULL, + answer VARCHAR(10) NOT NULL, + explanation TEXT, + difficulty SMALLINT NOT NULL DEFAULT 1, + score SMALLINT NOT NULL DEFAULT 5, + sort_order INT NOT NULL DEFAULT 0, + used_count INT NOT NULL DEFAULT 0, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_exam_question_bank ON exam_question (bank_id); +CREATE INDEX idx_exam_question_type ON exam_question (question_type); +CREATE INDEX idx_exam_question_deleted ON exam_question (deleted_at); +COMMENT ON TABLE exam_question IS '习题表'; +COMMENT ON COLUMN exam_question.id IS '主键'; +COMMENT ON COLUMN exam_question.bank_id IS '所属题库ID'; +COMMENT ON COLUMN exam_question.content IS '题目内容'; +COMMENT ON COLUMN exam_question.options IS '选项数组([{"key":"A","val":"..."},...])'; +COMMENT ON COLUMN exam_question.question_type IS '题型:1单选 2多选 3判断'; +COMMENT ON COLUMN exam_question.answer IS '标准答案(如:A 或 AB)'; +COMMENT ON COLUMN exam_question.explanation IS '答案解析'; +COMMENT ON COLUMN exam_question.difficulty IS '难度:1简单 2中等 3困难'; +COMMENT ON COLUMN exam_question.score IS '分值'; +COMMENT ON COLUMN exam_question.sort_order IS '排序'; +COMMENT ON COLUMN exam_question.used_count IS '被使用次数'; +COMMENT ON COLUMN exam_question.created_at IS '创建时间'; +COMMENT ON COLUMN exam_question.updated_at IS '更新时间'; +COMMENT ON COLUMN exam_question.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_exam_question_updated BEFORE UPDATE ON exam_question + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 11. 课程表 course +-- V8 ADD schedule_type / schedule_week_days / schedule_dates / +-- contact_name / contact_phone / cover_image_id +-- V18 ADD featured +-- ============================================================ +CREATE TABLE course ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + tags VARCHAR(200), + category SMALLINT, + target_age VARCHAR(200), + location VARCHAR(200), + latitude VARCHAR(20), + longitude VARCHAR(20), + description TEXT, + images VARCHAR(500), + cover_image_id BIGINT, + price NUMERIC(10, 2) NOT NULL, + merchant_id BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + schedule_type SMALLINT NOT NULL DEFAULT 1, + schedule_week_days VARCHAR(20), + schedule_dates VARCHAR(500), + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + featured SMALLINT NOT NULL DEFAULT 0, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_course_category ON course (category); +CREATE INDEX idx_course_status ON course (status); +CREATE INDEX idx_course_merchant ON course (merchant_id); +CREATE INDEX idx_course_deleted ON course (deleted_at); +CREATE INDEX idx_course_featured ON course (featured) WHERE featured = 1 AND deleted_at IS NULL; +COMMENT ON TABLE course IS '课程表'; +COMMENT ON COLUMN course.id IS '主键'; +COMMENT ON COLUMN course.name IS '课程名称'; +COMMENT ON COLUMN course.tags IS '标签编码,多选用分号拼接'; +COMMENT ON COLUMN course.category IS '分类编码:1认知启蒙 2技能进阶 3创新应用 4竞赛辅导'; +COMMENT ON COLUMN course.target_age IS '适合年龄描述'; +COMMENT ON COLUMN course.location IS '上课地点'; +COMMENT ON COLUMN course.latitude IS '纬度(字符串存储)'; +COMMENT ON COLUMN course.longitude IS '经度(字符串存储)'; +COMMENT ON COLUMN course.description IS '课程描述'; +COMMENT ON COLUMN course.images IS '课程图片file_id数组,多选用分号拼接'; +COMMENT ON COLUMN course.cover_image_id IS '课程宣传图片file_id(关联 sys_file.id)'; +COMMENT ON COLUMN course.price IS '课程价格'; +COMMENT ON COLUMN course.merchant_id IS '所属商家ID'; +COMMENT ON COLUMN course.status IS '状态:0下架 1上架 2已满员'; +COMMENT ON COLUMN course.schedule_type IS '排课方式:1每周重复 2日期排课'; +COMMENT ON COLUMN course.schedule_week_days IS '每周上课星期编码串(1=周一...7=周日,分号拼接)'; +COMMENT ON COLUMN course.schedule_dates IS '排课日期串(yyyy-MM-dd 分号拼接)'; +COMMENT ON COLUMN course.contact_name IS '课程咨询联系人姓名'; +COMMENT ON COLUMN course.contact_phone IS '课程咨询联系电话'; +COMMENT ON COLUMN course.featured IS '精选推荐:0否 1是(小程序首页精选课程区块展示)'; +COMMENT ON COLUMN course.created_at IS '创建时间'; +COMMENT ON COLUMN course.updated_at IS '更新时间'; +COMMENT ON COLUMN course.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_course_updated BEFORE UPDATE ON course + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 12. 课程预约表 course_appointment +-- V8 排课相关字段已移到 course 表,此处 appointment_date 为具体上课场次 +-- V11 全量唯一索引 → 部分唯一索引(仅有效预约参与唯一性校验) +-- V19 预约状态简化为二态:1已预约 2已取消 +-- ============================================================ +CREATE TABLE course_appointment ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + course_id BIGINT NOT NULL, + merchant_id BIGINT, + appointment_date TIMESTAMP NOT NULL, + person_count INT NOT NULL DEFAULT 1, + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + remark VARCHAR(200), + status SMALLINT NOT NULL DEFAULT 1, + amount NUMERIC(10, 2) NOT NULL DEFAULT 0.00, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +-- 部分唯一索引:仅对有效预约(status=1 已预约)生效,取消后允许重新预约 +CREATE UNIQUE INDEX uk_course_appointment_active + ON course_appointment (user_id, course_id, appointment_date) + WHERE status != 2 AND deleted_at IS NULL; +CREATE INDEX idx_course_appointment_course_status ON course_appointment (course_id, status); +CREATE INDEX idx_course_appointment_merchant ON course_appointment (merchant_id); +CREATE INDEX idx_course_appointment_deleted ON course_appointment (deleted_at); +COMMENT ON TABLE course_appointment IS '课程预约表'; +COMMENT ON COLUMN course_appointment.id IS '主键'; +COMMENT ON COLUMN course_appointment.user_id IS '用户ID'; +COMMENT ON COLUMN course_appointment.course_id IS '课程ID'; +COMMENT ON COLUMN course_appointment.merchant_id IS '商家ID'; +COMMENT ON COLUMN course_appointment.appointment_date IS '预约时间(具体上课场次)'; +COMMENT ON COLUMN course_appointment.person_count IS '预约人数'; +COMMENT ON COLUMN course_appointment.contact_name IS '联系人姓名'; +COMMENT ON COLUMN course_appointment.contact_phone IS '联系人电话'; +COMMENT ON COLUMN course_appointment.remark IS '备注'; +COMMENT ON COLUMN course_appointment.status IS '状态:1已预约 2已取消(终态)'; +COMMENT ON COLUMN course_appointment.amount IS '支付金额(=课程单价 × 人数)'; +COMMENT ON COLUMN course_appointment.created_at IS '创建时间'; +COMMENT ON COLUMN course_appointment.updated_at IS '更新时间'; +COMMENT ON COLUMN course_appointment.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_course_appointment_updated BEFORE UPDATE ON course_appointment + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 13. 省市区表 region +-- V2__seed_region.sql 提供约 3300 条标准行政区划分级数据 +-- ============================================================ +CREATE TABLE region ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + code VARCHAR(12) NOT NULL, + name VARCHAR(50) NOT NULL, + level SMALLINT NOT NULL, + parent_code VARCHAR(12), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE UNIQUE INDEX uk_region_code ON region (code); +CREATE INDEX idx_region_parent ON region (parent_code); +CREATE INDEX idx_region_level ON region (level); +CREATE INDEX idx_region_deleted ON region (deleted_at); +COMMENT ON TABLE region IS '省市区表'; +COMMENT ON COLUMN region.id IS '主键'; +COMMENT ON COLUMN region.code IS '行政区划编码(6位数字字符串,如110000北京市)'; +COMMENT ON COLUMN region.name IS '区划名称'; +COMMENT ON COLUMN region.level IS '级别:1省 2市 3区县'; +COMMENT ON COLUMN region.parent_code IS '父级编码,省级为NULL'; +COMMENT ON COLUMN region.created_at IS '创建时间'; +COMMENT ON COLUMN region.updated_at IS '更新时间'; +COMMENT ON COLUMN region.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_region_updated BEFORE UPDATE ON region + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 14. 积分明细表 points_detail(V2 新增) +-- 流水只增不改,无 updated_at、无触发器 +-- ============================================================ +CREATE TABLE points_detail ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + change_type SMALLINT NOT NULL, + event_type SMALLINT NOT NULL, + points INT NOT NULL, + related_id BIGINT, + remark VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_points_detail_user ON points_detail (user_id, created_at); +COMMENT ON TABLE points_detail IS '积分明细表:记录用户每笔积分增扣流水'; +COMMENT ON COLUMN points_detail.id IS '主键'; +COMMENT ON COLUMN points_detail.user_id IS '用户ID,关联user.id'; +COMMENT ON COLUMN points_detail.change_type IS '变动方向:1收入 2支出'; +COMMENT ON COLUMN points_detail.event_type IS '事件类型:1发布任务 2完成任务 3邀请好友注册 4发布优质任务 5手动新增 6手动扣减'; +COMMENT ON COLUMN points_detail.points IS '积分变动值,收入为正、支出为负'; +COMMENT ON COLUMN points_detail.related_id IS '关联业务ID(任务ID/被邀请用户ID等)'; +COMMENT ON COLUMN points_detail.remark IS '备注说明'; +COMMENT ON COLUMN points_detail.created_at IS '创建时间'; +COMMENT ON COLUMN points_detail.deleted_at IS '软删除时间'; + + +-- ============================================================ +-- 15. 首页轮播图表 app_banner(V9 新增) +-- ============================================================ +CREATE TABLE app_banner ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + title VARCHAR(100) NOT NULL, + subtitle VARCHAR(200), + image_file_id BIGINT, + link_type VARCHAR(32), + link_url VARCHAR(500), + sort_order INT NOT NULL DEFAULT 0, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_app_banner_status ON app_banner (status); +CREATE INDEX idx_app_banner_sort ON app_banner (sort_order); +CREATE INDEX idx_app_banner_deleted ON app_banner (deleted_at); +COMMENT ON TABLE app_banner IS '首页轮播图表'; +COMMENT ON COLUMN app_banner.id IS '主键'; +COMMENT ON COLUMN app_banner.title IS '轮播图标题'; +COMMENT ON COLUMN app_banner.subtitle IS '轮播图副标题/描述'; +COMMENT ON COLUMN app_banner.image_file_id IS '轮播图图片file_id(关联 sys_file.id)'; +COMMENT ON COLUMN app_banner.link_type IS '跳转类型:caac/performance/merchant/pilot/course/custom'; +COMMENT ON COLUMN app_banner.link_url IS '自定义跳转链接(link_type=custom 时使用)'; +COMMENT ON COLUMN app_banner.sort_order IS '排序值,升序,值越小越靠前'; +COMMENT ON COLUMN app_banner.status IS '状态:0隐藏 1显示'; +COMMENT ON COLUMN app_banner.created_at IS '创建时间'; +COMMENT ON COLUMN app_banner.updated_at IS '更新时间'; +COMMENT ON COLUMN app_banner.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_app_banner_updated BEFORE UPDATE ON app_banner + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 16. 功能配置 KV 表 app_config(V10 新增) +-- ============================================================ +CREATE TABLE app_config ( + config_key VARCHAR(64) PRIMARY KEY, + config_value VARCHAR(1000) NOT NULL, + remark VARCHAR(200), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_by VARCHAR(64) +); +COMMENT ON TABLE app_config IS '平台功能配置KV表(开关、参数等)'; +COMMENT ON COLUMN app_config.config_key IS '配置键,唯一标识'; +COMMENT ON COLUMN app_config.config_value IS '配置值(字符串形式,布尔值用 0/1)'; +COMMENT ON COLUMN app_config.remark IS '备注说明'; +COMMENT ON COLUMN app_config.created_at IS '创建时间'; +COMMENT ON COLUMN app_config.updated_at IS '最后更新时间'; +COMMENT ON COLUMN app_config.updated_by IS '最后修改人标识(可选)'; +CREATE TRIGGER trg_app_config_updated BEFORE UPDATE ON app_config + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 17. 门店培训信息表 training_store(V12 新增) +-- 单条记录设计:管理员编辑门店介绍,Web 端查询返回首条有效记录 +-- ============================================================ +CREATE TABLE training_store ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name VARCHAR(100) NOT NULL, + address VARCHAR(200), + contact_name VARCHAR(50), + contact_phone VARCHAR(20), + training_content TEXT, + cover_image BIGINT, + status SMALLINT NOT NULL DEFAULT 1, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_training_store_deleted ON training_store (deleted_at); +COMMENT ON TABLE training_store IS '门店培训信息表'; +COMMENT ON COLUMN training_store.id IS '主键'; +COMMENT ON COLUMN training_store.name IS '门店名称'; +COMMENT ON COLUMN training_store.address IS '门店地址'; +COMMENT ON COLUMN training_store.contact_name IS '联系人'; +COMMENT ON COLUMN training_store.contact_phone IS '联系电话'; +COMMENT ON COLUMN training_store.training_content IS '培训内容介绍'; +COMMENT ON COLUMN training_store.cover_image IS '封面图file_id(sys_file.id)'; +COMMENT ON COLUMN training_store.status IS '状态:0禁用 1启用'; +COMMENT ON COLUMN training_store.created_at IS '创建时间'; +COMMENT ON COLUMN training_store.updated_at IS '更新时间'; +COMMENT ON COLUMN training_store.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_training_store_updated BEFORE UPDATE ON training_store + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 18. 微信模板消息发送日志表 wx_message_log(V16 新增) +-- V17 新增 task_id 列(关联发送任务) +-- ============================================================ +CREATE TABLE wx_message_log ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT, + biz_type SMALLINT NOT NULL, + biz_id BIGINT, + template_id VARCHAR(64) NOT NULL, + open_id VARCHAR(64), + msg_id BIGINT, + send_status SMALLINT NOT NULL, + skip_reason VARCHAR(200), + err_code VARCHAR(32), + err_msg VARCHAR(500), + result_status VARCHAR(64), + content TEXT, + task_id BIGINT, + send_time TIMESTAMP, + result_time TIMESTAMP, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_wx_message_log_user ON wx_message_log (user_id); +CREATE INDEX idx_wx_message_log_msg_id ON wx_message_log (msg_id); +CREATE INDEX idx_wx_message_log_status ON wx_message_log (send_status); +CREATE INDEX idx_wx_message_log_deleted ON wx_message_log (deleted_at); +COMMENT ON TABLE wx_message_log IS '微信模板消息发送日志表'; +COMMENT ON COLUMN wx_message_log.id IS '主键'; +COMMENT ON COLUMN wx_message_log.user_id IS '接收人用户ID(商家)'; +COMMENT ON COLUMN wx_message_log.biz_type IS '业务类型:1任务申请通知'; +COMMENT ON COLUMN wx_message_log.biz_id IS '业务单据ID'; +COMMENT ON COLUMN wx_message_log.template_id IS '微信模板ID'; +COMMENT ON COLUMN wx_message_log.open_id IS '接收人服务号 openid'; +COMMENT ON COLUMN wx_message_log.msg_id IS '微信返回的消息ID'; +COMMENT ON COLUMN wx_message_log.send_status IS '发送状态:0已跳过 1已提交 2送达成功 3送达失败'; +COMMENT ON COLUMN wx_message_log.skip_reason IS '跳过原因'; +COMMENT ON COLUMN wx_message_log.err_code IS '提交/送达错误码'; +COMMENT ON COLUMN wx_message_log.err_msg IS '提交/送达错误信息'; +COMMENT ON COLUMN wx_message_log.result_status IS '微信回调送达结果原文'; +COMMENT ON COLUMN wx_message_log.content IS '模板参数 JSON 快照'; +COMMENT ON COLUMN wx_message_log.task_id IS '关联的发送任务ID(wx_notify_task.id)'; +COMMENT ON COLUMN wx_message_log.send_time IS '提交微信发送时间'; +COMMENT ON COLUMN wx_message_log.result_time IS '微信回调送达时间'; +COMMENT ON COLUMN wx_message_log.created_at IS '创建时间'; +COMMENT ON COLUMN wx_message_log.updated_at IS '更新时间'; +COMMENT ON COLUMN wx_message_log.deleted_at IS '软删除时间'; +CREATE TRIGGER trg_wx_message_log_updated BEFORE UPDATE ON wx_message_log + FOR EACH ROW EXECUTE PROCEDURE set_updated_at(); + + +-- ============================================================ +-- 19. 微信模板消息发送任务表 wx_notify_task(V17 新增) +-- DB 持久化队列替代内存队列,解决服务重启任务丢失问题 +-- 消费机制:CAS 占位(status 0→1),完成后软删除 +-- ============================================================ +CREATE TABLE wx_notify_task ( + id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + user_id BIGINT NOT NULL, + biz_type SMALLINT NOT NULL, + biz_id BIGINT, + task_no VARCHAR(64), + task_name VARCHAR(128), + service_type_name VARCHAR(64), + handler VARCHAR(128), + operate_time VARCHAR(32), + template_id VARCHAR(64), + status SMALLINT NOT NULL DEFAULT 0, + retry_count SMALLINT NOT NULL DEFAULT 0, + next_retry_at TIMESTAMP, + skip_reason VARCHAR(200), + err_code VARCHAR(32), + err_msg VARCHAR(500), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); +CREATE INDEX idx_wx_notify_task_pending ON wx_notify_task (status, next_retry_at) + WHERE deleted_at IS NULL AND status = 0; +CREATE INDEX idx_wx_notify_task_user ON wx_notify_task (user_id); +CREATE INDEX idx_wx_notify_task_biz ON wx_notify_task (biz_type, biz_id); +COMMENT ON TABLE wx_notify_task IS '微信模板消息发送任务表(DB 持久化队列,消费完成后软删除)'; +COMMENT ON COLUMN wx_notify_task.id IS '主键'; +COMMENT ON COLUMN wx_notify_task.user_id IS '接收人用户ID'; +COMMENT ON COLUMN wx_notify_task.biz_type IS '业务类型:1任务申请 2审核结果 3飞手撤销'; +COMMENT ON COLUMN wx_notify_task.biz_id IS '业务单据ID'; +COMMENT ON COLUMN wx_notify_task.task_no IS '任务编号'; +COMMENT ON COLUMN wx_notify_task.task_name IS '任务名称'; +COMMENT ON COLUMN wx_notify_task.service_type_name IS '服务类型名称'; +COMMENT ON COLUMN wx_notify_task.handler IS '处理人文案'; +COMMENT ON COLUMN wx_notify_task.operate_time IS '操作时间 yyyy-MM-dd HH:mm'; +COMMENT ON COLUMN wx_notify_task.template_id IS '使用的模板ID'; +COMMENT ON COLUMN wx_notify_task.status IS '任务状态:0待处理 1处理中 2成功 3失败'; +COMMENT ON COLUMN wx_notify_task.retry_count IS '已重试次数'; +COMMENT ON COLUMN wx_notify_task.next_retry_at IS '下次重试时间(NULL=立即可处理)'; +COMMENT ON COLUMN wx_notify_task.skip_reason IS '跳过原因'; +COMMENT ON COLUMN wx_notify_task.err_code IS '最后一次失败的错误码'; +COMMENT ON COLUMN wx_notify_task.err_msg IS '最后一次失败的错误信息'; +COMMENT ON COLUMN wx_notify_task.created_at IS '创建时间(入队时间)'; +COMMENT ON COLUMN wx_notify_task.updated_at IS '更新时间'; +COMMENT ON COLUMN wx_notify_task.deleted_at IS '软删除时间(消费完成后置位)'; +CREATE TRIGGER trg_wx_notify_task_updated BEFORE UPDATE ON wx_notify_task + FOR EACH ROW EXECUTE PROCEDURE set_updated_at();