package com.ruoyi.oa.utils;

import com.ruoyi.oa.domain.dto.NodeDTO;

import java.util.Arrays;
import java.util.List;

/**
 * 表格数据常量：存储所有需要插入的节点数据（不同表格对应不同的方法）
 */
public class TableDataConstantUtil {

    /**
     * 自动化设计表格数据
     * 包含tab节点、一级节点、二级节点、规范说明
     */
    //自动化表格模板
    public static List<NodeDTO> getAutomationTableData() {
        return Arrays.asList(
                //自动化设计表
                // 技术审查阶段
                createNode(
                        "自动化设计",          // tab节点
                        "一、技术审查",            // 一级节点
                        "接地系统图",          // 二级节点
                        null,  // 规范说明,
                        1
                ),
                createNode(
                        "自动化设计",
                        "一、技术审查",
                        "传动单线图",
                        null,
                        3
                ),
                createNode(
                        "自动化设计",
                        "一、技术审查",
                        "MCC单线图",
                        null,
                        5
                ),
                createNode(
                        "自动化设计",
                        "一、技术审查",
                        "变压器清单",
                        null,
                        7
                ),
                createNode(
                        "自动化设计",
                        "一、技术审查",
                        "电气室布置图",
                        null,
                        9
                ),

                // 自动化设计阶段
                createNode(
                        "自动化设计",
                        "一、技术审查",
                        "操作台面板布置图",
                        null,
                        11
                ),
                createNode(
                        "自动化设计",
                        "二、自动化设计",
                        "马达元器件检测清单",
                        null,
                        13
                ),
                createNode(
                        "自动化设计",
                        "二、自动化设计",
                        "自动化网络配置图",
                        null,
                        15
                ),
                createNode(
                        "自动化设计",
                        "二、自动化设计",
                        "图纸详细设计完成",
                        null,
                        17
                ),

                //程序设计提资完成
                createNode(
                        "自动化设计",
                        "三、程序开发",
                        "功能说明书",
                        null,
                        19
                ),
                createNode(
                        "自动化设计",
                        "三、程序开发",
                        "程序设计",
                        null,
                        21
                ),
                createNode(
                        "自动化设计",
                        "三、程序开发",
                        "程序仿真",
                        null,
                        23
                ),
                createNode(
                        "自动化设计",
                        "三、程序开发",
                        "程序在线测试",
                        null,
                        25
                ),
                createNode(
                        "自动化设计",
                        "三、程序开发",
                        "画面设计",
                        null,
                        27
                ),

                //现场调试
                createNode(
                        "自动化设计",
                        "四、现场调试",
                        "单动",
                        null,
                        29
                ),
                createNode(
                        "自动化设计",
                        "四、现场调试",
                        "传动优化",
                        null,
                        31
                ),
                createNode(
                        "自动化设计",
                        "四、现场调试",
                        "联动",
                        null,
                        33
                ),

                //考核验证通过
                createNode(
                        "自动化设计",
                        "五、项目收尾",
                        null,
                        null,
                        35
                ),

                //采购,库房表
                // 一、一次配线 阶段
                createNode(
                        "采购、库房",
                        "一、一次配线",
                        "采购审核",
                        "接收由项目部或技术部发出的、经过审核的《物料清单（BOM）》及技术规范，并对其进行采购可行性（品牌、货期、替代品、成本）评审。",
                        37
                ),
                createNode(
                        "采购、库房",
                        "一、一次配线",
                        "采购计划与询价、定标",
                        "根据项目计划制定《采购作业计划》，向合格供应商进行询价、比价、议价，并最终确定供应商，提交审批。",
                        39
                ),
                createNode(
                        "采购、库房",
                        "一、一次配线",
                        "采购订单下达与合同签订",
                        "向选定的供应商下达正式《采购订单》或签订《采购合同》，明确物料规格、数量、价格、交期、付款方式、验收标准等所有细节。",
                        41
                ),
                createNode(
                        "采购、库房",
                        "一、一次配线",
                        "采购过程跟催与交期确认",
                        "主动、定期地与供应商沟通，跟踪生产/备货进度，确认并确保物料能按承诺日期送达。这是应对长周期物料和避免延期的最关键节点。",
                        43
                ),
                createNode(
                        "采购、库房",
                        "一、一次配线",
                        "到货报验与问题处理",
                        "物料到达后，采购员协同库房、质检员（IQC）对物料进行数量、外观、型号规格的初步核对，并处理任何与订单不符的问题（如数量短缺、型号错误、损坏等）。",
                        45
                ),

                // 二、库房管理节点 阶段
                createNode(
                        "采购、库房",
                        "二、库房管理节点",
                        "进货检验（IQC）",
                        "质检人员根据检验标准和物料清单，对送达的物料进行质量检验，包括功能测试、电气参数测量、证件核查等。",
                        47
                ),
                createNode(
                        "采购、库房",
                        "二、库房管理节点",
                        "物料入库与上架",
                        "对通过IQC检验的合格物料，办理正式入库手续，包括系统数据录入、贴码、分类，并放置到指定货位。",
                        49
                ),
                createNode(
                        "采购、库房",
                        "二、库房管理节点",
                        "生产领料与发料（齐套性检查）",
                        "根据生产任务单和BOM，为车间准备所需物料。关键环节是进行“齐套性检查”，即确认一个订单所需的所有物料是否均已备齐，避免生产线因缺料停滞。",
                        51
                ),
                createNode(
                        "采购、库房",
                        "二、库房管理节点",
                        "库存盘点与预警",
                        "定期（如月度、季度）\n" +
                                "对在库物料进行全面盘点，\n" +
                                "确保账、物、卡一致。\n" +
                                "同时对关键物料设置最低库存预警，触发补货机制。\n",
                        53
                ),

                //车间设计制造表
                // 一、一次线装配 阶段
                createNode(
                        "车间设计制造",
                        "一、一次线装配",
                        "图纸审核",
                        null,
                        55
                ),
                createNode(
                        "车间设计制造",
                        "一、一次线装配",
                        "安装导轨/安装梁",
                        "根据布局图安装",
                        57
                ),
                createNode(
                        "车间设计制造",
                        "一、一次线装配",
                        "安装元器件",
                        "安装断路器、接触器、变频器等一次元件。",
                        59
                ),
                createNode(
                        "车间设计制造",
                        "一、一次线装配",
                        "母排加工与安装",
                        "制作并安装铜排或铝排，连接处需搪锡或镀银处理。",
                        61
                ),
                createNode(
                        "车间设计制造",
                        "一、一次线装配",
                        "一次线接线",
                        "使用规定颜色的线缆（通常为黑、棕、灰）连接主回路。",
                        63
                ),

                // 二、二次线装配 阶段
                createNode(
                        "车间设计制造",
                        "二、二次线装配",
                        "安装端子排、线槽、继电器等二次元件。",
                        null,
                        65
                ),
                createNode(
                        "车间设计制造",
                        "二、二次线装配",
                        "下线与套标",
                        "根据接线图，使用不同颜色的导线（通常为蓝、黄绿、红等）进行测量、裁剪、压接端子并套上打印好的线号管。",
                        67
                ),
                createNode(
                        "车间设计制造",
                        "二、二次线装配",
                        "布线与接线",
                        "将线缆整齐地放入线槽，按照图纸接到对应的端子和元件上。要求横平竖直，牢固可靠。",
                        69
                ),

                // 三、调试、检验与包装发货 阶段
                createNode(
                        "车间设计制造",
                        "三、调试、检验与包装发货",
                        "接线检查",
                        "对照图纸，进行100%的接线正确性检查。",
                        71
                ),
                createNode(
                        "车间设计制造",
                        "三、调试、检验与包装发货",
                        "接地连续性测试",
                        "确保所有接地连接可靠。",
                        73
                ),
                createNode(
                        "车间设计制造",
                        "三、调试、检验与包装发货",
                        "绝缘电阻测试",
                        "使用兆欧表测量相间、相对地的绝缘电阻，确保符合标准（通常>1MΩ）。",
                        75
                ),
                createNode(
                        "车间设计制造",
                        "三、调试、检验与包装发货",
                        "耐压测试",
                        "施加高于额定电压的测试电压，持续一定时间，检测是否存在绝缘击穿风险。",
                        77
                ),
                createNode(
                        "车间设计制造",
                        "三、调试、检验与包装发货",
                        "功能模拟调试",
                        "在不接通主电源的情况下，通过外部电源模拟信号，测试控制回路的逻辑是否正确。然后接通主电源，进行空载和带载运行测试。",
                        79
                ),

                // 四、清理与包装 阶段
                createNode(
                        "车间设计制造",
                        "四、清理与包装",
                        "清理柜内灰尘、线头等。",
                        null,
                        81
                ),
                createNode(
                        "车间设计制造",
                        "四、清理与包装",
                        "张贴铭牌、警告标识、一次系统图等。",
                        null,
                        83
                ),
                createNode(
                        "车间设计制造",
                        "四、清理与包装",
                        "使用塑料膜、气泡袋、护角、木箱等对产品进行防护包装，防止运输途中损坏。",
                        null,
                        85
                ),

                // 五、文件整理与发货 阶段
                createNode(
                        "车间设计制造",
                        "五、文件整理与发货",
                        "整理随柜文件，通常包括：合格证、出厂检验报告、电气原理图、接线图、元器件说明书等。",
                        null,
                        87
                ),
                createNode(
                        "车间设计制造",
                        "五、文件整理与发货",
                        "安排物流，准时发货给客户。",
                        null,
                        89
                ),

                //现场实施设计表
                // 四、现场调试 阶段
                createNode(
                        "现场实施设计",
                        "一、现场调试",
                        "接地测试",
                        "条件：在计划时间点前完成测试，接地电阻值完全符合设计要求（通常≤1Ω或按图纸规定），测试报告（含现场照片、测试仪读数、测试人、时间地点）清晰、规范、完整，并准时上传至公司项目管理平台。\n" +
                                "主动发现并解决问题：测试结果初次不合格，但团队能主动、快速地分析原因（如土壤问题、连接点腐蚀等），提出整改方案并实施，最终使电阻值达标。此举避免了项目后期更大的延误和成本。\n" +
                                "提供优化建议：在测试过程中，发现了设计图中未考虑到的接地隐患，或提出了被采纳的接地系统优化建议，提升了整体安全性",
                        91
                ),
                createNode(
                        "现场实施设计",
                        "一、现场调试",
                        "现场接线安装及规范",
                        "核心目标： 所有电气接线工作100%符合图纸与规范，布线整齐、标识清晰、现场安全整洁，为后续调试奠定坚实的硬件基础，实现“零隐患”移交。\n" +
                                "考核维度： 正确性、规范性、安全性、进度。",
                        93
                ),
                createNode(
                        "现场实施设计",
                        "一、现场调试",
                        "PLC打点",
                        "核心目标： 高效、准确地验证并确认PLC的每一个输入/输出（I/O）点与现场对应的传感器、执行器动作完全一致，确保硬件层与软件层信号通道100%正确、可靠。\n" +
                                "考核维度： 准确性、完整性、效率、文档记录。",
                        95
                ),
                createNode(
                        "现场实施设计",
                        "一、现场调试",
                        "传动优化",
                        "核心目标： 通过参数整定、特性调试，使所有传动设备（如变频器、伺服驱动器、直流调速器等）的输出特性完全满足甚至超越工艺要求，确保系统运行平稳、高效、可靠。\n" +
                                "考核维度： 性能指标、稳定性、效率、技术创新",
                        97
                ),
                createNode(
                        "现场实施设计",
                        "一、现场调试",
                        "联动调试",
                        "核心目标： 在“单动”和“传动优化”完成的基础上，使整个自动化系统按预设的工艺流程、联锁逻辑和安全策略，自动、稳定、可靠地连续运行，实现项目的最终功能。\n" +
                                "考核维度： 系统稳定性、逻辑正确性、故障率、团队协作、最终用户满意度",
                        99
                ),

                // 五、项目收尾 阶段
                createNode(
                        "现场实施设计",
                        "二、项目收尾",
                        "收尾",
                        "核心目标： 成功通过客户或最终用户的正式验收，所有技术指标、性能要求和文档资料均满足合同要求，项目正式移交，并取得关键的验收证明文件。\n" +
                                "考核维度： 客户满意度、验收一次性通过率、文档完整性、项目尾款触发",
                        101
                )

        );
    }

    //软件表格模板
    public static List<NodeDTO> getSoftwareTableData() {
        return Arrays.asList(
                createNode(
                        "需求分析",
                        "需求调研",
                        "用户访谈、业务场景梳理、现有系统调研",
                        "主要是与高总进行内容确认包括不限于：运营流程梳理、人员招募培训、信息系统开发、信息系统优化、独立站建设、独立站内容撰写、相关设施采购。",
                        1
                ),
                createNode(
                        "需求分析",
                        "需求梳理",
                        "功能需求清单编写",
                        "已完成初步系统开发、独立站建设摸索、初步团队建设及培训。后续进度依据实际情况进行推进。",
                        3
                ),
                createNode(
                        "需求分析",
                        "需求评审",
                        "内部评审（团队对齐）、外部评审（客户 / 用户确认）、需求文档定稿（PRD）",
                        null,
                        5
                ),
                createNode(
                        "设计阶段",
                        "架构设计",
                        "技术架构选型、系统交互流程图设计、核心模块划分",
                        null,
                        7
                ),
                createNode(
                        "设计阶段",
                        "数据库设计",
                        "数据模型设计（ER 图）、表结构定义、索引设计",
                        "要求留存全部库表，库表说明详尽。",
                        9
                ),
                createNode(
                        "设计阶段",
                        "界面与交互设计",
                        "UI 设计（原型图 / 视觉稿）、交互逻辑设计、前端页面结构规划",
                        "要求典型设计进行留存记录。",
                        11
                ),
                createNode(
                        "开发阶段",
                        "前端开发",
                        "技术选型（框架 / 库）、开发环境搭建、页面开发、前端逻辑实现",
                        "全部代码留存。",
                        13
                ),
                createNode(
                        "开发阶段",
                        "后端开发",
                        "技术栈确定（语言 / 框架）、开发环境搭建、核心业务逻辑开发、数据库交互实现、接口开发",
                        "全部代码留存。",
                        15
                ),
                createNode(
                        "开发阶段",
                        "移动端开发",
                        "原生 / 跨平台技术选型、开发环境配置、页面开发、原生功能集成（相机 / 定位等）、接口联调",
                        null,
                        17
                ),
                createNode(
                        "测试阶段",
                        "功能测试",
                        "单元测试验证、集成测试（模块间交互）、系统测试（全流程功能）、回归测试（Bug 修复后）",
                        "要求出具测试报告，严格遵循公司标准。",
                        19
                ),
                createNode(
                        "部署上线",
                        "环境准备",
                        "生产环境配置（服务器 / 数据库 / 中间件）、配置文件梳理、安全合规检查（权限 / 加密等）",
                        "要求出具项目技术收口报告，严格遵循公司标准。",
                        21
                ),
                createNode(
                        "部署上线",
                        "部署执行",
                        "部署脚本编写、版本打包与发布、灰度发布策略（若需）、监控工具部署（日志 / 告警）",
                        "要求出具使用说明书，严格遵循公司标准。",
                        23
                ),
                createNode(
                        "部署上线",
                        "上线验证",
                        "功能冒烟测试、数据一致性校验、性能监控（首小时 / 首日）、回滚方案准备",
                        "与客户确认技术成果，完成项目收口。",
                        25
                )
        );
    }

//    /**
//     * 示例2：机械设计表格数据（另一组不同的节点）
//     */
//    public static List<NodeDTO> getMechanicalDesignTableData() {
//        return Arrays.asList(
//            createNode(
//                "机械设计",
//                "方案设计",
//                "初步结构图",
//                "需包含关键尺寸及材料选型"
//            ),
//            createNode(
//                "机械设计",
//                "详细设计",
//                "零件加工图",
//                "需标注公差等级及表面处理要求"
//            )
//        );
//    }

    /**
     * 工具方法：快速创建NodeDTO对象
     * 步骤名称默认使用二级节点名称（确保非空）
     */
    private static NodeDTO createNode(String tabNode, String firstLevel, String secondLevel, String specification, Integer sortNum) {
        NodeDTO node = new NodeDTO();
        node.setTabNode(tabNode);
        node.setFirstLevelNode(firstLevel);
        node.setSecondLevelNode(secondLevel);
        node.setSpecification(specification);
        node.setSortNum(sortNum); // 默认顺序号为0，可根据需要调整
        node.setStepName(secondLevel); // 步骤名=二级节点名（满足非空约束）
        return node;
    }


}