# 科研开放数据接口 — 功能需求 ## 1. 文档说明 | 项 | 说明 | | --- | --- | | 模块名称 | 科研开放数据接口 | | 目标 | 为高校、研究机构提供符合规范的**脱敏**牦牛种群健康、牧场管理等科研数据集,助力高原牧业关键技术攻关 | | 关联系统 | 对外 HTTP 开放接口(**无**管理后台页面、**无**若依登录) | | 修订依据 | 产业数据模型及服务建设需求 | 本文档仅描述**功能需求与业务规则**;接口路径、字段命名、实现细节见同目录 `科研开放数据接口技术方案.md`。 --- ## 2. 业务背景 县域牦牛产业数据汇聚于「产业数据模型及服务」模块(牧场管理、牦牛资产档案等)。科研合作方需要**只读**拉取结构化数据,且不得获取可直接识别个人或个体的敏感信息。 --- ## 3. 功能范围 **本期实现:** | 能力 | 说明 | | --- | --- | | 访问令牌 | 使用全局 `appKey` + `appSecret` 申请 Bearer Token | | 牧场列表 | 分页返回脱敏牧场数据 | | 牦牛资产档案列表 | 分页返回脱敏档案数据(种群健康研究字段) | | 牦牛存栏数据列表 | 分页返回村级存栏填报汇总 | | 牦牛出栏数据列表 | 分页返回村级出栏填报汇总 | | 合作社发展数据列表 | 分页返回合作社发展填报;法人姓名脱敏 | | 畜牧产品产量登记列表 | 分页返回村级肉/奶产量 | | 家庭牧场数据列表 | 分页返回家庭牧场填报;法人姓名脱敏 | | 可支配收入数据列表 | 分页返回县级年度可支配收入填报 | | 农牧户数据列表 | 分页返回村级农牧户填报 | | 共同富裕项目列表 | 分页返回共同富裕项目 | | 养殖大户数据列表 | 分页返回养殖大户填报;法人姓名脱敏 | | 疫苗接种数据列表 | 分页返回村级疫苗接种填报 | | 有无畜户数据列表 | 分页返回村级有无畜户填报 | | 农村三资数据列表 | 分页返回村级农村三资填报 | | 三资具体问题列表 | 分页返回三资具体问题上报 | | 科技服务人员详情 | 返回科技服务人员管理单例配置 | **本期不实现:** - 按机构/高校区分凭证或配额 - 管理后台维护客户端 - 数据导出任务、订阅推送、Webhook - 明细子表(生理时序、生长曲线等)下钻接口 - 若依用户 JWT 或菜单权限访问本开放接口 --- ## 4. 访问流程 ```mermaid sequenceDiagram participant Client as 科研调用方 participant API as 开放接口 participant DB as 产业数据库 Client->>API: POST /auth/token (appKey, appSecret) API-->>Client: accessToken (Bearer) Client->>API: GET /pastures 或 /yak-assets + Authorization API->>DB: 查询 biz_pasture / biz_yak_asset API-->>Client: 脱敏分页 JSON ``` 1. 调用方使用配置的 **appKey / appSecret** 申请 Token。 2. 在 Token 有效期内,请求头携带 `Authorization: Bearer ` 访问数据接口。 3. 服务端返回已脱敏字段;**不区分**具体合作机构。 --- ## 5. 认证与安全 | 项 | 要求 | | --- | --- | | 凭证 | 全局一对 `app-key` / `app-secret`(`application.yml` 配置) | | Token | JWT,独立于若依用户登录 Token | | 有效期 | 默认 120 分钟,可配置 | | 数据接口 | 除 Token 申请外,**必须**携带有效 Bearer Token,否则 401 | | 开关 | `research-open-api.enabled=false` 时接口返回 503 | | 生产 | 须修改默认 `app-key`、`app-secret`、`token-secret` | --- ## 6. 数据接口 **Base Path**:`/open-api/v1/research` ### 6.1 申请 Token | 项 | 说明 | | --- | --- | | 方法 | POST | | 路径 | `/auth/token` | | 请求体 | `appKey`、`appSecret`(JSON,小驼峰) | | 响应 | `accessToken`、`tokenType`(Bearer)、`expiresIn`(秒) | ### 6.2 牧场列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/pastures` | | 鉴权 | Bearer Token | | 分页 | `pageNum`(默认 1)、`pageSize`(默认 20,最大 200) | | 筛选 | `keyword`(牧场名称模糊)、`farmType` | **返回字段(脱敏后)**:`pastureId`、`pastureName`、`farmType`、`county`、`town`、`regionSummary`、`latitude`、`longitude`(约百米精度)、`floorArea`、`scaleBreeding`、`breedSpecies`、`introduction`、`personInCharge`(脱敏)、`contactPhone`(脱敏)。 **不返回**:第三方编号、详细门牌地址、同步元数据、操作人等。 ### 6.3 牦牛资产档案列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/yak-assets` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `assetStatus`(1正常 2死淘 3丢失 4出栏)、`gender`(公/母)、`pastureId` | **返回字段(脱敏后)**:`subjectCode`(科研主体 pseudonym,替代明文牦牛编号)、`pastureName`、`enclosureName`、`gender`、`cattleVariety`、`ageMonths`、`birthYear`、`birthMonth`、`assetStatus`、`assetStatusLabel`、`entryWeightKg`、`source`、`breedingMethod`、`entryCycle`、`realtimeTemp`、`realtimeSteps`、`envTemp`、`fatherSubjectCode`、`motherSubjectCode`。 **不返回**:`yakNo`、耳标号、第三方 ID、登记人、照片 URL、精确 GPS、备注等。 ### 6.4 牦牛存栏数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/yak-herd-inventories` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`(所属年份)、`statMonth`(所属月份)、`townName`(所属乡镇模糊)、`villageName`(所属村模糊) | **返回字段**:`inventoryId`、`statYear`、`statMonth`、`townName`、`villageName`、畜群结构汇总数量字段(公牛/母牛/奶牛/羊/保险及各类合计等)。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.5 牦牛出栏数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/yak-outbound-reports` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`(所属年份)、`statMonth`(所属月份)、`townName`(所属乡镇模糊)、`villageName`(所属村模糊) | **返回字段**:`outboundId`、`statYear`、`statMonth`、`townName`、`villageName`、农牧户/人口及各类出栏数量(牦牛/牛/绵羊/山羊/马骡/驴、自食牛羊等)。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.6 合作社发展数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/cooperative-developments` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊)、`cooperativeName`(合作社名称模糊) | **返回字段**:`cooperativeId`、年月、乡镇村、合作社信息、入社/入股/效益/就业/存出栏/认证/培训/经营等业务字段;`legalRepresentative` 脱敏。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.7 畜牧产品产量登记列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/livestock-product-outputs` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊) | **返回字段**:`outputId`、`statYear`、`statMonth`、`townName`、`villageName`、`meatOutput`(万吨)、`milkOutput`(万吨)。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.8 家庭牧场数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/family-ranches` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊)、`enterpriseName`(企业名称模糊) | **返回字段**:`ranchId`、年月、乡镇村、企业信息、存出栏、草场、经营收支、补助与认证等;`legalRepresentative` 脱敏。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.9 可支配收入数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/disposable-incomes` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`(所属年份精确) | **返回字段**:`incomeId`、`statYear`、`ruralDisposableIncome`、`povertyNetIncome`、`incomeIncrease`、`incomeGrowthRate`。 **不返回**:创建人、备注等内部字段。 ### 6.10 农牧户数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/farmer-households` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊) | **返回字段**:`householdId`、年月、乡镇村、户数人数、草场面积与载畜量、户类型标识、补助奖励等。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.11 共同富裕项目列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/common-prosperity-projects` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `projectName`(项目名称模糊)、`projectType`(项目类型精确,1~3)、`implYear`(实施年限精确) | **返回字段**:`projectId`、`projectName`、`projectType`、简介与内容、投资金额、实施年限与情况、媒体 URL、发布状态、运营图片数量等。 **不返回**:本地文件路径、创建人、备注等内部字段。 ### 6.12 养殖大户数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/large-livestock-farmers` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊)、`enterpriseName`(企业名称模糊) | **返回字段**:`farmerId`、年月、乡镇村、企业信息、存出栏、草场、经营收支、补助与认证等;`legalRepresentative` 脱敏。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.13 疫苗接种数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/vaccination-data` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊) | **返回字段**:`vaccinationId`、年月、乡镇村、`shouldVaccinateCount`、`actualVaccinateCount`、`immunityRate`。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.14 有无畜户数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/livestock-ownership-households` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `statYear`、`statMonth`、`townName`(乡镇模糊)、`villageName`(村模糊) | **返回字段**:`ownershipId`、年月、乡镇村、有畜户/无畜户户数人数劳动力及有畜户牲畜数。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.15 农村三资数据列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/rural-three-assets` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `townName`(乡镇模糊)、`villageName`(村模糊) | **返回字段**:`assetsId`、乡镇村、`operatingFixedAssets`、`nonOperatingFixedAssets`、`fixedAssets`。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.16 三资具体问题列表 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/three-assets-problem-reports` | | 鉴权 | Bearer Token | | 分页 | 同 §6.2 | | 筛选 | `townName`(乡镇模糊)、`villageName`(村模糊)、`beginReportTime`+`endReportTime`(`yyyy-MM-dd`,**同时有值**时按上报日期区间过滤) | **返回字段**:`problemId`、`reportTime`、乡镇村、问题等级、详情、处理结果。 **不返回**:部门 ID、创建人、备注等内部字段。 ### 6.17 科技服务人员详情 | 项 | 说明 | | --- | --- | | 方法 | GET | | 路径 | `/tech-service-personnel` | | 鉴权 | Bearer Token | | 参数 | 无(单例配置) | **返回字段**:科技特派员男女/党员/合计人数,农业事业单位初级/员级/中级/副高/管理级/合计人数。 **不返回**:操作人、更新时间等内部字段。 --- ## 7. 脱敏规则摘要 | 类型 | 规则 | | --- | --- | | 手机号 | 保留前 3 + 后 4,中间 `****` | | 负责人姓名 | 保留首字 + `*` | | 地址 | 仅区县 + 乡镇摘要,不含详细门牌 | | 经纬度 | 保留 3 位小数(约百米) | | 牦牛个体 | `subjectCode = YS` + 8 位本地 ID;系谱用 `YP`/`YM` + 哈希短码 | | 出生日期 | 仅返回 `birthYear`、`birthMonth` | --- ## 8. 响应格式 统一 envelope(与第三方 OpenAPI 风格一致): | 字段 | 说明 | | --- | --- | | `code` | 200 成功;401 未授权;400 参数错误;503 未启用 | | `message` | 提示文案 | | `requestId` | 请求追踪 ID | | `data` | 业务数据 | | `timestamp` | ISO 时间戳 | 列表类 `data` 为分页对象:`pageNum`、`pageSize`、`total`、`records[]`。 --- ## 9. 与其他模块关系 | 模块 | 关系 | | --- | --- | | 牧场管理 | 数据源 `biz_pasture` | | 牦牛资产档案管理 | 数据源 `biz_yak_asset` | | 牦牛存栏数据填报 | 数据源 `biz_yak_herd_inventory` | | 牦牛出栏数据填报 | 数据源 `biz_yak_outbound_report` | | 合作社发展数据填报 | 数据源 `biz_cooperative_development` | | 畜牧产品产量登记 | 数据源 `biz_livestock_product_output` | | 家庭牧场数据填报 | 数据源 `biz_family_ranch` | | 可支配收入数据填报 | 数据源 `biz_disposable_income` | | 农牧户数据填报 | 数据源 `biz_farmer_household` | | 共同富裕项目管理 | 数据源 `biz_common_prosperity_project` | | 养殖大户数据填报 | 数据源 `biz_large_livestock_farmer` | | 疫苗接种数据填报 | 数据源 `biz_vaccination_data` | | 有无畜户数据填报 | 数据源 `biz_livestock_ownership_household` | | 农村三资数据填报 | 数据源 `biz_rural_three_assets` | | 三资具体问题上报 | 数据源 `biz_three_assets_problem_report` | | 科技服务人员管理 | 数据源 `biz_tech_service_personnel`(单例) | | 若依权限体系 | **无**关联;开放接口走独立 Token | --- ## 10. 需求追溯 | 能力 | 章节 | | --- | --- | | Token 认证 | §4、§5、§6.1 | | 牧场列表 | §6.2、§7 | | 牦牛档案列表 | §6.3、§7 | | 牦牛存栏列表 | §6.4 | | 牦牛出栏列表 | §6.5 | | 合作社发展列表 | §6.6 | | 畜牧产品产量列表 | §6.7 | | 家庭牧场列表 | §6.8 | | 可支配收入列表 | §6.9 | | 农牧户列表 | §6.10 | | 共同富裕项目列表 | §6.11 | | 养殖大户列表 | §6.12 | | 疫苗接种列表 | §6.13 | | 有无畜户列表 | §6.14 | | 农村三资列表 | §6.15 | | 三资具体问题列表 | §6.16 | | 科技服务人员详情 | §6.17 | | 脱敏合规 | §7 | | 本期不实现 | §3 |