package com.zhgd.xmgl.task; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhgd.xmgl.modules.environment.entity.DustNoiseData; import com.zhgd.xmgl.modules.environment.entity.EnvironmentDev; import com.zhgd.xmgl.modules.environment.mapper.DustNoiseDataMapper; import com.zhgd.xmgl.modules.environment.mapper.EnvironmentDevMapper; import com.zhgd.xmgl.util.EnvironmentUtils; import lombok.extern.log4j.Log4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @program: wisdomSite * @description: 环境设备实时数据 * @author: Mr.Peng * @create: 2021-07-12 13:41 **/ @Log4j @Component public class EnvironmentDevTask { @Autowired private EnvironmentDevMapper environmentDevMapper; @Autowired private DustNoiseDataMapper dustNoiseDataMapper; @Value("${isGetEnvironmentData}") private boolean isGetEnvironmentData; /** * 定时调用外部接口拉取设备实时数据 */ @Scheduled(cron = "0 0/2 * * * ?") @SchedulerLock(name = "getEnvironmentData", lockAtMostFor = 1000*60*2, lockAtLeastFor = 1000*60*1) public void getStandardData(){ if (isGetEnvironmentData) { try { QueryWrapper queryWrapper = new QueryWrapper<>(); List list = environmentDevMapper.selectList(queryWrapper); if (list != null && list.size() > 0) { JSONArray array = EnvironmentUtils.getDeviceData(""); for (EnvironmentDev dev : list) { List pm10List = new ArrayList<>(); List pm25List = new ArrayList<>(); if (array != null && array.size() > 0) { for (int i = 0; i < array.size(); i++) { JSONObject obj = array.getJSONObject(i); if(dev.getDeviceId().equals(obj.getString("deviceAddr"))) { //判断设备是否在线 if ("2".equals(obj.getString("deviceStatus"))) { JSONArray jsonArray = obj.getJSONArray("realTimeData"); if (jsonArray != null && jsonArray.size() > 0) { for (int a = 0; a < jsonArray.size(); a++) { JSONObject obj2 = jsonArray.getJSONObject(a); if (obj2.getString("dataName").indexOf("PM10") >= 0) { if (StringUtils.isNotEmpty(obj2.getString("dataValue"))&&obj2.getDouble("dataValue")!=0d) { pm10List.add(Double.valueOf(obj2.getString("dataValue"))); } } else if (obj2.getString("dataName").indexOf("PM2.5") >= 0) { if (StringUtils.isNotEmpty(obj2.getString("dataValue"))&&obj2.getDouble("dataValue")!=0d) { pm25List.add(Double.valueOf(obj2.getString("dataValue"))); } } } } } } } //没有数据不插入 if (pm10List.size() > 0 || pm10List.size() > 0) { DecimalFormat df = new DecimalFormat("#.00"); DustNoiseData dustNoiseData = new DustNoiseData(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dustNoiseData.setUploadDate(sdf.format(new Date())); dustNoiseData.setProjectSn(dev.getProjectSn()); dustNoiseData.setDeviceId(dev.getDeviceId()); if (pm10List.size() > 0) { //计算pm10平均值 double avg = pm10List.stream().collect(Collectors.averagingDouble(n -> n)); dustNoiseData.setPm10(Float.valueOf(df.format(avg))); } if (pm25List.size() > 0) { //计算pm2.5平均值 double avg = pm25List.stream().collect(Collectors.averagingDouble(n -> n)); dustNoiseData.setPm25(Float.valueOf(df.format(avg))); } dustNoiseDataMapper.insert(dustNoiseData); EnvironmentDev tempEnvironmentDev = new EnvironmentDev(); tempEnvironmentDev.setId(dev.getId()); tempEnvironmentDev.setRealTime(new Date()); environmentDevMapper.updateById(tempEnvironmentDev); } } } } }catch(Exception e){ e.printStackTrace(); } } } }