From 72b219cf95bae204380a93b39cbdca46a3a6579f Mon Sep 17 00:00:00 2001 From: lijiahang Date: Fri, 1 Sep 2023 11:20:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=87=BA=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ops/framework/common/utils/FileNames.java | 28 +++++++++ .../ops/launch/generator/CodeGenerator.java | 25 ++++---- .../generator/VelocityTemplateEngine.java | 1 + .../orion-server-module-controller.http.vm | 12 ++++ .../orion-server-module-controller.java.vm | 8 +++ .../orion-server-module-convert.java.vm | 5 +- .../orion-server-module-entity-do.java.vm | 1 + .../orion-server-module-entity-export.java.vm | 63 +++++++++++++++++++ ...erver-module-entity-request-create.java.vm | 1 + ...server-module-entity-request-query.java.vm | 1 + ...erver-module-entity-request-update.java.vm | 1 + .../orion-server-module-entity-vo.java.vm | 3 +- .../orion-server-module-service-impl.java.vm | 26 +++++++- .../orion-server-module-service.java.vm | 9 +++ .../orion-server-provider-convert.java.vm | 5 +- ...-server-provider-entity-dto-create.java.vm | 1 + ...n-server-provider-entity-dto-query.java.vm | 1 + ...-server-provider-entity-dto-update.java.vm | 1 + .../orion-server-provider-entity-dto.java.vm | 1 + .../resources/templates/orion-sql-menu.sql.vm | 3 +- .../resources/templates/orion-vue-api.ts.vm | 7 +++ 21 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/FileNames.java create mode 100644 orion-ops-launch/src/main/resources/templates/orion-server-module-entity-export.java.vm diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/FileNames.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/FileNames.java new file mode 100644 index 00000000..0a61d7de --- /dev/null +++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/FileNames.java @@ -0,0 +1,28 @@ +package com.orion.ops.framework.common.utils; + +import com.orion.lang.utils.time.Dates; +import com.orion.ops.framework.common.constant.Const; + +/** + * 文件名称 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/8/31 17:57 + */ +public class FileNames { + + private FileNames() { + } + + /** + * 导出文件名称 + * + * @param title title + * @return name + */ + public static String exportName(String title) { + return title + "-" + Dates.current(Dates.YMD_HMS2) + "." + Const.SUFFIX_XLSX; + } + +} diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java index 9ce97783..c49711d0 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java @@ -303,6 +303,8 @@ public class CodeGenerator { new String[]{"/templates/orion-server-module-entity-request-update.java.vm", "${type}UpdateRequest.java", "entity.request.${bizPackage}"}, // query request 文件 new String[]{"/templates/orion-server-module-entity-request-query.java.vm", "${type}QueryRequest.java", "entity.request.${bizPackage}"}, + // export 文件 + new String[]{"/templates/orion-server-module-entity-export.java.vm", "${type}Export.java", "entity.export"}, // convert 文件 new String[]{"/templates/orion-server-module-convert.java.vm", "${type}Convert.java", "convert"}, // -------------------- 后端 - provider -------------------- @@ -350,18 +352,17 @@ public class CodeGenerator { // 构建文件 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()); + .map(s -> new CustomFile.Builder() + // 覆盖文件 + .enableFileOverride() + // 模板路径 + .templatePath(s[0]) + // 文件名 + .fileName(s[1]) + // 包名 + .packageName(s[2]) + .build()) + .collect(Collectors.toList()); // 注入配置 return new InjectionConfig.Builder() diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/VelocityTemplateEngine.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/VelocityTemplateEngine.java index d20d388f..95d3381f 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/VelocityTemplateEngine.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/VelocityTemplateEngine.java @@ -249,6 +249,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { map.put("queryPage", "分页查询" + comment); map.put("deleteById", "通过 id 删除" + comment); map.put("batchDeleteByIdList", "通过 id 批量删除" + comment); + map.put("export", "导出" + comment); } /** diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.http.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.http.vm index 9ebe93ed..e892ab02 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.http.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.http.vm @@ -70,4 +70,16 @@ DELETE {{baseUrl}}/${package.ModuleName}/${typeHyphen}/delete-batch?idList=1,2,3 Authorization: {{token}} +${httpComment} ${apiComment.export} +POST {{baseUrl}}/${package.ModuleName}/${typeHyphen}/export +Content-Type: application/json +Authorization: {{token}} + +{ + #foreach($field in ${table.fields}) + "${field.propertyName}": ""#if($foreach.hasNext),#end + #end +} + + ${httpComment} diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.java.vm index 811e57a2..a07fa39d 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-controller.java.vm @@ -110,5 +110,13 @@ public class ${table.controllerName} { return ${typeLower}Service.batchDelete${type}ByIdList(idList); } + @PostMapping("/export") + @Operation(summary = "${apiComment.export}") + @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:export')") + public void export${type}(@Validated @RequestBody ${type}QueryRequest request, + HttpServletResponse response) throws IOException { + ${typeLower}Service.export${type}(request, response); + } + } diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-convert.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-convert.java.vm index 63f50915..a468e821 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-convert.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-convert.java.vm @@ -1,11 +1,12 @@ package ${currentPackage}; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; import ${package.Entity}.*; #foreach($pkg in ${customModuleFilePackages}) import ${pkg}.*; #end +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + import java.util.List; /** diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-do.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-do.java.vm index 184265cf..a2057425 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-do.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-do.java.vm @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; +import java.math.*; /** * $!{table.comment} 实体对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-export.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-export.java.vm new file mode 100644 index 00000000..7435f498 --- /dev/null +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-export.java.vm @@ -0,0 +1,63 @@ +package ${currentPackage}; + +import com.orion.lang.utils.time.Dates; +import com.orion.office.excel.annotation.ExportField; +import com.orion.office.excel.annotation.ExportSheet; +import com.orion.office.excel.annotation.ExportTitle; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.io.Serializable; +import java.util.*; +import java.math.*; + +/** + * $!{table.comment} 导出对象 + * + * @author ${author} + * @version ${since} + * @since ${date} + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ExportTitle(title = ${type}Export.TITLE) +@ExportSheet(name = "$!{table.comment}", filterHeader = true, freezeHeader = true, indexToSort = true) +@Schema(name = "${type}Export", description = "$!{table.comment}导出对象") +public class ${type}Export implements Serializable { + + public static final String TITLE = "$!{table.comment}导出"; + #foreach($field in ${table.fields}) + + #if("$!field.comment" != "") + @Schema(description = "${field.comment}") + #end + #if("$field.propertyType" == "Date") + @ExportField(index = ${foreach.index}, header = "${field.comment}", width = 16, format = Dates.YMD_HMS) + #else + @ExportField(index = ${foreach.index}, header = "${field.comment}", width = 16) + #end + private ${field.propertyType} ${field.propertyName}; + #end + + @ExportField(index = $table.fields.size(), header = "创建时间", width = 16, format = Dates.YMD_HMS) + @Schema(description = "创建时间") + private Date createTime; + + #set($updateTimeIndex=$table.fields.size() + 1) + @Schema(description = "修改时间") + @ExportField(index = $updateTimeIndex, header = "修改时间", width = 16, format = Dates.YMD_HMS) + private Date updateTime; + + #set($creatorIndex=$table.fields.size() + 2) + @Schema(description = "创建人") + @ExportField(index = $creatorIndex, header = "创建人", width = 16) + private String creator; + + #set($updaterIndex=$table.fields.size() + 3) + @Schema(description = "修改人") + @ExportField(index = $updaterIndex, header = "修改人", width = 16) + private String updater; + +} diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-create.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-create.java.vm index 21e93b0f..b1017708 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-create.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-create.java.vm @@ -12,6 +12,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 创建请求对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-query.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-query.java.vm index 5c1eaab7..d7f6ff09 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-query.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-query.java.vm @@ -7,6 +7,7 @@ import lombok.*; import javax.validation.constraints.Size; import java.util.*; +import java.math.*; /** * $!{table.comment} 查询请求对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-update.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-update.java.vm index 37d0661a..e66d5e58 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-update.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-request-update.java.vm @@ -12,6 +12,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 更新请求对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-vo.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-vo.java.vm index dd9d84a2..c64f48c4 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-vo.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-entity-vo.java.vm @@ -1,10 +1,11 @@ package ${currentPackage}; import io.swagger.v3.oas.annotations.media.Schema; -import java.io.Serializable; import lombok.*; +import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 视图响应对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-service-impl.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-service-impl.java.vm index 01baf123..ebecd52d 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-service-impl.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-service-impl.java.vm @@ -3,7 +3,9 @@ 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.collect.Lists; +import com.orion.office.excel.writer.exporting.ExcelExport; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.utils.FileNames; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.utils.Valid; #foreach($pkg in ${customModuleFilePackages}) @@ -12,10 +14,14 @@ import ${pkg}.*; import ${package.Entity}.${entity}; import ${package.Mapper}.${table.mapperName}; import ${package.Service}.${table.serviceName}; +import com.orion.web.servlet.web.Servlets; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.List; /** @@ -124,6 +130,24 @@ public class ${table.serviceImplName} implements ${table.serviceName} { return effect; } + @Override + public void export${type}(${type}QueryRequest request, HttpServletResponse response) throws IOException { + // 条件 + LambdaQueryWrapper<${type}DO> wrapper = this.buildQueryWrapper(request); + // 查询 + List<${type}Export> rows = ${typeLower}DAO.of() + .wrapper(wrapper) + .list(${type}Convert.MAPPER::export); + // 导出 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ExcelExport.create(${type}Export.class) + .addRows(rows) + .write(out) + .close(); + // 传输 + Servlets.transfer(response, out.toByteArray(), FileNames.exportName(${type}Export.TITLE)); + } + /** * 检测对象是否存在 * diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-module-service.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-module-service.java.vm index f0135917..ed28f122 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-module-service.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-module-service.java.vm @@ -88,4 +88,13 @@ public interface ${table.serviceName} { */ Integer batchDelete${type}ByIdList(List idList); + /** + * ${apiComment.export} + * + * @param request request + * @param response response + * @throws IOException IOException + */ + void export${type}(${type}QueryRequest request, HttpServletResponse response) throws IOException; + } diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-provider-convert.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-provider-convert.java.vm index c13783bd..b564f7aa 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-provider-convert.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-provider-convert.java.vm @@ -1,7 +1,5 @@ package ${currentPackage}; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; import ${package.Entity}.*; #foreach($pkg in ${customModuleFilePackages}) import ${pkg}.*; @@ -9,6 +7,9 @@ import ${pkg}.*; #foreach($pkg in ${customProviderEntityFilePackages}) import ${pkg}.*; #end +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + import java.util.List; /** diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-create.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-create.java.vm index c32f8e93..6f4345e7 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-create.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-create.java.vm @@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 创建请求业务对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-query.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-query.java.vm index 462f3715..c0cc5918 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-query.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-query.java.vm @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.Size; import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 查询请求业务对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-update.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-update.java.vm index 3ea33265..309cafa9 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-update.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto-update.java.vm @@ -11,6 +11,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; import java.util.*; +import java.math.*; /** * $!{table.comment} 更新请求业务对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto.java.vm b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto.java.vm index dfe8a7ae..86a21838 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto.java.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-server-provider-entity-dto.java.vm @@ -5,6 +5,7 @@ import java.io.Serializable; import lombok.*; import java.util.*; +import java.math.*; /** * $!{table.comment} 业务对象 diff --git a/orion-ops-launch/src/main/resources/templates/orion-sql-menu.sql.vm b/orion-ops-launch/src/main/resources/templates/orion-sql-menu.sql.vm index 9b42b229..8b6acf3c 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-sql-menu.sql.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-sql-menu.sql.vm @@ -25,4 +25,5 @@ VALUES (@TMP_SUB_ID, '查询$vue.comment', '${package.ModuleName}:${typeHyphen}:query', 3, 10), (@TMP_SUB_ID, '创建$vue.comment', '${package.ModuleName}:${typeHyphen}:create', 3, 20), (@TMP_SUB_ID, '修改$vue.comment', '${package.ModuleName}:${typeHyphen}:update', 3, 30), - (@TMP_SUB_ID, '删除$vue.comment', '${package.ModuleName}:${typeHyphen}:delete', 3, 40); + (@TMP_SUB_ID, '删除$vue.comment', '${package.ModuleName}:${typeHyphen}:delete', 3, 40), + (@TMP_SUB_ID, '导出$vue.comment', '${package.ModuleName}:${typeHyphen}:export', 3, 50); diff --git a/orion-ops-launch/src/main/resources/templates/orion-vue-api.ts.vm b/orion-ops-launch/src/main/resources/templates/orion-vue-api.ts.vm index 9959eb06..7f56038f 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-vue-api.ts.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-vue-api.ts.vm @@ -131,3 +131,10 @@ export function batchDelete${vue.featureFirstUpper}(idList: Array) { } }); } + +/** + * $apiComment.export + */ +export function export${vue.featureFirstUpper}(request: ${vue.featureFirstUpper}QueryRequest) { + return axios.post('/${package.ModuleName}/${typeHyphen}/export', request); +}