1. 新增 BaseExcel.kt 和 BaseTemplate.kt 的 toObject输出到对象方法 2. 新增 BaseTemplate 是否执行的状态属性 3. 在cn.flightfeather.supervision.business.report.bean包下新增 BaseTemplateResult.kt 结果对象抽象类 以及 ProAnalysisSummaryResult.kt 和 ProDetailSummaryResult.kt 对应实现:问题整改动态跟踪和分街镇问题整改分析的中间结果对象  注:除了问题整改动态跟踪和分街镇问题整改分析其他的汇总表对象中都没有对应中间结果对象,因此这里还有报错信息
已修改4个文件
已添加3个文件
277 ■■■■■ 文件已修改
src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/business/report/BaseExcel.kt
@@ -1,10 +1,10 @@
package cn.flightfeather.supervision.business.report
import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import java.io.File
import java.io.FileOutputStream
import java.io.OutputStream
import java.util.*
/**
 * å„模板合并输出为整体文档
@@ -16,10 +16,23 @@
    abstract val fileName: String
    // ä¸­é—´ç»“果对象 by hc 2024.12.06
    private val objectResults: MutableList<MutableList<BaseTemplateResult>> = mutableListOf()
    // excel文档
    private var workbook = HSSFWorkbook()
    fun getReportName(): String = "${dataSource.areaName()}-${fileName}.xlsx"
    // è¾“出到对象
    fun toObject() {
        templates.forEach {
            if (!it.isExecuted) {
                it.execute()
            }
            objectResults.add(it.toObject())
        }
    }
    fun toFile(path: String) {
        val fileName = getReportName()
@@ -33,7 +46,9 @@
    fun toOutputStream(out: OutputStream) {
        templates.forEach {
            if (!it.isExecuted) {
            it.execute()
            }
            it.toWorkBook(workbook)
        }
        workbook.write(out)
src/main/kotlin/cn/flightfeather/supervision/business/report/BaseTemplate.kt
@@ -1,14 +1,12 @@
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 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.reflect.full.createInstance
/**
 * excel报告模板基类
@@ -23,14 +21,20 @@
    //模板名称
    abstract val templateName: String
    // ä¸­é—´ç»“果对象 by hc 2024.12.5
    abstract var resultObjects: MutableList<BaseTemplateResult>
    // æ‰§è¡ŒçŠ¶æ€ 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 +53,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 +74,33 @@
    }
    /**
     * è¾“出到对象
     * 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
    }
    /**
     * è¾“出为文档
     */
    override fun toFile(path: String) {
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/BaseTemplateResult.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package cn.flightfeather.supervision.business.report.bean
import cn.flightfeather.supervision.common.utils.ExcelUtil
import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.declaredMemberProperties
import kotlin.reflect.full.findAnnotation
/**
 * excel报告模板中间结果对象基类
 * hc 2024.12.06
 */
abstract class BaseTemplateResult {
    // å®šä¹‰æ³¨è§£
    annotation class ExcelHead(val index: Int, val des: String)
    fun setProperties(values: MutableList<Any>) {
        // éåŽ†æ‰€æœ‰å±žæ€§å¹¶èµ‹å€¼
        var index = 0
        this::class.declaredMemberProperties.sortedBy { it.findAnnotation<ExcelHead>()?.index }.forEach { property ->
            // æ£€æŸ¥å±žæ€§æ˜¯å¦å¯ä»¥è®¾ç½®å€¼
            if (property is KMutableProperty<*>) {
                try {
                    // æš‚存最后的属性值的变量 é»˜è®¤å°±æ˜¯values[index]
                    var c: Any = values[index]
                    // ä»…仅为了简写values[index]
                    val v = values[index++]
                    // ä»ŽMyCell对象中拿出百分比类型
                    if (v is ExcelUtil.MyCell) {
                        if (v.isPercent) {
                            val percent = v.text.toBigDecimalOrNull()
                            if (percent != null) {
                                percent.setScale(2)
                                c = percent
                            }else {
                                c = ""
                            }
                        }
                    }
                    // å‘属性中赋值
                    property.setter.call(this, c)
                } catch (e: Exception) {
                }
            }
        }
    }
}
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProAnalysisSummaryResult.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package cn.flightfeather.supervision.business.report.bean
import java.math.BigDecimal
/**
 * åˆ†è¡—镇问题整改分析汇总表中间结果对象
 * hc 2024.12.06
 */
class ProAnalysisSummaryResult : BaseTemplateResult()  {
    @ExcelHead(1, "街镇序号")
    var formIndex: Int? = null
    @ExcelHead(2, "街镇/工业区")
    var sceneTownname: String? = null
    @ExcelHead(3, "场景类别")
    var sceneType: String? = null
    @ExcelHead(4, "场景数")
    var sceneCount: Int? = null
    @ExcelHead(5, "完工、未施工、停工或停业、关闭等")
    var inactiveScenes: Int? = null
    @ExcelHead(6, "施工中、运营中总数")
    var activeScenes: Int? = null
    @ExcelHead(7, "整改单位数")
    var changeScenes: Int? = null
    @ExcelHead(8, "整改单位占比")
    var changeScenePer: BigDecimal? = null
    @ExcelHead(9, "问题数")
    var proNum: Int? = null
    @ExcelHead(10, "问题占比")
    var proPer: BigDecimal? = null
    @ExcelHead(11, "整改数")
    var changeNum: Int? = null
    @ExcelHead(12, "整改率")
    var changePer: BigDecimal? = null
    @ExcelHead(13, "整改单位比排名")
    var changeSceneRank: Int? = null
    @ExcelHead(14, "问题整改率排名")
    var proChangeRank: Int? = null
    @ExcelHead(15, "拟列入重点监管数")
    var focusSceneNum: Int? = null
    @ExcelHead(16, "拟列入重点监管占比")
    var focusScenePer: BigDecimal? = null
}
src/main/kotlin/cn/flightfeather/supervision/business/report/bean/ProDetailSummaryResult.kt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package cn.flightfeather.supervision.business.report.bean
import java.math.BigDecimal
/**
 * é—®é¢˜ä¸Žæ•´æ”¹è·Ÿè¸ªæ±‡æ€»è¡¨ä¸­é—´ç»“果对象
 * hc 2024.12.06
 */
class ProDetailSummaryResult : BaseTemplateResult() {
    @ExcelHead(1, "表单编号")
    var formIndex: Int? = null
    @ExcelHead(2, "唯一序号")
    var sceneIndex: Int? = null
    @ExcelHead(3, "场景类型")
    var sceneType: String? = null
    @ExcelHead(4, "场景名称")
    var sceneName: String? = null
    @ExcelHead(5, "监管时间")
    var subTaskPlanstarttime: String? = null
    @ExcelHead(6, "巡查人员")
    var subTaskExecutorrealtimes: String? = null
    @ExcelHead(7, "问题类型")
    var problemTypename: String? = null
    @ExcelHead(8, "问题描述")
    var problemDescription: String? = null
    @ExcelHead(9, "问题位置")
    var problemLocation: String? = null
    @ExcelHead(10, "问题数")
    var problemNum: Int? = null
    @ExcelHead(11, "整改时间")
    var changeTime: String? = null
    @ExcelHead(12, "整改情况")
    var problemChanged: String? = null
    @ExcelHead(13, "整改问题")
    var changedProblem: String? = null
    @ExcelHead(14, "整改数")
    var changedNum: Int? = null
    @ExcelHead(15, "未整改问题")
    var unchangedProblems: String? = null
    @ExcelHead(16, "未整改数")
    var unChangedProblem: Int? = null
    @ExcelHead(17, "问题整改率")
    var changePercent: BigDecimal? = null
    @ExcelHead(18, "审核情况")
    var checkStatus: String? = null
    @ExcelHead(19, "问题审核时间")
    var pCheckTime: String? = null
    @ExcelHead(20, "整改审核时间")
    var cCheckTime: String? = null
    @ExcelHead(21, "问题审核数")
    var pCheckNum: Int? = null
    @ExcelHead(22, "问题审核占比")
    var pCheckPer: BigDecimal? = null
    @ExcelHead(23, "整改审核数")
    var cCheckNum: Int? = null
    @ExcelHead(24, "整改审核占比")
    var cCheckPer: BigDecimal? = null
    @ExcelHead(25, "台账提交百分比")
    var ledgerPercent: BigDecimal? = null
    @ExcelHead(26, "台账提交时间")
    var ledgerSubmitdate: String? = null
    @ExcelHead(27, "台账审核时间")
    var ledgerCheckTime: String? = null
    @ExcelHead(28, "整改跟踪提醒")
    var changeTrackingReminder: String? = null
}
src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProAnalysisSummary.kt
@@ -12,16 +12,19 @@
import cn.flightfeather.supervision.domain.ds1.entity.SceneMixingPlant
import cn.flightfeather.supervision.domain.ds1.entity.SceneStorageYard
import cn.flightfeather.supervision.domain.ds1.entity.SceneWharf
import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
import cn.flightfeather.supervision.business.report.bean.ProAnalysisSummaryResult
/**
 * åˆ†è¡—镇问题整改分析汇总表
 */
class ProAnalysisSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProAnalysisSummaryResult())
    override val cols: List<BaseCols> = listOf(ColInspectionInfo(), ColTotalGrade(), ColStrategy())
    override val templateName: String = "分街镇问题整改分析汇总表"
    override fun execute() {
    override fun genData() {
        //数据源重置
        dataSource.reset()
src/main/kotlin/cn/flightfeather/supervision/business/report/template/ProDetailSummary.kt
@@ -7,9 +7,11 @@
import cn.flightfeather.supervision.business.report.cols.ColLedger
import cn.flightfeather.supervision.business.report.cols.ColSceneName
import cn.flightfeather.supervision.business.report.cols.ColStrategy
import cn.flightfeather.supervision.business.report.bean.BaseTemplateResult
import cn.flightfeather.supervision.business.report.bean.ProDetailSummaryResult
class ProDetailSummary(dataSource: DataSource) : BaseTemplate(dataSource) {
    override val cols: List<BaseCols> = listOf(ColSceneName(), ColInspectionInfo(), ColLedger(), ColStrategy())
    override var resultObjects: MutableList<BaseTemplateResult> = mutableListOf(ProDetailSummaryResult())
    override val templateName: String = "问题与整改跟踪汇总表"
}