From bd2b0e7f3d73f9c559d1e8abaa49ff6a0c8132b6 Mon Sep 17 00:00:00 2001
From: xiayebo <364530740@qq.com>
Date: Tue, 20 Jan 2026 14:40:32 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0=E6=8D=AExm?=
=?UTF-8?q?l=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/模版.md | 103 +++++++++++++++++
.../entity/domain/template/CodeGen.java | 14 +++
.../entity/domain/template/CodeGenType.java | 3 +-
.../domain/template/FunOperationTemp.java | 11 ++
.../entity/enums/TemplateTypeEnum.java | 3 +-
.../flow/template/ControllerCodeCreate.java | 3 +-
.../flow/template/ModuleDataInfoCreate.java | 109 ++++++++++++++++++
.../service/impl/CodeGenServiceImpl.java | 23 +++-
src/main/resources/liteflow/controller.el.xml | 8 +-
9 files changed, 269 insertions(+), 8 deletions(-)
create mode 100644 src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ModuleDataInfoCreate.java
diff --git a/doc/模版.md b/doc/模版.md
index 95304a8..0e90559 100644
--- a/doc/模版.md
+++ b/doc/模版.md
@@ -259,3 +259,106 @@ $operationList:{op |
+## 模块数据
+
+
+
+```xml
+group dbXml;
+
+moduleTemplate(module) ::= <<
+
+
+
+
+ 初始化模块数据
+ $module:{op |
+
+
+
+
+ }$
+
+
+
+>>
+
+itemTemplate(item) ::= <<
+
+
+
+
+ 初始化功能数据
+ $item:{op |
+
+
+
+
+
+
+
+ }$
+
+
+
+>>
+
+
+funTypeAnnotations ::= [
+ "ADD": "0",
+ "DELETE": "1",
+ "EDIT": "2",
+ "QUERY": "3",
+ "UPLOAD": "4",
+ "DOWNLOAD": "5",
+ "IMPORT": "6",
+ "EXPORT": "7",
+ "PRINT": "8",
+ "REGISTER": "9",
+ "LOGIN": "10",
+ "LOGOUT": "11",
+ "SMS": "12",
+ "EMAIL": "13",
+ "WECHAT": "14",
+ "OTHER": "99"
+ default: "-1"
+]
+operationTemplate(operation) ::= <<
+
+
+
+
+ 初始化操作数据
+ $operation:{op |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }$
+
+
+
+>>
+```
+
diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGen.java b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGen.java
index dc325b0..84a3c37 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGen.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGen.java
@@ -29,6 +29,9 @@ public class CodeGen implements Serializable {
@Schema(description = "功能ID")
private Long itemId;
+ @Schema(description = "模块ID")
+ private Long moduleId;
+
@Hidden
@AssertTrue(message = "当代码生成类型为 CONTROLLER 时,功能ID不能为空")
@@ -39,4 +42,15 @@ public class CodeGen implements Serializable {
return true;
}
+ @Hidden
+ @AssertTrue(message = "当代码生成类型为 MODULE_DATA_INFO 时,模块ID不能为空")
+ public boolean isModuleIdValid() {
+ if (codeGenType == CodeGenType.MODULE_DATA_INFO) {
+ return moduleId != null;
+ }
+ return true;
+ }
+
+
+
}
diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGenType.java b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGenType.java
index 98c0862..8eea7e8 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGenType.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/CodeGenType.java
@@ -14,7 +14,8 @@ import lombok.Getter;
@Getter
public enum CodeGenType {
- CONTROLLER(0, "controller");
+ CONTROLLER(0, "controller"),
+ MODULE_DATA_INFO(1, "module_data_info");
private final int code;
private final String desc;
diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/FunOperationTemp.java b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/FunOperationTemp.java
index 4603118..ac388f0 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/FunOperationTemp.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/entity/domain/template/FunOperationTemp.java
@@ -1,5 +1,6 @@
package com.cczsa.xinghe.codegen.entity.domain.template;
+import com.alibaba.fastjson2.JSONObject;
import com.cczsa.xinghe.codegen.entity.FunOperationEntity;
import com.cczsa.xinghe.codegen.util.StringUtils;
import lombok.Data;
@@ -42,6 +43,14 @@ public class FunOperationTemp extends FunOperationEntity {
* 路径参数 url入参
*/
private String pathParamsUrl;
+ /**
+ * usableConfig 转成字符串
+ */
+ private String usableConfigJson;
+ /**
+ * fieldConfig 转成字符串
+ */
+ private String fieldConfigJson;
public void info(){
@@ -54,6 +63,8 @@ public class FunOperationTemp extends FunOperationEntity {
pathParamsLong = "@PathVariable(\""+this.getPathParams()+"\") Long "+this.getPathParams();
pathParamsUrl = "/{"+this.getPathParams()+"}";
}
+ usableConfigJson = JSONObject.toJSONString(this.getUsableConfig());
+ fieldConfigJson = JSONObject.toJSONString(this.getFieldConfig()).replace("\"", "'");;
}
diff --git a/src/main/java/com/cczsa/xinghe/codegen/entity/enums/TemplateTypeEnum.java b/src/main/java/com/cczsa/xinghe/codegen/entity/enums/TemplateTypeEnum.java
index a8a6d04..f44565c 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/entity/enums/TemplateTypeEnum.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/entity/enums/TemplateTypeEnum.java
@@ -24,7 +24,8 @@ public enum TemplateTypeEnum {
REQUEST_PARAM(1, "请求参数"),
RESPONSE_PARAM(2, "响应参数"),
SERVICE(3, "服务接口"),
- SERVICE_IMPL(4, "服务实现");
+ SERVICE_IMPL(4, "服务实现"),
+ MODULE_DATA_INFO(5, "模块功能操作数据生成");
private final int code;
private final String desc;
diff --git a/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ControllerCodeCreate.java b/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ControllerCodeCreate.java
index 31fc680..df7d872 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ControllerCodeCreate.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ControllerCodeCreate.java
@@ -169,6 +169,7 @@ public class ControllerCodeCreate extends NodeComponent {
case RESPONSE_PARAM -> "Res.java";
case SERVICE -> "Service.java";
case SERVICE_IMPL -> "ServiceImpl.java";
+ default -> throw new IllegalArgumentException("Invalid template type: " + templateType);
};
}
@@ -176,7 +177,7 @@ public class ControllerCodeCreate extends NodeComponent {
* 设置模板数据
*
* @param classTemplate 模板对象
- * @param basics
+ * @param basics 基础信息
*/
private void setTemplateData(ST classTemplate, Map basics) {
classTemplate.add("item", itemEntity);
diff --git a/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ModuleDataInfoCreate.java b/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ModuleDataInfoCreate.java
new file mode 100644
index 0000000..de7c54c
--- /dev/null
+++ b/src/main/java/com/cczsa/xinghe/codegen/service/flow/template/ModuleDataInfoCreate.java
@@ -0,0 +1,109 @@
+package com.cczsa.xinghe.codegen.service.flow.template;
+
+import com.cczsa.xinghe.codegen.entity.FunItemEntity;
+import com.cczsa.xinghe.codegen.entity.FunModuleEntity;
+import com.cczsa.xinghe.codegen.entity.FunOperationEntity;
+import com.cczsa.xinghe.codegen.entity.domain.template.FunOperationTemp;
+import com.cczsa.xinghe.codegen.entity.enums.TemplateTypeEnum;
+import com.cczsa.xinghe.codegen.mapper.FunItemMapper;
+import com.cczsa.xinghe.codegen.mapper.FunModuleMapper;
+import com.cczsa.xinghe.codegen.mapper.FunOperationMapper;
+import com.cczsa.xinghe.codegen.service.TemplateService;
+import com.mybatisflex.core.query.QueryWrapper;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.stringtemplate.v4.ST;
+import org.stringtemplate.v4.STGroup;
+import org.stringtemplate.v4.STGroupString;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Comparator;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * @author xia
+ * @date 2026/1/20
+ * @version 0.0.1
+ */
+@Slf4j
+@RequiredArgsConstructor
+@LiteflowComponent(id = "moduleDataInfo", name = "模块权限相关数据生成")
+public class ModuleDataInfoCreate extends NodeComponent {
+
+ private final FunModuleMapper funModuleMapper;
+ private final FunItemMapper funItemMapper;
+ private final FunOperationMapper funOperationMapper;
+ private final TemplateService templateService;
+
+ // 压缩流
+ private ZipOutputStream zos;
+
+
+ @Override
+ public void process() throws Exception {
+ Long moduleId = this.getContextBean(Long.class);
+
+ FunModuleEntity moduleEntity = funModuleMapper.selectOneById(moduleId);
+ if (moduleEntity == null){
+ return;
+ }
+
+ // 获取 模版
+ String template = templateService.getTemplateTypeContent(TemplateTypeEnum.MODULE_DATA_INFO);
+ if (template == null){
+ return;
+ }
+
+ // 流
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ zos = new ZipOutputStream(outputStream);
+
+ // 生成
+ STGroup group = new STGroupString("dbXml",template, '$', '$');
+ ST moduleTemplate = group.getInstanceOf("moduleTemplate"); // 使用正确的模板名称
+ // 模块数据生成
+ List funModuleEntities = funModuleMapper.selectAll();
+ // funModuleEntities 按 id 升序排序
+ funModuleEntities.sort(Comparator.comparing(FunModuleEntity::getId));
+ moduleTemplate.add("module", funModuleEntities);
+ writeCodeToZip(moduleTemplate,"module");
+
+ ST itemTemplate = group.getInstanceOf("itemTemplate"); // 使用正确的模板名称
+ // 功能数据生成
+ List funItemEntities = funItemMapper.selectAll();
+ funItemEntities.sort(Comparator.comparing(FunItemEntity::getId));
+ itemTemplate.add("item", funItemEntities);
+ writeCodeToZip(itemTemplate,"item");
+
+ ST operationTemplate = group.getInstanceOf("operationTemplate"); // 使用正确的模板名称
+ // 操作数据生成
+ List funOperationEntities = funOperationMapper.selectListByQueryAs(QueryWrapper.create(),FunOperationTemp.class);
+ funOperationEntities.sort(Comparator.comparing(FunOperationEntity::getId));
+ funOperationEntities.forEach(FunOperationTemp::info);
+ operationTemplate.add("operation", funOperationEntities);
+ writeCodeToZip(operationTemplate,"operation");
+
+ // 确保 ZIP 流结束
+ zos.finish();
+ // 返回数据
+ this.getSlot().setResponseData(outputStream.toByteArray());
+ }
+
+ private void writeCodeToZip(ST st,String fileName) throws IOException {
+ // 生成代码
+ String result = st.render();
+ // insert-ms-fun-operation-data.xml
+ ZipEntry entry = new ZipEntry("insert-"+ fileName +"-data.xml");
+ zos.putNextEntry(entry);
+ zos.write(result.getBytes(StandardCharsets.UTF_8));
+ zos.closeEntry();
+ }
+
+
+}
diff --git a/src/main/java/com/cczsa/xinghe/codegen/service/impl/CodeGenServiceImpl.java b/src/main/java/com/cczsa/xinghe/codegen/service/impl/CodeGenServiceImpl.java
index 5bead73..0ce4f24 100644
--- a/src/main/java/com/cczsa/xinghe/codegen/service/impl/CodeGenServiceImpl.java
+++ b/src/main/java/com/cczsa/xinghe/codegen/service/impl/CodeGenServiceImpl.java
@@ -1,6 +1,7 @@
package com.cczsa.xinghe.codegen.service.impl;
import com.cczsa.xinghe.codegen.entity.FunItemEntity;
+import com.cczsa.xinghe.codegen.entity.FunModuleEntity;
import com.cczsa.xinghe.codegen.entity.domain.template.CodeGen;
import com.cczsa.xinghe.codegen.entity.domain.template.CodeGenType;
import com.cczsa.xinghe.codegen.mapper.FunItemMapper;
@@ -33,12 +34,26 @@ public class CodeGenServiceImpl implements CodeGenService {
@Override
public byte[] generateCodeZip(CodeGen req) {
+ Long id = null;
+ if(req.getCodeGenType() == CodeGenType.CONTROLLER){
+ FunItemEntity funItemEntity = funItemMapper.selectOneById(req.getItemId());
+ if (funItemEntity == null) {
+ return null;
+ }
+ id = req.getItemId();
+ }
- FunItemEntity funItemEntity = funItemMapper.selectOneById(req.getItemId());
- if(req.getCodeGenType() == CodeGenType.CONTROLLER && funItemEntity != null){
- LiteflowResponse response = flowExecutor.execute2Resp("controller",null,req.getItemId());
+ if(req.getCodeGenType() == CodeGenType.MODULE_DATA_INFO){
+ FunModuleEntity funModuleEntity = funModuleMapper.selectOneById(req.getModuleId());
+ if (funModuleEntity == null) {
+ return null;
+ }
+ id = req.getModuleId();
+ }
+
+ if(id != null){
+ LiteflowResponse response = flowExecutor.execute2Resp(req.getCodeGenType().getDesc(),null,id);
log.info("执行结果:{}",response);
-
if (response.isSuccess()) {
return (byte[]) response.getSlot().getResponseData();
}
diff --git a/src/main/resources/liteflow/controller.el.xml b/src/main/resources/liteflow/controller.el.xml
index 6f599e5..a941c12 100644
--- a/src/main/resources/liteflow/controller.el.xml
+++ b/src/main/resources/liteflow/controller.el.xml
@@ -1,7 +1,13 @@
-
+
THEN(controllerCodeCreate);
+
+
+
+ THEN(moduleDataInfo);
+
+
\ No newline at end of file