2026-06-09 f818fa5eca223270f0656e0455c338ec1f2fac88
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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;
    }
}