Initial commit: 体检报告批量处理脚本与配置

Made-with: Cursor
This commit is contained in:
Euni4U 2026-04-16 13:27:01 +08:00
commit 408e80f501
8 changed files with 3485 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
api_requests_*.log
__pycache__/
*.pyc
.venv/
venv/

537
headurl.json Normal file
View File

@ -0,0 +1,537 @@
[
{
"medicalSn": "17419329628830818",
"pName": "郑福",
"cardId": "152627195706161915"
},
{
"medicalSn": "17419329628830821",
"pName": "许永",
"cardId": "152627195409121917"
},
{
"medicalSn": "17419329628830822",
"pName": "叶换弟",
"cardId": "152627195701081924"
},
{
"medicalSn": "17419329628830825",
"pName": "陈福云",
"cardId": "152627195808071929"
},
{
"medicalSn": "17419329628830826",
"pName": "付有有",
"cardId": "152627195802081915"
},
{
"medicalSn": "17419329628830828",
"pName": "陈美付",
"cardId": "152627195904221923"
},
{
"medicalSn": "17419329628830829",
"pName": "王夫",
"cardId": "152627195307141917"
},
{
"medicalSn": "17419329628850893",
"pName": "兰吉",
"cardId": "152627195202081911"
},
{
"medicalSn": "17419329628850921",
"pName": "高换喜",
"cardId": "152627196311261916"
},
{
"medicalSn": "17419329628921189",
"pName": "张军",
"cardId": "152627196303111918"
},
{
"medicalSn": "17419329628961330",
"pName": "张三丑",
"cardId": "152627195806051916"
},
{
"medicalSn": "17419329629443196",
"pName": "陈俊梅",
"cardId": "152627196204071922"
},
{
"medicalSn": "17419329629533537",
"pName": "范吉云",
"cardId": "152627194407091932"
},
{
"medicalSn": "17419329629784516",
"pName": "杨爱连",
"cardId": "152627194901271920"
},
{
"medicalSn": "17419329629965242",
"pName": "于爱蜂",
"cardId": "152627194211131947"
},
{
"medicalSn": "17419329630035464",
"pName": "袁天来",
"cardId": "150924194007061916"
},
{
"medicalSn": "17419329630627734",
"pName": "曹根变",
"cardId": "150924196512111928"
},
{
"medicalSn": "17419329630728123",
"pName": "孟桃花",
"cardId": "152627195106171941"
},
{
"medicalSn": "17419329631551096",
"pName": "马粉鱼",
"cardId": "152627195404251923"
},
{
"medicalSn": "17419329632183413",
"pName": "樊换连",
"cardId": "152627196508262226"
},
{
"medicalSn": "17419329632725514",
"pName": "李贵",
"cardId": "152627195707101914"
},
{
"medicalSn": "17419329632725517",
"pName": "赵二改",
"cardId": "152627195802141922"
},
{
"medicalSn": "17419329632735549",
"pName": "樊换云",
"cardId": "152627195706121921"
},
{
"medicalSn": "17419329632735559",
"pName": "王栓珍",
"cardId": "152627195308221927"
},
{
"medicalSn": "17419329632735562",
"pName": "赵月英",
"cardId": "152627195703151922"
},
{
"medicalSn": "17419329632956353",
"pName": "范三板",
"cardId": "152627194310291946"
},
{
"medicalSn": "17419329633177138",
"pName": "谢月红",
"cardId": "152627194409021911"
},
{
"medicalSn": "17419329633177141",
"pName": "刘二哑",
"cardId": "152627195107011931"
},
{
"medicalSn": "17419329633187196",
"pName": "郑万有",
"cardId": "152627195407061914"
},
{
"medicalSn": "17419329633187201",
"pName": "刘金连",
"cardId": "15262719550917192X"
},
{
"medicalSn": "17419329633207260",
"pName": "刘青春",
"cardId": "152627195802161915"
},
{
"medicalSn": "17419329633227328",
"pName": "马俊桃",
"cardId": "152627196305201941"
},
{
"medicalSn": "17419329633227329",
"pName": "张变林",
"cardId": "152627196108251923"
},
{
"medicalSn": "17419329633257449",
"pName": "张秀子",
"cardId": "152627195804011929"
},
{
"medicalSn": "17419329633337694",
"pName": "高秀梅",
"cardId": "15262719580825192X"
},
{
"medicalSn": "17419329633387892",
"pName": "卢世平",
"cardId": "15262719621002193X"
},
{
"medicalSn": "17419329633397895",
"pName": "赵金芳",
"cardId": "15262719620919194X"
},
{
"medicalSn": "17419329633397897",
"pName": "刘汉有",
"cardId": "152627195710151912"
},
{
"medicalSn": "17419329633397898",
"pName": "郭润兰",
"cardId": "152627196006061926"
},
{
"medicalSn": "17419329633458135",
"pName": "秦兰花",
"cardId": "152627193603291929"
},
{
"medicalSn": "17419329633458137",
"pName": "卢贵荣",
"cardId": "152627195008011960"
},
{
"medicalSn": "17419329633458139",
"pName": "王三孩",
"cardId": "152627196108211913"
},
{
"medicalSn": "17419329633458144",
"pName": "贾满富",
"cardId": "152627193509091912"
},
{
"medicalSn": "17419329633498269",
"pName": "王二爱",
"cardId": "152632196112202703"
},
{
"medicalSn": "20250523366297",
"pName": "李志英",
"cardId": "152627196912161910"
},
{
"medicalSn": "20250523740573",
"pName": "李丽",
"cardId": "152627196905271927"
},
{
"medicalSn": "20250523417482",
"pName": "王团旺",
"cardId": "152627197607281910"
},
{
"medicalSn": "20250523808801",
"pName": "朱占成",
"cardId": "152627195701231910"
},
{
"medicalSn": "20250523844012",
"pName": "朱占义",
"cardId": "152627194511211914"
},
{
"medicalSn": "20250523351078",
"pName": "郭桂林",
"cardId": "152627196602161923"
},
{
"medicalSn": "20250523452896",
"pName": "张秀桃",
"cardId": "152627196412150027"
},
{
"medicalSn": "20250523433348",
"pName": "张宝",
"cardId": "152627196903051912"
},
{
"medicalSn": "20250523286308",
"pName": "李爱青",
"cardId": "152627197406271927"
},
{
"medicalSn": "20250523830564",
"pName": "闫桂花",
"cardId": "152627196906240022"
},
{
"medicalSn": "20250523289297",
"pName": "张存宝",
"cardId": "152627196810051913"
},
{
"medicalSn": "20250523321780",
"pName": "陈美云",
"cardId": "152627196806041923"
},
{
"medicalSn": "20250523495383",
"pName": "乔淑芳",
"cardId": "152529197512132741"
},
{
"medicalSn": "20250523294957",
"pName": "陈喜云",
"cardId": "152627196611051929"
},
{
"medicalSn": "20250523737789",
"pName": "温二女",
"cardId": "152627195305141921"
},
{
"medicalSn": "20250523201133",
"pName": "崔美利",
"cardId": "152627195810081923"
},
{
"medicalSn": "20250523871007",
"pName": "卢元娃",
"cardId": "152627195406061955"
},
{
"medicalSn": "20250523216323",
"pName": "冯凤云",
"cardId": "152627196906281924"
},
{
"medicalSn": "20250523184674",
"pName": "张拴成",
"cardId": "152627196905261913"
},
{
"medicalSn": "20250523715097",
"pName": "张爱平",
"cardId": "15262719720821194X"
},
{
"medicalSn": "20250523469896",
"pName": "安惠芬",
"cardId": "150203197405203629"
},
{
"medicalSn": "20250523489825",
"pName": "陈云云",
"cardId": "152627196601061920"
},
{
"medicalSn": "20250523367889",
"pName": "于三女 ",
"cardId": "152627196803211923"
},
{
"medicalSn": "20250523881582",
"pName": "王利",
"cardId": "152627196702161920"
},
{
"medicalSn": "20250523443855",
"pName": "李润成",
"cardId": "152627196812031916"
},
{
"medicalSn": "20250523484316",
"pName": "靳青秀",
"cardId": "152627197309121927"
},
{
"medicalSn": "20250523883817",
"pName": "赵福所",
"cardId": "15262719560211193X"
},
{
"medicalSn": "20250524369448",
"pName": "邢连芳",
"cardId": "152627197104191921"
},
{
"medicalSn": "20250524751509",
"pName": "侯登峰",
"cardId": "152627197009271923"
},
{
"medicalSn": "20250524221891",
"pName": "冯香香",
"cardId": "152627196201011924"
},
{
"medicalSn": "20250524176226",
"pName": "庞四格",
"cardId": "152627195907081911"
},
{
"medicalSn": "20250524723950",
"pName": "范吉恒",
"cardId": "152627194110021917"
},
{
"medicalSn": "20250524545834",
"pName": "庞根叶 ",
"cardId": "152627197103211927"
},
{
"medicalSn": "20250524721843",
"pName": "张万全",
"cardId": "152627197301011918"
},
{
"medicalSn": "20250524399909",
"pName": "范守祥",
"cardId": "152627196802171915"
},
{
"medicalSn": "20250524326308",
"pName": "贺悄珍",
"cardId": "15262719620516192X"
},
{
"medicalSn": "20250524547635",
"pName": "张晓燕",
"cardId": "152627199301201921"
},
{
"medicalSn": "20250524387862",
"pName": "庞俊芳",
"cardId": "152627197201051920"
},
{
"medicalSn": "20250524907572",
"pName": "邓金",
"cardId": "152627195407191911"
},
{
"medicalSn": "20250524499920",
"pName": "秦爱桃",
"cardId": "152627196812151926"
},
{
"medicalSn": "20250524813798",
"pName": "范彩云",
"cardId": "152627199504191946"
},
{
"medicalSn": "20250525374107",
"pName": "刘二娃",
"cardId": "152627196005201923"
},
{
"medicalSn": "20250525964394",
"pName": "张全有",
"cardId": "152627196603181934"
},
{
"medicalSn": "20250525943969",
"pName": "李兰弟",
"cardId": "152627195703161928"
},
{
"medicalSn": "20250525821868",
"pName": "朱占元",
"cardId": "15262719600407191X"
},
{
"medicalSn": "20250525937875",
"pName": "李俊桃",
"cardId": "15262719571224192X"
},
{
"medicalSn": "20250525488510",
"pName": "赵栓根",
"cardId": "152627195208151933"
},
{
"medicalSn": "20250525830163",
"pName": "常之英",
"cardId": "150924195207021913"
},
{
"medicalSn": "20250525585498",
"pName": "刘海琴",
"cardId": "132522196803172329"
},
{
"medicalSn": "20250525993172",
"pName": "王二玲",
"cardId": "152627195308121942"
},
{
"medicalSn": "20250525576767",
"pName": "巩素利",
"cardId": "15092419570102372X"
},
{
"medicalSn": "20250525113626",
"pName": "王改梅",
"cardId": "152627198102261927"
},
{
"medicalSn": "20250525141720",
"pName": "张宏所",
"cardId": "152627195311061928"
},
{
"medicalSn": "20250525670332",
"pName": "李梅梅",
"cardId": "15262719500228196X"
},
{
"medicalSn": "20250525133662",
"pName": "兰桃桃",
"cardId": "152627195307061925"
},
{
"medicalSn": "20250525360045",
"pName": "张礼",
"cardId": "152627193701121915"
},
{
"medicalSn": "20250525900726",
"pName": "刘锁巧",
"cardId": "152627193406111925"
},
{
"medicalSn": "20250525190553",
"pName": "任英",
"cardId": "152627196702171926"
},
{
"medicalSn": "20250525542177",
"pName": "许栓子",
"cardId": "152627196612201933"
},
{
"medicalSn": "20250525576527",
"pName": "张兰兵",
"cardId": "152627196803061937"
},
{
"medicalSn": "20250525458078",
"pName": "韩仲鱼",
"cardId": "15092419470208372X"
},
{
"medicalSn": "20250525116202",
"pName": "卢端花",
"cardId": "152627194211051920"
},
{
"medicalSn": "20250525745031",
"pName": "武梅",
"cardId": "152628195911246148"
}
]

114
process_patients.py Normal file
View File

@ -0,0 +1,114 @@
import json
import requests
import time
from datetime import datetime
# 读取JSON文件
with open('headurl.json', 'r', encoding='utf-8') as f:
patients = json.load(f)
# 创建日志文件
log_filename = f'api_requests_{datetime.now().strftime("%Y%m%d_%H%M%S")}.log'
success_count = 0
fail_count = 0
def log_result(medical_sn, p_name, success, response, api_name):
global success_count, fail_count
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
status = "成功" if success else "失败"
if success:
success_count += 1
else:
fail_count += 1
with open(log_filename, 'a', encoding='utf-8') as f:
f.write(f"[{timestamp}] API: {api_name}, 体检编号: {medical_sn}, 姓名: {p_name}, 状态: {status}\n")
f.write(f"响应内容: {json.dumps(response, ensure_ascii=False)}\n")
f.write("-" * 80 + "\n")
# 第一个API请求函数
def request_first_api(medical_sn, card_id, p_name):
url = "https://pacs.gw12320.com/adminInspect/admin-api/inspect/patient/updatepersonimg"
params = {
"medicalSn": medical_sn,
"cardId": card_id
}
headers = {
'Content-Type': 'application/json',
'User-Agent': 'PostmanRuntime/7.43.3',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Host': 'pacs.gw12320.com'
}
try:
print(f"正在请求第一个API - {p_name} 的报告,请等待接口返回...")
response = requests.get(url, params=params, headers=headers, verify=False)
response.raise_for_status()
result = response.json()
success = result.get("code", -1) == 0
log_result(medical_sn, p_name, success, result, "第一个API")
return success
except Exception as e:
error_msg = str(e)
print(f"第一个API请求失败: {error_msg}")
log_result(medical_sn, p_name, False, {"error": error_msg}, "第一个API")
return False
# 第二个API请求函数
def request_second_api(medical_sn, p_name):
url = "https://pacs.gw12320.com/adminInspect/admin-api/inspect/patient/generateReport"
params = {"medicalSn": medical_sn}
headers = {
'Content-Type': 'application/json',
'User-Agent': 'PostmanRuntime/7.43.3',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Host': 'pacs.gw12320.com'
}
try:
print(f"正在请求第二个API - {p_name} 的报告,请等待接口返回...")
response = requests.get(url, params=params, headers=headers, verify=False)
response.raise_for_status()
result = response.json()
success = result.get("code", -1) == 0
log_result(medical_sn, p_name, success, result, "第二个API")
return success
except Exception as e:
error_msg = str(e)
print(f"第二个API请求失败: {error_msg}")
log_result(medical_sn, p_name, False, {"error": error_msg}, "第二个API")
return False
# 禁用SSL警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 主处理循环
print("开始处理请求...")
for patient in patients:
medical_sn = patient["medicalSn"]
card_id = patient["cardId"]
p_name = patient["pName"]
print(f"\n开始处理: {p_name} (体检编号: {medical_sn})")
# 调用第一个API
first_success = request_first_api(medical_sn, card_id, p_name)
print(f"第一个API处理完成: {'成功' if first_success else '失败'}")
# 等待1秒
time.sleep(1)
# 调用第二个API
second_success = request_second_api(medical_sn, p_name)
print(f"第二个API处理完成: {'成功' if second_success else '失败'}")
print("\n所有请求处理完成!")
print(f"成功请求数: {success_count}")
print(f"失败请求数: {fail_count}")
print(f"详细日志已保存到: {log_filename}")

76
process_reports.py Normal file
View File

@ -0,0 +1,76 @@
import json
import requests
import time
from datetime import datetime
# 读取JSON文件
with open('修复.json', 'r', encoding='utf-8') as f:
patients = json.load(f)
# 创建日志文件
log_filename = f'api_requests_{datetime.now().strftime("%Y%m%d_%H%M%S")}.log'
success_count = 0
fail_count = 0
def log_result(medical_sn, p_name, success, response):
global success_count, fail_count
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
status = "成功" if success else "失败"
if success:
success_count += 1
else:
fail_count += 1
with open(log_filename, 'a', encoding='utf-8') as f:
f.write(f"[{timestamp}] 体检编号: {medical_sn}, 姓名: {p_name}, 状态: {status}\n")
f.write(f"响应内容: {json.dumps(response, ensure_ascii=False)}\n")
f.write("-" * 80 + "\n")
# API请求函数
def request_report(medical_sn, p_name):
url = f"https://pacs.gw12320.com/adminInspect/admin-api/inspect/patient/generateReport"
params = {"medicalSn": medical_sn}
# 添加请求头完全匹配Postman的设置
headers = {
'Content-Type': 'application/json',
'User-Agent': 'PostmanRuntime/7.43.3',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Host': 'pacs.gw12320.com'
}
try:
print(f"正在请求 {p_name} 的报告,请等待接口返回...")
response = requests.get(url, params=params, headers=headers, verify=False)
response.raise_for_status() # 检查HTTP错误
result = response.json()
# 修改成功判断条件code为0表示成功
success = result.get("code", -1) == 0
log_result(medical_sn, p_name, success, result)
return success
except Exception as e:
error_msg = str(e)
print(f"请求失败: {error_msg}")
log_result(medical_sn, p_name, False, {"error": error_msg})
return False
# 禁用SSL警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 主处理循环
print("开始处理请求...")
for patient in patients:
medical_sn = patient["medicalSn"]
p_name = patient["pName"]
print(f"\n开始处理: {p_name} (体检编号: {medical_sn})")
success = request_report(medical_sn, p_name)
print(f"处理完成: {'成功' if success else '失败'}")
print("\n所有请求处理完成!")
print(f"成功请求数: {success_count}")
print(f"失败请求数: {fail_count}")
print(f"详细日志已保存到: {log_filename}")

54
start_process.bat Normal file
View File

@ -0,0 +1,54 @@
@echo off
chcp 65001
echo 正在启动报告生成程序...
REM 检测 Python优先 py 启动器,避免 WindowsApps 的 python 占位符抢先失败)
set "PYTHON_CMD="
py -3 --version >nul 2>&1 && set "PYTHON_CMD=py -3" && goto :py_found
py --version >nul 2>&1 && set "PYTHON_CMD=py" && goto :py_found
python --version >nul 2>&1 && set "PYTHON_CMD=python" && goto :py_found
python3 --version >nul 2>&1 && set "PYTHON_CMD=python3" && goto :py_found
echo Python未安装或未在 PATH 中!
echo 已尝试: py -3、py、python、python3
echo 若已安装请勾选安装程序中的「Add python.exe to PATH」或手动把 Python 目录加入系统环境变量 Path。
echo.
echo 按任意键退出...
pause >nul
exit /b 1
:py_found
echo 使用 Python 命令: %PYTHON_CMD%
REM 检查必要的Python包
echo 检查必要的Python包...
%PYTHON_CMD% -c "import requests" >nul 2>&1
if errorlevel 1 (
echo 正在安装必要的Python包...
%PYTHON_CMD% -m pip install requests
if errorlevel 1 (
echo 安装包失败!
echo 请手动执行: pip install requests
echo.
echo 按任意键退出...
pause > nul
exit /b 1
)
)
REM 检查JSON文件是否存在
if not exist "修复.json" (
echo 错误:找不到 修复.json 文件!
echo 请确保 修复.json 文件在当前目录下。
echo.
echo 按任意键退出...
pause > nul
exit /b 1
)
echo 开始执行Python脚本...
%PYTHON_CMD% process_reports.py
echo.
echo 程序执行完毕,按任意键退出...
pause > nul

2626
修复.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,61 @@
@echo off
chcp 65001
echo 正在启动体检报告处理程序...
REM 显示当前目录
echo 当前目录: %CD%
echo 正在检查文件...
REM 检测 Python优先 py 启动器,避免 WindowsApps 的 python 占位符抢先失败)
set "PYTHON_CMD="
py -3 --version >nul 2>&1 && set "PYTHON_CMD=py -3" && goto :py_found
py --version >nul 2>&1 && set "PYTHON_CMD=py" && goto :py_found
python --version >nul 2>&1 && set "PYTHON_CMD=python" && goto :py_found
python3 --version >nul 2>&1 && set "PYTHON_CMD=python3" && goto :py_found
echo Python未安装或未在 PATH 中!
echo 已尝试: py -3、py、python、python3
echo 若已安装请勾选安装程序中的「Add python.exe to PATH」或手动把 Python 目录加入系统环境变量 Path。
echo.
echo 按任意键退出...
pause >nul
exit /b 1
:py_found
echo 使用 Python 命令: %PYTHON_CMD%
REM 检查必要的Python包
echo 检查必要的Python包...
%PYTHON_CMD% -c "import requests" >nul 2>&1
if errorlevel 1 (
echo 正在安装必要的Python包...
%PYTHON_CMD% -m pip install requests
if errorlevel 1 (
echo 安装包失败!
echo 请手动执行: pip install requests
echo.
echo 按任意键退出...
pause > nul
exit /b 1
)
)
REM 检查JSON文件是否存在
dir headurl.json
if not exist "headurl.json" (
echo 错误:找不到 headurl.json 文件!
echo 请确保 headurl.json 文件在当前目录下。
echo 当前目录下的文件:
dir
echo.
echo 按任意键退出...
pause > nul
exit /b 1
)
echo 开始执行Python脚本...
%PYTHON_CMD% process_patients.py
echo.
echo 程序执行完毕,按任意键退出...
pause > nul

12
查询sql.txt Normal file
View File

@ -0,0 +1,12 @@
SELECT medicalSn,pName
FROM tb_patient
WHERE medicalDateTime >= '2025-04-16 00:00:00'
AND medicalDateTime < '2025-04-17 00:00:00'
AND `status` = 1
ORDER BY medicalSn desc