jhprjv2/yanzhu-deviceApi/src/main/java/com/ruoyi/api/TowerCraneApiController.java

348 lines
21 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.ruoyi.api;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.RateLimiter;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.enums.HttpStatusEnum;
import com.ruoyi.common.enums.LimitType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.domain.TowerReqVo;
import com.ruoyi.emuns.TowerTypeEnums;
import com.yanzhu.jh.device.domain.*;
import com.yanzhu.jh.device.service.*;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
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;
/**
* 塔吊监测APIController
*
* @author JiangYuQi
* @date 2024-01-13
*/
@Slf4j
@RestController
@RequestMapping("/desApi/towerCrane")
public class TowerCraneApiController {
@Autowired
private RedisCache redisCache;
@Autowired
private IDevTowerDataRunService devTowerDataRunService;
@Autowired
private IDevTowerDataRoundService devTowerDataRoundService;
@Autowired
private IDevTowerDataLimitService devTowerDataLimitService;
@Autowired
private IDevTowerDataLocalService devTowerDataLocalService;
@Autowired
private IDevTowerDataCollideService devTowerDataCollideService;
@Autowired
private IDevTowerProjectConfigService devTowerProjectConfigService;
/**
* 塔吊监测++
* 限流规则[60秒内最多请求10次限流策略IP]
* @param req 请求信息
* @author JiangYuQi
* @date 2024-01-13
*/
@Anonymous
@ApiOperation(value = "塔吊监测")
@RateLimiter(count = 10, limitType = LimitType.IP)
@PostMapping("/v1/push")
public AjaxResult pushData(@Validated @RequestBody TowerReqVo req) {
DevTowerProjectConfig config = redisCache.getCacheObject(CacheConstants.YANZHU_DEVICE_TOWER+req.getContent().getDeviceKey());
if(config==null){
throw new ServiceException(HttpStatusEnum.DARA_EXCEPTION.getInfo(),HttpStatusEnum.DARA_EXCEPTION.getCode());
}
if(req.getType() == TowerTypeEnums.BASE.getCode()){
this.pushConfigData(config,req);
}else if(req.getType() == TowerTypeEnums.RUN.getCode()){
this.pushRunData(config,req);
}else if(req.getType() == TowerTypeEnums.ROUND.getCode()){
this.pushRoundData(config,req);
}else if(req.getType() == TowerTypeEnums.COLLIDE.getCode()){
this.pushCollideData(config,req);
}else if(req.getType() == TowerTypeEnums.LIMIT.getCode()){
this.pushLimitData(config,req);
}else if(req.getType() == TowerTypeEnums.LOCAL.getCode()){
this.pushLocalData(config,req);
}
return AjaxResult.success();
}
/**
* 塔机上报基本信息
* @param req
*/
private void pushConfigData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerProjectConfig devTowerProjectConfig = devTowerProjectConfigService.selectDevTowerProjectConfigById(config.getId());
Map<String, Object> dataContent = req.getContent().getDataContent();
devTowerProjectConfig.setTowerId(Convert.toStr(dataContent.get("towerId")));
devTowerProjectConfig.setTowerType(Convert.toStr(dataContent.get("towerType")));
devTowerProjectConfig.setCoordinateX(Convert.toStr(dataContent.get("coordinateX")));
devTowerProjectConfig.setCoordinateY(Convert.toStr(dataContent.get("coordinateY")));
devTowerProjectConfig.setFrontBrachium(Convert.toStr(dataContent.get("frontBrachium")));
devTowerProjectConfig.setAfterBrachium(Convert.toStr(dataContent.get("afterBrachium")));
devTowerProjectConfig.setTowerBodyHeight(Convert.toStr(dataContent.get("towerBodyHeight")));
devTowerProjectConfig.setTowerCapHeight(Convert.toStr(dataContent.get("towerCapHeight")));
devTowerProjectConfig.setTowerSectionHeight(Convert.toStr(dataContent.get("towerSectionHeight")));
devTowerProjectConfigService.updateDevTowerProjectConfigNoCache(devTowerProjectConfig);
}
/**
* 塔机上报实时数据
* @param req
*/
private static void pushRunData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerDataRun devTowerDataRun = new DevTowerDataRun();
Map<String, Object> dataContent = req.getContent().getDataContent();
devTowerDataRun.setCfgId(config.getId());
devTowerDataRun.setProjectId(config.getProjectId());
devTowerDataRun.setDeptId(config.getDeptId());
devTowerDataRun.setDeviceKey(config.getDeviceSn());
devTowerDataRun.setHeight(Convert.toStr(dataContent.get("height")));
devTowerDataRun.setRange(Convert.toStr(dataContent.get("range")));
devTowerDataRun.setRotation(Convert.toStr(dataContent.get("rotation")));
devTowerDataRun.setLoad(Convert.toStr(dataContent.get("load")));
devTowerDataRun.setWindSpeed(Convert.toStr(dataContent.get("windSpeed")));
devTowerDataRun.setLeanAngleX(Convert.toStr(dataContent.get("leanAngleX")));
devTowerDataRun.setLeanAngleY(Convert.toStr(dataContent.get("leanAngleY")));
devTowerDataRun.setLoadPercent(Convert.toStr(dataContent.get("loadPercent")));
devTowerDataRun.setMomentPercent(Convert.toStr(dataContent.get("momentPercent")));
devTowerDataRun.setWindSpeedPercent(Convert.toStr(dataContent.get("windSpeedPercent")));
devTowerDataRun.setLeanAnglePercent(Convert.toStr(dataContent.get("leanAnglePercent")));
devTowerDataRun.setRate(Convert.toStr(dataContent.get("rate")));
devTowerDataRun.setRotationSensorState(Convert.toStr(dataContent.get("rotationSensorState")));
devTowerDataRun.setLoadSensorState(Convert.toStr(dataContent.get("loadSensorState")));
devTowerDataRun.setWindSpeedSensorState(Convert.toStr(dataContent.get("windSpeedSensorState")));
devTowerDataRun.setLeanAngleSensorState(Convert.toStr(dataContent.get("leanAngleSensorState")));
devTowerDataRun.setRangeSensorState(Convert.toStr(dataContent.get("rangeSensorState")));
devTowerDataRun.setHeightSensorState(Convert.toStr(dataContent.get("heightSensorState")));
devTowerDataRun.setBrakingStatus(Convert.toStr(dataContent.get("brakingStatus")));
if(dataContent.get("warnings")!=null){
List<String> warnings = (List<String>)dataContent.get("warnings");
devTowerDataRun.setWarnings(String.join(",", warnings));
for(String warning:warnings){
Integer alarm = Convert.toInt(warning);
if(alarm>100 && alarm<120){
devTowerDataRun.setIsAlarm(1L);
}
}
}
System.out.println(devTowerDataRun);
//devTowerDataRunService.insertDevTowerDataRun(devTowerDataRun);
}
public static void main(String[] args) {
String str = "{\"type\":111,\"content\":{\"time\":1496263304,\"dataType\":113001,\"deviceKey\":\"jycw6\",\"dataContent\":{\"height\":\"4.1\",\"range\": \"21.9\",\"rotation\": \"171.0\",\"load\": \"0.0\",\"windSpeed\": \"0.0\",\"leanAngleX\":\"0.5\",\"leanAngley\":\"0.0\",\"loadPercent\":\"0\", \"mome ntPercent\":\"0\",\"windSpeedPercent\":\"0\",\"leanAnglePercent\": \"0\", \"warnings\": [\"0\"],\"rate\":\"2\",\"rotationSensorState\":\"1\",\"loadSensorState\": \"1\",\"windSpeedSensorState\": \"1\",\"leanAngleSensorState\":\"1\",\"rangeSensorState\":\"1\",\"heightSensorState\":\"1\",\"bra kingStatus\":\"0\"}}}";
TowerReqVo req = JSON.parseObject(str,TowerReqVo.class);
System.out.println(req);
DevTowerProjectConfig config = new DevTowerProjectConfig();
pushRunData(config,req);
}
/**
* 塔机上报循环数据
* @param req
*/
private void pushRoundData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerDataRound devTowerDataRound = new DevTowerDataRound();
Map<String, Object> dataContent = req.getContent().getDataContent();
devTowerDataRound.setCfgId(config.getId());
devTowerDataRound.setProjectId(config.getProjectId());
devTowerDataRound.setDeptId(config.getDeptId());
devTowerDataRound.setDeviceKey(config.getDeviceSn());
devTowerDataRound.setTowerId(Convert.toStr(dataContent.get("towerId")));
devTowerDataRound.setWorkStartTime(Convert.toStr(dataContent.get("workStartTime")));
devTowerDataRound.setWorkEndTime(Convert.toStr(dataContent.get("workEndTime")));
devTowerDataRound.setMinHeight(Convert.toStr(dataContent.get("minHeight")));
devTowerDataRound.setMaxHeight(Convert.toStr(dataContent.get("maxHeight")));
devTowerDataRound.setMinRange(Convert.toStr(dataContent.get("minRange")));
devTowerDataRound.setMaxRange(Convert.toStr(dataContent.get("maxRange")));
devTowerDataRound.setStartHeight(Convert.toStr(dataContent.get("startHeight")));
devTowerDataRound.setEndHeight(Convert.toStr(dataContent.get("endHeight")));
devTowerDataRound.setStartRange(Convert.toStr(dataContent.get("startRange")));
devTowerDataRound.setEndRange(Convert.toStr(dataContent.get("endRange")));
devTowerDataRound.setStartRotation(Convert.toStr(dataContent.get("startRotation")));
devTowerDataRound.setEndRotation(Convert.toStr(dataContent.get("endRotation")));
devTowerDataRound.setMaxLoad(Convert.toStr(dataContent.get("maxLoad")));
devTowerDataRound.setMaxLoadPercent(Convert.toStr(dataContent.get("maxLoadPercent")));
devTowerDataRound.setMaxMoment(Convert.toStr(dataContent.get("maxMoment")));
devTowerDataRound.setMaxMomentPercent(Convert.toStr(dataContent.get("maxMomentPercent")));
devTowerDataRound.setStartWindSpeed(Convert.toStr(dataContent.get("startWindSpeed")));
devTowerDataRound.setEndWindSpeed(Convert.toStr(dataContent.get("endWindSpeed")));
devTowerDataRound.setStartWindSpeedPercent(Convert.toStr(dataContent.get("startWindSpeedPercent")));
devTowerDataRound.setEndWindSpeedPercent(Convert.toStr(dataContent.get("endWindSpeedPercent")));
devTowerDataRound.setStartLeanAngleX(Convert.toStr(dataContent.get("startleanAngleX")));
devTowerDataRound.setEndLeanAngleX(Convert.toStr(dataContent.get("endLeanAngleX")));
devTowerDataRound.setStartLeanAngleY(Convert.toStr(dataContent.get("startleanAngleY")));
devTowerDataRound.setEndLeanAngleY(Convert.toStr(dataContent.get("endLeanAngleY")));
if(dataContent.get("warning")!=null){
List<String> warnings = (List<String>)dataContent.get("warning");
devTowerDataRound.setWarnings(String.join(",", warnings));
for(String warning:warnings){
Integer alarm = Convert.toInt(warning);
if(alarm>6 && alarm<10){
devTowerDataRound.setIsOverload(1L);
}
if(alarm>100 && alarm<120){
devTowerDataRound.setIsAlarm(1L);
}
}
}
devTowerDataRoundService.insertDevTowerDataRound(devTowerDataRound);
}
/**
* 塔机上报碰撞信息
* @param req
*/
private void pushCollideData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerDataCollide devTowerDataCollide = new DevTowerDataCollide();
Map<String, Object> dataContent = req.getContent().getLocalDeviceInfo();
devTowerDataCollide.setCfgId(config.getId());
devTowerDataCollide.setProjectId(config.getProjectId());
devTowerDataCollide.setDeptId(config.getDeptId());
devTowerDataCollide.setDeviceKey(config.getDeviceSn());
devTowerDataCollide.setTowerId(Convert.toStr(dataContent.get("towerId")));
devTowerDataCollide.setCoordinateX(Convert.toStr(dataContent.get("coordinateX")));
devTowerDataCollide.setCoordinateY(Convert.toStr(dataContent.get("coordinateY")));
devTowerDataCollide.setFrontBrachium(Convert.toStr(dataContent.get("frontBrachium")));
devTowerDataCollide.setAfterBrachium(Convert.toStr(dataContent.get("afterBrachium")));
devTowerDataCollide.setTowerBodyHeight(Convert.toStr(dataContent.get("towerBodyHeight")));
devTowerDataCollide.setHeight(Convert.toStr(dataContent.get("height")));
devTowerDataCollide.setAngle(Convert.toStr(dataContent.get("angle")));
devTowerDataCollide.setRange(Convert.toStr(dataContent.get("range")));
devTowerDataCollide.setEarlyWarningDistance(Convert.toStr(dataContent.get("earlyWarningDistance")));
devTowerDataCollide.setAlarmWarningDistance(Convert.toStr(dataContent.get("alarmWarningDistance")));
devTowerDataCollide.setContourValue(Convert.toStr(dataContent.get("contourValue")));
List<DevTowerDataCollideDetail> devTowerDataCollideDetailList = new ArrayList<>();
if(StringUtils.isNotEmpty(req.getContent().getCollideTowers())){
for (Map<String, Object> collideTowers:req.getContent().getCollideTowers()){
DevTowerDataCollideDetail devTowerDataCollideDetail = new DevTowerDataCollideDetail();
devTowerDataCollideDetail.setTowerId(Convert.toStr(collideTowers.get("towerId")));
devTowerDataCollideDetail.setCoordinateX(Convert.toStr(collideTowers.get("coordinateX")));
devTowerDataCollideDetail.setCoordinateY(Convert.toStr(collideTowers.get("coordinateY")));
devTowerDataCollideDetail.setFrontBrachium(Convert.toStr(collideTowers.get("frontBrachium")));
devTowerDataCollideDetail.setAfterBrachium(Convert.toStr(collideTowers.get("afterBrachium")));
devTowerDataCollideDetail.setTowerBodyHeight(Convert.toStr(collideTowers.get("towerBodyHeight")));
devTowerDataCollideDetail.setHeight(Convert.toStr(collideTowers.get("height")));
devTowerDataCollideDetail.setAngle(Convert.toStr(collideTowers.get("angle")));
devTowerDataCollideDetail.setRange(Convert.toStr(collideTowers.get("range")));
devTowerDataCollideDetail.setCollideHorizontalDistance(Convert.toStr(collideTowers.get("collideHorizontalDistance")));
devTowerDataCollideDetail.setCollideVerticalDistance(Convert.toStr(collideTowers.get("collideVerticalDistance")));
devTowerDataCollideDetail.setCollideState(Convert.toStr(collideTowers.get("collideState")));
devTowerDataCollideDetailList.add(devTowerDataCollideDetail);
}
devTowerDataCollide.setDevTowerDataCollideDetailList(devTowerDataCollideDetailList);
}
devTowerDataCollideService.insertDevTowerDataCollide(devTowerDataCollide);
}
/**
* 塔机上报限位信息
* @param req
*/
private void pushLimitData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerDataLimit devTowerDataLimit = new DevTowerDataLimit();
Map<String, Object> dataContent = req.getContent().getDataContent();
devTowerDataLimit.setCfgId(config.getId());
devTowerDataLimit.setProjectId(config.getProjectId());
devTowerDataLimit.setDeptId(config.getDeptId());
devTowerDataLimit.setDeviceKey(config.getDeviceSn());
devTowerDataLimit.setTowerId(Convert.toStr(dataContent.get("towerId")));
devTowerDataLimit.setWindSpeedWarning(Convert.toStr(dataContent.get("windSpeedWarning")));
devTowerDataLimit.setWindSpeedAlarm(Convert.toStr(dataContent.get("windSpeedAlarm")));
devTowerDataLimit.setLoadWarning(Convert.toStr(dataContent.get("loadWarning")));
devTowerDataLimit.setLoadAlarm(Convert.toStr(dataContent.get("loadAlarm")));
devTowerDataLimit.setMomentWarning(Convert.toStr(dataContent.get("momentWarning")));
devTowerDataLimit.setMomentAlarm(Convert.toStr(dataContent.get("momentAlarm")));
devTowerDataLimit.setHighLimitWarning(Convert.toStr(dataContent.get("highLimitWarning")));
devTowerDataLimit.setHighLimitAlarm(Convert.toStr(dataContent.get("highLimitAlarm")));
devTowerDataLimit.setLowLimitWarning(Convert.toStr(dataContent.get("lowLimitWarning")));
devTowerDataLimit.setLowLimitAlarm(Convert.toStr(dataContent.get("lowLimitAlarm")));
devTowerDataLimit.setLeftLimitWarning(Convert.toStr(dataContent.get("leftLimitWarning")));
devTowerDataLimit.setLeftLimitAlarm(Convert.toStr(dataContent.get("leftLimitAlarm")));
devTowerDataLimit.setRightLimitWarning(Convert.toStr(dataContent.get("rightLimitWarning")));
devTowerDataLimit.setRightLimitAlarm(Convert.toStr(dataContent.get("rightLimitAlarm")));
devTowerDataLimit.setFrontLimitWarning(Convert.toStr(dataContent.get("frontLimitWarning")));
devTowerDataLimit.setFrontLimitAlarm(Convert.toStr(dataContent.get("frontLimitAlarm")));
devTowerDataLimit.setBackLimitWarning(Convert.toStr(dataContent.get("backLimitWarning")));
devTowerDataLimit.setBackLimitAlarm(Convert.toStr(dataContent.get("backLimitAlarm")));
devTowerDataLimit.setCollisionAngleWarning(Convert.toStr(dataContent.get("collisionAngleWarning")));
devTowerDataLimit.setCollisionAngleAlarm(Convert.toStr(dataContent.get("collisionAngleAlarm")));
devTowerDataLimit.setCollisionDistanceWarning(Convert.toStr(dataContent.get("collisionDistanceWarning")));
devTowerDataLimit.setCollisionDistanceAlarm(Convert.toStr(dataContent.get("collisionDistanceAlarm")));
devTowerDataLimit.sethDistanceWarning(Convert.toStr(dataContent.get("hDistanceWarning")));
devTowerDataLimit.sethDistanceAlarm(Convert.toStr(dataContent.get("hDistanceAlarm")));
devTowerDataLimit.setvDistanceWarning(Convert.toStr(dataContent.get("vDistanceWarning")));
devTowerDataLimit.setvDistanceAlarm(Convert.toStr(dataContent.get("vDistanceAlarm")));
devTowerDataLimit.setLeanWarning(Convert.toStr(dataContent.get("leanWarning")));
devTowerDataLimit.setLeanAlarm(Convert.toStr(dataContent.get("leanAlarm")));
devTowerDataLimit.setRangeLimitStart(Convert.toStr(dataContent.get("rangeLimitStart")));
devTowerDataLimit.setRangeLimitEnd(Convert.toStr(dataContent.get("rangeLimitEnd")));
devTowerDataLimit.setHeightLimitStart(Convert.toStr(dataContent.get("heightLimitStart")));
devTowerDataLimit.setHeightLimitEnd(Convert.toStr(dataContent.get("heightLimitEnd")));
devTowerDataLimit.setRotationLimitStart(Convert.toStr(dataContent.get("rotationLimitStart")));
devTowerDataLimit.setRotationLimitEnd(Convert.toStr(dataContent.get("rotationLimitEnd")));
devTowerDataLimitService.insertDevTowerDataLimit(devTowerDataLimit);
}
/**
* 塔机上报标定位信息
* @param req
*/
private void pushLocalData(DevTowerProjectConfig config,TowerReqVo req){
DevTowerDataLocal devTowerDataLocal = new DevTowerDataLocal();
Map<String, Object> dataContent = req.getContent().getDataContent();
devTowerDataLocal.setCfgId(config.getId());
devTowerDataLocal.setProjectId(config.getProjectId());
devTowerDataLocal.setDeptId(config.getDeptId());
devTowerDataLocal.setDeviceKey(config.getDeviceSn());
devTowerDataLocal.setTowerId(Convert.toStr(dataContent.get("towerId")));
devTowerDataLocal.setRangeNearEndAdValue(Convert.toStr(dataContent.get("rangeNearEndADValue")));
devTowerDataLocal.setRangeNearEndRealityValue(Convert.toStr(dataContent.get("rangeNearEndRealityValue")));
devTowerDataLocal.setRangeFarEndAdValue(Convert.toStr(dataContent.get("rangeFarEndADValue")));
devTowerDataLocal.setRangeFarEndRealityValue(Convert.toStr(dataContent.get("rangeFarEndRealityValue")));
devTowerDataLocal.setHighNearEndAdValue(Convert.toStr(dataContent.get("highNearEndADValue")));
devTowerDataLocal.setHighNearEndRealityValue(Convert.toStr(dataContent.get("highNearEndRealityValue")));
devTowerDataLocal.setHighFarEndAdValue(Convert.toStr(dataContent.get("highFarEndADValue")));
devTowerDataLocal.setHighFarEndRealityValue(Convert.toStr(dataContent.get("highFarEndRealityValue")));
devTowerDataLocal.setEmptyWeightAdValue(Convert.toStr(dataContent.get("emptyWeightADValue")));
devTowerDataLocal.setEmptyWeightRealityValue(Convert.toStr(dataContent.get("emptyWeightRealityValue")));
devTowerDataLocal.setLoadWeightAdValue(Convert.toStr(dataContent.get("loadWeightADValue")));
devTowerDataLocal.setLoadWeightRealityValue(Convert.toStr(dataContent.get("loadWeightRealityValue")));
devTowerDataLocal.setRotationStartAdValue(Convert.toStr(dataContent.get("rotationStartADValue")));
devTowerDataLocal.setRotationStartRealityValue(Convert.toStr(dataContent.get("rotationStartRealityValue")));
devTowerDataLocal.setRotationEndAdValue(Convert.toStr(dataContent.get("rotationEndADValue")));
devTowerDataLocal.setRotationEndRealityValue(Convert.toStr(dataContent.get("rotationEndRealityValue")));
devTowerDataLocal.setWindSpeedFactor(Convert.toStr(dataContent.get("windSpeedFactor")));
devTowerDataLocal.setTiltFactor(Convert.toStr(dataContent.get("tiltFactor")));
devTowerDataLocalService.insertDevTowerDataLocal(devTowerDataLocal);
}
}