diff --git a/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java index abeba97b..706e36a2 100644 --- a/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java +++ b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java @@ -10,4 +10,9 @@ public class RedisKeyConstants * 设备 */ public static final String DC_DEVICES = "dc:devices"; + + /** + * 路段 + */ + public static final String DC_ROAD_SECTION = "dc:roadSection"; } diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index c3209c98..23ac63f9 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java @@ -52,7 +52,7 @@ public class DeviceMessageHandler { private RedisCache redisCache; @Resource - private DcTrafficSectionDataService dcTrafficSectionDataService; + private DcTrafficStatisticsService dcTrafficSectionDataService; @Autowired private IDcMeteorologicalDetectorDataService meteorologicalDetectorDataService; diff --git a/zc-business/src/main/java/com/zc/business/service/DcTrafficSectionDataService.java b/zc-business/src/main/java/com/zc/business/service/DcTrafficSectionDataService.java deleted file mode 100644 index 7e3db831..00000000 --- a/zc-business/src/main/java/com/zc/business/service/DcTrafficSectionDataService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.zc.business.service; - -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.service.IService; -import com.zc.business.domain.DcTrafficSectionData; - -public interface DcTrafficSectionDataService extends IService { - - /** - * 处理实时接收到的一类交流站设备消息,并将其转换为交通断面统计数据对象并缓存。 - * - * @param msg 设备发送的JSON格式实时消息 - */ - void processRealtimeOneStopMessage(JSONObject msg); -} diff --git a/zc-business/src/main/java/com/zc/business/service/DcTrafficStatisticsService.java b/zc-business/src/main/java/com/zc/business/service/DcTrafficStatisticsService.java new file mode 100644 index 00000000..b7a14a89 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/service/DcTrafficStatisticsService.java @@ -0,0 +1,25 @@ +package com.zc.business.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.zc.business.domain.DcTrafficMetricsData; +import com.zc.business.domain.DcTrafficSectionData; + +public interface DcTrafficStatisticsService extends IService { + + /** + * 处理实时接收到的一类交流站设备消息,并将其转换为交通断面统计数据对象并缓存。 + * + * @param msg 设备发送的JSON格式实时消息 + */ + void processRealtimeOneStopMessage(JSONObject msg); + + /** + * 获取当前交通特征指数 + * + * @param direction 交通方向(例如:1代表菏泽方向,3济南方向) + * @param roadSectionId 路段ID + * @return 当前交通特征指数 + */ + DcTrafficMetricsData currentTrafficMetrics(Byte direction, Long roadSectionId); +} diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcRoadSectionServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcRoadSectionServiceImpl.java index 0db3e373..f536e8cf 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcRoadSectionServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcRoadSectionServiceImpl.java @@ -5,7 +5,10 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; +import com.zc.business.constant.RedisKeyConstants; +import com.zc.business.domain.DcDevice; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,6 +17,9 @@ import com.zc.business.domain.DcRoadSection; import com.zc.business.service.IDcRoadSectionService; import org.w3c.dom.CDATASection; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; + /** * 辖区路段Service业务层处理 * @@ -26,6 +32,34 @@ public class DcRoadSectionServiceImpl implements IDcRoadSectionService @Autowired private DcRoadSectionMapper dcRoadSectionMapper; + @Resource + private RedisCache redisCache; + + @PostConstruct + public void init() { + /* + 添加数据到 redis 缓存 + */ + updateRedisCache(); + } + + /** + * 添加数据到 redis 缓存 + */ + public void updateRedisCache() { + // 获取全部设备列表数据 + List dcRoadSections = dcRoadSectionMapper.selectDcRoadSectionList(null); + if (dcRoadSections == null || dcRoadSections.isEmpty()) { + return; + } + + // 清楚 redis 缓存数据 + redisCache.deleteObject(RedisKeyConstants.DC_ROAD_SECTION); + + // 添加 redis 缓存数据 + dcRoadSections.forEach(val -> redisCache.setCacheMapValue(RedisKeyConstants.DC_ROAD_SECTION, val.getId(), val)); + } + /** * 查询辖区路段 * @@ -108,7 +142,12 @@ public class DcRoadSectionServiceImpl implements IDcRoadSectionService public int insertDcRoadSection(DcRoadSection dcRoadSection) { dcRoadSection.setCreateTime(DateUtils.getNowDate()); - return dcRoadSectionMapper.insertDcRoadSection(dcRoadSection); + + int result = dcRoadSectionMapper.insertDcRoadSection(dcRoadSection); + if (result > 0) { + updateRedisCache(); + } + return result; } /** @@ -121,7 +160,11 @@ public class DcRoadSectionServiceImpl implements IDcRoadSectionService public int updateDcRoadSection(DcRoadSection dcRoadSection) { dcRoadSection.setUpdateTime(DateUtils.getNowDate()); - return dcRoadSectionMapper.updateDcRoadSection(dcRoadSection); + int result = dcRoadSectionMapper.updateDcRoadSection(dcRoadSection); + if (result > 0) { + updateRedisCache(); + } + return result; } /** @@ -133,7 +176,11 @@ public class DcRoadSectionServiceImpl implements IDcRoadSectionService @Override public int deleteDcRoadSectionByIds(Long[] ids) { - return dcRoadSectionMapper.deleteDcRoadSectionByIds(ids); + int result = dcRoadSectionMapper.deleteDcRoadSectionByIds(ids); + if (result > 0) { + updateRedisCache(); + } + return result; } /** @@ -145,7 +192,11 @@ public class DcRoadSectionServiceImpl implements IDcRoadSectionService @Override public int deleteDcRoadSectionById(Long id) { - return dcRoadSectionMapper.deleteDcRoadSectionById(id); + int result = dcRoadSectionMapper.deleteDcRoadSectionById(id); + if (result > 0) { + updateRedisCache(); + } + return result; } //查询路线id与名称 @Override diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSectionDataServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java similarity index 97% rename from zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSectionDataServiceImpl.java rename to zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java index 57b703a3..14d7a48f 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficSectionDataServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficStatisticsServiceImpl.java @@ -10,11 +10,12 @@ import com.zc.business.constant.RedisKeyConstants; import com.zc.business.constant.StatisticalRecoveryOffsetTime; import com.zc.business.controller.DcDeviceController; import com.zc.business.domain.DcDevice; +import com.zc.business.domain.DcTrafficMetricsData; import com.zc.business.domain.DcTrafficSectionData; import com.zc.business.enums.*; import com.zc.business.statistics.cache.*; import com.zc.business.mapper.DcTrafficSectionDataMapper; -import com.zc.business.service.DcTrafficSectionDataService; +import com.zc.business.service.DcTrafficStatisticsService; import com.zc.business.statistics.handler.RealtimeTrafficStatistics; import com.zc.common.core.httpclient.exception.HttpException; import org.slf4j.Logger; @@ -34,9 +35,9 @@ import java.util.function.Consumer; * @author xiepufeng */ @Service -public class DcTrafficSectionDataServiceImpl +public class DcTrafficStatisticsServiceImpl extends ServiceImpl - implements DcTrafficSectionDataService { + implements DcTrafficStatisticsService { // 日志记录器 protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -79,6 +80,20 @@ public class DcTrafficSectionDataServiceImpl } } + /** + * 获取当前交通特征指数 + * + * @param direction 交通方向(例如:1代表菏泽方向,3济南方向) + * @param roadSectionId 路段ID + * @return 当前交通特征指数 + */ + @Override + public DcTrafficMetricsData currentTrafficMetrics(Byte direction, Long roadSectionId) { + + DcTrafficMetricsData dcTrafficMetricsData = new DcTrafficMetricsData(); + return dcTrafficMetricsData; + } + /** * 定义每小时第20分钟执行的任务,用于清除过期缓存数据并将缓存中的数据整合后保存至数据库。 */