src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt
@@ -1,14 +1,15 @@
package cn.flightfeather.supervision.business.report
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.DateUtil
import cn.flightfeather.supervision.common.utils.ExcelUtil
import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
import cn.flightfeather.supervision.common.utils.UUIDGenerator
import cn.flightfeather.supervision.domain.ds1.entity.DataProduct
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import tk.mybatis.mapper.entity.Example
import java.io.FileOutputStream
import java.io.OutputStream
import java.util.*
import kotlin.collections.ArrayList
import kotlin.reflect.full.createInstance
/**
 * excel报告模板基类
@@ -23,14 +24,26 @@
    //模板名称
    abstract val templateName: String
    // 中间结果对象 by hc 2024.12.5
    abstract var resultObjects: MutableList<BaseTemplateResult>
    // 中间结果基本信息对应数据库中的entity
    var dataProduct = DataProduct()
    // 中间结果具体信息对应数据库中的entity
    val entities = ArrayList<Any>()
    // 执行状态 by hc 2024.12.5
    var isExecuted: Boolean = false
    //表头
    val head = mutableListOf<MutableList<ExcelUtil.MyCell>>()
    //内容
    val contents = mutableListOf<MutableList<Any>>()
    open fun execute() {
    // 生成Template相关数据 by hc 2024.12.9
    open fun genData() {
        //数据源重置
        dataSource.reset()
        //合成表头
@@ -49,6 +62,16 @@
        }
    }
    open fun execute() {
        try {
            genData()
            // 没有错误正常运行结束
            isExecuted = true
        } catch (e: Exception) {
            // TODO: handle exception
        }
    }
    override fun toWorkBook(wb: HSSFWorkbook) {
        val f = tableFormat()
        ExcelUtil.write(f.first, f.second, wb, templateName)
@@ -60,6 +83,66 @@
    }
    /**
     * 输出到对象
     * hc 2024.12.06
     */
    fun toObject(): MutableList<BaseTemplateResult>  {
        if (!isExecuted) {
            execute()
        }
        // 获得和template对应的中间结果数据对象KCLASS对象
        val classType = resultObjects.first()::class
        try {
            // 清空数组
            resultObjects.clear()
            contents.forEach {
                // 创建对应的中间结果数据对象
                val resultObj = classType.createInstance()
                resultObj.setProperties(it)
                resultObjects.add(resultObj)
            }
        }catch (e: Exception) {
            // 如果出现异常恢复到初始状态 避免下次调用toObject数据重复
            resultObjects.clear()
            resultObjects.add(classType.createInstance())
        }
        return resultObjects
    }
    /**
     * 生成中间结果具体信息entity
     * by hc 2024.12.12
     */
    fun toDBEntity() {
        entities.clear()
        if (!isExecuted) {
            execute()
        }
        // 先执行toObject后将toObject的结果转化为DBEntity
        toObject()
        resultObjects.forEach {
            entities.add(it.convertToDBEntity())
        }
    }
    /**
     * 生成中间结果基本信息entity
     * by hc 2024.12.12
     */
    fun toDBBaseInfoEntity() {
        dataProduct = DataProduct()
        dataProduct.guid = UUIDGenerator.generate16ShortUUID()
        dataProduct.townCode = dataSource.config.townCode
        dataProduct.cityCode = dataSource.config.cityCode
        dataProduct.districtCode = dataSource.config.districtCode
        dataProduct.endTime = dataSource.config.endTime
        dataProduct.startTime = dataSource.config.startTime
        dataProduct.provinceCode = dataSource.config.provinceCode
        dataProduct.sceneTypeId = dataSource.config.sceneType?.toByte() ?: -1
        dataProduct.taskGuid = dataSource.config.topTaskGuid
    }
    /**
     * 输出为文档
     */
    override fun toFile(path: String) {