feiyu02
2025-09-19 7cbe1610b87da19ed8a146a09b1117f92d9d3d98
2025.9.19
1. 联合前端调试数据产品接口(待完成)
已修改6个文件
64 ■■■■■ 文件已修改
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DataProdBaseServiceImpl.kt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DataProdMiddleServiceImpl.kt 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/dataprod/DPMonitorDataInfo.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/dataprod/middle/DPProblemTypeCount.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/kotlin/cn/flightfeather/supervision/domain/ds1/repository/TaskRep.kt
@@ -89,4 +89,22 @@
            orderBy("starttime").desc()
        })
    }
    /**
     * 获取相同区域内上个周期的总任务
     */
    fun findLastTopTask(taskId: String?): Task? {
        val task = taskMapper.selectByPrimaryKey(taskId) ?: return null
        return taskMapper.selectByExample(Example(Task::class.java).apply {
            createCriteria()
                .andNotEqualTo("tguid", task.tguid)
                .andEqualTo("typeno", task.typeno)
                .andEqualTo("levelnum", 2)
                .andEqualTo("provincecode", task.provincecode)
                .andEqualTo("citycode", task.citycode)
                .andEqualTo("districtcode", task.districtcode)
            orderBy("starttime").desc()
        }).firstOrNull()
    }
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DataProdBaseServiceImpl.kt
@@ -211,16 +211,22 @@
            cache = { return@queryCache null },
            calculate = {
                val res = mutableListOf<DPMonitorDataInfo>()
                val objList = aopDbMapper.monitorobjectversionMapper.selectByExample(Example(Monitorobjectversion::class.java).apply {
                val sceneIdList = aopDbMapper.monitorobjectversionMapper.selectByExample(Example(Monitorobjectversion::class.java).apply {
                    createCriteria().andEqualTo("tid", queryOpt.topTaskId)
                }).map { it.sguid }
                if (sceneIdList.isEmpty()) return@queryCache res
                val sceneList = aopDbMapper.scenseMapper.selectByExample(Example(Scense::class.java).apply {
                    createCriteria().andIn("guid", sceneIdList)
                        .andEqualTo("typeid", queryOpt.sceneTypeId)
                })
                if (objList.isEmpty()) return@queryCache res
                aopDbMapper.dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply {
                    createCriteria().andBetween("drTime", queryOpt.startTime, queryOpt.endTime)
                        .andIn("objectId", objList.map { it.sguid })
                        .andIn("drSceneId", sceneList.map { it.guid })
                }).forEach {
                    res.add(DPMonitorDataInfo().apply {
                        scene = sceneList.find { scene -> scene.guid == it?.drSceneId }
                        data = it
                    })
                }
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/DataProdMiddleServiceImpl.kt
@@ -3,6 +3,7 @@
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.QueryByCache
import cn.flightfeather.supervision.domain.ds1.entity.SceneConstructionSite
import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
import cn.flightfeather.supervision.lightshare.service.DataProdBaseService
import cn.flightfeather.supervision.lightshare.service.DataProdMiddleService
import cn.flightfeather.supervision.lightshare.vo.dataprod.QueryOpt
@@ -10,6 +11,7 @@
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 org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
/**
@@ -18,7 +20,10 @@
 * @author feiyu02
 */
@Service
class DataProdMiddleServiceImpl(private val dataProdBaseService: DataProdBaseService) : DataProdMiddleService {
class DataProdMiddleServiceImpl(
    private val dataProdBaseService: DataProdBaseService, private val taskRep: TaskRep,
) : DataProdMiddleService {
    override fun getInspectionSummary(queryOpt: QueryOpt): DPInspectionSummary {
        return QueryByCache.queryCache(
@@ -34,7 +39,7 @@
                    when (it.scene?.typeid.toString()) {
                        // 对于建筑工地类型,根据其csStatus判断是否停工或完工
                        Constant.SceneType.TYPE1.value -> {
                            when ((it.subScene as SceneConstructionSite).csStatus) {
                            when ((it.subScene as SceneConstructionSite?)?.csStatus) {
                                "停工" -> {
                                    res.stopSceneCount++
                                }
@@ -62,6 +67,16 @@
        return QueryByCache.queryCache(
            cache = { return@queryCache null },
            calculate = {
                // 查询上一个周期的总任务统计情况
                val lastTopTask = taskRep.findLastTopTask(queryOpt.topTaskId)
                val lastQueryOpt = QueryOpt()
                BeanUtils.copyProperties(queryOpt, lastQueryOpt)
                lastQueryOpt.topTaskId = lastTopTask?.tguid
                val lastInspectionInfo = dataProdBaseService.getInspectionInfo(lastQueryOpt)
                val lastAllProblemList = lastInspectionInfo.flatMap { it.problems ?: emptyList() }
                val lastAllProblemMap = lastAllProblemList.groupBy { it.typeid }
                // 查询当前周期的总任务统计情况
                val res = mutableListOf<DPProblemTypeCount>()
                val inspectionInfo = dataProdBaseService.getInspectionInfo(queryOpt)
                val allProblemList = inspectionInfo.flatMap { it.problems ?: emptyList() }
@@ -71,6 +86,12 @@
                        this.typeName = problemList.firstOrNull()?.typename
                        this.count = problemList.size
                        this.ratio = problemList.size.toDouble() / allProblemList.size
                        this.ratioDiff =
                            if (lastAllProblemMap[typeid] == null) {
                                this.ratio
                            } else {
                                this.ratio - lastAllProblemMap[typeid]!!.size.toDouble() / lastAllProblemList.size
                            }
                    })
                }
                return@queryCache res
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/dataprod/DPMonitorDataInfo.kt
@@ -1,6 +1,7 @@
package cn.flightfeather.supervision.lightshare.vo.dataprod
import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult
import cn.flightfeather.supervision.domain.ds1.entity.Scense
/**
 * 数据产品监测数据信息
@@ -8,5 +9,6 @@
 * @author feiyu02
 */
class DPMonitorDataInfo {
    var scene: Scense? = null
    var data: DustDataResult? = null
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/vo/dataprod/middle/DPProblemTypeCount.kt
@@ -25,4 +25,9 @@
     * 问题数量占比
     */
    var ratio: Double = 0.0
    /**
     * 问题数量占比与上一个时间点的差值
     */
    var ratioDiff: Double = 0.0
}
src/main/kotlin/cn/flightfeather/supervision/lightshare/web/BaseResPack.kt
@@ -24,7 +24,7 @@
        BaseResponse(false, message = e.message ?: "", stackTrace = e.stackTraceToString())
    } catch (e: Exception) {
        // fixme: to log system
        e.printStackTrace()
        BaseResponse(false, message = "服务器出现内部错误", stackTrace =  e.stackTraceToString())
    }
}