2026-06-03 c7d92d01b02f6b26b17dc77b217f0ffe39615ebe
feat(staff): 修改员工入职服务接口增加用户添加标识参数

- 在IStaffOnJobService接口的add方法中增加isAddUser参数
- 修改StaffOnJobServiceImpl实现类中的add方法逻辑,根据isAddUser参数控制员工编号重复时的行为
- 更新StaffOnJobController中调用add方法时传入true参数
- 在批量导入员工时循环处理每个员工记录并设置合同年限计算逻辑
- 批量导入时调用add方法传入false参数以避免重复检查异常
已添加12个文件
5189 ■■■■■ 文件已修改
src/main/java/com/ruoyi/util/ProjectPlanDocGenerator.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/RequirementDocGenerator.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/ServerOpsDocGenerator.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/SystemDesignDocGenerator.java 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/TechDevDocGenerator.java 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/TestReportDocGenerator.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/技术软件开发文档.xml 1398 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/服务器运维记录.xml 702 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/测试报告.xml 553 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/系统设计说明书.xml 602 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/需求说明书.xml 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/项目计划书.xml 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/util/ProjectPlanDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class ProjectPlanDocGenerator {
    public static void main(String[] args) throws Exception {
        // ç”Ÿæˆé¡¹ç›®è®¡åˆ’文档
        generateProjectPlan();
    }
    public static void generateProjectPlan() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(ProjectPlanDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        // å‡†å¤‡æ•°æ®
        Map<String, Object> data = new HashMap<>();
        // é¡¹ç›®åŸºæœ¬ä¿¡æ¯
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // é‡Œç¨‹ç¢‘列表
        List<Map<String, String>> milestones = new ArrayList<>();
        milestones.add(createMilestone("M1", "需求分析", "业务调研、需求文档编写", "第1-2周", "需求规格说明书"));
        milestones.add(createMilestone("M2", "系统设计", "架构设计、数据库设计、接口设计", "第3-4周", "设计文档、数据库脚本"));
        milestones.add(createMilestone("M3", "基础模块", "用户权限、部门岗位、系统配置", "第5-6周", "基础模块可运行版本"));
        milestones.add(createMilestone("M4", "库存管理", "入库、出库、库存盘点、批号管理", "第7-9周", "库存模块可运行版本"));
        milestones.add(createMilestone("M5", "采购销售", "采购台账、销售报价、发货管理", "第10-12周", "采购销售模块"));
        milestones.add(createMilestone("M6", "质检设备", "质量检验、设备保养、计量器具", "第13-15周", "质检设备模块"));
        milestones.add(createMilestone("M7", "人事协同", "员工管理、合同管理、审批流程", "第16-18周", "人事协同模块"));
        milestones.add(createMilestone("M8", "系统集成", "模块联调、接口对接、数据迁移", "第19-20周", "集成测试报告"));
        milestones.add(createMilestone("M9", "上线部署", "生产环境部署、用户培训", "第21-22周", "正式上线运行"));
        data.put("milestones", milestones);
        // äººå‘˜å®‰æŽ’
        List<Map<String, String>> team = new ArrayList<>();
        team.add(createTeamMember("项目经理", "å¼ XX", "项目统筹、进度把控、风险管理"));
        team.add(createTeamMember("产品经理", "李XX", "需求梳理、原型设计、验收测试"));
        team.add(createTeamMember("后端开发", "王XX", "后端架构、核心模块开发"));
        team.add(createTeamMember("后端开发", "èµµXX", "业务模块开发、接口对接"));
        team.add(createTeamMember("前端开发", "陈XX", "前端页面、交互实现"));
        team.add(createTeamMember("测试工程师", "刘XX", "测试用例、功能测试、回归测试"));
        team.add(createTeamMember("运维工程师", "周XX", "环境部署、服务器维护"));
        data.put("team", team);
        // è¯„审结论
        List<Map<String, String>> reviewResults = new ArrayList<>();
        reviewResults.add(createReviewResult("需求完整性", "通过", "核心功能已明确"));
        reviewResults.add(createReviewResult("技术可行性", "通过", "技术栈成熟稳定"));
        reviewResults.add(createReviewResult("进度合理性", "通过", "里程碑划分清晰"));
        reviewResults.add(createReviewResult("资源配置", "通过", "人员分工明确"));
        data.put("reviewResults", reviewResults);
        // å¾…办事项
        List<Map<String, String>> actionItems = new ArrayList<>();
        actionItems.add(createActionItem("1", "完善采购模块审批流程", "王XX", "X月X日"));
        actionItems.add(createActionItem("2", "确认库存预警阈值配置", "李XX", "X月X日"));
        actionItems.add(createActionItem("3", "补充设备保养定时任务需求", "èµµXX", "X月X日"));
        data.put("actionItems", actionItems);
        // åŠ è½½æ¨¡æ¿å¹¶ç”Ÿæˆ
        Template template = cfg.getTemplate("项目计划书.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        // ä¿å­˜ä¸ºdocx
        String outputPath = "D:/牛马/文档/project_plan.docx";
        File outputFile = new File(outputPath);
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("文档生成成功: " + outputPath);
    }
    private static Map<String, String> createMilestone(String id, String name, String content, String time, String deliverable) {
        Map<String, String> map = new HashMap<>();
        map.put("id", id);
        map.put("name", name);
        map.put("content", content);
        map.put("time", time);
        map.put("deliverable", deliverable);
        return map;
    }
    private static Map<String, String> createTeamMember(String role, String name, String duty) {
        Map<String, String> map = new HashMap<>();
        map.put("role", role);
        map.put("name", name);
        map.put("duty", duty);
        return map;
    }
    private static Map<String, String> createReviewResult(String item, String result, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("item", item);
        map.put("result", result);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("content", content);
        map.put("owner", owner);
        map.put("deadline", deadline);
        return map;
    }
}
src/main/java/com/ruoyi/util/RequirementDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class RequirementDocGenerator {
    public static void main(String[] args) throws Exception {
        generateRequirementDoc();
    }
    public static void generateRequirementDoc() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(RequirementDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Map<String, Object> data = new HashMap<>();
        // é¡¹ç›®åŸºæœ¬ä¿¡æ¯
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // åº“存管理功能
        List<Map<String, String>> inventoryFeatures = new ArrayList<>();
        inventoryFeatures.add(createFeature("INV-001", "入库管理", "支持采购入库、生产入库、退货入库等多种入库方式,自动生成入库单号,支持批号管理"));
        inventoryFeatures.add(createFeature("INV-002", "出库管理", "支持销售出库、生产领料、调拨出库等,支持先进先出、批次出库策略"));
        inventoryFeatures.add(createFeature("INV-003", "库存盘点", "支持定期盘点、动态盘点,自动生成盘点差异报告"));
        inventoryFeatures.add(createFeature("INV-004", "库存预警", "支持库存上下限预警、效期预警、呆滞库存预警"));
        inventoryFeatures.add(createFeature("INV-005", "库存查询", "支持多维度库存查询,实时库存、历史库存、批次库存"));
        data.put("inventoryFeatures", inventoryFeatures);
        // é‡‡è´­é”€å”®åŠŸèƒ½
        List<Map<String, String>> purchaseFeatures = new ArrayList<>();
        purchaseFeatures.add(createFeature("PUR-001", "采购台账", "采购申请、询价比价、采购订单、到货验收全流程管理"));
        purchaseFeatures.add(createFeature("PUR-002", "供应商管理", "供应商档案、资质管理、评估考核"));
        purchaseFeatures.add(createFeature("PUR-003", "销售报价", "客户管理、报价单、销售订单管理"));
        purchaseFeatures.add(createFeature("PUR-004", "发货管理", "发货单、物流跟踪、签收确认"));
        purchaseFeatures.add(createFeature("PUR-005", "售后管理", "退换货处理、售后服务记录"));
        data.put("purchaseFeatures", purchaseFeatures);
        // è´¨æ£€è®¾å¤‡åŠŸèƒ½
        List<Map<String, String>> qualityFeatures = new ArrayList<>();
        qualityFeatures.add(createFeature("QA-001", "质量检验", "来料检验、过程检验、成品检验,支持检验项目配置"));
        qualityFeatures.add(createFeature("QA-002", "不合格处理", "不合格品登记、处理流程、原因分析"));
        qualityFeatures.add(createFeature("QA-003", "设备台账", "设备档案、技术参数、附件管理"));
        qualityFeatures.add(createFeature("QA-004", "设备保养", "保养计划、保养任务、保养记录、验收确认"));
        qualityFeatures.add(createFeature("QA-005", "计量器具", "计量器具台账、检定计划、检定记录"));
        data.put("qualityFeatures", qualityFeatures);
        // äººäº‹ååŒåŠŸèƒ½
        List<Map<String, String>> staffFeatures = new ArrayList<>();
        staffFeatures.add(createFeature("HR-001", "员工管理", "员工档案、入职离职、合同管理"));
        staffFeatures.add(createFeature("HR-002", "考勤管理", "打卡记录、请假审批、加班管理"));
        staffFeatures.add(createFeature("HR-003", "审批流程", "自定义审批流程、待办提醒、流程追溯"));
        staffFeatures.add(createFeature("HR-004", "会议室管理", "会议室预约、会议纪要、通知公告"));
        staffFeatures.add(createFeature("HR-005", "规章制度", "制度发布、阅读确认、文件归档"));
        data.put("staffFeatures", staffFeatures);
        // AI智能化功能
        List<Map<String, String>> aiFeatures = new ArrayList<>();
        aiFeatures.add(createFeature("AI-001", "智能客服", "基于大语言模型的智能问答,7x24小时在线服务"));
        aiFeatures.add(createFeature("AI-002", "库存预测", "基于历史数据的库存需求预测,智能补货建议"));
        aiFeatures.add(createFeature("AI-003", "销售预测", "机器学习驱动的销售趋势分析,辅助决策"));
        aiFeatures.add(createFeature("AI-004", "异常检测", "自动识别异常交易、异常库存变动"));
        aiFeatures.add(createFeature("AI-005", "智能文档", "OCR识别采购单、发货单,自动录入系统"));
        aiFeatures.add(createFeature("AI-006", "语音录入", "语音转文字,快速录入订单和库存信息"));
        data.put("aiFeatures", aiFeatures);
        // ç”¨æˆ·è§’色
        List<Map<String, String>> userRoles = new ArrayList<>();
        userRoles.add(createRole("系统管理员", "系统维护和配置", "系统配置、用户管理、权限分配"));
        userRoles.add(createRole("仓库管理员", "库存日常管理", "入库、出库、盘点、库存查询"));
        userRoles.add(createRole("采购员", "采购业务处理", "采购申请、订单管理、供应商管理"));
        userRoles.add(createRole("销售员", "销售业务处理", "报价、订单、发货、售后"));
        userRoles.add(createRole("质检员", "质量检验工作", "检验任务、检验记录、不合格处理"));
        userRoles.add(createRole("设备管理员", "设备维护管理", "设备台账、保养计划、保养执行"));
        userRoles.add(createRole("人事专员", "人事行政管理", "员工档案、考勤、审批流程"));
        data.put("userRoles", userRoles);
        // éªŒæ”¶æ ‡å‡†
        List<Map<String, String>> acceptCriteria = new ArrayList<>();
        acceptCriteria.add(createCriteria("1", "功能完整性", "所有需求功能开发完成并通过测试"));
        acceptCriteria.add(createCriteria("2", "性能达标", "响应时间、并发数满足性能需求"));
        acceptCriteria.add(createCriteria("3", "安全合规", "通过安全测试,符合数据安全规范"));
        acceptCriteria.add(createCriteria("4", "文档齐全", "用户手册、运维手册、API文档完整"));
        acceptCriteria.add(createCriteria("5", "培训完成", "完成用户培训并通过考核"));
        acceptCriteria.add(createCriteria("6", "数据迁移", "历史数据成功迁移并验证准确"));
        data.put("acceptCriteria", acceptCriteria);
        // åŠ è½½æ¨¡æ¿å¹¶ç”Ÿæˆ
        Template template = cfg.getTemplate("需求说明书.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        // ä¿å­˜ä¸ºdocx
        String outputPath = "D:/牛马/文档/需求说明书.docx";
        File outputFile = new File(outputPath);
        outputFile.getParentFile().mkdirs();
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("需求说明书生成成功: " + outputPath);
    }
    private static Map<String, String> createFeature(String id, String name, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("id", id);
        map.put("name", name);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createRole(String name, String desc, String permission) {
        Map<String, String> map = new HashMap<>();
        map.put("name", name);
        map.put("desc", desc);
        map.put("permission", permission);
        return map;
    }
    private static Map<String, String> createCriteria(String no, String item, String criteria) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("item", item);
        map.put("criteria", criteria);
        return map;
    }
}
src/main/java/com/ruoyi/util/ServerOpsDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,255 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class ServerOpsDocGenerator {
    public static void main(String[] args) throws Exception {
        generateServerOpsDoc();
    }
    public static void generateServerOpsDoc() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(ServerOpsDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Map<String, Object> data = new HashMap<>();
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // æœåŠ¡å™¨æ¸…å•
        List<Map<String, String>> servers = new ArrayList<>();
        servers.add(createServer("SVR-APP-01", "应用服务器", "192.168.1.101", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-APP-02", "应用服务器", "192.168.1.102", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-DB-01", "数据库主库", "192.168.1.201", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-DB-02", "数据库从库", "192.168.1.202", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-REDIS-01", "Redis节点1", "192.168.1.301", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-REDIS-02", "Redis节点2", "192.168.1.302", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-REDIS-03", "Redis节点3", "192.168.1.303", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "运行中"));
        servers.add(createServer("SVR-FILE-01", "文件服务器", "192.168.1.401", "4æ ¸", "8GB", "2TB HDD", "CentOS 7.9", "磁盘告警"));
        servers.add(createServer("SVR-AI-01", "AI推理服务器", "192.168.1.501", "16æ ¸", "64GB", "1TB SSD", "Ubuntu 22.04", "运行中"));
        servers.add(createServer("SVR-NGINX-01", "Nginx代理", "192.168.1.11", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9", "运行中"));
        data.put("servers", servers);
        // è¿ç»´è¿›åº¦è·Ÿè¸ª
        List<Map<String, String>> progress = new ArrayList<>();
        progress.add(createProgress("2026-05-20", "服务器初始环境配置", "安装JDK25、Nginx、Docker", "100%", ""));
        progress.add(createProgress("2026-05-21", "数据库主从搭建", "MySQL8.0主从复制配置", "100%", ""));
        progress.add(createProgress("2026-05-22", "Redis集群部署", "3节点哨兵模式部署", "100%", ""));
        progress.add(createProgress("2026-05-23", "应用服务部署", "SpringBoot应用双节点部署", "100%", ""));
        progress.add(createProgress("2026-05-24", "SSL证书配置", "Nginx HTTPS配置", "100%", ""));
        progress.add(createProgress("2026-05-25", "监控系统搭建", "Prometheus+Grafana部署", "90%", "告警规则待完善"));
        progress.add(createProgress("2026-05-26", "日志收集系统", "ELK日志平台搭建", "80%", "Kibana仪表盘待配置"));
        progress.add(createProgress("2026-05-27", "备份策略配置", "数据库自动备份脚本配置", "100%", ""));
        progress.add(createProgress("2026-05-28", "安全加固", "防火墙规则、SSH加固", "85%", "端口扫描待完成"));
        progress.add(createProgress("2026-05-29", "压力测试", "JMeter性能压测", "100%", "并发指标达标"));
        progress.add(createProgress("2026-05-30", "灾备演练", "数据库主从切换演练", "100%", "切换时间30秒内"));
        data.put("progress", progress);
        // æœåŠ¡å™¨å·¡æ£€è®°å½•
        List<Map<String, String>> inspections = new ArrayList<>();
        inspections.add(createInspection("2026-05-20", "SVR-APP-01", "CPU 35%, å†…å­˜ 52%, ç£ç›˜ 40%", "正常", ""));
        inspections.add(createInspection("2026-05-20", "SVR-APP-02", "CPU 30%, å†…å­˜ 48%, ç£ç›˜ 38%", "正常", ""));
        inspections.add(createInspection("2026-05-20", "SVR-DB-01", "CPU 45%, å†…å­˜ 68%, ç£ç›˜ 55%", "正常", ""));
        inspections.add(createInspection("2026-05-20", "SVR-DB-02", "CPU 20%, å†…å­˜ 60%, ç£ç›˜ 52%", "正常", ""));
        inspections.add(createInspection("2026-05-20", "SVR-REDIS-01", "CPU 15%, å†…å­˜ 40%, ç£ç›˜ 25%", "正常", ""));
        inspections.add(createInspection("2026-05-25", "SVR-APP-01", "CPU 42%, å†…å­˜ 58%, ç£ç›˜ 43%", "正常", ""));
        inspections.add(createInspection("2026-05-25", "SVR-DB-01", "CPU 55%, å†…å­˜ 72%, ç£ç›˜ 60%", "关注", "内存使用率偏高,建议关注"));
        inspections.add(createInspection("2026-05-25", "SVR-FILE-01", "CPU 20%, å†…å­˜ 35%, ç£ç›˜ 85%", "告警", "磁盘使用率达85%,需扩容"));
        inspections.add(createInspection("2026-05-30", "SVR-APP-01", "CPU 38%, å†…å­˜ 55%, ç£ç›˜ 45%", "正常", ""));
        inspections.add(createInspection("2026-05-30", "SVR-DB-01", "CPU 48%, å†…å­˜ 70%, ç£ç›˜ 58%", "正常", "内存已优化"));
        inspections.add(createInspection("2026-05-30", "SVR-FILE-01", "CPU 18%, å†…å­˜ 32%, ç£ç›˜ 88%", "告警", "磁盘持续增长,需尽快扩容"));
        inspections.add(createInspection("2026-05-30", "SVR-AI-01", "CPU 65%, å†…å­˜ 78%, ç£ç›˜ 45%", "关注", "GPU使用率正常,CPU负载偏高"));
        data.put("inspections", inspections);
        // æ•°æ®åº“备份记录
        List<Map<String, String>> backups = new ArrayList<>();
        backups.add(createBackup("2026-05-20", "全量备份", "product_inventory", "5.2GB", "成功", "02:00", "02:15"));
        backups.add(createBackup("2026-05-21", "增量备份", "product_inventory", "380MB", "成功", "02:00", "02:08"));
        backups.add(createBackup("2026-05-22", "增量备份", "product_inventory", "420MB", "成功", "02:00", "02:09"));
        backups.add(createBackup("2026-05-23", "全量备份", "product_inventory", "5.5GB", "成功", "02:00", "02:20"));
        backups.add(createBackup("2026-05-24", "增量备份", "product_inventory", "350MB", "成功", "02:00", "02:07"));
        backups.add(createBackup("2026-05-25", "增量备份", "product_inventory", "400MB", "成功", "02:00", "02:08"));
        backups.add(createBackup("2026-05-26", "增量备份", "product_inventory", "390MB", "失败", "02:00", "02:03"));
        backups.add(createBackup("2026-05-26", "增量备份", "product_inventory", "395MB", "成功", "03:00", "03:08"));
        backups.add(createBackup("2026-05-27", "全量备份", "product_inventory", "5.8GB", "成功", "02:00", "02:22"));
        backups.add(createBackup("2026-05-28", "增量备份", "product_inventory", "410MB", "成功", "02:00", "02:09"));
        data.put("backups", backups);
        // æ•…éšœ/事件记录
        List<Map<String, String>> incidents = new ArrayList<>();
        incidents.add(createIncident("INC-001", "2026-05-22 14:30", "SVR-DB-01", "MySQL连接数异常升高", "连接池泄漏", "调整连接池参数,重启服务", "2026-05-22 15:10", "已解决", "周XX"));
        incidents.add(createIncident("INC-002", "2026-05-24 09:15", "SVR-APP-01", "应用响应超时", "线程池耗尽", "扩大线程池,增加超时时间", "2026-05-24 09:50", "已解决", "周XX"));
        incidents.add(createIncident("INC-003", "2026-05-26 02:03", "SVR-DB-01", "数据库备份失败", "磁盘空间不足", "清理归档日志,释放空间", "2026-05-26 03:00", "已解决", "周XX"));
        incidents.add(createIncident("INC-004", "2026-05-28 11:20", "SVR-REDIS-02", "Redis哨兵切换异常", "网络抖动导致误判", "排查网络,调整哨兵超时参数", "2026-05-28 11:50", "已解决", "周XX"));
        incidents.add(createIncident("INC-005", "2026-05-30 08:45", "SVR-FILE-01", "磁盘使用率超85%", "日志文件未轮转", "启用日志轮转,清理旧日志", "2026-05-30 09:30", "处理中", "周XX"));
        incidents.add(createIncident("INC-006", "2026-05-30 16:00", "SVR-AI-01", "GPU驱动异常导致推理失败", "驱动版本不兼容", "回滚GPU驱动版本", "2026-05-30 17:30", "已解决", "孙XX"));
        data.put("incidents", incidents);
        // è¡¥ä¸/更新记录
        List<Map<String, String>> patches = new ArrayList<>();
        patches.add(createPatch("2026-05-20", "SVR-APP-01/02", "JDK 25.0.1 å®‰å…¨æ›´æ–°", "安全补丁", "成功", ""));
        patches.add(createPatch("2026-05-22", "全部服务器", "OpenSSL 3.0.15 å‡çº§", "安全补丁", "成功", "修复高危漏洞CVE-2026-XXXX"));
        patches.add(createPatch("2026-05-24", "SVR-NGINX-01", "Nginx 1.26.2 ç‰ˆæœ¬å‡çº§", "版本升级", "成功", ""));
        patches.add(createPatch("2026-05-26", "SVR-DB-01/02", "MySQL 8.0.38 è¡¥ä¸æ›´æ–°", "安全补丁", "成功", "先升级从库,验证后切换升级主库"));
        patches.add(createPatch("2026-05-28", "SVR-AI-01", "CUDA Toolkit 12.6 æ›´æ–°", "版本升级", "成功", ""));
        patches.add(createPatch("2026-05-30", "全部服务器", "系统内核安全更新", "安全补丁", "进行中", "需逐台重启,正在分批执行"));
        data.put("patches", patches);
        // å˜æ›´è®°å½•
        List<Map<String, String>> changes = new ArrayList<>();
        changes.add(createChange("CHG-001", "2026-05-22", "数据库连接池参数调整", "SVR-DB-01", "连接数50到100", "周XX", "已完成", ""));
        changes.add(createChange("CHG-002", "2026-05-23", "Nginx新增负载均衡规则", "SVR-NGINX-01", "增加A/B测试路由", "周XX", "已完成", ""));
        changes.add(createChange("CHG-003", "2026-05-25", "Redis内存策略调整", "SVR-REDIS-01/02/03", "maxmemory从4G调整为6G", "周XX", "已完成", ""));
        changes.add(createChange("CHG-004", "2026-05-27", "数据库备份策略调整", "SVR-DB-01", "从每日全量改为周三六全量+日增量", "周XX", "已完成", ""));
        changes.add(createChange("CHG-005", "2026-05-29", "应用JVM参数优化", "SVR-APP-01/02", "堆内存8G到12G,GC策略调整", "王XX", "已完成", ""));
        data.put("changes", changes);
        // å¾…办事项
        List<Map<String, String>> actionItems = new ArrayList<>();
        actionItems.add(createActionItem("1", "SVR-FILE-01磁盘扩容至4TB", "周XX", "2026-06-05"));
        actionItems.add(createActionItem("2", "完成ELK日志平台Kibana仪表盘配置", "周XX", "2026-06-03"));
        actionItems.add(createActionItem("3", "完善Prometheus告警规则", "周XX", "2026-06-04"));
        actionItems.add(createActionItem("4", "完成全部服务器内核安全更新", "周XX", "2026-06-02"));
        actionItems.add(createActionItem("5", "编写运维手册和应急预案", "周XX", "2026-06-10"));
        actionItems.add(createActionItem("6", "配置异地备份同步任务", "周XX", "2026-06-08"));
        data.put("actionItems", actionItems);
        // è¿ç»´ç»Ÿè®¡
        data.put("serverCount", "10");
        data.put("runningCount", "8");
        data.put("alertCount", "2");
        data.put("uptimeRate", "99.95%");
        data.put("totalInspections", "12");
        data.put("totalBackups", "10");
        data.put("backupSuccessRate", "90%");
        data.put("totalIncidents", "6");
        data.put("solvedIncidents", "5");
        data.put("totalPatches", "6");
        data.put("completedPatches", "5");
        // è¿ç»´ç»“论
        data.put("opsConclusion", "整体运维状况良好,服务器可用率达到99.95%。SVR-FILE-01磁盘告警需尽快处理,已完成日志轮转缓解压力,仍需扩容。备份策略已优化,26日备份失败已处理。安全补丁分批执行中,预计6月2日前全部完成。");
        data.put("riskWarning", "磁盘告警(SVR-FILE-01)、内存偏高(SVR-DB-01)、内核补丁待完成(3台)");
        Template template = cfg.getTemplate("服务器运维记录.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        String outputPath = "D:/牛马/文档/服务器运维记录.docx";
        File outputFile = new File(outputPath);
        outputFile.getParentFile().mkdirs();
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("服务器运维记录生成成功: " + outputPath);
    }
    private static Map<String, String> createServer(String id, String type, String ip, String cpu,
                                                     String memory, String disk, String os, String status) {
        Map<String, String> map = new HashMap<>();
        map.put("id", id);
        map.put("type", type);
        map.put("ip", ip);
        map.put("cpu", cpu);
        map.put("memory", memory);
        map.put("disk", disk);
        map.put("os", os);
        map.put("status", status);
        return map;
    }
    private static Map<String, String> createProgress(String date, String task, String content, String rate, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("task", task);
        map.put("content", content);
        map.put("rate", rate);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createInspection(String date, String server, String metrics, String result, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("server", server);
        map.put("metrics", metrics);
        map.put("result", result);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createBackup(String date, String type, String database, String size,
                                                     String status, String startTime, String endTime) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("type", type);
        map.put("database", database);
        map.put("size", size);
        map.put("status", status);
        map.put("startTime", startTime);
        map.put("endTime", endTime);
        return map;
    }
    private static Map<String, String> createIncident(String no, String time, String server, String desc,
                                                       String cause, String solution, String resolveTime,
                                                       String status, String handler) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("time", time);
        map.put("server", server);
        map.put("desc", desc);
        map.put("cause", cause);
        map.put("solution", solution);
        map.put("resolveTime", resolveTime);
        map.put("status", status);
        map.put("handler", handler);
        return map;
    }
    private static Map<String, String> createPatch(String date, String server, String content, String type, String result, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("server", server);
        map.put("content", content);
        map.put("type", type);
        map.put("result", result);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createChange(String no, String date, String content, String server,
                                                     String detail, String executor, String status, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("date", date);
        map.put("content", content);
        map.put("server", server);
        map.put("detail", detail);
        map.put("executor", executor);
        map.put("status", status);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("content", content);
        map.put("owner", owner);
        map.put("deadline", deadline);
        return map;
    }
}
src/main/java/com/ruoyi/util/SystemDesignDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,211 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class SystemDesignDocGenerator {
    public static void main(String[] args) throws Exception {
        generateSystemDesignDoc();
    }
    public static void generateSystemDesignDoc() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(SystemDesignDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Map<String, Object> data = new HashMap<>();
        // é¡¹ç›®åŸºæœ¬ä¿¡æ¯
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // åŽç«¯æŠ€æœ¯æ ˆ
        List<Map<String, String>> backendTech = new ArrayList<>();
        backendTech.add(createTech("核心框架", "Spring Boot 3.5", "提供依赖注入、AOP、配置管理等功能"));
        backendTech.add(createTech("ORM框架", "MyBatis-Plus 3.5", "数据库访问,支持自动代码生成"));
        backendTech.add(createTech("安全框架", "Spring Security", "认证授权、权限控制"));
        backendTech.add(createTech("缓存", "Redis 7.0", "缓存热点数据,提升性能"));
        backendTech.add(createTech("数据库", "MySQL 8.0", "存储业务数据"));
        backendTech.add(createTech("任务调度", "Quartz", "定时任务调度管理"));
        backendTech.add(createTech("日志", "Logback", "日志记录与管理"));
        backendTech.add(createTech("API文档", "Knife4j", "接口文档生成与测试"));
        data.put("backendTech", backendTech);
        // å‰ç«¯æŠ€æœ¯æ ˆ
        List<Map<String, String>> frontendTech = new ArrayList<>();
        frontendTech.add(createTech("核心框架", "Vue 3", "渐进式JavaScript框架"));
        frontendTech.add(createTech("UI组件", "Element Plus", "企业级UI组件库"));
        frontendTech.add(createTech("状态管理", "Pinia", "Vue官方状态管理库"));
        frontendTech.add(createTech("路由", "Vue Router", "单页面应用路由管理"));
        frontendTech.add(createTech("HTTP客户端", "Axios", "HTTP请求库"));
        frontendTech.add(createTech("构建工具", "Vite", "下一代前端构建工具"));
        data.put("frontendTech", frontendTech);
        // AI技术栈
        List<Map<String, String>> aiTech = new ArrayList<>();
        aiTech.add(createTech("大语言模型", "Claude API / OpenAI API", "智能客服、文档生成"));
        aiTech.add(createTech("机器学习", "TensorFlow / PyTorch", "预测模型训练与推理"));
        aiTech.add(createTech("OCR识别", "百度OCR / Tesseract", "文档图片识别"));
        aiTech.add(createTech("语音识别", "百度语音 / è®¯é£ž", "语音转文字"));
        aiTech.add(createTech("模型部署", "FastAPI + Docker", "模型服务化部署"));
        data.put("aiTech", aiTech);
        // ç³»ç»Ÿæ¨¡å—
        List<Map<String, String>> modules = new ArrayList<>();
        modules.add(createModule("MOD-001", "库存管理", "入库、出库、盘点、预警、库存查询"));
        modules.add(createModule("MOD-002", "采购管理", "采购申请、订单管理、供应商管理"));
        modules.add(createModule("MOD-003", "销售管理", "报价、订单、发货、售后"));
        modules.add(createModule("MOD-004", "质量管理", "质量检验、不合格处理、检测报告"));
        modules.add(createModule("MOD-005", "设备管理", "设备台账、保养计划、保养执行"));
        modules.add(createModule("MOD-006", "人事管理", "员工档案、考勤、审批流程"));
        modules.add(createModule("MOD-007", "系统管理", "用户、角色、权限、日志"));
        modules.add(createModule("MOD-008", "AI服务", "智能客服、预测分析、文档识别"));
        data.put("modules", modules);
        // æœåŠ¡å™¨é…ç½®
        List<Map<String, String>> servers = new ArrayList<>();
        servers.add(createServer("应用服务器1", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9"));
        servers.add(createServer("应用服务器2", "8æ ¸", "16GB", "500GB SSD", "CentOS 7.9"));
        servers.add(createServer("数据库主库", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9"));
        servers.add(createServer("数据库从库", "8æ ¸", "32GB", "1TB SSD", "CentOS 7.9"));
        servers.add(createServer("Redis节点1", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9"));
        servers.add(createServer("Redis节点2", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9"));
        servers.add(createServer("Redis节点3", "4æ ¸", "8GB", "200GB SSD", "CentOS 7.9"));
        servers.add(createServer("文件服务器", "4æ ¸", "8GB", "2TB HDD", "CentOS 7.9"));
        servers.add(createServer("AI推理服务器", "16æ ¸", "64GB", "1TB SSD", "Ubuntu 22.04"));
        data.put("servers", servers);
        // æ•°æ®åº“表
        List<Map<String, String>> tables = new ArrayList<>();
        tables.add(createTable("stock_inventory", "库存表,存储库存数量、批号等信息"));
        tables.add(createTable("stock_in_record", "入库记录表,记录入库明细"));
        tables.add(createTable("stock_out_record", "出库记录表,记录出库明细"));
        tables.add(createTable("purchase_order", "采购订单表"));
        tables.add(createTable("sales_order", "销售订单表"));
        tables.add(createTable("quality_inspect", "质检记录表"));
        tables.add(createTable("device_info", "设备信息表"));
        tables.add(createTable("device_maintenance", "设备保养记录表"));
        tables.add(createTable("staff_on_job", "员工信息表"));
        tables.add(createTable("sys_user", "系统用户表"));
        tables.add(createTable("sys_role", "角色表"));
        tables.add(createTable("sys_menu", "菜单权限表"));
        data.put("tables", tables);
        // API接口
        List<Map<String, String>> apis = new ArrayList<>();
        apis.add(createApi("1", "POST", "/api/auth/login", "用户登录"));
        apis.add(createApi("2", "GET", "/api/stock/list", "库存列表查询"));
        apis.add(createApi("3", "POST", "/api/stock/in", "入库操作"));
        apis.add(createApi("4", "POST", "/api/stock/out", "出库操作"));
        apis.add(createApi("5", "GET", "/api/purchase/list", "采购订单列表"));
        apis.add(createApi("6", "POST", "/api/purchase/create", "创建采购订单"));
        apis.add(createApi("7", "GET", "/api/sales/list", "销售订单列表"));
        apis.add(createApi("8", "POST", "/api/quality/inspect", "提交质检记录"));
        apis.add(createApi("9", "GET", "/api/device/list", "设备列表查询"));
        apis.add(createApi("10", "POST", "/api/ai/chat", "AI智能问答"));
        apis.add(createApi("11", "POST", "/api/ai/predict", "库存预测接口"));
        apis.add(createApi("12", "POST", "/api/ai/ocr", "OCR文档识别"));
        data.put("apis", apis);
        // è¯„审项
        List<Map<String, String>> reviewItems = new ArrayList<>();
        reviewItems.add(createReviewItem("系统架构", "通过", "架构清晰,层次分明,满足业务需求"));
        reviewItems.add(createReviewItem("数据库设计", "通过", "表结构合理,索引设计完善"));
        reviewItems.add(createReviewItem("接口设计", "通过", "RESTful规范,接口文档完整"));
        reviewItems.add(createReviewItem("服务器配置", "通过", "配置满足性能要求"));
        reviewItems.add(createReviewItem("AI技术方案", "通过", "技术选型合理,可行性高"));
        reviewItems.add(createReviewItem("安全设计", "通过", "安全措施完善"));
        data.put("reviewItems", reviewItems);
        // å¾…办事项
        List<Map<String, String>> actionItems = new ArrayList<>();
        actionItems.add(createActionItem("1", "完善数据库ER图设计", "王XX", "X月X日"));
        actionItems.add(createActionItem("2", "补充API接口详细参数说明", "èµµXX", "X月X日"));
        actionItems.add(createActionItem("3", "确认AI服务器GPU配置", "孙XX", "X月X日"));
        actionItems.add(createActionItem("4", "编写部署文档", "周XX", "X月X日"));
        data.put("actionItems", actionItems);
        // åŠ è½½æ¨¡æ¿å¹¶ç”Ÿæˆ
        Template template = cfg.getTemplate("系统设计说明书.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        // ä¿å­˜ä¸ºdocx
        String outputPath = "D:/牛马/文档/系统设计说明书.docx";
        File outputFile = new File(outputPath);
        outputFile.getParentFile().mkdirs();
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("系统设计说明书生成成功: " + outputPath);
    }
    private static Map<String, String> createTech(String category, String component, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("category", category);
        map.put("component", component);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createModule(String id, String name, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("id", id);
        map.put("name", name);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createServer(String name, String cpu, String memory, String disk, String os) {
        Map<String, String> map = new HashMap<>();
        map.put("name", name);
        map.put("cpu", cpu);
        map.put("memory", memory);
        map.put("disk", disk);
        map.put("os", os);
        return map;
    }
    private static Map<String, String> createTable(String name, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("name", name);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createApi(String no, String method, String path, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("method", method);
        map.put("path", path);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createReviewItem(String item, String result, String opinion) {
        Map<String, String> map = new HashMap<>();
        map.put("item", item);
        map.put("result", result);
        map.put("opinion", opinion);
        return map;
    }
    private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("content", content);
        map.put("owner", owner);
        map.put("deadline", deadline);
        return map;
    }
}
src/main/java/com/ruoyi/util/TechDevDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,208 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class TechDevDocGenerator {
    public static void main(String[] args) throws Exception {
        generateTechDevDoc();
    }
    public static void generateTechDevDoc() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(TechDevDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Map<String, Object> data = new HashMap<>();
        // é¡¹ç›®åŸºæœ¬ä¿¡æ¯
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // Gitblit仓库地址
        List<Map<String, String>> repositories = new ArrayList<>();
        repositories.add(createRepo("后端仓库", "http://114.132.189.42:9002/r/product-inventory-management-after.git"));
        repositories.add(createRepo("前端仓库", "http://114.132.189.42:9002/r/product-inventory-ui.git"));
        repositories.add(createRepo("文档仓库", "http://114.132.189.42:9002/r/product-inventory-docs.git"));
        repositories.add(createRepo("数据库脚本", "http://114.132.189.42:9002/r/product-inventory-db.git"));
        data.put("repositories", repositories);
        // Git用户权限分配
        List<Map<String, String>> gitUsers = new ArrayList<>();
        gitUsers.add(createGitUser("zhangxx", "å¼ XX", "项目管理员", "RW+(所有仓库)"));
        gitUsers.add(createGitUser("wangxx", "王XX", "后端开发", "RW(后端、数据库)"));
        gitUsers.add(createGitUser("zhaoxx", "èµµXX", "后端开发", "RW(后端、数据库)"));
        gitUsers.add(createGitUser("chenxx", "陈XX", "前端开发", "RW(前端仓库)"));
        gitUsers.add(createGitUser("sunxx", "孙XX", "AI工程师", "RW(后端、AI模块)"));
        gitUsers.add(createGitUser("liuxx", "刘XX", "测试工程师", "R(所有仓库)"));
        gitUsers.add(createGitUser("zhouxx", "周XX", "运维工程师", "RW(文档、部署脚本)"));
        data.put("gitUsers", gitUsers);
        // æµ‹è¯•用例
        List<Map<String, String>> testCases = new ArrayList<>();
        testCases.add(createTestCase("TC-001", "登录模块", "用户名密码正确登录", "登录成功", "登录成功", "通过"));
        testCases.add(createTestCase("TC-002", "登录模块", "用户名错误登录", "提示用户不存在", "提示正确", "通过"));
        testCases.add(createTestCase("TC-003", "库存管理", "入库操作-正常数据", "入库成功", "入库成功", "通过"));
        testCases.add(createTestCase("TC-004", "库存管理", "出库操作-库存不足", "提示库存不足", "提示正确", "通过"));
        testCases.add(createTestCase("TC-005", "采购管理", "创建采购订单", "创建成功", "创建成功", "通过"));
        testCases.add(createTestCase("TC-006", "销售管理", "创建销售订单", "创建成功", "创建成功", "通过"));
        testCases.add(createTestCase("TC-007", "质检管理", "提交质检记录", "提交成功", "提交成功", "通过"));
        testCases.add(createTestCase("TC-008", "设备管理", "创建保养计划", "创建成功", "创建成功", "进行中"));
        testCases.add(createTestCase("TC-009", "AI模块", "智能问答功能", "返回正确答案", "返回正确", "进行中"));
        testCases.add(createTestCase("TC-010", "系统管理", "用户权限配置", "权限生效", "权限生效", "通过"));
        data.put("testCases", testCases);
        // ä»£ç Review记录
        List<Map<String, String>> reviewRecords = new ArrayList<>();
        reviewRecords.add(createReviewRecord("2026-05-20", "王XX", "å¼ XX", "库存模块入库功能", "通过", "代码规范,逻辑清晰"));
        reviewRecords.add(createReviewRecord("2026-05-21", "èµµXX", "王XX", "采购订单审批流程", "通过", "需补充异常处理"));
        reviewRecords.add(createReviewRecord("2026-05-22", "陈XX", "å¼ XX", "前端登录页面优化", "通过", "UI符合设计稿"));
        reviewRecords.add(createReviewRecord("2026-05-23", "王XX", "èµµXX", "库存预警定时任务", "通过", "性能需优化"));
        reviewRecords.add(createReviewRecord("2026-05-24", "孙XX", "王XX", "AI智能客服接口", "通过", "需增加错误重试机制"));
        reviewRecords.add(createReviewRecord("2026-05-25", "èµµXX", "王XX", "设备保养验收功能", "进行中", ""));
        data.put("reviewRecords", reviewRecords);
        // å¸¸è§é—®é¢˜
        List<Map<String, String>> commonIssues = new ArrayList<>();
        commonIssues.add(createCommonIssue("1", "代码规范", "变量命名不规范,需遵循驼峰命名法"));
        commonIssues.add(createCommonIssue("2", "代码规范", "缺少必要的注释说明"));
        commonIssues.add(createCommonIssue("3", "安全问题", "SQL语句未使用参数化查询,存在注入风险"));
        commonIssues.add(createCommonIssue("4", "性能问题", "循环中执行数据库查询,需优化"));
        commonIssues.add(createCommonIssue("5", "异常处理", "异常捕获后未做处理,需添加日志或抛出"));
        commonIssues.add(createCommonIssue("6", "安全问题", "敏感信息明文打印到日志,需脱敏"));
        data.put("commonIssues", commonIssues);
        // è¿­ä»£è®¡åˆ’
        List<Map<String, String>> iterations = new ArrayList<>();
        iterations.add(createIteration("v1.0.0", "基础框架搭建、用户权限模块", "第1-4周", "王XX", "已完成"));
        iterations.add(createIteration("v1.1.0", "库存管理模块", "第5-8周", "王XX", "已完成"));
        iterations.add(createIteration("v1.2.0", "采购销售模块", "第9-12周", "èµµXX", "已完成"));
        iterations.add(createIteration("v1.3.0", "质检设备模块", "第13-16周", "王XX", "进行中"));
        iterations.add(createIteration("v1.4.0", "人事协同模块", "第17-20周", "èµµXX", "待开始"));
        iterations.add(createIteration("v1.5.0", "AI智能化功能", "第21-24周", "孙XX", "待开始"));
        data.put("iterations", iterations);
        // æ¯æ—¥è¿›åº¦
        List<Map<String, String>> dailyProgress = new ArrayList<>();
        dailyProgress.add(createDailyProgress("2026-05-20", "王XX", "完成入库模块开发", "100%", ""));
        dailyProgress.add(createDailyProgress("2026-05-20", "èµµXX", "采购订单审批流程开发", "80%", "待联调"));
        dailyProgress.add(createDailyProgress("2026-05-20", "陈XX", "前端库存页面优化", "100%", ""));
        dailyProgress.add(createDailyProgress("2026-05-21", "王XX", "库存预警定时任务开发", "90%", "待测试"));
        dailyProgress.add(createDailyProgress("2026-05-21", "èµµXX", "采购订单审批流程联调", "100%", ""));
        dailyProgress.add(createDailyProgress("2026-05-21", "孙XX", "AI接口调研与技术选型", "70%", "需确认"));
        dailyProgress.add(createDailyProgress("2026-05-22", "王XX", "设备保养模块开发", "60%", "进行中"));
        dailyProgress.add(createDailyProgress("2026-05-22", "èµµXX", "质检记录功能开发", "50%", "进行中"));
        data.put("dailyProgress", dailyProgress);
        // é—®é¢˜è·Ÿè¸ª
        List<Map<String, String>> issues = new ArrayList<>();
        issues.add(createIssue("ISS-001", "库存查询响应慢", "刘XX", "王XX", "高", "已解决"));
        issues.add(createIssue("ISS-002", "入库批号校验逻辑错误", "刘XX", "王XX", "高", "已解决"));
        issues.add(createIssue("ISS-003", "采购订单金额计算精度问题", "刘XX", "èµµXX", "中", "已解决"));
        issues.add(createIssue("ISS-004", "前端分页组件样式异常", "刘XX", "陈XX", "低", "进行中"));
        issues.add(createIssue("ISS-005", "AI接口超时问题", "孙XX", "孙XX", "高", "进行中"));
        issues.add(createIssue("ISS-006", "设备保养提醒未触发", "刘XX", "王XX", "中", "待处理"));
        data.put("issues", issues);
        // åŠ è½½æ¨¡æ¿å¹¶ç”Ÿæˆ
        Template template = cfg.getTemplate("技术软件开发文档.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        // ä¿å­˜ä¸ºdocx
        String outputPath = "D:/牛马/文档/技术软件开发文档.docx";
        File outputFile = new File(outputPath);
        outputFile.getParentFile().mkdirs();
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("技术软件开发文档生成成功: " + outputPath);
    }
    private static Map<String, String> createRepo(String name, String url) {
        Map<String, String> map = new HashMap<>();
        map.put("name", name);
        map.put("url", url);
        return map;
    }
    private static Map<String, String> createGitUser(String username, String realname, String role, String permission) {
        Map<String, String> map = new HashMap<>();
        map.put("username", username);
        map.put("realname", realname);
        map.put("role", role);
        map.put("permission", permission);
        return map;
    }
    private static Map<String, String> createTestCase(String no, String module, String content, String expected, String actual, String status) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("module", module);
        map.put("content", content);
        map.put("expected", expected);
        map.put("actual", actual);
        map.put("status", status);
        return map;
    }
    private static Map<String, String> createReviewRecord(String date, String submitter, String reviewer, String content, String result, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("submitter", submitter);
        map.put("reviewer", reviewer);
        map.put("content", content);
        map.put("result", result);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createCommonIssue(String no, String type, String desc) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("type", type);
        map.put("desc", desc);
        return map;
    }
    private static Map<String, String> createIteration(String version, String scope, String time, String owner, String status) {
        Map<String, String> map = new HashMap<>();
        map.put("version", version);
        map.put("scope", scope);
        map.put("time", time);
        map.put("owner", owner);
        map.put("status", status);
        return map;
    }
    private static Map<String, String> createDailyProgress(String date, String person, String content, String progress, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("person", person);
        map.put("content", content);
        map.put("progress", progress);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createIssue(String no, String desc, String finder, String owner, String priority, String status) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("desc", desc);
        map.put("finder", finder);
        map.put("owner", owner);
        map.put("priority", priority);
        map.put("status", status);
        return map;
    }
}
src/main/java/com/ruoyi/util/TestReportDocGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
package com.ruoyi.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class TestReportDocGenerator {
    public static void main(String[] args) throws Exception {
        generateTestReportDoc();
    }
    public static void generateTestReportDoc() throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
        cfg.setClassForTemplateLoading(TestReportDocGenerator.class, "/static");
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Map<String, Object> data = new HashMap<>();
        // é¡¹ç›®åŸºæœ¬ä¿¡æ¯
        data.put("projectName", "产品库存管理系统");
        data.put("projectVersion", "V1.0");
        data.put("docDate", "2026å¹´6月");
        // æµ‹è¯•计划概述
        data.put("testScope", "覆盖库存管理、采购销售、质检设备、人事协同、AI智能化等全部功能模块");
        data.put("testMethodology", "黑盒测试 + ç™½ç›’测试 + è‡ªåŠ¨åŒ–æµ‹è¯• + æ€§èƒ½æµ‹è¯•");
        data.put("testCycle", "2026å¹´5月20日 - 2026å¹´6月30日");
        data.put("testEnv", "测试环境:Windows Server 2022 / JDK 25 / MySQL 8.0 / Redis 7.0");
        // æµ‹è¯•用例
        List<Map<String, String>> testCases = new ArrayList<>();
        testCases.add(createTestCase("TC-001", "登录模块", "用户名密码正确登录", "登录成功跳转主页", "登录成功", "通过", "王XX"));
        testCases.add(createTestCase("TC-002", "登录模块", "用户名错误登录", "提示用户不存在", "提示正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-003", "登录模块", "密码错误连续5次", "账号锁定30分钟", "锁定成功", "通过", "刘XX"));
        testCases.add(createTestCase("TC-004", "登录模块", "空用户名登录", "提示用户名为空", "提示正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-005", "库存管理", "采购入库-正常数据", "入库成功,库存增加", "入库成功", "通过", "王XX"));
        testCases.add(createTestCase("TC-006", "库存管理", "采购入库-缺少必填项", "提示必填字段", "提示正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-007", "库存管理", "销售出库-正常数据", "出库成功,库存减少", "出库成功", "通过", "王XX"));
        testCases.add(createTestCase("TC-008", "库存管理", "销售出库-库存不足", "提示库存不足", "提示正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-009", "库存管理", "库存盘点-差异报告", "生成差异报告", "报告正确", "通过", "王XX"));
        testCases.add(createTestCase("TC-010", "库存管理", "库存预警-下限触发", "自动生成预警通知", "通知已发送", "通过", "王XX"));
        testCases.add(createTestCase("TC-011", "采购管理", "创建采购订单", "订单创建成功", "创建成功", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-012", "采购管理", "采购审批流程", "逐级审批通过", "审批正常", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-013", "采购管理", "供应商信息维护", "信息更新成功", "更新成功", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-014", "销售管理", "创建销售订单", "订单创建成功", "创建成功", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-015", "销售管理", "销售报价单生成", "报价单生成PDF", "生成成功", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-016", "质检管理", "来料检验-合格品", "检验通过入库", "检验正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-017", "质检管理", "不合格品处理流程", "触发不合格处理流程", "流程正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-018", "设备管理", "设备台账录入", "设备信息保存成功", "保存成功", "通过", "王XX"));
        testCases.add(createTestCase("TC-019", "设备管理", "保养计划创建", "计划创建成功", "创建成功", "通过", "王XX"));
        testCases.add(createTestCase("TC-020", "设备管理", "保养验收确认", "验收通过记录归档", "验收成功", "进行中", "王XX"));
        testCases.add(createTestCase("TC-021", "人事管理", "员工入职登记", "员工信息入库", "登记成功", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-022", "人事管理", "合同到期提醒", "自动发送提醒通知", "通知已发送", "通过", "èµµXX"));
        testCases.add(createTestCase("TC-023", "AI模块", "智能问答-库存查询", "返回正确库存信息", "返回正确", "通过", "孙XX"));
        testCases.add(createTestCase("TC-024", "AI模块", "库存预测准确性", "预测误差小于15%", "误差12%", "通过", "孙XX"));
        testCases.add(createTestCase("TC-025", "AI模块", "OCR文档识别", "识别准确率&gt;95%", "准确率96.5%", "通过", "孙XX"));
        testCases.add(createTestCase("TC-026", "AI模块", "语音录入功能", "识别准确率&gt;90%", "准确率88%", "进行中", "孙XX"));
        testCases.add(createTestCase("TC-027", "系统管理", "用户权限配置", "权限生效且隔离", "权限正确", "通过", "刘XX"));
        testCases.add(createTestCase("TC-028", "系统管理", "操作日志审计", "关键操作全记录", "记录完整", "通过", "刘XX"));
        testCases.add(createTestCase("TC-029", "性能测试", "100并发用户登录", "响应时间&lt;3秒", "平均1.8秒", "通过", "刘XX"));
        testCases.add(createTestCase("TC-030", "性能测试", "百万级数据查询", "查询时间&lt;2秒", "0.9秒", "通过", "刘XX"));
        data.put("testCases", testCases);
        // æµ‹è¯•进度跟踪
        List<Map<String, String>> progress = new ArrayList<>();
        progress.add(createProgress("2026-05-20", "登录模块、库存入库", "8", "8", "100%", "已完成第一轮"));
        progress.add(createProgress("2026-05-21", "库存出库、库存盘点", "10", "9", "90%", "库存盘点待回归"));
        progress.add(createProgress("2026-05-22", "库存预警、采购订单", "8", "8", "100%", ""));
        progress.add(createProgress("2026-05-23", "销售管理、供应商管理", "10", "8", "80%", "供应商审批流程待测"));
        progress.add(createProgress("2026-05-24", "质检管理全流程", "6", "6", "100%", ""));
        progress.add(createProgress("2026-05-25", "设备台账、保养计划", "6", "4", "67%", "保养验收功能开发中"));
        progress.add(createProgress("2026-05-26", "人事管理、合同管理", "8", "6", "75%", "合同到期提醒待验证"));
        progress.add(createProgress("2026-05-27", "AI智能问答、OCR识别", "6", "5", "83%", "语音录入准确率待优化"));
        progress.add(createProgress("2026-05-28", "系统管理、性能测试", "8", "6", "75%", "性能测试进行中"));
        progress.add(createProgress("2026-05-29", "全模块回归测试", "30", "25", "83%", "3个用例待修复后重测"));
        progress.add(createProgress("2026-05-30", "缺陷修复验证", "12", "10", "83%", "2个低优先级缺陷延后处理"));
        data.put("progress", progress);
        // ç¼ºé™·è·Ÿè¸ª
        List<Map<String, String>> defects = new ArrayList<>();
        defects.add(createDefect("BUG-001", "库存查询响应时间超过5秒", "严重", "王XX", "已修复", "2026-05-22"));
        defects.add(createDefect("BUG-002", "入库批号重复校验失效", "严重", "王XX", "已修复", "2026-05-22"));
        defects.add(createDefect("BUG-003", "采购订单金额精度丢失", "一般", "èµµXX", "已修复", "2026-05-23"));
        defects.add(createDefect("BUG-004", "前端分页组件显示异常", "轻微", "陈XX", "已修复", "2026-05-24"));
        defects.add(createDefect("BUG-005", "AI智能问答接口超时", "严重", "孙XX", "修复中", "2026-05-27"));
        defects.add(createDefect("BUG-006", "设备保养提醒定时任务未触发", "一般", "王XX", "待处理", "2026-05-28"));
        defects.add(createDefect("BUG-007", "Excel导出大数据量内存溢出", "一般", "王XX", "修复中", "2026-05-29"));
        defects.add(createDefect("BUG-008", "语音录入方言识别率低", "轻微", "孙XX", "待处理", "2026-05-30"));
        defects.add(createDefect("BUG-009", "多用户同时盘点导致数据不一致", "严重", "王XX", "待处理", "2026-05-30"));
        defects.add(createDefect("BUG-010", "移动端页面适配异常", "轻微", "陈XX", "待处理", "2026-05-30"));
        data.put("defects", defects);
        // æµ‹è¯•统计
        data.put("totalCases", "80");
        data.put("passedCases", "68");
        data.put("failedCases", "3");
        data.put("inProgressCases", "5");
        data.put("blockedCases", "4");
        data.put("passRate", "85.0%");
        data.put("totalDefects", "10");
        data.put("fixedDefects", "4");
        data.put("openDefects", "4");
        data.put("inProgressDefects", "2");
        data.put("criticalDefects", "3");
        data.put("majorDefects", "3");
        data.put("minorDefects", "4");
        // æµ‹è¯•结论
        data.put("testConclusion", "系统整体功能完整,核心业务流程通过测试。存在3个严重缺陷待修复:AI接口超时、盘点并发数据不一致、Excel导出内存溢出。建议修复严重缺陷后安排第二轮回归测试,再进入上线流程。");
        data.put("releaseSuggestion", "有条件通过,修复严重缺陷后可上线");
        // å¾…办事项
        List<Map<String, String>> actionItems = new ArrayList<>();
        actionItems.add(createActionItem("1", "修复AI智能问答接口超时问题", "孙XX", "2026-06-02"));
        actionItems.add(createActionItem("2", "修复盘点并发数据一致性问题", "王XX", "2026-06-03"));
        actionItems.add(createActionItem("3", "修复Excel大数据量导出内存溢出", "王XX", "2026-06-03"));
        actionItems.add(createActionItem("4", "完成语音录入方言识别优化", "孙XX", "2026-06-05"));
        actionItems.add(createActionItem("5", "完成第二轮全量回归测试", "刘XX", "2026-06-08"));
        actionItems.add(createActionItem("6", "输出最终测试报告", "刘XX", "2026-06-10"));
        data.put("actionItems", actionItems);
        // åŠ è½½æ¨¡æ¿å¹¶ç”Ÿæˆ
        Template template = cfg.getTemplate("测试报告.xml");
        StringWriter out = new StringWriter();
        template.process(data, out);
        // ä¿å­˜ä¸ºdocx
        String outputPath = "D:/牛马/文档/测试报告.docx";
        File outputFile = new File(outputPath);
        outputFile.getParentFile().mkdirs();
        try (FileOutputStream fos = new FileOutputStream(outputFile);
             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
            osw.write(out.toString());
        }
        System.out.println("测试报告生成成功: " + outputPath);
    }
    private static Map<String, String> createTestCase(String no, String module, String content,
                                                       String expected, String actual, String status, String tester) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("module", module);
        map.put("content", content);
        map.put("expected", expected);
        map.put("actual", actual);
        map.put("status", status);
        map.put("tester", tester);
        return map;
    }
    private static Map<String, String> createProgress(String date, String content, String total,
                                                       String completed, String rate, String remark) {
        Map<String, String> map = new HashMap<>();
        map.put("date", date);
        map.put("content", content);
        map.put("total", total);
        map.put("completed", completed);
        map.put("rate", rate);
        map.put("remark", remark);
        return map;
    }
    private static Map<String, String> createDefect(String no, String desc, String severity,
                                                     String owner, String status, String deadline) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("desc", desc);
        map.put("severity", severity);
        map.put("owner", owner);
        map.put("status", status);
        map.put("deadline", deadline);
        return map;
    }
    private static Map<String, String> createActionItem(String no, String content, String owner, String deadline) {
        Map<String, String> map = new HashMap<>();
        map.put("no", no);
        map.put("content", content);
        map.put("owner", owner);
        map.put("deadline", deadline);
        return map;
    }
}
src/main/resources/static/¼¼ÊõÈí¼þ¿ª·¢Îĵµ.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1398 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>技术软件开发文档</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>2026-06-02</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading3">
        <w:name w:val="Heading 3"/>
        <w:rPr><w:b/><w:size w:val="22"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>产品库存管理系统 æŠ€æœ¯è½¯ä»¶å¼€å‘文档</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:v3.8.9</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:2026-06-02</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€Gitblit仓库地址 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、Gitblit仓库地址</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.1 ä»“库信息</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="6500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>项目</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>地址</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>后端仓库</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>http://114.132.189.42:9002/r/product-inventory-management-after.git</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>前端仓库</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>(前端仓库地址)</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>Gitblit管理平台</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>http://114.132.189.42:9002</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.2 åˆ†æ”¯ç®¡ç†ç­–ç•¥</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• master:生产环境分支,仅通过合并发布</w:t></w:r></w:p>
<w:p><w:r><w:t>• dev_新疆马铃薯pro:开发主分支,日常开发合并至此</w:t></w:r></w:p>
<w:p><w:r><w:t>• feature/*:功能开发分支,完成后合并至dev分支</w:t></w:r></w:p>
<w:p><w:r><w:t>• hotfix/*:紧急修复分支,修复后合并至master和dev</w:t></w:r></w:p>
<w:p><w:r><w:t>• release/*:发布分支,发布前测试使用</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.3 æäº¤è§„范</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2500"/><w:gridCol w:w="4500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>类型</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>示例</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>feat</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>新功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>feat(device): æ·»åŠ è®¾å¤‡ä¿å…»éªŒæ”¶åŠŸèƒ½</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>fix</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>修复Bug</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>fix(purchase): ä¿®å¤é‡‡è´­å°è´¦åº“存入库记录查询逻辑</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>docs</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>文档更新</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>docs: æ›´æ–°API接口文档</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>refactor</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>代码重构</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>refactor(home): é‡æž„首页控制器接口</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>test</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试相关</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>test: æ·»åŠ åº“å­˜æ¨¡å—å•å…ƒæµ‹è¯•</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>chore</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>构建/工具相关</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>chore: å‡çº§SpringBoot版本</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äºŒã€Git用户权限分配 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、Git用户权限分配</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.1 ç”¨æˆ·æƒé™è¡¨</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="2500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>用户名</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>姓名</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>角色</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>权限</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>yangyunshan</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>项目管理员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>RW+ (全部分支)</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>developer1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>开发人员1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>开发人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>RW (dev/feature分支)</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>developer2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>开发人员2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>开发人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>RW (dev/feature分支)</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>tester</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>R (只读权限)</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.2 æƒé™è¯´æ˜Ž</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="7500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>权限</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>RW+</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>读写推送权限,可创建/删除分支,可强制推送</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>RW</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>读写权限,可推送代码到现有分支,不可删除分支</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>R</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>只读权限,仅可克隆和拉取代码</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€æž„建方式 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、构建方式</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.1 å¼€å‘环境配置</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>环境项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>版本要求</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>JDK版本</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>JDK 25</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>Maven版本</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>3.6.3+</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>Node.js版本</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>18.x+</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>IDE</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>IntelliJ IDEA 2024+</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>数据库</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>MySQL 8.0+</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>缓存</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Redis 6.0+</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.2 æŠ€æœ¯æ ˆ</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="4200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>层级</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>技术</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>版本</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>后端框架</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Spring Boot</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>3.5.13</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>安全框架</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Spring Security + JWT</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>-</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>ORM框架</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>MyBatis + PageHelper</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2.1.1</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>数据库连接池</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Druid</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1.2.23</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>JSON处理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Fastjson</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2.0.53</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>API文档</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Knife4j (Swagger)</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>4.5.0</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>工具库</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Hutool</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>5.8.43</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>对象存储</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>MinIO</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>8.4.3</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>前端框架</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Vue + Element UI</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>-</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.3 åŽç«¯æž„建步骤</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. å…‹éš†ä»£ç ä»“库:</w:t></w:r></w:p>
<w:p><w:r><w:t>   git clone http://114.132.189.42:9002/r/product-inventory-management-after.git</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>2. å¯¼å…¥IDEA项目,等待Maven依赖下载</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>3. é…ç½®application-dev.yml数据库连接信息:</w:t></w:r></w:p>
<w:p><w:r><w:t>   spring.datasource.url=jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&amp;characterEncoding=utf8</w:t></w:r></w:p>
<w:p><w:r><w:t>   spring.datasource.username=root</w:t></w:r></w:p>
<w:p><w:r><w:t>   spring.datasource.password=password</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>4. é…ç½®Redis连接信息</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>5. æ‰§è¡ŒMaven编译:</w:t></w:r></w:p>
<w:p><w:r><w:t>   mvn clean compile</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>6. è¿è¡Œä¸»ç±»ï¼šcom.ruoyi.RuoYiApplication</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>7. è®¿é—®æŽ¥å£æ–‡æ¡£ï¼šhttp://localhost:8080/doc.html</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.4 å‰ç«¯æž„建步骤</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. è¿›å…¥å‰ç«¯ç›®å½•:cd ruoyi-ui</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>2. å®‰è£…依赖:npm install æˆ– pnpm install</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>3. å¼€å‘环境运行:npm run dev</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>4. ç”Ÿäº§çŽ¯å¢ƒæž„å»ºï¼šnpm run build</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.5 æ‰“包部署</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. åŽç«¯æ‰“包:mvn clean package -DskipTests</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>2. ç”Ÿæˆçš„JAR包:target/ruoyi.jar</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>3. å¯åŠ¨å‘½ä»¤ï¼šjava -jar ruoyi.jar --spring.profiles.active=prod</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>4. å¤šçŽ¯å¢ƒé…ç½®è¯´æ˜Žï¼š</w:t></w:r></w:p>
<w:p><w:r><w:t>   - dev: å¼€å‘环境</w:t></w:r></w:p>
<w:p><w:r><w:t>   - prod: ç”Ÿäº§çŽ¯å¢ƒ</w:t></w:r></w:p>
<w:p><w:r><w:t>   - hbxm, hbkj, hhkj等: å„客户定制环境</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€æ‰‹åŠ¨æµ‹è¯• -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、手动测试</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.1 æµ‹è¯•环境信息</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>项目</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>信息</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>测试环境地址</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>http://test.xxx.com</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>测试账号</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>test / 123456</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>管理员账号</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>admin / admin123</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>API文档地址</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>http://localhost:8080/doc.html</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.2 åŠŸèƒ½æ¨¡å—æµ‹è¯•ç”¨ä¾‹</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="1200"/><w:gridCol w:w="3000"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="900"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>模块</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>测试内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>预期结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>实际结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购台账库存入库记录查询</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>正确显示入库记录</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备保养验收功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>验收流程正常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>库存管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>库存物联设备绑定</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>绑定成功并实时数采</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>发货管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>出库批号填写与入库批号选择</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>批号关联正确</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>质量管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>批量快速检验功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>批量检验流程正常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>首页</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>上月销售采购金额统计</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>统计数据准确</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>7</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>财务管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>财务助手AI功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI问答正常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>员工管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>员工入职服务接口</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>入职流程正常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>9</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审批管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审批实例按当前用户过滤</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>过滤结果正确</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备巡检</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备巡检异常联动维修单</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>维修单自动生成</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>符合预期</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.3 æµ‹è¯•注意事项</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• æµ‹è¯•前确保数据库已初始化最新脚本</w:t></w:r></w:p>
<w:p><w:r><w:t>• æµ‹è¯•完成后及时反馈问题到开发人员</w:t></w:r></w:p>
<w:p><w:r><w:t>• é‡ç‚¹å…³æ³¨è¾¹ç•Œæ¡ä»¶å’Œå¼‚常场景</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ€§èƒ½æµ‹è¯•需在独立环境进行</w:t></w:r></w:p>
<w:p><w:r><w:t>• AI功能测试需确保AI服务正常连接</w:t></w:r></w:p>
<w:p><w:r><w:t>• å¤šçŽ¯å¢ƒé…ç½®æµ‹è¯•éœ€è¦†ç›–å„å®¢æˆ·å®šåˆ¶çŽ¯å¢ƒ</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、代码Review记录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、代码Review记录</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.1 Review规范</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• æ¯ä¸ªåŠŸèƒ½å¼€å‘å®ŒæˆåŽéœ€æäº¤ä»£ç å®¡æŸ¥</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®¡æŸ¥äººå‘˜è‡³å°‘1人,重要功能需2人审查</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®¡æŸ¥é€šè¿‡åŽæ–¹å¯åˆå¹¶è‡³dev分支</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®¡æŸ¥é‡ç‚¹ï¼šä»£ç è§„范、安全性、性能、可维护性</w:t></w:r></w:p>
<w:p><w:r><w:t>• ä½¿ç”¨Git提交信息关联审查记录</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.2 Review记录表</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1000"/><w:gridCol w:w="1200"/><w:gridCol w:w="2200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1800"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>提交人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>审查人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>审查内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>审查结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-06-01</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人A</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>员工入职服务接口修改</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>增加用户添加标识参数</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-30</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人A</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备保养验收功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>添加年度定时任务支持</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-28</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人B</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>库存物联设备绑定功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>实时数采功能完善</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-25</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人A</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>首页生产看板性能优化</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>优化查询性能</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-22</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人B</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>财务AI模块升级</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI提问优化</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-20</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人A</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购智能体多文件分析</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>附件存储与历史回显</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-18</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人A</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>销售助手前端联调</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI销售助手功能</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-15</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>审查人B</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备巡检异常联动维修单</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>自动生成维修单</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.3 å¸¸è§é—®é¢˜æ¸…单</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2000"/><w:gridCol w:w="5900"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>问题类型</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>问题描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>代码规范</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>命名不规范,需遵循驼峰命名法,常量使用大写下划线</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>安全性</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>SQL注入风险,需使用参数化查询,避免字符串拼接</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>性能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>N+1查询问题,需使用关联查询或批量查询优化</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>异常处理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>异常捕获后未正确处理或记录日志,需完善异常处理逻辑</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>事务管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>多表操作未添加事务注解,可能导致数据不一致</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…­ã€è¿›åº¦è·Ÿè¸ªè®°å½• -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>六、进度跟踪记录</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.1 é¡¹ç›®æ•´ä½“进度</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>模块名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划功能数</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>已完成</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>进行中</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成率</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>采购管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>15</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>14</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>93%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>库存管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>12</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>11</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>92%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>销售管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>18</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>17</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>94%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>设备管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>10</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>质量管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>7</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>88%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>财务管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>20</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>19</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>95%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>AI智能助手</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>审批流程</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>8</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>首页看板</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>合计</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>102</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>97</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>5</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>95%</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.2 è¿­ä»£è®¡åˆ’</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="2000"/><w:gridCol w:w="1200"/><w:gridCol w:w="1000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>迭代版本</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能范围</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v1.0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>基础框架搭建、用户权限管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2025-01-01 ~ 2025-03-31</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已完成</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v2.0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购、库存、销售核心模块</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2025-04-01 ~ 2025-08-31</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已完成</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v3.0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>设备管理、质量管理、财务管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2025-09-01 ~ 2025-12-31</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已完成</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v3.8</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI智能助手、审批流程、首页看板</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-01-01 ~ 2026-05-31</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已完成</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v3.9</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>功能完善、性能优化、Bug修复</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-01 ~ 2026-06-30</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>进行中</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.3 æ¯æ—¥è¿›åº¦è®°å½•</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="3500"/><w:gridCol w:w="1300"/><w:gridCol w:gridCol w:w="1300"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>人员</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>工作内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>进度</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-06-02</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>修改员工入职服务接口增加用户添加标识参数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-06-01</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>添加设备保养验收功能和年度定时任务支持</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-30</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>修复采购台账库存入库记录查询逻辑</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-28</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>添加库存物联设备绑定和实时数采功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-25</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>发货出库批号与入库批号关联功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-22</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>新增上月销售采购金额统计功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-20</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>优化批量快速检验功能</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2026-05-18</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>销售助手AI功能前端联调</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>100%</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已提交</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.4 å¾…完成事项</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>事项描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划完成时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>优先级</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购管理剩余功能完善</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-10</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>高</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>进行中</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>库存管理剩余功能完善</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-12</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>高</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>待开始</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>销售管理剩余功能完善</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-15</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>高</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>待开始</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>质量管理剩余功能完善</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-18</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>待开始</w:t></w:r></w>p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>系统性能优化</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-25</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>待开始</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>6</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>系统集成测试</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-28</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>高</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>待开始</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.5 é—®é¢˜è·Ÿè¸ª</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="600"/><w:gridCol w:w="2500"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>问题描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>发现人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>责任人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>优先级</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>1</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>采购台账库存入库记录查询异常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>高</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已解决</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>2</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>首页看板性能问题</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已解决</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>3</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>批量快速检验数据校验问题</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已解决</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸ƒã€é™„录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>七、附录</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>7.1 ç›¸å…³æ–‡æ¡£</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• é™„录A:接口文档 - Swagger地址:http://localhost:8080/doc.html</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录B:数据库设计文档</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录C:部署手册</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录D:运维手册</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录E:前端联调文档(见doc目录)</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>7.2 è”系方式</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="3000"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>角色</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>姓名</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>联系方式</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>项目经理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>yangyunshan@xxx.com</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>开发负责人</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>yangyunshan@xxx.com</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>测试负责人</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>测试人员</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>tester@xxx.com</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>7.3 ç‰ˆæœ¬åŽ†å²</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="2800"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>版本</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>修改人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>修改说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>v1.0</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>2026-06-02</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>杨云山</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>初始版本创建</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
</w:body>
</w:wordDocument>
src/main/resources/static/·þÎñÆ÷ÔËά¼Ç¼.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,702 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>服务器运维记录</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>${docDate}</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading3">
        <w:name w:val="Heading 3"/>
        <w:rPr><w:b/><w:size w:val="22"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>${projectName} æœåŠ¡å™¨è¿ç»´è®°å½•</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:${projectVersion}</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:${docDate}</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€æœåŠ¡å™¨æ¸…å• -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、服务器清单</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1200"/><w:gridCol w:w="1200"/><w:gridCol w:w="1300"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="1100"/><w:gridCol w:w="1100"/><w:gridCol w:w="600"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>类型</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>内网IP</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>CPU</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>内存</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>硬盘</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>操作系统</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list servers as s>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${s.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.type}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.ip}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.cpu}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.memory}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.disk}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.os}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.status}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äºŒã€è¿ç»´è¿›åº¦è·Ÿè¸ª -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、运维进度跟踪</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1800"/><w:gridCol w:w="2800"/><w:gridCol w:w="700"/><w:gridCol w:w="2100"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>任务</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>工作内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>进度</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list progress as p>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${p.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.task}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.rate}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.remark}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€æœåŠ¡å™¨å·¡æ£€è®°å½• -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、服务器巡检记录</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1200"/><w:gridCol w:w="2500"/><w:gridCol w:w="900"/><w:gridCol w:w="2800"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>服务器</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>巡检指标</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list inspections as ins>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${ins.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ins.server}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ins.metrics}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ins.result}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ins.remark}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€æ•°æ®åº“备份记录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、数据库备份记录</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="900"/><w:gridCol w:w="1500"/><w:gridCol w:w="900"/><w:gridCol w:w="900"/><w:gridCol w:w="1100"/><w:gridCol w:w="1100"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>类型</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数据库</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>大小</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>开始时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>结束时间</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list backups as b>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${b.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.type}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.database}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.size}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.status}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.startTime}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${b.endTime}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、故障/事件记录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、故障/事件记录</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="650"/><w:gridCol w:w="1000"/><w:gridCol w:w="1000"/><w:gridCol w:w="1600"/><w:gridCol w:w="1300"/><w:gridCol w:w="1600"/><w:gridCol w:w="1000"/><w:gridCol w:w="650"/><w:gridCol w:w="700"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>发生时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>服务器</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>故障描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>原因</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>处理方案</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>解决时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>处理人</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list incidents as inc>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${inc.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.time}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.server}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.desc}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.cause}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.solution}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.resolveTime}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.status}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inc.handler}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…­ã€è¡¥ä¸/更新记录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>六、补丁/更新记录</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1100"/><w:gridCol w:w="1500"/><w:gridCol w:w="2600"/><w:gridCol w:w="900"/><w:gridCol w:w="900"/><w:gridCol w:w="1500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>服务器</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>更新内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>类型</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list patches as pt>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${pt.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${pt.server}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${pt.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${pt.type}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${pt.result}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${pt.remark}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸ƒã€å˜æ›´è®°å½• -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>七、变更记录</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="800"/><w:gridCol w:w="1000"/><w:gridCol w:w="1800"/><w:gridCol w:w="1500"/><w:gridCol w:w="1800"/><w:gridCol w:w="800"/><w:gridCol w:w="800"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>变更内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>涉及服务器</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>变更详情</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>执行人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list changes as ch>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${ch.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.server}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.detail}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.executor}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${ch.status}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…«ã€è¿ç»´ç»Ÿè®¡ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>八、运维统计</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>8.1 æœåŠ¡å™¨çŠ¶æ€</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>服务器总数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${serverCount}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>正常运行</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${runningCount}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>告警/异常</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${alertCount}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>可用率</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${uptimeRate}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>巡检总次数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalInspections}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>备份总次数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalBackups}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>备份成功率</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${backupSuccessRate}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>故障总数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalIncidents}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>已解决故障</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${solvedIncidents}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>补丁总数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalPatches}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>补丁已完成</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${completedPatches}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¹ã€è¿ç»´ç»“论 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>九、运维结论</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>9.1 ç»¼åˆè¯„ä»·</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${opsConclusion}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>9.2 é£Žé™©æç¤º</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${riskWarning}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- åã€å¾…办事项 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>十、待办事项</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>待办内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成时间</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list actionItems as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¿ç»´è¯„审会议纪要 -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>运维评审会议纪要</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>会议信息</w:t></w:r>
</w:p>
<w:p><w:r><w:t>会议主题:产品库存管理系统运维评审会议</w:t></w:r></w:p>
<w:p><w:r><w:t>会议时间:2026å¹´6月2日 10:00-11:30</w:t></w:r></w:p>
<w:p><w:r><w:t>会议地点:公司会议室</w:t></w:r></w:p>
<w:p><w:r><w:t>主持人:张XX</w:t></w:r></w:p>
<w:p><w:r><w:t>记录人:周XX</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>参会人员</w:t></w:r>
</w:p>
<w:p><w:r><w:t>张XX(项目经理)、王XX(后端开发)、周XX(运维工程师)、刘XX(测试工程师)</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审内容</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. æœåŠ¡å™¨èµ„æºé…ç½®ä¸Žä½¿ç”¨æƒ…å†µ</w:t></w:r></w:p>
<w:p><w:r><w:t>2. å¤‡ä»½ç­–略与恢复演练评估</w:t></w:r></w:p>
<w:p><w:r><w:t>3. å®‰å…¨è¡¥ä¸æ‰§è¡Œè¿›åº¦</w:t></w:r></w:p>
<w:p><w:r><w:t>4. æ•…障处理效率分析</w:t></w:r></w:p>
<w:p><w:r><w:t>5. ç›‘控告警体系完善度</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审结论</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审意见</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>服务器配置</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>配置合理,SVR-FILE-01需扩容</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>备份策略</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>全量+增量策略合理,需增加异地备份</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>安全补丁</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>进行中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>内核补丁3台待完成,预计6月2日完成</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>故障处理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>故障响应及时,平均处理时间40分钟</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>监控告警</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>进行中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>Prometheus已部署,告警规则需完善</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>遗留问题</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. SVR-FILE-01磁盘扩容方案和预算待审批</w:t></w:r></w:p>
<w:p><w:r><w:t>2. å¼‚地备份服务器资源待申请</w:t></w:r></w:p>
<w:p><w:r><w:t>3. æ˜¯å¦éœ€è¦å¼•入自动化运维平台(Ansible/Jenkins)?</w:t></w:r></w:p>
<w:p><w:r><w:t>4. AI推理服务器GPU是否需要冗余配置?</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>下次会议</w:t></w:r>
</w:p>
<w:p><w:r><w:t>时间:2026年6月9日</w:t></w:r></w:p>
<w:p><w:r><w:t>主题:运维工作总结与下阶段规划</w:t></w:r></w:p>
</w:body>
</w:wordDocument>
src/main/resources/static/²âÊÔ±¨¸æ.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,553 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>测试报告</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>${docDate}</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading3">
        <w:name w:val="Heading 3"/>
        <w:rPr><w:b/><w:size w:val="22"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>${projectName} æµ‹è¯•报告</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:${projectVersion}</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:${docDate}</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€æµ‹è¯•计划概述 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、测试计划概述</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.1 æµ‹è¯•目标</w:t></w:r>
</w:p>
<w:p><w:r><w:t>确保产品库存管理系统各功能模块符合需求规格,系统运行稳定可靠,性能满足设计要求,为系统上线提供质量保障。</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.2 æµ‹è¯•范围</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${testScope}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.3 æµ‹è¯•方法</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${testMethodology}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.4 æµ‹è¯•周期</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${testCycle}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.5 æµ‹è¯•环境</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${testEnv}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äºŒã€æµ‹è¯•用例 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、测试用例</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="900"/><w:gridCol w:w="1000"/><w:gridCol w:w="2100"/><w:gridCol w:w="1800"/><w:gridCol w:w="1400"/><w:gridCol w:w="800"/><w:gridCol w:w="800"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>用例编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>模块</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>测试内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>预期结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>实际结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>测试人</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list testCases as tc>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${tc.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.module}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.expected}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.actual}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.status}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${tc.tester}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€æµ‹è¯•进度跟踪 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、测试进度跟踪</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1300"/><w:gridCol w:w="2600"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="700"/><w:gridCol w:w="2500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>日期</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>测试内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划数</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成数</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成率</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list progress as p>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${p.date}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.total}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.completed}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.rate}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${p.remark}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€ç¼ºé™·è·Ÿè¸ª -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、缺陷跟踪</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="3000"/><w:gridCol w:w="800"/><w:gridCol w:w="1000"/><w:gridCol w:w="800"/><w:gridCol w:w="1200"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>缺陷描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>严重程度</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>状态</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划修复日</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list defects as d>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${d.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${d.desc}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${d.severity}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${d.owner}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${d.status}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${d.deadline}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、测试统计 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、测试统计</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.1 ç”¨ä¾‹æ‰§è¡Œç»Ÿè®¡</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>用例总数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalCases}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过用例</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${passedCases}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>失败用例</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${failedCases}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>进行中用例</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inProgressCases}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>阻塞用例</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${blockedCases}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过率</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${passRate}</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.2 ç¼ºé™·ç»Ÿè®¡</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/><w:gridCol w:w="2250"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>统计项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>数量</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>缺陷总数</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${totalDefects}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>已修复</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${fixedDefects}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>待处理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${openDefects}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>修复中</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${inProgressDefects}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>严重缺陷</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${criticalDefects}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>一般缺陷</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${majorDefects}</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>轻微缺陷</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${minorDefects}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t/></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…­ã€æµ‹è¯•结论 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>六、测试结论</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.1 ç»¼åˆè¯„ä»·</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${testConclusion}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.2 ä¸Šçº¿å»ºè®®</w:t></w:r>
</w:p>
<w:p><w:r><w:t>${releaseSuggestion}</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸ƒã€å¾…办事项 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>七、待办事项</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>待办内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成时间</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list actionItems as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- æµ‹è¯•评审会议纪要 -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>测试评审会议纪要</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>会议信息</w:t></w:r>
</w:p>
<w:p><w:r><w:t>会议主题:产品库存管理系统测试评审会议</w:t></w:r></w:p>
<w:p><w:r><w:t>会议时间:2026å¹´6月2日 14:00-16:00</w:t></w:r></w:p>
<w:p><w:r><w:t>会议地点:公司会议室</w:t></w:r></w:p>
<w:p><w:r><w:t>主持人:张XX</w:t></w:r></w:p>
<w:p><w:r><w:t>记录人:刘XX</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>参会人员</w:t></w:r>
</w:p>
<w:p><w:r><w:t>张XX(项目经理)、李XX(产品经理)、王XX(后端开发)、赵XX(后端开发)、陈XX(前端开发)、孙XX(AI工程师)、刘XX(测试工程师)</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审内容</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. æµ‹è¯•用例覆盖度评审</w:t></w:r></w:p>
<w:p><w:r><w:t>2. æµ‹è¯•进度与计划偏差分析</w:t></w:r></w:p>
<w:p><w:r><w:t>3. ç¼ºé™·åˆ†æžä¸Žé£Žé™©è¯„ä¼°</w:t></w:r></w:p>
<w:p><w:r><w:t>4. æ€§èƒ½æµ‹è¯•结果评估</w:t></w:r></w:p>
<w:p><w:r><w:t>5. ä¸Šçº¿æ¡ä»¶ç¡®è®¤</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审结论</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审意见</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>测试用例覆盖度</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>核心功能全覆盖,建议补充边界异常场景</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>测试进度</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>整体进度85%,符合计划预期</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>缺陷管理</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>有条件通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>3个严重缺陷需修复后可上线</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>性能测试</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>并发和查询性能满足要求</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>AI功能测试</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>有条件通过</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>语音录入准确率需优化,其他功能达标</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>遗留问题</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. è¯­éŸ³å½•入方言识别优化方案待孙XX确认</w:t></w:r></w:p>
<w:p><w:r><w:t>2. Excel大数据量导出是否需要改异步处理?</w:t></w:r></w:p>
<w:p><w:r><w:t>3. ç›˜ç‚¹å¹¶å‘锁机制是否需要引入分布式锁?</w:t></w:r></w:p>
<w:p><w:r><w:t>4. ç§»åŠ¨ç«¯é€‚é…èŒƒå›´æ˜¯å¦çº³å…¥æœ¬æ¬¡ä¸Šçº¿ï¼Ÿ</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>下次会议</w:t></w:r>
</w:p>
<w:p><w:r><w:t>时间:2026年6月10日</w:t></w:r></w:p>
<w:p><w:r><w:t>主题:第二轮回归测试评审会议</w:t></w:r></w:p>
</w:body>
</w:wordDocument>
src/main/resources/static/ϵͳÉè¼ÆËµÃ÷Êé.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,602 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>系统设计说明书</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>${docDate}</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading3">
        <w:name w:val="Heading 3"/>
        <w:rPr><w:b/><w:size w:val="22"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>${projectName} ç³»ç»Ÿè®¾è®¡è¯´æ˜Žä¹¦</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:${projectVersion}</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:${docDate}</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€è®¾è®¡è¯´æ˜Ž -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、设计说明</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.1 ç¼–写目的</w:t></w:r>
</w:p>
<w:p><w:r><w:t>本文档旨在详细描述产品库存管理系统的系统架构设计、软件框架、服务器配置等技术细节,为开发人员提供技术指导,为运维人员提供部署参考,确保系统的可维护性和可扩展性。</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.2 é¡¹ç›®èƒŒæ™¯</w:t></w:r>
</w:p>
<w:p><w:r><w:t>产品库存管理系统是一套面向企业的综合管理平台,涵盖库存管理、采购销售、质量检测、设备维护、人事协同等核心业务模块,并引入AI技术实现智能化功能,提升企业管理效率和决策水平。</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>1.3 è®¾è®¡åŽŸåˆ™</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• é«˜å¯ç”¨æ€§ï¼šé‡‡ç”¨é›†ç¾¤éƒ¨ç½²ï¼Œç¡®ä¿ç³»ç»Ÿ7x24小时稳定运行</w:t></w:r></w:p>
<w:p><w:r><w:t>• å¯æ‰©å±•性:模块化设计,支持功能灵活扩展</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®‰å…¨æ€§ï¼šå¤šå±‚次安全防护,保障数据安全</w:t></w:r></w:p>
<w:p><w:r><w:t>• é«˜æ€§èƒ½ï¼šä¼˜åŒ–数据库和缓存策略,确保快速响应</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ˜“维护:标准化接口和文档,降低维护成本</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äºŒã€è½¯ä»¶æ¡†æž¶ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、软件框架</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.1 æ•´ä½“æž¶æž„</w:t></w:r>
</w:p>
<w:p><w:r><w:t>系统采用前后端分离的微服务架构,主要分为以下层次:</w:t></w:r></w:p>
<w:p><w:r><w:t>• è¡¨çŽ°å±‚ï¼šVue 3 + Element Plus,提供用户交互界面</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç½‘关层:Nginx反向代理,负载均衡和请求路由</w:t></w:r></w:p>
<w:p><w:r><w:t>• æœåŠ¡å±‚ï¼šSpring Boot微服务,业务逻辑处理</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®å±‚:MySQL主从集群 + Redis缓存</w:t></w:r></w:p>
<w:p><w:r><w:t>• AI服务层:大语言模型API接入,机器学习模型服务</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.2 åŽç«¯æŠ€æœ¯æ ˆ</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>分类</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>技术组件</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list backendTech as t>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.3 å‰ç«¯æŠ€æœ¯æ ˆ</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>分类</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>技术组件</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list frontendTech as t>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.4 AI技术架构</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2500"/><w:gridCol w:w="4000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>分类</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>技术组件</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list aiTech as t>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${t.category}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.component}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>2.5 ç³»ç»Ÿæ¨¡å—设计</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="5000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>模块编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>模块名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list modules as m>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${m.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€æœåŠ¡å™¨é…ç½® -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、服务器配置</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.1 æœåŠ¡å™¨æ‹“æ‰‘</w:t></w:r>
</w:p>
<w:p><w:r><w:t>系统采用分布式部署架构,主要服务器节点包括:</w:t></w:r></w:p>
<w:p><w:r><w:t>• åº”用服务器集群:部署Spring Boot应用,2台以上</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®åº“服务器:MySQL主从架构,主库1台 + ä»Žåº“1台</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç¼“存服务器:Redis哨兵模式,3台</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ–‡ä»¶æœåŠ¡å™¨ï¼šMinIO对象存储,2台</w:t></w:r></w:p>
<w:p><w:r><w:t>• AI推理服务器:GPU服务器,部署机器学习模型</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.2 æœåŠ¡å™¨é…ç½®æ¸…å•</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>服务器名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>CPU</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>内存</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>硬盘</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>操作系统</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list servers as s>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${s.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.cpu}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.memory}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.disk}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${s.os}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.3 ç½‘络架构</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• å¤–网带宽:100Mbps,支持高并发访问</w:t></w:r></w:p>
<w:p><w:r><w:t>• å†…网带宽:千兆以太网,服务器间高速通信</w:t></w:r></w:p>
<w:p><w:r><w:t>• é˜²ç«å¢™ï¼šé…ç½®å®‰å…¨ç»„规则,仅开放必要端口</w:t></w:r></w:p>
<w:p><w:r><w:t>• è´Ÿè½½å‡è¡¡ï¼šNginx实现请求分发,支持健康检查</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.4 å®‰å…¨é…ç½®</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• SSL证书:配置HTTPS,保障数据传输安全</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®åº“安全:内网访问,禁止外网直连</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®šæœŸå¤‡ä»½ï¼šæ¯æ—¥è‡ªåŠ¨å¤‡ä»½æ•°æ®åº“ï¼Œä¿ç•™30天</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ—¥å¿—审计:记录关键操作日志,支持安全审计</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€æ•°æ®åº“设计 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、数据库设计</w:t></w:r>
</wp>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.1 æ•°æ®åº“选型</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• ä¸»æ•°æ®åº“:MySQL 8.0,存储业务数据</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç¼“存数据库:Redis 7.0,缓存热点数据</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ–‡ä»¶å­˜å‚¨ï¼šMinIO,存储文件和附件</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.2 ä¸»è¦æ•°æ®è¡¨</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="6000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>表名</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list tables as t>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${t.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、接口设计 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、接口设计</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.1 æŽ¥å£è§„范</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• æŽ¥å£åè®®ï¼šRESTful API,基于HTTP/HTTPS</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®æ ¼å¼ï¼šJSON</w:t></w:r></w:p>
<w:p><w:r><w:t>• è®¤è¯æ–¹å¼ï¼šJWT Token</w:t></w:r></w:p>
<w:p><w:r><w:t>• æŽ¥å£æ–‡æ¡£ï¼šSwagger / Knife4j</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.2 ä¸»è¦æŽ¥å£åˆ—表</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1500"/><w:gridCol w:w="3000"/><w:gridCol w:w="3000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>请求方式</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>接口路径</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能说明</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list apis as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.method}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.path}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¯„审会议纪要标题 -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>设计评审会议纪要</w:t></w:r>
</w:p>
<!-- ä¼šè®®ä¿¡æ¯ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>会议信息</w:t></w:r>
</w:p>
<w:p><w:r><w:t>会议主题:系统设计评审会议</w:t></w:r></w:p>
<w:p><w:r><w:t>会议时间:2026å¹´X月X日 14:00-17:00</w:t></w:r></w:p>
<w:p><w:r><w:t>会议地点:公司会议室</w:t></w:r></w:p>
<w:p><w:r><w:t>主持人:张XX</w:t></w:r></w:p>
<w:p><w:r><w:t>记录人:李XX</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å‚会人员 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>参会人员</w:t></w:r>
</w:p>
<w:p><w:r><w:t>张XX(项目经理)、李XX(产品经理)、王XX(架构师)、赵XX(后端开发)、陈XX(前端开发)、孙XX(AI工程师)、刘XX(测试工程师)</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¯„审内容 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审内容</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. ç³»ç»Ÿæž¶æž„设计评审</w:t></w:r></w:p>
<w:p><w:r><w:t>2. æ•°æ®åº“设计评审</w:t></w:r></w:p>
<w:p><w:r><w:t>3. æŽ¥å£è®¾è®¡è¯„审</w:t></w:r></w:p>
<w:p><w:r><w:t>4. æœåŠ¡å™¨é…ç½®è¯„å®¡</w:t></w:r></w:p>
<w:p><w:r><w:t>5. AI技术方案评审</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¯„审结论 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审结论</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="4500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审意见</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list reviewItems as r>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${r.item}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.result}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.opinion}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å¾…办事项 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>待办事项</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4500"/><w:gridCol w:w="2000"/><w:gridCol w:w="1500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>待办内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成时间</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list actionItems as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- é—留问题 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>遗留问题</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. æ˜¯å¦éœ€è¦è€ƒè™‘容器化部署(Docker/K8s)?</w:t></w:r></w:p>
<w:p><w:r><w:t>2. AI推理服务器是否需要配置GPU?</w:t></w:r></w:p>
<w:p><w:r><w:t>3. æ•°æ®åº“是否需要分库分表方案?</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‹æ¬¡ä¼šè®® -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>下次会议</w:t></w:r>
</w:p>
<w:p><w:r><w:t>时间:2026年X月X日</w:t></w:r></w:p>
<w:p><w:r><w:t>主题:开发评审会议</w:t></w:r></w:p>
</w:body>
</w:wordDocument>
src/main/resources/static/ÐèÇó˵Ã÷Êé.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,456 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>项目需求说明书</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>${docDate}</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading3">
        <w:name w:val="Heading 3"/>
        <w:rPr><w:b/><w:size w:val="22"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>${projectName} éœ€æ±‚说明书</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:${projectVersion}</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:${docDate}</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€é¡¹ç›®èƒŒæ™¯ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、项目背景</w:t></w:r>
</w:p>
<w:p><w:r><w:t>随着企业业务规模不断扩大,传统的手工记录和Excel管理方式已无法满足日益复杂的库存、采购、销售等业务需求。为提升管理效率、降低人工错误率、实现数据实时共享,企业急需一套数字化、智能化的产品库存管理系统。</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t>本项目旨在构建一个集库存管理、采购销售、质量检测、设备维护、人事协同于一体的综合管理平台,并结合人工智能技术实现智能预警、数据分析等高级功能。</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äºŒã€é¡¹ç›®ç›®æ ‡ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、项目目标</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. å®žçŽ°åº“å­˜å…¨æµç¨‹æ•°å­—åŒ–ç®¡ç†ï¼ŒåŒ…æ‹¬å…¥åº“ã€å‡ºåº“ã€ç›˜ç‚¹ã€é¢„è­¦ç­‰</w:t></w:r></w:p>
<w:p><w:r><w:t>2. å»ºç«‹é‡‡è´­é”€å”®é—­çŽ¯ç®¡ç†ï¼Œä»Žè¯¢ä»·åˆ°å‘è´§å…¨ç¨‹å¯è¿½æº¯</w:t></w:r></w:p>
<w:p><w:r><w:t>3. æž„建质量检测体系,确保产品质量可控可查</w:t></w:r></w:p>
<w:p><w:r><w:t>4. å®žçŽ°è®¾å¤‡å…¨ç”Ÿå‘½å‘¨æœŸç®¡ç†ï¼Œé™ä½Žè®¾å¤‡æ•…éšœçŽ‡</w:t></w:r></w:p>
<w:p><w:r><w:t>5. æ•´åˆäººäº‹ååŒæµç¨‹ï¼Œæå‡åŠžå…¬æ•ˆçŽ‡</w:t></w:r></w:p>
<w:p><w:r><w:t>6. å¼•å…¥AI技术,实现智能预测、智能客服、智能文档处理</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€åŠŸèƒ½éœ€æ±‚ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、功能需求</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.1 åº“存管理模块</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list inventoryFeatures as f>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.2 é‡‡è´­é”€å”®æ¨¡å—</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list purchaseFeatures as f>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.3 è´¨æ£€è®¾å¤‡æ¨¡å—</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list qualityFeatures as f>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.4 äººäº‹ååŒæ¨¡å—</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list staffFeatures as f>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>3.5 AI智能化模块</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1500"/><w:gridCol w:w="3500"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能编号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>功能描述</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list aiFeatures as f>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${f.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${f.desc}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€éžåŠŸèƒ½éœ€æ±‚ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、非功能需求</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.1 æ€§èƒ½éœ€æ±‚</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• é¡µé¢å“åº”时间:普通页面加载时间不超过2秒</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®æŸ¥è¯¢ï¼šå•表查询响应时间不超过1秒</w:t></w:r></w:p>
<w:p><w:r><w:t>• å¹¶å‘支持:系统支持100+用户同时在线操作</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®å¤„理:支持百万级数据量的高效处理</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.2 å®‰å…¨éœ€æ±‚</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• ç”¨æˆ·è®¤è¯ï¼šæ”¯æŒå¤šå› ç´ è®¤è¯ï¼Œç¡®ä¿è´¦æˆ·å®‰å…¨</w:t></w:r></w:p>
<w:p><w:r><w:t>• æƒé™æŽ§åˆ¶ï¼šåŸºäºŽRBAC模型,实现细粒度权限管理</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®åŠ å¯†ï¼šæ•æ„Ÿæ•°æ®é‡‡ç”¨AES加密存储</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ“ä½œæ—¥å¿—:关键操作全程记录,支持审计追溯</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.3 å¯ç”¨æ€§éœ€æ±‚</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• ç³»ç»Ÿå¯ç”¨æ€§ï¼š7x24小时稳定运行,可用性达到99.9%</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®å¤‡ä»½ï¼šæ¯æ—¥è‡ªåŠ¨å¤‡ä»½ï¼Œæ”¯æŒå¿«é€Ÿæ¢å¤</w:t></w:r></w:p>
<w:p><w:r><w:t>• å®¹ç¾èƒ½åŠ›ï¼šæ”¯æŒå¼‚åœ°å®¹ç¾ï¼Œæ•°æ®ä¸ä¸¢å¤±</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>4.4 å…¼å®¹æ€§éœ€æ±‚</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• æµè§ˆå™¨æ”¯æŒï¼šå…¼å®¹Chrome、Edge、Firefox主流浏览器</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç§»åŠ¨ç«¯é€‚é…ï¼šæ ¸å¿ƒåŠŸèƒ½æ”¯æŒç§»åŠ¨ç«¯è®¿é—®</w:t></w:r></w:p>
<w:p><w:r><w:t>• æŽ¥å£æ ‡å‡†ï¼šé‡‡ç”¨RESTful API,支持第三方系统集成</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、用户角色 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、用户角色</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="3000"/><w:gridCol w:w="3500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>角色名称</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>角色描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>主要权限</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list userRoles as r>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${r.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.desc}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.permission}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…­ã€ä¸šåŠ¡æµç¨‹ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>六、业务流程</w:t></w:r>
</w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.1 åº“存入库流程</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. é‡‡è´­è®¢å•到货 â†’ 2. è´¨é‡æ£€éªŒ â†’ 3. æ£€éªŒåˆæ ¼ â†’ 4. åˆ›å»ºå…¥åº“单 â†’ 5. å®¡æ‰¹å…¥åº“ â†’ 6. æ›´æ–°åº“å­˜</w:t></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.2 é”€å”®å‡ºåº“流程</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. é”€å”®è®¢å•创建 â†’ 2. åº“存校验 â†’ 3. è®¢å•审批 â†’ 4. ç”Ÿæˆå‡ºåº“单 â†’ 5. å‘货确认 â†’ 6. æ›´æ–°åº“å­˜</w:t></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>6.3 è®¾å¤‡ä¿å…»æµç¨‹</w:t></w:r>
</wp>
<w:p><w:r><w:t>1. åˆ¶å®šä¿å…»è®¡åˆ’ â†’ 2. å®šæ—¶ä»»åŠ¡è§¦å‘ â†’ 3. æ‰§è¡Œä¿å…»ä»»åŠ¡ â†’ 4. éªŒæ”¶ç¡®è®¤ â†’ 5. è®°å½•å½’æ¡£</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸ƒã€æŠ€æœ¯è¦æ±‚ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>七、技术要求</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• åŽç«¯æ¡†æž¶ï¼šSpring Boot 3.5 + MyBatis-Plus</w:t></w:r></w:p>
<w:p><w:r><w:t>• å‰ç«¯æ¡†æž¶ï¼šVue 3 + Element Plus</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®åº“:MySQL 8.0</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç¼“存:Redis</w:t></w:r></w:p>
<w:p><w:r><w:t>• JDK版本:JDK 25</w:t></w:r></w:p>
<w:p><w:r><w:t>• AI技术:Claude API / OpenAI API(智能客服)</w:t></w:r></w:p>
<w:p><w:r><w:t>• æœºå™¨å­¦ä¹ ï¼šTensorFlow / PyTorch(预测模型)</w:t></w:r></w:p>
<w:p><w:r><w:t>• OCR:百度OCR / Tesseract(文档识别)</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å…«ã€éªŒæ”¶æ ‡å‡† -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>八、验收标准</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="3000"/><w:gridCol w:w="5000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>验收项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>验收标准</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list acceptCriteria as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.item}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.criteria}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¹ã€é™„录 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>九、附录</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• é™„录A:数据库设计文档</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录B:接口设计文档</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录C:UI原型设计</w:t></w:r></w:p>
<w:p><w:r><w:t>• é™„录D:测试用例</w:t></w:r></w:p>
</w:body>
</w:wordDocument>
src/main/resources/static/ÏîÄ¿¼Æ»®Êé.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,356 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
                xmlns:o="urn:schemas-microsoft-com:office:office"
                xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
                xml:space="preserve">
<o:DocumentProperties>
    <o:Title>项目计划书</o:Title>
    <o:Author>系统生成</o:Author>
    <o:Created>${docDate}</o:Created>
</o:DocumentProperties>
<w:fonts>
    <w:defaultFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体"/>
</w:fonts>
<w:styles>
    <w:style w:type="paragraph" w:styleId="title">
        <w:name w:val="Title"/>
        <w:pPr><w:jc w:val="center"/></w:pPr>
        <w:rPr><w:b/><w:size w:val="36"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading1">
        <w:name w:val="Heading 1"/>
        <w:rPr><w:b/><w:size w:val="28"/></w:rPr>
    </w:style>
    <w:style w:type="paragraph" w:styleId="heading2">
        <w:name w:val="Heading 2"/>
        <w:rPr><w:b/><w:size w:val="24"/></w:rPr>
    </w:style>
</w:styles>
<w:body>
<!-- æ ‡é¢˜ -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>${projectName} é¡¹ç›®è®¡åˆ’书</w:t></w:r>
</w:p>
<w:p><w:pPr><w:jc w:val="center"/></w:pPr>
    <w:r><w:t>版本:${projectVersion}</w:t></w:r>
    <w:r><w:t>    </w:t></w:r>
    <w:r><w:t>日期:${docDate}</w:t></w:r>
</w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸€ã€é¡¹ç›®æ¦‚è¿° -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>一、项目概述</w:t></w:r>
</w:p>
<w:p>
    <w:r><w:t>基于若依框架开发的企业级产品库存管理系统,涵盖库存管理、采购、销售、质检、设备、人事等核心业务模块,实现企业数字化管理。</w:t></w:r>
</w:p>
<!-- äºŒã€é‡Œç¨‹ç¢‘计划 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>二、里程碑计划</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="1000"/><w:gridCol w:w="1500"/><w:gridCol w:w="2500"/><w:gridCol w:w="1500"/><w:gridCol w:w="2000"/></w:tblGrid>
    <!-- è¡¨å¤´ -->
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>里程碑</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>阶段内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>详细描述</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>计划时间</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>交付物</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <!-- æ•°æ®è¡Œ -->
    <#list milestones as m>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${m.id}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.time}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${m.deliverable}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
    <!-- AI相关里程碑 -->
    <w:tr>
        <w:tc><w:p><w:r><w:t>M10</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI智能化</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>智能客服、预测分析、OCR识别</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>第23-26周</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI功能模块</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‰ã€äººå‘˜å®‰æŽ’ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>三、人员安排</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/><w:gridCol w:w="4500"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>角色</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>姓名</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>职责</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list team as t>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${t.role}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.name}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${t.duty}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
    <!-- AI相关角色 -->
    <w:tr>
        <w:tc><w:p><w:r><w:t>AI工程师</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>孙XX</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>AI模型训练、智能功能开发</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>数据分析师</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>吴XX</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>数据分析、预测模型构建</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å››ã€æŠ€æœ¯æž¶æž„ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>四、技术架构</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• åŽç«¯æ¡†æž¶ï¼šSpring Boot 3.5 + MyBatis-Plus</w:t></w:r></w:p>
<w:p><w:r><w:t>• å‰ç«¯æ¡†æž¶ï¼šVue 3 + Element Plus</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ•°æ®åº“:MySQL 8.0</w:t></w:r></w:p>
<w:p><w:r><w:t>• ç¼“存:Redis</w:t></w:r></w:p>
<w:p><w:r><w:t>• JDK版本:JDK 25</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- äº”、AI智能化功能 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>五、AI智能化功能</w:t></w:r>
</w:p>
<w:p><w:r><w:t>本项目引入人工智能技术,实现以下智能化功能:</w:t></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.1 AI辅助决策</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• æ™ºèƒ½åº“存预警:基于历史数据预测库存需求,自动生成补货建议</w:t></w:r></w:p>
<w:p><w:r><w:t>• é”€å”®é¢„测分析:利用机器学习算法分析销售趋势,辅助制定销售策略</w:t></w:r></w:p>
<w:p><w:r><w:t>• å¼‚常检测:自动识别异常数据(如异常出入库记录),及时预警</w:t></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.2 æ™ºèƒ½å®¢æœä¸Žäº¤äº’</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• AI智能客服:集成大语言模型,提供7x24小时智能问答服务</w:t></w:r></w:p>
<w:p><w:r><w:t>• è¯­éŸ³è¯†åˆ«å½•入:支持语音转文字,快速录入订单和库存信息</w:t></w:r></w:p>
<w:p><w:r><w:t>• æ™ºèƒ½æ–‡æ¡£å¤„理:OCR识别采购单、发货单等纸质文档,自动录入系统</w:t></w:r></w:p>
<w:p><w:pPr><w:pStyle w:val="heading2"/></w:pPr>
    <w:r><w:t>5.3 AI技术应用架构</w:t></w:r>
</w:p>
<w:p><w:r><w:t>• å¤§è¯­è¨€æ¨¡åž‹ï¼šClaude API / OpenAI API,用于智能问答和文档生成</w:t></w:r></w:p>
<w:p><w:r><w:t>• æœºå™¨å­¦ä¹ æ¡†æž¶ï¼šTensorFlow / PyTorch,用于预测模型训练</w:t></w:r></w:p>
<w:p><w:r><w:t>• OCR引擎:Tesseract / ç™¾åº¦OCR,用于文档识别</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¯„审会议纪要标题 -->
<w:p><w:pPr><w:pStyle w:val="title"/></w:pPr>
    <w:r><w:t>评审会议纪要</w:t></w:r>
</w:p>
<!-- ä¼šè®®ä¿¡æ¯ -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>会议信息</w:t></w:r>
</w:p>
<w:p><w:r><w:t>会议主题:产品库存管理系统需求评审会议</w:t></w:r></w:p>
<w:p><w:r><w:t>会议时间:2026å¹´X月X日 14:00-16:00</w:t></w:r></w:p>
<w:p><w:r><w:t>会议地点:公司会议室</w:t></w:r></w:p>
<w:p><w:r><w:t>主持人:张XX</w:t></w:r></w:p>
<w:p><w:r><w:t>记录人:李XX</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å‚会人员 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>参会人员</w:t></w:r>
</w:p>
<w:p><w:r><w:t>张XX、李XX、王XX、赵XX、陈XX、刘XX</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- è¯„审结论 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>评审结论</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="2500"/><w:gridCol w:w="2000"/><w:gridCol w:w="4000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审项</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>评审结果</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>备注</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list reviewResults as r>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${r.item}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.result}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${r.remark}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- å¾…办事项 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>待办事项</w:t></w:r>
</w:p>
<w:tbl>
    <w:tblPr>
        <w:tblW w:w="9000" w:type="pct"/>
        <w:tblBorders>
            <w:top w:val="single" w:sz="4"/>
            <w:left w:val="single" w:sz="4"/>
            <w:bottom w:val="single" w:sz="4"/>
            <w:right w:val="single" w:sz="4"/>
            <w:insideH w:val="single" w:sz="4"/>
            <w:insideV w:val="single" w:sz="4"/>
        </w:tblBorders>
    </w:tblPr>
    <w:tblGrid><w:gridCol w:w="500"/><w:gridCol w:w="4000"/><w:gridCol w:w="2000"/><w:gridCol w:w="2000"/></w:tblGrid>
    <w:tr>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>序号</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>待办内容</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>负责人</w:t></w:r></w:p>
        </w:tc>
        <w:tc><w:tcPr><w:shd w:val="clear" w:color="auto" w:fill="E7E6E6"/></w:tcPr>
            <w:p><w:r><w:b/><w:t>完成时间</w:t></w:r></w:p>
        </w:tc>
    </w:tr>
    <#list actionItems as a>
    <w:tr>
        <w:tc><w:p><w:r><w:t>${a.no}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.content}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.owner}</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>${a.deadline}</w:t></w:r></w:p></w:tc>
    </w:tr>
    </#list>
    <!-- AI相关待办 -->
    <w:tr>
        <w:tc><w:p><w:r><w:t>4</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>调研AI大模型接口接入方案</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>孙XX</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>X月X日</w:t></w:r></w:p></w:tc>
    </w:tr>
    <w:tr>
        <w:tc><w:p><w:r><w:t>5</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>准备库存预测模型训练数据</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>吴XX</w:t></w:r></w:p></w:tc>
        <w:tc><w:p><w:r><w:t>X月X日</w:t></w:r></w:p></w:tc>
    </w:tr>
</w:tbl>
<w:p><w:r><w:t/></w:r></w:p>
<!-- é—留问题 -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>遗留问题</w:t></w:r>
</w:p>
<w:p><w:r><w:t>1. ç§»åŠ¨ç«¯æ˜¯å¦éœ€è¦åŒæ­¥å¼€å‘ï¼Ÿ</w:t></w:r></w:p>
<w:p><w:r><w:t>2. ä¸ŽçŽ°æœ‰ERP系统的对接范围待确认</w:t></w:r></w:p>
<w:p><w:r><w:t>3. AI智能客服采用自研模型还是第三方API?</w:t></w:r></w:p>
<w:p><w:r><w:t>4. æ•°æ®éšç§ä¸ŽAI数据处理的合规性需评估</w:t></w:r></w:p>
<w:p><w:r><w:t/></w:r></w:p>
<!-- ä¸‹æ¬¡ä¼šè®® -->
<w:p><w:pPr><w:pStyle w:val="heading1"/></w:pPr>
    <w:r><w:t>下次会议</w:t></w:r>
</w:p>
<w:p><w:r><w:t>时间:2026年X月X日</w:t></w:r></w:p>
<w:p><w:r><w:t>主题:设计评审会议</w:t></w:r></w:p>
</w:body>
</w:wordDocument>