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)
|
@Excel(name = "回转状态 0:停止回转 1:向右回转 2:向左回转", width = 15)
|
||||||
@ApiModelProperty(value = "回转状态 0:停止回转 1:向右回转 2:向左回转")
|
@ApiModelProperty(value = "回转状态 0:停止回转 1:向右回转 2:向左回转")
|
||||||
private java.lang.Integer angleDirection;
|
private java.lang.Integer angleDirection;
|
||||||
|
@ApiModelProperty(value = "携稳id")
|
||||||
|
private Long xiewenId;
|
||||||
|
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@ApiModelProperty(value = "多机防撞组网序号")
|
@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 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