Skip to content

钉钉推送阳性警示单

准备

获取node路径

shell
npm config get prefix

检查是否有puppeteer

shell
npm list puppeteer

下载puppeteer

shell
npm install puppeteer

配置

OSS链接:oss://airdoc-ada/fundus/positive-case/

task配置:

// 内蒙古瑞众
2 => 'dev/config_nmgrz_2.json',
3 => 'test/config_nmgrz_2.json',
4 => 'prod/config_nmgrz_2.json',
// 宁夏电信
5 => 'dev/config_nxdx.json',
6 => 'test/config_nxdx.json',
7 => 'prod/config_nxdx.json'

开发

json
{
  "title": "开发dev",
  "org_ids": "40456,40540",
  "last_days": 9999,
  "next_days": 1,
  "url": "https://staging-admin.airdoc.com/admin/WarningTicketGroup",
  "node": "NODE_PATH=/Users/huangzexiao/project/node_modules /Users/huangzexiao/.nvm/versions/node/v22.14.0/bin/node",
  "webhook": "https://oapi.dingtalk.com/robot/send?access_token=7c9bd0b8efba201fce31e407dea2463d1a015ab1cbe89f75594ddf6222f95653"
}

测试

json
{
  "title": "测试test",
  "org_ids": "40456,40540",
  "last_days": 9999,
  "next_days": 1,
  "sn_list": "FD08DWCNW220390000S0,FD08DWCNW220390000S2,FG05DSCNW52129009102",
  "url": "https://staging-admin.airdoc.com/admin/WarningTicketGroup",
  "node": "/opt/node-v12.16.1/bin/node",
  "webhook": "https://oapi.dingtalk.com/robot/send?access_token=7c9bd0b8efba201fce31e407dea2463d1a015ab1cbe89f75594ddf6222f95653"
}

生产

json
{
  "title": "瑞众人寿内蒙古分公司",
  "org_ids": "45112,47153,48247,48261",
  "last_days": 0,
  "next_days": 1,
  "sn_list": "FN12510A037AB0020PW8,FN12509A123AB0020P82,FN12509A098AA0020PP8,FN12510A027AA0020PW0,FN12509A089AA0020PP1,FN12510A034AA0020PWG,FN12509A139AA0020P8W,FN12509A072AA0020PHF,FN12509A135AA0020P8T,FN12509A055AB0020PH0,FN12509A106AA0020PPW,FN12510A045AA0020PWW,FN12509A013AB0020P54,FN12509A125AB0020P8U,FN12509A156AB0020PV2,FN12509A083AA0020PHE,FF12250A398AA00200WD,FF12250A121AA0020082,FF12317A046AA002028V,FF12307A142AA002011Z,FF12306A103AA002004M,FF12317A035AA0020280,FF12317A085AB00202VF,FF12324A185AA00203DU,FF12307A054AA00200Z8,FF12324A186AB00203D9,FF12307A376AB00201P2,FN12509A164AA0020PV8,FN12509A109AB0020PPK,FN12435A041AA0020GY5,FN12330A088AB0020UVK,FN12433A007AA0020GWW,FN12433A247AA0020GNL,FN12435A179AA0020H1A,FN12509A138AB0020P8F,FN12433A108AA0020GK6,FN12509A191AA0020PAU,FN12509A102AA0020PPT,FN12435A002AB0020G70,FN12435A147AB0020H0B,FN12509A117AA0020PP7,FN12432A037AA0020GC4,FN12325C152AB0020U10,FN12433A174AB0020GM6,FN12509A090AA0020PP2,FN12338A130AB0020URW,FN12509A054AA0020PGZ,FN12433A034AA0020GJA,FN12509A031AB0020PGP,FN12338A119AA0020URG,FN12509A149AB0020P8E,FN12509A207AA0020PA6,FN12409A030AB002053P,FN12432A017AA0020GCU,FN12432A051AA0020GF9,FN12435A194AB0020H1L,FN12432A027AB0020GCT,FN12432A009AB0020GD7,FN12433A150AB0020GR7,FN12325B035AB00203NY,FN12432A008AA0020GDE,FN12432A048AA0020GF2,FN12435A153AA0020H0J,FN12324B029AB00203CD",
  "url": "https://ikang-admin.airdoc.com/admin/WarningTicketGroup",
  "node": "/usr/bin/node",
  "webhook": "https://oapi.dingtalk.com/robot/send?access_token=f127bbdc9da41df26f10277c26a281703fea3d38fd6bb6c94ece5f03220546ef"
}

删除冗余文件:

shell
rm -f /tmp/alarm_20250

手动推送

开发

shell
NODE_PATH=/Users/huangzexiao/project/node_modules
shell
php ~/project/eye-ak/public/script.php PushDingtalkPositiveAlarmMsg taskId 1

其中GetPositiveCaseAlarmInfo接口的配置是走的dev环境,但是PushDingtalkPositiveAlarmMsg中下载的pdf的配置是来自test环境的

测试

shell
php /var/www/test-eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1

生产

shell
php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1

定时任务脚本

开发

shell
# v2.4
*/1 * * * *  /opt/homebrew/opt/php@7.4/bin/php ~/project/eye-ak/public/script.php PushDingtalkPositiveAlarmMsg taskId 1 >> /tmp/alarm_cron_test.log 2>&1

测试

shell
crontab -e
shell
# v2.4
*/1 * * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c "/usr/bin/php /var/www/test-eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1" >> /tmp/alarm_cron_test.log 2>&1

00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c "/usr/bin/php /var/www/test-eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1" >> /tmp/alarm_cron_daily.log 2>&1

# 内蒙古瑞众阳性警示单推送
00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg_taskId-3.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 3" >> /tmp/alarm_cron_daily_taskId-3.log 2>&1
# 宁夏电信阳性警示单推送
00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg_taskId-6.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 6" >> /tmp/alarm_cron_daily_taskId-6.log 2>&1

生产

shell
crontab -e -l hailong
shell
# v2.1
#*/1 * * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c '/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg' >> /tmp/alarm_cron_test.log 2>&1
00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c '/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg' >> /tmp/alarm_cron_daily.log 2>&1

# v2.4
*/1 * * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1" >> /tmp/alarm_cron_test.log 2>&1
00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 1" >> /tmp/alarm_cron_daily.log 2>&1

# 内蒙古瑞众阳性警示单推送
#00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg_taskId-4.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 4" >> /tmp/alarm_cron_daily_taskId-4.log 2>&1

# 宁夏电信阳性警示单推送
00 18 * * * flock -xn /tmp/PushDingtalkPositiveAlarmMsg_taskId-7.lock -c "/usr/bin/php /var/www/eye/public/script.php PushDingtalkPositiveAlarmMsg taskId 7" >> /tmp/alarm_cron_daily_taskId-7.log 2>&1

下载pdf命令

根据test环境的配置,下载历史上所有的阳性警示单

可选taskId=2、3、5、6

shell
node ~/project/eye-ak/misc/pdf_generator/print-v3.js \
  --url "https://staging-admin.airdoc.com/admin/WarningTicketGroup?taskId=2" \
  --path "/tmp/alarm_$(date +%Y%m%d)" \
  --fileName "alarm_$(date +%Y%m%d_%H%M%S).pdf" \
  --zoom 0.9

根据prod环境的配置,下载当天的阳性警示单

可选taskId=4、7

shell
node ~/project/eye-ak/misc/pdf_generator/print-v3.js \
  --url "https://ikang-admin.airdoc.com/admin/WarningTicketGroup?taskId=4" \
  --path "/tmp/alarm_$(date +%Y%m%d)" \
  --fileName "alarm_$(date +%Y%m%d_%H%M%S).pdf" \
  --zoom 0.9

后续优化

PushDingtalkPositiveAlarmMsg默认读取的是dev中的配置,这不对

GetPositiveCaseAlarmInfo还是按域名读的,应该按env参数读

打印抗压报告

shell
node ~/project/eye-ak/misc/pdf_generator/print-v3.js \
  --url "https://mpd.babyeye.com/hrvreport?language=zh_CN&reportId=1982955593823948802" \
  --path "/tmp/alarm_$(date +%Y%m%d)" \
  --fileName "alarm_$(date +%Y%m%d_%H%M%S).pdf" \
  --zoom 0.9

打印网页图片(带cookie)

参数说明

参数位置说明
args[1] - URLhttps://staging-admin.airdoc.com/admin/WarningTicket?status=1&checkId=3446836&language=en要截图的警示单页面 URL
- checkId=3446836:检查单ID
- status=1:状态
- language=en:语言(英文)
args[2] - 路径/var/log/airlog/alarm_autopush_print/202511/07保存文件的目录路径(年月/日)
args[3] - 文件名alarm_3446836_251107214600.png输出文件名
- alarm_:前缀
- 3446836:check_id
- 251107214600:日期时间(25年11月07日21:46:00)
- .png:图片格式
args[4] - 超时时间''(空字符串)超时时间(脚本中已固定为 60000ms,此参数未使用)
args[5] - Cookie名称fantasticSession cookie 名称(用于身份认证)
args[6] - Cookie值783569961320c56167147ffc892bd0f7Session cookie 值(用于身份认证)

下载图片命令

本地打印测试:

shell
node /Users/hzx/project/eye-ak/misc/pdf_generator/print-alarm-report.js \
  "https://staging-admin.airdoc.com/admin/WarningTicket?status=1&checkId=3431373&language=en" \
  "/tmp/alarm" \
  "alarm_test_333.png" \
  "" \
  "fantastic" \
  "783569961320c56167147ffc892bd0f7" \

本地打印线上:

shell
node /Users/hzx/project/eye-ak/misc/pdf_generator/print-alarm-report.js \
  "https://ikang-admin.airdoc.com/admin/WarningTicket?checkId=22624037&status=1" \
  "/tmp/alarm" \
  "alarm_1.png" \
  "" \
  "fantastic" \
  "7b241db5bf4aab491f6b195086da846e"

线上打印:

shell
/opt/phantomjs /opt/print-alarm-report.js \
  'https://staging-admin.airdoc.com/admin/WarningTicket?status=1&checkId=3446836&language=en' \
  '/var/log/airlog/alarm_autopush_print/202511/07' \
  'alarm_3446836_251107214600.png' \
  '' \
  'fantastic' \
  '783569961320c56167147ffc892bd0f7'

眼底报告打印日志(仅了解)

打印完整报告

鹰瞳医疗视网膜检查报告

检查号:25838277

体检号:8991424304354

shell
{
    "0": "/data/ikang/pdf_medical/25838277-8991424304354-251119104809-complete.pdf", 
    "command": "/opt/phantomjs /opt/print.js 'https://pe.airdoc.com/pc-v2/print-ytmedical/a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe?language=zh_CN' '/data/ikang/pdf_medical' '25838277-8991424304354-251119104809-complete.pdf' 'Airdoc鹰瞳' '%E9%BB%84%E6%B3%BD%E6%A0%A1 8991424304354' '报告咨询: 400-100-3999' '0.8'", 
    "strlen": 1140937, 
    "file_exist": true
}

https://pe.airdoc.com/pc-v2/print-ytmedical/a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe?language=zh_CN' '/data/ikang/pdf_medical' '25838277-8991424304354-251119104809-complete.pdf

风险评估报告

检查号:25838277

体检号:8991424304354

shell
{
    "0": "/data/ikang/pdf_medical/25838277-8991424304354-251119104809-complete-health.pdf", 
    "command": "/opt/phantomjs /opt/print.js 'https://pe.airdoc.com/pc-v2/ytHeathyPdfPE?en_check_id=a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe&language=zh_CN' '/data/ikang/pdf_medical' '25838277-8991424304354-251119104809-complete-health.pdf' 'Airdoc鹰瞳' '%E9%BB%84%E6%B3%BD%E6%A0%A1 8991424304354' '报告咨询: 400-100-3999' '0.88'", 
    "strlen": 1140937, 
    "strlen_health": 220946, 
    "file_exist": true, 
    "file_exist_health": true
}

https://pe.airdoc.com/pc-v2/ytHeathyPdfPE?en_check_id=a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe&language=zh_CN

打印简化报告

鹰瞳医疗视网膜检查报告

检查号:25838277

体检号:8991424304354

shell
{
    "0": "/data/ikang/pdf_medical/25838277-8991424304354-251119104826-simple.pdf", 
    "command": "/opt/phantomjs /opt/print.js 'https://pe.airdoc.com/pc-v2/print-ytmedical/a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe?simple=true&language=zh_CN' '/data/ikang/pdf_medical' '25838277-8991424304354-251119104826-simple.pdf' 'Airdoc鹰瞳' '%E9%BB%84%E6%B3%BD%E6%A0%A1 8991424304354' '报告咨询: 400-100-3999' '0.8'", 
    "strlen": 458176, 
    "file_exist": true
}

https://pe.airdoc.com/pc-v2/print-ytmedical/a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe?simple=true&language=zh_CN

风险评估报告

检查号:25838277

体检号:8991424304354

shell
{
    "0": "/data/ikang/pdf_medical/25838277-8991424304354-251119104826-simple-health.pdf", 
    "command": "/opt/phantomjs /opt/print.js 'https://pe.airdoc.com/pc-v2/ytHeathyPdfPE?en_check_id=a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe&simple=true&language=zh_CN' '/data/ikang/pdf_medical' '25838277-8991424304354-251119104826-simple-health.pdf' 'Airdoc鹰瞳' '%E9%BB%84%E6%B3%BD%E6%A0%A1 8991424304354' '报告咨询: 400-100-3999' '0.88'", 
    "strlen": 458176, 
    "strlen_health": 220946, 
    "file_exist": true, 
    "file_exist_health": true
}

https://pe.airdoc.com/pc-v2/ytHeathyPdfPE?en_check_id=a2V5LWJqajY4ZDUzNzVjajQ4b3owdXI0Zy1qMTEzbGF0dDd0HJQ%2FlLD252wJGEObCHR0lRlddvWTUjJS9adzx6sPSJ59BHpe&simple=true&language=zh_CN

抗压报告

本地运行命令:

shell
node ~/project/print-hrv.js --url 'https://test-mpd.babyeye.com/hrvreport?language=zh-CN&reportId=1996474764382801921' --path '/tmp/ikang/pdf_hrv' --fileName '{$filename}'  --zoom '0.9'

Linux 机器上的运行情况

  1. 如果 Linux 机器已安装 Puppeteer 和 Chrome/Chromium:

    • ✅ 脚本可以正常运行。
    • 脚本能自动检测常见的 Chrome/Chromium 安装路径。
    • 支持的典型路径包括:
      • /usr/bin/google-chrome
      • /usr/bin/chromium-browser
      • /snap/bin/chromium
      • 以及其他标准系统路径。
  2. Linux 环境准备步骤:

    安装 Google Chrome(适用于 Ubuntu/Debian):

    bash
    sudo apt-get update
    sudo apt-get install -y google-chrome-stable

    或安装 Chromium:

    bash
    sudo apt-get install -y chromium-browser

    安装 Node.js 和 Puppeteer:

    bash
    npm install puppeteer
  3. 脚本特性:

    • 🔄 跨平台支持:自动识别运行环境(Linux、macOS、Windows)。
    • 🔍 智能浏览器路径探测:按优先级尝试多个常见 Chrome/Chromium 安装位置。
    • 🎯 自动降级机制:若未找到系统中已安装的 Chrome,会回退使用 Puppeteer 自带的 Chromium。
    • 📝 详细日志输出:运行时会打印实际使用的浏览器可执行文件路径,便于调试。
  4. Linux 专用优化:

    • 保留了 --no-sandbox 参数(在非 root 用户或容器环境中通常必需)。
    • 保留了 --disable-dev-shm-usage 参数(防止因 /dev/shm 内存不足导致崩溃,尤其在 Docker 中常见)。

所有文章版权皆归博主所有,仅供学习参考。