| 项目 | 宁夏赛睿医疗 CRM 与学术活动管理系统 |
|---|---|
| 交接日期 | 2026-10-10 |
| 当前代码目录 | D:\Java_AI\sairui |
| 当前阶段 | 初版功能已搭建完成,待客户线上确认、移动端体验复核及后续真实业务能力接入 |
| 交接人 | 鲜明阳 |
| 接收人 | 罗庆宇 |
| 客户/业务负责人 | 肖恺 |
本文依据当前工程源码、配置及模块文档整理。账号、密码、AppKey、客户联系人、生产地址和文件存储凭证不写入本文,应通过公司认可的密码管理工具或安全渠道单独交接。
项目面向医疗销售协同场景,目标是让业务人员通过 PC 和手机浏览器管理医院、科室、医生档案,并完成拜访、学术活动、付款和管理统计等工作。
当前已开发并可本地联调的模块如下:
| 模块 | 当前功能状态 | 主要入口 |
|---|---|---|
| 市场维护 | 已完成初版 | /market |
| 拜访管理 | 已完成初版 | /visits |
| 学术活动 | 已完成初版 | /activities |
| 活动扫码签到 | 已完成初版 | /activity-check-in/:token |
| 付款流程 | 已完成初版 | /payments |
| 管理报表 | 已完成初版 | /reports |
| 项目台账 | 仅保留页面入口,未开发业务功能 | /ledger |
| 钉钉真实免登、组织同步、真实审批 | 仅预留接入边界,未完成 | 无 |
D:\Java_AI\sairui
├─ sairui-server/ Spring Boot 后端
│ ├─ src/main/java/com/sairui/
│ │ ├─ common/ 统一响应、异常处理
│ │ ├─ config/ Web、MyBatis-Plus 配置
│ │ ├─ integration/dingtalk/ 钉钉用户上下文预留
│ │ ├─ module/ 市场、拜访、活动、付款、报表模块
│ │ └─ system/ 健康检查接口
│ └─ src/main/resources/db/schema/ 数据库建表脚本 V1-V5
├─ sairui-web/ Vue 3 前端
│ └─ src/
│ ├─ api/ Axios 请求封装及模块接口
│ ├─ components/ AppShell 全局布局
│ ├─ router/ 路由
│ ├─ styles/ 全局样式
│ └─ views/ 各业务页面
├─ modules/ 各模块 README 和用户操作手册
└─ docs/ 需求、架构、周报、技术复盘、交接文档
| 类别 | 技术/版本 |
|---|---|
| 后端 | JDK 1.8、Spring Boot 2.7.18、Spring MVC、MyBatis-Plus 3.5.5、Maven |
| 数据库 | MySQL 8、InnoDB、utf8mb4 |
| 前端 | Vue 3、TypeScript、Vite、Vue Router、Axios、Pinia |
| 二维码 | qrcode 前端库,用于活动签到二维码 |
| 默认后端端口 | 8086 |
| 默认前端端口 | 5173,端口占用时 Vite 可能自动使用 5174 |
| 本地前端入口 | http://127.0.0.1:5173/ 或终端实际输出地址 |
| 后端健康检查 | http://localhost:8086/api/v1/system/health |
前端使用 Vite 代理将 /api 转发至 http://localhost:8086。后端本地 CORS 已覆盖 localhost、127.0.0.1 的 5173/5174 端口,以及常用局域网网段的开发访问地址。
sairui,字符集使用 utf8mb4。sairui-server/src/main/resources/db/schema/V1__base_schema.sql
sairui-server/src/main/resources/db/schema/V2__market_maintenance.sql
sairui-server/src/main/resources/db/schema/V3__academic_activities.sql
sairui-server/src/main/resources/db/schema/V4__visit_management.sql
sairui-server/src/main/resources/db/schema/V5__payment_process.sql
SAIRUI_DB_HOST、SAIRUI_DB_PORT、SAIRUI_DB_NAME、SAIRUI_DB_USERNAME、SAIRUI_DB_PASSWORD。在 D:\Java_AI\sairui\sairui-server 目录执行:
mvn "-Dspring-boot.run.profiles=local" spring-boot:run
启动后访问:
GET http://localhost:8086/api/v1/system/health
预期返回 code: 0 且 data.status: UP。
如需构建验证:
mvn clean package
首次启动或依赖变化后,在 D:\Java_AI\sairui\sairui-web 执行:
npm install
npm run dev
终端会输出实际浏览器地址。若 5173 已被占用,会使用其他端口;此时后端 application-local.yml 的 CORS 白名单需要包含实际端口。
前端构建验证:
npm run build
前端页面: sairui-web/src/views/MarketView.vue
后端包: com.sairui.module.market
数据表: market_hospital、market_department、market_doctor
已实现功能:
关键接口:
| 方法 | 地址 | 说明 |
|---|---|---|
| GET | /api/v1/market/hospitals?keyword= |
医院查询 |
| POST | /api/v1/market/hospitals |
新增医院 |
| PUT | /api/v1/market/hospitals/{id} |
编辑医院 |
| DELETE | /api/v1/market/hospitals/{id} |
删除医院 |
| GET/POST | /api/v1/market/departments |
科室查询/新增 |
| PUT/DELETE | /api/v1/market/departments/{id} |
科室编辑/删除 |
| GET/POST | /api/v1/market/doctors |
医生查询/新增 |
| PUT/DELETE | /api/v1/market/doctors/{id} |
医生编辑/删除 |
注意: 当前是物理删除。若客户需要审计追溯,应改为逻辑删除并保留操作人、删除时间和原因。
前端页面: sairui-web/src/views/VisitManagementView.vue
后端包: com.sairui.module.visit
数据表: visit_record
已实现功能:
PLANNED -> CHECKED_IN -> COMPLETED。注意: 当前定位和拍照由浏览器能力实现,未接入钉钉 JS API;照片数据不是生产级文件存储方案。
前端页面: AcademicActivityView.vue、ActivityCheckInView.vue
后端包: com.sairui.module.activity
数据表: academic_activity、academic_activity_agenda、academic_activity_expense、academic_activity_check_in
已实现功能:
GENERAL_MANAGER、MARKETING、COMPLIANCE。状态重点: 草稿提交后进入待审批;三方均通过才成为已通过;任一方驳回即为已驳回。
注意: 真实审批、电子签章、活动附件、个人信息脱敏和会务协同尚未接入。活动、议程和费用更新涉及多表写入,建议后续在 Service 方法上补充事务及回滚测试。
前端页面: sairui-web/src/views/PaymentProcessView.vue
后端包: com.sairui.module.payment
数据表: payment_request
已实现功能:
状态流转:
DRAFT -> PENDING_APPROVAL -> AGREEMENT_PENDING
-> FINANCE_PROCESSING -> INVOICE_PENDING -> ARCHIVED
\-> REJECTED
注意: 当前由页面模拟总经理和财务操作,未接真实钉钉审批、电子签章、银行支付、发票验真或对象存储。大附件 Base64 入库会快速增大数据库,不适合生产环境。
前端页面: sairui-web/src/views/ReportView.vue
后端包: com.sairui.module.report
接口: GET /api/v1/reports/overview?startDate=yyyy-MM-dd&endDate=yyyy-MM-dd
已实现功能:
注意: 当前报表先读取业务列表后在 Java 内存中用 Stream 聚合。数据量大后应改为 SQL 聚合、后端物理分页、缓存或汇总表。
每个业务模块通常按 controller、service、mapper、entity、dto 分层:
所有 API 返回统一结构:
{
"code": 0,
"message": "成功",
"data": {}
}
相关代码:
common/api/ApiResponse.javacommon/api/ApiCode.javacommon/exception/GlobalExceptionHandler.java前端的 src/api/http.ts 会同时判断 HTTP 状态和业务 code。新增接口时应保持这一约定。
BusinessException:可预期的业务限制,例如状态不允许流转、有关联数据不能删除。MethodArgumentNotValidException:DTO 的 @Valid 参数校验失败。BaseMapper 获取基础 CRUD。LambdaQueryWrapper,避免硬编码列名。PaginationInnerInterceptor。DingTalkUserInterceptor 会从请求 Header 读取 X-DingTalk-User-Id、X-DingTalk-User-Name 写入 ThreadLocal,请求结束后清理。
此能力仅用于本地联调预留,不能作为生产身份认证。生产接入应完成钉钉免登、服务端签名校验、角色权限、数据权限、审计日志及异常处理。
market_hospital
└─ market_department
└─ market_doctor
visit_record -> hospital_id / department_id / doctor_id
academic_activity -> hospital_id / department_id 等业务关联字段
academic_activity -> agenda / expense / check_in 子表
payment_request 独立维护付款及附件信息
DECIMAL 与 Java BigDecimal,不得改用浮点型。| 现象 | 优先排查 |
|---|---|
| 前端无法访问系统 | 是否已执行 npm run dev,并以终端输出的实际端口访问。 |
| 访问后端失败 | 后端是否已启动,/api/v1/system/health 是否返回 UP,端口是否为 8086。 |
| 接口 403 | 前端来源端口是否已在后端 CORS allowed-origins 中;确认 Vite 代理目标是否为 8086;检查是否使用了未允许的 IP/端口。 |
| 保存无数据 | 浏览器 Network 检查方法、URL、请求体;再检查 Controller 路径、DTO 校验、后端日志及数据库表。 |
| 科室或医生被覆盖 | 新增应调用 POST,编辑才调用 PUT /{id};先检查前端当前编辑 ID 是否被错误保留。 |
| 删除提示失败 | 检查是否有关联科室、医生、拜访或活动;当前设计会阻止删除有关联的数据。 |
| 手机不能定位/拍照 | 浏览器必须授权定位和相机;HTTP 页面或设备权限限制会导致失败;当前有开发兼容逻辑,但生产应接钉钉能力。 |
| 前端构建失败且提示 tsbuildinfo 权限错误 | 关闭占用文件的编辑器/终端后重试,确认 node_modules/.tmp 可写;必要时重新安装前端依赖。 |
| 附件无法预览或下载 | 检查 Base64 数据、文件名和浏览器支持类型;超过前端限制的文件不会被提交。 |
D:\Java_AI\sairui 不是 Git 仓库,无法依据现有目录追溯提交历史、发布版本或责任人。应立即在公司 Git 平台建立私有仓库,提交当前可运行快照,并设置分支保护与发布标签。@Transactional,并补充流程、删除保护、金额和日期边界的自动化测试。| 文档 | 用途 |
|---|---|
README.md |
项目总体目标、范围和技术约束 |
docs/需求基线.md |
当前需求边界 |
docs/架构设计.md |
前后端架构与接口约定 |
docs/周报_20260914-20260918.md |
前期周报 |
docs/周报_20260921-20260924.md |
后续周报 |
docs/Java面试技术复盘与AI-Coding实践.md |
代码技术点及已知改进方向 |
modules/基础工程/ |
基础工程说明与操作手册 |
modules/市场维护/ |
市场维护 README 与操作手册 |
modules/学术活动/ |
学术活动 README 与操作手册 |
modules/拜访管理/ |
拜访管理 README 与操作手册 |
modules/付款流程/ |
付款流程 README 与操作手册 |
modules/管理报表/ |
管理报表 README 与操作手册 |