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 data = new HashMap<>(); // 项目基本信息 data.put("projectName", "产品库存管理系统"); data.put("projectVersion", "V1.0"); data.put("docDate", "2026年6月"); // 后端技术栈 List> 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> 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> 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> 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> 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> 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> 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> 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> 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 createTech(String category, String component, String desc) { Map map = new HashMap<>(); map.put("category", category); map.put("component", component); map.put("desc", desc); return map; } private static Map createModule(String id, String name, String desc) { Map map = new HashMap<>(); map.put("id", id); map.put("name", name); map.put("desc", desc); return map; } private static Map createServer(String name, String cpu, String memory, String disk, String os) { Map 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 createTable(String name, String desc) { Map map = new HashMap<>(); map.put("name", name); map.put("desc", desc); return map; } private static Map createApi(String no, String method, String path, String desc) { Map map = new HashMap<>(); map.put("no", no); map.put("method", method); map.put("path", path); map.put("desc", desc); return map; } private static Map createReviewItem(String item, String result, String opinion) { Map map = new HashMap<>(); map.put("item", item); map.put("result", result); map.put("opinion", opinion); 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; } }