From 327267727c36cef76ee554e1ad97099180cd4f13 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Tue, 13 Jul 2021 09:08:37 +0800 Subject: [PATCH] screen-manage 单位转换信息添加缓存 --- screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java | 22 ++ screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java | 17 +- screen-manage/src/main/java/com/moral/api/util/CacheUtils.java | 10 + screen-api/src/main/java/com/moral/api/service/UnitConversionService.java | 16 ++ screen-manage/src/main/java/com/moral/api/controller/TestController.java | 12 + screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 2 screen-api/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 12 - screen-api/src/main/java/com/moral/api/entity/UnitConversion.java | 74 ++++++++++ screen-manage/src/main/java/com/moral/api/service/UnitConversionService.java | 9 + screen-api/src/main/resources/mapper/UnitConversionMapper.xml | 17 ++ screen-api/src/main/java/com/moral/api/mapper/UnitConversionMapper.java | 16 ++ screen-api/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java | 20 ++ screen-common/src/main/java/com/moral/constant/RedisConstants.java | 6 screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java | 18 ++ screen-api/src/main/resources/application-local.yml | 119 +++++++++++++++++ 15 files changed, 344 insertions(+), 26 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/entity/UnitConversion.java b/screen-api/src/main/java/com/moral/api/entity/UnitConversion.java new file mode 100644 index 0000000..962842d --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/entity/UnitConversion.java @@ -0,0 +1,74 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ��������������� + * </p> + * + * @author moral + * @since 2021-07-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class UnitConversion extends Model<UnitConversion> { + + private static final long serialVersionUID = 1L; + + /** + * ������ + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ��������������� + */ + private String originalUnitKey; + + /** + * ��������������� + */ + private Integer targetUnitKey; + + /** + * ������������ + */ + private String formula; + + /** + * ������null������������������������������������������code��������������������������������������� + */ + private String sensorCode; + + /** + * ������������ + */ + private Date createTime; + + /** + * ������������ + */ + private Date updateTime; + + /** + * ������������ + */ + private String isDelete; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-api/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-api/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java index af6c8cc..fc0e81c 100644 --- a/screen-api/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java +++ b/screen-api/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java @@ -1,13 +1,7 @@ package com.moral.api.kafka.consumer; -import com.moral.api.constant.TopicConstants; import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.support.Acknowledgment; import org.springframework.stereotype.Component; - -import java.util.Random; @Component @Slf4j @@ -27,11 +21,5 @@ log.info(String.format("kafka ������������������---------------- listen1 topic = %s, offset = %d, value = %s ", record.topic(), record.offset(), record.value())); ack.acknowledge(); } - }*/ - - - - - } diff --git a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java index 63edfa1..49ac907 100644 --- a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java +++ b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.moral.api.entity.Device; import com.moral.api.entity.Sensor; +import com.moral.api.entity.UnitConversion; import com.moral.api.websocket.SingleDeviceServer; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerRecord; @@ -10,6 +11,7 @@ import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.listener.ConsumerSeekAware; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; import java.util.HashMap; import java.util.List; @@ -30,7 +32,6 @@ public void listen(ConsumerRecord<String, String> record , Consumer consumer) throws Exception { String messageStr = record.value(); Map<String,String> message = (Map<String,String>)JSON.parse(messageStr); - //System.out.println(message); CopyOnWriteArraySet<SingleDeviceServer> sockets = SingleDeviceServer.sockets; for (SingleDeviceServer socket : sockets) { //���������������������������socket @@ -44,9 +45,21 @@ List<Sensor> sensors = device.getVersion().getSensors();//������������������������������ for (Sensor sensor : sensors) { String code = sensor.getCode(); - String showUnit = sensor.getShowUnit(); + String showUnitKey = sensor.getShowUnitKey(); + String unitKey = sensor.getUnitKey(); + //������������ //������������ + if(!unitKey.equals(showUnitKey)){ + String formula = sensor.getFormula(); + if(ObjectUtils.isEmpty(formula)){ + List<UnitConversion> unitConversions = socket.getUnitConversions(); + System.out.println(unitConversions); + }else{ + + } + } //������������ + String showUnit = sensor.getShowUnit(); String value = message.get(code); value+=showUnit; resultMessgae.put(sensor.getCode(),value); @@ -72,3 +85,4 @@ } } + diff --git a/screen-api/src/main/java/com/moral/api/mapper/UnitConversionMapper.java b/screen-api/src/main/java/com/moral/api/mapper/UnitConversionMapper.java new file mode 100644 index 0000000..b990f04 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/mapper/UnitConversionMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.UnitConversion; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ��������������� Mapper ������ + * </p> + * + * @author moral + * @since 2021-07-12 + */ +public interface UnitConversionMapper extends BaseMapper<UnitConversion> { + +} diff --git a/screen-api/src/main/java/com/moral/api/service/UnitConversionService.java b/screen-api/src/main/java/com/moral/api/service/UnitConversionService.java new file mode 100644 index 0000000..58a7af6 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/UnitConversionService.java @@ -0,0 +1,16 @@ +package com.moral.api.service; + +import com.moral.api.entity.UnitConversion; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * <p> + * ��������������� ��������� + * </p> + * + * @author moral + * @since 2021-07-12 + */ +public interface UnitConversionService extends IService<UnitConversion> { + +} diff --git a/screen-api/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java new file mode 100644 index 0000000..cfe384d --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java @@ -0,0 +1,20 @@ +package com.moral.api.service.impl; + +import com.moral.api.entity.UnitConversion; +import com.moral.api.mapper.UnitConversionMapper; +import com.moral.api.service.UnitConversionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * <p> + * ��������������� ��������������� + * </p> + * + * @author moral + * @since 2021-07-12 + */ +@Service +public class UnitConversionServiceImpl extends ServiceImpl<UnitConversionMapper, UnitConversion> implements UnitConversionService { + +} diff --git a/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java b/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java index 7419fbf..748efc3 100644 --- a/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java +++ b/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java @@ -2,6 +2,7 @@ import com.moral.api.entity.Device; import com.moral.api.entity.Sensor; +import com.moral.api.entity.UnitConversion; import com.moral.constant.RedisConstants; import lombok.Data; import org.springframework.data.redis.core.RedisTemplate; @@ -30,22 +31,25 @@ //���������������������������������server������ public static CopyOnWriteArraySet<SingleDeviceServer> sockets = new CopyOnWriteArraySet<>(); + public static RedisTemplate redisTemplate; + private Session session; private String mac; - public static RedisTemplate redisTemplate; + private Map<String, Device> devicesInfo; - private Map<String,Device> devicesInfo; + private List<UnitConversion> unitConversions; @OnOpen public void onOpen(Session session, @PathParam("mac") String mac) throws Exception { this.session = session; this.mac = mac; this.devicesInfo = redisTemplate.opsForHash().entries(RedisConstants.DEVICE_INFO); + this.unitConversions = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1); sockets.add(this); System.out.println(mac); - } +} @OnClose public void onClose() { @@ -63,11 +67,10 @@ public void sendMessage(String message) throws Exception { if (this.session.isOpen()) { - synchronized (session) { - this.session.getBasicRemote().sendText(message); - } + // synchronized (session) { + this.session.getBasicRemote().sendText(message); + // } } } - } diff --git a/screen-api/src/main/resources/application-local.yml b/screen-api/src/main/resources/application-local.yml new file mode 100644 index 0000000..23c69e1 --- /dev/null +++ b/screen-api/src/main/resources/application-local.yml @@ -0,0 +1,119 @@ +server: + port: 8081 + tomcat: + uri-encoding: UTF-8 + #��������������� + min-spare-threads: 500 + #��������������� + max-threads: 2500 + #��������������� + max-connections: 6500 + #������������������������ + accept-count: 1000 +spring: + profiles: + active: dev + application: + name: screen-manage + redis: + host: r-bp1xdlb9wfc6zt0msppd.redis.rds.aliyuncs.com + port: 6379 + password: moral_123456 + timeout: 30000 + jedis: + pool: + max-active: 256 + max-wait: 30000 + max-idle: 64 + min-idle: 32 + lettuce: + pool: + max-active: 256 + max-idle: 64 + max-wait: 30000 + min-idle: 32 + tokenRedis: + host: r-bp1xdlb9wfc6zt0msppd.redis.rds.aliyuncs.com + port: 6379 + password: moral_123456 + timeout: 30000 + database: 15 + pool: + max-active: 256 + max-wait: 30000 + max-idle: 64 + min-idle: 32 + + datasource: + minIdle: 1 + time-between-eviction-runs-millis: 60000 + max-active: 20 + test-while-idle: true + validation-query: select 'x' + filters: stat + type: com.alibaba.druid.pool.DruidDataSource + max-wait: 60000 + url: jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: moral_123456 + test-on-borrow: false + sql-script-encoding: utf-8 + pool-prepared-statements: true + min-evictable-idle-time-millis: 300000 + initial-size: 1 + driver-class-name: com.mysql.cj.jdbc.Driver + max-conn-lifetime-millis: 20 + test-on-return: false + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + global-config: + db-config: + id-type: auto + field-strategy: NOT_EMPTY + db-type: MYSQL + configuration: + map-underscore-to-camel-case: true + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +kafka: + listener: + ack-mode: manual_immediate + consumer: + auto: + offset: + reset: latest + concurrency: 3 + enable: + auto: + commit: false + servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092 + session: + timeout: 6000 + zookeeper: + connect: 47.99.145.48:2181,47.111.116.38:2181,47.111.124.159:2181 + producer: + batch: + size: 4096 + buffer: + memory: 40960 + linger: 1 + retries: 0 + servers: 47.99.145.48:9092,47.111.116.38:9092,47.111.124.159:9092 +mvc: + interceptor: + exclude: + - /login + - /swagger-ui.html + - /swagger-resources/** + - /swagger-ui.html/** + - /webjars/** + - /verificationCode/** + +AES: + KEY: + AD42F7787B035B7580000EF93BE20BAD +TOKEN: + KEY: + foh3wi2ooghiCh5 \ No newline at end of file diff --git a/screen-api/src/main/resources/mapper/UnitConversionMapper.xml b/screen-api/src/main/resources/mapper/UnitConversionMapper.xml new file mode 100644 index 0000000..d1c7248 --- /dev/null +++ b/screen-api/src/main/resources/mapper/UnitConversionMapper.xml @@ -0,0 +1,17 @@ +<?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.moral.api.mapper.UnitConversionMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.UnitConversion"> + <id column="id" property="id" /> + <result column="original_unit_key" property="originalUnitKey" /> + <result column="target_unit_key" property="targetUnitKey" /> + <result column="formula" property="formula" /> + <result column="sensor_code" property="sensorCode" /> + <result column="create_time" property="createTime" /> + <result column="update_time" property="updateTime" /> + <result column="is_delete" property="isDelete" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-common/src/main/java/com/moral/constant/RedisConstants.java b/screen-common/src/main/java/com/moral/constant/RedisConstants.java index 4066f8f..40ad154 100644 --- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java +++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java @@ -58,5 +58,11 @@ * */ public static final String AQI_DATA = "aqi_data"; + /* + * ������������������ + * ������������List<UnitConversion> + * */ + public static final String UNIT_CONVERSION = "unit_conversion"; + } diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java index 8178082..43b908a 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.Sensor; import com.moral.api.entity.Test; +import com.moral.api.entity.UnitConversion; import com.moral.api.service.SensorService; import com.moral.api.service.TestService; import com.moral.api.service.impl.SensorServiceImpl; import com.moral.api.util.CacheUtils; import com.moral.constant.Constants; import com.moral.constant.KafkaConstants; +import com.moral.constant.RedisConstants; import com.moral.constant.ResultMessage; import com.moral.redis.RedisUtil; import com.moral.util.PageResult; @@ -22,6 +24,7 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.web.bind.annotation.*; @@ -42,6 +45,9 @@ @Resource private TestService testService; + + @Autowired + RedisTemplate redisTemplate; /** * name ������ @@ -206,4 +212,10 @@ } } + @GetMapping("test") + public void test(){ + List<UnitConversion> range = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1); + System.out.println(range); + } + } diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java index 4d1f804..c257205 100644 --- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java +++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java @@ -20,7 +20,7 @@ import com.moral.constant.KafkaConstants; import com.moral.constant.RedisConstants; -@Component +//@Component @Slf4j public class KafkaConsumer { diff --git a/screen-manage/src/main/java/com/moral/api/service/UnitConversionService.java b/screen-manage/src/main/java/com/moral/api/service/UnitConversionService.java index 4da67ea..51b2d38 100644 --- a/screen-manage/src/main/java/com/moral/api/service/UnitConversionService.java +++ b/screen-manage/src/main/java/com/moral/api/service/UnitConversionService.java @@ -55,4 +55,13 @@ */ UnitConversionDTO deleteUnitConversion(UnitConversionDeleteForm form); + /** + * @Description: ������������������ + * @Param: [] + * @return: void + * @Author: ��������� + * @Date: 2021/7/12 + */ + void refreshCache(); + } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java index 75593af..408c168 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java @@ -18,9 +18,11 @@ import com.moral.api.service.UnitConversionService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.constant.Constants; +import com.moral.constant.RedisConstants; import com.moral.constant.ResponseCodeEnum; import com.moral.util.ConvertUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -44,6 +46,8 @@ UnitConversionMapper unitConversionMapper; @Autowired SysDictDataService sysDictDataService; + @Autowired + RedisTemplate redisTemplate; @Override @Transactional @@ -76,6 +80,8 @@ } //������������ unitConversionMapper.insert(unitConversion); + //������������ + refreshCache(); //������������������ dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); @@ -153,6 +159,8 @@ oldUnitConversion = unitConversionMapper.selectOne(oldWrapper); //������ unitConversionMapper.updateById(unitConversion); + //������������ + refreshCache(); //������������������ dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); @@ -177,15 +185,21 @@ deleteWrapper.set("is_delete", Constants.DELETE); deleteWrapper.eq("id", id); unitConversionMapper.update(null, deleteWrapper); + //������������ + refreshCache(); //������������������ dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } - public static void main(String[] args) { - int[] array = new int[]{1,2,3,4,5,}; - String s = JSON.toJSONString(array); - System.out.println(s); + /*������������*/ + @Override + public void refreshCache(){ + redisTemplate.delete((RedisConstants.UNIT_CONVERSION)); + QueryWrapper<UnitConversion> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete",Constants.NOT_DELETE); + List<UnitConversion> unitConversions = unitConversionMapper.selectList(queryWrapper); + redisTemplate.opsForList().leftPushAll(RedisConstants.UNIT_CONVERSION,unitConversions); } } diff --git a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java index 62c0b4f..f8e27ee 100644 --- a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java +++ b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java @@ -7,6 +7,7 @@ import com.moral.api.mapper.UnitConversionMapper; import com.moral.api.service.SensorService; import com.moral.api.service.SysDictDataService; +import com.moral.api.service.UnitConversionService; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.TokenUtils; @@ -40,6 +41,11 @@ private static UnitConversionMapper unitConversionMapper; private static SensorService sensorService; + + private static UnitConversionService unitConversionService; + + @Autowired + public void setUnitConversionService(UnitConversionService unitConversionService){CacheUtils.unitConversionService = unitConversionService;} @Autowired public void setSensorService(SensorService sensorService) { @@ -123,4 +129,8 @@ public static void refreshDicTypeAndData(){ } + + public static void refreshUnitConversion(){ + unitConversionService.refreshCache(); + } } -- Gitblit v1.8.0