0.12.0 增加excel的导入方法; 修复aop记录文件异常的问题

This commit is contained in:
2021-05-19 22:54:39 +08:00
parent 5fb26fc7e1
commit 387d4b813a
4 changed files with 78 additions and 14 deletions

View File

@@ -21,7 +21,7 @@ allprojects {
subprojects {
ext {
version '0.11.0'
version '0.12.0'
spring_version = "2.3.0.RELEASE"
}

View File

@@ -13,7 +13,7 @@ dependencies {
compile("org.springframework.boot:spring-boot-starter-mail:$spring_version")
compile("org.springframework.boot:spring-boot-starter-security:$spring_version")
compile group: 'net.sf.dozer', name: 'dozer', version: '5.5.1'
compile group: 'org.apache.poi', name: 'poi', version: '4.1.2'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '5.0.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
compile group: 'com.google.guava', name: 'guava', version: '30.1.1-jre'
compile group: 'com.auth0', name: 'java-jwt', version: '3.14.0'

View File

@@ -1,6 +1,7 @@
package com.synebula.gaea.app.component.aop
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.gson.Gson
import com.synebula.gaea.app.IApplication
import com.synebula.gaea.app.struct.HttpMessage
import com.synebula.gaea.app.component.aop.annotation.MethodName
@@ -15,11 +16,12 @@ import org.aspectj.lang.annotation.Around
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import org.springframework.core.DefaultParameterNameDiscoverer
import org.springframework.web.multipart.MultipartFile
abstract class AppAspect {
private var paramDiscover = DefaultParameterNameDiscoverer()
private val mapper = ObjectMapper()
private val gson = Gson()
@Autowired
lateinit var logger: ILogger
@@ -39,8 +41,8 @@ abstract class AppAspect {
fun throws(point: JoinPoint, ex: Throwable) {
val clazz = point.signature.declaringType
logger.error(
ex,
"${clazz.name}.${point.signature.name} exception${ex.message} args${mapper.writeValueAsString(point.args)}"
ex,
"${clazz.name}.${point.signature.name} exception${ex.message} args${gson.toJson(point.args)}"
)
}
@@ -84,13 +86,10 @@ abstract class AppAspect {
}
}
val message = "$moduleName - $funcName 异常"
logger.error(
ex,
"$message。Method args ${paramDiscover.getParameterNames(func)?.contentToString()} values is ${
mapper.writeValueAsString(
point.args
)
}"
logger.error(ex,
"$message。Method args ${
paramDiscover.getParameterNames(func)?.contentToString()} values is ${
gson.toJson(point.args)}"
)
return HttpMessage(Status.Error, message)
}

View File

@@ -1,6 +1,7 @@
package com.synebula.gaea.app.component.poi
import com.synebula.gaea.app.struct.ExcelData
import org.apache.poi.hpsf.Decimal
import org.apache.poi.hssf.usermodel.HSSFCell
import org.apache.poi.hssf.usermodel.HSSFCellStyle
import org.apache.poi.hssf.usermodel.HSSFWorkbook
@@ -8,8 +9,9 @@ import org.apache.poi.ss.usermodel.BorderStyle
import org.apache.poi.ss.usermodel.HorizontalAlignment
import org.apache.poi.ss.usermodel.Sheet
import org.apache.poi.ss.usermodel.VerticalAlignment
import java.lang.Exception
import java.lang.RuntimeException
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.springframework.web.multipart.MultipartFile
import java.util.*
/**
* Excel操作对象
@@ -81,6 +83,69 @@ object Excel {
writeTo(wb)
}
/**
* 导入文件
*
* @param file 上传文件流
* @param columns 文件列名称、类型定义
* @param startRow 数据起始行默认0
* @param startColumn 数据起始列默认0
*
* @return ExcelData
*/
fun import(
file: MultipartFile,
columns: List<Pair<String, String>>,
startRow: Int = 0,
startColumn: Int = 0
): List<Map<String, Any>> {
if (file.originalFilename?.endsWith(".xls") != true && file.originalFilename?.endsWith(".xlsx") != true)
throw RuntimeException("无法识别的文件格式[${file.originalFilename}]")
val workbook = if (file.originalFilename?.endsWith(".xls") == true)
HSSFWorkbook(file.inputStream)
else
XSSFWorkbook(file.inputStream)
val sheet = workbook.getSheetAt(0)
val data = mutableListOf<Map<String, Any>>()
for (i in startRow..sheet.lastRowNum) {
val row = sheet.getRow(i) ?: continue
val rowData = mutableMapOf<String, Any>()
for (c in startColumn until columns.size + startColumn) {
try {
val column = columns[c]
val value: Any = when (column.second) {
Int::class.java.name, Double::class.java.name,
Float::class.java.name, Decimal::class.java.name -> try {
row.getCell(c).numericCellValue
} catch (ignored: Exception) {
row.getCell(c).stringCellValue
}
Boolean::class.java.name -> try {
row.getCell(c).booleanCellValue
} catch (ignored: Exception) {
row.getCell(c).stringCellValue
}
Date::class.java.name -> try {
row.getCell(c).dateCellValue
} catch (ignored: Exception) {
row.getCell(c).stringCellValue
}
else -> row.getCell(c).stringCellValue
}
rowData.put(columns[c].first, value)
} catch (ex: Exception) {
throw RuntimeException("解析EXCEL文件${file.originalFilename}${i}行第${c}列出错", ex)
}
}
data.add(rowData)
}
workbook.close()
file.inputStream.close()
return data
}
/**
* 设置列宽
*