定时获取卸料平台数据
This commit is contained in:
parent
328bb2d700
commit
5c26e5edd6
@ -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'")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
|
||||
.isNotNull(Project::getXiwonAppId)
|
||||
.isNotNull(Project::getXiwonAppSecret)
|
||||
.ne(Project::getXiwonAppId, "")
|
||||
.ne(Project::getXiwonAppSecret, "")
|
||||
);
|
||||
Date now = new Date();
|
||||
for (Project project : projects) {
|
||||
// 获取设备列表
|
||||
List<DischargingPlatformDev> devList = dischargingPlatformDevMapper.selectList(new LambdaQueryWrapper<DischargingPlatformDev>()
|
||||
.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<String, Object> 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<DischargingPlatformDev>()
|
||||
.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"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -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,7 +58,6 @@ public class ElectricalTask {
|
||||
@GetMapping("/xmgl/task/getElectricRealTimeData")
|
||||
public void getElectricRealTimeData() {
|
||||
log.info("获取最新电量使用情况 每5分钟触发任务");
|
||||
if (StringUtils.isNotBlank(url)) {
|
||||
List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>()
|
||||
.ne(Project::getXiwonAppId, "")
|
||||
.isNotNull(Project::getXiwonAppId)
|
||||
@ -88,19 +81,19 @@ public class ElectricalTask {
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean doGetElectricRealTimeData(Map<String, Object> map, ElectricalDev dev, Project project) {
|
||||
// 设备sn
|
||||
String devSn = dev.getDevSn();
|
||||
ElectricalData newestData = electricalDataMapper.selectOne(new LambdaQueryWrapper<ElectricalData>().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校验是否成功请求
|
||||
|
||||
@ -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<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
|
||||
.isNotNull(Project::getXiwonDustUrl)
|
||||
.isNotNull(Project::getXiwonAppId)
|
||||
.isNotNull(Project::getXiwonAppSecret)
|
||||
);
|
||||
@ -167,7 +164,7 @@ public class EnvironmentDevTask {
|
||||
Map<String, Object> 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());
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -33,7 +33,17 @@ public class XiwonUtil {
|
||||
return SecureUtil.md5(xiwonAppId + xiwonAppSecret + requestTime);
|
||||
}
|
||||
|
||||
public <T> T postForm(String url, String xiwonAppId, String xiwonAppSecret, Map<String, Object> map, Class<T> returnClass, Supplier supplier) {
|
||||
/**
|
||||
* @param uri 如:/unload/listRealUnloadData
|
||||
* @param xiwonAppId
|
||||
* @param xiwonAppSecret
|
||||
* @param map
|
||||
* @param returnClass
|
||||
* @param supplier
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public <T> T postForm(String uri, String xiwonAppId, String xiwonAppSecret, Map<String, Object> map, Class<T> 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> T postDustForm(String url, String appId, String appSecret, Map<String, Object> map, Class<T> 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<Map<String, Object>> 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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user