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 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 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 warnings = (List)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 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 warnings = (List)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 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 devTowerDataCollideDetailList = new ArrayList<>(); if(StringUtils.isNotEmpty(req.getContent().getCollideTowers())){ for (Map 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 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 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); } }