package com.huimv.admin.timer; import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.hikvision.cms.api.common.util.Digests; import com.hikvision.cms.api.common.util.HttpClientSSLUtils; import com.huimv.admin.entity.EnvData; import com.huimv.admin.entity.EnvDevice; import com.huimv.admin.entity.EnvWarningInfo; import com.huimv.admin.entity.EnvWarningThreshold; import com.huimv.admin.entity.hkwsdto.CameraDto1; import com.huimv.admin.entity.hkwsdto.HkvsCameraDto; import com.huimv.admin.entity.zengxindto.*; import com.huimv.admin.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import javax.sound.midi.Soundbank; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Configuration @EnableScheduling public class CarmeraTimer { private static final String APPKEY = "1c9ee657"; private static final String SECRET = "a5d723941c804a429447e71db2707ce8"; private static final String OPENAPI_IP_PORT_HTTP = "http://61.153.248.106:100"; private static final String OPENAPI_IP_PORT_HTTPS = "https://61.153.248.106:4430"; private static final String ITF_ADDRESS_GET_CAMERAS = "/openapi/service/vss/res/getCameras"; private static final String OP_USER_UUID = "5b2eb534696b11e89c2e438f92627767"; @Autowired private RestTemplate restTemplate; @Autowired private ICameraBaseService cameraBaseService; @Autowired private IEnvDeviceService envDeviceService; @Autowired private IEnvDataService envDataService; @Autowired private IEnvWarningThresholdService envWarningThresholdService; @Autowired private IEnvWarningInfoService envWarningInfoService; //更新摄像头状态 @Scheduled(cron = "0 0/10 * * * ? ") private void updateCameraOnlin() throws Exception { String cameras = testGetCameras(); HkvsCameraDto hkvsCameraDto = JSONUtil.toBean(cameras, HkvsCameraDto.class); if (ObjectUtil.isNotEmpty(hkvsCameraDto) && hkvsCameraDto.getErrorCode() ==0 ){ List list = hkvsCameraDto.getData().getList(); if (ObjectUtil.isNotEmpty(list)){ cameraBaseService.updateCameraOnlin(list); } System.out.println("更新成功"); }else { System.out.println("摄像头信息为空"); } } /** * HTTP方式 * 分页获取监控点信息 测试 * @return * @throws Exception */ private static String testGetCameras() throws Exception{ String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_CAMERAS; Map map = new HashMap(); map.put("appkey", APPKEY);//设置APPKEY map.put("time", System.currentTimeMillis());//设置时间参数 map.put("pageNo", 1);//设置分页参数 map.put("pageSize", 1000);//设置分页参数 map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID String params = JSON.toJSONString(map); System.out.println(" ====== getCameras请求参数:【" + params + "】"); String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params); System.out.println(" ====== getCameras请求返回结果:【{" + data + "}】"); return data; } //环控数据 String username = "江西增鑫"; String password = "888888"; String passwordMD5 = "21218cca77804d2ba1922c33e0151105"; String baseurl ="https://yzwlw.loongk.com/"; @Scheduled(cron = "0 0/11 * * * ? ") @Transactional private void getHuanKong() throws Exception { //目前是这家 Integer farmId = 21; String encode = loginOnly(); System.out.println("encode"+encode); //获取阈值 EnvWarningThreshold envWarningThreshold = envWarningThresholdService.getOne(new QueryWrapper().eq("farm_id", farmId)); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization",encode); HttpEntity requestEntity = new HttpEntity<>(null, headers); //TODO 只有一家,先拿全部 List list = envDeviceService.list(); for (EnvDevice envDevice : list) { if (ObjectUtil.isNotEmpty(envDevice) && StringUtils.isNotBlank(envDevice.getDeviceCode())){ System.out.println(envDevice.getDeviceCode()); ResponseEntity exchange = restTemplate.exchange("https://yzwlw.loongk.com/mobile/loadShackDatas/" + envDevice.getDeviceCode(), HttpMethod.GET, requestEntity, String.class); String shishiBody = exchange.getBody(); if (ObjectUtil.isEmpty(shishiBody)){ System.out.println(new Date() +"实时数据"+ shishiBody); return; } ShackDatasDto shackDatasDto = JSONUtil.toBean(shishiBody, ShackDatasDto.class); List sensorDatas = shackDatasDto.getData().getSensorDatas(); EnvData envData = new EnvData(); for (ShackDatasSensor sensorData : sensorDatas) { if (sensorData.getId().equals(envDevice.getOhter1())){ String val = sensorData.getVal(); //TODO 预警 saveTemWarning(val,envWarningThreshold,envDevice,farmId); envData.setEnvTemp(val); } if (sensorData.getId().equals(envDevice.getOhter2())){ String val = sensorData.getVal(); //TODO 预警 saveHumWarning(val,envWarningThreshold,envDevice,farmId); envData.setEnvHum(val); } } envData.setCreateTime(new Date()); envData.setDeviceId(envDevice.getDeviceCode()); envData.setFarmId(farmId); envData.setUnitId(envDevice.getUnitId()); // envDataService.save(envData); } } } private void saveHumWarning(String val, EnvWarningThreshold envWarningThreshold, EnvDevice envDevice, Integer farmId) { if (StringUtils.isNotBlank(val)){ String maxHum ; String minHum ; if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMaxHum())){ maxHum ="40"; }else { maxHum = envWarningThreshold.getMaxHum(); } if (ObjectUtil.isEmpty(envWarningThreshold) || StringUtils.isBlank(envWarningThreshold.getMinHum())){ minHum ="0"; }else { minHum =envWarningThreshold.getMinHum(); } if (Double.parseDouble(maxHum) > Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前湿度为"+val+"%超过阈值,请及时检查"); envWarningInfo.setWarningType(2); } if (Double.parseDouble(minHum) Double.parseDouble(val)){ EnvWarningInfo envWarningInfo = new EnvWarningInfo(); envWarningInfo.setBuildLocation(envDevice.getUnitName()); envWarningInfo.setDate(new Date()); envWarningInfo.setDeviceId(envDevice.getDeviceCode()); envWarningInfo.setFarmId(farmId); envWarningInfo.setUnitId(envDevice.getUnitId()); envWarningInfo.setUnitName(envDevice.getUnitName()); envWarningInfo.setUserIds(envWarningThreshold.getUserIds()); envWarningInfo.setWarningContent("当前温度为"+val+"°低于阈值,请及时检查"); envWarningInfo.setWarningType(1); envWarningInfoService.save(envWarningInfo); } } } private String loginOnly() throws Exception { Map map = new HashMap(); String s = HttpClientSSLUtils.doPost(baseurl + "/mobile/login?username=" + username + "&password=" + passwordMD5,JSON.toJSONString(map)); LoginOnlyDto loginDto = JSONUtil.toBean(s, LoginOnlyDto.class); LonginOnlyDtoToken token = loginDto.getData().getToken(); return Base64.encode(token.getUserId() + "_" + token.getToken()); } public static void main(String[] args) throws Exception { Map map = new HashMap(); String s = HttpClientSSLUtils.doPost("https://yzwlw.loongk.com/mobile/login?username=江西增鑫&password=21218cca77804d2ba1922c33e0151105",JSON.toJSONString(map)); LoginDto loginDto = JSONUtil.toBean(s, LoginDto.class); DataToken token = loginDto.getData().getToken(); String encode = Base64.encode(token.getUserId() + "_" + token.getToken()); //获取配置 Map map2 = new HashMap(); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization",encode); HttpEntity requestEntity = new HttpEntity<>(null, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity exchangePeizhi = restTemplate.exchange("https://yzwlw.loongk.com/mobile/loadShackConfig/"+"2c92083a83f8673701854cde3f6203bb", HttpMethod.GET, requestEntity, String.class); System.out.println("peizhi"+exchangePeizhi.getBody()); ResponseEntity exchangeShishi = restTemplate.exchange("https://yzwlw.loongk.com/mobile/loadShackDatas/"+"2c92083a83f8673701854cde3f6203bb", HttpMethod.GET, requestEntity, String.class); System.out.println("shishi"+exchangeShishi.getBody()); System.out.println(s); } }