389 lines
16 KiB
Java
389 lines
16 KiB
Java
package com.zhgd.xmgl.task;
|
||
|
||
import cn.hutool.core.collection.CollUtil;
|
||
import cn.hutool.core.convert.Convert;
|
||
import cn.hutool.core.date.DateUtil;
|
||
import cn.hutool.core.util.StrUtil;
|
||
import com.alibaba.fastjson.JSONArray;
|
||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||
import com.zhgd.jeecg.common.util.pass.HttpUtils;
|
||
import com.zhgd.xmgl.modules.bridgeCrane.entity.BridgeCraneData;
|
||
import com.zhgd.xmgl.modules.bridgeCrane.entity.BridgeCraneDev;
|
||
import com.zhgd.xmgl.modules.bridgeCrane.service.IBridgeCraneAlarmService;
|
||
import com.zhgd.xmgl.modules.bridgeCrane.service.IBridgeCraneDataService;
|
||
import com.zhgd.xmgl.modules.bridgeCrane.service.IBridgeCraneDevService;
|
||
import lombok.Data;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import net.javacrumbs.shedlock.core.SchedulerLock;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.context.annotation.Lazy;
|
||
import org.springframework.scheduling.annotation.Scheduled;
|
||
import org.springframework.web.bind.annotation.RequestMapping;
|
||
import org.springframework.web.bind.annotation.RestController;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
import java.util.function.Function;
|
||
import java.util.stream.Collectors;
|
||
|
||
@Slf4j
|
||
@RestController
|
||
@RequestMapping("xmgl/task")
|
||
public class BridgeCraneTask {
|
||
@Lazy
|
||
@Autowired
|
||
private IBridgeCraneDevService bridgeCraneDevService;
|
||
/**
|
||
* 睿郅盾的桥机token
|
||
*/
|
||
@Value("${rzdqjToken:}")
|
||
private String rzdqjToken;
|
||
@Lazy
|
||
@Autowired
|
||
private IBridgeCraneDataService bridgeCraneDataService;
|
||
@Lazy
|
||
@Autowired
|
||
private IBridgeCraneAlarmService bridgeCraneAlarmService;
|
||
|
||
/**
|
||
* 获取睿郅盾的桥机实时数据
|
||
*/
|
||
@Scheduled(cron = "0 */5 * * * ?")
|
||
@SchedulerLock(name = "getBridgeCraneDataTask", lockAtMostFor = 1000 * 60, lockAtLeastFor = 1000 * 60)
|
||
@RequestMapping("getBridgeCraneDataTask")
|
||
public void getBridgeCraneDataTask() {
|
||
if (StrUtil.isBlank(rzdqjToken)) {
|
||
return;
|
||
}
|
||
List<BridgeCraneData> addDatas = new ArrayList<>();
|
||
Map<String, BridgeCraneDev> devMap = bridgeCraneDevService.list(new LambdaQueryWrapper<BridgeCraneDev>()).stream().collect(Collectors.toMap(BridgeCraneDev::getDevId, Function.identity(), (o1, o2) -> o1));
|
||
String rqName = "睿郅盾请求桥机实时数据";
|
||
String bodyRtStr = HttpUtils.sendPostBodyRtStr(rqName, "http://www.aqjkpt.com:26001/", null, 20000, null);
|
||
List<RzdRspBody> rzdRspBodies = JSONArray.parseArray(bodyRtStr, RzdRspBody.class);
|
||
for (RzdRspBody body : rzdRspBodies) {
|
||
if (StrUtil.isNotBlank(body.getError())) {
|
||
log.warn(rqName + "错误:{}", body.getError());
|
||
return;
|
||
}
|
||
BridgeCraneDev dev = null;
|
||
if (body.getCurrent() != null) {
|
||
String devID = body.getCurrent().getDevID();
|
||
dev = devMap.get(devID);
|
||
if (dev != null) {
|
||
BridgeCraneData data = buildData(body, dev.getProjectSn());
|
||
addDatas.add(data);
|
||
}
|
||
}
|
||
if (body.getMetadata() != null && dev != null) {
|
||
RzdRspBody.Metadata metadata = body.getMetadata();
|
||
dev.setDevModel(metadata.getDeviceModel());
|
||
dev.setControlVoltage(Convert.toStr(metadata.getControlVoltage()));
|
||
dev.setHoistingHeight(Convert.toStr(metadata.getHoistingHeight()));
|
||
dev.setGetUpSpeed(Convert.toStr(metadata.getGetUpSpeed()));
|
||
dev.setRunningSpeed(Convert.toStr(metadata.getRunningSpeed()));
|
||
dev.setSpan(Convert.toStr(metadata.getSpan()));
|
||
dev.setRatedLoad(Convert.toStr(metadata.getRatedLoad()));
|
||
bridgeCraneDevService.updateById(dev);
|
||
}
|
||
}
|
||
if (CollUtil.isNotEmpty(addDatas)) {
|
||
bridgeCraneDataService.saveBatch(addDatas);
|
||
bridgeCraneAlarmService.saveAlarmBatch(addDatas);
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 睿郅盾响应body构建data
|
||
*
|
||
* @param body
|
||
* @param projectSn
|
||
* @return
|
||
*/
|
||
private BridgeCraneData buildData(RzdRspBody body, String projectSn) {
|
||
BridgeCraneData bridgeCraneData = new BridgeCraneData();
|
||
bridgeCraneData.setProjectSn(projectSn);
|
||
RzdRspBody.Current current = body.getCurrent();
|
||
bridgeCraneData.setDevId(current.getDevID());
|
||
bridgeCraneData.setDevType(current.getDevType());
|
||
bridgeCraneData.setWorkTime(current.getWorkTime());
|
||
bridgeCraneData.setCumulativeWorkingTime(current.getCumulativeWorkingTime());
|
||
bridgeCraneData.setOperatingCycleNumber(current.getOperatingCycleNumber());
|
||
bridgeCraneData.setAcquisitionModulesNumber(current.getAcquisitionModulesNumber());
|
||
bridgeCraneData.setNeiweight1(current.getNeiweight1());
|
||
bridgeCraneData.setNeiweight2(current.getNeiweight2());
|
||
bridgeCraneData.setNeiweight5(current.getNeiweight5());
|
||
bridgeCraneData.setDistance1(current.getDistance1());
|
||
bridgeCraneData.setDistance2(current.getDistance2());
|
||
bridgeCraneData.setDistance5(current.getDistance5());
|
||
bridgeCraneData.setDistance6(current.getDistance6());
|
||
bridgeCraneData.setDistance7(current.getDistance7());
|
||
bridgeCraneData.setDistance10(current.getDistance10());
|
||
bridgeCraneData.setDistance11(current.getDistance11());
|
||
bridgeCraneData.setDistance12(current.getDistance12());
|
||
bridgeCraneData.setDistance13(current.getDistance13());
|
||
bridgeCraneData.setDistance14(current.getDistance14());
|
||
bridgeCraneData.setSpeed1(current.getSpeed1());
|
||
bridgeCraneData.setSpeed2(current.getSpeed2());
|
||
bridgeCraneData.setBrbit0(current.getBrbit0());
|
||
bridgeCraneData.setBrbit2(current.getBrbit2());
|
||
bridgeCraneData.setLi1bit0(current.getLi1bit0());
|
||
bridgeCraneData.setLi1bit1(current.getLi1bit1());
|
||
bridgeCraneData.setLi1bit2(current.getLi1bit2());
|
||
bridgeCraneData.setLi1bit3(current.getLi1bit3());
|
||
bridgeCraneData.setLi1bit8(current.getLi1bit8());
|
||
bridgeCraneData.setLi1bit10(current.getLi1bit10());
|
||
bridgeCraneData.setLi1bit12(current.getLi1bit12());
|
||
bridgeCraneData.setLi1bit13(current.getLi1bit13());
|
||
bridgeCraneData.setLi2bit0(current.getLi2bit0());
|
||
bridgeCraneData.setAl1bit0(current.getAl1bit0());
|
||
bridgeCraneData.setAl1bit1(current.getAl1bit1());
|
||
bridgeCraneData.setAl1bit4(current.getAl1bit4());
|
||
bridgeCraneData.setAl1bit12(current.getAl1bit12());
|
||
bridgeCraneData.setAl1bit13(current.getAl1bit13());
|
||
bridgeCraneData.setAl2bit0(current.getAl2bit0());
|
||
bridgeCraneData.setOp1bit0(current.getOp1bit0());
|
||
bridgeCraneData.setOp1bit1(current.getOp1bit1());
|
||
bridgeCraneData.setOp1bit6(current.getOp1bit6());
|
||
bridgeCraneData.setOp1bit7(current.getOp1bit7());
|
||
bridgeCraneData.setOp2bit0(current.getOp2bit0());
|
||
bridgeCraneData.setOp2bit1(current.getOp2bit1());
|
||
bridgeCraneData.setOp2bit6(current.getOp2bit6());
|
||
bridgeCraneData.setOp2bit7(current.getOp2bit7());
|
||
bridgeCraneData.setOp3bit0(current.getOp3bit0());
|
||
bridgeCraneData.setOp3bit1(current.getOp3bit1());
|
||
bridgeCraneData.setTs1bit0(current.getTs1bit0());
|
||
bridgeCraneData.setTs1bit1(current.getTs1bit1());
|
||
bridgeCraneData.setTs1bit4(current.getTs1bit4());
|
||
bridgeCraneData.setTs1bit5(current.getTs1bit5());
|
||
bridgeCraneData.setTs1bit9(current.getTs1bit9());
|
||
bridgeCraneData.setUploadTime(DateUtil.parseDateTime(body.getTime()));
|
||
return bridgeCraneData;
|
||
}
|
||
|
||
/**
|
||
* 睿郅盾响应body
|
||
*/
|
||
@Data
|
||
public static class RzdRspBody {
|
||
private String error;
|
||
private String DevUUID;
|
||
/**
|
||
* 设备标识
|
||
*/
|
||
private String uuid;
|
||
/**
|
||
* 数据采集时间, 格式yyyy-MM-dd HH:mm:ss
|
||
*/
|
||
private String time;
|
||
/**
|
||
* 数据采集周期, 即下次数据上传间隔
|
||
*/
|
||
private String interval;
|
||
/**
|
||
* 实时数据
|
||
*/
|
||
private Current current;
|
||
/**
|
||
* 静态数据
|
||
*/
|
||
private Metadata metadata;
|
||
|
||
@Data
|
||
public static class Current {
|
||
|
||
@JsonProperty("DevID")
|
||
private String devID; // 设备ID 12位字符串
|
||
|
||
@JsonProperty("DevType")
|
||
private String devType; // 设备类型 QJ
|
||
|
||
@JsonProperty("WorkTime")
|
||
private Float workTime; // 本次工作时间 单位:0.1小时
|
||
|
||
@JsonProperty("CumulativeWorkingTime")
|
||
private Float cumulativeWorkingTime; // 累计工作时间 单位:0.1小时
|
||
|
||
@JsonProperty("OperatingCycleNumber")
|
||
private Integer operatingCycleNumber; // 工作循环次数 单位:次
|
||
|
||
@JsonProperty("AcquisitionModulesNumber")
|
||
private Float acquisitionModulesNumber; // 数采终端数量 单位:个
|
||
|
||
@JsonProperty("Neiweight1")
|
||
private Float neiweight1; // 前天车吊钩重量 单位:0.01t
|
||
|
||
@JsonProperty("Neiweight2")
|
||
private Float neiweight2; // 后天车吊钩重量 单位:0.01t
|
||
|
||
@JsonProperty("Neiweight5")
|
||
private Float neiweight5; // 总重量 单位:0.01t
|
||
|
||
@JsonProperty("Distance1")
|
||
private Float distance1; // 前天车小车行程 单位:0.01m
|
||
|
||
@JsonProperty("Distance2")
|
||
private Float distance2; // 后天车小车行程 单位:0.01m
|
||
|
||
@JsonProperty("Distance5")
|
||
private Float distance5; // 前天车吊钩高度 单位:0.01m
|
||
|
||
@JsonProperty("Distance6")
|
||
private Float distance6; // 后天车吊钩高度 单位:0.01m
|
||
|
||
@JsonProperty("Distance7")
|
||
private Float distance7; // 大车行程 单位:0.01m
|
||
|
||
@JsonProperty("Distance10")
|
||
private Float distance10; // 前天车前部安全距离 单位:0.01m
|
||
|
||
@JsonProperty("Distance11")
|
||
private Float distance11; // 前天车后部安全距离 单位:0.01m
|
||
|
||
@JsonProperty("Distance12")
|
||
private Float distance12; // 后天车前部安全距离 单位:0.01m
|
||
|
||
@JsonProperty("Distance13")
|
||
private Float distance13; // 后天车后部安全距离 单位:0.01m
|
||
|
||
@JsonProperty("Distance14")
|
||
private Float distance14; // 大车偏斜行程 单位:0.01m
|
||
|
||
@JsonProperty("Speed1")
|
||
private Float speed1; // 前天车吊钩速度 单位:0.01m/s
|
||
|
||
@JsonProperty("Speed2")
|
||
private Float speed2; // 后天车吊钩速度 单位:0.01m/s
|
||
|
||
// 位状态字段
|
||
@JsonProperty("BRbit0")
|
||
private Integer brbit0; // 前天车吊钩制动 0-制动关闭;1-制动打开
|
||
|
||
@JsonProperty("BRbit2")
|
||
private Integer brbit2; // 后天车吊钩制动 0-制动关闭;1-制动打开
|
||
|
||
@JsonProperty("LI1bit0")
|
||
private Integer li1bit0; // 前天车前限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit1")
|
||
private Integer li1bit1; // 前天车后限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit2")
|
||
private Integer li1bit2; // 后天车前限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit3")
|
||
private Integer li1bit3; // 后天车后限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit8")
|
||
private Integer li1bit8; // 前天车吊钩上限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit10")
|
||
private Integer li1bit10; // 后天车吊钩上限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit12")
|
||
private Integer li1bit12; // 大车左限 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI1bit13")
|
||
private Integer li1bit13; // 大车右限 0-正常;1-限位到;
|
||
|
||
@JsonProperty("LI2bit0")
|
||
private Integer li2bit0; // 司机室门限位 0-正常;1-限位到;
|
||
|
||
@JsonProperty("AL1bit0")
|
||
private Integer al1bit0; // 前天车吊钩超载 0-正常;1-超载报警;
|
||
|
||
@JsonProperty("AL1bit1")
|
||
private Integer al1bit1; // 后天车吊钩超载 0-正常;1-超载报警;
|
||
|
||
@JsonProperty("AL1bit4")
|
||
private Integer al1bit4; // 整车吊重超载 0-正常;1-超载报警;
|
||
|
||
@JsonProperty("AL1bit12")
|
||
private Integer al1bit12; // 前天车吊钩超速报警 0-正常;1-超速报警;
|
||
|
||
@JsonProperty("AL1bit13")
|
||
private Integer al1bit13; // 后天车吊钩超速报警 0-正常;1-超速报警;
|
||
|
||
@JsonProperty("AL2bit0")
|
||
private Integer al2bit0; // 整车偏斜报警 0-正常;1-偏斜报警;
|
||
|
||
@JsonProperty("OP1bit0")
|
||
private Integer op1bit0; // 前天车上升 0-不动;1-上升
|
||
|
||
@JsonProperty("OP1bit1")
|
||
private Integer op1bit1; // 前天车下降 0-不动;1-下降
|
||
|
||
@JsonProperty("OP1bit6")
|
||
private Integer op1bit6; // 后天车上升 0-不动;1-上升
|
||
|
||
@JsonProperty("OP1bit7")
|
||
private Integer op1bit7; // 后天车下降 0-不动;1-下降
|
||
|
||
@JsonProperty("OP2bit0")
|
||
private Integer op2bit0; // 前天车前移 0-不动;1-前移
|
||
|
||
@JsonProperty("OP2bit1")
|
||
private Integer op2bit1; // 前天车后移 0-不动;1-后移
|
||
|
||
@JsonProperty("OP2bit6")
|
||
private Integer op2bit6; // 后天车前移 0-不动;1-前移
|
||
|
||
@JsonProperty("OP2bit7")
|
||
private Integer op2bit7; // 后天车后移 0-不动;1-后移
|
||
|
||
@JsonProperty("OP3bit0")
|
||
private Integer op3bit0; // 大车左移 0-不动;1-左移
|
||
|
||
@JsonProperty("OP3bit1")
|
||
private Integer op3bit1; // 大车右移 0-不动;1-右移
|
||
|
||
// 可选的终端状态字段
|
||
@JsonProperty("TS1bit0")
|
||
private Integer ts1bit0; // 报警终端 0-连接;1-断开
|
||
|
||
@JsonProperty("TS1bit1")
|
||
private Integer ts1bit1; // 风速采集终端 0-连接;1-断开
|
||
|
||
@JsonProperty("TS1bit4")
|
||
private Integer ts1bit4; // 前天车数采终端 0-连接;1-断开
|
||
|
||
@JsonProperty("TS1bit5")
|
||
private Integer ts1bit5; // 后天车数采终端 0-连接;1-断开
|
||
|
||
@JsonProperty("TS1bit9")
|
||
private Integer ts1bit9; // 司机室数采终端 0-连接;1-断开
|
||
}
|
||
|
||
@Data
|
||
public static class Metadata {
|
||
@JsonProperty("Name")
|
||
private String name; // 设备昵称 厂商定义(必须)
|
||
|
||
@JsonProperty("DeviceModel")
|
||
private String deviceModel; // 设备型号 厂商定义(必须)
|
||
|
||
@JsonProperty("RatedLoad")
|
||
private Float ratedLoad; // 额定起重量 单位:T
|
||
|
||
@JsonProperty("ControlVoltage")
|
||
private Integer controlVoltage; // 控制电压 单位:V
|
||
|
||
@JsonProperty("HoistingHeight")
|
||
private Float hoistingHeight; // 起升高度 单位:0.01m
|
||
|
||
@JsonProperty("GetUpSpeed")
|
||
private Float getUpSpeed; // 起升速度 单位:0.1m/s
|
||
|
||
@JsonProperty("RunningSpeed")
|
||
private Float runningSpeed; // 运行速度 单位:0.1m/s
|
||
|
||
@JsonProperty("Span")
|
||
private Float span; // 跨度 单位:0.01m
|
||
}
|
||
}
|
||
|
||
}
|