From 98c0039f8e57617fd7b61a26535bd3f73af6fdbc Mon Sep 17 00:00:00 2001 From: chents <78666437@qq.com> Date: Thu, 11 May 2023 20:11:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommonApiController.java | 34 ++++----- .../business/service/ICarInfoService.java | 3 + .../service/impl/CarInfoServiceImpl.java | 22 +++++- .../business/service/impl/PublishService.java | 8 ++- .../modules/business/vo/DeviceVo.java | 13 ++++ .../springblade/modules/job/CarInfoTask.java | 72 +++++++++++++++++-- .../websocket/vo/WebSocketMessage.java | 7 +- .../upload/service/IProBusLineImgService.java | 2 +- .../service/impl/ProBusLineImgImpl.java | 6 +- 9 files changed, 136 insertions(+), 31 deletions(-) create mode 100644 src/main/java/org/springblade/modules/business/vo/DeviceVo.java diff --git a/src/main/java/org/springblade/modules/business/controller/CommonApiController.java b/src/main/java/org/springblade/modules/business/controller/CommonApiController.java index 32bffcf..f057a67 100644 --- a/src/main/java/org/springblade/modules/business/controller/CommonApiController.java +++ b/src/main/java/org/springblade/modules/business/controller/CommonApiController.java @@ -1,19 +1,14 @@ package org.springblade.modules.business.controller; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.beetl.core.util.ArrayMap; -import org.jetbrains.annotations.NotNull; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STOleUpdate; import org.springblade.common.cache.business.BusLineCache; import org.springblade.common.cache.business.SiteListCache; import org.springblade.common.constant.BusinessConstant; import org.springblade.common.constant.CommonConstant; -import org.springblade.common.utils.CommonDateUtil; import org.springblade.common.utils.CommonUtil; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.tenant.annotation.TenantDS; @@ -23,18 +18,22 @@ import org.springblade.modules.business.entity.BusLine; import org.springblade.modules.business.service.ICarInfoService; import org.springblade.modules.business.service.IStationHintService; import org.springblade.modules.business.service.impl.PublishService; -import org.springblade.modules.business.vo.*; +import org.springblade.modules.business.vo.CarInfoVO; +import org.springblade.modules.business.vo.SiteInfoVO; +import org.springblade.modules.business.vo.imgVo; import org.springblade.modules.job.CarInfoTask; -import org.springblade.upload.entity.PocBusLineImg; -import org.springblade.upload.mapper.ProBusLineImgMapper; import org.springblade.upload.service.IProBusLineImgService; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; import java.text.DecimalFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -121,7 +120,7 @@ public class CommonApiController extends BladeController { @GetMapping("get-car-speed") public R getCarSpeed(@RequestParam String carNo) { CarInfoVO info = carInfoService.getCarInfo(carNo); - + carInfoTask.getCarSpeed(carNo); if (Func.isEmpty(info)) { return R.fail("未获取到车辆信息, 请检查车是否已掉线"); } @@ -437,8 +436,9 @@ public class CommonApiController extends BladeController { resultMap.put("activityData", busLine.getActivity()); resultMap.put("scenicData", busLine.getScenic()); resultMap.put("speed",info.getSpeed()); - List busLineList = stationHintService.getBusLineByName(nextSite.getSname()); - List imgList = proBusLineImgService.getImgByid(busLineList.get(0).getId()); + List busLineList = stationHintService.getBusLineByName(nextSite.getSname()); + Long busLineId = busLineList.get(0).getId(); + List imgList = proBusLineImgService.getImgByid(busLineId); redisTemplate.opsForValue().set("imgList-info", imgList); resultMap.put("imgData", imgList); } diff --git a/src/main/java/org/springblade/modules/business/service/ICarInfoService.java b/src/main/java/org/springblade/modules/business/service/ICarInfoService.java index 44895a6..0d7814c 100644 --- a/src/main/java/org/springblade/modules/business/service/ICarInfoService.java +++ b/src/main/java/org/springblade/modules/business/service/ICarInfoService.java @@ -1,6 +1,7 @@ package org.springblade.modules.business.service; import org.springblade.modules.business.vo.CarInfoVO; +import org.springblade.modules.business.vo.DeviceVo; import java.util.List; @@ -20,4 +21,6 @@ public interface ICarInfoService { CarInfoVO getCarInfo(String carNo); List getAllCarInfo(); + + DeviceVo currentPush(String carNo); } diff --git a/src/main/java/org/springblade/modules/business/service/impl/CarInfoServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/CarInfoServiceImpl.java index d746d39..5fb9dc9 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/CarInfoServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/CarInfoServiceImpl.java @@ -5,9 +5,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springblade.common.utils.HttpClientUtils; import org.springblade.core.tool.utils.BeanUtil; -import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.service.ICarInfoService; import org.springblade.modules.business.vo.CarInfoVO; +import org.springblade.modules.business.vo.DeviceVo; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -56,4 +56,24 @@ public class CarInfoServiceImpl implements ICarInfoService { return carInfoList; } + + + @Override + public DeviceVo currentPush(String carNo) { + DeviceVo vo = null; + String url = "http://42.192.165.208:8000/device/currentPush"; + String res = HttpClientUtils.doGet(url); + + JSONObject json = JSON.parseObject(res); + + JSONArray deviceInfoList = json.getJSONArray("currentPush"); + for (Object o : deviceInfoList) { + JSONObject deviceInfo = (JSONObject) o; + if (carNo.equals(deviceInfo.getString("currentPushno"))) { + vo = BeanUtil.copy(deviceInfo, DeviceVo.class); + } + } + return vo; + } + } diff --git a/src/main/java/org/springblade/modules/business/service/impl/PublishService.java b/src/main/java/org/springblade/modules/business/service/impl/PublishService.java index d0b11a0..518a74e 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/PublishService.java +++ b/src/main/java/org/springblade/modules/business/service/impl/PublishService.java @@ -1,5 +1,6 @@ package org.springblade.modules.business.service.impl; +import com.alibaba.fastjson.JSON; import org.springblade.core.tool.utils.Func; import org.springblade.modules.websocket.service.WebsocketService; import org.springblade.modules.websocket.vo.WebSocketMessage; @@ -7,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.concurrent.TimeUnit; /** @@ -49,7 +51,11 @@ public class PublishService { WebSocketMessage message = new WebSocketMessage(); message.setTitle(CURRENT_FACILITY_STAT); message.setCode(200); - message.setContent("设备信息:"+currentFacility); + HashMap map = new HashMap<>(); + map.put("msgType", CURRENT_FACILITY_STAT); + map.put("data", currentFacility); + String messageJson = JSON.toJSONString(map); + message.setContent(messageJson); websocketService.broadcast(message); // 3. 查看websocket的返回结果 String result = (String) redisTemplate.opsForValue().get(CURRENT_FACILITY_RETURN); diff --git a/src/main/java/org/springblade/modules/business/vo/DeviceVo.java b/src/main/java/org/springblade/modules/business/vo/DeviceVo.java new file mode 100644 index 0000000..0cb9ce3 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/DeviceVo.java @@ -0,0 +1,13 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; + +/** + * @Author: Chents + * @Create: 2023-05-11 + */ +@Data +public class DeviceVo { + private String pushStatus; + private String deviceId; +} diff --git a/src/main/java/org/springblade/modules/job/CarInfoTask.java b/src/main/java/org/springblade/modules/job/CarInfoTask.java index 7de8044..a8ea20a 100644 --- a/src/main/java/org/springblade/modules/job/CarInfoTask.java +++ b/src/main/java/org/springblade/modules/job/CarInfoTask.java @@ -1,18 +1,21 @@ package org.springblade.modules.job; +import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.service.ICarInfoService; import org.springblade.modules.business.service.IStationHintService; import org.springblade.modules.business.vo.CarInfoVO; -import org.springblade.modules.business.vo.CurrentCarInfoVo; import org.springblade.modules.websocket.service.WebsocketService; import org.springblade.modules.websocket.vo.WebSocketMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestParam; -import java.util.List; +import java.util.HashMap; import java.util.Map; /** @@ -23,6 +26,10 @@ import java.util.Map; @Slf4j public class CarInfoTask { + private static final String WEB = "web"; + private static final String CURRENT_CAR_INFO = "current_car_info"; + private static final String PUSH_STATUS = "push_status"; + @Autowired private ICarInfoService carInfoService; @@ -36,28 +43,79 @@ public class CarInfoTask { private IStationHintService stationHintService; //@Scheduled(cron = "0/1 * * * * ?") - public void setCarInfo(Map resultMap) { + public void setCarInfo(Map resultMap) { redisTemplate.opsForValue().set("current_car_info", resultMap); System.out.println("======存入实时车辆信息到redis成功========="); } @Scheduled(cron = "0/1 * * * * ?") + public void setCarInfo() { +// redisTemplate.opsForValue().set("car-current-number", device); + } + + @Scheduled(cron = "0/10 * * * * ?") public void parseCarInfo() { //从redis获取数据 - Map carInfoMap = (Map ) redisTemplate.opsForValue().get("current_car_info"); + Map carInfoMap = (Map) redisTemplate.opsForValue().get("current_car_info"); if (carInfoMap.isEmpty()) { log.info("======未从redis获取当前车辆实时数据======="); return; } // 解析车辆信息 + HashMap map = new HashMap<>(); + map.put("msgType", CURRENT_CAR_INFO); + map.put("data", carInfoMap); + String messageJson = JSON.toJSONString(map); + WebSocketMessage message = new WebSocketMessage(); - message.setTitle("current_car_info"); + message.setTitle(WEB); message.setCode(200); - message.setContent("车辆信息:" + carInfoMap.toString()); - log.info("解析车辆信息:{}", carInfoMap.toString()); + message.setContent(messageJson); + //log.info("解析车辆信息:{}", carInfoMap.toString()); // 推送消息给web页面 websocketService.broadcast(message); log.info("推送车辆信息:{}", carInfoMap.toString()); } + @Scheduled(cron = "0/1 * * * * ?") + public void parsePushStatus() { + //从redis获取数据 + String carNo = (String) redisTemplate.opsForValue().get("car-current-number"); + String pushStatus = (String) redisTemplate.opsForValue().get("set-current-Facility-stat" + carNo); + Map resultData = new HashMap<>(); + resultData.put("carNo", carNo); + resultData.put("pushStatus", pushStatus); + + // 解析车辆信息 + HashMap map = new HashMap<>(); + map.put("msgType", PUSH_STATUS); + map.put("data", resultData); + String messageJson = JSON.toJSONString(map); + + WebSocketMessage message = new WebSocketMessage(); + message.setTitle(WEB); + message.setCode(200); + message.setContent(messageJson); + //log.info("解析车辆信息:{}", carInfoMap.toString()); + // 推送消息给web页面 + websocketService.broadcast(message); + log.info("推送车辆信息:{}", map.toString()); + } + + @Scheduled(cron = "0/1 * * * * ?") + public void getCarSpeed(String carNo) { + CarInfoVO info = carInfoService.getCarInfo(carNo); + if (Func.isEmpty(info)) { + throw new RuntimeException("未获取到车辆信息, 请检查车是否已掉线"); + } + String speedJson = JSON.toJSONString(info.getSpeed()); + WebSocketMessage message = new WebSocketMessage(); + message.setTitle(WEB); + message.setCode(200); + message.setContent(speedJson); + websocketService.broadcast(message); + log.info("车辆实时车速:{}", message.getContent()); + } + + } diff --git a/src/main/java/org/springblade/modules/websocket/vo/WebSocketMessage.java b/src/main/java/org/springblade/modules/websocket/vo/WebSocketMessage.java index 83ae4e8..fc11b6b 100644 --- a/src/main/java/org/springblade/modules/websocket/vo/WebSocketMessage.java +++ b/src/main/java/org/springblade/modules/websocket/vo/WebSocketMessage.java @@ -1,6 +1,11 @@ package org.springblade.modules.websocket.vo; import lombok.Data; +import org.apache.poi.ss.formula.functions.T; +import org.json.JSONObject; + +import java.util.List; +import java.util.Map; /** * @Author: Chents @@ -16,5 +21,5 @@ public class WebSocketMessage { private int code; //返回对象 - private Object content; + private String content; } diff --git a/src/main/java/org/springblade/upload/service/IProBusLineImgService.java b/src/main/java/org/springblade/upload/service/IProBusLineImgService.java index ecf3357..8eae847 100644 --- a/src/main/java/org/springblade/upload/service/IProBusLineImgService.java +++ b/src/main/java/org/springblade/upload/service/IProBusLineImgService.java @@ -23,6 +23,6 @@ public interface IProBusLineImgService { R queryList(Long id); - List getImgByid(Long id); + List getImgByid(Long busLineId); } diff --git a/src/main/java/org/springblade/upload/service/impl/ProBusLineImgImpl.java b/src/main/java/org/springblade/upload/service/impl/ProBusLineImgImpl.java index 16591f2..c4ca06f 100644 --- a/src/main/java/org/springblade/upload/service/impl/ProBusLineImgImpl.java +++ b/src/main/java/org/springblade/upload/service/impl/ProBusLineImgImpl.java @@ -70,17 +70,17 @@ public class ProBusLineImgImpl implements IProBusLineImgService { @Override - public List getImgByid(Long id) { + public List getImgByid(Long busLineId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("img_url","img_type"); - queryWrapper.eq("bus_line_id",id); + queryWrapper.eq("bus_line_id",busLineId); + queryWrapper.isNotNull("img_url"); List pocBusLineImgs = pocBusLineImgMapper.selectList(queryWrapper); ArrayList imgList = new ArrayList<>(); for(PocBusLineImg pocBusLineImg : pocBusLineImgs){ imgVo img = new imgVo(); img.setImgUrl(pocBusLineImg.getImgUrl()); img.setImgType(pocBusLineImg.getImgType()); - img.setBusLineId(pocBusLineImg.getBusLineId()); imgList.add(img); } return imgList;