ledgerserver.rar | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/kotlin/cn/flightfeather/supervision/push/PushService.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/kotlin/cn/flightfeather/supervision/timingtask/FetchVOC.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/kotlin/cn/flightfeather/supervision/timingtask/PushFume.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ledgerserver.rarBinary files differ
src/main/kotlin/cn/flightfeather/supervision/push/PushService.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package cn.flightfeather.supervision.push import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase.getRequestId import com.aliyuncs.push.model.v20160801.PushResponse import com.aliyuncs.utils.ParameterHelper import com.aliyuncs.push.model.v20160801.PushRequest import com.aliyuncs.DefaultAcsClient import com.aliyuncs.profile.DefaultProfile import com.aliyuncs.profile.IClientProfile import java.util.* /** * ç§»å¨æ¨éæå¡ * @author riku * Date: 2019/12/26 */ class PushService { private val pushRequest: PushRequest private val client: DefaultAcsClient companion object { const val accessKeyId = "LTAI4FvmhG97saKL33tDqUV8" const val accessKeySecret = "3PyluVDS97GTGVmm1p3s6vbLkyqZMf" const val appKey = 28232249L } init { val profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret) client = DefaultAcsClient(profile) pushRequest = PushRequest() pushRequest.appKey = appKey pushRequest.pushType = "NOTICE" // æ¶æ¯ç±»å MESSAGE NOTICE pushRequest.deviceType = "ANDROID" // 设å¤ç±»å ANDROID iOS ALL. setAndroid() // æ¨éæ§å¶ // val pushDate = Date(System.currentTimeMillis()) // 30ç§ä¹é´çæ¶é´ç¹, ä¹å¯ä»¥è®¾ç½®æä½ æå®åºå®æ¶é´ // val pushTime = ParameterHelper.getISO8601Time(pushDate) // pushRequest.pushTime = pushTime // 延忍éãå¯éï¼å¦æä¸è®¾ç½®è¡¨ç¤ºç«å³æ¨é val expireTime = ParameterHelper.getISO8601Time(Date(System.currentTimeMillis() + 12 * 3600 * 1000)) // 12å°æ¶åæ¶æ¯å¤±æ, ä¸ä¼ååé pushRequest.expireTime = expireTime pushRequest.storeOffline = true // ç¦»çº¿æ¶æ¯æ¯å¦ä¿å,è¥ä¿å, 卿¨éæ¶åï¼ç¨æ·å³ä½¿ä¸å¨çº¿ï¼ä¸ä¸æ¬¡ä¸çº¿å伿¶å° } fun pushByAccount(accountList: List<String>, all: Boolean = false) { // æ¨éç®æ val accounts = StringBuilder() accountList.forEach { if (accounts.isNotEmpty()) { accounts.append(",") } accounts.append(it) } if (all) { pushRequest.target = "ALL" //æ¨éç®æ : DEVICE:æè®¾å¤æ¨é ALIAS : æå«åæ¨é ACCOUNT:æå¸å·æ¨é TAG:ææ ç¾æ¨é; ALL: å¹¿ææ¨é pushRequest.targetValue = "ALL" //æ ¹æ®Targetæ¥è®¾å®ï¼å¦Target=DEVICE, å对åºçå¼ä¸º 设å¤id1,设å¤id2. å¤ä¸ªå¼ä½¿ç¨éå·åé.(å¸å·ä¸è®¾å¤æä¸æ¬¡æå¤100个çéå¶) } else { pushRequest.target = "ACCOUNT" //æ¨éç®æ : DEVICE:æè®¾å¤æ¨é ALIAS : æå«åæ¨é ACCOUNT:æå¸å·æ¨é TAG:ææ ç¾æ¨é; ALL: å¹¿ææ¨é pushRequest.targetValue = accounts.toString() //æ ¹æ®Targetæ¥è®¾å®ï¼å¦Target=DEVICE, å对åºçå¼ä¸º 设å¤id1,设å¤id2. å¤ä¸ªå¼ä½¿ç¨éå·åé.(å¸å·ä¸è®¾å¤æä¸æ¬¡æå¤100个çéå¶) } // pushRequest.setTarget("ALL"); //æ¨éç®æ : DEVICE:æ¨éç»è®¾å¤; ACCOUNT:æ¨éç»æå®å¸å·,TAG:æ¨éç»èªå®ä¹æ ç¾; ALL: æ¨éç»å ¨é¨ // pushRequest.setTargetValue("ALL"); //æ ¹æ®Targetæ¥è®¾å®ï¼å¦Target=DEVICE, å对åºçå¼ä¸º 设å¤id1,设å¤id2. å¤ä¸ªå¼ä½¿ç¨éå·åé.(å¸å·ä¸è®¾å¤æä¸æ¬¡æå¤100个çéå¶) } fun push(title: String, body: String) { // æ¨éé ç½® pushRequest.title = title // æ¶æ¯çæ é¢ pushRequest.body = body // æ¶æ¯çå 容 val pushResponse = client.getAcsResponse(pushRequest, true, 3) System.out.printf("RequestId: %s, MessageID: %s\n", pushResponse.requestId, pushResponse.messageId) } private fun setIOS() { // æ¨éé ç½®: iOS pushRequest.iosBadge = 5 // iOSåºç¨å¾æ å³ä¸è§è§æ pushRequest.iosMusic = "default" // iOSéç¥å£°é³ pushRequest.iosSubtitle = "iOS10 subtitle"//iOS10éç¥å¯æ é¢çå 容 pushRequest.iosNotificationCategory = "iOS10 Notification Category"//æå®iOS10éç¥Category pushRequest.iosMutableContent = true//æ¯å¦å 许æ©å±iOSéç¥å 容 pushRequest.iosApnsEnv = "DEV"//iOSçéç¥æ¯éè¿APNsä¸å¿æ¥åéçï¼éè¦å¡«å对åºçç¯å¢ä¿¡æ¯ã"DEV" : 表示å¼åç¯å¢ "PRODUCT" : 表示ç产ç¯å¢ pushRequest.iosRemind = true // æ¶æ¯æ¨éæ¶è®¾å¤ä¸å¨çº¿ï¼æ¢ä¸ç§»å¨æ¨éçæå¡ç«¯çé¿è¿æ¥ééä¸éï¼ï¼åè¿æ¡æ¨éä¼å为éç¥ï¼éè¿è¹æçAPNséééè¾¾ä¸æ¬¡ã注æï¼ç¦»çº¿æ¶æ¯è½¬éç¥ä» éç¨äºç产ç¯å¢ pushRequest.iosRemindBody = "iOSRemindBody"//iOSæ¶æ¯è½¬éç¥æ¶ä½¿ç¨çiOSéç¥å 容ï¼ä» å½iOSApnsEnv=PRODUCT && iOSRemind为trueæ¶ææ pushRequest.iosExtParameters = "{\"_ENV_\":\"DEV\",\"k2\":\"v2\"}" //éç¥çæ©å±å±æ§(注æ : è¯¥åæ°è¦ä»¥json mapçæ ¼å¼ä¼ å ¥,å¦åä¼è§£æåºé) } private fun setAndroid() { // æ¨éé ç½®: Android pushRequest.androidNotifyType = "BOTH"//éç¥çæéæ¹å¼ "VIBRATE" : éå¨ "SOUND" : å£°é³ "BOTH" : 声é³åéå¨ NONE : éé³ pushRequest.androidNotificationChannel = "1" // pushRequest.androidNotificationBarType = 1//éç¥æ èªå®ä¹æ ·å¼0-100 // pushRequest.androidNotificationBarPriority = 1//éç¥æ èªå®ä¹æ ·å¼0-100 pushRequest.androidOpenType = "APPLICATION" //ç¹å»éç¥åå¨ä½ "APPLICATION" : æå¼åºç¨ "ACTIVITY" : æå¼AndroidActivity "URL" : æå¼URL "NONE" : æ 跳转 // pushRequest.androidOpenUrl = "http://www.aliyun.com" //Androidæ¶å°æ¨éåæå¼å¯¹åºçurl,ä» å½AndroidOpenType="URL"ææ // pushRequest.androidActivity = "com.alibaba.push2.demo.XiaoMiPushActivity" // 设å®éç¥æå¼çactivityï¼ä» å½AndroidOpenType="Activity"ææ pushRequest.androidMusic = "default" // Androidéç¥é³ä¹ // pushRequest.androidPopupActivity = "com.ali.demo.PopupActivity"//è®¾ç½®è¯¥åæ°åå¯å¨è¾ å©å¼¹çªåè½, æ¤å¤æå®éç¥ç¹å»å跳转çActivityï¼è¾ å©å¼¹çªçåææ¡ä»¶ï¼1. éæç¬¬ä¸æ¹è¾ å©ééï¼2. StoreOfflineåæ°è®¾ä¸ºtrueï¼ // pushRequest.androidPopupTitle = "Popup Title" // pushRequest.androidPopupBody = "Popup Body" // pushRequest.androidExtParameters = "{\"k1\":\"android\",\"k2\":\"v2\"}" //设å®éç¥çæ©å±å±æ§ã(注æ : è¯¥åæ°è¦ä»¥ json map çæ ¼å¼ä¼ å ¥,å¦åä¼è§£æåºé) } } src/main/kotlin/cn/flightfeather/supervision/timingtask/FetchVOC.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,113 @@ package cn.flightfeather.supervision.timingtask import cn.flightfeather.supervision.common.net.VOCHttpService import cn.flightfeather.supervision.domain.entity.DeviceInfo import cn.flightfeather.supervision.domain.entity.VOCHourValue 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.VOCHourValueMapper import cn.flightfeather.supervision.infrastructure.utils.DateUtil import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component import tk.mybatis.mapper.entity.Example import java.time.LocalDateTime import java.util.* import javax.annotation.PostConstruct /** * è·åvocçæµæ°æ® */ @Component class FetchVOC : BaseTimingTask() { companion object { private lateinit var instance: FetchVOC } @Autowired lateinit var deviceInfoMapper: DeviceInfoMapper @Autowired lateinit var vocHourValueMapper: VOCHourValueMapper @PostConstruct fun init() { instance = this } override val period: Long get() = 15L override fun doTask(localtime:LocalDateTime) { getVOCData() } private fun getVOCData() { val deviceCodeList = mutableListOf<String>() deviceInfoMapper.selectByExample(Example(DeviceInfo::class.java).apply { createCriteria().andEqualTo("diProvinceCode", "31") .andEqualTo("diCityCode", "3100") .andEqualTo("diDistrictCode", DistrictType.XuHui.code) .andEqualTo("diSceneTypeId", SceneType.VehicleRepair.value) .andEqualTo("diDeviceTypeId", 1) }).forEach { it?.let { deviceCodeList.add(it.diCode) } } val cal = Calendar.getInstance(Locale.CHINA).apply { set(Calendar.MINUTE, 0) set(Calendar.SECOND, 0) } val endTime = DateUtil.DateToString(cal.time, "yyyy-MM-dd HH:mm:ss") ?: "" cal.add(Calendar.HOUR_OF_DAY, -1) val startTime = DateUtil.DateToString(cal.time, "yyyy-MM-dd HH:mm:ss") ?: "" deviceCodeList.forEach { val deviceInfo = VOCHttpService.DeviceInfo(listOf(it), startTime, endTime) // threadPoo?.execute { VOCHttpService.getVOCData(deviceInfo)?.run { try { if (this["code"].asInt == 200) { val data = this["data"].asJsonObject data["rtdMinuteHourDayBeans"].asJsonArray.forEach {e -> e.asJsonObject.let { o-> val hourValue = VOCHourValue() hourValue.vocStatCode = o["deviceCode"].asString val collectTime = o["collectTime"].asString hourValue.vocDataTime = DateUtil.StringToDate(collectTime) o["minuteHourDayValueBeans"].asJsonArray.forEach {e1 -> e1.asJsonObject.let {o1 -> when (o1["factorCode"].asString) { "e70201" -> hourValue.vocFanElectricity1 = o1["factorAvg"].asDouble "e70202" -> hourValue.vocFanElectricity2 = o1["factorAvg"].asDouble "e70203" -> hourValue.vocFanElectricity3 = o1["factorAvg"].asDouble "e70204" -> hourValue.vocFanElectricity4 = o1["factorAvg"].asDouble "e70205" -> hourValue.vocFanElectricity5 = o1["factorAvg"].asDouble "e70206" -> hourValue.vocFanElectricity6 = o1["factorAvg"].asDouble "g29001" -> hourValue.vocValue = o1["factorAvg"].asDouble } } } val r = vocHourValueMapper.selectByExample(Example(VOCHourValue::class.java).apply { createCriteria().andEqualTo("vocDataTime", hourValue.vocDataTime) .andEqualTo("vocStatCode", it) }) if (r.isEmpty()) { vocHourValueMapper.insertSelective(hourValue) } } } } } catch (e: Throwable) { e.printStackTrace() } } // } } } } src/main/kotlin/cn/flightfeather/supervision/timingtask/PushFume.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,163 @@ 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) } } }