diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java index 2cc99ab06..2e4c25299 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java @@ -267,12 +267,6 @@ public class Project implements Serializable { private String jzgProjectCode; @ApiModelProperty(value = "金筑工访问host") private String jzgHost; - /** - * 弃用,使用xiwonUrl - */ - @Deprecated - @ApiModelProperty(value = "携稳扬尘url") - private String xiwonDustUrl; @ApiModelProperty(value = "'携稳的appId'") private String xiwonAppId; @ApiModelProperty(value = "'携稳的appSecret'") diff --git a/src/main/java/com/zhgd/xmgl/task/DevExcavationTask.java b/src/main/java/com/zhgd/xmgl/task/DevExcavationTask.java index 706feb6bb..05342c75b 100644 --- a/src/main/java/com/zhgd/xmgl/task/DevExcavationTask.java +++ b/src/main/java/com/zhgd/xmgl/task/DevExcavationTask.java @@ -14,6 +14,7 @@ import com.zhgd.xmgl.modules.foundation.entity.DeepExcavationSensor; import com.zhgd.xmgl.modules.foundation.mapper.DeepExcavationSensorMapper; import com.zhgd.xmgl.modules.foundation.service.IDeepExcavationCurrentDataService; import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -30,7 +31,7 @@ import java.util.stream.Collectors; * @Version 1.0 * 基坑定时器 */ -@Log4j +@Slf4j @Component public class DevExcavationTask { @Autowired @@ -115,4 +116,4 @@ public class DevExcavationTask { } -} \ No newline at end of file +} diff --git a/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java b/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java new file mode 100644 index 000000000..b96101560 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java @@ -0,0 +1,125 @@ +package com.zhgd.xmgl.task; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.gexin.fastjson.JSON; +import com.zhgd.xmgl.modules.discharging.entity.DischargingPlatformCurrentData; +import com.zhgd.xmgl.modules.discharging.entity.DischargingPlatformDev; +import com.zhgd.xmgl.modules.discharging.mapper.DischargingPlatformCurrentDataMapper; +import com.zhgd.xmgl.modules.discharging.mapper.DischargingPlatformDevMapper; +import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; +import com.zhgd.xmgl.task.dto.DischargingPlatformCurrentDataDto; +import com.zhgd.xmgl.util.XiwonUtil; +import lombok.extern.slf4j.Slf4j; +import net.javacrumbs.shedlock.core.SchedulerLock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Slf4j +@Component +@RestController +public class DischargingPlatformCurrentDataTask { + @Autowired + DischargingPlatformCurrentDataMapper dischargingPlatformCurrentDataMapper; + @Autowired + DischargingPlatformDevMapper dischargingPlatformDevMapper; + @Autowired + private ProjectMapper projectMapper; + + @Resource + private XiwonUtil xiwonUtil; + + /** + * 定时获取卸料平台数据 + */ + @SchedulerLock(name = "getDischargingPlatformCurrentData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) + @Scheduled(cron = "0 0/5 * * * ?") + @GetMapping("/xmgl/task/getDischargingPlatformCurrentData") + public void getDischargingPlatformCurrentData() { + log.info("获取卸料平台数据开始任务"); + List projects = projectMapper.selectList(new LambdaQueryWrapper() + .isNotNull(Project::getXiwonAppId) + .isNotNull(Project::getXiwonAppSecret) + .ne(Project::getXiwonAppId, "") + .ne(Project::getXiwonAppSecret, "") + ); + Date now = new Date(); + for (Project project : projects) { + // 获取设备列表 + List devList = dischargingPlatformDevMapper.selectList(new LambdaQueryWrapper() + .eq(DischargingPlatformDev::getProjectSn, project.getProjectSn())); + devList.forEach(dev -> CompletableFuture.runAsync(() -> { + doGetDischargingPlatformCurrentData(dev, project, now); + }).exceptionally(throwable -> { + log.error("err", throwable); + return null; + }) + ); + } + + } + + private void doGetDischargingPlatformCurrentData(DischargingPlatformDev dev, Project project, Date now) { + // 设备sn + String devSn = dev.getDevSn(); + log.info("doGetDischargingPlatformCurrentData设备sn:{}", devSn); + // 请求参数 + Map map = new HashMap<>(4); + map.put("pageSize", "10"); + map.put("pageNum", "1"); + map.put("startTime", DateUtil.formatDateTime(DateUtil.offsetMinute(now, -5))); + map.put("endTime", DateUtil.formatDateTime(now)); + JSONObject realTimeData = xiwonUtil.postForm("/unload/listRealUnloadData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> { + map.put("deviceSn", devSn); + return map; + })); + log.info("doGetDischargingPlatformCurrentData携稳接口响应数据(扬尘):devSn:{},rs:{}", devSn, JSON.toJSONString(realTimeData)); + Integer code = realTimeData.getInteger("code"); + // code校验是否成功请求 + if (code == HttpStatus.OK.value()) { + JSONArray dataArray = realTimeData.getJSONArray("data"); + if (CollUtil.isNotEmpty(dataArray)) { + DischargingPlatformDev platformDev = dischargingPlatformDevMapper.selectOne(new LambdaQueryWrapper() + .eq(DischargingPlatformDev::getDevSn, dev)); + // 解析请求到的参数,保存到我们的数据库 + for (Object o : dataArray) { + DischargingPlatformCurrentDataDto dto = BeanUtil.toBean(o, DischargingPlatformCurrentDataDto.class); + DischargingPlatformCurrentData data = new DischargingPlatformCurrentData(); + data.setDevSn(devSn); + data.setProjectSn(platformDev.getProjectSn()); + data.setReciveTime(dto.getCreateTime()); + data.setLoading(String.valueOf(dto.getRealLoad() / 1000.0)); + data.setDisplacement(null); + data.setXDipAngle(String.valueOf(dto.getInclinationX() / 10.0)); + data.setYDipAngle(String.valueOf(dto.getInclinationY() / 10.0)); + dischargingPlatformCurrentDataMapper.insert(data); + + platformDev.setRealTime(new Date()); + dischargingPlatformDevMapper.updateById(platformDev); + } + } else { + log.info("设备sn:{},当前无数据!", devSn); + } + } else { + log.error("设备sn:{},请求失败!当前code:{},msg:{}", devSn, code, realTimeData.getString("msg")); + } + + + } +} diff --git a/src/main/java/com/zhgd/xmgl/task/ElectricalTask.java b/src/main/java/com/zhgd/xmgl/task/ElectricalTask.java index da539a179..365fea89b 100644 --- a/src/main/java/com/zhgd/xmgl/task/ElectricalTask.java +++ b/src/main/java/com/zhgd/xmgl/task/ElectricalTask.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zhgd.xmgl.modules.electrical.entity.ElectricalData; import com.zhgd.xmgl.modules.electrical.entity.ElectricalDev; import com.zhgd.xmgl.modules.electrical.mapper.ElectricalDataMapper; @@ -15,8 +14,6 @@ import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.util.XiwonUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -50,9 +47,6 @@ public class ElectricalTask { @Resource private IElectricalDevService electricalDevService; - @Value("${xiwon.url:}") - private String url; - @Resource private XiwonUtil xiwonUtil; @@ -64,29 +58,27 @@ public class ElectricalTask { @GetMapping("/xmgl/task/getElectricRealTimeData") public void getElectricRealTimeData() { log.info("获取最新电量使用情况 每5分钟触发任务"); - if (StringUtils.isNotBlank(url)) { - List projectList = projectMapper.selectList(new LambdaQueryWrapper() - .ne(Project::getXiwonAppId, "") - .isNotNull(Project::getXiwonAppId) - .ne(Project::getXiwonAppSecret, "") - .isNotNull(Project::getXiwonAppSecret) + List projectList = projectMapper.selectList(new LambdaQueryWrapper() + .ne(Project::getXiwonAppId, "") + .isNotNull(Project::getXiwonAppId) + .ne(Project::getXiwonAppSecret, "") + .isNotNull(Project::getXiwonAppSecret) + ); + for (Project project : projectList) { + // 请求参数 + Map map = new HashMap<>(4); + map.put("state", 0); + map.put("pageSize", "1"); + map.put("pageNum", "1"); + // 获取所有 + List devList = electricalDevService.list(new LambdaQueryWrapper().eq(ElectricalDev::getProjectSn, project.getProjectSn())); + devList.forEach(dev -> CompletableFuture.supplyAsync(() -> { + return doGetElectricRealTimeData(map, dev, project); + }).exceptionally(throwable -> { + log.error("err:", throwable); + return null; + }) ); - for (Project project : projectList) { - // 请求参数 - Map map = new HashMap<>(4); - map.put("state", 0); - map.put("pageSize", "1"); - map.put("pageNum", "1"); - // 获取所有 - List devList = electricalDevService.list(new LambdaQueryWrapper().eq(ElectricalDev::getProjectSn, project.getProjectSn())); - devList.forEach(dev -> CompletableFuture.supplyAsync(() -> { - return doGetElectricRealTimeData(map, dev, project); - }).exceptionally(throwable -> { - log.error("err:", throwable); - return null; - }) - ); - } } } @@ -95,12 +87,13 @@ public class ElectricalTask { String devSn = dev.getDevSn(); ElectricalData newestData = electricalDataMapper.selectOne(new LambdaQueryWrapper().eq(ElectricalData::getDevSn, devSn).orderByDesc(ElectricalData::getUploadTime).last("limit 1")); // 请求携稳的接口 - JSONObject realTimeData = xiwonUtil.postForm(url + "electric/realTimeData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> { + JSONObject realTimeData = xiwonUtil.postForm("/electric/realTimeData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> { if (newestData != null && newestData.getXiewenId() != null) { map.put("dataId", newestData.getXiewenId()); } return map.put("deviceSn", devSn); })); + log.info("携稳接口响应数据(配电箱):{}", JSONArray.toJSONString(realTimeData)); Integer code = realTimeData.getInteger("code"); // code校验是否成功请求 diff --git a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java index 8b939b89e..782ea29b5 100644 --- a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java +++ b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java @@ -26,8 +26,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.text.DecimalFormat; @@ -139,7 +137,6 @@ public class EnvironmentDevTask { public void getEnvironmentDustData() { log.info("获取扬尘数据(携稳)开始任务"); List projects = projectMapper.selectList(new LambdaQueryWrapper() - .isNotNull(Project::getXiwonDustUrl) .isNotNull(Project::getXiwonAppId) .isNotNull(Project::getXiwonAppSecret) ); @@ -167,7 +164,7 @@ public class EnvironmentDevTask { Map map = new HashMap<>(4); map.put("pageSize", "10"); map.put("pageNum", "1"); - JSONObject realTimeData = xiwonUtil.postDustForm(project.getXiwonDustUrl(), project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> { + JSONObject realTimeData = xiwonUtil.postForm("/dust/realTimeData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> { map.put("deviceSn", devSn); if (newestData != null && newestData.getXiewenId() != null) { map.put("dataId", newestData.getXiewenId()); diff --git a/src/main/java/com/zhgd/xmgl/task/dto/DischargingPlatformCurrentDataDto.java b/src/main/java/com/zhgd/xmgl/task/dto/DischargingPlatformCurrentDataDto.java new file mode 100644 index 000000000..7289a6657 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/task/dto/DischargingPlatformCurrentDataDto.java @@ -0,0 +1,37 @@ +package com.zhgd.xmgl.task.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class DischargingPlatformCurrentDataDto { + + @JsonProperty("id") + private Long id; + @JsonProperty("deviceSn") + private String deviceSn; + @JsonProperty("realLoad") + private Integer realLoad; + @JsonProperty("weightPercentage") + private Integer weightPercentage; + @JsonProperty("inclinationX") + private Integer inclinationX; + @JsonProperty("inclinationXPercentage") + private Integer inclinationXPercentage; + @JsonProperty("inclinationY") + private Integer inclinationY; + @JsonProperty("inclinationYPercentage") + private Integer inclinationYPercentage; + @JsonProperty("batteryVoltage") + private Integer batteryVoltage; + @JsonProperty("weightStatus") + private Integer weightStatus; + @JsonProperty("inclinationXStatus") + private Integer inclinationXStatus; + @JsonProperty("inclinationYStatus") + private Integer inclinationYStatus; + @JsonProperty("systemTime") + private String systemTime; + @JsonProperty("createTime") + private String createTime; +} diff --git a/src/main/java/com/zhgd/xmgl/util/XiwonUtil.java b/src/main/java/com/zhgd/xmgl/util/XiwonUtil.java index 56f800dc9..bfcdb6d04 100644 --- a/src/main/java/com/zhgd/xmgl/util/XiwonUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/XiwonUtil.java @@ -33,7 +33,17 @@ public class XiwonUtil { return SecureUtil.md5(xiwonAppId + xiwonAppSecret + requestTime); } - public T postForm(String url, String xiwonAppId, String xiwonAppSecret, Map map, Class returnClass, Supplier supplier) { + /** + * @param uri 如:/unload/listRealUnloadData + * @param xiwonAppId + * @param xiwonAppSecret + * @param map + * @param returnClass + * @param supplier + * @param + * @return + */ + public T postForm(String uri, String xiwonAppId, String xiwonAppSecret, Map map, Class returnClass, Supplier supplier) { HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("appId", xiwonAppId); long currentTimeMillis = System.currentTimeMillis(); @@ -45,24 +55,8 @@ public class XiwonUtil { supplier.get(); } - String sendUrl = url + "?" + MapUtil.join(map, "&", "="); - log.info("postForm:url:{}", sendUrl); - return restTemplate.postForObject(sendUrl, requestEntity, returnClass); - } - - public T postDustForm(String url, String appId, String appSecret, Map map, Class returnClass, Supplier supplier) { - HttpHeaders requestHeaders = new HttpHeaders(); - requestHeaders.set("appId", appId); - long currentTimeMillis = System.currentTimeMillis(); - requestHeaders.set("requestTime", currentTimeMillis + ""); - requestHeaders.set("sign", SecureUtil.md5(appId + appSecret + currentTimeMillis)); - requestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity> requestEntity = new HttpEntity<>(requestHeaders); - if (supplier != null) { - supplier.get(); - } - String sendUrl = url + "?" + MapUtil.join(map, "&", "="); - log.info("postForm: url:{}, appId:{}, appSecret:{}", sendUrl, appId, appSecret); + String sendUrl = "http://openapi.xiwon588.com" + uri + "?" + MapUtil.join(map, "&", "="); + log.info("postForm: url:{}, appId:{}, appSecret:{}", sendUrl, xiwonAppId, xiwonAppSecret); return restTemplate.postForObject(sendUrl, requestEntity, returnClass); }