¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.flightfeather.supervision.timingtask |
| | | |
| | | import cn.flightfeather.supervision.common.net.FumeHttpService |
| | | import cn.flightfeather.supervision.domain.entity.DeviceInfo |
| | | import cn.flightfeather.supervision.domain.entity.FumeMinuteValue |
| | | import cn.flightfeather.supervision.domain.enumeration.DistrictType |
| | | import cn.flightfeather.supervision.domain.enumeration.SceneType |
| | | import cn.flightfeather.supervision.domain.mapper.DeviceInfoMapper |
| | | import cn.flightfeather.supervision.domain.mapper.FumeMinuteValueMapper |
| | | import cn.flightfeather.supervision.infrastructure.utils.DateUtil |
| | | import com.github.pagehelper.PageHelper |
| | | import org.slf4j.LoggerFactory |
| | | 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.LocalTime |
| | | import java.time.ZoneId |
| | | import java.time.ZoneOffset |
| | | import java.time.format.DateTimeFormatter |
| | | import java.util.* |
| | | import javax.annotation.PostConstruct |
| | | import kotlin.math.round |
| | | |
| | | /** |
| | | * ä¸ä¼ æ²¹ççæµæ°æ® |
| | | */ |
| | | @Component |
| | | class PushFume : BaseTimingTask() { |
| | | |
| | | companion object { |
| | | // private lateinit var instance: PushFume |
| | | val LOGGER = LoggerFactory.getLogger(PushFume::class.java) |
| | | } |
| | | |
| | | @Autowired |
| | | lateinit var deviceInfoMapper: DeviceInfoMapper |
| | | |
| | | @Autowired |
| | | lateinit var fumeMinuteValueMapper: FumeMinuteValueMapper |
| | | |
| | | // @PostConstruct |
| | | // fun init() { |
| | | // instance = this |
| | | // } |
| | | |
| | | private val deviceCodeList = mutableListOf<String>() |
| | | |
| | | override val period: Long |
| | | get() = 1L |
| | | |
| | | override fun doTask(localtime: LocalDateTime) { |
| | | LOGGER.info("===========å¼å§æ§è¡æ²¹çæ°æ®ä¸ä¼ ä»»å¡===============") |
| | | // å·æ°çæµç¹ç¼å· |
| | | refreshDeviceCode() |
| | | |
| | | //æ¯10åé计ç®ä¸æ¬¡å¹³åå¼å¹¶ä¸ä¼ |
| | | // FIXME: 2021/4/8 åå¼ç计ç®é»è¾ä¹ååºè¯¥æ¾å°å
¶ä»æ¨¡å |
| | | val min = localtime.minute |
| | | if (min != 0 && min != 10 && min != 20 && min != 30 && min != 40 && min != 50) return |
| | | |
| | | //计ç®å弿¶é´ |
| | | val endTime = Date.from(localtime.minusMinutes(1).withSecond(59).atZone(ZoneId.systemDefault()).toInstant()) |
| | | val startTime = Date.from(localtime.minusMinutes(10).withSecond(0).atZone(ZoneId.systemDefault()).toInstant()) |
| | | |
| | | //çæä¸ä¼ æ°æ®ç»æä½ |
| | | val postData = FumeHttpService.PostData() |
| | | val allData = mutableListOf<FumeMinuteValue>() |
| | | deviceCodeList.forEach { |
| | | //è·åå10åéçæ°æ® |
| | | val dataList = fumeMinuteValueMapper.selectByExample(Example(FumeMinuteValue::class.java).apply { |
| | | createCriteria().andEqualTo("mvStatCode", it) |
| | | .andBetween("mvCreateTime", startTime, endTime) |
| | | and(createCriteria().orIsNull("mvUpload") |
| | | .orEqualTo("mvUpload", false)) |
| | | }) |
| | | |
| | | //计ç®åå¼ |
| | | var count = 0 |
| | | var total = 0.0 |
| | | dataList.forEach { |
| | | total += it.mvFumeConcentration2 |
| | | if (it.mvFumeConcentration2 != 0.0) { |
| | | count++ |
| | | } |
| | | } |
| | | if (count == 0) { |
| | | dataUpdate(dataList) |
| | | return@forEach |
| | | } |
| | | val average = round(total / count * 100) / 100 |
| | | |
| | | //åå¼çäº0ï¼ä¸ä¸æ¥ï¼ç´æ¥æ´æ°ä¸ä¼ ç¶æ |
| | | if (average == 0.0) { |
| | | dataUpdate(dataList) |
| | | return@forEach |
| | | } |
| | | |
| | | //çæä¸ä¼ æ°æ®ç»æä½ |
| | | dataList.last().let { |
| | | postData.data.add(FumeHttpService.FumeData( |
| | | "hengzhiyuan_${it.mvStatCode}", |
| | | DateUtil.DateToString(startTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS), |
| | | 0.0, average, |
| | | if (it.mvFanStatus) 3 else 2, |
| | | it.mvFanElectricity, 0, |
| | | if (it.mvPurifierStatus) 3 else 2, |
| | | it.mvPurifierElectricity, 0, |
| | | 0, 0.0 |
| | | )) |
| | | } |
| | | |
| | | allData.addAll(dataList) |
| | | } |
| | | |
| | | //ä¸ä¼ æ°æ®å¹¶æ´æ°æ°æ®ç¶æ |
| | | LOGGER.info("===========æ°æ®éæ ·æ¶é´ï¼$localtime") |
| | | postData.data.forEach { |
| | | LOGGER.info("${it.equipmentShowId} ** ${it.dataTime}") |
| | | } |
| | | LOGGER.info("=================================") |
| | | FumeHttpService.uploadData(postData)?.run { |
| | | LOGGER.info(this.toString()) |
| | | if (this["code"].asInt == 0 && this["data"].asInt > 0) { |
| | | dataUpdate(allData) |
| | | } |
| | | LOGGER.info("===========æ²¹çæ°æ®ä¸ä¼ ä»»å¡ç»æ============") |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å·æ°çæµç¹ç¼å· |
| | | */ |
| | | @Synchronized |
| | | private fun refreshDeviceCode() { |
| | | val now = LocalDateTime.now() |
| | | if (deviceCodeList.isEmpty() || (now.hour == 0 && now.minute <= period)) { |
| | | deviceCodeList.clear() |
| | | deviceInfoMapper.selectByExample(Example(DeviceInfo::class.java).apply { |
| | | createCriteria().andEqualTo("diProvinceCode", "31") |
| | | .andEqualTo("diCityCode", "3100") |
| | | .andEqualTo("diDistrictCode", DistrictType.XuHui.code) |
| | | .andEqualTo("diSceneTypeId", SceneType.Restaurant.value) |
| | | .andEqualTo("diDeviceTypeId", 1) |
| | | .andEqualTo("diSupplier", "hengzhiyuan") |
| | | }).forEach { |
| | | it?.let { |
| | | deviceCodeList.add(it.diCode) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ°æ®ç¶æ |
| | | */ |
| | | private fun dataUpdate(dataList: List<FumeMinuteValue>) { |
| | | dataList.forEach { |
| | | it.mvUpload = true |
| | | fumeMinuteValueMapper.updateByPrimaryKey(it) |
| | | } |
| | | } |
| | | } |