← 返回工作台

0任务总览

以下任务均配置在服务器 root@110.42.221.197crontab 中。
查看方式:ssh root@110.42.221.197crontab -l
状态 执行时间 任务脚本 业务功能
✅ 启用 01:30 每天 sync_resident_info.py 入住协议 → resident_info
✅ 启用 02:00 每天 sync_db.py --full 护理记录 → nursing_records(全量)
✅ 启用 02:10 每天 analyze_db.py 护理漏测分析
✅ 启用 02:30 每天 sync_assessment.py --full 评估记录 → assessment_analysis(全量)
✅ 启用 02:40 每天 analyze_assessment.py 评估漏评分析
✅ 启用 03:00 每天 sync_adverse_events.py 不良事件全量同步 → adverse_events

入住协议同步 → resident_info

脚本路径/opt/leakcheck/sync_resident_info.py
执行时间30 1 * * *  每天凌晨 1:30
日志文件/opt/leakcheck/sync_resident.log
轻流 APIhttps://care.yckycn.com/openApi/app/8a7fonqg0o02/apply/filter
目标数据表nursing.resident_info

业务逻辑

1. 调用轻流 API 拉取"入住协议"应用中的所有记录(分页,每页500条) 2. 将 API 数据与 MySQL resident_info 表对比 3. 只更新有变化的行(对比所有字段) 4. 变更轨迹记录在 change_log 字段(JSON) 5. 更新 sync_time 字段为当前时间

同步字段映射(共22个)

queId 208533040 → id_number(身份证号,主键) queId 208533063 → caregiver_name(姓名) queId 208533042 → gender(性别) queId 208533035 → institution(机构) queId 208533046 → admission_date(入住日期) queId 208533043 → birth_date(出生日期) queId 208533044 → age(年龄) queId 208533140 → ethnicity(民族) queId 208533048 → status(状态) queId 208533056 → area(休养区/楼层) queId 208533067 → bed_number(床位号) queId 208533037 → care_level(护理等级) ...(其余字段见脚本)
⚠️ 注意事项:
  • 增量同步:只更新变化的数据,不会删除记录
  • 全量同步需加 --full 参数(会 DROP TABLE,慎用!)
  • 数据量:目前约 4427 条记录
  • 手动触发 API:POST /api/resident/sync

护理记录同步(全量)

脚本路径/opt/leakcheck/sync_db.py
执行时间00 2 * * *  每天凌晨 2:00
日志文件/opt/leakcheck/cron.log
轻流 APIhttps://care.yckycn.com/openApi/app/...(护理记录应用)
目标数据表nursing.nursing_records

业务逻辑

1. 使用 --full 参数:全量同步,先清空再重新拉取所有数据 2. 分页拉取轻流"护理记录"应用数据 3. 写入 nursing_records 表 4. 同步完成后自动触发 analyze_db.py
⚠️ 注意事项:
  • 全量同步,执行时间较长(约几分钟)
  • 手动触发:点击工作台"护理漏测检查"卡片旁的同步按钮,或 POST /api/sync
  • 增量同步(不加 --full):只拉取最新 record_time 之后的数据

护理漏测分析

脚本路径/opt/leakcheck/analyze_db.py
执行时间05 2 * * *  每天凌晨 2:05(紧接同步后)
日志文件/opt/leakcheck/cron.log
输出文件/opt/leakcheck/leak_check_result.json

业务逻辑

1. 读取 nursing_records 表数据 2. 按护理等级判断每周应该测量几次生命体征 3. 检查最近3周内的漏测情况 4. 生成漏测报告,写入 leak_check_result.json 5. 前端 /leak 页面读取此 JSON 展示结果
说明:每次"护理记录同步"完成后会自动串联触发本脚本,无需单独配置依赖。

评估记录同步(全量)

脚本路径/opt/leakcheck/sync_assessment.py
执行时间30 2 * * *  每天凌晨 2:30
日志文件/opt/leakcheck/sync_assessment.log
轻流 API护理记录应用的评估相关数据
目标数据表nursing.assessment_recordsassessment_analysis

业务逻辑

1. 全量同步评估记录(--full 参数) 2. 分页拉取轻流数据 3. 写入 assessment_records 表 4. 同步完成后自动触发 analyze_assessment.py

评估漏评分析

脚本路径/opt/leakcheck/analyze_assessment.py
执行时间35 2 * * *  每天凌晨 2:35(紧接同步后)
日志文件/opt/leakcheck/cron.log

业务逻辑

1. 读取 assessment_records 表数据 2. 按自然年检查12项必查评估完成情况 3. 最新评估年份决定是否认可(当年评估为有效) 4. 离院老人(is_discharged=1)默认不显示 5. 结果写入 assessment_analysis 表 6. 前端 /assessment 页面从此表读取数据
说明:每次"评估记录同步"完成后会自动串联触发本脚本,无需单独配置依赖。

5b不良事件同步(全量)

脚本路径/opt/leakcheck/sync_adverse_events.py
执行时间00 3 * * *  每天凌晨 3:00
日志文件/opt/leakcheck/sync_adverse_events.log
轻流 APIhttps://care.yckycn.com/openApi/app/dtonmhf02801/apply/filter
目标数据表nursing.adverse_events

业务逻辑

1. 全量同步,不设日期过滤,拉取轻流所有不良事件记录 2. 使用 upsert(INSERT ... ON DUPLICATE KEY UPDATE)逐条写入 3. 同步完成后,删除 DB 中存在但轻流中已不存在的记录 4. 确保 DB 数据与轻流业务表完全一致 5. 不良事件为永久保留数据,不做增量、不清理旧数据

5c花名册同步(全量)

脚本路径/opt/leakcheck/sync_staff_roster.py
轻流 AppKeyahf2mv5g0g01 (openApi)
目标表staff_roster(主表)、staff_transfers(调动子表)
日志文件/opt/leakcheck/sync_staff_roster.log
唯一键apply_id(主键)、id_number(业务唯一)
调度方式cron 定时(每日 03:10) + 手动触发(API + 同步工具页面)
1. POST /openApi/app/ahf2mv5g0g01/apply/filter(分页,pageSize=200,pageNum) 2. 解析响应,检查 queId=4(流程状态),仅同步"已通过"记录 3. 提取主表 40+ 字段,写入 staff_roster(ON DUPLICATE KEY UPDATE) 4. 解析岗位调动子表(queId=208716737,type=18),写入 staff_transfers 5. 解析教育经历子表(queId=208897645),取第一行最高学历 6. 同步后删除 DB 中存在但轻流中不存在的记录(全量替换)
💡 说明:手动触发可调用 POST /api/staff-roster/sync,或在同步工具页面点击"花名册同步"按钮。
使用 --full 参数可清空表后全量重新导入。
⚠️ 注意:花名册 API 分页参数必须使用 pageNum(不是 currentPage),否则始终返回第1页。
审批状态过滤无法通过 API 参数实现,需在脚本端解析 queId=4 判断。
⚠️ 安全防护:若 API 返回的 apply_id 列表为空,跳过删除操作(防止误删全表)。
💡 说明:手动触发可通过同步工具页面,或调用 POST /api/adverse-events/sync

5d照护计划同步(全量)

脚本路径/opt/leakcheck/sync_care_plans.py
AppKeyc0uduv881c02
目标表biz_care_plans
日志文件/opt/leakcheck/sync_care_plans.log
调度方式cron 定时(每日 04:30) + 手动触发(API + 同步工具页面)

同步规则

📋 核心规则:
  1. 仅同步生效状态:只取 计划状态(queId=208851654)= 生效 的记录,忽略失效记录
  2. 一人一条去重:若同一老人有多条生效记录,保留计划制定日期(queId=208851443)最新的一条
  3. 多选字段处理:饮食种类、治疗饮食为多选字段,值以逗号拼接存储
  4. 关联方式:通过 id_numberbase_resident_info 关联,基础信息以入住协议为准

同步流程

轻流 API (c0uduv881c02) │ openApi apply/filter 全量拉取 ▼ 内存过滤 & 去重 │ 1. 筛选 plan_status = 生效 │ 2. GROUP BY id_number, MAX(plan_date) ▼ biz_care_plans (TRUNCATE + INSERT) │ ▼ 通过 id_number 关联 base_resident_info 获取基础信息

同步字段(22个业务字段)

queIdDB列名字段说明类型
208851323id_number身份证号码(主键)文本
208851443plan_date计划制定日期日期
208852815education文化程度下拉
208852814veteran退役军人单选
208853660religion宗教信仰下拉
208851669medical_history既往史文本
208852816smoking吸烟单选
208852817drinking饮酒单选
208852829diet_restriction饮食禁忌单选
208852830diet_restriction_detail具体饮食禁忌文本
208852831diet_type饮食种类(多选)多选
208852832therapeutic_diet治疗饮食(多选)多选
208853929long_term_goal长期目标文本
208853930short_term_goal短期目标文本
208853228concern_11.您当前的关注点是什么文本
208853229concern_22.您需要什么文本
208853230concern_33.我们可以为您做什么文本
208853231sleep_habit睡眠习惯文本
208853232urination小便情况文本
208853931defecation大便情况文本
208852834special_note特殊服务注意事项文本
208853932personalized_service个性化服务(长期)文本
💡 说明:手动触发可调用 POST /api/care-plan/sync,或在同步工具页面点击"照护计划同步"按钮。 同步耗时约35秒(全量约3350条),无需阻塞其他任务。

每日执行流程

01:30 → sync_resident_info.py (入住协议 → resident_info) 02:00 → sync_db.py --full (护理记录全量同步) 02:10 → analyze_db.py (护理漏测分析) 02:30 → sync_assessment.py --full (评估记录全量同步) 02:40 → analyze_assessment.py (评估漏评分析) 03:00 → sync_adverse_events.py (不良事件全量同步) 03:10 → sync_staff_roster.py (花名册全量同步) 04:30 → sync_care_plans.py (照护计划全量同步) ↓ 所有任务在凌晨 4:30 前完成,早间访问时数据已是最新。
✅ 状态:以上8个任务均已在服务器 crontab 中启用,无需手动干预,每天凌晨自动执行。

数据流向示意

轻流 API(入住协议) │ ▼ resident_info ──────────────────────────────────┐ │ JOIN 轻流 API(护理记录) │ │ ▼ nursing_records → analyze_db.py → leak_check_result.json │ /leak 页面 轻流 API(评估记录) │ assessment_records → analyze_assessment.py → assessment_analysis │ /assessment 页面