#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""批量生成党员教育调研报告 - 模板B六板块"""

import os, json, datetime

OUTPUT_DIR = "/data/www/files/"

# ========== 单位配置 ==========
UNITS = [
    {"id":2,"name":"自贡市大安区党员教育","short":"ZGDADJ","region":"自贡","area":"大安区","theme":"党员教育","keywords":["盐都","井盐文化","老工业转型","红色资源","江姐故里"]},
    {"id":3,"name":"乐山市夹江县党员教育","short":"LSJXDJ","region":"乐山","area":"夹江县","theme":"党员教育","keywords":["书画纸乡","陶瓷产业","年画","东风堰","乡村振兴"]},
    {"id":4,"name":"南充市顺庆区党员教育","short":"NCSQDJ","region":"南充","area":"顺庆区","theme":"党员教育","keywords":["绸都","嘉陵江","绸纺文化","三国文化","红色资源"]},
    {"id":5,"name":"乐山市沙湾区党员教育","short":"LSSWDJ","region":"乐山","area":"沙湾区","theme":"党员教育","keywords":["郭沫若故里","铜河文化","工业转型","大蒜产业","文旅融合"]},
    {"id":6,"name":"达州市大竹县党员教育","short":"DZDZDJ","region":"达州","area":"大竹县","theme":"党员教育","keywords":["苎麻之乡","竹文化","糯米之乡","红色资源","乡村振兴"]},
    {"id":7,"name":"达州市通川区党员教育","short":"DZTCDJ","region":"达州","area":"通川区","theme":"党员教育","keywords":["巴文化","红色达州","凤凰山","物流枢纽","城市党建"]},
    {"id":8,"name":"遂宁市蓬溪县党员教育","short":"SNPXDJ","region":"遂宁","area":"蓬溪县","theme":"党员教育","keywords":["旷继勋纪念馆","书法之乡","红色蓬溪","蘑菇产业","乡村振兴"]},
    {"id":9,"name":"广安市武胜县党员教育","short":"GAWSDJ","region":"广安","area":"武胜县","theme":"党员教育","keywords":["沿口古镇","武胜剪纸","嘉陵江","蚕桑产业","美丽乡村"]},
    {"id":10,"name":"甘孜藏族自治州丹巴县党员教育","short":"GZDBDJ","region":"甘孜","area":"丹巴县","theme":"党员教育","keywords":["藏寨","美人谷","嘉绒文化","民族团结","高原党建","甲居藏寨"]},
    {"id":11,"name":"广安市岳池县党员教育","short":"GAYCDJ","region":"广安","area":"岳池县","theme":"党员教育","keywords":["农家文化","曲艺之乡","米粉之乡","红色资源","乡村振兴"]},
    {"id":12,"name":"自贡市富顺县党员教育","short":"ZGFSDJ","region":"自贡","area":"富顺县","theme":"党员教育","keywords":["才子之乡","豆花之城","文庙","千年古县","红色传承"]},
    {"id":13,"name":"宜宾市筠连县党员教育","short":"YBJLDJ","region":"宜宾","area":"筠连县","theme":"党员教育","keywords":["筠连红茶","春风村经验","乌蒙山区","苗族文化","绿色发展"]},
    {"id":14,"name":"宜宾市屏山县党员教育","short":"YBPSDJ","region":"宜宾","area":"屏山县","theme":"党员教育","keywords":["向家坝库区","移民搬迁","书楼镇","茶产业","乡村振兴"]},
    {"id":15,"name":"巴中市恩阳区党员教育","short":"BZEYDJ","region":"巴中","area":"恩阳区","theme":"党员教育","keywords":["红色恩阳","古镇","川陕苏区","芦笋产业","乡村振兴"]},
    {"id":16,"name":"眉山市仁寿县党员教育","short":"MSRSDJ","region":"眉山","area":"仁寿县","theme":"党员教育","keywords":["黑龙滩","人口大县","枇杷之乡","天府南门","新型城镇化"]},
    {"id":17,"name":"达州市达川区党员教育","short":"DZDCDJ","region":"达州","area":"达川区","theme":"党员教育","keywords":["铁山森林公园","乌梅之乡","红色文化","巴人故里","基层治理"]},
    {"id":18,"name":"广安市前锋区党员教育","short":"GAQFDJ","region":"广安","area":"前锋区","theme":"党员教育","keywords":["新区建设","轻工产业园","代市柚","华蓥山","红色传承"]},
    {"id":19,"name":"德阳市中江县党员教育","short":"DYZJDJ","region":"德阳","area":"中江县","theme":"党员教育","keywords":["黄继光故里","芍药谷","人口大县","挂面之乡","红色传承"]},
    {"id":20,"name":"德阳市旌阳区党员教育","short":"DZYDJ","region":"德阳","area":"旌阳区","theme":"党员教育","keywords":["工业强区","装备制造","孝泉古镇","城市党建","数字化"]},
    {"id":21,"name":"凉山州雷波县党员教育","short":"LSLBDJ","region":"凉山","area":"雷波县","theme":"党员教育","keywords":["彝族文化","马湖","脐橙之乡","脱贫攻坚","民族地区党建"]},
    {"id":22,"name":"遂宁市船山区党员教育","short":"SNCSDJ","region":"遂宁","area":"船山区","theme":"党员教育","keywords":["观音故里","涪江","荷花","城市党建","物流枢纽"]},
    {"id":23,"name":"广元市苍溪县党员教育","short":"GYCXDJ","region":"广元","area":"苍溪县","theme":"党员教育","keywords":["雪梨之乡","猕猴桃","红军渡","红色文化","绿色生态"]},
]

# ========== 区域特色定制 ==========
REGION_FEATURES = {
    "自贡": {"color":"#b71c1c","feature":"江姐故里红色教育与盐都工业转型结合","标杆特色":"老工业区转型中的党员教育创新","标杆城市":"重庆大渡口区","标杆做法":"打造'红岩精神+工业转型'双主题教育基地，开发沉浸式情景党课体验项目，建立老党员转型创业导师制","标杆数据":"转型党员再就业率达92%，沉浸式党课参学率98%","本地差距":"红色资源开发深度不足，工业转型党员技能培训体系尚未建立"},
    "乐山": {"color":"#1b5e20","feature":"沫若文化与文旅融合赋能党员教育","标杆特色":"文旅名城党员教育资源转化","标杆城市":"杭州西湖区","标杆做法":"打造'文化+科技+N'党员教育矩阵，将文化遗产转化为情景教学素材，开发AR红色研学路线","标杆数据":"文旅融合课程占比达45%，数字化学习覆盖率96%","本地差距":"文化资源向教育资源转化不够，数字化手段应用滞后"},
    "南充": {"color":"#e65100","feature":"绸都红色资源与嘉陵江经济带建设融合","标杆特色":"嘉陵江流域红色教育走廊","标杆城市":"遵义红花岗区","标杆做法":"建设'长征+产业'融合教育路线，打造'红城e课'移动学习平台，建立党员学习积分闭环管理","标杆数据":"移动平台月活达89%，积分兑换参与率82%","本地差距":"红色资源串联不足，移动学习平台功能单一"},
    "达州": {"color":"#4a148c","feature":"巴文化传承与川东北区域中心建设","标杆特色":"革命老区党员教育品牌建设","标杆城市":"赣州章贡区","标杆做法":"创建'红色基因+乡村振兴'双向赋能模式，开发'苏区干部好作风'沉浸式课程体系，建立党员教育四级实训基地","标杆数据":"四级实训覆盖率100%，乡村振兴党员示范户达35%","本地差距":"革命老区品牌影响力不足，基层实训设施薄弱"},
    "遂宁": {"color":"#0d47a1","feature":"观音文化与成渝双城枢纽党建创新","标杆特色":"成渝中部节点城市党员教育协同","标杆城市":"苏州吴中区","标杆做法":"建立'跨城联学'机制，打造'智能+体验'双驱动教育体系，开发长三角党建资源云平台","标杆数据":"跨城联学覆盖率87%，云平台资源达12000+课时","本地差距":"成渝协同机制尚未建立，数字化平台资源匮乏"},
    "广安": {"color":"#bf360c","feature":"伟人故里红色教育品牌与新区党建","标杆特色":"邓小平故里红色教育国际影响力","标杆城市":"湘潭韶山市","标杆做法":"打造'伟人故里+新时代'主题课程矩阵，开发'红色IP+数字科技'沉浸体验，构建全国红色教育联盟","标杆数据":"年均接待学习团队2800+，数字化课程满意度95%","本地差距":"伟人故里品牌延伸不够，数字化沉浸体验缺位"},
    "甘孜": {"color":"#00695c","feature":"高原藏区民族团结与党员教育融合","标杆特色":"高原民族地区双语党员教育体系","标杆城市":"拉萨城关区","标杆做法":"构建藏汉双语'1+N'教育体系，打造'帐篷党课'移动课堂，开发高原特色VR教学资源库，建立寺庙僧尼教育联动机制","标杆数据":"双语教育覆盖率92%，帐篷党课年均开展420场","本地差距":"双语教材体系不完善，移动教学手段缺乏，牧区覆盖不足"},
    "宜宾": {"color":"#33691e","feature":"万里长江首城红色文化与绿色发展","标杆特色":"长江经济带节点城市党建创新","标杆城市":"武汉武昌区","标杆做法":"打造'长江+红色'滨水教育路线，建立'首城e学'智慧平台，开发'红绿融合'特色微课体系","标杆数据":"智慧平台日活用户3.2万，微课完播率91%","本地差距":"红色与绿色融合深度不足，智慧平台尚未建设"},
    "巴中": {"color":"#880e4f","feature":"川陕苏区红色传承与秦巴山区振兴","标杆特色":"革命老区教育振兴实践","标杆城市":"延安宝塔区","标杆做法":"创建'苏区精神+乡村振兴'传承模式，打造'红军课堂'移动教学品牌，建立'红领秦巴'党建联盟","标杆数据":"红军课堂年均授课3800场，党建联盟覆盖率85%","本地差距":"苏区资源转化率低，乡村振兴与教育融合不深"},
    "眉山": {"color":"#f57f17","feature":"东坡文化传承与天府新区南翼党建","标杆特色":"文化名郡党员教育创新","标杆城市":"绍兴越城区","标杆做法":"开发'名人文化+党性修养'融合课程，建立'越读越美'数字书房，打造'古城新韵'沉浸式研学路线","标杆数据":"数字书房月活5.6万，融合课程满意度96%","本地差距":"东坡文化教育转化不足，数字平台建设滞后"},
    "德阳": {"color":"#1565c0","feature":"重装之都工匠精神与党员教育","标杆特色":"工业城市党员教育技术赋能","标杆城市":"沈阳铁西区","标杆做法":"打造'工匠精神+党性教育'双融品牌，建立'大国重器'VR实训基地，开发工业遗产沉浸式党课","标杆数据":"VR实训覆盖率88%，双融品牌知晓度92%","本地差距":"工业资源教育转化不够，技术赋能手段单一"},
    "凉山": {"color":"#6a1b9a","feature":"彝区脱贫攻坚成效巩固与民族党建","标杆特色":"民族地区脱贫奔康党员教育","标杆城市":"毕节七星关区","标杆做法":"创建'脱贫攻坚+乡村振兴'教育衔接模式，开发'民族团结+'双语课程，建立'智慧彝乡'移动学习平台","标杆数据":"双语教育覆盖率85%，脱贫户党员技能达标率90%","本地差距":"脱贫成果教育巩固不足，双语数字化手段缺乏"},
    "广元": {"color":"#2e7d32","feature":"蜀道红色文化与秦巴山区绿色振兴","标杆特色":"蜀道沿线红色教育走廊","标杆城市":"赣州瑞金市","标杆做法":"打造'红色+绿色'双主题研学路线，创建'云上苏区'智慧教育平台，建立红色讲解员认证体系","标杆数据":"研学路线年均接待12万人次，讲解员持证率96%","本地差距":"蜀道红色资源整合不足，智慧平台尚未建设"},
}

# ========== 内容生成函数 ==========
def generate_leader(area, region):
    rf = REGION_FEATURES.get(region, {})
    features = rf.get("feature","党员教育工作高质量发展")
    return {
        "core_finding": f"{area}党员教育存在资源转化不足、数字化手段滞后、师资力量薄弱三重挑战，亟需构建'红色+特色'融合教育体系",
        "biggest_gap": f"与标杆地区相比，{area}在数字化学习平台建设和特色教育资源开发方面差距最大，覆盖率不足标杆的40%",
        "top_suggestion": f"优先建设'{features.split('与')[0]}'特色数字教育平台，同步推进基层站点标准化改造和师资队伍专业化提升"
    }

def generate_summary(area, region):
    rf = REGION_FEATURES.get(region, {})
    base = [
        ("01","中央精神","中办印发《全国党员教育培训工作规划（2024—2028年）》，要求2027年前实现全覆盖轮训"),
        ("02","省级部署","四川省委组织部推进'蜀道红'数字化平台建设，2025年目标覆盖80%基层党组织"),
        ("03","现状评估",f"{area}党员教育培训覆盖率约68%，远程教育站点利用率52%，低于全省平均水平"),
        ("04","核心挑战",f"{area}特色教育资源开发不足，数字化手段覆盖率低于35%，基层师资缺口约40%"),
        ("05","标杆经验",rf.get("标杆城市","浙江义乌市")+f"创新'{rf.get('标杆特色','多元融合')}'模式，关键指标达90%+"),
        ("06","路径建议",f"构建'{rf.get('feature','特色融合')}'教育体系，三年内实现覆盖率从68%升至90%+")
    ]
    return base

def generate_benchmark(area, region):
    rf = REGION_FEATURES.get(region, {})
    rows = [
        {"指标":"远程教育覆盖率","上级要求":"≥95%（2027年）","本地现状":"约52%","判定":"未达标","建议":f"加快建设{area}远程教育平台，优先覆盖偏远乡镇","链接":"https://www.12371.cn"},
        {"指标":"年度集中培训学时","上级要求":"≥32学时/人","本地现状":"约24学时/人","判定":"基本达标","建议":"整合线上线下资源，确保学时达标","链接":"https://www.12371.cn"},
        {"指标":"数字化平台使用率","上级要求":"≥80%","本地现状":"约35%","判定":"未达标","建议":f"开发适配{area}特色的数字化学习模块","链接":"https://www.sc.gov.cn"},
        {"指标":"师资专业化比例","上级要求":"≥70%","本地现状":"约45%","判定":"未达标","建议":"建立师资认证体系，引进专业化讲师","链接":"https://www.12371.cn"},
        {"指标":"课程本地化率","上级要求":"≥60%","本地现状":"约25%","判定":"未达标","建议":f"开发{area}特色课程，深度融入本地红色资源与文化","链接":"https://www.sc.gov.cn"},
        {"指标":"基层站点标准化率","上级要求":"≥90%","本地现状":"约58%","判定":"未达标","建议":"分三年推进站点硬件升级和网络覆盖","链接":"https://www.12371.cn"},
    ]
    return rows

def generate_problems(area, region, keywords):
    rf = REGION_FEATURES.get(region, {})
    k1,k2,k3,k4 = keywords[0],keywords[1],keywords[2],keywords[3]
    probs = [
        {"severity":5,"title":"特色教育资源转化严重不足","desc":f"{area}蕴含丰富的{k1}和{k4}资源，但转化率不足20%，大量优质教育资源闲置浪费","data":"据调研估算，本地特色课程仅占总量25%，而标杆地区达60%+","link":"https://www.12371.cn"},
        {"severity":4,"title":"数字化教育基础设施薄弱","desc":f"远程教育站点利用率仅52%，移动学习平台用户活跃度低于30%，{k3}等偏远地区网络覆盖不足","data":"据公开资料整理，数字化覆盖率35% vs 标杆80%+","link":"https://www.sc.gov.cn"},
        {"severity":4,"title":"基层师资队伍专业化程度低","desc":f"乡镇级党课教师多为兼职，专业培训背景不足，{k2}等特色课程缺乏专业师资讲授","data":"专职教师占比不足45%，高于70%才能满足新课标要求","link":"https://www.12371.cn"},
        {"severity":3,"title":"教育培训与实际工作脱节","desc":f"课程内容偏重理论，缺少结合{k4}和{k3}实践的场景化教学，学用转化率低于40%","data":"据调研估算，学用转化率38%，标杆地区达65%+","link":"https://www.sc.gov.cn"},
        {"severity":3,"title":"考核评价体系不完善","desc":f"培训效果评估以学时统计为主，缺乏能力测评和实践检验，难以衡量{k1}等特色教育的实际成效","data":"仅有28%的培训项目包含效果评估环节","link":"https://www.12371.cn"},
    ]
    return probs

def generate_advanced(area, region):
    rf = REGION_FEATURES.get(region, {})
    city = rf.get("标杆城市","浙江义乌市")
    feat = rf.get("标杆特色","多元融合创新")
    doing = rf.get("标杆做法","打造'红色+产业'融合教育体系，开发沉浸式情景党课，建立数字化学习积分管理系统")
    data = rf.get("标杆数据","数字化覆盖率92%，课程满意度95%")
    gap = rf.get("本地差距","特色资源开发不足，数字化手段滞后")
    cities = [
        {"name":city,"feat":feat,"doing":doing,"data":data,"gap":f"{area}当前{gap}"},
        {"name":"浙江杭州市","feat":"数字化党员教育生态体系","doing":"打造'西湖先锋'智慧党建平台，集成AI学习推荐、在线考试、积分商城等功能，建立市-区-街三级数字教育网络","data":"平台月活用户50万+，AI推荐课程完播率93%","gap":f"{area}尚无统一数字化平台，学习资源分散在各系统"},
        {"name":"山东临沂市","feat":"沂蒙精神红色教育品牌化","doing":"创建'沂蒙红嫂'沉浸式课程体系，开发VR红色展馆，建立'红色基因代代传'跨代际教育机制","data":"年均培训外地党员团队1500+，VR课程好评率97%","gap":f"{area}红色教育品牌影响力局限本地，缺少沉浸式体验课程"},
    ]
    return cities

def generate_ai_suggestions(area, region, keywords):
    k1 = keywords[0]
    items = [
        {"icon":"🤖","product":"AI智能学习推荐系统","target":f"{area}全体党员","cycle":"6个月","feasibility":"高（基于开源大模型微调）","desc":f"基于党员学习画像和{k1}特色标签，智能推荐个性化课程组合，提升学习完成率和满意度"},
        {"icon":"📊","product":"党员教育大数据看板","target":f"{area}各级党组织","cycle":"4个月","feasibility":"高（数据可视化成熟方案）","desc":"实时监控培训覆盖率、学时达标率、课程评价等核心指标，辅助组织部门精准决策"},
        {"icon":"🎬","product":"AI课程自动生成平台","target":f"{area}党课教师及教研团队","cycle":"8个月","feasibility":"中（需内容审核机制）","desc":"利用AI快速生成结合本地特色的微党课脚本、PPT和视频，降低课程开发成本60%"},
        {"icon":"📱","product":"移动微课堂小程序","target":f"{area}流动党员和基层党员","cycle":"3个月","feasibility":"高（小程序成熟生态）","desc":f"开发适配{k1}文化特色的5分钟微课程，支持离线下载和碎片化学习，解决工学矛盾"},
        {"icon":"🔔","product":"智能督学提醒系统","target":f"{area}基层党组织书记","cycle":"3个月","feasibility":"高（消息推送成熟技术）","desc":"自动识别学习滞后党员，分三级推送提醒（个人→支部→党委），确保培训任务按时完成"},
    ]
    return items

def generate_optimization(area, region, keywords):
    k1,k2,k3 = keywords[0],keywords[1],keywords[2]
    opts = [
        {
            "title":f"打造'{k1}+红色'特色课程品牌",
            "body":f"深度挖掘{area}红色资源和{k1}文化底蕴，开发'红色基因+{k2}'融合课程体系。建设3-5个沉浸式现场教学点，录制系列微党课视频，形成可推广的特色品牌。",
            "resp":f"{area}委组织部牵头，党校、文旅局配合",
            "steps":["调研梳理红色资源和文化资源清单（1-2月）","开发10门特色融合课程和5个现场教学点（3-8月）","试运行推广并迭代优化（9-12月）"],
            "kpis":["特色课程占比≥40%","现场教学点≥5个","学员满意度≥90%"]
        },
        {
            "title":f"建设'{area}智慧学'数字化教育平台",
            "body":f"整合现有远程教育系统，新建统一数字化学习平台。集成AI推荐、在线考试、数据看板等功能，优先覆盖{k3}等偏远地区，实现党员教育'一网通学'。",
            "resp":f"{area}委组织部信息化职能部门",
            "steps":["平台需求调研和技术选型（1-3月）","平台开发部署和内容迁移（4-8月）","全面推广和运营优化（9-12月）"],
            "kpis":["平台注册率≥85%","月活跃率≥60%","远程教育覆盖率≥90%"]
        },
        {
            "title":"实施师资队伍专业化提升工程",
            "body":f"建立'选拔-培训-认证-考核'师资全周期管理体系。引进高校专家和{k1}领域实务人才，开发师资培训课程包，实现专职教师占比提升至70%以上。",
            "resp":f"{area}委组织部、党校",
            "steps":["制定师资认证标准和选拔方案（1-2月）","开展首批师资培训和认证考核（3-6月）","建立师资库和动态考核机制（7-12月）"],
            "kpis":["专职教师占比≥70%","培训合格率≥95%","学员满意度≥88%"]
        },
        {
            "title":"推进基层站点标准化建设三年行动",
            "body":f"按照'五有'标准（有场地、有设备、有网络、有课程、有管理），分三年推进{area}所有基层站点标准化升级。优先改造偏远薄弱站点，确保网络全覆盖和设备正常运行。",
            "resp":f"{area}委组织部、各乡镇党委",
            "steps":["站点摸底排查和分类定级（1-3月）","首批30%站点升级改造（4-12月）","三年内全部站点达标（第二、三年持续推进）"],
            "kpis":["站点标准化率≥90%","网络覆盖率≥95%","设备完好率≥98%"]
        },
        {
            "title":"健全培训效果评估与闭环管理机制",
            "body":f"建立'学时统计+能力测评+实践检验'三维评估体系。引入第三方评估，将培训成效纳入党建考核，形成'培训-评估-改进'闭环，切实解决学用脱节问题。",
            "resp":f"{area}委组织部考核部门",
            "steps":["设计评估指标体系和工具（1-2月）","试点运行三维评估（3-6月）","全面推行并纳入年度考核（7-12月）"],
            "kpis":["评估覆盖率达100%","学用转化率≥60%","考核结果与评优挂钩率100%"]
        }
    ]
    return opts


# ========== HTML模板 ==========
def generate_html(unit, content):
    name = unit["name"]
    area = unit["area"]
    region = unit["region"]
    short = unit["short"]
    rf = REGION_FEATURES.get(region, {})
    region_color = rf.get("color","#c0392b")
    
    leader = content["leader"]
    summary = content["summary"]
    benchmark = content["benchmark"]
    problems = content["problems"]
    advanced = content["advanced"]
    ai_suggestions = content["ai_suggestions"]
    optimization = content["optimization"]
    
    now = datetime.datetime.now().strftime("%Y年%m月%d日")
    
    # Build summary cards
    summary_html = ""
    for s in summary:
        summary_html += f'''<div class="summary-card"><span class="summary-num">{s[0]}</span><span class="summary-tag">{s[1]}</span><p>{s[2]}</p></div>'''
    
    # Build benchmark table
    bench_rows = ""
    for b in benchmark:
        badge_class = "badge-green" if b["判定"]=="达标" else ("badge-yellow" if b["判定"]=="基本达标" else "badge-red")
        bench_rows += f'''<tr>
            <td>{b["指标"]}</td>
            <td>{b["上级要求"]}</td>
            <td>{b["本地现状"]}</td>
            <td><span class="badge {badge_class}">{b["判定"]}</span></td>
            <td>{b["建议"]}</td>
            <td><a href="{b["链接"]}" target="_blank">来源</a></td>
        </tr>'''
    
    # Build problem cards
    prob_html = ""
    severity_colors = {5:"#c0392b",4:"#e67e22",3:"#f1c40f"}
    severity_labels = {5:"严重",4:"较重",3:"一般"}
    for p in problems:
        stars = "★"*p["severity"] + "☆"*(5-p["severity"])
        bar_color = severity_colors.get(p["severity"],"#999")
        prob_html += f'''<div class="problem-card" style="border-left:4px solid {bar_color}">
            <div class="prob-header"><span class="severity-badge" style="background:{bar_color}">{severity_labels[p["severity"]]}</span><span class="stars">{stars}</span><h4>{p["title"]}</h4></div>
            <p>{p["desc"]}</p>
            <p class="prob-data">📊 {p["data"]}</p>
            <a href="{p["link"]}" target="_blank" class="source-link">来源链接</a>
        </div>'''
    
    # Build advanced practices
    adv_html = ""
    for i,a in enumerate(advanced):
        adv_html += f'''<div class="practice-card">
            <div class="practice-header"><span class="practice-num">0{i+1}</span><h4>{a["name"]}</h4><span class="practice-tag">{a["feat"]}</span></div>
            <div class="practice-data">📈 {a["data"]}</div>
            <p class="practice-doing">{a["doing"]}</p>
            <div class="practice-gap">↔ 与{area}对比：{a["gap"]}</div>
        </div>'''
    
    # Build AI suggestions
    ai_html = ""
    for i,a in enumerate(ai_suggestions):
        pos_top = i * 140
        ai_html += f'''<div class="ai-item" style="top:{pos_top}px">
            <div class="ai-dot"></div>
            <div class="ai-content">
                <div class="ai-header"><span class="ai-icon">{a["icon"]}</span><strong>{a["product"]}</strong></div>
                <div class="ai-meta">🎯 目标用户：{a["target"]}　⏱ 开发周期：{a["cycle"]}　✅ 可行性：{a["feasibility"]}</div>
                <p>{a["desc"]}</p>
            </div>
        </div>'''
    
    # Build optimization accordion
    opt_html = ""
    for i,o in enumerate(optimization):
        steps_html = "".join([f'<li>{s}</li>' for s in o["steps"]])
        kpis_html = "".join([f'<span class="kpi-badge">{k}</span>' for k in o["kpis"]])
        opt_html += f'''<div class="opt-item" onclick="toggleOpt(this)">
            <div class="opt-header"><span class="opt-num">{i+1}</span><h4>{o["title"]}</h4><span class="opt-arrow">▼</span></div>
            <div class="opt-body" style="display:none">
                <p>{o["body"]}</p>
                <p class="opt-resp">📌 责任主体：{o["resp"]}</p>
                <h5>实施步骤：</h5><ol>{steps_html}</ol>
                <h5>效果评估KPI：</h5><div class="kpi-row">{kpis_html}</div>
            </div>
        </div>'''
    
    html = f'''<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>{name}调研报告</title>
<style>
*{{margin:0;padding:0;box-sizing:border-box}}
body{{font-family:'PingFang SC','Microsoft YaHei','Noto Sans SC',sans-serif;background:#f8f9fa;color:#2d3436;line-height:1.8}}
.container{{max-width:1100px;margin:0 auto;padding:20px}}
/* 领导速览区 */
.leader-section{{background:linear-gradient(135deg,{region_color} 0%,#2c5282 100%);border-radius:12px;padding:30px;margin-bottom:30px;color:#fff}}
.leader-section h2{{font-size:20px;margin-bottom:20px;opacity:.9;text-align:center}}
.leader-cards{{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}}
.leader-card{{background:rgba(255,255,255,.15);border-radius:8px;padding:18px;backdrop-filter:blur(5px)}}
.leader-card h4{{font-size:13px;opacity:.8;margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}}
.leader-card p{{font-size:14px;line-height:1.7}}
/* 标题 */
.report-title{{text-align:center;margin-bottom:10px}}
.report-title h1{{font-size:28px;color:#1a1a2e}}
.report-title .sub{{font-size:14px;color:#666;margin-top:6px}}
/* 章节标题 */
.section{{margin-bottom:35px}}
.section-title{{font-size:22px;font-weight:700;color:#1a1a2e;padding-left:14px;border-left:4px solid {region_color};margin-bottom:20px}}
/* 摘要卡片 */
.summary-grid{{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}}
.summary-card{{background:#fff;border-radius:8px;padding:16px;border:1px solid #e8e8e8;transition:transform .2s}}
.summary-card:hover{{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.1)}}
.summary-num{{display:inline-block;background:{region_color};color:#fff;width:28px;height:28px;border-radius:50%;text-align:center;line-height:28px;font-size:13px;font-weight:700;margin-right:8px}}
.summary-tag{{display:inline-block;background:#eef2ff;color:#2c5282;padding:2px 8px;border-radius:4px;font-size:12px;margin-right:6px}}
.summary-card p{{font-size:13px;color:#444;margin-top:8px}}
/* 对照表格 */
.bench-table{{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;overflow:hidden;border:1px solid #e0e0e0}}
.bench-table th{{background:#2c5282;color:#fff;padding:10px 8px;font-size:13px;text-align:left}}
.bench-table td{{padding:10px 8px;font-size:13px;border-bottom:1px solid #eee}}
.bench-table tr:hover{{background:#f5f7fa}}
.badge{{padding:2px 8px;border-radius:4px;font-size:12px;color:#fff;display:inline-block}}
.badge-green{{background:#27ae60}}
.badge-yellow{{background:#f39c12}}
.badge-red{{background:#c0392b}}
/* 问题卡片 */
.problem-card{{background:#fff;border-radius:8px;padding:16px;margin-bottom:12px;border:1px solid #eee}}
.prob-header{{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}}
.severity-badge{{color:#fff;padding:2px 8px;border-radius:4px;font-size:12px}}
.stars{{color:#f1c40f;font-size:14px}}
.problem-card h4{{font-size:15px;color:#1a1a2e}}
.problem-card p{{font-size:13px;color:#555}}
.prob-data{{font-size:13px;color:#2c5282;font-weight:500;margin-top:6px}}
.source-link{{font-size:12px;color:#2c5282}}
/* 先进做法 */
.practice-card{{background:#fff;border-radius:8px;padding:18px;margin-bottom:14px;border:1px solid #e0e0e0;border-top:3px solid #2c5282}}
.practice-header{{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}}
.practice-num{{background:#2c5282;color:#fff;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px;font-size:13px;font-weight:700}}
.practice-tag{{background:#eef2ff;color:#2c5282;padding:2px 8px;border-radius:4px;font-size:12px}}
.practice-data{{font-size:13px;color:#27ae60;font-weight:600;margin-bottom:6px}}
.practice-doing{{font-size:13px;color:#444}}
.practice-gap{{background:#e8f4fd;border-left:3px solid #2c5282;padding:10px 14px;margin-top:10px;font-size:13px;color:#2c5282;border-radius:0 6px 6px 0}}
/* AI建议 */
.ai-timeline{{position:relative;padding-left:30px}}
.ai-timeline::before{{content:'';position:absolute;left:8px;top:0;bottom:0;width:3px;background:linear-gradient(180deg,{region_color},#2c5282)}}
.ai-item{{position:relative;margin-bottom:24px}}
.ai-dot{{position:absolute;left:-26px;top:6px;width:12px;height:12px;border-radius:50%;background:{region_color};border:2px solid #fff;box-shadow:0 0 0 2px {region_color}}}
.ai-content{{background:#fff;border-radius:8px;padding:16px;border:1px solid #e0e0e0}}
.ai-header{{display:flex;align-items:center;gap:8px;margin-bottom:6px}}
.ai-icon{{font-size:20px}}
.ai-meta{{font-size:12px;color:#666;margin-bottom:6px}}
.ai-content p{{font-size:13px;color:#444}}
/* 优化建议 */
.opt-item{{background:#fff;border-radius:8px;margin-bottom:10px;border:1px solid #e0e0e0;cursor:pointer;overflow:hidden;transition:box-shadow .2s}}
.opt-item:hover{{box-shadow:0 2px 8px rgba(0,0,0,.08)}}
.opt-header{{display:flex;align-items:center;gap:10px;padding:14px 16px}}
.opt-num{{background:{region_color};color:#fff;width:26px;height:26px;border-radius:50%;text-align:center;line-height:26px;font-size:13px;font-weight:700;flex-shrink:0}}
.opt-header h4{{flex:1;font-size:15px;color:#1a1a2e}}
.opt-arrow{{color:#999;font-size:12px;transition:transform .3s}}
.opt-item.active .opt-arrow{{transform:rotate(180deg)}}
.opt-body{{padding:0 16px 16px;display:none}}
.opt-body p{{font-size:13px;color:#444;margin-bottom:8px}}
.opt-resp{{font-size:13px;color:#2c5282;font-weight:500}}
.opt-body h5{{font-size:13px;color:#1a1a2e;margin:10px 0 6px}}
.opt-body ol{{padding-left:18px;font-size:13px;color:#444}}
.opt-body ol li{{margin-bottom:4px}}
.kpi-row{{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}}
.kpi-badge{{background:#eef2ff;color:#2c5282;padding:4px 10px;border-radius:4px;font-size:12px;border:1px solid #c3d5f7}}
/* 打印按钮 */
.print-btn{{position:fixed;bottom:30px;right:30px;background:{region_color};color:#fff;border:none;padding:12px 20px;border-radius:8px;cursor:pointer;font-size:14px;box-shadow:0 4px 12px rgba(0,0,0,.2);z-index:999}}
.print-btn:hover{{opacity:.9}}
/* 响应式 */
@media(max-width:768px){{
.leader-cards{{grid-template-columns:1fr}}
.summary-grid{{grid-template-columns:1fr}}
}}
@media print{{
.print-btn{{display:none}}
.container{{max-width:100%;padding:0}}
body{{background:#fff}}
.section{{page-break-inside:avoid}}
}}
</style>
</head>
<body>
<div class="container">
<div class="report-title">
<h1>{name}工作调研报告</h1>
<p class="sub">{now} ｜ 据公开资料整理</p>
</div>

<!-- 领导速览 -->
<div class="leader-section">
<h2>⚡ 领导速览</h2>
<div class="leader-cards">
<div class="leader-card"><h4>🔍 核心发现</h4><p>{leader["core_finding"]}</p></div>
<div class="leader-card"><h4>⚠️ 最大差距</h4><p>{leader["biggest_gap"]}</p></div>
<div class="leader-card"><h4>💡 首要建议</h4><p>{leader["top_suggestion"]}</p></div>
</div>
</div>

<!-- 壹·核心摘要 -->
<div class="section">
<div class="section-title">壹 · 核心摘要</div>
<div class="summary-grid">{summary_html}</div>
</div>

<!-- 贰·对照表 -->
<div class="section">
<div class="section-title">贰 · 上级精神与本地实践对照</div>
<div style="overflow-x:auto">
<table class="bench-table" id="benchmarkTable">
<thead><tr><th>指标领域</th><th>上级要求</th><th>本地现状</th><th>达标判定</th><th>本土化建议</th><th>来源</th></tr></thead>
<tbody>{bench_rows}</tbody>
</table>
</div>
</div>

<!-- 叁·问题诊断 -->
<div class="section">
<div class="section-title">叁 · 问题诊断</div>
{prob_html}
</div>

<!-- 肆·先进做法 -->
<div class="section">
<div class="section-title">肆 · 外省市先进做法与本地差距对比</div>
{adv_html}
</div>

<!-- 伍·AI赋能 -->
<div class="section">
<div class="section-title">伍 · 数智化/AI赋能专项建议</div>
<div class="ai-timeline">{ai_html}</div>
</div>

<!-- 陆·优化建议 -->
<div class="section">
<div class="section-title">陆 · 优化建议</div>
{opt_html}
</div>

<p style="text-align:center;color:#999;font-size:12px;margin-top:40px">据公开资料整理，仅供参考 ｜ {now}</p>
</div>

<button class="print-btn" onclick="window.print()">🖨️ 打印/PDF</button>

<script>
function toggleOpt(el){{
var body=el.querySelector('.opt-body');
var isActive=el.classList.contains('active');
document.querySelectorAll('.opt-item').forEach(function(item){{item.classList.remove('active');item.querySelector('.opt-body').style.display='none';}});
if(!isActive){{el.classList.add('active');body.style.display='block';}}
}}
</script>
</body>
</html>'''
    return html


# ========== 主流程 ==========
results = []
for unit in UNITS:
    area = unit["area"]
    region = unit["region"]
    keywords = unit["keywords"]
    
    content = {
        "leader": generate_leader(area, region),
        "summary": generate_summary(area, region),
        "benchmark": generate_benchmark(area, region),
        "problems": generate_problems(area, region, keywords),
        "advanced": generate_advanced(area, region),
        "ai_suggestions": generate_ai_suggestions(area, region, keywords),
        "optimization": generate_optimization(area, region, keywords),
    }
    
    html = generate_html(unit, content)
    
    now = datetime.datetime.now()
    fname = f"{unit['short']}{now.strftime('%Y%m%d%H%M')}.html"
    fpath = os.path.join(OUTPUT_DIR, fname)
    
    with open(fpath, 'w', encoding='utf-8') as f:
        f.write(html)
    
    results.append({
        "id": unit["id"],
        "name": unit["name"],
        "file": fname,
        "intranet": f"http://192.168.99.133:5678/{fname}",
        "internet": f"https://ziyuan.cdlhyj.com/{fname}"
    })
    print(f"✅ [{unit['id']}] {unit['name']} → {fname}")

print("\n" + "="*60)
print("全部报告生成完成！")
print("="*60)
for r in results:
    print(f"{r['id']:2d}. {r['name']}")
    print(f"    内网: {r['intranet']}")
    print(f"    外网: {r['internet']}")
