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 data = new HashMap<>(); // 项目基本信息 data.put("projectName", "产品库存管理系统"); data.put("projectVersion", "V1.0"); data.put("docDate", "2026年6月"); // 里程碑列表 List> 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> 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> reviewResults = new ArrayList<>(); reviewResults.add(createReviewResult("需求完整性", "通过", "核心功能已明确")); reviewResults.add(createReviewResult("技术可行性", "通过", "技术栈成熟稳定")); reviewResults.add(createReviewResult("进度合理性", "通过", "里程碑划分清晰")); reviewResults.add(createReviewResult("资源配置", "通过", "人员分工明确")); data.put("reviewResults", reviewResults); // 待办事项 List> 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 createMilestone(String id, String name, String content, String time, String deliverable) { Map 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 createTeamMember(String role, String name, String duty) { Map map = new HashMap<>(); map.put("role", role); map.put("name", name); map.put("duty", duty); return map; } private static Map createReviewResult(String item, String result, String remark) { Map map = new HashMap<>(); map.put("item", item); map.put("result", result); map.put("remark", remark); return map; } private static Map createActionItem(String no, String content, String owner, String deadline) { Map map = new HashMap<>(); map.put("no", no); map.put("content", content); map.put("owner", owner); map.put("deadline", deadline); return map; } }