bug修复
This commit is contained in:
parent
3e0eca85bf
commit
bc64525d95
@ -405,6 +405,9 @@ public class TowerCurrentData implements Serializable {
|
||||
@Excel(name = "回转状态 0:停止回转 1:向右回转 2:向左回转", width = 15)
|
||||
@ApiModelProperty(value = "回转状态 0:停止回转 1:向右回转 2:向左回转")
|
||||
private java.lang.Integer angleDirection;
|
||||
@ApiModelProperty(value = "携稳id")
|
||||
private Long xiewenId;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value = "多机防撞组网序号")
|
||||
|
||||
311
src/main/java/com/zhgd/xmgl/task/TowerTask.java
Normal file
311
src/main/java/com/zhgd/xmgl/task/TowerTask.java
Normal file
@ -0,0 +1,311 @@
|
||||
package com.zhgd.xmgl.task;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
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.bigdevice.entity.Tower;
|
||||
import com.zhgd.xmgl.modules.bigdevice.entity.TowerCurrentData;
|
||||
import com.zhgd.xmgl.modules.bigdevice.entity.TowerWorkCycle;
|
||||
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerCurrentDataMapper;
|
||||
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerMapper;
|
||||
import com.zhgd.xmgl.modules.bigdevice.mapper.TowerWorkCycleMapper;
|
||||
import com.zhgd.xmgl.modules.project.entity.Project;
|
||||
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
||||
import com.zhgd.xmgl.task.dto.TowerCycleDataDto;
|
||||
import com.zhgd.xmgl.task.dto.TowerDataDto;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RestController
|
||||
@RequestMapping("/xmgl/task/")
|
||||
public class TowerTask {
|
||||
@Autowired
|
||||
private ProjectMapper projectMapper;
|
||||
@Autowired
|
||||
private TowerMapper towerMapper;
|
||||
@Autowired
|
||||
private TowerCurrentDataMapper towerCurrentDataMapper;
|
||||
@Autowired
|
||||
private TowerWorkCycleMapper towerWorkCycleMapper;
|
||||
@Resource
|
||||
private XiwonUtil xiwonUtil;
|
||||
|
||||
/**
|
||||
* 获取塔吊数据(携稳) 每5分钟触发任务
|
||||
*/
|
||||
@SchedulerLock(name = "getTowerData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
|
||||
@Scheduled(cron = "0 0/5 * * * ?")
|
||||
@GetMapping("tower")
|
||||
public void getEnvironmentDustData() {
|
||||
log.info("获取塔吊数据(携稳)开始任务");
|
||||
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
|
||||
.isNotNull(Project::getXiwonAppId)
|
||||
.isNotNull(Project::getXiwonAppSecret)
|
||||
);
|
||||
for (Project project : projects) {
|
||||
// 获取设备列表
|
||||
List<Tower> devList = towerMapper.selectList(new LambdaQueryWrapper<Tower>()
|
||||
.eq(Tower::getProjectSn, project.getProjectSn()));
|
||||
devList.forEach(dev -> CompletableFuture.runAsync(() -> {
|
||||
doGetTowerData(dev, project);
|
||||
doGetTowerCycleData(dev, project);
|
||||
}).exceptionally(throwable -> {
|
||||
log.error("err", throwable);
|
||||
return null;
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void doGetTowerData(Tower dev, Project project) {
|
||||
// 设备sn
|
||||
String devSn = dev.getDevSn();
|
||||
log.info("doGetTowerData设备sn:{}", devSn);
|
||||
TowerCurrentData newestData = towerCurrentDataMapper.selectOne(new LambdaQueryWrapper<TowerCurrentData>().eq(TowerCurrentData::getDevSn, devSn).orderByDesc(TowerCurrentData::getXiewenId).last("limit 1"));
|
||||
// 请求参数
|
||||
Map<String, Object> map = new HashMap<>(4);
|
||||
map.put("pageSize", "10");
|
||||
map.put("pageNum", "1");
|
||||
JSONObject realTimeData = xiwonUtil.postForm("/tower/realTimeData", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> {
|
||||
map.put("deviceSn", devSn);
|
||||
if (newestData != null && newestData.getXiewenId() != null) {
|
||||
map.put("dataId", newestData.getXiewenId());
|
||||
}
|
||||
return map;
|
||||
}));
|
||||
log.info("携稳接口响应数据(塔吊):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)) {
|
||||
// 解析请求到的参数,保存到我们的数据库
|
||||
for (Object o : dataArray) {
|
||||
TowerDataDto dto = BeanUtil.toBean(o, TowerDataDto.class);
|
||||
TowerCurrentData data = new TowerCurrentData();
|
||||
data.setDevSn(devSn);
|
||||
data.setDevName(dev.getDevName());
|
||||
data.setProjectSn(dev.getProjectSn());
|
||||
data.setReciveTime(DateUtil.parse(dto.getCraneTime()));
|
||||
data.setStartTime(DateUtil.parse(dto.getCraneTime()));
|
||||
data.setLoading(Convert.toStr(dto.getCraneElevatingCapacity()));
|
||||
data.setLoadRatio(Convert.toStr(dto.getCraneWeightPercentage()));
|
||||
data.setTorque(null);
|
||||
data.setTorqueRatio(Convert.toStr(dto.getCraneTorquePercentage()));
|
||||
if (dto.getCraneTiltAngle() != null) {
|
||||
data.setAngle(Convert.toStr(dto.getCraneTiltAngle() / 10));
|
||||
}
|
||||
if (dto.getCraneRange() != null) {
|
||||
data.setRanger(Convert.toStr(dto.getCraneRange() / 10));
|
||||
}
|
||||
if (dto.getCraneHeight() != null) {
|
||||
data.setHeight(Convert.toStr(dto.getCraneHeight() / 10));
|
||||
}
|
||||
if (dto.getCraneWindSpeed() != null) {
|
||||
data.setWindspeed(Convert.toStr(dto.getCraneWindSpeed() / 10));
|
||||
}
|
||||
if (dto.getCraneTiltAngle() != null) {
|
||||
data.setObliguity(Convert.toStr(dto.getCraneTiltAngle() / 10));
|
||||
}
|
||||
data.setRate(null);
|
||||
data.setDriverName(null);
|
||||
data.setDriverIdCard(null);
|
||||
data.setObliguityX(null);
|
||||
data.setObliguityY(null);
|
||||
data.setRealFlag("0");
|
||||
Integer craneAlarmReason = dto.getCraneAlarmReason();
|
||||
if (craneAlarmReason != null) {
|
||||
switch (craneAlarmReason) {
|
||||
/*
|
||||
0 正常 111 112 113 114碰撞报警 12 13 14 15 重量 力矩 倾斜 风速报警
|
||||
211 212 213 214碰撞预警 22 23 24 25 重量 力矩 倾斜 风速预警 201幅度限位预警 202高度限位预警 203回转限位预警
|
||||
101幅度限位报警 102高度限位报警 103回转限位报警 118酒精报警 218酒精预警 119重量违章报警 219重量违章预警
|
||||
*/
|
||||
//data.setNoError();
|
||||
//data.setWeightError();
|
||||
//data.setWindSpeedError();
|
||||
//data.setRangeError();
|
||||
//data.setHeightError();
|
||||
//data.setAngleError();
|
||||
//data.setObliguityError();
|
||||
//data.setGpsError();
|
||||
//data.setIdError();
|
||||
case 0:
|
||||
case 111:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 112:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 113:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 114:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 12:
|
||||
case 13:
|
||||
data.setMomentAlarm(1);
|
||||
case 14:
|
||||
data.setObliguityAlarm(1);
|
||||
case 15:
|
||||
data.setWindSpeedAlarm(1);
|
||||
case 211:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 212:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 213:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 214:
|
||||
data.setMultiAlarmAll(1);
|
||||
case 22:
|
||||
case 23:
|
||||
data.setMomentAlarm(2);
|
||||
case 24:
|
||||
data.setObliguityAlarm(2);
|
||||
case 25:
|
||||
data.setWindSpeedAlarm(2);
|
||||
case 201:
|
||||
data.setMinRangeAlarm(2);
|
||||
data.setMaxRangeAlarm(2);
|
||||
case 202:
|
||||
data.setHeightAlarm(2);
|
||||
data.setHeightLowerAlarm(2);
|
||||
case 203:
|
||||
data.setPosAngleAlarm(2);
|
||||
data.setNegAngleAlarm(2);
|
||||
case 101:
|
||||
data.setMinRangeAlarm(1);
|
||||
data.setMaxRangeAlarm(1);
|
||||
case 102:
|
||||
data.setHeightAlarm(1);
|
||||
data.setHeightLowerAlarm(1);
|
||||
case 103:
|
||||
data.setPosAngleAlarm(1);
|
||||
data.setNegAngleAlarm(1);
|
||||
case 118:
|
||||
case 218:
|
||||
case 119:
|
||||
case 219:
|
||||
default:
|
||||
}
|
||||
if (Objects.equals(craneAlarmReason, 0)) {
|
||||
data.setNoAlarm(1);
|
||||
} else {
|
||||
data.setNoAlarm(0);
|
||||
}
|
||||
}
|
||||
data.setXiewenId(dto.getId());
|
||||
}
|
||||
} else {
|
||||
log.info("塔吊设备sn:{},当前无数据!", devSn);
|
||||
}
|
||||
} else {
|
||||
log.error("塔吊设备sn:{},请求失败!当前code:{},msg:{}", devSn, code, realTimeData.getString("msg"));
|
||||
}
|
||||
}
|
||||
|
||||
private void doGetTowerCycleData(Tower dev, Project project) {
|
||||
// 设备sn
|
||||
String devSn = dev.getDevSn();
|
||||
log.info("doGetTowerCycleData设备sn:{}", devSn);
|
||||
TowerWorkCycle newestData = towerWorkCycleMapper.selectOne(new LambdaQueryWrapper<TowerWorkCycle>().eq(TowerWorkCycle::getDevSn, devSn).orderByDesc(TowerWorkCycle::getEndTime).last("limit 1"));
|
||||
// 请求参数
|
||||
Map<String, Object> map = new HashMap<>(4);
|
||||
map.put("pageSize", "10");
|
||||
map.put("pageNum", "1");
|
||||
JSONObject realTimeData = xiwonUtil.postForm("/tower/workCycle", project.getXiwonAppId(), project.getXiwonAppSecret(), map, JSONObject.class, (() -> {
|
||||
map.put("deviceSn", devSn);
|
||||
if (newestData != null && newestData.getEndTime() != null) {
|
||||
map.put("startTime", DateUtil.formatDateTime(DateUtil.offsetSecond(newestData.getEndTime(), 1)));
|
||||
}
|
||||
map.put("endTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
|
||||
return map;
|
||||
}));
|
||||
log.info("携稳接口响应数据(塔吊循环):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)) {
|
||||
// 解析请求到的参数,保存到我们的数据库
|
||||
for (Object o : dataArray) {
|
||||
TowerCycleDataDto dto = BeanUtil.toBean(o, TowerCycleDataDto.class);
|
||||
TowerWorkCycle data = new TowerWorkCycle();
|
||||
data.setDevSn(dev.getDevSn());
|
||||
data.setDevName(dev.getDevName());
|
||||
data.setProjectSn(dev.getProjectSn());
|
||||
data.setStartTime(DateUtil.parse(dto.getStartTime()));
|
||||
data.setEndTime(DateUtil.parse(dto.getEndTime()));
|
||||
data.setAddTime(DateUtil.parse(dto.getSystemTime()));
|
||||
data.setWorkTime(String.valueOf(DateUtil.between(data.getStartTime(), data.getEndTime(), DateUnit.SECOND)));
|
||||
data.setLoading(Convert.toStr(dto.getCycleMaximumWeight()));
|
||||
data.setWorkMaxForce(Convert.toStr(dto.getCycleMaximumTorque()));
|
||||
Long maximumHeight = dto.getMaximumHeight();
|
||||
if (maximumHeight != null) {
|
||||
data.setMaxHeight(Convert.toStr(maximumHeight / 10));
|
||||
}
|
||||
Long minimumHeight = dto.getMinimumHeight();
|
||||
if (minimumHeight != null) {
|
||||
data.setMinHeight(Convert.toStr(minimumHeight / 10));
|
||||
}
|
||||
Long maximumRange = dto.getMaximumRange();
|
||||
if (maximumRange != null) {
|
||||
data.setMaxRange(Convert.toStr(maximumRange / 10));
|
||||
}
|
||||
Long minimumRange = dto.getMinimumRange();
|
||||
if (minimumRange != null) {
|
||||
data.setMinRange(Convert.toStr(minimumRange / 10));
|
||||
}
|
||||
Long liftingPointAngle = dto.getLiftingPointAngle();
|
||||
if (liftingPointAngle != null) {
|
||||
data.setSlingStartRotation(Convert.toStr(liftingPointAngle / 10));
|
||||
}
|
||||
Long unloadingPointAngle = dto.getUnloadingPointAngle();
|
||||
if (unloadingPointAngle != null) {
|
||||
data.setSlingEndRotation(Convert.toStr(unloadingPointAngle / 10));
|
||||
}
|
||||
Long liftingPointRange = dto.getLiftingPointRange();
|
||||
if (liftingPointRange != null) {
|
||||
data.setSlingStartRange(Convert.toStr(liftingPointRange / 10));
|
||||
}
|
||||
Long unloadingPointRange = dto.getUnloadingPointRange();
|
||||
if (unloadingPointRange != null) {
|
||||
data.setSlingEndRange(Convert.toStr(unloadingPointRange / 10));
|
||||
}
|
||||
|
||||
Long liftingPointHeight = dto.getLiftingPointHeight();
|
||||
if (liftingPointHeight != null) {
|
||||
data.setSlingStartHeight(Convert.toStr(liftingPointHeight / 10));
|
||||
}
|
||||
Long unloadingPointHeight = dto.getUnloadingPointRange();
|
||||
if (unloadingPointHeight != null) {
|
||||
data.setSlingEndHeight(Convert.toStr(unloadingPointHeight / 10));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.info("塔吊循环设备sn:{},当前无数据!", devSn);
|
||||
}
|
||||
} else {
|
||||
log.error("塔吊循环设备sn:{},请求失败!当前code:{},msg:{}", devSn, code, realTimeData.getString("msg"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
45
src/main/java/com/zhgd/xmgl/task/dto/TowerCycleDataDto.java
Normal file
45
src/main/java/com/zhgd/xmgl/task/dto/TowerCycleDataDto.java
Normal file
@ -0,0 +1,45 @@
|
||||
package com.zhgd.xmgl.task.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TowerCycleDataDto {
|
||||
@JsonProperty("blackBoxId")
|
||||
private String blackBoxId;
|
||||
@JsonProperty("towerCraneId")
|
||||
private Long towerCraneId;
|
||||
@JsonProperty("craneManufacturerAndDeviceType")
|
||||
private Long craneManufacturerAndDeviceType;
|
||||
@JsonProperty("startTime")
|
||||
private String startTime;
|
||||
@JsonProperty("endTime")
|
||||
private String endTime;
|
||||
@JsonProperty("systemTime")
|
||||
private String systemTime;
|
||||
@JsonProperty("cycleMaximumWeight")
|
||||
private Long cycleMaximumWeight;
|
||||
@JsonProperty("cycleMaximumTorque")
|
||||
private Long cycleMaximumTorque;
|
||||
@JsonProperty("maximumHeight")
|
||||
private Long maximumHeight;
|
||||
@JsonProperty("minimumHeight")
|
||||
private Long minimumHeight;
|
||||
@JsonProperty("maximumRange")
|
||||
private Long maximumRange;
|
||||
@JsonProperty("minimumRange")
|
||||
private Long minimumRange;
|
||||
@JsonProperty("liftingPointAngle")
|
||||
private Long liftingPointAngle;
|
||||
@JsonProperty("liftingPointRange")
|
||||
private Long liftingPointRange;
|
||||
@JsonProperty("liftingPointHeight")
|
||||
private Long liftingPointHeight;
|
||||
@JsonProperty("unloadingPointAngle")
|
||||
private Long unloadingPointAngle;
|
||||
@JsonProperty("unloadingPointRange")
|
||||
private Long unloadingPointRange;
|
||||
@JsonProperty("unloadingPointHeight")
|
||||
private Long unloadingPointHeight;
|
||||
|
||||
}
|
||||
53
src/main/java/com/zhgd/xmgl/task/dto/TowerDataDto.java
Normal file
53
src/main/java/com/zhgd/xmgl/task/dto/TowerDataDto.java
Normal file
@ -0,0 +1,53 @@
|
||||
package com.zhgd.xmgl.task.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TowerDataDto {
|
||||
|
||||
@JsonProperty("id")
|
||||
private Long id;
|
||||
@JsonProperty("blackBoxId")
|
||||
private String blackBoxId;
|
||||
@JsonProperty("towerCraneId")
|
||||
private Long towerCraneId;
|
||||
@JsonProperty("craneProtocolVersion")
|
||||
private Long craneProtocolVersion;
|
||||
@JsonProperty("craneTime")
|
||||
private String craneTime;
|
||||
@JsonProperty("craneManufacturerAndDeviceType")
|
||||
private Long craneManufacturerAndDeviceType;
|
||||
@JsonProperty("craneHeight")
|
||||
private Long craneHeight;
|
||||
@JsonProperty("craneRange")
|
||||
private Long craneRange;
|
||||
@JsonProperty("craneRotation")
|
||||
private Long craneRotation;
|
||||
@JsonProperty("craneElevatingCapacity")
|
||||
private Long craneElevatingCapacity;
|
||||
@JsonProperty("craneWindSpeed")
|
||||
private Long craneWindSpeed;
|
||||
@JsonProperty("craneTiltAngle")
|
||||
private Long craneTiltAngle;
|
||||
@JsonProperty("craneWeightPercentage")
|
||||
private Long craneWeightPercentage;
|
||||
@JsonProperty("craneTorquePercentage")
|
||||
private Long craneTorquePercentage;
|
||||
@JsonProperty("craneWindSpeedPercentage")
|
||||
private Long craneWindSpeedPercentage;
|
||||
@JsonProperty("craneTiltPercentage")
|
||||
private Long craneTiltPercentage;
|
||||
@JsonProperty("craneBrakingState")
|
||||
private Long craneBrakingState;
|
||||
@JsonProperty("brakingState")
|
||||
private String brakingState;
|
||||
@JsonProperty("realTimeOrAlarm")
|
||||
private Long realTimeOrAlarm;
|
||||
@JsonProperty("craneAlarmReason")
|
||||
private Integer craneAlarmReason;
|
||||
@JsonProperty("alarmReason")
|
||||
private String alarmReason;
|
||||
@JsonProperty("beaufortScale")
|
||||
private Integer beaufortScale;
|
||||
}
|
||||
@ -70,4 +70,16 @@ public class NumberUtils {
|
||||
return String.format("%0" + digit + "d", num);
|
||||
}
|
||||
|
||||
/**
|
||||
* 相乘
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Double multiply(Double b1, Double b2) {
|
||||
if (b1 != null && b2 != null) {
|
||||
return b1 * b2;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user