From 75e588be4ee654515641888d00d071f01acb7bda Mon Sep 17 00:00:00 2001 From: lijiahang Date: Thu, 13 Jul 2023 09:57:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8=E6=A8=A1=E6=9D=BF.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-client.env.json | 6 +- orion-ops-framework/orion-ops-common/pom.xml | 9 +- .../constant/AutoConfigureOrderConst.java | 2 + .../framework/common/constant/ErrorCode.java | 12 ++ .../common/constant/ErrorMessage.java | 2 + .../framework/common/entity/PageRequest.java | 27 +++ .../mybatis/core/generator/CodeGenerator.java | 81 +++++---- .../generator/VelocityTemplateEngine.java | 143 +++++++++++++++ .../mybatis/core/query/DataQuery.java | 6 +- .../templates/orion-controller.java.vm | 100 ++++++++--- .../templates/orion-convert-provider.java.vm | 32 ++++ .../resources/templates/orion-convert.java.vm | 33 ++-- .../resources/templates/orion-domain.java.vm | 164 ------------------ .../templates/orion-entity-do.java.vm | 77 ++++++++ ...on-vo.java.vm => orion-entity-dto.java.vm} | 25 ++- .../orion-entity-request-create.java.vm | 35 ++++ .../orion-entity-request-query.java.vm | 31 ++++ .../orion-entity-request-update.java.vm | 35 ++++ ...on-dto.java.vm => orion-entity-vo.java.vm} | 25 ++- ...orion-dao.java.vm => orion-mapper.java.vm} | 5 +- .../resources/templates/orion-request.java.vm | 33 ---- .../templates/orion-service-impl.java.vm | 123 +++++++++++-- .../resources/templates/orion-service.java.vm | 69 +++++++- .../controller/BootstrapController.http | 10 ++ .../controller/BootstrapController.http | 5 - 25 files changed, 750 insertions(+), 340 deletions(-) create mode 100644 orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/entity/PageRequest.java create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/generator/VelocityTemplateEngine.java create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-convert-provider.java.vm delete mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-domain.java.vm create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-do.java.vm rename orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/{orion-vo.java.vm => orion-entity-dto.java.vm} (60%) create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-create.java.vm create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-query.java.vm create mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-entity-request-update.java.vm rename orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/{orion-dto.java.vm => orion-entity-vo.java.vm} (60%) rename orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/{orion-dao.java.vm => orion-mapper.java.vm} (82%) delete mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-request.java.vm create mode 100644 orion-ops-launch/src/main/java/com/orion/ops/launch/controller/BootstrapController.http delete mode 100644 orion-ops-launch/src/test/java/com/orion/ops/launch/controller/BootstrapController.http 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 - -###