소스 검색

交易市场平台(供应商)

wwh 2 달 전
부모
커밋
2f748f4443

+ 2 - 2
doc/牧业养殖科技服务/我的预约(专家)/我的预约(专家)前端技术方案.md

@@ -13,7 +13,7 @@
13 13
 | **菜单配置** | 组件路径:`techService/myAppointment/expert/index` |
14 14
 | **权限前缀** | `techService:expertMyAppointment:list`、`query`、`confirm`、`reject`、`complete`、`reviewList` |
15 15
 
16
-**准入**:登录账号须在「畜牧科技资源管理」绑定**专家**资源(`resource_type=1` 且已分配账号),否则列表为空。
16
+**准入**:登录账号须在「畜牧科技资源管理」绑定**专家**资源(`resource_type=004005` 且已分配账号),否则列表为空。
17 17
 
18 18
 ---
19 19
 
@@ -97,7 +97,7 @@
97 97
 
98 98
 ## 8. 联调说明
99 99
 
100
-- 账号须已绑定专家科技资源(角色 **101** 等以平台为准)。  
100
+- 账号须已绑定专家科技资源(角色 **`exp`**,常见 `role_id=101`)。  
101 101
 - 确认/拒绝仅对 `status=0` 有效。  
102 102
 - 查看评价仅对 `status=4`;评价由移动端写入,后台只读。  
103 103
 - 菜单配置组件路径与上述权限按钮后可见。

+ 2 - 2
doc/牧业养殖科技服务/我的预约(专家)/我的预约(专家)功能需求.md

@@ -23,7 +23,7 @@
23 23
 
24 24
 ### 2.2 当前登录人(服务提供方视角)
25 25
 
26
-- 指通过「畜牧科技资源管理」**分配账号**(专家端角色,约定角色编号 **101**)登录后台的**专家本人**。  
26
+- 指通过「畜牧科技资源管理」**分配账号**(专家端角色,权限字符 **`exp`**,库中常见 `role_id=101`)登录后台的**专家本人**。  
27 27
 - 列表、详情与写操作的数据范围:**自动限定为当前账号绑定的专家资源下的预约记录**;不得查看或操作其他专家的预约。
28 28
 
29 29
 ### 2.3 预约人(需求方)
@@ -56,7 +56,7 @@
56 56
 | 所属业务 | **牧业养殖科技服务** | 牧业疫病诊疗服务 | 牧业疫病诊疗服务 |
57 57
 | 预约对象 | **科技专家**(「预约服务-专家」) | **兽医人员**(「预约服务-兽医」) | **诊疗机构**(「预约服务-诊疗机构」) |
58 58
 | 账号来源 | **畜牧科技资源管理**-专家分配账号 | 畜牧医疗资源管理-兽医分配账号 | 畜牧医疗资源管理-机构分配账号 |
59
-| 专家/兽医角色 | **101** | 100 | 102(机构) |
59
+| 专家/兽医角色 | **`exp`**(常见 101) | **100**(`vet`) | **102**(`ins`) |
60 60
 | 移动端提交后 | **待确认**,待专家处置 | **待确认**,待兽医处置 | **已预约**(无待确认) |
61 61
 | 后台处置 | **确认 / 拒绝** + 已完成**查评价** | **确认 / 拒绝** | **仅查看** |
62 62
 | 拒绝理由 | 拒绝时**必填**(≤100 字) | 同左 | 无 |

+ 2 - 2
doc/牧业养殖科技服务/我的预约(专家)/我的预约(专家)技术方案.md

@@ -11,7 +11,7 @@
11 11
 | **整体** | RuoYi **v3.9.2**(**springboot2** 分支)单体后端 + 若依 **Vue2** 管理端 |
12 12
 | **运行时** | JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid |
13 13
 | **数据库** | MySQL **5.7.39**,InnoDB,`utf8mb4` |
14
-| **专家资源** | `biz_tech_resource`(专家 `resource_type=1`,`sys_user_id` 绑定登录用户,角色 **101**) |
14
+| **专家资源** | `biz_tech_resource`(专家 `resource_type=004005`,`sys_user_id` 绑定登录用户,角色 **`exp`**) |
15 15
 | **预约数据** | 与兽医/机构共用 **`biz_service_appointment`**;评价 **`biz_service_appointment_review`**(专家独有) |
16 16
 | **移动端** | 预约 `INSERT`、取消、写评价由「预约服务」完成;本模块为**专家后台查询、接单、查评价** |
17 17
 
@@ -303,7 +303,7 @@ ORDER BY review_time DESC, id DESC
303 303
 | 移动端取消 | `status=3` |
304 304
 | 移动端写评价 | `INSERT` `biz_service_appointment_review`(预约须 `status=4`) |
305 305
 | 已完成 | 业务闭环置 `status=4` 后用户方可评价 |
306
-| 畜牧科技资源管理 | 专家已发布且分配账号(角色 101) |
306
+| 畜牧科技资源管理 | 专家已发布且分配账号(`role_key=exp`) |
307 307
 | 我的预约(兽医/机构) | 同表不同 `provider_type`;列表互不可见 |
308 308
 
309 309
 ---

+ 1 - 1
doc/牧业养殖科技服务/我的预约(专家)/我的预约(专家)测试用例.md

@@ -3,7 +3,7 @@
3 3
 > 依据:`我的预约(专家)功能需求.md`、`我的预约(专家)技术方案.md`  
4 4
 > **接口 Base Path**:`/techService/myAppointment/expert`;鉴权与若依一致(Cookie / Token)。
5 5
 
6
-**通用前置(无特殊说明)**:专家账号 **C** 已通过「畜牧科技资源管理」为专家 **Z1**(`resource_type=1`、`account_assigned=1`、`sys_user_id=C`)分配账号并绑定角色 **101**;具备权限 `techService:expertMyAppointment:list|query|confirm|reject|complete|reviewList`。`biz_service_appointment` 宜预置:
6
+**通用前置(无特殊说明)**:专家账号 **C** 已通过「畜牧科技资源管理」为专家 **Z1**(`resource_type=004005`、`account_assigned=1`、`sys_user_id=C`)分配账号并绑定角色 **`exp`**(常见 `role_id=101`);具备权限 `techService:expertMyAppointment:list|query|confirm|reject|complete|reviewList`。`biz_service_appointment` 宜预置:
7 7
 
8 8
 | 样本 | 归属 | 状态 | 要点 |
9 9
 | --- | --- | --- | --- |

+ 9 - 1
doc/牧业养殖科技服务/畜牧科技资源管理/畜牧科技资源管理前端技术方案.md

@@ -57,7 +57,7 @@
57 57
 | 封面 | 技术成果、视频课程选填 |
58 58
 | 视频 | 视频课程必填;mp4 ≤30MB |
59 59
 | 服务时段/周日 | 专家、共享仪器;`serviceWeekdaysList` 数组提交 |
60
-| 分配账号 | 仅专家 Tab;`canAssignAccount` |
60
+| 分配账号 | 仅专家 Tab;`canAssignAccount`(`accountAssigned !== 1` 且草稿可改);确认文案说明拼音首字母+id、`exp` 角色、仅一次;`assignAccountTechResource` |
61 61
 | 研究方向 | `el-select` `filterable` + `allow-create` |
62 62
 | 课程主题 | `el-select` `filterable`;`listInformationCategoryChildren('005','8')`,`value=code`、`label=name` |
63 63
 
@@ -90,3 +90,11 @@
90 90
 - 列表 `resourceType` 与当前 Tab 一致,否则后端返回「资源类型不能为空」。  
91 91
 - 发布状态筛选参数名为 `publishStatus`,与医疗资源模块一致。  
92 92
 - 地图标点本期不做,页面无相关入口。
93
+
94
+---
95
+
96
+## 8. 修订记录
97
+
98
+| 版本 | 说明 |
99
+| --- | --- |
100
+| 1.2 | 专家分配账号:列表「账号分配」列;`canAssignAccount`;确认文案与后端 `exp`/拼音首字母+id 一致 |

+ 1 - 1
doc/牧业养殖科技服务/畜牧科技资源管理/畜牧科技资源管理功能需求-草稿.md

@@ -12,7 +12,7 @@
12 12
 8. 发布后不允许编辑、删除;下架后可以再次编辑、删除。
13 13
 9. 支持查看对应资源类型的表单数据。
14 14
 10. 支持逻辑删除对应资源类型的科技资源;如该科技资源已分配账号,同时删除账号。
15
-11. 专家库有“分配账号”操作,账号名称默认为专家姓名的拼音+该条记录的数据库Id,角色分别默认为权限字符为exp对应的角色;分配账号只允许操作一次。
15
+11. 专家库有“分配账号”操作,账号名称默认为专家姓名的拼音首字母(小写)+该条记录的数据库 Id,角色默认为权限字符为 exp 对应的角色;分配账号只允许操作一次。
16 16
 12. 共享仪器库列表有“地图标点”操作。
17 17
 13. 地图标点:暂不实现。
18 18
 14. 异常返回:统一格式 code、msg、data。

+ 3 - 2
doc/牧业养殖科技服务/畜牧科技资源管理/畜牧科技资源管理功能需求.md

@@ -309,8 +309,8 @@ flowchart TD
309 309
 | --- | --- |
310 310
 | 范围 | **仅** 专家库 |
311 311
 | 次数 | **每条仅成功分配一次**;已分配后不可重复 |
312
-| 默认登录名 | **专家姓名**汉语拼音(全拼、小写、无空格)+ **该条资源唯一业务编号** |
313
-| 默认角色 | 预置专家端角色(草稿约定:**编号 101**);以系统实际角色配置为准 |
312
+| 默认登录名 | **专家姓名**汉字拼音**首字母**(小写、连续拼接)+ **该条记录数据库主键 id**(如「张专家」、id=12 → `zzj12`) |
313
+| 默认角色 | 权限字符 **`exp`**(`sys_role.role_key`);须预置对应角色,常见 `role_id=101` |
314 314
 | 与发布状态 | **未发布**、**已下架** 且未分配时可操作;**已发布** 不可新分配 |
315 315
 | 失败处理 | 返回明确原因;**不**记为已分配,在满足前置条件下可重试(仍仅允许一次成功) |
316 316
 
@@ -376,3 +376,4 @@ flowchart TD
376 376
 | --- | --- |
377 377
 | 2.0 | 依据草稿与原型整理:发布状态机、操作矩阵、字段矩阵、业务流程图;明确发布/下架同步移动端;Tab 与筛选联动;专家分配角色 101;地图标点本期不做;剔除技术栈、接口与数据库相关表述 |
378 378
 | 2.1 | 对齐草稿 §10:逻辑删除时联动删除专家已分配平台账号;§11 明确仅专家库分配账号 |
379
+| 2.2 | §5.12:登录名改为拼音首字母+id;角色按 `role_key=exp`(对齐草稿 §11) |

+ 17 - 4
doc/牧业养殖科技服务/畜牧科技资源管理/畜牧科技资源管理技术方案.md

@@ -34,7 +34,7 @@
34 34
 | 改删 / 发布 | 仅 `publish_status=0` 且 `del_flag=0`(已下架 = `publish_status=0` 且 `offline_time` 非空) |
35 35
 | 下架 | 仅 `publish_status=1` → `publish_status=0`、`offline_time=now()`;**保留** `publish_time` |
36 36
 | 再次发布 | `publish_status=1`、`publish_time=now()`、**清空** `offline_time` |
37
-| 分配账号 | 仅 `resource_type=004005`、`account_assigned=0`、`publish_status=0`;成功一次;登录名冲突**不**置已分配 |
37
+| 分配账号 | 仅 `resource_type=004005`、`account_assigned=0`、`publish_status=0`;成功一次;登录名=姓名拼音**首字母**+`id`;角色 `role_key=exp`;登录名冲突**不**置已分配 |
38 38
 | 移动端可见 | `publish_status=1` 且 `del_flag=0` |
39 39
 
40 40
 ---
@@ -216,11 +216,23 @@ CREATE TABLE `biz_tech_resource` (
216 216
 | `service_weekdays` | 多选入库,逗号分隔 `1`~`7`(周一=1) |
217 217
 | `account_assigned` | `0` 未分配 / `1` 已分配 |
218 218
 | `del_flag` | `0` 正常 / `2` 逻辑删除 |
219
-| 分配账号角色 | 专家(`resource_type=004005`)默认 **`role_id=101`** |
220
-| 登录名 | 专家姓名拼音(小写全拼、无空格)+ `id` |
219
+| 分配账号角色 | 专家(`resource_type=004005`)按 `sys_role.role_key=**exp**` 解析 `role_id` 并绑定(库中常见 `role_id=101`,以配置为准) |
220
+| 登录名 | 专家姓名汉语拼音**首字母**(小写)+ `id`;实现类 `TechResourceLoginNameGenerator`(委托 `TradingPartnerLoginNameGenerator`) |
221 221
 
222 222
 **研究方向**:库内存**文本**;前端可输入下拉,预设项由前端常量维护。**课程主题**见 **§2.5**,存资讯类别 `code`。
223 223
 
224
+### 2.6 分配账号(`TechResourceAccountAssigner`)
225
+
226
+| 项 | 说明 |
227
+| --- | --- |
228
+| 范围 | 仅 `resource_type=004005`(专家) |
229
+| 前置 | `account_assigned=0`;`publish_status=0`(未发布或已下架) |
230
+| 登录名 | 对 `resource_name` 逐字取汉语拼音**首字母**(小写);ASCII 字母数字原样小写拼接;再拼接 `id`(如「张专家」、id=12 → `zzj12`) |
231
+| 角色 | `SysRoleMapper.checkRoleKeyUnique("exp")`;未配置则「未配置权限字符为「exp」的角色,无法分配账号」 |
232
+| 落库 | `account_assigned=1`、`sys_user_id`、`assigned_login_name`、`update_by` |
233
+| 次数 | 每条仅成功一次;重复调用返回「该资源已分配账号,不可重复分配」 |
234
+| 删除联动 | 逻辑删除专家且已分配时 `deleteUserById(sys_user_id)` |
235
+
224 236
 ---
225 237
 
226 238
 ## 3. 接口设计
@@ -305,7 +317,7 @@ CREATE TABLE `biz_tech_resource` (
305 317
 | **Method / URI** | `POST /techService/techResource/assignAccount/{id}` |
306 318
 | **权限** | `techService:techResource:assignAccount` |
307 319
 | **前置** | `resource_type=004005`;`account_assigned=0`;`publish_status=0` |
308
-| **结果** | 创建 `sys_user`、绑定角色 **101**;写 `sys_user_id`、`assigned_login_name`、`account_assigned=1` |
320
+| **结果** | 创建 `sys_user`、绑定 `role_key=**exp**` 对应角色;写 `sys_user_id`、`assigned_login_name`、`account_assigned=1` |
309 321
 | **失败** | 登录名冲突等返回明确 `msg`,**不**置 `account_assigned=1` |
310 322
 
311 323
 > **地图标点**:本期无接口。
@@ -355,3 +367,4 @@ CREATE TABLE `biz_tech_resource` (
355 367
 | — | 初稿,对齐 `畜牧科技资源管理功能需求.md` v2.0 |
356 368
 | — | 单表 `biz_tech_resource`;`/techService/techResource`;专家角色 101;技术成果/视频分字段与封面、视频列 |
357 369
 | — | 删除接口:专家已分配账号时联动 `deleteUserById`(对齐草稿 §10) |
370
+| 1.2 | 专家分配账号:登录名拼音首字母+`id`;角色按 `role_key=exp` 解析;仅一次;§2.6、`§3.8` |

+ 7 - 5
doc/牧业养殖科技服务/畜牧科技资源管理/畜牧科技资源管理测试用例.md

@@ -49,8 +49,9 @@
49 49
 | ZCZX-KJZYGL-UT-016 | Service | 逻辑删除 | 单元测试 | JUnit5+Mockito | §5.10 | 未发布 | `remove(id)` | `del_flag=2` |
50 50
 | ZCZX-KJZYGL-UT-017 | Service | 删除有关联 | 单元测试 | JUnit5+Mockito | §2.5 | `hasReference=true` | `remove` | 抛 `ServiceException` |
51 51
 | ZCZX-KJZYGL-UT-018 | Service | 删除联动删账号 | 单元测试 | JUnit5+Mockito | §5.10、草稿 §10 | 未发布已分配专家;`sys_user_id` 非空 | `deleteByIds` | 调用 `deleteLinkedAccount`;`del_flag=2` |
52
-| ZCZX-KJZYGL-UT-019 | Service | 专家分配账号 | 单元测试 | JUnit5+Mockito | §5.12、草稿 §11 | 未发布 Z1;Mock 用户服务 | `assignAccount(id)` | `account_assigned=1`;绑定角色 **101** |
53
-| ZCZX-KJZYGL-UT-020 | 分配账号 | 专家角色常量 | 单元测试 | JUnit5 | §5.12 | 无 | `ROLE_ID_EXPERT` | 值为 **101** |
52
+| ZCZX-KJZYGL-UT-019 | Service | 专家分配账号 | 单元测试 | JUnit5+Mockito | §5.12、草稿 §11 | 未发布 Z1;Mock 用户服务 | `assignAccount(id)` | `account_assigned=1`;绑定 `role_key=**exp**` |
53
+| ZCZX-KJZYGL-UT-019a | 登录名 | 拼音首字母+id | 单元测试 | JUnit5 | §2.6 | 无 | `generate("张专家",12L)` | `zzj12` |
54
+| ZCZX-KJZYGL-UT-020 | 分配账号 | 专家角色权限字符 | 单元测试 | JUnit5 | §5.12 | 无 | `ROLE_KEY_EXPERT` | 值为 **exp** |
54 55
 | ZCZX-KJZYGL-UT-021 | Mapper | 列表筛选 SQL | 单元测试 | JUnit5 | §3.1 | 无 | 检查 XML | `del_flag=0`;`resource_type=`;`resource_name LIKE`;`create_time DESC` |
55 56
 | ZCZX-KJZYGL-UT-022 | Mapper | 发布态筛选 | 单元测试 | JUnit5 | §2.1 | 无 | `publishStatus=2` | 含 `offline_time IS NOT NULL` |
56 57
 
@@ -85,7 +86,7 @@
85 86
 | ZCZX-KJZYGL-API-023 | 删除 | 未发布逻辑删 | 接口测试 | Postman | §5.10 | 无关联新行 | `DELETE /{id}` | 成功;列表不可见 |
86 87
 | ZCZX-KJZYGL-API-023a | 删除 | 已分配联动删账号 | 接口测试 | Postman | §5.10、草稿 §10 | 未发布专家已 `assignAccount` | `DELETE /{id}` | 资源不可见;`sys_user` 对应用户已删 |
87 88
 | ZCZX-KJZYGL-API-024 | 删除 | 已发布禁止 | 接口测试 | Postman | §5.10 | 有 Z2 | `DELETE` | 失败 |
88
-| ZCZX-KJZYGL-API-025 | 分配账号 | 专家成功 | 接口测试 | Postman | §5.12、草稿 §11 | Z1 未分配 | `POST /assignAccount/{id}` | `accountAssigned=1`;登录名拼音+id;角色 **101** |
89
+| ZCZX-KJZYGL-API-025 | 分配账号 | 专家成功 | 接口测试 | Postman | §5.12、草稿 §11 | Z1 未分配 | `POST /assignAccount/{id}` | `accountAssigned=1`;登录名拼音首字母+id(如 `zzj{id}`);角色 **exp** |
89 90
 | ZCZX-KJZYGL-API-026 | 分配账号 | 重复分配 | 接口测试 | Postman | §5.12 | 已分配 | 再次调用 | 失败 |
90 91
 | ZCZX-KJZYGL-API-027 | 分配账号 | 成果禁止 | 接口测试 | Postman | §5.12 | 有 C1 | `assignAccount` | 失败 |
91 92
 | ZCZX-KJZYGL-API-028 | 分配账号 | 已发布禁止 | 接口测试 | Postman | §5.12 | 有 Z2 | `assignAccount` | 失败 |
@@ -140,7 +141,7 @@
140 141
 | 正常流程 | UT-013~018 | API-007~010、016、019、023、029~030 | UI-006~013、017、019~022、025 |
141 142
 | 异常/校验 | UT-001~008 | API-011~013、017~018 | UI-011~012 |
142 143
 | 发布状态机 | UT-009~011、014~015 | API-003~004、019~022、029 | UI-004、014~015、019~020 |
143
-| 分配账号 | UT-012、019、020 | API-025~028 | UI-016、022 |
144
+| 分配账号 | UT-012、019、019a、020 | API-025~028 | UI-016、022 |
144 145
 | 四类资源 | UT-007 | API-007~012 | UI-006~010 |
145 146
 | 逻辑删除/引用 | UT-016~018 | API-005、023~024、023a | UI-021、021a |
146 147
 | 权限/鉴权 | — | API-031~033 | UI-024 |
@@ -158,7 +159,7 @@
158 159
 | §5.9 查看 | 只读 | API-014~015;UI-013 |
159 160
 | §5.10 删除 | 逻辑删;已分配删账号 | UT-016~018;API-023~024、023a;UI-021、021a |
160 161
 | §5.11 发布下架 | 状态迁移 | UT-009~015;API-019~022;UI-019~020 |
161
-| §5.12 分配账号 | 仅专家、角色 101 | UT-012、019、020;API-025~028;UI-022 |
162
+| §5.12 分配账号 | 仅专家、`exp`、拼音首字母+id | UT-012、019、019a、020;API-025~028;UI-022 |
162 163
 | §5.13 地图标点 | 不做 | UI-023 |
163 164
 | §6 权限 | 按钮级 | API-031~033;UI-024 |
164 165
 
@@ -179,3 +180,4 @@
179 180
 | --- | --- |
180 181
 | 1.0 | 初版:单元 20、接口 34、UI 25;覆盖四类资源、发布下架、专家分配账号;Playwright+Chrome |
181 182
 | 1.1 | 对齐草稿 §10/§11:删除联动删账号;专家角色 101 用例;UT/API/UI 编号顺延 |
183
+| 1.2 | 分配账号:拼音首字母+id;`ROLE_KEY_EXPERT=exp`;UT-019a |