284 lines
13 KiB
Java
284 lines
13 KiB
Java
package com.zhgd.xmgl.task;
|
||
|
||
import cn.hutool.core.convert.Convert;
|
||
import cn.hutool.core.date.DateUnit;
|
||
import cn.hutool.core.date.DateUtil;
|
||
import cn.hutool.core.util.NumberUtil;
|
||
import cn.hutool.core.util.StrUtil;
|
||
import cn.hutool.http.HttpRequest;
|
||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||
import com.gexin.fastjson.JSON;
|
||
import com.gexin.fastjson.JSONArray;
|
||
import com.gexin.fastjson.JSONObject;
|
||
import com.zhgd.xmgl.modules.bigdevice.entity.GantryCrane;
|
||
import com.zhgd.xmgl.modules.bigdevice.entity.GantryCraneCurrentData;
|
||
import com.zhgd.xmgl.modules.bigdevice.entity.GantryCraneWorkCycle;
|
||
import com.zhgd.xmgl.modules.bigdevice.mapper.GantryCraneCurrentDataMapper;
|
||
import com.zhgd.xmgl.modules.bigdevice.mapper.GantryCraneMapper;
|
||
import com.zhgd.xmgl.modules.bigdevice.mapper.GantryCraneWorkCycleMapper;
|
||
import com.zhgd.xmgl.task.dto.GantryCraneCurrentDataDto;
|
||
import com.zhgd.xmgl.util.NumberUtils;
|
||
import io.swagger.annotations.Api;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import net.javacrumbs.shedlock.core.SchedulerLock;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.scheduling.annotation.Scheduled;
|
||
import org.springframework.stereotype.Component;
|
||
import org.springframework.web.bind.annotation.RequestMapping;
|
||
import org.springframework.web.bind.annotation.RestController;
|
||
|
||
import java.util.Date;
|
||
import java.util.List;
|
||
import java.util.Objects;
|
||
|
||
/**
|
||
* 龙门吊定时任务
|
||
*/
|
||
@Slf4j
|
||
@Component
|
||
@RestController
|
||
@Api(tags = "定时任务")
|
||
@RequestMapping("/xmgl/task")
|
||
public class GantryCraneTask {
|
||
@Autowired
|
||
GantryCraneCurrentDataMapper gantryCraneCurrentDataMapper;
|
||
@Autowired
|
||
GantryCraneWorkCycleMapper gantryCraneWorkCycleMapper;
|
||
@Autowired
|
||
GantryCraneMapper gantryCraneMapper;
|
||
|
||
/**
|
||
* 定时获取实时数据
|
||
*/
|
||
@SchedulerLock(name = "getGantryCraneTaskData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
|
||
@Scheduled(cron = "0 0/5 * * * ?")
|
||
@RequestMapping("/getGantryCraneTaskData")
|
||
public void getGantryCraneTaskData() {
|
||
log.info("getGantryCraneTaskData任务执行");
|
||
List<GantryCrane> gantryCranes = gantryCraneMapper.selectList(new LambdaQueryWrapper<GantryCrane>()
|
||
.ne(GantryCrane::getRzdToken, "")
|
||
.isNotNull(GantryCrane::getRzdToken)
|
||
);
|
||
for (GantryCrane gantryCrane : gantryCranes) {
|
||
String url = "http://www.aqjkpt.com:26001";
|
||
log.info("url:{}", url);
|
||
String rs = HttpRequest.post(url)
|
||
.header("Authorization", gantryCrane.getRzdToken())
|
||
.execute().body();
|
||
log.info("rs:{}", rs);
|
||
//3秒一次
|
||
try {
|
||
Thread.sleep(3000);
|
||
} catch (InterruptedException e) {
|
||
log.error("error:", e);
|
||
}
|
||
try {
|
||
JSONArray rsJa = JSON.parseArray(rs);
|
||
JSONObject rsJaJo = rsJa.getJSONObject(0);
|
||
if (rsJaJo.containsKey("current")) {
|
||
GantryCraneCurrentDataDto dto = rsJaJo.getObject("current", GantryCraneCurrentDataDto.class);
|
||
insert(dto, gantryCrane);
|
||
} else {
|
||
log.error("龙门吊定时任务定时获取实时数据出错");
|
||
}
|
||
} catch (Exception e) {
|
||
log.error("error:", e);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 插入数据
|
||
*
|
||
* @param dto
|
||
* @param gantryCrane
|
||
*/
|
||
private void insert(GantryCraneCurrentDataDto dto, GantryCrane gantryCrane) {
|
||
GantryCraneCurrentData data = new GantryCraneCurrentData();
|
||
Date now = new Date();
|
||
String devSn = gantryCrane.getDevSn();
|
||
data.setDevSn(devSn);
|
||
data.setProjectSn(gantryCrane.getProjectSn());
|
||
data.setReciveTime(DateUtil.parse(dto.getCtime()));
|
||
data.setRunTime(null);
|
||
data.setWindSpeed(Convert.toStr(dto.getWind1()));
|
||
data.setWindSpeedState(getWindSpeedState(dto.getAL1bit5()));
|
||
//data.setAngleXAxis(null);
|
||
//data.setAngleYAxis(null);
|
||
data.setLargeCraneRange(Convert.toStr(dto.getDistance7()));
|
||
data.setLargeCraneSpeed(Convert.toStr(dto.getSpeed1()));
|
||
//data.setSmallCraneRange(null);
|
||
data.setSmallCraneSpeed(Convert.toStr(dto.getSpeed1()));
|
||
//data.setSecondSmallCraneRange(null);
|
||
data.setSecondSmallCraneSpeed(Convert.toStr(dto.getSpeed2()));
|
||
data.setSmallCraneMainHookLoad(Convert.toStr(dto.getNeiweight1()));
|
||
data.setSmallCraneMainHookHeight(dto.getDistance5());
|
||
//data.setSmallCraneAuxiliaryHookLoad(Convert.toStr(dto.getDistance6()));
|
||
//data.setSmallCraneAuxiliaryHookHeight(null);
|
||
data.setSecondSmallCraneMainHookLoad(Convert.toStr(dto.getNeiweight2()));
|
||
data.setSecondSmallCraneMainHookHeight(Convert.toStr(dto.getDistance6()));
|
||
//data.setSecondSmallCraneAuxiliaryHookLoad(null);
|
||
//data.setSecondSmallCraneAuxiliaryHookHeight(null);
|
||
//data.setMainHookCurrent(null);
|
||
//data.setMainHookVoltage(null);
|
||
//data.setSecondMainHookCurrent(null);
|
||
//data.setSecondMainHookVoltage(null);
|
||
//data.setSmallCraneRangeState(null);
|
||
//data.setSecondSmallCraneRangeState(null);
|
||
//data.setLargeCraneDistanceState(null);
|
||
//data.setMainHookWeightState(null);
|
||
//data.setSecondMainHookWeightState(null);
|
||
//data.setAuxiliaryHookWeightState(null);
|
||
//data.setSecondAuxiliaryHookWeightState(null);
|
||
//data.setMainHookHeightState(null);
|
||
//data.setSecondMainHookHeightState(null);
|
||
//data.setAuxiliaryHookHeightState(null);
|
||
//data.setSecondAuxiliaryHookHeightState(null);
|
||
//data.setAngleXState(null);
|
||
//data.setAngleYState(null);
|
||
//data.setGatedState(null);
|
||
//data.setAntiWindAndNonslipState(null);
|
||
//data.setCableReelStatus(null);
|
||
//data.setLargeCarSafeStatus(null);
|
||
//data.setLargeCarRunStatus(null);
|
||
//data.setSmallCarRunStatus(null);
|
||
//data.setSecondSmallCarRunStatus(null);
|
||
data.setMasterHookRunStatus(getMasterHookRunStatus(dto));
|
||
data.setSecondMasterHookRunStatus(getSecondMasterHookRunStatus(dto));
|
||
//data.setSubHookRunStatus(null);
|
||
//data.setSecondSubHookRunStatus(null);
|
||
//data.setDriverName(null);
|
||
//data.setDriverIdCard(null);
|
||
data.setTotalDay(getTotalDay(dto.getCumulativeWorkingTime()));
|
||
data.setTotalTimes(getTotalTimes(dto.getCumulativeWorkingTime()));
|
||
data.setPowerOnDay(Convert.toStr(dto.getWorkTime()));
|
||
data.setPowerOnTimes(Convert.toStr(dto.getWorkTime()));
|
||
data.setOperatingCycleNumber(Convert.toInt(dto.getOperatingCycleNumber()));
|
||
gantryCraneCurrentDataMapper.insert(data);
|
||
|
||
//插入循环数据,我们需要获取每次的工作循环的开始和结束时间和吊重,通过“工作循环次数”是否增加,判断是否进行一次循环,然后取这次的实时的数据的工作时间减去上次(“工作循环次数”-1)的工作时间时间,得到每次的工作循环的开始和结束时间,吊重就取这段时间内最大的吊重,可以这样
|
||
GantryCraneCurrentData lastNewData = gantryCraneCurrentDataMapper.selectOne(new LambdaQueryWrapper<GantryCraneCurrentData>()
|
||
.eq(GantryCraneCurrentData::getDevSn, devSn)
|
||
.orderByDesc(GantryCraneCurrentData::getReciveTime)
|
||
.last("limit 1"));
|
||
if (lastNewData != null) {
|
||
if (NumberUtils.gt(data.getOperatingCycleNumber() + "", lastNewData.getOperatingCycleNumber() + "")) {
|
||
log.info("插入龙门吊的工作循环数据>>>");
|
||
GantryCraneWorkCycle cycle = new GantryCraneWorkCycle();
|
||
cycle.setDevSn(devSn);
|
||
cycle.setProjectSn(gantryCrane.getProjectSn());
|
||
cycle.setStartTime(DateUtil.formatDateTime(lastNewData.getReciveTime()));
|
||
cycle.setEndTime(DateUtil.formatDateTime(now));
|
||
cycle.setWorkTime(Convert.toStr(DateUtil.between(lastNewData.getReciveTime(), now, DateUnit.SECOND)));
|
||
cycle.setAddTime(data.getReciveTime());
|
||
//cycle.setDriverName();
|
||
//cycle.setDriverIdCard();
|
||
cycle.setMasterHookWorkStartHeight(Convert.toStr(lastNewData.getSmallCraneMainHookHeight()));
|
||
cycle.setMasterHookWorkEndHeight(Convert.toStr(data.getSmallCraneMainHookHeight()));
|
||
cycle.setMasterHookWorkMaxWeight(NumberUtils.getMaxStr(data.getSmallCraneMainHookLoad(), lastNewData.getSmallCraneMainHookLoad()));
|
||
cycle.setMasterHookWorkOperation(getMasterHookRunStatus(dto));
|
||
//cycle.setSubHookWorkStartHeight(Convert.toStr(lastNewData.getSmallCraneAuxiliaryHookLoad()));
|
||
//cycle.setSubHookWorkEndHeight(Convert.toStr(dto.getDistance6()));
|
||
cycle.setSubHookWorkMaxWeight(NumberUtils.getMaxStr(data.getSmallCraneMainHookLoad(), lastNewData.getSmallCraneMainHookLoad()));
|
||
//cycle.setSubHookWorkOperation(getSecondMasterHookRunStatus(dto));
|
||
cycle.setSecondMasterHookWorkStartHeight(lastNewData.getSecondSmallCraneMainHookHeight());
|
||
//cycle.setSecondMasterHookWorkEndHeight();
|
||
cycle.setSecondMasterHookWorkMaxWeight(NumberUtils.getMaxStr(data.getSecondSmallCraneMainHookLoad(), lastNewData.getSecondSmallCraneMainHookLoad()));
|
||
cycle.setSecondMasterHookWorkOperation(getMasterHookRunStatus(dto));
|
||
//cycle.setSecondSubHookWorkStartHeight();
|
||
//cycle.setSecondSubHookWorkEndHeight();
|
||
//cycle.setSecondSubHookWorkMaxWeight();
|
||
//cycle.setSecondSubHookWorkOperation(getSecondMasterHookRunStatus(dto));
|
||
//cycle.setLargeCarWorkStartRange();
|
||
//cycle.setLargeCarWorkEndRange();
|
||
cycle.setLargeCarWorkMaxSpeed(NumberUtils.getMaxStr(data.getLargeCraneSpeed(), lastNewData.getLargeCraneSpeed()));
|
||
//cycle.setLargeCarWorkOperation();
|
||
//cycle.setSmallCarWorkStartRange();
|
||
//cycle.setSmallCarWorkEndRange();
|
||
//cycle.setSmallCarWorkMaxSpeed();
|
||
//cycle.setSmallCarWorkOperation();
|
||
//cycle.setSecondSmallCarWorkStartRange();
|
||
//cycle.setSecondSmallCarWorkEndRange();
|
||
cycle.setSecondSmallCarWorkMaxSpeed(NumberUtils.getMaxStr(data.getSecondSmallCraneSpeed(), lastNewData.getSecondSmallCraneSpeed()));
|
||
//cycle.setSecondSmallCarWorkOperation();
|
||
cycle.setWorkType(0);
|
||
//cycle.setMaxDipX();
|
||
//cycle.setMaxDipY();
|
||
cycle.setMaxWindSpeed(NumberUtils.getMaxStr(lastNewData.getWindSpeed(), data.getWindSpeed()));
|
||
//cycle.setMasterHookWorkAlarm();
|
||
//cycle.setSubHookWorkAlarm();
|
||
//cycle.setSecondMasterHookWorkAlarm();
|
||
//cycle.setSecondSubHookWorkAlarm();
|
||
//cycle.setLargeCarSpeedWorkAlarm();
|
||
//cycle.setSmallCarSpeedWorkAlarm();
|
||
//cycle.setSecondSmallCarSpeedWorkAlarm();
|
||
//cycle.setDipXWorkAlarm();
|
||
//cycle.setDipYWorkAlarm();
|
||
//cycle.setWindSpeedWorkAlarm();
|
||
//cycle.setWorkSafeStatus();
|
||
gantryCraneWorkCycleMapper.insert(cycle);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
private String getTotalTimes(Double d) {
|
||
if (d == null) {
|
||
return null;
|
||
}
|
||
//HH:MM:SS
|
||
int second = (int) (d * 0.1 * 3600);
|
||
int h = second / 3600;
|
||
int min = (second % 3600) / 60;
|
||
int s = (second % 3600) % 60;
|
||
return (h == 0 ? "00" : NumberUtils.fillZero(h, 2)) + ":" + (min == 0 ? "00" : NumberUtils.fillZero(min, 2)) + ":" + (s == 0 ? "00" : NumberUtils.fillZero(s, 2));
|
||
}
|
||
|
||
private String getTotalDay(Double d) {
|
||
if (d == null) {
|
||
return null;
|
||
}
|
||
return Convert.toStr(NumberUtil.round(d * 0.1 / 24, 2));
|
||
}
|
||
|
||
private Integer getSecondMasterHookRunStatus(GantryCraneCurrentDataDto dto) {
|
||
//小车2主钩运行状态 0:停止 1:上升 2:下降 3:故障
|
||
if (Objects.equals(dto.getOP1bit6(), 0) || Objects.equals(dto.getOP1bit7(), 0)) {
|
||
return 0;
|
||
} else if (Objects.equals(dto.getOP1bit6(), 1)) {
|
||
return 1;
|
||
} else if (Objects.equals(dto.getOP1bit7(), 1)) {
|
||
return 2;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
private Integer getMasterHookRunStatus(GantryCraneCurrentDataDto dto) {
|
||
//主钩运行状态 0:停止 1:上升 2:下降 3:故障
|
||
if (Objects.equals(dto.getOP1bit0(), 0) || Objects.equals(dto.getOP1bit1(), 0)) {
|
||
return 0;
|
||
} else if (Objects.equals(dto.getOP1bit0(), 1)) {
|
||
return 1;
|
||
} else if (Objects.equals(dto.getOP1bit1(), 1)) {
|
||
return 2;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
private Integer getWindSpeedState(String al1bit5) {
|
||
if (StrUtil.isBlank(al1bit5)) {
|
||
return null;
|
||
}
|
||
switch (al1bit5) {
|
||
case "0":
|
||
return 0;
|
||
case "1":
|
||
return 2;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
}
|