Files
HIS_Sur_Data_Deal/README.md
2026-05-09 00:42:27 +08:00

201 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HIS_Sur_Data_Deal
网页端检测数据处理工具。上传 `待处理检测数据.zip` 后,系统会自动识别 V1/V2 数据结构,调用原处理脚本生成 Excel并在网页中展示结果摘要、工作表统计和数据预览。
处理完成后可在结果页:
- 调整每个工作表的预览行数。
- 选择是否显示基本工作表、未匹配检测内容项、未检测到内容汇总表。
- 按姓名、采样时间、检测原因选择升序或降序排序。
- 导出当前内容选择和排序后的单个 Excel。
“未检测到内容汇总”会在每个“姓名 / 住院号 / 采样时间 / 检测原因”分组标题下单独排序,不会把不同检测原因的分组混在一起。
## 本地运行
```bash
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
访问:
```text
http://localhost:8000
```
## Docker 构建与运行
```bash
docker build -t his-sur-data-deal .
docker run --rm -p 8000:8000 his-sur-data-deal
```
访问:
```text
http://localhost:8000
```
## Docker Compose 通用部署
通用配置文件:
```text
docker_compose.yaml
```
这个配置是本地构建配置,不会从远程镜像仓库拉取 `his-sur-data-deal:latest`。运行时必须在项目源码目录执行,目录中需要包含:
```text
Dockerfile
requirements.txt
app/
docker_compose.yaml
```
启动:
```bash
docker compose -f docker_compose.yaml up -d --build
```
默认映射:
```text
宿主机 8000 -> 容器 8000
```
访问:
```text
http://服务器IP:8000
```
## frpc + NPM 反向代理到公网域名
如果本服务运行在内网机器,想通过公网服务器域名访问,可按下面链路处理:
```text
浏览器
-> 公网域名
-> 公网服务器 Nginx Proxy Manager
-> 公网服务器 frps 暴露端口
-> 内网机器 frpc
-> 内网 Docker 服务 127.0.0.1:8000
```
内网机器运行本项目:
```bash
docker compose -f docker_compose.yaml up -d --build
```
内网机器 frpc 示例:
```toml
serverAddr = "公网服务器IP"
serverPort = 7000
[[proxies]]
name = "his-sur-data-deal"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8000
remotePort = 18004
```
公网服务器 Nginx Proxy Manager 中新增 Proxy Host
```text
Domain Names: 你的域名,例如 his.example.com
Scheme: http
Forward Hostname / IP: 127.0.0.1
Forward Port: 18004
Websockets Support: 可不开
Block Common Exploits: 建议开启
SSL: 按需申请 Let's Encrypt
```
如果公网服务器的 NPM 与 frps 不在同一台机器,则 `Forward Hostname / IP` 填写 frps 所在服务器的内网或公网 IP。
## NAS Docker Compose 部署
NAS 地址:
```text
http://192.168.31.5/
```
NAS 专用配置文件:
```text
docker_compose-Nas.yaml
```
这个配置同样是本地构建配置不依赖远程镜像仓库。NAS 上请把整个项目源码放到下面目录:
```text
/share/Container/his_sur_data_deal
```
该目录中必须包含:
```text
/share/Container/his_sur_data_deal/Dockerfile
/share/Container/his_sur_data_deal/requirements.txt
/share/Container/his_sur_data_deal/app/
/share/Container/his_sur_data_deal/docker_compose-Nas.yaml
```
如果只在 NAS 面板里粘贴 yaml而没有把 `Dockerfile``app/` 一起放到上述路径NAS 会报 `failed to read dockerfile: open Dockerfile: no such file or directory`
启动:
```bash
cd /share/Container/his_sur_data_deal
docker compose -f docker_compose-Nas.yaml up -d --build
```
默认映射:
```text
NAS 4004 -> 容器 8000
```
访问:
```text
http://192.168.31.5:4004
```
## 镜像推送示例
```bash
docker tag his-sur-data-deal 192.168.31.5:5002/admin/his-sur-data-deal:latest
docker push 192.168.31.5:5002/admin/his-sur-data-deal:latest
```
## 数据模式
V1
- zip 解压后包含 `Patients_info.csv``Tests_List``Tests_Detail_List`
- 输出一个汇总 Excel。
V2
- zip 解压后包含 `Patients_info.csv`
- 按患者目录分别保存检测汇总和具体检测。
- 输出多个患者 Excel。
患者编号类型可选择自动识别。自动识别会读取 `Patients_info.csv` 中的 `pat_no`,并与 `Tests_List` 文件名或患者目录名比对:如果更匹配 10 位补零编号,则使用 `pat_no`;如果更匹配原始编号,则使用 `zhuyuanhao`
## 结果规则
- 系统默认输出完整结果。
- `未匹配检测内容` 会规范化为独立列:表头为未匹配检测项目名,数据行只保存对应检测值。
- 如果某个工作表没有任何未匹配检测项目,不显示 `未匹配检测内容` 标识列。
- 标准检测字段全为 `Not_Find` 的记录会移入 `未检测到内容汇总`,不继续留在原基本工作表中。
- 导出 Excel 会跟随页面上的内容选择和排序。