From fa79b229df609c0380a3617bf8c33b551291b47d Mon Sep 17 00:00:00 2001 From: Wang Chen Chen <932560435@qq.com> Date: Wed, 29 Nov 2023 18:37:54 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9ExcelUtils=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xaaef/molly/common/util/ExcelUtils.java | 70 ++++++++++++++---- server/molly-service/aa.xlsx | Bin 5120 -> 5632 bytes .../java/com/xaaef/molly/NoSpringTests.java | 46 ++++++++++-- .../system/runner/TenantTableRunner.java | 2 +- .../xaaef/molly/tenant/LiquibaseConfig.java | 1 + 5 files changed, 99 insertions(+), 20 deletions(-) diff --git a/server/common/src/main/java/com/xaaef/molly/common/util/ExcelUtils.java b/server/common/src/main/java/com/xaaef/molly/common/util/ExcelUtils.java index 31f7af9..352f06e 100644 --- a/server/common/src/main/java/com/xaaef/molly/common/util/ExcelUtils.java +++ b/server/common/src/main/java/com/xaaef/molly/common/util/ExcelUtils.java @@ -1,5 +1,7 @@ package com.xaaef.molly.common.util; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ReflectUtil; @@ -16,6 +18,7 @@ import org.springframework.http.ResponseEntity; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; @@ -86,12 +89,7 @@ public class ExcelUtils { */ private static void pageExport(HSSFWorkbook workbook, String sheetName, List rangeData) { // 反射获取对象属性,和描述名称 - var fieldNames = Arrays.stream(ReflectUtil.getFields(rangeData.getFirst().getClass())) - .map(field -> { - var ann = field.getAnnotation(Schema.class); - return ann == null ? StrUtil.EMPTY : ann.description(); - }) - .collect(Collectors.toCollection(LinkedList::new)); + var fieldNames = getFieldSchemaNames(CollectionUtil.getFirst(rangeData)); //创建工作表,指定工作表名称 var sheet1 = workbook.createSheet(sheetName); sheet1.setDefaultColumnWidth(20); @@ -112,9 +110,11 @@ public class ExcelUtils { cell0.setCellValue(StrUtil.EMPTY); break; } - if (obj instanceof Long o1) { - cell0.setCellValue(o1); - } else if (obj instanceof Integer o1) { + if (obj instanceof Number o1) { + cell0.setCellValue(o1.toString()); + } + /* + else if (obj instanceof Integer o1) { cell0.setCellValue(o1); } else if (obj instanceof Short o1) { cell0.setCellValue(o1); @@ -122,10 +122,12 @@ public class ExcelUtils { cell0.setCellValue(o1); } else if (obj instanceof Double o1) { cell0.setCellValue(o1); - } else if (obj instanceof String o1) { - cell0.setCellValue(o1); } else if (obj instanceof Byte o1) { cell0.setCellValue(o1); + } + */ + else if (obj instanceof String o1) { + cell0.setCellValue(o1); } else if (obj instanceof Boolean o1) { cell0.setCellValue(o1); } else if (obj instanceof Date o1) { @@ -138,16 +140,58 @@ public class ExcelUtils { cell0.setCellValue(o1.format(DatePattern.NORM_DATETIME_FORMATTER)); } else if (obj instanceof ZonedDateTime o1) { cell0.setCellValue(o1.format(DatePattern.NORM_DATETIME_FORMATTER)); - } else if (obj instanceof Iterable || obj instanceof Map || obj instanceof Enum || obj.getClass().isArray()) { + } else if (obj instanceof Iterable || obj.getClass().isArray()) { + cell0.setCellValue(JsonUtils.toFormatJson(obj)); + } else if (obj instanceof Map || obj instanceof Enum) { cell0.setCellValue(JsonUtils.toFormatJson(obj)); } else { - cell0.setCellValue(obj.toString()); + var fieldMaps = getFieldNameAndSchema(obj); + var valMaps = BeanUtil.beanToMap(obj); + var sb = new StringBuilder(); + valMaps.forEach((key, val) -> sb.append(StrUtil.format("{} = {} \r\n", fieldMaps.get(key), val))); + cell0.setCellValue(sb.toString()); } } } } + /** + * 反射获取对象属性,和描述名称 + * + * @author WangChenChen + * @version 2.0 + * @date 2023/11/29 18:04 + */ + private static List getFieldSchemaNames(Object obj) { + return Arrays.stream(ReflectUtil.getFields(obj.getClass())) + .map(field -> { + var ann = field.getAnnotation(Schema.class); + return ann == null ? field.getName() : ann.description(); + }) + .collect(Collectors.toCollection(LinkedList::new)); + } + + + /** + * 反射获取对象属性,和描述名称 + * + * @author WangChenChen + * @version 2.0 + * @date 2023/11/29 18:04 + */ + private static Map getFieldNameAndSchema(Object obj) { + return Arrays.stream(ReflectUtil.getFields(obj.getClass())) + .collect( + Collectors.toMap(Field::getName, field -> { + var ann = field.getAnnotation(Schema.class); + return ann == null ? field.getName() : ann.description(); + } + ) + ); + } + + /** * 获取一个 Workbook * diff --git a/server/molly-service/aa.xlsx b/server/molly-service/aa.xlsx index d2b066e477d39ea88d7d652a3151fa7ef99a0b97..69dc5acb3d3cba402b37904cf0ba120aab3fdd10 100644 GIT binary patch literal 5632 zcmeHLOK4nG82;~_JCjV>$>e2PQ=42TjZP+$cAhjQ#3V&Q7seV|ZE5Q?F|n3fBhf5^ zh-1}-XhG153pZVM<71Pf>TD7y<#9ZU29kokU zYr_tIbqtc|Yaxb8K>6Lfr5(q(=SU5iY?7xz6p5~W1x~(qI!F6IgV!g@U-c+G~B<_Cq zcUwJ}7C4csLGGccx!EJ$A~tqx_?TN{XUf+GL^RWf9o?=h<8Mh9%){m2Tm=#&Y}X=3 zj4Qc+#1UhIG1yaxj~Bp@gulXb3vq9)gk7$Zuzlr6;nSEWFOjy~$3>$&bYo*>!W=dR zYz1qCZf%#-sj6tp^;XnYCGuMd!?6~=wyEdrEB#eBV|_hmvR3(edbV1t{Oznaxa`(~ zJDvl29Da8*Tz!8XeX@=|QAZ!Hspkd9;E}Zz7aXh6606gG*R-Ui7$`AqErwLuRRi|Y?TIn9~mmOw!rDQrWmfv8FL>} z9)4IK4?loiD6;R$5|Z@7%Lh?m+teRV{xa8d%=x@FclAuDtfd&#;un*vkIo-OJJ^`h zsZ=^3#^pB`PI0%ALy;!ij!mRvN%gTO9g8#_!6BYWWwL|m^kC*bSe+gk&gO^nLpZq0 zdfV07V#F7B&+OVSlgDKi9UBGM!H6_T?%<`pS~Klv@=sq`(i*!Ep46qZVHwA;jK{Ey zYgmSc)uhT)QO#6QO&*UQ>ZvNKw_bS9*Q=aEmGe;LT&i4M zs$3Nnhn7QH9>9m*KlzxqS9ymj@1e@ORQbA8`6{ZpDyqfP0jF0biD8*8!8drvTSm%d zI*rQ!cfs9w418+{%*1;@-4|Nq%gDusWyriQY%)6#>p+>|0xpaZb;@o=Jd67xPux~6 zd)ylv<@&i_FF!J~cdVfF38f!U@hPP#qKq5*;FdU<s`akp0L(ZIky`ZMpN#F>wb%XaI)_MpPQ1V-uA++Fz;T-MLaniz{{9 zdc3+DYD9H!M6_g}Z{*dI35kqa3P2*4mMlnQ(Gsr@Y+p+uNSp~uYz_TclMG0F)#*GF z66aM*0Z6>*YsrGd^`NC7B;NkD6oSNYq(lp&__-1pIHEd_416VM$;)8E{xX9J`^yX_ z?2mGrR`uBHsCr|t6?gd;OCxcC?J5lux(h?c?BGM8W_%_m#mm%n52>KX;ih=K`A28zI rU?OJmPm24y-)xi5ltYfAgd4VliQ|dj_y~;q+kf1tb~d70b_D(e+2!sD delta 945 zcmZvaPiqrF7{;HO-Hn^oBpZ`n6rlkRQl!v-2f@--1np&`u?H2Yfj0i3P^lNK2NS$0 zLNH6dfp{+FRzHN`MWns>1wszuL6G{qGrMUM%(64{KF`eWefQ0@F1If2z0|rD#IN*g zT@89G<&5gMlf8@Xq54pFJDHDMK2V?iB~R~V;+5QV^MbkxV1lm;_3iERH>%SYnx*5CNk0$XHoAA=`XZ2a#hr;9h8luWpzj~!1+k;U_ zjy2_6c3hY9tjMty&478Nv>Eif{qC1Li9Ra_MW4lOT*D32IM&irb6^GH&KW17b1(Jg zamsr0i+F?=XmCuR3u&?i{Af=_`_U23k+kapXIRn!=WWib8Q>7{R5-2kL3}^_R0*j1 zI^+lhI5IO-!Dxz+7gvgFO%*n_fMp;H#Mvl(2 zsX&1*e>dC9vRm;f;4}s6>(s|!$@&fz`A!?Tj3kHb)|^RWe&CkH@orGc4L2O)VA5$e zwSYW*!D(KrW1M_=Qrulj;~zjpG)d=hf8xV8G{?}I(qX|lBRJ_ hobby; + + @Schema(description = "创建日期") + protected LocalDate createDate; + + @Schema(description = "创建时间") + protected LocalTime createTime; + + @Schema(description = "创建日期时间") + protected LocalDateTime createDateTime; + + @Schema(description = "创建人信息") + protected OperateUserDTO createUserEntity; + + } + @Test public void test12() throws IOException { var treeNodes = List.of( - new PmsRole(1001L, "角色1", 1L, "角色1问问去"), - new PmsRole(1002L, "角色2", 2L, "角色2QBGRBR"), - new PmsRole(1003L, "角色3", 3L, "角色3GRNRY"), - new PmsRole(1004L, "角色4", 4L, "角色4fwef"), - new PmsRole(1005L, "角色5", 5L, "角色5这个人") + new TestExportEntity(1001L, "角色1", List.of("A1", "B1"), LocalDate.now(), LocalTime.now(), LocalDateTime.now(), new OperateUserDTO(1L, "a", "张三")), + new TestExportEntity(1002L, "角色2", List.of("A2", "B2"), LocalDate.now(), LocalTime.now(), LocalDateTime.now(), new OperateUserDTO(2L, "b", "李四")), + new TestExportEntity(1003L, "角色3", List.of("A3", "B3"), LocalDate.now(), LocalTime.now(), LocalDateTime.now(), new OperateUserDTO(3L, "c", "王五")), + new TestExportEntity(1004L, "角色4", List.of("A4", "B4"), LocalDate.now(), LocalTime.now(), LocalDateTime.now(), new OperateUserDTO(4L, "d", "陈六")), + new TestExportEntity(1005L, "角色5", List.of("A5", "B5"), LocalDate.now(), LocalTime.now(), LocalDateTime.now(), new OperateUserDTO(5L, "e", "赵七")) ); var entity = ExcelUtils.deviceExport("aa.xlsx", treeNodes); var file = Files.createFile(Path.of("aa.xlsx")).toFile(); diff --git a/server/molly-sys/src/main/java/com/xaaef/molly/system/runner/TenantTableRunner.java b/server/molly-sys/src/main/java/com/xaaef/molly/system/runner/TenantTableRunner.java index 8ebe416..91616a2 100644 --- a/server/molly-sys/src/main/java/com/xaaef/molly/system/runner/TenantTableRunner.java +++ b/server/molly-sys/src/main/java/com/xaaef/molly/system/runner/TenantTableRunner.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; @Slf4j @Component -@DependsOn(value = "projectTableRunner") +@DependsOn({"projectTableRunner"}) @Order(Integer.MIN_VALUE + 1) @AllArgsConstructor public class TenantTableRunner { diff --git a/server/plugins/mbp-tenant/src/main/java/com/xaaef/molly/tenant/LiquibaseConfig.java b/server/plugins/mbp-tenant/src/main/java/com/xaaef/molly/tenant/LiquibaseConfig.java index 5da1542..52e06bd 100644 --- a/server/plugins/mbp-tenant/src/main/java/com/xaaef/molly/tenant/LiquibaseConfig.java +++ b/server/plugins/mbp-tenant/src/main/java/com/xaaef/molly/tenant/LiquibaseConfig.java @@ -40,6 +40,7 @@ public class LiquibaseConfig { liquibase1.setResourceLoader(new DefaultResourceLoader()); liquibase1.setChangeLog(multiTenantProperties.getChangeLog()); liquibase1.setContexts(multiTenantProperties.getContexts()); + liquibase1.setClearCheckSums(false); return liquibase1; }