redis存储车辆所使用数据

master_suzejing
xiaoSu 2024-04-11 16:15:43 +08:00
parent b8de8285b7
commit 0463fde303
11 changed files with 177 additions and 17 deletions

View File

@ -1,8 +1,13 @@
package com.zhilian.business;
import com.zhilian.business.controller.FenceController;
import com.zhilian.business.controller.VehicleController;
import com.zhilian.common.security.annotation.EnableCustomConfig;
import com.zhilian.common.security.annotation.EnableMyFeignClients;
import com.zhilian.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -19,8 +24,18 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCustomSwagger2
@EnableMyFeignClients
@SpringBootApplication
public class ZhiLianBusinessApplication {
public class ZhiLianBusinessApplication implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(ZhiLianBusinessApplication.class);
}
@Autowired
private FenceController fenceController;
@Autowired
private VehicleController vehicleController;
@Override
public void run(ApplicationArguments args) throws Exception {
fenceController.fenceRedisData();
vehicleController.vehicleSelectAllData();
}
}

View File

@ -36,6 +36,14 @@ public class FenceController extends BaseController {
return getDataTable(result);
}
/**
* redis
*/
public void fenceRedisData() {
fenceService.fenceRedisData();
}
/**
*
* @param fence
@ -45,7 +53,7 @@ public class FenceController extends BaseController {
public Result fenceAdd(@RequestBody Fence fence) {
fence.setUpdateBy(SecurityUtils.getUsername());
fence.setUpdateTime(new Date());
return toAjax(fenceService.save(fence));
return toAjax(fenceService.saveFence(fence));
}
@ -70,7 +78,7 @@ public class FenceController extends BaseController {
public Result fenceUpdateMap(@RequestBody Fence fence) {
fence.setUpdateBy(SecurityUtils.getUsername());
fence.setUpdateTime(new Date());
return toAjax(fenceService.updateById(fence));
return toAjax(fenceService.updateByMap(fence));
}
/**
@ -80,7 +88,7 @@ public class FenceController extends BaseController {
*/
@PostMapping("/fenceDelete/{fenceId}")
public Result fenceDelete(@PathVariable String fenceId) {
return toAjax(fenceService.removeById(fenceId));
return toAjax(fenceService.removeByFence(fenceId));
}

View File

@ -2,6 +2,7 @@ package com.zhilian.business.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhilian.business.domain.Vehicle;
import com.zhilian.business.domain.VehicleFence;
import com.zhilian.business.domain.middle.VehicleMarkers;
import com.zhilian.business.service.MarkersService;
import com.zhilian.business.service.VehicleMarkersService;
@ -46,6 +47,12 @@ public class VehicleController extends BaseController {
return getDataTable(list);
}
@GetMapping("/vehicleSelectAllData")
public List<VehicleFence> vehicleSelectAllData(){
List<VehicleFence> selectSelectAllData = vehicleService.selectSelectAllData();
return selectSelectAllData;
}
/**
*
* @param vehicle

View File

@ -1,5 +1,6 @@
package com.zhilian.business.controller;
import com.zhilian.business.domain.VehicleType;
import com.zhilian.business.service.VehicleTypeService;
import com.zhilian.common.core.domain.Result;
import com.zhilian.common.core.web.controller.BaseController;

View File

@ -0,0 +1,22 @@
package com.zhilian.business.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@SuperBuilder
public class VehicleFence {
private Long vehicleId;
private String vehicleVIN;
private String fences;
private List<String> fenceIds;
}

View File

@ -2,11 +2,16 @@ package com.zhilian.business.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhilian.business.domain.Vehicle;
import com.zhilian.business.domain.VehicleFence;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface VehicleMapper extends BaseMapper<Vehicle> {
List<VehicleFence> selectListAll();
}

View File

@ -7,4 +7,12 @@ import java.util.List;
public interface FenceService extends IService<Fence> {
List<Fence> fenceList(Fence fence);
void fenceRedisData();
boolean saveFence(Fence fence);
boolean updateByMap(Fence fence);
boolean removeByFence(String fenceId);
}

View File

@ -2,6 +2,7 @@ package com.zhilian.business.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhilian.business.domain.Vehicle;
import com.zhilian.business.domain.VehicleFence;
import java.util.List;
@ -14,4 +15,6 @@ public interface VehicleService extends IService<Vehicle> {
boolean updateState(Vehicle vehicle);
void selectRedisData(Vehicle vehicle);
List<VehicleFence> selectSelectAllData();
}

View File

@ -6,12 +6,19 @@ import com.zhilian.business.domain.Fence;
import com.zhilian.business.mapper.FenceMapper;
import com.zhilian.business.service.FenceService;
import com.zhilian.common.core.utils.StringUtils;
import com.zhilian.common.redis.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class FenceServiceImpl extends ServiceImpl<FenceMapper, Fence> implements FenceService {
@Autowired
private RedisService redisService;
private static final String FENCE_INFO_KEY = "fence_info:";
//电子围栏信息查询
@Override
public List<Fence> fenceList(Fence fence) {
if (fence.getFenceName() == null && fence.getFenceTypeId() == null && fence.getFenceState() == null) {
@ -34,7 +41,54 @@ public class FenceServiceImpl extends ServiceImpl<FenceMapper, Fence> implements
if (fence.getFenceState() != null) {
queryWrapper.eq(Fence::getFenceState, fence.getFenceState());
}
if(!redisService.hasKey(FENCE_INFO_KEY)){
fenceRedisData();
}
return this.list(queryWrapper);
}
//缓存电子围栏信息
@Override
public void fenceRedisData() {
List<Fence> list = this.list();
for (Fence fence : list) {
redisService.setCacheSet(FENCE_INFO_KEY+fence.getFenceId(),fence.getFenceMessage());
}
}
//删除电子围栏全部数据
private void fenceRedisDelete(){
List<Fence> list = this.list();
for (Fence fence : list) {
redisService.deleteObject(FENCE_INFO_KEY+fence.getFenceId());
}
}
//添加电子围栏信息
@Override
public boolean saveFence(Fence fence) {
boolean save = this.save(fence);
return save;
}
//绑定经纬度地图
@Override
public boolean updateByMap(Fence fence) {
boolean updateByMap = this.updateById(fence);
if(redisService.hasKey(FENCE_INFO_KEY+fence.getFenceId())){
redisService.deleteObject(FENCE_INFO_KEY+fence.getFenceId());
}
redisService.setCacheSet(FENCE_INFO_KEY+fence.getFenceId(),fence.getFenceMessage());
return updateByMap;
}
//删除电子围栏
@Override
public boolean removeByFence(String fenceId) {
boolean remove = this.removeById(Integer.parseInt(fenceId));
if(redisService.hasKey(FENCE_INFO_KEY+fenceId)){
redisService.deleteObject(FENCE_INFO_KEY+fenceId);
}
return remove;
}
}

View File

@ -3,36 +3,29 @@ package com.zhilian.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhilian.business.domain.Vehicle;
import com.zhilian.business.domain.VehicleFence;
import com.zhilian.business.mapper.*;
import com.zhilian.business.service.VehicleService;
import com.zhilian.common.core.utils.StringUtils;
import com.zhilian.common.redis.service.RedisService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
@Log4j2
public class VehicleServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> implements VehicleService {
@Autowired
private VehicleMapper vehicleMapper;
@Autowired
private VehicleMarkersMapper vehicleMarkersMapper;
@Autowired
private RedisService redisService;
@Autowired
private MarkersMapper markersMapper;
@Autowired
private MarkersFenceMapper markersFenceMapper;
@Autowired
private FenceMapper fenceMapper;
private final String VEHICLE_PEOPLE_KEY = "vehicle_fence:";
@Override
public List<Vehicle> selectVehicleList(Vehicle vehicle) {
LambdaQueryWrapper<Vehicle> queryWrapper = new LambdaQueryWrapper<>();
@ -95,7 +88,27 @@ public class VehicleServiceImpl extends ServiceImpl<VehicleMapper, Vehicle> impl
public void selectRedisData(Vehicle vehicle) {
}
@Override
public List<VehicleFence> selectSelectAllData() {
List<VehicleFence> vehicleMarkersFence = vehicleMapper.selectListAll();
for (VehicleFence vehicleFence : vehicleMarkersFence) {
// 切割 fenceIds 字段为数组
String[] fenceIdsArray = vehicleFence.getFences().split(",");
// 将数组转换为 ArrayList
ArrayList<String> fenceIdsArrayList = new ArrayList<>(Arrays.asList( fenceIdsArray));
vehicleFence.setFenceIds(fenceIdsArrayList);
}
// 缓存
for (VehicleFence vehicleFence : vehicleMarkersFence) {
redisService.setCacheList(VEHICLE_PEOPLE_KEY + vehicleFence.getVehicleVIN(), vehicleFence.getFenceIds());
}
log.info(vehicleMarkersFence);
return vehicleMarkersFence;
}
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhilian.business.mapper.VehicleMapper">
<select id="selectListAll" resultType="com.zhilian.business.domain.VehicleFence">
SELECT
BV.vehicle_id,
BV.vehicle_vin,
GROUP_CONCAT(BF.fence_id) AS fenceIds
FROM
business_vehicle AS BV
JOIN
business_vehicle_markers AS BVM ON BV.vehicle_id = BVM.vehicle_id
JOIN
business_markers_fence AS BMF ON BVM.markers_id = BMF.markers_id
JOIN
business_fence AS BF ON BMF.fence_id = BF.fence_id
GROUP BY
BV.vehicle_id, BV.vehicle_vin
</select>
</mapper>