wisdomisite-java/src/main/java/com/zhgd/xmgl/task/GantryCraneTask.java
2024-04-14 21:05:01 +08:00

284 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}