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()) } }