diff --git a/http-client.env.json b/http-client.env.json
index d0f084ce..a56b3dce 100644
--- a/http-client.env.json
+++ b/http-client.env.json
@@ -1,8 +1,10 @@
{
"local": {
- "baseUrl": "http://127.0.0.1:9200/orion-api"
+ "baseUrl": "http://127.0.0.1:9200/orion-api",
+ "token": "Bearer 1"
},
"gateway": {
- "baseUrl": "http://127.0.0.1:9200/orion-api"
+ "baseUrl": "http://127.0.0.1:9200/orion-api",
+ "token": "Bearer 1"
}
}
diff --git a/orion-ops-framework/orion-ops-common/pom.xml b/orion-ops-framework/orion-ops-common/pom.xml
index efbf7aad..98efac38 100644
--- a/orion-ops-framework/orion-ops-common/pom.xml
+++ b/orion-ops-framework/orion-ops-common/pom.xml
@@ -22,11 +22,13 @@
orion-all
+
org.projectlombok
lombok
+
org.aspectj
aspectjweaver
@@ -72,11 +74,16 @@
provided
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
org.springdoc
springdoc-openapi-ui
- provided
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/AutoConfigureOrderConst.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/AutoConfigureOrderConst.java
index 819f2fcd..a5a6e09c 100644
--- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/AutoConfigureOrderConst.java
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/AutoConfigureOrderConst.java
@@ -2,6 +2,8 @@ package com.orion.ops.framework.common.constant;
/**
* 自动装配排序常量
+ *
+ * 实际遵循 DependsOn
*
* @author Jiahang Li
* @version 1.0.0
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
index e80c29d3..be9fbe3b 100644
--- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
@@ -2,6 +2,7 @@ package com.orion.ops.framework.common.constant;
import com.orion.lang.define.wrapper.CodeInfo;
import com.orion.lang.define.wrapper.HttpWrapper;
+import com.orion.lang.utils.Exceptions;
/**
* 错误码
@@ -69,6 +70,10 @@ public enum ErrorCode implements CodeInfo {
DIABLED_ERROR(715, "数据已被禁用"),
+ DATA_PRESENT(716, "数据已存在"),
+
+ DATA_ABESENT(717, "数据不存在"),
+
;
ErrorCode(int code, String message) {
@@ -127,4 +132,11 @@ public enum ErrorCode implements CodeInfo {
return wrapper;
}
+ /**
+ * @return 获取异常
+ */
+ public RuntimeException exception() {
+ return Exceptions.httpWrapper(this);
+ }
+
}
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java
index 455716f3..ef3f3999 100644
--- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java
@@ -11,4 +11,6 @@ public interface ErrorMessage {
String PARAM_MISSING = "{} 不能为空";
+ String ID_MISSING = "id 不能为空";
+
}
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/entity/PageRequest.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/entity/PageRequest.java
new file mode 100644
index 00000000..0b2e0589
--- /dev/null
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/entity/PageRequest.java
@@ -0,0 +1,27 @@
+package com.orion.ops.framework.common.entity;
+
+import com.orion.lang.define.wrapper.IPageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ * 公共页码请求
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2023/7/12 23:14
+ */
+@Data
+public class PageRequest implements IPageRequest {
+
+ // TODO TEST
+ @Range(min = 1, max = 10000)
+ @Schema(description = "页码")
+ private int page;
+
+ @Range(min = 1, max = 100)
+ @Schema(description = "大小")
+ private int limit;
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java
index 25bb75c7..96c57039 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/CodeGenerator.java
@@ -17,6 +17,9 @@ import com.orion.ops.framework.mybatis.core.mapper.IMapper;
import org.apache.ibatis.annotations.Mapper;
import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* 代码生成器
@@ -90,7 +93,7 @@ public class CodeGenerator {
.injection(injectionConfig);
// 执行
- ag.execute();
+ ag.execute(new VelocityTemplateEngine());
}
/**
@@ -254,11 +257,11 @@ public class CodeGenerator {
private static TemplateConfig getTemplateConfig() {
TemplateConfig tplConfig = new TemplateConfig.Builder()
.controller("/templates/orion-controller.java.vm")
- .entity("/templates/orion-domain.java.vm")
+ .entity("/templates/orion-entity-do.java.vm")
.service("/templates/orion-service.java.vm")
.serviceImpl("/templates/orion-service-impl.java.vm")
- .mapper("/templates/orion-dao.java.vm")
- .xml("/templates/orion-mapper.xml")
+ .mapper("/templates/orion-mapper.java.vm")
+ .xml("/templates/orion-mapper.xml.vm")
.build();
return tplConfig;
}
@@ -269,48 +272,42 @@ public class CodeGenerator {
* @return 注入配置
*/
private static InjectionConfig getInjectionConfig() {
- // vo 文件
- CustomFile voFile = new CustomFile.Builder()
- .enableFileOverride()
- .templatePath("/templates/orion-vo.java.vm")
- .fileName("VO.java")
- .packageName("vo")
- .build();
+ String[][] customFileDefineArr = new String[][]{
+ // vo 文件
+ new String[]{"/templates/orion-entity-vo.java.vm", "%sVO.java", "entity.vo"},
+ // dto 文件
+ new String[]{"/templates/orion-entity-dto.java.vm", "%sDTO.java", "entity.dto"},
+ // create request 文件
+ new String[]{"/templates/orion-entity-request-create.java.vm", "%sCreateRequest.java", "entity.request"},
+ // update request 文件
+ new String[]{"/templates/orion-entity-request-update.java.vm", "%sUpdateRequest.java", "entity.request"},
+ // query request 文件
+ new String[]{"/templates/orion-entity-request-query.java.vm", "%sQueryRequest.java", "entity.request"},
+ // convert 文件
+ new String[]{"/templates/orion-convert.java.vm", "%sConvert.java", "convert"},
+ // convert provider 文件
+ new String[]{"/templates/orion-convert-provider.java.vm", "%sProviderConvert.java", "convert"},
+ };
- // dto 文件
- CustomFile dtoFile = new CustomFile.Builder()
- .enableFileOverride()
- .templatePath("/templates/orion-dto.java.vm")
- .fileName("DTO.java")
- .packageName("dto")
- .build();
-
- // request 文件
- CustomFile requestFile = new CustomFile.Builder()
- .enableFileOverride()
- .templatePath("/templates/orion-request.java.vm")
- .fileName("Request.java")
- .packageName("request")
- .build();
-
- // convert 文件
- CustomFile convertFile = new CustomFile.Builder()
- .enableFileOverride()
- .templatePath("/templates/orion-convert.java.vm")
- .fileName("Convert.java")
- .packageName("convert")
- .build();
+ // 构建文件
+ List customerFiles = Arrays.stream(customFileDefineArr)
+ .map(s -> {
+ return new CustomFile.Builder()
+ // 覆盖文件
+ .enableFileOverride()
+ // 模板路径
+ .templatePath(s[0])
+ // 文件名
+ .fileName(s[1])
+ // 包名
+ .packageName(s[2])
+ .build();
+ }).collect(Collectors.toList());
// 注入配置
InjectionConfig injection = new InjectionConfig.Builder()
- // vo 文件
- .customFile(voFile)
- // dto 文件
- .customFile(dtoFile)
- // request 文件
- .customFile(requestFile)
- // convert 文件
- .customFile(convertFile)
+ // 自定义 文件
+ .customFile(customerFiles)
// 构建
.build();
return injection;
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/VelocityTemplateEngine.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/VelocityTemplateEngine.java
new file mode 100644
index 00000000..859fdd2a
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/VelocityTemplateEngine.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2011-2022, baomidou (jobob@qq.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.orion.ops.framework.mybatis.core.generator;
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.config.ConstVal;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
+import com.baomidou.mybatisplus.generator.config.builder.CustomFile;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
+import com.orion.lang.define.Console;
+import com.orion.lang.utils.Strings;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * 代码生成器 Velocity 引擎
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2022/4/20 10:33
+ */
+public class VelocityTemplateEngine extends AbstractTemplateEngine {
+
+ private VelocityEngine velocityEngine;
+
+ {
+ try {
+ Class.forName("org.apache.velocity.util.DuckType");
+ } catch (ClassNotFoundException e) {
+ LOGGER.warn("Velocity 1.x is outdated, please upgrade to 2.x or later.");
+ }
+ }
+
+ @Override
+ @NotNull
+ public VelocityTemplateEngine init(@NotNull ConfigBuilder configBuilder) {
+ if (null == velocityEngine) {
+ Properties p = new Properties();
+ p.setProperty(ConstVal.VM_LOAD_PATH_KEY, ConstVal.VM_LOAD_PATH_VALUE);
+ p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, StringPool.EMPTY);
+ p.setProperty(Velocity.ENCODING_DEFAULT, ConstVal.UTF8);
+ p.setProperty(Velocity.INPUT_ENCODING, ConstVal.UTF8);
+ p.setProperty("file.resource.loader.unicode", StringPool.TRUE);
+ velocityEngine = new VelocityEngine(p);
+ }
+ return this;
+ }
+
+ @Override
+ public void writer(@NotNull Map objectMap, @NotNull String templatePath, @NotNull File outputFile) throws Exception {
+ Template template = velocityEngine.getTemplate(templatePath, ConstVal.UTF8);
+ try (FileOutputStream fos = new FileOutputStream(outputFile);
+ OutputStreamWriter ow = new OutputStreamWriter(fos, ConstVal.UTF8);
+ BufferedWriter writer = new BufferedWriter(ow)) {
+ template.merge(new VelocityContext(objectMap), writer);
+ }
+ LOGGER.debug("模板:" + templatePath + "; 文件:" + outputFile);
+ }
+
+ @Override
+ @NotNull
+ public String templateFilePath(@NotNull String filePath) {
+ final String dotVm = ".vm";
+ return filePath.endsWith(dotVm) ? filePath : filePath + dotVm;
+ }
+
+
+ /**
+ * 输出自定义模板文件
+ *
+ * @param customFiles 自定义模板文件列表
+ * @param tableInfo 表信息
+ * @param objectMap 渲染数据
+ * @since 3.5.3
+ */
+ @Override
+ protected void outputCustomFile(@NotNull List customFiles, @NotNull TableInfo tableInfo, @NotNull Map objectMap) {
+ String domainName = tableInfo.getEntityName();
+ String mappingHyphen = objectMap.get("controllerMappingHyphen").toString();
+ // 实际实体名称
+ String entityName = domainName.substring(0, domainName.length() - 2);
+ objectMap.put("type", entityName);
+ objectMap.put("typeLower", Strings.firstLower(entityName));
+ objectMap.put("typeHyphen", mappingHyphen.substring(0, mappingHyphen.length() - 3));
+
+ // 自定义文件的包
+ List customFilePackages = customFiles.stream()
+ .filter(s -> s.getTemplatePath().contains(".java.vm"))
+ .map(CustomFile::getPackageName)
+ .map(s -> getConfigBuilder().getPackageConfig().getParent() + "." + s)
+ .distinct()
+ .collect(Collectors.toList());
+ // 设置导入的包
+ objectMap.put("customFilePackages", customFilePackages);
+
+ // 生成文件
+ String parentPath = getPathInfo(OutputFile.parent);
+ customFiles.forEach(file -> {
+ // 获取 parent package
+ String currentPackage = getConfigBuilder().getPackageConfig().getParent() + "." + file.getPackageName();
+ // 设置当前包
+ objectMap.put("currentPackage", currentPackage);
+ objectMap.forEach(Console::trace);
+
+ // 文件路径
+ String filePath = StringUtils.isNotBlank(file.getFilePath()) ? file.getFilePath() : parentPath;
+ if (StringUtils.isNotBlank(file.getPackageName())) {
+ filePath = filePath + File.separator + file.getPackageName();
+ filePath = filePath.replaceAll("\\.", StringPool.BACK_SLASH + File.separator);
+ }
+ String fileName = filePath + File.separator + String.format(file.getFileName(), entityName);
+ outputFile(new File(fileName), objectMap, file.getTemplatePath(), file.isFileOverride());
+ });
+ }
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java
index 4ae416b0..b24c9e5d 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java
@@ -3,7 +3,7 @@ package com.orion.ops.framework.mybatis.core.query;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.orion.lang.define.wrapper.DataGrid;
-import com.orion.lang.define.wrapper.PageRequest;
+import com.orion.lang.define.wrapper.IPageRequest;
import com.orion.lang.define.wrapper.Pager;
import com.orion.lang.utils.Valid;
import com.orion.lang.utils.collect.Lists;
@@ -25,7 +25,7 @@ public class DataQuery {
private final BaseMapper dao;
- private PageRequest page;
+ private IPageRequest page;
private LambdaQueryWrapper wrapper;
@@ -38,7 +38,7 @@ public class DataQuery {
return new DataQuery<>(dao);
}
- public DataQuery page(PageRequest page) {
+ public DataQuery page(IPageRequest page) {
this.page = Valid.notNull(page, "page is null");
return this;
}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm
index 46722c0f..4ed0dca3 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm
@@ -1,19 +1,24 @@
package ${package.Controller};
+import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.framework.common.annotation.RestWrapper;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
- #if(${restControllerStyle})
- import org.springframework.web.bind.annotation.RestController;
- #else
- import org.springframework.stereotype.Controller;
+import ${package.Service}.*;
+ #foreach($pkg in ${customFilePackages})
+ import ${pkg}.*;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
/**
* $!{table.comment} api
@@ -26,21 +31,70 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Validated
@RestWrapper
- #if(${restControllerStyle})
- @RestController
- #else
- @Controller
- #end
-@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
-#if(${kotlin})
-class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
-
+@RestController
+@RequestMapping("/${package.ModuleName}/${typeHyphen}")
+@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"})
+#if(${superControllerClass})
+public class ${table.controllerName} extends ${superControllerClass} {
#else
- #if(${superControllerClass})
- public class ${table.controllerName} extends ${superControllerClass} {
- #else
- public class ${table.controllerName} {
- #end
+public class ${table.controllerName} {
+#end
+
+@Resource
+private ${type}Service ${typeLower}Service;
+
+@PostMapping("/create")
+@Operation(summary = "创建$!{table.comment}")
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:create')")
+public Long create${type}(@Validated ${type}CreateRequest request){
+ return ${typeLower}Service.create${type}(request);
+ }
+
+@PutMapping("/update")
+@Operation(summary = "更新$!{table.comment}")
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:update')")
+public Integer update${type}(@Validated ${type}UpdateRequest request){
+ return ${typeLower}Service.update${type}(request);
+ }
+
+@GetMapping("/get")
+@Operation(summary = "通过id查询$!{table.comment}")
+@Parameter(name = "id", description = "id", required = true)
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:query')")
+public ${type}VO get${type}(@RequestParam("id") Long id){
+ return ${typeLower}Service.get${type}(id);
+ }
+
+@GetMapping("/list")
+@Operation(summary = "通过id批量查询$!{table.comment}")
+@Parameter(name = "idList", description = "idList", required = true)
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:query')")
+public List<${type}VO> get${type}List(@RequestParam("idList") List idList){
+ return ${typeLower}Service.get${type}List(idList);
+ }
+
+@PostMapping("/query")
+@Operation(summary = "分页查询$!{table.comment}")
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:query')")
+public DataGrid<${type}VO> get${type}Page(@Validated @RequestBody ${type}QueryRequest request){
+ return ${typeLower}Service.get${type}Page(request);
+ }
+
+@PutMapping("/delete")
+@Operation(summary = "删除$!{table.comment}")
+@Parameter(name = "id", description = "id", required = true)
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:delete')")
+public Integer delete${type}(@RequestParam("id") Long id){
+ return ${typeLower}Service.delete${type}(id);
+ }
+
+@PutMapping("/delete-batch")
+@Operation(summary = "批量删除$!{table.comment}")
+@Parameter(name = "idList", description = "idList", required = true)
+@PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:delete')")
+public Integer batchDelete${type}(@RequestParam("idList") List idList){
+ return ${typeLower}Service.batchDelete${type}(idList);
+ }
}
-#end
+
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert-provider.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert-provider.java.vm
new file mode 100644
index 00000000..92fcc53e
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert-provider.java.vm
@@ -0,0 +1,32 @@
+package ${currentPackage};
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+import ${package.Entity}.*;
+ #foreach($pkg in ${customFilePackages})
+ import ${pkg}.*;
+ #end
+import java.util.List;
+
+/**
+ * $!{table.comment} 暴露服务转换器
+ *
+ * @author ${author}
+ * @version 1.0.0
+ * @since ${date}
+ */
+@Mapper
+@SuppressWarnings("ALL")
+public interface ${type}ProviderConvert {
+
+ ${type}ProviderConvert MAPPER = Mappers.getMapper(${type}ProviderConvert.class);
+
+ ${type}DO to(${type}DTO dto);
+
+ ${type}DTO to(${type}DO dto);
+
+ List<${type}DO> toDO(List<${type}DTO> list);
+
+ List<${type}DTO> toDTO(List<${type}DO> list);
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert.java.vm
index ef3e5b5b..a8e9cf4e 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert.java.vm
@@ -1,12 +1,15 @@
-package ${package.Entity};
+package ${currentPackage};
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
-
+import ${package.Entity}.*;
+ #foreach($pkg in ${customFilePackages})
+ import ${pkg}.*;
+ #end
import java.util.List;
/**
- * $!{table.comment} 转换器
+ * $!{table.comment} 内部对象转换器
*
* @author ${author}
* @version 1.0.0
@@ -14,28 +17,18 @@ import java.util.List;
*/
@Mapper
@SuppressWarnings("ALL")
-public interface ${entity}Convert {
+public interface ${type}Convert {
- ${entity}Convert MAPPER = Mappers.getMapper(${entity}Convert.class);
+ ${type}Convert MAPPER = Mappers.getMapper(${type}Convert.class);
- ${entity} toDomain(${entity}Request request);
+ ${type}DO to(${type}CreateRequest request);
- ${entity}DTO toDto(${entity}Request request);
+ ${type}DO to(${type}UpdateRequest request);
- ${entity}VO toVo(${entity} domain);
+ ${type}DO to(${type}QueryRequest request);
- ${entity}DTO toDto(${entity} domain);
+ ${type}VO to(${type}DO request);
- List<${entity}VO> toVoListForDomain(List<${entity}> domain);
-
- List<${entity}DTO> toDtoListForDomain(List<${entity}> domain);
-
- ${entity}VO toVo(${entity}DTO dto);
-
- ${entity} toDto(${entity}DTO dto);
-
- List<${entity}VO> toVoListForDto(List<${entity}DTO> dto);
-
- List<${entity}> toDoListForDto(List<${entity}DTO> dto);
+ List<${type}VO> to(List<${type}DO> list);
}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-domain.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-domain.java.vm
deleted file mode 100644
index 28a3d70a..00000000
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-domain.java.vm
+++ /dev/null
@@ -1,164 +0,0 @@
-package ${package.Entity};
-
-#foreach($pkg in ${table.importPackages})
-import ${pkg};
-#end
-#if(${springdoc})
-import io.swagger.v3.oas.annotations.media.Schema;
-#elseif(${swagger})
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-#end
-#if(${entityLombokModel})
-import lombok.Data;
-import lombok.EqualsAndHashCode;
- #if(${chainModel})
- import lombok.experimental.Accessors;
- #end
-#end
-
-/**
- * $!{table.comment}
- *
- * @author ${author}
- * @version 1.0.0
- * @since ${date}
- */
-#if(${entityLombokModel})
-@Data
-@EqualsAndHashCode(callSuper = true)
- #if(${chainModel})
- @Accessors(chain = true)
- #end
-#end
-#if(${table.convert})
-@TableName("${schemaName}${table.name}")
-#end
-#if(${springdoc})
-@Schema(name = "${entity}", description = "$!{table.comment}")
-#elseif(${swagger})
-@ApiModel(value = "${entity}对象", description = "$!{table.comment}")
-#end
-#if(${superEntityClass})
-public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
-#elseif(${activeRecord})
-public class ${entity} extends Model<${entity}> {
-#elseif(${entitySerialVersionUID})
-public class ${entity} implements Serializable{
-#else
-public class ${entity} {
-#end
-#if(${entitySerialVersionUID})
-
-private static final long serialVersionUID=1L;
-#end
-## ---------- BEGIN 字段循环遍历 ----------
-#foreach($field in ${table.fields})
-
- #if(${field.keyFlag})
- #set($keyPropertyName=${field.propertyName})
- #end
- #if("$!field.comment" != "")
- #if(${springdoc})
- @Schema(description = "${field.comment}")
- #elseif(${swagger})
- @ApiModelProperty("${field.comment}")
- #else
- /**
- * ${field.comment}
- */
- #end
- #end
- #if(${field.keyFlag})
- ## 主键
- #if(${field.keyIdentityFlag})
- @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
- #elseif(!$null.isNull(${idType}) && "$!idType" != "")
- @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
- #elseif(${field.convert})
- @TableId("${field.annotationColumnName}")
- #end
- ## 普通字段
- #elseif(${field.fill})
- ## ----- 存在字段填充设置 -----
- #if(${field.convert})
- @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
- #else
- @TableField(fill = FieldFill.${field.fill})
- #end
- #elseif(${field.convert})
- @TableField("${field.annotationColumnName}")
- #end
- ## 乐观锁注解
- #if(${field.versionField})
- @Version
- #end
- ## 逻辑删除注解
- #if(${field.logicDeleteField})
- @TableLogic
- #end
-private ${field.propertyType} ${field.propertyName};
- #if(!$foreach.hasNext)
-
- #end
-#end
-## ---------- END 字段循环遍历 ----------
-#if(!${entityLombokModel})
- #foreach($field in ${table.fields})
- #if(${field.propertyType.equals("boolean")})
- #set($getprefix="is")
- #else
- #set($getprefix="get")
- #end
-
- public ${field.propertyType} ${getprefix}${field.capitalName}(){
- return ${field.propertyName};
- }
-
- #if(${chainModel})
- public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}){
- #else
- public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
- #end
- this.${field.propertyName} = ${field.propertyName};
- #if(${chainModel})
- return this;
- #end
- }
- #end
- ## --foreach end---
-#end
-## --end of #if(!${entityLombokModel})--
-#if(${entityColumnConstant})
- #foreach($field in ${table.fields})
-
- public static final String ${field.name.toUpperCase()} ="${field.name}";
- #end
-#end
-#if(${activeRecord})
-
-@Override
-public Serializable pkVal(){
- #if(${keyPropertyName})
- return this.${keyPropertyName};
- #else
- return null;
- #end
- }
-#end
-#if(!${entityLombokModel})
-
-@Override
-public String toString() {
- return "${entity}{" +
- #foreach($field in ${table.fields})
- #if($!{foreach.index}==0)
- "${field.propertyName} = " + ${field.propertyName} +
- #else
- ", ${field.propertyName} = " + ${field.propertyName} +
- #end
- #end
- "}";
- }
-#end
- }
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-do.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-do.java.vm
new file mode 100644
index 00000000..5baea36c
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-do.java.vm
@@ -0,0 +1,77 @@
+package ${package.Entity};
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.orion.ops.framework.mybatis.core.domain.BaseDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.util.*;
+
+/**
+ * $!{table.comment} 数据库对象
+ *
+ * @author ${author}
+ * @version 1.0.0
+ * @since ${date}
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+#if(${table.convert})
+@TableName("${schemaName}${table.name}")
+#end
+@Schema(name = "${entity}", description = "$!{table.comment} 数据库对象")
+#if(${superEntityClass})
+public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
+#elseif(${entitySerialVersionUID})
+public class ${entity} implements Serializable{
+#else
+public class ${entity} {
+#end
+#if(${entitySerialVersionUID})
+
+private static final long serialVersionUID=1L;
+#end
+## ---------- BEGIN 字段循环遍历 ----------
+#foreach($field in ${table.fields})
+
+ #if(${field.keyFlag})
+ #set($keyPropertyName=${field.propertyName})
+ #end
+ #if("$!field.comment" != "")
+ @Schema(description = "${field.comment}")
+ #end
+ #if(${field.keyFlag})
+ ## 主键
+ #if(${field.keyIdentityFlag})
+ @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
+ #elseif(!$null.isNull(${idType}) && "$!idType" != "")
+ @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
+ #elseif(${field.convert})
+ @TableId("${field.annotationColumnName}")
+ #end
+ ## 普通字段
+ #elseif(${field.fill})
+ ## ----- 存在字段填充设置 -----
+ #if(${field.convert})
+ @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
+ #else
+ @TableField(fill = FieldFill.${field.fill})
+ #end
+ #elseif(${field.convert})
+ @TableField("${field.annotationColumnName}")
+ #end
+ ## 乐观锁注解
+ #if(${field.versionField})
+ @Version
+ #end
+ ## 逻辑删除注解
+ #if(${field.logicDeleteField})
+ @TableLogic
+ #end
+private ${field.propertyType} ${field.propertyName};
+#end
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vo.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-dto.java.vm
similarity index 60%
rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vo.java.vm
rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-dto.java.vm
index a8056f30..ee860d27 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vo.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-dto.java.vm
@@ -1,31 +1,30 @@
-package ${package.Entity};
+package ${currentPackage};
- #foreach($pkg in ${table.importPackages})
- import ${pkg};
- #end
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import java.util.Date;
+import java.io.Serializable;
+
+import lombok.*;
+
+import java.util.*;
/**
- * $!{table.comment} VO
+ * $!{table.comment} 业务对象
*
* @author ${author}
* @version 1.0.0
* @since ${date}
*/
@Data
-@Schema(name = "${entity}VO", description = "$!{table.comment}")
-public class ${entity}VO implements Serializable {
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "${type}DTO", description = "$!{table.comment} 业务对象")
+public class ${type}DTO implements Serializable {
private static final long serialVersionUID = 1L;
- ## ---------- BEGIN 字段循环遍历 ----------
#foreach($field in ${table.fields})
- #if(${field.keyFlag})
- #set($keyPropertyName=${field.propertyName})
- #end
#if("$!field.comment" != "")
@Schema(description = "${field.comment}")
#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-create.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-create.java.vm
new file mode 100644
index 00000000..6ef649b1
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-create.java.vm
@@ -0,0 +1,35 @@
+package ${currentPackage};
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.*;
+
+/**
+ * $!{table.comment} 创建请求对象
+ *
+ * @author ${author}
+ * @version 1.0.0
+ * @since ${date}
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "${type}CreateRequest", description = "$!{table.comment} 创建请求对象")
+public class ${type}CreateRequest implements Serializable {
+ #foreach($field in ${table.fields})
+
+ #if("$!field.comment" != "")
+ @Schema(description = "${field.comment}")
+ #end
+ private ${field.propertyType} ${field.propertyName};
+ #end
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-query.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-query.java.vm
new file mode 100644
index 00000000..23727e13
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-query.java.vm
@@ -0,0 +1,31 @@
+package ${currentPackage};
+
+import com.orion.ops.framework.common.entity.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.util.*;
+
+/**
+ * $!{table.comment} 查询请求对象
+ *
+ * @author ${author}
+ * @version 1.0.0
+ * @since ${date}
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Schema(name = "${type}QueryRequest", description = "$!{table.comment} 查询请求对象")
+public class ${type}QueryRequest extends PageRequest {
+ #foreach($field in ${table.fields})
+
+ #if("$!field.comment" != "")
+ @Schema(description = "${field.comment}")
+ #end
+ private ${field.propertyType} ${field.propertyName};
+ #end
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-update.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-update.java.vm
new file mode 100644
index 00000000..91c97992
--- /dev/null
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-update.java.vm
@@ -0,0 +1,35 @@
+package ${currentPackage};
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.io.Serializable;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.*;
+
+/**
+ * $!{table.comment} 更新请求对象
+ *
+ * @author ${author}
+ * @version 1.0.0
+ * @since ${date}
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "${type}UpdateRequest", description = "$!{table.comment} 更新请求对象")
+public class ${type}UpdateRequest implements Serializable {
+ #foreach($field in ${table.fields})
+
+ #if("$!field.comment" != "")
+ @Schema(description = "${field.comment}")
+ #end
+ private ${field.propertyType} ${field.propertyName};
+ #end
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dto.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-vo.java.vm
similarity index 60%
rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dto.java.vm
rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-vo.java.vm
index 7530702c..95c8a6e4 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dto.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-vo.java.vm
@@ -1,31 +1,30 @@
-package ${package.Entity};
+package ${currentPackage};
- #foreach($pkg in ${table.importPackages})
- import ${pkg};
- #end
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import java.util.Date;
+import java.io.Serializable;
+
+import lombok.*;
+
+import java.util.*;
/**
- * $!{table.comment}
+ * $!{table.comment} 视图响应对象
*
* @author ${author}
* @version 1.0.0
* @since ${date}
*/
@Data
-@Schema(name = "${entity}DTO", description = "$!{table.comment}")
-public class ${entity}DTO implements Serializable {
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Schema(name = "${type}VO", description = "$!{table.comment} 视图响应对象")
+public class ${type}VO implements Serializable {
private static final long serialVersionUID = 1L;
- ## ---------- BEGIN 字段循环遍历 ----------
#foreach($field in ${table.fields})
- #if(${field.keyFlag})
- #set($keyPropertyName=${field.propertyName})
- #end
#if("$!field.comment" != "")
@Schema(description = "${field.comment}")
#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dao.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-mapper.java.vm
similarity index 82%
rename from orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dao.java.vm
rename to orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-mapper.java.vm
index e55dafc6..087f7109 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-dao.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-mapper.java.vm
@@ -10,15 +10,12 @@ import ${mapperAnnotationClass.name};
* $!{table.comment} Mapper 接口
*
* @author ${author}
+ * @version 1.0.0
* @since ${date}
*/
#if(${mapperAnnotationClass})
@${mapperAnnotationClass.simpleName}
#end
-#if(${kotlin})
-interface ${table.mapperName} : ${superMapperClass}<${entity}>
-#else
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
-#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-request.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-request.java.vm
deleted file mode 100644
index e9be4867..00000000
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-request.java.vm
+++ /dev/null
@@ -1,33 +0,0 @@
-package ${package.Entity};
-
- #foreach($pkg in ${table.importPackages})
- import ${pkg};
- #end
-import com.orion.lang.define.wrapper.PageRequest;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * $!{table.comment}
- *
- * @author ${author}
- * @version 1.0.0
- * @since ${date}
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Schema(name = "${entity}Request", description = "$!{table.comment}")
-public class ${entity}Request extends PageRequest {
- #foreach($field in ${table.fields})
-
- #if(${field.keyFlag})
- #set($keyPropertyName=${field.propertyName})
- #end
- #if("$!field.comment" != "")
- @Schema(description = "${field.comment}")
- #end
- private ${field.propertyType} ${field.propertyName};
- #end
-
-}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service-impl.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service-impl.java.vm
index 0ea68a2f..9729f917 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service-impl.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service-impl.java.vm
@@ -1,28 +1,129 @@
package ${package.ServiceImpl};
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.orion.lang.define.wrapper.DataGrid;
+import com.orion.lang.utils.Valid;
+import com.orion.lang.utils.collect.Lists;
+import com.orion.ops.framework.common.constant.ErrorCode;
+import com.orion.ops.framework.common.constant.ErrorMessage;
+import com.orion.ops.framework.mybatis.core.query.Conditions;
+ #foreach($pkg in ${customFilePackages})
+ import ${pkg}.*;
+ #end
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
- #if(${table.serviceInterface})
- import ${package.Service}.${table.serviceName};
- #end
-import ${superServiceImplClassPackage};
+import ${package.Service}.${table.serviceName};
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+
/**
* $!{table.comment} 服务实现类
*
* @author ${author}
+ * @version 1.0.0
* @since ${date}
*/
@Slf4j
@Service
-#if(${kotlin})
-open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>()#if(${table.serviceInterface}), ${table.serviceName}#end {
+public class ${table.serviceImplName} implements ${table.serviceName} {
+
+// TODO 需要自行实现 page 和 check 方法
+
+@Resource
+private ${type}DAO ${typeLower}DAO;
+
+@Override
+public Long create${type}(${type}CreateRequest request){
+ // 转换
+ ${type}DO record= ${type}Convert.MAPPER.to(request);
+ record.setId(null);
+ // 查询是否存在
+ if(this.check${type}Present(record)){
+ throw ErrorCode.DATA_PRESENT.exception();
+ }
+ // 插入
+ int effect= ${typeLower}DAO.insert(record);
+ log.info("${type}Service-add${type} effect: {}, domain: {}",effect,JSON.toJSONString(record));
+ return record.getId();
+ }
+
+@Override
+public Integer update${type}(${type}UpdateRequest request){
+ // 转换
+ ${type}DO record= ${type}Convert.MAPPER.to(request);
+ Valid.notNull(request.getId(),ErrorMessage.ID_MISSING);
+ // 查询是否存在
+ if(this.check${type}Present(record)){
+ throw ErrorCode.DATA_PRESENT.exception();
+ }
+ // 更新
+ int effect= ${typeLower}DAO.updateById(record);
+ log.info("${type}Service-update${type} effect: {}, domain: {}",effect,JSON.toJSONString(record));
+ return effect;
+ }
+
+@Override
+public ${type}VO get${type}(Long id){
+ // 查询
+ ${type}DO record= ${typeLower}DAO.selectById(id);
+ if(record==null){
+ throw ErrorCode.DATA_ABESENT.exception();
+ }
+ // 转换
+ return ${type}Convert.MAPPER.to(record);
+ }
+
+@Override
+public List<${type}VO> get${type}List(List idList){
+ // 查询
+ List<${type}DO> records= ${typeLower}DAO.selectBatchIds(idList);
+ if(records.isEmpty()){
+ return Lists.empty();
+ }
+ // 转换
+ return ${type}Convert.MAPPER.to(records);
+ }
+
+@Override
+public DataGrid<${type}VO> get${type}Page(${type}QueryRequest request){
+ // 构造条件
+ LambdaQueryWrapper<${type}DO> wrapper=Conditions.wrapper(${type}DO.class);
+ // 查询
+ return ${typeLower}DAO.of()
+ .wrapper(wrapper)
+ .page(request)
+ .dataGrid(${type}Convert.MAPPER::to);
+ }
+
+@Override
+public Integer delete${type}(Long id){
+ return ${typeLower}DAO.deleteById(id);
+ }
+
+@Override
+public Integer batchDelete${type}(List idList){
+ return ${typeLower}DAO.deleteBatchIds(idList);
+ }
+
+/**
+ * 检测对象是否存在
+ *
+ * @param domain domain
+ * @return 是否存在
+ */
+private boolean check${type}Present(${type}DO domain){
+ // 构造条件
+ LambdaQueryWrapper<${type}DO> wrapper=Conditions.wrapper(${type}DO.class)
+ .eq(${type}DO::getId,domain.getId());
+ // .eq(XXXDO::getXXX, domain.getXXX());
+ // 检查是否存在
+ return ${typeLower}DAO.of()
+ .wrapper(wrapper)
+ .present();
+ }
}
-#else
- public class ${table.serviceImplName} implements ${table.serviceName} {
-
- }
-#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service.java.vm
index 71e30b10..11560e6a 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service.java.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-service.java.vm
@@ -1,18 +1,75 @@
package ${package.Service};
-import ${package.Entity}.${entity};
-import ${superServiceClassPackage};
+import com.orion.lang.define.wrapper.DataGrid;
+ #foreach($pkg in ${customFilePackages})
+ import ${pkg}.*;
+ #end
+
+import java.util.List;
/**
* $!{table.comment} 服务类
*
* @author ${author}
+ * @version 1.0.0
* @since ${date}
*/
-#if(${kotlin})
-interface ${table.serviceName} : ${superServiceClass}<${entity}>
-#else
public interface ${table.serviceName} {
+ /**
+ * 插入$!{table.comment}
+ *
+ * @param request request
+ * @return id
+ */
+ Long create${type}(${type}CreateRequest request);
+
+ /**
+ * 通过 id 更新$!{table.comment}
+ *
+ * @param request request
+ * @return effect
+ */
+ Integer update${type}(${type}UpdateRequest request);
+
+ /**
+ * 通过 id 查询$!{table.comment}
+ *
+ * @param id id
+ * @return row
+ */
+ ${type}VO get${type}(Long id);
+
+ /**
+ * 通过 id 批量查询$!{table.comment}
+ *
+ * @param idList idList
+ * @return rows
+ */
+ List<${type}VO> get${type}List(List idList);
+
+ /**
+ * 分页查询$!{table.comment}
+ *
+ * @param request request
+ * @return rows
+ */
+ DataGrid<${type}VO> get${type}Page(${type}QueryRequest request);
+
+ /**
+ * 通过 id 删除$!{table.comment}
+ *
+ * @param id id
+ * @return effect
+ */
+ Integer delete${type}(Long id);
+
+ /**
+ * 通过 id 批量删除$!{table.comment}
+ *
+ * @param idList idList
+ * @return effect
+ */
+ Integer batchDelete${type}(List idList);
+
}
-#end
diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/controller/BootstrapController.http b/orion-ops-launch/src/main/java/com/orion/ops/launch/controller/BootstrapController.http
new file mode 100644
index 00000000..9337fb41
--- /dev/null
+++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/controller/BootstrapController.http
@@ -0,0 +1,10 @@
+### 心跳检测
+GET {{baseUrl}}/server/bootstrap/health
+Authorization: {{token}}
+
+
+###
+GET http://127.0.0.1:9200/infra/test-table/get
+Authorization: {{token}}
+
+###
diff --git a/orion-ops-launch/src/test/java/com/orion/ops/launch/controller/BootstrapController.http b/orion-ops-launch/src/test/java/com/orion/ops/launch/controller/BootstrapController.http
deleted file mode 100644
index 2134ac2f..00000000
--- a/orion-ops-launch/src/test/java/com/orion/ops/launch/controller/BootstrapController.http
+++ /dev/null
@@ -1,5 +0,0 @@
-### 心跳检测
-GET http://{{baseUrl}}/server/bootstrap/health
-Accept: application/json
-
-###