src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DataProdMiddleServiceImpl.kt
@@ -7,10 +7,7 @@
import cn.flightfeather.supervision.lightshare.service.DataProdBaseService
import cn.flightfeather.supervision.lightshare.service.DataProdMiddleService
import cn.flightfeather.supervision.lightshare.vo.dataprod.QueryOpt
import cn.flightfeather.supervision.lightshare.vo.dataprod.middle.DPEvaluationByArea
import cn.flightfeather.supervision.lightshare.vo.dataprod.middle.DPInspectionSummary
import cn.flightfeather.supervision.lightshare.vo.dataprod.middle.DPProblemCountByArea
import cn.flightfeather.supervision.lightshare.vo.dataprod.middle.DPProblemTypeCount
import cn.flightfeather.supervision.lightshare.vo.dataprod.middle.*
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
@@ -120,7 +117,7 @@
                            this.townName = firstSubtask?.townname
                            this.sceneCount = ins.distinctBy { it.subTask?.scenseid }.size
                            this.problemCount = allProblemList.size
                            this.ratio = problemCount.toDouble() / sceneCount
                            this.proAvg = problemCount.toDouble() / sceneCount
                        })
                    }
@@ -167,4 +164,40 @@
            },
        )
    }
    override fun getTypicalProblems(queryOpt: QueryOpt, rateTotal: Double): List<DPTypicalProblemScene> {
        return QueryByCache.queryCache(
            cache = { return@queryCache null },
            calculate = {
                val res = mutableListOf<DPTypicalProblemScene>()
                val inspectionInfo = dataProdBaseService.getInspectionInfo(queryOpt)
                inspectionInfo.groupBy { it.subTask?.scenseid }.forEach { (sceneId, ins) ->
                    val problems = ins.flatMap { it.problems ?: emptyList() }
                    if (problems.isEmpty()) return@forEach
                    val unChangePros = problems.filter { it.ischanged != true }
                    val changeRatio = if (problems.isNotEmpty()) {
                        (problems.size - unChangePros.size.toDouble()) / problems.size
                    } else {
                        0.0
                    }
                    if (changeRatio < rateTotal) {
                        res.add(DPTypicalProblemScene().apply {
                            val firstSubtask = ins.first().subTask
                            this.sceneId = sceneId
                            this.sceneName = firstSubtask?.scensename
                            this.townCode = firstSubtask?.towncode
                            this.townName = firstSubtask?.townname
                            this.problemCount = problems.size
                            this.changeCount = problems.size - unChangePros.size
                            this.changeRatio = changeRatio
                            this.typicalProblems = unChangePros
                                .distinctBy { it.ptguid }
                        })
                    }
                }
                return@queryCache res
            },
        )
    }
}