0.12.1 调整excel接口;调整切面和日志的问题
This commit is contained in:
@@ -48,7 +48,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun trace(format: String, vararg args: Any) {
|
override fun trace(format: String, vararg args: Any) {
|
||||||
if (this.logger.isTraceEnabled) {
|
if (this.logger.isTraceEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.trace(message)
|
this.logger.trace(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun trace(t: Throwable, format: String, vararg args: Any) {
|
override fun trace(t: Throwable, format: String, vararg args: Any) {
|
||||||
if (this.logger.isTraceEnabled) {
|
if (this.logger.isTraceEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.trace(message, t)
|
this.logger.trace(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ class Logger : ILogger {
|
|||||||
override fun trace(obj: Any, format: String, vararg args: Any) {
|
override fun trace(obj: Any, format: String, vararg args: Any) {
|
||||||
if (this.logger.isTraceEnabled) {
|
if (this.logger.isTraceEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.trace(message)
|
real.trace(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ class Logger : ILogger {
|
|||||||
override fun trace(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
override fun trace(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
||||||
if (this.logger.isTraceEnabled) {
|
if (this.logger.isTraceEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.trace(message, t)
|
real.trace(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun debug(format: String, vararg args: Any) {
|
override fun debug(format: String, vararg args: Any) {
|
||||||
if (this.logger.isDebugEnabled) {
|
if (this.logger.isDebugEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.debug(message)
|
this.logger.debug(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun debug(t: Throwable, format: String, vararg args: Any) {
|
override fun debug(t: Throwable, format: String, vararg args: Any) {
|
||||||
if (this.logger.isDebugEnabled) {
|
if (this.logger.isDebugEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.debug(message, t)
|
this.logger.debug(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,7 +111,7 @@ class Logger : ILogger {
|
|||||||
override fun debug(obj: Any, format: String, vararg args: Any) {
|
override fun debug(obj: Any, format: String, vararg args: Any) {
|
||||||
if (this.logger.isDebugEnabled) {
|
if (this.logger.isDebugEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.debug(message)
|
real.debug(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -119,7 +119,7 @@ class Logger : ILogger {
|
|||||||
override fun debug(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
override fun debug(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
||||||
if (this.logger.isDebugEnabled) {
|
if (this.logger.isDebugEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.debug(message, t)
|
real.debug(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun info(format: String, vararg args: Any) {
|
override fun info(format: String, vararg args: Any) {
|
||||||
if (this.logger.isInfoEnabled) {
|
if (this.logger.isInfoEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.info(message)
|
this.logger.info(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun info(t: Throwable, format: String, vararg args: Any) {
|
override fun info(t: Throwable, format: String, vararg args: Any) {
|
||||||
if (this.logger.isInfoEnabled) {
|
if (this.logger.isInfoEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.info(message, t)
|
this.logger.info(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ class Logger : ILogger {
|
|||||||
override fun info(obj: Any, format: String, vararg args: Any) {
|
override fun info(obj: Any, format: String, vararg args: Any) {
|
||||||
if (this.logger.isInfoEnabled) {
|
if (this.logger.isInfoEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.info(message)
|
real.info(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,7 +164,7 @@ class Logger : ILogger {
|
|||||||
override fun info(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
override fun info(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
||||||
if (this.logger.isInfoEnabled) {
|
if (this.logger.isInfoEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.info(message, t)
|
real.info(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -185,7 +185,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun warn(format: String, vararg args: Any) {
|
override fun warn(format: String, vararg args: Any) {
|
||||||
if (this.logger.isWarnEnabled) {
|
if (this.logger.isWarnEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.warn(message)
|
this.logger.warn(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,7 +193,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun warn(t: Throwable, format: String, vararg args: Any) {
|
override fun warn(t: Throwable, format: String, vararg args: Any) {
|
||||||
if (this.logger.isWarnEnabled) {
|
if (this.logger.isWarnEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.warn(message, t)
|
this.logger.warn(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -201,7 +201,7 @@ class Logger : ILogger {
|
|||||||
override fun warn(obj: Any, format: String, vararg args: Any) {
|
override fun warn(obj: Any, format: String, vararg args: Any) {
|
||||||
if (this.logger.isWarnEnabled) {
|
if (this.logger.isWarnEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.warn(message)
|
real.warn(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ class Logger : ILogger {
|
|||||||
override fun warn(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
override fun warn(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
||||||
if (this.logger.isWarnEnabled) {
|
if (this.logger.isWarnEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.warn(message, t)
|
real.warn(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun error(format: String, vararg args: Any) {
|
override fun error(format: String, vararg args: Any) {
|
||||||
if (this.logger.isErrorEnabled) {
|
if (this.logger.isErrorEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.error(message)
|
this.logger.error(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -240,7 +240,7 @@ class Logger : ILogger {
|
|||||||
|
|
||||||
override fun error(t: Throwable, format: String, vararg args: Any) {
|
override fun error(t: Throwable, format: String, vararg args: Any) {
|
||||||
if (this.logger.isErrorEnabled) {
|
if (this.logger.isErrorEnabled) {
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
this.logger.error(message, t)
|
this.logger.error(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -248,7 +248,7 @@ class Logger : ILogger {
|
|||||||
override fun error(obj: Any, format: String, vararg args: Any) {
|
override fun error(obj: Any, format: String, vararg args: Any) {
|
||||||
if (this.logger.isErrorEnabled) {
|
if (this.logger.isErrorEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.error(message)
|
real.error(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -256,7 +256,7 @@ class Logger : ILogger {
|
|||||||
override fun error(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
override fun error(obj: Any, t: Throwable?, format: String, vararg args: Any) {
|
||||||
if (this.logger.isErrorEnabled) {
|
if (this.logger.isErrorEnabled) {
|
||||||
val real = this.getLogger(obj)
|
val real = this.getLogger(obj)
|
||||||
val message = String.format(format, *args)
|
val message = if (args.isEmpty()) format else String.format(format, *args)
|
||||||
real.error(message, t)
|
real.error(message, t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,17 +34,6 @@ abstract class AppAspect {
|
|||||||
*/
|
*/
|
||||||
abstract fun func()
|
abstract fun func()
|
||||||
|
|
||||||
/**
|
|
||||||
* 后置异常通知
|
|
||||||
*/
|
|
||||||
@AfterThrowing("func()", throwing = "ex")
|
|
||||||
fun throws(point: JoinPoint, ex: Throwable) {
|
|
||||||
val clazz = point.signature.declaringType
|
|
||||||
logger.error(
|
|
||||||
ex,
|
|
||||||
"${clazz.name}.${point.signature.name} exception:${ex.message}, args:${gson.toJson(point.args)}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 环绕通知,环绕增强,相当于MethodInterceptor
|
* 环绕通知,环绕增强,相当于MethodInterceptor
|
||||||
|
|||||||
@@ -4,15 +4,16 @@ import com.synebula.gaea.app.struct.ExcelData
|
|||||||
import org.apache.poi.hpsf.Decimal
|
import org.apache.poi.hpsf.Decimal
|
||||||
import org.apache.poi.hssf.usermodel.HSSFCell
|
import org.apache.poi.hssf.usermodel.HSSFCell
|
||||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook
|
||||||
import org.apache.poi.ss.usermodel.BorderStyle
|
import org.apache.poi.ss.formula.BaseFormulaEvaluator
|
||||||
import org.apache.poi.ss.usermodel.HorizontalAlignment
|
import org.apache.poi.ss.usermodel.*
|
||||||
import org.apache.poi.ss.usermodel.Sheet
|
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator
|
||||||
import org.apache.poi.ss.usermodel.VerticalAlignment
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
||||||
import org.springframework.web.multipart.MultipartFile
|
import org.springframework.web.multipart.MultipartFile
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Excel操作对象
|
* Excel操作对象
|
||||||
*/
|
*/
|
||||||
@@ -88,16 +89,16 @@ object Excel {
|
|||||||
*
|
*
|
||||||
* @param file 上传文件流
|
* @param file 上传文件流
|
||||||
* @param columns 文件列名称、类型定义
|
* @param columns 文件列名称、类型定义
|
||||||
* @param startRow 数据起始行,默认0
|
* @param rowStart 数据起始行,默认0
|
||||||
* @param startColumn 数据起始列,默认0
|
* @param columnStart 数据起始列,默认0
|
||||||
*
|
*
|
||||||
* @return ExcelData
|
* @return ExcelData
|
||||||
*/
|
*/
|
||||||
fun import(
|
fun import(
|
||||||
file: MultipartFile,
|
file: MultipartFile,
|
||||||
columns: List<Pair<String, String>>,
|
columns: List<Pair<String, String>>,
|
||||||
startRow: Int = 0,
|
rowStart: Int = 0,
|
||||||
startColumn: Int = 0
|
columnStart: Int = 0
|
||||||
): List<Map<String, Any>> {
|
): List<Map<String, Any>> {
|
||||||
if (file.originalFilename?.endsWith(".xls") != true && file.originalFilename?.endsWith(".xlsx") != true)
|
if (file.originalFilename?.endsWith(".xls") != true && file.originalFilename?.endsWith(".xlsx") != true)
|
||||||
throw RuntimeException("无法识别的文件格式[${file.originalFilename}]")
|
throw RuntimeException("无法识别的文件格式[${file.originalFilename}]")
|
||||||
@@ -109,34 +110,107 @@ object Excel {
|
|||||||
val sheet = workbook.getSheetAt(0)
|
val sheet = workbook.getSheetAt(0)
|
||||||
|
|
||||||
val data = mutableListOf<Map<String, Any>>()
|
val data = mutableListOf<Map<String, Any>>()
|
||||||
for (i in startRow..sheet.lastRowNum) {
|
for (i in rowStart..sheet.lastRowNum) {
|
||||||
val row = sheet.getRow(i) ?: continue
|
val row = sheet.getRow(i) ?: continue
|
||||||
val rowData = mutableMapOf<String, Any>()
|
val rowData = mutableMapOf<String, Any>()
|
||||||
for (c in startColumn until columns.size + startColumn) {
|
for (r in columnStart until columns.size + columnStart) {
|
||||||
try {
|
try {
|
||||||
val column = columns[c]
|
val column = columns[r]
|
||||||
val value: Any = when (column.second) {
|
val value: Any = when (column.second) {
|
||||||
Int::class.java.name, Double::class.java.name,
|
Int::class.java.name, Double::class.java.name,
|
||||||
Float::class.java.name, Decimal::class.java.name -> try {
|
Float::class.java.name, Decimal::class.java.name -> try {
|
||||||
row.getCell(c).numericCellValue
|
row.getCell(r).numericCellValue
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
row.getCell(c).stringCellValue
|
row.getCell(r).stringCellValue
|
||||||
}
|
}
|
||||||
Boolean::class.java.name -> try {
|
Boolean::class.java.name -> try {
|
||||||
row.getCell(c).booleanCellValue
|
row.getCell(r).booleanCellValue
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
row.getCell(c).stringCellValue
|
row.getCell(r).stringCellValue
|
||||||
}
|
}
|
||||||
Date::class.java.name -> try {
|
Date::class.java.name -> try {
|
||||||
row.getCell(c).dateCellValue
|
row.getCell(r).dateCellValue
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
row.getCell(c).stringCellValue
|
row.getCell(r).stringCellValue
|
||||||
}
|
}
|
||||||
else -> row.getCell(c).stringCellValue
|
else -> row.getCell(r).stringCellValue
|
||||||
}
|
}
|
||||||
rowData.put(columns[c].first, value)
|
rowData.put(columns[r].first, value)
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
throw RuntimeException("解析EXCEL文件${file.originalFilename}第${i}行第${c}列出错", ex)
|
throw RuntimeException("解析EXCEL文件${file.originalFilename}第${r + 1}行第${r + 1}列出错", ex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data.add(rowData)
|
||||||
|
}
|
||||||
|
workbook.close()
|
||||||
|
file.inputStream.close()
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入文件
|
||||||
|
*
|
||||||
|
* @param file 上传文件流
|
||||||
|
* @param rowStartIndex 数据起始行,默认0
|
||||||
|
* @param columnStartIndex 数据起始列,默认0
|
||||||
|
*
|
||||||
|
* @return ExcelData
|
||||||
|
*/
|
||||||
|
fun import(
|
||||||
|
file: MultipartFile,
|
||||||
|
columnSize: Int = 0,
|
||||||
|
rowStartIndex: Int = 0,
|
||||||
|
columnStartIndex: Int = 0
|
||||||
|
): List<Map<String, String>> {
|
||||||
|
if (file.originalFilename?.endsWith(".xls") != true && file.originalFilename?.endsWith(".xlsx") != true)
|
||||||
|
throw RuntimeException("无法识别的文件格式[${file.originalFilename}]")
|
||||||
|
val eva: BaseFormulaEvaluator
|
||||||
|
val workbook = if (file.originalFilename?.endsWith(".xls") == true) {
|
||||||
|
val wb = HSSFWorkbook(file.inputStream)
|
||||||
|
eva = HSSFFormulaEvaluator(wb)
|
||||||
|
wb
|
||||||
|
} else {
|
||||||
|
val wb = XSSFWorkbook(file.inputStream)
|
||||||
|
eva = XSSFFormulaEvaluator(wb)
|
||||||
|
wb
|
||||||
|
}
|
||||||
|
val sheet = workbook.getSheetAt(0)
|
||||||
|
|
||||||
|
val titles = mutableListOf<String>()
|
||||||
|
val titleRow = sheet.getRow(rowStartIndex)
|
||||||
|
val size = if (columnSize != 0) columnSize else titleRow.physicalNumberOfCells //列数
|
||||||
|
for (i in columnStartIndex until size) {
|
||||||
|
titles.add(titleRow.getCell(i).stringCellValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
val data = mutableListOf<Map<String, String>>()
|
||||||
|
for (r in (rowStartIndex + 1)..sheet.lastRowNum) {
|
||||||
|
val row = sheet.getRow(r) ?: continue
|
||||||
|
val rowData = mutableMapOf<String, String>()
|
||||||
|
for (c in columnStartIndex until size + columnStartIndex) {
|
||||||
|
try {
|
||||||
|
val title = titles[c]
|
||||||
|
val cell = row.getCell(c)
|
||||||
|
val value = when (cell.cellType) {
|
||||||
|
CellType.BOOLEAN -> cell.booleanCellValue.toString()
|
||||||
|
CellType.ERROR -> cell.errorCellValue.toString()
|
||||||
|
CellType.NUMERIC -> {
|
||||||
|
val numericCellValue: Double = cell.numericCellValue
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
DateUtil.getLocalDateTime(numericCellValue).toString()
|
||||||
|
} else {
|
||||||
|
numericCellValue.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CellType.STRING -> cell.richStringCellValue.string
|
||||||
|
CellType.BLANK -> ""
|
||||||
|
CellType.FORMULA -> eva.evaluate(cell).toString()
|
||||||
|
else -> throw Exception("匹配类型错误")
|
||||||
|
}
|
||||||
|
|
||||||
|
rowData[title] = value
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
throw RuntimeException("解析EXCEL文件${file.originalFilename}第${r + 1}行第${c + 1}列出错", ex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.add(rowData)
|
data.add(rowData)
|
||||||
|
|||||||
Reference in New Issue
Block a user