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