| | |
| | | package cn.flightfeather.supervision.business.autooutput.score.restaurant |
| | | |
| | | import cn.flightfeather.supervision.business.autooutput.dataanalysis.XHFuDataAnalysis |
| | | import cn.flightfeather.supervision.business.autooutput.score.ScoreItem |
| | | import cn.flightfeather.supervision.domain.ds1.entity.DustDataResult |
| | | import cn.flightfeather.supervision.domain.ds1.entity.Evaluationsubrule2 |
| | | import cn.flightfeather.supervision.domain.ds1.mapper.DustDataResultMapper |
| | | import cn.flightfeather.supervision.domain.ds3.entity.FumeDailyAnalysis |
| | | import cn.flightfeather.supervision.domain.ds3.entity.FumeExceptionData |
| | | import cn.flightfeather.supervision.domain.ds3.mapper.FumeDailyAnalysisMapper |
| | | import org.springframework.beans.factory.annotation.Autowired |
| | | import org.springframework.stereotype.Component |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.time.LocalDateTime |
| | | import java.time.ZoneId |
| | | import java.util.* |
| | | import javax.annotation.PostConstruct |
| | | |
| | | @Component |
| | | class ReScoreItem5: ScoreItem() { |
| | | class ReScoreItem5(private val xhFuDataAnalysis: XHFuDataAnalysis) : ScoreItem() { |
| | | companion object { |
| | | private lateinit var instance: ReScoreItem5 |
| | | } |
| | |
| | | /** |
| | | * 徐汇区餐饮监管平台联网记录、在线率分析数据和高峰经营时段小时超标情况 |
| | | * 选项如下: |
| | | * 1.数据无异常且无超标或显示净化装置清洁 |
| | | * 2.高峰经营时段数据在线率低于90%或显示净化装置故障 |
| | | * 3.当月高峰经营时段出现三次及以上10分钟均值超标或显示净化装置较脏 |
| | | * 4.当月高峰经营时段数据持续异常或出现三次及以上小时数据超标或无油烟净化装置或净化装置未正常开启 |
| | | * 1.数据无异常且无超标或显示净化装置清洁(不扣分) |
| | | * 2.当月存在日高峰经营时段数据在线率低于90%且出现3日及以上(扣5分) |
| | | * 3.当月存在日高峰经营时段连续三次及以上10分钟均值超标且出现2日及以内的或显示净化装置较脏(扣5分) |
| | | * 4.当月存在日高峰经营时段连续三次及以上10分钟均值超标且出现3日及以上的或无油烟净化装置或净化装置未正常开启或显示净化装置故障(扣10分) |
| | | */ |
| | | override fun otherProblem(size: Int): Int? { |
| | | var i = 1 |
| | | when { |
| | | condition1() -> { |
| | | if (i > size - 1) i = size - 1 |
| | | return i |
| | | } |
| | | condition2() -> { |
| | | i = 2 |
| | | if (i > size - 1) i = size - 1 |
| | | return i |
| | | } |
| | | condition3() -> { |
| | | i = 3 |
| | | if (i > size - 1) i = size - 1 |
| | | return i |
| | | } |
| | | else -> return null |
| | | } |
| | | } |
| | | override fun otherProblem(size: Int): List<Int>? { |
| | | val result = mutableListOf<Int>() |
| | | |
| | | /** |
| | | * @return true 高峰经营时段数据在线率低于90%或显示净化装置故障 |
| | | */ |
| | | private fun condition1(): Boolean { |
| | | return false |
| | | } |
| | | |
| | | /** |
| | | * @return true 当月高峰经营时段出现三次及以上10分钟均值超标或显示净化装置较脏 |
| | | */ |
| | | private fun condition2(): Boolean { |
| | | val time = evaluationScene.subTask.value?.planstarttime |
| | | val lt = LocalDateTime.ofInstant(time?.toInstant(), ZoneId.systemDefault()) |
| | | val st = lt.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0) |
| | | val et = st.plusMonths(1) |
| | | val r = dustDataResultMapper.selectByExample(Example(DustDataResult::class.java).apply { |
| | | createCriteria().andGreaterThanOrEqualTo("drTime", st) |
| | | .andLessThan("drTime", et) |
| | | .andEqualTo("drSceneId", evaluationScene.scene.value?.guid) |
| | | }) |
| | | evaluationScene.config?.startTime = Date.from(st.atZone(ZoneId.systemDefault()).toInstant()) |
| | | evaluationScene.config?.endTime = Date.from(et.atZone(ZoneId.systemDefault()).toInstant()) |
| | | val dailyAnalysisDataList = xhFuDataAnalysis.fetchDataResources(evaluationScene) |
| | | val exceptionDataList = xhFuDataAnalysis.fetchExceptionData(evaluationScene) |
| | | |
| | | var result = false |
| | | r.forEach { |
| | | if (it == null) return@forEach |
| | | if (it.drExceedTimes >= 3) { |
| | | result = true |
| | | var count = 0 |
| | | dailyAnalysisDataList.forEach { it.forEach dList@ {f -> |
| | | val keyOnlineRate = f?.keyOnlineRate?.split("%")?.get(0)?.toDouble() ?: return@dList |
| | | if (keyOnlineRate < 0.9) { |
| | | count++ |
| | | } |
| | | } } |
| | | |
| | | if (count >= 3) { |
| | | result.add(1) |
| | | } |
| | | |
| | | val dayList = mutableListOf<Int>() |
| | | exceptionDataList.forEach { |
| | | // 不在高峰时段的异常数据不作为判断依据 |
| | | if (!peakPeriod(it)) return@forEach |
| | | // 异常时长大于等于20分钟,表示三个时间点的数据异常 |
| | | if ((it?.endTime?.time?.minus(it.beginTime.time) ?: 0) >= (20 * 60 * 1000)) { |
| | | val cal = Calendar.getInstance() |
| | | cal.time = it!!.beginTime |
| | | val date = cal.get(Calendar.DAY_OF_MONTH) |
| | | if (!dayList.contains(date)) { |
| | | dayList.add(date) |
| | | } |
| | | } |
| | | } |
| | | //日高峰经营时段连续三次及以上10分钟均值超标且出现3日及以上 |
| | | if (dayList.size >= 3) { |
| | | result.add(3) |
| | | } |
| | | //日高峰经营时段连续三次及以上10分钟均值超标且出现2日及以内 |
| | | else if (dayList.size > 0) { |
| | | result.add(2) |
| | | } |
| | | |
| | | return result |
| | | } |
| | | |
| | | /** |
| | | * @return true 当月高峰经营时段数据持续异常或出现三次及以上小时数据超标或无油烟净化装置或净化装置未正常开启 |
| | | * 判断异常是否处于高峰时段 |
| | | */ |
| | | private fun condition3(): Boolean { |
| | | return false |
| | | private fun peakPeriod(data: FumeExceptionData?): Boolean { |
| | | if (data == null) return false |
| | | val today = LocalDateTime.ofInstant(data.beginTime.toInstant(), ZoneId.systemDefault()) |
| | | val noonP1 = today.withHour(9).withMinute(59).withSecond(59) |
| | | val noonP2 = today.withHour(14).withMinute(0).withSecond(0) |
| | | val nightP1 = today.withHour(16).withMinute(59).withSecond(59) |
| | | val nightP2 = today.withHour(21).withMinute(0).withSecond(0) |
| | | val beginTime = LocalDateTime.ofInstant(data.beginTime.toInstant(), ZoneId.systemDefault()) |
| | | val endTime = LocalDateTime.ofInstant(data.endTime.toInstant(), ZoneId.systemDefault()) |
| | | val b1 = |
| | | (beginTime.isAfter(noonP1) && beginTime.isBefore(noonP2)) || (beginTime.isAfter(nightP1) && beginTime.isBefore( |
| | | nightP2)) |
| | | val b2 = (endTime.isAfter(noonP1) && endTime.isBefore(noonP2)) || (endTime.isAfter(nightP1) && endTime.isBefore( |
| | | nightP2)) |
| | | |
| | | return b1 || b2 |
| | | } |
| | | |
| | | } |