From 199a6bb99b466900bb7a768bf0d71080e895d321 Mon Sep 17 00:00:00 2001 From: chents <78666437@qq.com> Date: Wed, 10 May 2023 09:27:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 31 ++++ pom.xml | 11 ++ .../java/org/springblade/Application.java | 4 +- .../controller/CarAdminController.java | 128 ++++++++++++++++ .../controller/CarLiveChannelController.java | 70 +++++++++ .../controller/CommonApiController.java | 28 +++- .../controller/StationHintController.java | 105 ++++++++++++++ .../modules/business/entity/BusLine.java | 2 +- .../modules/business/entity/CarAdmin.java | 44 ++++++ .../business/entity/CarLiveChannel.java | 45 ++++++ .../business/mapper/BusLineMapper.java | 2 +- .../business/mapper/CarAdminMapper.java | 14 ++ .../business/mapper/CarAdminMapper.xml | 14 ++ .../business/mapper/CarLiveChannelMapper.java | 14 ++ .../business/mapper/CarLiveChannelMapper.xml | 13 ++ .../business/service/ICarAdminService.java | 26 ++++ .../business/service/ICarInfoService.java | 5 + .../service/ICarLiveChannelService.java | 16 ++ .../business/service/IStationHintService.java | 32 ++++ .../service/impl/CarAdminServiceImpl.java | 125 ++++++++++++++++ .../service/impl/CarInfoServiceImpl.java | 22 ++- .../service/impl/CarLiveChannelImpl.java | 28 ++++ .../service/impl/StationHintServiceImpl.java | 137 ++++++++++++++++++ .../modules/business/vo/BusLineUpdateVo.java | 26 ++++ .../modules/business/vo/BusLineVo.java | 20 +++ .../modules/business/vo/CarAdminVo.java | 29 ++++ .../modules/business/vo/CarLiveChannelVo.java | 24 +++ .../modules/business/vo/StationHintVo.java | 27 ++++ .../modules/business/vo/StationVo.java | 16 ++ .../modules/business/vo/imgVo.java | 21 +++ .../springblade/modules/job/CarInfoTask.java | 58 ++++++++ .../websocket/config/WebsocketConfig.java | 27 ++++ .../controller/WebSocketController.java | 35 +++++ .../websocket/handler/WebsocketHandler.java | 63 ++++++++ .../websocket/service/WebsocketService.java | 76 ++++++++++ src/main/resources/application-dev.yml | 2 +- src/main/resources/application.yml | 9 +- src/main/resources/log/logback-dev.xml | 6 +- 38 files changed, 1343 insertions(+), 12 deletions(-) create mode 100644 .gitignore create mode 100644 src/main/java/org/springblade/modules/business/controller/CarAdminController.java create mode 100644 src/main/java/org/springblade/modules/business/controller/CarLiveChannelController.java create mode 100644 src/main/java/org/springblade/modules/business/controller/StationHintController.java create mode 100644 src/main/java/org/springblade/modules/business/entity/CarAdmin.java create mode 100644 src/main/java/org/springblade/modules/business/entity/CarLiveChannel.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.xml create mode 100644 src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.java create mode 100644 src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.xml create mode 100644 src/main/java/org/springblade/modules/business/service/ICarAdminService.java create mode 100644 src/main/java/org/springblade/modules/business/service/ICarLiveChannelService.java create mode 100644 src/main/java/org/springblade/modules/business/service/IStationHintService.java create mode 100644 src/main/java/org/springblade/modules/business/service/impl/CarAdminServiceImpl.java create mode 100644 src/main/java/org/springblade/modules/business/service/impl/CarLiveChannelImpl.java create mode 100644 src/main/java/org/springblade/modules/business/service/impl/StationHintServiceImpl.java create mode 100644 src/main/java/org/springblade/modules/business/vo/BusLineUpdateVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/BusLineVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/CarAdminVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/CarLiveChannelVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/StationHintVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/StationVo.java create mode 100644 src/main/java/org/springblade/modules/business/vo/imgVo.java create mode 100644 src/main/java/org/springblade/modules/job/CarInfoTask.java create mode 100644 src/main/java/org/springblade/modules/websocket/config/WebsocketConfig.java create mode 100644 src/main/java/org/springblade/modules/websocket/controller/WebSocketController.java create mode 100644 src/main/java/org/springblade/modules/websocket/handler/WebsocketHandler.java create mode 100644 src/main/java/org/springblade/modules/websocket/service/WebsocketService.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff6b158 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# maven # +target + +logs + +# windows # +Thumbs.db + +# Mac # +.DS_Store + +# eclipse # +.settings +.project +.classpath +.log +*.class + +# idea # +.idea +*.iml + +# Package Files # +*.jar +*.war +*.ear +/target + +/applogs +.editorconfig + diff --git a/pom.xml b/pom.xml index 1202d48..f052c83 100644 --- a/pom.xml +++ b/pom.xml @@ -196,6 +196,17 @@ quartz 2.3.2 + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-tomcat + + + diff --git a/src/main/java/org/springblade/Application.java b/src/main/java/org/springblade/Application.java index 8feed05..6ecace2 100644 --- a/src/main/java/org/springblade/Application.java +++ b/src/main/java/org/springblade/Application.java @@ -16,6 +16,7 @@ */ package org.springblade; +import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.CommonConstant; import org.springblade.core.launch.BladeApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -28,11 +29,12 @@ import org.springframework.scheduling.annotation.EnableScheduling; */ @EnableScheduling @SpringBootApplication +@Slf4j public class Application { public static void main(String[] args) { BladeApplication.run(CommonConstant.APPLICATION_NAME, Application.class, args); + log.info("***启动成功***"); } - } diff --git a/src/main/java/org/springblade/modules/business/controller/CarAdminController.java b/src/main/java/org/springblade/modules/business/controller/CarAdminController.java new file mode 100644 index 0000000..891b56d --- /dev/null +++ b/src/main/java/org/springblade/modules/business/controller/CarAdminController.java @@ -0,0 +1,128 @@ +package org.springblade.modules.business.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springblade.common.constant.CommonConstant; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tenant.annotation.TenantDS; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.CarAdmin; +import org.springblade.modules.business.entity.CarLiveChannel; +import org.springblade.modules.business.service.ICarAdminService; +import org.springblade.modules.business.service.ICarLiveChannelService; +import org.springblade.modules.business.vo.CarAdminVo; +import org.springblade.modules.business.vo.CarLiveChannelVo; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; + +/** + * 控制器 + * + * @author chents + */ +@TenantDS +@Slf4j +@RestController +@RequestMapping(CommonConstant.APPLICATION_BUSINESS_NAME + "/car-admin") +@RequiredArgsConstructor +@Api(value = "车辆管理接口", tags = "车辆管理接口") +public class CarAdminController extends BladeController { + + private final ICarAdminService carService; + + private final ICarLiveChannelService carLiveChannelService; + + /** + * 根据车牌号查询列表--停用 + * + * @return + */ + @ApiOperationSupport(order = 1) + @ApiOperation(value = "根据车牌号查询列表", notes = "传入车牌号") + @GetMapping("/get-list-by-name") + public R getListByName(String name) { + return carService.getListByName(name); + } + + /** + * 新增或修改 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "新增或修改", notes = "传入carAdmin") + @Transactional(rollbackFor = Exception.class) + public R submit(@Valid @RequestBody CarAdminVo carAdminVo) { + CarAdmin carAdmin = new CarAdmin(); + BeanUtils.copyProperties(carAdminVo, carAdmin); + boolean success = carService.saveOrUpdate(carAdmin); + if (success) { + //保存或更新直播通道信息 + List carLiveChannelVoList = carAdminVo.getCarLiveChannelVoList(); + if (CollectionUtils.isNotEmpty(carLiveChannelVoList)) { + List carLiveChannelList = new ArrayList<>(); + for (CarLiveChannelVo carLiveChannelVo : carLiveChannelVoList) { + CarLiveChannel carLiveChannel = new CarLiveChannel(); + BeanUtils.copyProperties(carLiveChannelVo, carLiveChannel); + carLiveChannel.setCarId(carAdmin.getId()); + carLiveChannel.setCode(carLiveChannelVo.getCode()); + carLiveChannel.setStatus(carLiveChannelVo.getStatus()); + carLiveChannel.setChannelName(carLiveChannelVo.getChannelName()); + carLiveChannelList.add(carLiveChannel); + } + carLiveChannelService.saveOrUpdateBatch(carLiveChannelList); + } + //更新车辆信息下的直播通道数量 + carAdmin.setAmount((long) carLiveChannelVoList.size()); + carService.updateById(carAdmin); + return R.success("true"); + } + return R.fail("保存或更新失败"); + } + + + + + + + + + /** + * 删除 + * + * @return + */ + @ApiOperationSupport(order = 3) + @ApiOperation(value = "删除", notes = "传入id") + @PostMapping("/delete") + public R delete(@RequestParam String ids) { + return R.status(carService.delete(ids)); + } + + + /** + * 分页 车辆信息表 + */ + @GetMapping("/list") + @ApiOperationSupport(order = 4) + @ApiOperation(value = "分页", notes = "传入carAdmin和query") + public R> list(CarAdmin carAdmin, Query query) { + IPage pages = carService.selectCarAdminPage(Condition.getPage(query), carAdmin); + return R.data(pages); + } + + +} + diff --git a/src/main/java/org/springblade/modules/business/controller/CarLiveChannelController.java b/src/main/java/org/springblade/modules/business/controller/CarLiveChannelController.java new file mode 100644 index 0000000..85c8376 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/controller/CarLiveChannelController.java @@ -0,0 +1,70 @@ +package org.springblade.modules.business.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.CommonConstant; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.tenant.annotation.TenantDS; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.CarLiveChannel; +import org.springblade.modules.business.service.ICarLiveChannelService; +import org.springblade.modules.business.vo.CarLiveChannelVo; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 控制器 + * + * @author chents + */ +@TenantDS +@Slf4j +@RestController +@RequestMapping(CommonConstant.APPLICATION_BUSINESS_NAME + "/car-live-channel") +@RequiredArgsConstructor +@Api(value = "直播通道接口", tags = "车辆管理接口") +public class CarLiveChannelController extends BladeController { + + private final ICarLiveChannelService carLiveChannelService; + + + /** + * 根据id查询 + * + * @return + */ + @ApiOperationSupport(order = 1) + @ApiOperation(value = "根据id查询", notes = "传入id") + @GetMapping("get-channel-by-id/{id}") + public R getChannelById(@PathVariable(value = "id") Long id) { + return carLiveChannelService.getChannelById(id); + } + + /** + * 修改直播通道 + */ + @PutMapping("/updateLiveChannel") + @ApiOperationSupport(order = 3) + @ApiOperation(value = "修改直播通道", notes = "传入carLiveChannel") + @Transactional(rollbackFor = Exception.class) + public R updateLiveChannel(@Valid @RequestBody CarLiveChannelVo carLiveChannelVo) { + CarLiveChannel carLiveChannel = carLiveChannelService.getById(carLiveChannelVo.getId()); + if (carLiveChannel == null) { + return R.fail("该直播通道不存在"); + } + BeanUtils.copyProperties(carLiveChannelVo, carLiveChannel); + boolean success = carLiveChannelService.updateById(carLiveChannel); + if (success) { + return R.success("true"); + } + return R.fail("更新失败"); + } + +} + 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 64d70a4..a1032f2 100644 --- a/src/main/java/org/springblade/modules/business/controller/CommonApiController.java +++ b/src/main/java/org/springblade/modules/business/controller/CommonApiController.java @@ -1,5 +1,6 @@ package org.springblade.modules.business.controller; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,9 +19,12 @@ import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; import org.springblade.modules.business.entity.BusLine; import org.springblade.modules.business.service.ICarInfoService; +import org.springblade.modules.business.vo.BusLineUpdateVo; import org.springblade.modules.business.vo.CarInfoVO; import org.springblade.modules.business.vo.SiteInfoVO; +import org.springblade.upload.entity.PocBusLineImg; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayOutputStream; @@ -71,7 +75,6 @@ public class CommonApiController extends BladeController { /** * 获取车牌号 - * * @return */ @GetMapping("get-car-no") @@ -134,7 +137,6 @@ public class CommonApiController extends BladeController { return R.fail("未获取到车辆信息, 请检查车是否已掉线"); } List siteList = SiteListCache.getSiteList(info.getLinename(), info.getUpordown()); - int nextSiteIdx = Integer.parseInt(info.getInorder()); if (BusinessConstant.CAR_STAT_IN.toString().equals(info.getNowstate())) { nextSiteIdx -= 1; @@ -282,4 +284,26 @@ public class CommonApiController extends BladeController { return R.data(resultMap); } + + /** + * 获取所有实时的车辆信息 + * + * @return + */ + @ApiOperation(value = "获取所有实时的车辆信息", notes = "传入id和busLine") + @GetMapping("/get-all-car-info") + public R getAllCarInfo() { + return R.data(carInfoService.getAllCarInfo()); + } + + /** + * 获取当前实时的车辆信息 + * + * @return + */ + @ApiOperation(value = "获取当前实时的车辆信息", notes = "传入id和busLine") + @GetMapping("/get-current-car-info") + public R getCurrentCarInfo(@RequestParam String carNo) { + return R.data(carInfoService.getCarInfo(carNo)); + } } diff --git a/src/main/java/org/springblade/modules/business/controller/StationHintController.java b/src/main/java/org/springblade/modules/business/controller/StationHintController.java new file mode 100644 index 0000000..df9752a --- /dev/null +++ b/src/main/java/org/springblade/modules/business/controller/StationHintController.java @@ -0,0 +1,105 @@ +package org.springblade.modules.business.controller; + +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.CommonConstant; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.tenant.annotation.TenantDS; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.modules.business.service.IStationHintService; +import org.springblade.modules.business.vo.BusLineUpdateVo; +import org.springblade.modules.business.vo.StationHintVo; +import org.springblade.upload.entity.PocBusLineImg; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 控制器 + * + * @author chents + */ +@TenantDS +@Slf4j +@RestController +@RequestMapping(CommonConstant.APPLICATION_BUSINESS_NAME + "/stationHint") +@RequiredArgsConstructor +@Api(value = "站点提示信息管理接口", tags = "站点提示信息管理接口") +public class StationHintController extends BladeController { + + private final IStationHintService stationHintService; + + + /** + * 查询站点列表 + * + * @return + */ + @ApiOperationSupport(order = 1) + @ApiOperation(value = "查询站点列表", notes = "传入linename和updown") + @GetMapping("query-station-hint") + public R QueryStationHint(String linename,String updown) { + return stationHintService.QueryStationHint(linename,updown); + } + + + /** + * 查询站点信息展示列表 + * + * @return + */ + @ApiOperationSupport(order = 2) + @ApiOperation(value = "查询站点信息展示列表", notes = "传入linename和updown") + @GetMapping("query-station-message") + public R> QueryStationMessage(String linename, String updown) { + return stationHintService.QueryStationMessage(linename,updown); + } + + + + /** + * 删除--停用 + * + * @return + */ + @ApiOperationSupport(order = 3) + @ApiOperation(value = "删除--停用", notes = "传入id") + @PostMapping("/delete") + public R delete(@RequestParam String ids) { + stationHintService.delete(ids); + return R.status(true); + } + + /** + * 根据id 查询 + * + * @param id + * @return + */ + @ApiOperationSupport(order = 4) + @ApiOperation(value = "根据id查询", notes = "传入id") + @GetMapping(value = "/getById/{id}") + public R getById(@PathVariable(value = "id") Long id) { + BusLine busLine = stationHintService.getById(id); + return R.data(busLine); + } + + /** + * 编辑 + * + * @return + */ + @ApiOperationSupport(order = 5) + @ApiOperation(value = "编辑", notes = "传入busLineUpdateVo") + @PostMapping("/update") + public R updateStationHint(@RequestBody @Validated BusLineUpdateVo busLineUpdateVo) { + stationHintService.updateStationHint(busLineUpdateVo); + return R.status(true); + } +} + diff --git a/src/main/java/org/springblade/modules/business/entity/BusLine.java b/src/main/java/org/springblade/modules/business/entity/BusLine.java index 5ae36e8..18283ad 100644 --- a/src/main/java/org/springblade/modules/business/entity/BusLine.java +++ b/src/main/java/org/springblade/modules/business/entity/BusLine.java @@ -13,7 +13,7 @@ import org.springblade.core.mp.base.BaseEntity; import java.util.Date; /** - * 文章表 + * 公交线路表 * * @author Chill */ diff --git a/src/main/java/org/springblade/modules/business/entity/CarAdmin.java b/src/main/java/org/springblade/modules/business/entity/CarAdmin.java new file mode 100644 index 0000000..f4d1538 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/entity/CarAdmin.java @@ -0,0 +1,44 @@ +package org.springblade.modules.business.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +/** + * 车辆信息表 + * + * @author Chill + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("car_admin") +public class CarAdmin extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @JsonSerialize( + using = ToStringSerializer.class + ) + @ApiModelProperty("主键id") + @TableId( + value = "id", + type = IdType.ASSIGN_ID + ) + private Long id; + + //车载机id + private Long receiverId; + //公交车车牌 + private String name; + //直播状态:1在线 2车外摄像头 3车顶摄像头 + private Long liveStatus; + //直播数量 + private Long amount; + +} diff --git a/src/main/java/org/springblade/modules/business/entity/CarLiveChannel.java b/src/main/java/org/springblade/modules/business/entity/CarLiveChannel.java new file mode 100644 index 0000000..cd0e919 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/entity/CarLiveChannel.java @@ -0,0 +1,45 @@ +package org.springblade.modules.business.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +/** + * 文章表 + * + * @author Chill + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("car_live_channel") +public class CarLiveChannel extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @JsonSerialize( + using = ToStringSerializer.class + ) + @ApiModelProperty("主键id") + @TableId( + value = "id", + type = IdType.ASSIGN_ID + ) + private Long id; + + private Integer code; + + private Long carId; + + //直播通道名称 + private String channelName; + + //直播通道状态:0默认 1不默认 + private Integer status; + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/BusLineMapper.java b/src/main/java/org/springblade/modules/business/mapper/BusLineMapper.java index 09d66b0..c49a176 100644 --- a/src/main/java/org/springblade/modules/business/mapper/BusLineMapper.java +++ b/src/main/java/org/springblade/modules/business/mapper/BusLineMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.springblade.modules.business.entity.Article; import org.springblade.modules.business.entity.BusLine; +import org.springblade.upload.entity.PocBusLineImg; import java.util.List; @@ -15,5 +16,4 @@ import java.util.List; */ public interface BusLineMapper extends BaseMapper { - } diff --git a/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.java b/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.java new file mode 100644 index 0000000..8e9c58b --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.java @@ -0,0 +1,14 @@ +package org.springblade.modules.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.modules.business.entity.CarAdmin; + +/** + * Mapper 接口 + * + * @author Chill + */ +public interface CarAdminMapper extends BaseMapper { + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.xml b/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.xml new file mode 100644 index 0000000..248ce09 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/CarAdminMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.java b/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.java new file mode 100644 index 0000000..d38f347 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.java @@ -0,0 +1,14 @@ +package org.springblade.modules.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.modules.business.entity.CarAdmin; +import org.springblade.modules.business.entity.CarLiveChannel; + +/** + * Mapper 接口 + * + * @author Chill + */ +public interface CarLiveChannelMapper extends BaseMapper { + +} diff --git a/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.xml b/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.xml new file mode 100644 index 0000000..6b8a8eb --- /dev/null +++ b/src/main/java/org/springblade/modules/business/mapper/CarLiveChannelMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/java/org/springblade/modules/business/service/ICarAdminService.java b/src/main/java/org/springblade/modules/business/service/ICarAdminService.java new file mode 100644 index 0000000..1194ba0 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/ICarAdminService.java @@ -0,0 +1,26 @@ +package org.springblade.modules.business.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.modules.business.entity.CarAdmin; +import org.springblade.modules.business.vo.CarAdminVo; +import org.springblade.modules.business.vo.StationHintVo; + +import java.util.List; + +/** + * 服务类 + * + * @author chents + */ +public interface ICarAdminService extends BaseService { + + R getListByName(String name); + + boolean delete(String ids); + + IPage selectCarAdminPage(IPage page, CarAdmin carAdmin); + +} 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 c6d59e8..bfda87d 100644 --- a/src/main/java/org/springblade/modules/business/service/ICarInfoService.java +++ b/src/main/java/org/springblade/modules/business/service/ICarInfoService.java @@ -2,6 +2,8 @@ package org.springblade.modules.business.service; import org.springblade.modules.business.vo.CarInfoVO; +import java.util.List; + /** * 服务类 * @@ -16,4 +18,7 @@ public interface ICarInfoService { * @return */ CarInfoVO getCarInfo(String carNo); + + List getAllCarInfo(); + } diff --git a/src/main/java/org/springblade/modules/business/service/ICarLiveChannelService.java b/src/main/java/org/springblade/modules/business/service/ICarLiveChannelService.java new file mode 100644 index 0000000..a0b75e6 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/ICarLiveChannelService.java @@ -0,0 +1,16 @@ +package org.springblade.modules.business.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.CarAdmin; +import org.springblade.modules.business.entity.CarLiveChannel; + +/** + * 服务类 + * + * @author chents + */ +public interface ICarLiveChannelService extends BaseService { + + R getChannelById(Long id); +} diff --git a/src/main/java/org/springblade/modules/business/service/IStationHintService.java b/src/main/java/org/springblade/modules/business/service/IStationHintService.java new file mode 100644 index 0000000..af3e204 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/IStationHintService.java @@ -0,0 +1,32 @@ +package org.springblade.modules.business.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.modules.business.vo.BusLineUpdateVo; +import org.springblade.modules.business.vo.StationHintVo; +import org.springblade.upload.entity.PocBusLineImg; + +import java.util.List; + +/** + * 服务类 + * + * @author chents + */ +public interface IStationHintService extends BaseService { + + /** + *查询列表 + * @Author chents + * @return + **/ + R QueryStationHint(String linename,String updown); + + + R> QueryStationMessage(String linename, String updown); + + void updateStationHint(BusLineUpdateVo busLineUpdateVo); + + boolean delete(String ids); +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/CarAdminServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/CarAdminServiceImpl.java new file mode 100644 index 0000000..307a71e --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/CarAdminServiceImpl.java @@ -0,0 +1,125 @@ +package org.springblade.modules.business.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.modules.business.entity.CarAdmin; +import org.springblade.modules.business.entity.CarLiveChannel; +import org.springblade.modules.business.mapper.CarAdminMapper; +import org.springblade.modules.business.mapper.CarLiveChannelMapper; +import org.springblade.modules.business.service.ICarAdminService; +import org.springblade.modules.business.service.ICarLiveChannelService; +import org.springblade.modules.business.vo.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 服务实现类 + * + * @author chents + */ +@Service +public class CarAdminServiceImpl extends BaseServiceImpl implements ICarAdminService { + + @Resource + CarAdminMapper carAdminMapper; + + @Resource + CarLiveChannelMapper carLiveChannelMapper; + + @Resource + ICarLiveChannelService carLiveChannelService; + + @Override + public R getListByName(String name) { + QueryWrapper carAdminQueryWrapper = new QueryWrapper<>(); + carAdminQueryWrapper.like("name","%"+name+"%"); + List carAdmins = carAdminMapper.selectList(carAdminQueryWrapper); + if (CollectionUtils.isEmpty(carAdmins)){ + throw new ServiceException(StringUtil.format("车辆信息为空")); + } + List carAdminArr = carAdmins.stream().map(x -> { + CarAdminVo carAdminVo = new CarAdminVo(); + carAdminVo.setId(x.getId()); + carAdminVo.setName(x.getName()); + carAdminVo.setReceiverId(x.getReceiverId()); + carAdminVo.setAmount(x.getAmount()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("channel_type"); + queryWrapper.eq("car_id",x.getId()); + List carLiveChannelList = carLiveChannelMapper.selectList(queryWrapper); + ArrayList carLiveChannelVoList = new ArrayList<>(); + for(CarLiveChannel carLiveChannel : carLiveChannelList){ + CarLiveChannelVo carLiveChannelVo = new CarLiveChannelVo(); + carLiveChannelVo.setId(carLiveChannel.getId()); + carLiveChannelVo.setChannelName(carLiveChannel.getChannelName()); + carLiveChannelVo.setStatus(carLiveChannel.getStatus()); + carLiveChannelVoList.add(carLiveChannelVo); + } + carAdminVo.setCarLiveChannelVoList(carLiveChannelVoList); + return carAdminVo; + }).collect(Collectors.toList()); + return R.data(carAdminArr); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean delete(String ids) { + return deleteLogic(Func.toLongList(ids)); + } + + /** + * 分页 车辆信息表 + */ + @Override + public IPage selectCarAdminPage(IPage page, CarAdmin carAdmin) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isNotBlank(carAdmin.getName())) { + queryWrapper.like("name", carAdmin.getName()); + } + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.orderByDesc("create_time"); + IPage carAdminPage = new Page<>(page.getCurrent(), page.getSize()); + carAdminMapper.selectPage(carAdminPage, queryWrapper1); + List carAdminList = carAdminPage.getRecords(); + List carAdminVoList = new ArrayList<>(); + for (CarAdmin admin : carAdminList) { + CarAdminVo carAdminVo = new CarAdminVo(); + BeanUtils.copyProperties(admin, carAdminVo); + QueryWrapper channelQueryWrapper = new QueryWrapper<>(); + channelQueryWrapper.eq("car_id", admin.getId()); + List carLiveChannelList = carLiveChannelMapper.selectList(channelQueryWrapper); + List carLiveChannelVoList = new ArrayList<>(); + for (CarLiveChannel carLiveChannel : carLiveChannelList) { + CarLiveChannelVo carLiveChannelVo = new CarLiveChannelVo(); + BeanUtils.copyProperties(carLiveChannel, carLiveChannelVo); + carLiveChannelVo.setChannelName(carLiveChannel.getChannelName()); + carLiveChannelVoList.add(carLiveChannelVo); + } + carAdminVo.setCarLiveChannelVoList(carLiveChannelVoList); + carAdminVoList.add(carAdminVo); + } + IPage carAdminVoPage = new Page<>(); + carAdminVoPage.setRecords(carAdminVoList); + carAdminVoPage.setTotal(carAdminPage.getTotal()); + carAdminVoPage.setCurrent(carAdminPage.getCurrent()); + carAdminVoPage.setSize(carAdminPage.getSize()); + return carAdminVoPage; + } + +} 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 9e17a05..d746d39 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 @@ -10,6 +10,9 @@ import org.springblade.modules.business.service.ICarInfoService; import org.springblade.modules.business.vo.CarInfoVO; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + /** * 服务实现类 * @@ -33,7 +36,24 @@ public class CarInfoServiceImpl implements ICarInfoService { vo = BeanUtil.copy(carInfo, CarInfoVO.class); } } - return vo; } + + @Override + public List getAllCarInfo() { + List carInfoList = new ArrayList<>(); + String url = "http://223.99.174.234:9211/BusInfoServer/bus_getstateinfo_1014?userkey=yhlhhh20230323"; + String res = HttpClientUtils.doGet(url); + + JSONObject json = JSON.parseObject(res); + + JSONArray busList = json.getJSONArray("bus"); + for (Object o : busList) { + JSONObject carInfo = (JSONObject) o; + CarInfoVO vo = BeanUtil.copy(carInfo, CarInfoVO.class); + carInfoList.add(vo); + } + return carInfoList; + } + } diff --git a/src/main/java/org/springblade/modules/business/service/impl/CarLiveChannelImpl.java b/src/main/java/org/springblade/modules/business/service/impl/CarLiveChannelImpl.java new file mode 100644 index 0000000..06362cc --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/CarLiveChannelImpl.java @@ -0,0 +1,28 @@ +package org.springblade.modules.business.service.impl; + +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.api.R; +import org.springblade.modules.business.entity.CarLiveChannel; +import org.springblade.modules.business.mapper.CarLiveChannelMapper; +import org.springblade.modules.business.service.ICarLiveChannelService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 服务实现类 + * + * @author chents + */ +@Service +public class CarLiveChannelImpl extends BaseServiceImpl implements ICarLiveChannelService { + + @Resource + CarLiveChannelMapper carLiveChannelMapper; + + @Override + public R getChannelById(Long id) { + CarLiveChannel carLiveChannel = carLiveChannelMapper.selectById(id); + return R.data(carLiveChannel); + } +} diff --git a/src/main/java/org/springblade/modules/business/service/impl/StationHintServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/StationHintServiceImpl.java new file mode 100644 index 0000000..817cbc1 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/service/impl/StationHintServiceImpl.java @@ -0,0 +1,137 @@ +package org.springblade.modules.business.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.modules.business.mapper.BusLineMapper; +import org.springblade.modules.business.service.IStationHintService; +import org.springblade.modules.business.vo.BusLineUpdateVo; +import org.springblade.modules.business.vo.BusLineVo; +import org.springblade.modules.business.vo.StationHintVo; +import org.springblade.modules.business.vo.imgVo; +import org.springblade.upload.entity.PocBusLineImg; +import org.springblade.upload.mapper.ProBusLineImgMapper; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 服务实现类 + * + * @author chents + */ +@Service +public class StationHintServiceImpl extends BaseServiceImpl implements IStationHintService { + + @Resource + BusLineMapper busLineMapper; + + @Resource + RedisTemplate redisTemplate; + + @Resource + ProBusLineImgMapper proBusLineImgMapper; + + + @Override + public R QueryStationHint(String linename,String updown) { + QueryWrapper busLineQueryWrapper = new QueryWrapper<>(); + busLineQueryWrapper.eq("linename",linename); + busLineQueryWrapper.eq("updown",updown); + busLineQueryWrapper.isNotNull("sname_key"); + List busLines = busLineMapper.selectList(busLineQueryWrapper); + List busLineVoList = busLines.stream().map(x -> { + BusLineVo busLineVo = new BusLineVo(); + busLineVo.setId(x.getId()); + busLineVo.setLinename(x.getLinename()); + busLineVo.setUpdown(x.getUpdown()); + busLineVo.setSnameKey(x.getSnameKey()); + return busLineVo; + }).collect(Collectors.toList()); + return R.data(busLineVoList); + } + + + @Override + public R> QueryStationMessage(String linename, String updown) { + QueryWrapper busLineQueryWrapper = new QueryWrapper<>(); + busLineQueryWrapper.eq("linename",linename); + busLineQueryWrapper.eq("updown",updown); + busLineQueryWrapper.isNotNull("sname_key"); + List busLines = busLineMapper.selectList(busLineQueryWrapper); + if (CollectionUtils.isEmpty(busLines)){ + throw new ServiceException(StringUtil.format("公交站点信息为空")); + } + List stationArr = busLines.stream().map(x -> { + StationHintVo stationHintVo = new StationHintVo(); + stationHintVo.setId(x.getId()); + stationHintVo.setName(x.getSnameKey()); + stationHintVo.setTips(x.getTips()); + stationHintVo.setRed(x.getActicle()); + stationHintVo.setGreen(x.getActivity()); + stationHintVo.setYellow(x.getScenic()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("img_url","img_type"); + queryWrapper.eq("bus_line_id",x.getId()); + List pocBusLineImgs = proBusLineImgMapper.selectList(queryWrapper); + ArrayList imgList = new ArrayList<>(); + for(PocBusLineImg pocBusLineImg : pocBusLineImgs){ + imgVo img = new imgVo(); + img.setImgUrl(pocBusLineImg.getImgUrl()); + img.setImgType(pocBusLineImg.getImgType()); + imgList.add(img); + } + stationHintVo.setImgList(imgList); + return stationHintVo; + }).collect(Collectors.toList()); + return R.data(stationArr); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStationHint(BusLineUpdateVo busLineUpdateVo) { + BusLine busLine = busLineUpdateVo.getBusLine(); + List imgList = busLineUpdateVo.getImgList(); + // 校验存在 + BusLine existingBusLine = busLineMapper.selectById(busLine.getId()); + if (existingBusLine == null) { + throw new RuntimeException("公交线路 不存在"); + } + // 删除该线路对应的所有图片 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("bus_line_id", busLine.getId()); + proBusLineImgMapper.delete(wrapper); + // 插入新的图片列表 + if (imgList != null && !imgList.isEmpty()) { + for (PocBusLineImg img : imgList) { + img.setBusLineId(busLine.getId()); + proBusLineImgMapper.insert(img); + } + } + busLineMapper.updateById(busLine); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean delete(String ids) { + return deleteLogic(Func.toLongList(ids)); + } + + + private void validateStationHintExists(Long id) { + if (busLineMapper.selectById(id) == null) { + throw new ServiceException(StringUtil.format("当前id为 [{}] 的站点不存在!",id)); + } + } +} diff --git a/src/main/java/org/springblade/modules/business/vo/BusLineUpdateVo.java b/src/main/java/org/springblade/modules/business/vo/BusLineUpdateVo.java new file mode 100644 index 0000000..ab8a1ca --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/BusLineUpdateVo.java @@ -0,0 +1,26 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; +import org.springblade.modules.business.entity.BusLine; +import org.springblade.upload.entity.PocBusLineImg; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * @Author: Chents + * @Create: 2023-05-08 + */ +@Data +public class BusLineUpdateVo implements Serializable { + + private static final long serialVersionUID = 1L; + + //公交线路 + private BusLine busLine; + + //图片列表 + private List imgList; +} diff --git a/src/main/java/org/springblade/modules/business/vo/BusLineVo.java b/src/main/java/org/springblade/modules/business/vo/BusLineVo.java new file mode 100644 index 0000000..a9871cb --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/BusLineVo.java @@ -0,0 +1,20 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: Chents + * @Create: 2023-05-05 + */ +@Data +public class BusLineVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + private String linename; + private String updown; + private String snameKey; +} diff --git a/src/main/java/org/springblade/modules/business/vo/CarAdminVo.java b/src/main/java/org/springblade/modules/business/vo/CarAdminVo.java new file mode 100644 index 0000000..86b5b6d --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/CarAdminVo.java @@ -0,0 +1,29 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: Chents + * @Create: 2023-05-05 + */ +@Data +public class CarAdminVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //车载机id + private Long receiverId; + //公交车车牌 + private String name; + //直播状态:1在线 2车外摄像头 3车顶摄像头 + private Integer liveStatus; + //直播数量 + private Long amount; + + private List carLiveChannelVoList; +} diff --git a/src/main/java/org/springblade/modules/business/vo/CarLiveChannelVo.java b/src/main/java/org/springblade/modules/business/vo/CarLiveChannelVo.java new file mode 100644 index 0000000..c3f4cd6 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/CarLiveChannelVo.java @@ -0,0 +1,24 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: Chents + * @Create: 2023-05-05 + */ +@Data +public class CarLiveChannelVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + //直播通道号 + private Integer code; + //直播通道名称 + private String channelName; + + private Integer status; +} diff --git a/src/main/java/org/springblade/modules/business/vo/StationHintVo.java b/src/main/java/org/springblade/modules/business/vo/StationHintVo.java new file mode 100644 index 0000000..7b06a01 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/StationHintVo.java @@ -0,0 +1,27 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: Chents + * @Create: 2023-05-06 + */ +@Getter +@Setter +public class StationHintVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + private String name;//接口中站名 + private String tips;//提示 + private String red;//情怀,励志 + private String green;//活动 + private String yellow;//活动 + private List imgList; +} diff --git a/src/main/java/org/springblade/modules/business/vo/StationVo.java b/src/main/java/org/springblade/modules/business/vo/StationVo.java new file mode 100644 index 0000000..bbafe61 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/StationVo.java @@ -0,0 +1,16 @@ +package org.springblade.modules.business.vo; + +import java.io.Serializable; + +/** + * @Author: Chents + * @Create: 2023-05-09 + */ +public class StationVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private CarInfoVO carInfoVO; + + private String currentStationCode; +} diff --git a/src/main/java/org/springblade/modules/business/vo/imgVo.java b/src/main/java/org/springblade/modules/business/vo/imgVo.java new file mode 100644 index 0000000..7196c91 --- /dev/null +++ b/src/main/java/org/springblade/modules/business/vo/imgVo.java @@ -0,0 +1,21 @@ +package org.springblade.modules.business.vo; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * @Author: Chents + * @Create: 2023-05-08 + */ +@Getter +@Setter +public class imgVo implements Serializable{ + private static final long serialVersionUID = 1L; + + private String imgUrl; + + private Integer imgType; +} diff --git a/src/main/java/org/springblade/modules/job/CarInfoTask.java b/src/main/java/org/springblade/modules/job/CarInfoTask.java new file mode 100644 index 0000000..60de3fb --- /dev/null +++ b/src/main/java/org/springblade/modules/job/CarInfoTask.java @@ -0,0 +1,58 @@ +package org.springblade.modules.job; + +import lombok.extern.slf4j.Slf4j; +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.websocket.service.WebsocketService; +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 java.util.List; + +/** + * @Author: Chents + * @Create: 2023-05-09 + */ +@Component +@Slf4j +public class CarInfoTask { + + @Autowired + private ICarInfoService carInfoService; + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private WebsocketService websocketService; + + @Autowired + private IStationHintService stationHintService; + + //@Scheduled(cron = "0/1 * * * * ?") + public void getAllCarInfo() { + redisTemplate.opsForValue().set("car_info", carInfoService.getAllCarInfo()); + System.out.println("======存入实时车辆信息到redis成功========="); + } + + //@Scheduled(cron = "0/1 * * * * ?") + public void parseCarInfo() { + //从redis获取数据 + List carInfoList = (List) redisTemplate.opsForValue().get("car_info"); + if (carInfoList == null && carInfoList.isEmpty()) { + log.info("======未从redis获取车辆实时数据======="); + return; + } + for (CarInfoVO carInfo : carInfoList) { + // 解析车辆信息 + log.info("解析车辆信息:{}", carInfo.toString()); + // 推送消息给web页面 + websocketService.broadcast("car_info", "车辆信息:" + carInfo.toString()); + log.info("推送车辆信息:{}", carInfo.toString()); + } + } + + } diff --git a/src/main/java/org/springblade/modules/websocket/config/WebsocketConfig.java b/src/main/java/org/springblade/modules/websocket/config/WebsocketConfig.java new file mode 100644 index 0000000..8ebe247 --- /dev/null +++ b/src/main/java/org/springblade/modules/websocket/config/WebsocketConfig.java @@ -0,0 +1,27 @@ +package org.springblade.modules.websocket.config; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.modules.websocket.handler.WebsocketHandler; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.*; + +/** + * WebSocketEventListener + * + * @author admin + */ +@Slf4j +@Configuration +@EnableWebSocket +@AllArgsConstructor +public class WebsocketConfig implements WebSocketConfigurer { + + WebsocketHandler webSocketHandler; + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + System.out.println("===================================== websocket init !"); + registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*"); + } +} diff --git a/src/main/java/org/springblade/modules/websocket/controller/WebSocketController.java b/src/main/java/org/springblade/modules/websocket/controller/WebSocketController.java new file mode 100644 index 0000000..8f42666 --- /dev/null +++ b/src/main/java/org/springblade/modules/websocket/controller/WebSocketController.java @@ -0,0 +1,35 @@ +package org.springblade.modules.websocket.controller; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.modules.websocket.service.WebsocketService; +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; + +/** + * @Description + * @Author ytl + * @Date 2023/3/15 0015 9:03 + */ + +@RestController +@RequestMapping("/websocket") +@AllArgsConstructor +@Slf4j +public class WebSocketController{ + private final WebsocketService websocketService; + +// @GetMapping("/broadcast") +// R broadcast(@RequestParam String type, @RequestParam String msg){ +// websocketService.broadcast(type, msg); +// return R.status(true); +// } + + @GetMapping("/ifhasclient") + boolean ifHasClient(@RequestParam String type){ + boolean b = websocketService.ifHasClient(type); + return b; + } +} diff --git a/src/main/java/org/springblade/modules/websocket/handler/WebsocketHandler.java b/src/main/java/org/springblade/modules/websocket/handler/WebsocketHandler.java new file mode 100644 index 0000000..ce239f2 --- /dev/null +++ b/src/main/java/org/springblade/modules/websocket/handler/WebsocketHandler.java @@ -0,0 +1,63 @@ +package org.springblade.modules.websocket.handler; + +import lombok.AllArgsConstructor; +import org.springblade.modules.websocket.service.WebsocketService; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +/** + * WebSocketEventListener + * + * @author rajeevkumarsingh + */ +@Component +@AllArgsConstructor +public class WebsocketHandler extends TextWebSocketHandler { + WebsocketService webSocketService; + + /** + * 连接关闭后执行方法 + * + * @param session + * @param status + * @throws Exception + */ + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + super.afterConnectionClosed(session, status); + webSocketService.removeWebSocketSession(session); + System.out.println("====== websocket会话关闭...."); + } + + /** + * 连接建立后执行方法 + * + * @param session + * @throws Exception + */ + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + super.afterConnectionEstablished(session); + webSocketService.addWebSocketSession(session); + System.out.println("====== websocket建立新的会话...."); + + } + + /** + * 接收客户端推送数据的方法 + * + * @param session + * @param message + * @throws Exception + */ + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + System.out.println(message.getPayload()); + TextMessage msg = new TextMessage(message.getPayload()); + session.sendMessage(msg); + } + +} diff --git a/src/main/java/org/springblade/modules/websocket/service/WebsocketService.java b/src/main/java/org/springblade/modules/websocket/service/WebsocketService.java new file mode 100644 index 0000000..3a0ee46 --- /dev/null +++ b/src/main/java/org/springblade/modules/websocket/service/WebsocketService.java @@ -0,0 +1,76 @@ +package org.springblade.modules.websocket.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.io.IOException; +import java.util.*; + +/** + * WebSocketEventListener + * + * @author rajeevkumarsingh + */ +@Service +public class WebsocketService extends TextWebSocketHandler { + /** + * 用synchronized或ConcurrentHashMap保证多线程安全,因为我们还需要实现广播,所以这里我用了synchronized实现线程安全 + */ +// Map sessionMap = new HashMap<>(); + // key :目前有lift,light_kk,value:List + Map> sessionMap = new HashMap<>(); + + public synchronized void addWebSocketSession(WebSocketSession session) { + // 从session中获取的唯一标识 + // session 中还可以获得其他握手前的http各种属性,如URL,请求头,这些也可以作为唯一标识 + String id = session.getId(); + String query = session.getUri().getQuery(); + + List sessions = sessionMap.containsKey(query) ? sessionMap.get(query) : new ArrayList<>(); + sessions.add(session); + + // 保存会话 + sessionMap.put(query, sessions); + } + + public synchronized void removeWebSocketSession(WebSocketSession session) { + String query = session.getUri().getQuery(); + + List sessions = sessionMap.containsKey(query) ? sessionMap.get(query) : new ArrayList<>(); + sessions.remove(session); + sessionMap.put(query, sessions); + } + + /** + * 广播 + * + * @param message + */ + public synchronized void broadcast(String type, String message) { + if (!sessionMap.containsKey(type)) { + return; + } + + for (WebSocketSession session : sessionMap.get(type)) { + TextMessage tm = new TextMessage(message); + try { + Set strings = sessionMap.keySet(); + session.sendMessage(tm); + + } catch (IOException e) { + // 发送失败后,需要继续给其他人广播,因此在循环里面用 try 捕获异常 + e.printStackTrace(); + } + } + } + + /** + * 判断某种类型的连接是否为空 + */ + public boolean ifHasClient(String type){ + boolean b = sessionMap.containsKey(type) ? sessionMap.get(type).size() > 0 : false; + return b; + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c78dbbd..255cfec 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -24,5 +24,5 @@ blade: #本地文件上传 file: remote-mode: true - upload-domain: http://127.0.0.1:8999 + upload-domain: http://127.0.0.1.129:8999 remote-path: D:\WorkSoft\minio\data diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index de9d36e..f56c5f8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -41,6 +41,10 @@ spring: exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*' session-stat-enable: true session-stat-max-count: 10 + task: + scheduling: + pool: + size: 10 # mybatis mybatis-plus: @@ -126,5 +130,6 @@ blade: secure: #接口放行 skip-url: - - /blade-business/common-api/* - + - /blade-business/stationHint/* + - /blade-business/car-admin/* + - /pro-bus-line-img/* diff --git a/src/main/resources/log/logback-dev.xml b/src/main/resources/log/logback-dev.xml index f93efcb..b99139f 100644 --- a/src/main/resources/log/logback-dev.xml +++ b/src/main/resources/log/logback-dev.xml @@ -17,7 +17,7 @@ - WARN + INFO ACCEPT DENY @@ -45,11 +45,11 @@ - + - +