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;
|
}
|
}
|