riku
2021-06-30 9f12f5605ebffbf6312db9d653f434d56cda20c3
1. 调整运算逻辑,取消部分中间值的存储,减少内存消耗
已修改2个文件
68 ■■■■■ 文件已修改
src/main/kotlin/com/flightfeather/uav/model/BaseModel.kt 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/kotlin/com/flightfeather/uav/model/epw/EPWModelTest.kt 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/com/flightfeather/uav/model/BaseModel.kt
@@ -27,6 +27,8 @@
    // 计算结果
    private val result = mutableSetOf<BaseEffect>()
    private val rMap = mutableMapOf<String, MutableMap<String, MutableMap<String?, MutableList<Double>>>>()
    // 结果筛选方式
    abstract var sections: List<BaseSection<M, S>>
@@ -37,6 +39,7 @@
     */
    fun execute(mDataList: List<M>, sopList: List<S>) {
        result.clear()
        rMap.clear()
        //1. 数据预处理
        val mList = dataPrep.mDataPrep(mDataList)
@@ -73,7 +76,8 @@
        sections.forEach { it.filter(mData, sop, effect) }
        // 保存结果
        result.add(effect)
//        result.add(effect)
        formatConversion2(effect)
    }
    fun outputToExcel(
@@ -83,7 +87,7 @@
        sheetName: String = "sheet1",
        done: Boolean = true
    ): Pair<HSSFWorkbook, FileOutputStream>? {
        val rMap = formatConversion()
//        val rMap = formatConversion()
        val workbook = _workbook ?: HSSFWorkbook()
        val fileName = fName ?: "污染溯源权重模型${DateUtil().DateToString(Date(), "yyyy-MM-ddHHmmss")}.xls"
@@ -204,6 +208,28 @@
        return rMap
    }
    private fun formatConversion2(e: BaseEffect) {
        val rKey = "${e.sourceName}(${e.index})"
        if (!rMap.containsKey(rKey)) {
            rMap[rKey] = mutableMapOf()
        }
        val lMap = rMap[rKey]!!
        e.value.forEach { v ->
            if (!lMap.containsKey(v.first.des)) {
                lMap[v.first.des] = mutableMapOf()
            }
            val tMap = lMap[v.first.des]!!
            e.tag.forEach { t ->
                val factorName = v.first.des
                val lKey = t.levelName + "($factorName)"
                if (!tMap.containsKey(lKey)) {
                    tMap[lKey] = mutableListOf()
                }
                tMap[lKey]?.add(v.second)
            }
        }
    }
    /**
     * 监测数据合法性检查
     */
src/test/kotlin/com/flightfeather/uav/model/epw/EPWModelTest.kt
@@ -56,25 +56,25 @@
        val dataSet = mutableListOf<DataVo>()
        val timeSet = listOf(
            Pair("2021-06-18 15:00:00", "2021-06-18 23:59:59"),
            Pair("2021-06-19 00:00:00", "2021-06-19 23:59:59"),
            Pair("2021-06-20 00:00:00", "2021-06-20 23:59:59"),
            Pair("2021-06-21 00:00:00", "2021-06-21 23:59:59"),
            Pair("2021-06-22 00:00:00", "2021-06-22 23:59:59"),
            Pair("2021-06-23 00:00:00", "2021-06-23 23:59:59"),
            Pair("2021-06-24 00:00:00", "2021-06-24 23:59:59"),
            Pair("2021-06-25 00:00:00", "2021-06-25 23:59:59"),
            Pair("2021-06-26 00:00:00", "2021-06-26 23:59:59"),
            Pair("2021-06-27 00:00:00", "2021-06-27 23:59:59"),
            Pair("2021-06-28 00:00:00", "2021-06-28 23:59:59"),
            Pair("2021-06-29 00:00:00", "2021-06-29 23:59:59"),
            Pair("2021-06-30 00:00:00", "2021-06-30 08:00:00"),
//            Pair("2021-03-26 11:28:12", "2021-03-26 21:30:00"),
//            Pair("2021-04-09 07:18:12", "2021-04-09 22:04:39"),
//            Pair("2021-04-10 08:00:02", "2021-04-10 09:44:18"),
//            Pair("2021-04-21 16:46:12", "2021-04-21 21:18:35"),
//            Pair("2021-05-24 11:10:12", "2021-05-24 19:31:02"),
//            Pair("2021-06-04 09:02:40", "2021-06-04 20:14:18"),
//            Pair("2021-06-18 15:00:00", "2021-06-18 23:59:59"),
//            Pair("2021-06-19 00:00:00", "2021-06-19 23:59:59"),
//            Pair("2021-06-20 00:00:00", "2021-06-20 23:59:59"),
//            Pair("2021-06-21 00:00:00", "2021-06-21 23:59:59"),
//            Pair("2021-06-22 00:00:00", "2021-06-22 23:59:59"),
//            Pair("2021-06-23 00:00:00", "2021-06-23 23:59:59"),
//            Pair("2021-06-24 00:00:00", "2021-06-24 23:59:59"),
//            Pair("2021-06-25 00:00:00", "2021-06-25 23:59:59"),
//            Pair("2021-06-26 00:00:00", "2021-06-26 23:59:59"),
//            Pair("2021-06-27 00:00:00", "2021-06-27 23:59:59"),
//            Pair("2021-06-28 00:00:00", "2021-06-28 23:59:59"),
//            Pair("2021-06-29 00:00:00", "2021-06-29 23:59:59"),
//            Pair("2021-06-30 00:00:00", "2021-06-30 08:00:00"),
            Pair("2021-03-26 11:28:12", "2021-03-26 21:30:00"),
            Pair("2021-04-09 07:18:12", "2021-04-09 22:04:39"),
            Pair("2021-04-10 08:00:02", "2021-04-10 09:44:18"),
            Pair("2021-04-21 16:46:12", "2021-04-21 21:18:35"),
            Pair("2021-05-24 11:10:12", "2021-05-24 19:31:02"),
            Pair("2021-06-04 09:02:40", "2021-06-04 20:14:18"),
        )
        val epwModel = EPWModel()