package cn.flightfeather.supervision.business.report
|
|
import cn.flightfeather.supervision.common.utils.ExcelUtil
|
import kotlin.math.max
|
|
/**
|
* 统计数据列基类
|
* @param chooseIndexList 选择需要输出的列序号,不填写时表示默认输出所有列
|
*/
|
abstract class BaseCols(private val chooseIndexList: List<Int>){
|
|
protected var heads = mutableListOf<MutableList<ExcelUtil.MyCell>>()
|
|
//生成表头
|
fun getHeads(dataSource: DataSource): MutableList<MutableList<ExcelUtil.MyCell>> {
|
heads = onHeads(dataSource)
|
val _heads = if (chooseIndexList.isNotEmpty()) {
|
val __heads = mutableListOf<MutableList<ExcelUtil.MyCell>>()
|
heads.forEach {head ->
|
val h = mutableListOf<ExcelUtil.MyCell>()
|
chooseIndexList.forEach {i ->
|
if (i < head.size) {
|
h.add(head[i])
|
}
|
}
|
__heads.add(h)
|
}
|
__heads
|
} else {
|
heads
|
}
|
return _heads
|
}
|
|
abstract fun onHeads(dataSource: DataSource): MutableList<MutableList<ExcelUtil.MyCell>>
|
|
//生成一行内容
|
fun getOneRow(rowData: DataSource.RowData): List<Any> {
|
// return if (rowData.noRecord()) {
|
// val r = mutableListOf<String>()
|
// repeat(heads.last().size) { r.add(("")) }
|
// r
|
// } else {
|
// onOneRow(rowData)
|
// }
|
val row = onOneRow(rowData)
|
val _row = if (chooseIndexList.isNotEmpty()) {
|
val r = mutableListOf<Any>()
|
chooseIndexList.forEach {i ->
|
if (i < row.size) {
|
r.add(row[i])
|
}
|
}
|
r
|
} else {
|
row
|
}
|
|
return _row
|
}
|
|
abstract fun onOneRow(rowData: DataSource.RowData): List<Any>
|
|
fun emptyJudge() {
|
|
}
|
|
/**
|
* 新老表头合并
|
*/
|
fun combineHead(oldHeads: MutableList<MutableList<ExcelUtil.MyCell>>, dataSource: DataSource) {
|
// FIXME: 2023/1/31 合并表头,采取简化逻辑,只有第一行的表头会进行单元格的跨行合并
|
val newHeads = getHeads(dataSource)
|
if (oldHeads.isEmpty()) {
|
newHeads.forEach { oldHeads.add(it) }
|
} else {
|
val maxRow = max(oldHeads.size, newHeads.size)
|
for (i in 0 until maxRow) {
|
val oH =
|
//取已有表头中的行
|
if (i < oldHeads.size) {
|
oldHeads[i]
|
}
|
//取新一行,同时第一行表头跨行数加一
|
else {
|
if (i > 0) {
|
oldHeads.first().forEach { it.rowSpan++ }
|
}
|
val h = mutableListOf<ExcelUtil.MyCell>()
|
|
var cols = 0
|
oldHeads.last().forEach {
|
cols += it.colSpan
|
}
|
repeat(cols) { h.add(ExcelUtil.MyCell("")) }
|
oldHeads.add(h)
|
h
|
}
|
|
val nH =
|
if (i < newHeads.size) {
|
newHeads[i]
|
} else {
|
if (i > 0) {
|
newHeads.first().forEach { it.rowSpan++ }
|
}
|
val h = mutableListOf<ExcelUtil.MyCell>()
|
|
var cols = 0
|
newHeads.last().forEach {
|
cols += it.colSpan
|
}
|
repeat(cols) { h.add(ExcelUtil.MyCell("")) }
|
newHeads.add(h)
|
h
|
}
|
}
|
|
for (i in oldHeads.indices) {
|
oldHeads[i].addAll(newHeads[i])
|
}
|
}
|
}
|
}
|