wwh пре 1 недеља
родитељ
комит
847eaf2216

+ 9 - 7
doc/产业数据模型及服务/养殖产业数据/养殖产业数据前端技术方案.md

@@ -50,16 +50,18 @@
50 50
 
51 51
 | 规则 | 实现 |
52 52
 | --- | --- |
53
-| 首次进入 | `mounted` 调用 `getBreedingDashboard()`;全页 `v-loading` |
53
+| 首次进入 | `mounted` 调用 `getBreedingDashboard({ statYear })`;默认当前年;全页 `v-loading` |
54 54
 | 刷新 | `forceRefresh=true`;`refreshing` 防重复点击 |
55 55
 | 失败 | `msg` 提示;**清空**本地 `dashboardData`,不保留上一用户数据 |
56
-| 空数据 | 数字 `0` 或 `—`;图表 `empty` 文案 |
57
-| 未标注性别 | `unknownGenderCount > 0` 时展示「未标注性别:N 头」 |
58
-| 月趋势 | `monthlyTrend` 仅 1~当前月;X 轴 1~12,无数据月份不画点 |
59
-| 年龄/退化占比 | 接口 `ratio` 已为 0~100;展示加 `%`,保留 1 位小数 |
60
-| 单位 | 头、个、亩 与卡片文案一致 |
56
+| 空数据 | 数字 `0` 或 `—`;图表 `emptyChart` 文案 |
57
+| 月趋势 | `monthlyTrend` 为所选年 1~填报最大月;横轴显示月份,悬停显示年月 |
58
+| 存栏结构 | `yakInventoryStructure` 双层饼:内环大类、外环细分;`ratio` 展示加 `%` |
59
+| 退化占比 | `degradationStats` 固定 5 项;`ratio` 展示加 `%` |
60
+| 单位 | 头、个、亩、户,与卡片文案一致 |
61 61
 
62
-**折线图**:`inventoryCount` 系列;当前月点应与总览「存栏总量」一致(联调校验)。
62
+**折线图**:公牛/母牛两系列;最大月点应与存栏变动 header 公母一致(联调校验)。
63
+
64
+**双层饼图**:内环 `BULL`/`COW`/`INSURED`,外环种公牛、阉畜、幼畜、成畜、保险。
63 65
 
64 66
 **退化五档**:`degradationStats` 固定 5 项;图例用 `degradationLabel`。
65 67
 

+ 8 - 9
doc/产业数据模型及服务/养殖产业数据/养殖产业数据功能需求-草稿.md

@@ -1,11 +1,10 @@
1
-做一个养殖产业数据模块:
1
+# 养殖产业数据 — 功能需求草稿(已过时)
2 2
 
3
-1. 养殖产业数据包括:产业总览、牦牛存栏变动、牦牛年龄结构、草场类型占比。
4
-2. 产业总览包括:牦牛存栏总量(头)、牦牛年出栏量(头)、预警牦牛数量(头)、农牧户(户)、草场数量(个)、草场面积(亩);存栏/出栏/农牧户取填报表**最近年月**全县合计。
5
-3. 牦牛存栏变动:公牛、母牛两维度(最近填报年月);趋势为滚动最近 **12** 自然月双折线,横轴仅月、悬停显年月;**不展示**未标注性别。
6
-4. 牦牛年龄结构:母牛四档(1岁以下、1~3岁、3~12岁、12岁以上),与大屏一致。
7
-5. 草场类型占比:1、统计可用、使用中的草场数量;2、通过未退化、轻度、中度、重度、极重度等维度统计草场的数量和占比。
8
-6. 异常返回:统一格式 code、msg、data。
9
-7. 技术栈:RuoYi v3.9.2-springboot2 分支 + MySQL-5.7.39。
3
+> **请以同目录正式文档 `养殖产业数据功能需求.md` 为准。** 本稿仅保留历史草稿,不再维护。
10 4
 
11
-> 正式需求见同目录 `养殖产业数据功能需求.md`(v1.2+)。
5
+正式口径摘要(v1.5):
6
+
7
+1. 产业总览、牦牛存栏变动、**牦牛存栏结构**、草场类型占比。  
8
+2. 默认所选年为**当前自然年**;可切换。  
9
+3. 牦牛存栏结构与大屏 `yakInventoryStructure` 一致(双层饼:公牛/母牛/保险及细分)。  
10
+4. 农牧户、草场面积取自 `biz_farmer_household`。  

+ 9 - 9
doc/产业数据模型及服务/养殖产业数据/养殖产业数据功能需求.md

@@ -18,7 +18,7 @@
18 18
 ### 2.1 看板与数据性质
19 19
 
20 20
 - 本模块为**只读数据看板**:不提供指标手工录入、修改、删除;所有数值由关联业务模块台账或同步数据**汇总计算**后展示。  
21
-- 页面自上而下分为四个功能区:**产业总览**、**牦牛存栏变动**、**牦牛年龄结构**、**草场类型占比**(与原型布局一致)。  
21
+- 页面自上而下分为四个功能区:**产业总览**、**牦牛存栏变动**、**牦牛存栏结构**、**草场类型占比**(与原型布局一致)。  
22 22
 - 指标**非最终版**:草稿说明产业数据可能随第三方对接扩展;新增指标须修订本文档并更新原型。
23 23
 
24 24
 ### 2.2 统计范围与时间
@@ -34,7 +34,7 @@
34 34
 
35 35
 ### 2.3 牦牛「存栏」认定
36 36
 
37
-用于存栏总量、性别结构、年龄结构、存栏趋势等。
37
+用于存栏总量、性别结构、存栏趋势等(档案口径,预警等仍可能引用;看板主指标见 **§2.11**)
38 38
 
39 39
 | 规则 | 说明 |
40 40
 | --- | --- |
@@ -118,7 +118,7 @@
118 118
 
119 119
 **状态变更日期为空**且当前为非正常状态:该个体在**所有历史月末**均**不计入**存栏趋势。
120 120
 
121
-> **看板说明(v1.2)**:**§5.3 存栏变动**、**§5.4 年龄结构**及总览存栏/出栏/农牧户三项已改由 **§2.11 存栏出栏填报** 统计,**不再**使用本节档案月末还原。本节保留供档案类指标(如预警关联档案)参考。
121
+> **看板说明(v1.5)**:**§5.3 存栏变动**、**§5.4 牦牛存栏结构**及总览存栏/出栏/农牧户/草场面积已改由 **§2.11 填报表** 按所选年统计,**不再**使用本节档案月末还原。本节保留供档案类指标(如预警关联档案)参考。
122 122
 
123 123
 ### 2.11 存栏出栏填报(看板主口径)
124 124
 
@@ -131,7 +131,7 @@
131 131
 | 农牧户、草场面积 | `biz_farmer_household` | 所选年最大填报月;`household_count`、`pasture_contract_area`(与大屏一致) |
132 132
 | 公/母牛数量 | `biz_yak_herd_inventory` | 所选年最大填报月全县 `bull_total`、`cow_total`;未标注=`yak−公−母` |
133 133
 | 存栏趋势 | `biz_yak_herd_inventory` | 所选年 1~填报最大月;缺月补 **0**;无填报为空数组 |
134
-| 年龄结构 | `biz_yak_herd_inventory` | **改为牦牛存栏结构**(与大屏 `yakInventoryStructure` 一致):所选年最大填报月公牛/母牛/保险及细分 |
134
+| 牦牛存栏结构 | `biz_yak_herd_inventory` | 与大屏 `yakInventoryStructure` 一致:所选年最大填报月公牛/母牛/保险及细分 |
135 135
 
136 136
 **默认年份**:进入看板时所选年为**当前自然年**(可切换)。
137 137
 
@@ -174,7 +174,7 @@ flowchart TB
174 174
     subgraph board [养殖产业数据看板]
175 175
         O[产业总览]
176 176
         I[牦牛存栏变动]
177
-        Age[牦牛年龄结构]
177
+        Age[牦牛存栏结构]
178 178
         Grass[草场类型占比]
179 179
     end
180 180
     A --> O
@@ -214,8 +214,8 @@ flowchart LR
214 214
 
215 215
 | 项 | 要求 |
216 216
 | --- | --- |
217
-| 布局 | 单页纵向滚动;四块标题与原型一致:产业总览、牦牛存栏变动、牦牛年龄结构、草场类型占比 |
218
-| 年份 | 工具栏提供年份选择;**默认当前自然年**;切换后按所选年重算总览填报项、存栏变动、年龄结构(与大屏一致) |
217
+| 布局 | 单页纵向滚动;四块标题:产业总览、牦牛存栏变动、牦牛存栏结构、草场类型占比 |
218
+| 年份 | 工具栏提供年份选择;**默认当前自然年**;切换后按所选年重算总览填报项、存栏变动、存栏结构(与大屏一致) |
219 219
 | 加载 | 首次进入全页加载;失败时给出明确提示,**不得**展示上一用户缓存数据冒充成功 |
220 220
 | 刷新 | 页面提供「刷新」按钮(位置与全局规范一致,如右上角工具栏);刷新中防重复点击;成功后更新全部指标与图表 |
221 221
 | 空数据 | 某模块无数据时,数字显示 **0** 或「—」,图表展示空态说明,不报错崩溃 |
@@ -306,7 +306,7 @@ flowchart LR
306 306
 | 牧场管理 | 提供牧场数量;经营状态、逻辑删除规则影响是否计入 |
307 307
 | 草场管理 | 提供草场数量、面积、退化等级、利用类型、禁牧日期;驱动可用/使用中及退化占比 |
308 308
 | 牦牛资产档案管理 | 预警等仍关联档案;存栏变动/年龄已改填报表 **§2.11** |
309
-| 牦牛存栏数据填报 | 驱动总览存栏、公母数量、趋势、年龄结构 |
309
+| 牦牛存栏数据填报 | 驱动总览存栏、公母数量、趋势、存栏结构 |
310 310
 | 牦牛出栏数据填报 | 驱动总览出栏、农牧户 |
311 311
 | 牦牛疾病预警 | 提供预警牦牛数量;周期与去重规则见 **§2.5**、该模块 **§5.6** |
312 312
 | 草畜平衡计算 | 本期看板**不展示**平衡指数;若后续纳入须修订本文档 |
@@ -376,7 +376,7 @@ flowchart LR
376 376
 | --- | --- |
377 377
 | 产业总览六项 | §5.2、§2.3~§2.6、§2.11 |
378 378
 | 公母牛数量 + 月趋势 | §5.3、§2.11 |
379
-| 年龄四档占比 | §5.4 |
379
+| 牦牛存栏结构双层饼 | §5.4、§2.11 |
380 380
 | 草场可用/使用中 + 退化占比 | §5.5、§2.7、§2.8 |
381 381
 | 只读看板 | §3、§5.1 |
382 382
 

+ 1 - 1
doc/产业数据模型及服务/养殖产业数据/养殖产业数据技术方案.md

@@ -33,7 +33,7 @@
33 33
 | `biz_grassland` | 草场管理 |
34 34
 | `biz_yak_asset` | 牦牛资产档案 |
35 35
 | `biz_yak_disease_warning` | 牦牛疾病预警 |
36
-| `biz_yak_herd_inventory` | 牦牛存栏数据填报(存栏变动、年龄结构、总览存栏) |
36
+| `biz_yak_herd_inventory` | 牦牛存栏数据填报(存栏变动、存栏结构、总览存栏) |
37 37
 | `biz_yak_outbound_report` | 牦牛出栏数据填报(总览出栏) |
38 38
 | `biz_farmer_household` | 农牧户填报(总览农牧户、草场面积) |
39 39
 

+ 3 - 3
doc/产业数据模型及服务/养殖产业数据/养殖产业数据测试用例.md

@@ -33,7 +33,7 @@
33 33
 | **HERD-L** | `biz_yak_herd_inventory` 最近填报年月全县 bull/cow/yak 合计 |
34 34
 | **HERD-M** | 某历史月填报记录,用于滚动 12 月趋势 |
35 35
 
36
-**联调统计日**:固定 **2026-05-20**(`monthlyTrend` 含 **12** 点:2025-06~2026-05;每项含 `statYear`、`month`、`bullCount`、`cowCount`)。
36
+**联调统计日**:固定 **2026-05-20**(`monthlyTrend` 为所选年 1~N;每项含 `statYear`、`month`、`bullCount`、`cowCount`)。
37 37
 
38 38
 ---
39 39
 
@@ -107,7 +107,7 @@
107 107
 | ZCZX-YZCYSJ-API-017 | 鉴权 | 未登录 | 接口测试 | curl | §7.2 异常 | 无 Token | `GET /dashboard` | 401 或统一未登录 |
108 108
 | ZCZX-YZCYSJ-API-018 | 权限 | 无 query 权限 | 接口测试 | Postman | §7.1 | 角色无 `breedingIndustry:query` | `GET /dashboard` | 403 或 `msg` 无权限 |
109 109
 | ZCZX-YZCYSJ-API-019 | 异常 | 聚合失败 | 接口测试 | Postman/Mock | §3.1.8 | Mock Mapper 抛错 | `GET /dashboard` | 失败;`data` 空;`msg` 含「加载失败」类文案 |
110
-| ZCZX-YZCYSJ-API-020 | 异常 | 空库零值 | 接口测试 | Postman | §5.1 空态 | 新库无业务数据 | `GET /dashboard` | `code=200`;数值 0;`ageStructure` 长 **4**、`degradationStats` 长 5 |
110
+| ZCZX-YZCYSJ-API-020 | 异常 | 空库零值 | 接口测试 | Postman | §5.1 空态 | 新库无业务数据 | `GET /dashboard` | `code=200`;数值 0;`yakInventoryStructure` 长 **3**、`degradationStats` 长 5 |
111 111
 | ZCZX-YZCYSJ-API-021 | 范围 | 无维护/同步接口 | 接口测试 | Postman | §3 本期不实现 | 已登录 | `POST/PUT/DELETE /dataModel/breedingIndustry/**` | 404/405 或无权限 |
112 112
 | ZCZX-YZCYSJ-API-022 | 范围 | 无筛选参数 | 接口测试 | Postman | §3、§8 | 已登录 | 传 `pastureId`/`year` 等非法 Query | 忽略或 400;口径仍按 §2 默认 |
113 113
 | ZCZX-YZCYSJ-API-023 | 出栏 | 无变更日出栏 | 接口测试 | Postman | §2.4 | 仅 Y-O0 | `annualOutbound` | 0 |
@@ -157,7 +157,7 @@
157 157
 | §5.1 加载/刷新/空态 | UT-028~029 | API-001、011~012、019~020 | UI-001、009~012 |
158 158
 | §5.2 产业总览 | UT-028 | API-003 | UI-002 |
159 159
 | §5.3 存栏变动 | UT-013、018~022 | API-004~006 | UI-003~005 |
160
-| §5.4 年龄结构 | UT-015~017 | API-007~008 | UI-006 |
160
+| §5.4 牦牛存栏结构 | UT-015~017 | API-007~008 | UI-006 |
161 161
 | §5.5 草场占比 | UT-025~027 | API-009~010 | UI-007 |
162 162
 | §7 权限提示 | — | API-017~018 | UI-013 |
163 163
 | §3 本期不实现 | — | API-021~022 | UI-014 |

+ 11 - 73
ruoyi-ui/doc/产业数据模型及体系/养殖产业数据/养殖产业数据前端技术方案.md

@@ -1,6 +1,6 @@
1 1
 # 养殖产业数据 — 前端技术方案
2 2
 
3
-> 依据:`养殖产业数据功能需求.md`、`养殖产业数据技术方案.md`;布局对齐原型 `Snipaste_2026-05-19_12-33-09.jpg`。字段 **小驼峰**,与接口一致。
3
+> 与 `doc/产业数据模型及服务/养殖产业数据/养殖产业数据前端技术方案.md` 保持一致。字段 **小驼峰**,与接口一致。
4 4
 
5 5
 ---
6 6
 
@@ -26,20 +26,18 @@
26 26
 
27 27
 | 方法 | HTTP | 说明 |
28 28
 | --- | --- | --- |
29
-| `getBreedingDashboard` | GET | `/dashboard`,Query 可选 `forceRefresh=true` |
29
+| `getBreedingDashboard` | GET | `/dashboard`,Query:`statYear`(默认当前年)、可选 `forceRefresh=true` |
30 30
 
31 31
 ---
32 32
 
33 33
 ## 3. 页面结构(单页四块)
34 34
 
35
-纵向滚动,块标题与需求 **§5.1** 一致。
36
-
37 35
 | 区块 | 组件建议 | 数据节点 |
38 36
 | --- | --- | --- |
39
-| 工具栏 | 右上角「刷新」`el-button`,`v-hasPermi` query | — |
37
+| 工具栏 | 年份 `el-select`(默认当前年)+「刷新」 | `statYear` |
40 38
 | 产业总览 | 6 个指标卡片 | `data.overview` |
41 39
 | 牦牛存栏变动 | 公/母数字 + ECharts 折线 | `data.inventoryChange` |
42
-| 牦牛年龄结构 | ECharts 环形图 | `data.ageStructure` |
40
+| 牦牛存栏结构 | ECharts 双层饼图 | `data.yakInventoryStructure` |
43 41
 | 草场类型占比 | 可用/使用中数字 + 退化占比图 + 表格 | `data.grassland` |
44 42
 
45 43
 页眉展示 **统计日** `statDate`、**统计年** `statYear`。
@@ -50,18 +48,11 @@
50 48
 
51 49
 | 规则 | 实现 |
52 50
 | --- | --- |
53
-| 首次进入 | `mounted` 调用 `getBreedingDashboard()`;全页 `v-loading` |
54
-| 刷新 | `forceRefresh=true`;`refreshing` 防重复点击 |
55
-| 失败 | `msg` 提示;**清空**本地 `dashboardData`,不保留上一用户数据 |
56
-| 空数据 | 数字 `0` 或 `—`;图表 `emptyChart` 文案 |
57
-| 未标注性别 | `unknownGenderCount > 0` 时展示「未标注性别:N 头」 |
58
-| 月趋势 | `monthlyTrend` 仅 1~当前月;X 轴 1~12,无数据月份不画点 |
59
-| 年龄/退化占比 | 接口 `ratio` 已为 0~100;展示加 `%`,保留 1 位小数 |
60
-| 单位 | 头、个、亩,与卡片文案一致 |
61
-
62
-**折线图**:`inventoryCount` 系列;当前月点应与总览「存栏总量」联调校验。
63
-
64
-**退化五档**:`degradationStats` 固定 5 项;图例用 `degradationLabel`。
51
+| 首次进入 | `mounted` 调用 `getBreedingDashboard({ statYear })`;默认当前年 |
52
+| 刷新 | `forceRefresh=true`;防重复点击 |
53
+| 月趋势 | 所选年 1~填报最大月 |
54
+| 存栏结构 | `yakInventoryStructure` 双层饼(内环大类、外环细分) |
55
+| 退化占比 | `degradationStats` 固定 5 项 |
65 56
 
66 57
 ---
67 58
 
@@ -69,65 +60,12 @@
69 60
 
70 61
 | 项 | 说明 |
71 62
 | --- | --- |
72
-| **语言包** | `livestockIndustry.breedingIndustry`(`lang/zh/livestockIndustry.js`、`lang/bo/livestockIndustry.js`) |
73
-| **Mixin** | `mixins/livestockIndustryLocaleMixin.js`:`biT` / `biCommon` / `biDash` |
74
-| **注册** | `lang/zh-CN.js`、`lang/bo.js` 引入 `livestockIndustry` |
63
+| **语言包** | `livestockIndustry.breedingIndustry` |
64
+| **Mixin** | `mixins/livestockIndustryLocaleMixin.js` |
75 65
 
76 66
 ---
77 67
 
78 68
 ## 6. 权限与菜单
79 69
 
80 70
 - 菜单进入需 `dataModel:breedingIndustry:query`。
81
-- 无数据时仍可见页面;刷新按钮同权限。
82 71
 - **无**导出、同步、编辑按钮。
83
-
84
----
85
-
86
-## 7. 交付清单
87
-
88
-- [x] `api/livestockIndustry/breedingIndustry.js`
89
-- [x] `views/livestockIndustry/breedingIndustry/index.vue`
90
-- [x] `lang/zh/livestockIndustry.js`、`lang/bo/livestockIndustry.js`
91
-- [x] `mixins/livestockIndustryLocaleMixin.js`
92
-- [ ] 菜单 SQL / 后台菜单配置(见后端技术方案 **§5**)
93
-- [ ] Playwright:进入页、刷新、四块有数据/空态(见测试用例 UI 章节)
94
-
95
----
96
-
97
-## 8. 联调说明
98
-
99
-**请求示例**:
100
-
101
-```http
102
-GET /dataModel/breedingIndustry/dashboard?forceRefresh=true
103
-Authorization: Bearer {token}
104
-```
105
-
106
-**响应结构**(`data` 节点):
107
-
108
-```json
109
-{
110
-  "statDate": "2026-05-23",
111
-  "statYear": 2026,
112
-  "overview": {
113
-    "inventoryTotal": 0,
114
-    "annualOutbound": 0,
115
-    "warningYakCount": 0,
116
-    "pastureCount": 0,
117
-    "grasslandCount": 0,
118
-    "grasslandAreaMu": 0
119
-  },
120
-  "inventoryChange": {
121
-    "bullCount": 0,
122
-    "cowCount": 0,
123
-    "unknownGenderCount": 0,
124
-    "monthlyTrend": [{ "month": 1, "inventoryCount": 0 }]
125
-  },
126
-  "ageStructure": [{ "bandCode": "M1_6", "bandLabel": "1-6月龄", "count": 0, "ratio": 0 }],
127
-  "grassland": {
128
-    "availableCount": 0,
129
-    "inUseCount": 0,
130
-    "degradationStats": [{ "degradationLevel": 1, "degradationLabel": "未退化", "count": 0, "ratio": 0 }]
131
-  }
132
-}
133
-```