# 牧场管理 — 技术方案

> 依据：同目录 `牧场管理功能需求.md`。第三方同步 + 分页列表 + 只读详情；**不含**手工 CRUD、地图标点。

---

## 1. 技术架构

| 项 | 说明 |
| --- | --- |
| **后端** | RuoYi **v3.9.2**（**springboot2** 分支）：JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid |
| **数据库** | MySQL **5.7.39**，InnoDB，`utf8mb4` |
| **前端** | 若依 Vue2 |
| **第三方** | 生产管理系统开放接口 `GET /open-api/v1/farming/farms`（Apifox 文档见需求草稿） |

**分层**：`Controller` → `Service`（列表/详情）→ `PastureSyncService`（同步编排）→ `PastureSyncTxService`（单条事务）→ `ThirdPartyFarmClient` → `Mapper`/XML。

**代码位置**：`baqing-admin` → `com.ruoyi.web.modules.industryservice`（`BizPasture*`、`PastureSync*`、`ThirdPartyFarm*`）。

**业务摘要**

| 场景 | 行为 |
| --- | --- |
| 同步 | 分页拉取第三方养殖场；按 `external_id` upsert；`data_source=third_party` |
| 列表/详情 | `del_flag=0`；排序 `create_time DESC, id DESC`；可按角色脱敏手机 |
| 并发 | `AtomicBoolean` 防重入；重复同步抛「正在同步，请稍候」 |

**配置**（`application.yml` → `third-party.farming`，与牦牛资产等同源）

| 键 | 说明 |
| --- | --- |
| `enabled` | 是否启用同步 |
| `mode` | `stub`：classpath `thirdparty/stub-farms.json`；`http`：远程接口 |
| `base-url` | 第三方根地址（http 模式） |
| `app-key` / `app-secret` | 请求头 `X-App-Key` / `X-App-Secret` |
| `page-size` | 分页大小，最大 200 |

---

## 2. 数据库设计

### 2.1 表 `biz_pasture`（类型对齐 OpenFarmVo）

| 接口字段 | OpenAPI 类型 | 库字段 | MySQL 类型 |
| --- | --- | --- | --- |
| `id` | integer / int64 | `external_id` | `bigint(20)` |
| `farmName` | string | `pasture_name` | `varchar(128)` |
| `farmType` | string | `farm_type` | `varchar(64)` |
| `introduction` | string | `introduction` | `text` |
| `latitude` | number | `latitude` | `double` |
| `longitude` | number | `longitude` | `double` |
| `address` | string | `detail_address` | `varchar(512)` |
| `person` | string | `person_in_charge` | `varchar(64)` |
| `contactPhone` | string | `contact_phone` | `varchar(32)` |
| `county` | string | `county` | `varchar(128)` |
| `town` | string | `town` | `varchar(128)` |
| `floorArea` | string | `floor_area` | `varchar(128)` |
| `scaleBreeding` | string | `scale_breeding` | `varchar(128)` |
| `breedSpecies` | string | `breed_species` | `varchar(256)` |
| `createTime` | string | `create_time` | `datetime` |
| `remarks` | string | `remark` | `varchar(1000)` |

本地字段：`id`（自增主键）、`data_source`、`last_sync_time`、`del_flag`、审计字段。

**DDL**：`sql/biz_pasture.sql`（新库）；已有旧表先 `sql/biz_pasture_sync_alter.sql` 加列，再 `sql/biz_pasture_drop_legacy_columns.sql` 删历史列；刷新注释用 `sql/biz_pasture_comment_alter.sql`。

**索引**：`uk_external_id`；`idx_pasture_name`、`idx_farm_type`、`idx_create_time`。

---

## 3. 接口设计

**统一响应**：`AjaxResult`（`code` / `msg` / `data`）或分页 `TableDataInfo`（`rows`、`total`）。

**权限标识**：`dataModel:pasture:list|query|sync`

**Base Path**：`/dataModel/pasture`

| # | 说明 | Method | URI | 权限 | 要点 |
| --- | --- | --- | --- | --- | --- |
| 3.1 | 分页列表 | GET | `/list` | `dataModel:pasture:list` | Query **3.1.1** |
| 3.2 | 详情 | GET | `/{id}` | `dataModel:pasture:query` | 全字段 |
| 3.3 | 同步 | POST | `/sync` | `dataModel:pasture:sync` | 返回 `YakAssetSyncResultVo` 结构 |

#### 3.1.1 列表 Query

| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `pageNum` / `pageSize` | int | N | 默认 `1` / `20` |
| `keyword` | string | N | 牧场名称模糊 |
| `farmType` | string | N | `1` / `2` 精确（对应 OpenFarmVo.farmType） |

#### 3.3.1 同步响应 `data`

| 字段 | 说明 |
| --- | --- |
| `insertCount` | 新增条数 |
| `updateCount` | 更新条数 |
| `failCount` | 失败条数 |
| `failMessages` | 失败明细 |
| `syncTime` | 同步完成时间 |

### 3.4 第三方开放接口（对接）

| 项 | 值 |
| --- | --- |
| Method | GET |
| Path | `/open-api/v1/farming/farms` |
| Query | `pageNum`、`pageSize`（≤200）、可选 `updatedAfter`、`farmName`、`farmType` |
| Header | `X-App-Key`、`X-App-Secret` |
| 响应 | `code=0` 成功；`data.records` 为 `OpenFarmVo` 列表 |

---

## 4. 菜单与权限（示例）

| 类型 | 名称 | 权限标识 |
| --- | --- | --- |
| 菜单 | 牧场管理 | `dataModel:pasture:list` |
| 按钮 | 查询 | `dataModel:pasture:query` |
| 按钮 | 同步 | `dataModel:pasture:sync` |

组件路径：`dataModel/pasture/index`。

---

## 5. 交付清单

- [x] `sql/biz_pasture.sql`、`sql/biz_pasture_sync_alter.sql`
- [x] `BizPasture` Domain / Mapper / Service / Controller
- [x] `ThirdPartyFarmClient`、`PastureSyncService`、`PastureSyncTxService`
- [x] `thirdparty/stub-farms.json`、`third-party.farming` 配置
- [x] 单元测试 / MockMvc（列表、详情、同步）

---

## 6. 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初稿：本地 CRUD + 逻辑删除 |
| 2.0 | 对齐草稿：第三方同步；扩展表字段；移除 add/edit/remove 接口 |
