From 11d10fc9ca90ec29159738c1eac5e2d9203d8bb6 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Wed, 28 Jul 2021 09:14:12 +0800 Subject: [PATCH] screen-api kafka消费者组id从配置文件获取 screen-manage 除admin角色外无法查看admin角色 --- screen-api/src/main/java/com/moral/api/controller/HistoryFiveMinutelyController.java | 2 screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 2 screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java | 9 +++ screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 46 ++++++++++----- screen-api/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java | 45 +++++++++++++++ screen-api/src/main/resources/application-dev.yml | 2 screen-api/src/main/java/com/moral/api/pojo/form/historyFiveMinutely/QueryDeviceAndFiveMinuteDataForm.java | 2 screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 3 screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java | 25 ++++--- screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java | 16 +++++ 10 files changed, 123 insertions(+), 29 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java b/screen-api/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java index a4b55c1..cc68807 100644 --- a/screen-api/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java +++ b/screen-api/src/main/java/com/moral/api/config/kafka/KafkaConsumerConfig.java @@ -29,6 +29,8 @@ private String autoOffsetReset; @Value("${kafka.consumer.concurrency}") private int concurrency; + @Value("${kafka.groupId.second-data}") + private String secondDataGroupId; @Bean public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() { @@ -42,8 +44,51 @@ public ConsumerFactory<String, String> consumerFactory() { return new DefaultKafkaConsumerFactory<>(consumerConfigs()); } + + @Bean("secondDataListenerFactory") + public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> secondDataListenerFactory(){ + ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(secondDataConsumerFactory());//��������������������� + factory.setConcurrency(concurrency);//��������������� + factory.getContainerProperties().setPollTimeout(1500);//������������������������������ + return factory; + } + + /** + * @Description: ������������������ + * @Param: [] + * @return: org.springframework.kafka.core.ConsumerFactory<java.lang.String,java.lang.String> + * @Author: ��������� + * @Date: 2021/7/19 + */ + public ConsumerFactory<String,String> secondDataConsumerFactory(){ + Map<String, Object> commonConfig = consumerConfigs(); + Map<String, Object> secondDataConfig = secondConsumerConfigs(); + secondDataConfig.putAll(commonConfig); + return new DefaultKafkaConsumerFactory<>(secondDataConfig); + } + + /** + * @Description: ��������������������� + * @Param: [] + * @return: java.util.Map<java.lang.String,java.lang.Object> + * @Author: ��������� + * @Date: 2021/7/19 + */ + public Map<String,Object> secondConsumerConfigs(){ + Map<String, Object> propsMap = new HashMap<>(); + propsMap.put(ConsumerConfig.GROUP_ID_CONFIG,secondDataGroupId); + return propsMap; + } + /** + * @Description: ������������ + * @Param: [] + * @return: java.util.Map<java.lang.String,java.lang.Object> + * @Author: ��������� + * @Date: 2021/7/19 + */ public Map<String, Object> consumerConfigs() { Map<String, Object> propsMap = new HashMap<>(); propsMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers); diff --git a/screen-api/src/main/java/com/moral/api/controller/HistoryFiveMinutelyController.java b/screen-api/src/main/java/com/moral/api/controller/HistoryFiveMinutelyController.java index c11637f..3ef66f3 100644 --- a/screen-api/src/main/java/com/moral/api/controller/HistoryFiveMinutelyController.java +++ b/screen-api/src/main/java/com/moral/api/controller/HistoryFiveMinutelyController.java @@ -36,11 +36,11 @@ @GetMapping("queryDeviceAndData") public ResultMessage queryDeviceAndData(QueryDeviceAndFiveMinuteDataForm form){ - //18 110100 //������������������������ if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + //������������������ List<DeviceAndFiveMinuteDataDTO> dto = historyFiveMinutelyService.queryDeviceAndFiveMinuteData(form); 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 9439f3a..c105c2f 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 @@ -6,9 +6,12 @@ import com.moral.api.entity.UnitConversion; import com.moral.api.websocket.SingleDeviceServer; import com.moral.util.UnitConvertUtils; +import lombok.AllArgsConstructor; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.TopicPartition; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.listener.ConsumerSeekAware; import org.springframework.stereotype.Component; @@ -29,7 +32,7 @@ @Component public class SecondDataConsumer implements ConsumerSeekAware { - @KafkaListener(topics = "second_data", groupId = "SecondsDataGroup996") + @KafkaListener(containerFactory = "secondDataListenerFactory",topics = "second_data") public void listen(ConsumerRecord<String, String> record, Consumer consumer) throws Exception { String messageStr = record.value(); Map<String, Object> message = (Map<String, Object>) JSON.parse(messageStr); @@ -39,7 +42,7 @@ //���������������������������socket String messageMac = (String) message.get("mac"); String mac = socket.getMac(); - if(!mac.equalsIgnoreCase(messageMac)) + if (!mac.equalsIgnoreCase(messageMac)) continue; //������������������ Map<String, Device> devicesInfo = socket.getDevicesInfo(); @@ -70,22 +73,22 @@ //������������ String resultData = UnitConvertUtils.calculate(sourceData, formula); if (resultData != null) { - resultData+=showUnit; - }else{//���������������������������null��������������������������������������������������������������� - resultData = sourceData+unit; + resultData += showUnit; + } else {//���������������������������null��������������������������������������������������������������� + resultData = sourceData + unit; } resultMessgae.put(sensor.getCode(), resultData); } else { //������������ - sourceData += showUnit; + sourceData = sourceData + " " + showUnit; resultMessgae.put(sensor.getCode(), sourceData); } } - resultMessgae.put("DataTime",message.get("DataTime")); - resultMessgae.put("time",message.get("time")); - resultMessgae.put("time1",message.get("time1")); - resultMessgae.put("serverTime",System.currentTimeMillis()); - resultMessgae.put("serverStartTime",serverStartTime); + resultMessgae.put("DataTime", message.get("DataTime")); + resultMessgae.put("time", message.get("time")); + resultMessgae.put("time1", message.get("time1")); + resultMessgae.put("serverTime", System.currentTimeMillis()); + resultMessgae.put("serverStartTime", serverStartTime); socket.sendMessage(JSON.toJSONString(resultMessgae)); } } diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/historyFiveMinutely/QueryDeviceAndFiveMinuteDataForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/historyFiveMinutely/QueryDeviceAndFiveMinuteDataForm.java index 6ca5be0..7e562fb 100644 --- a/screen-api/src/main/java/com/moral/api/pojo/form/historyFiveMinutely/QueryDeviceAndFiveMinuteDataForm.java +++ b/screen-api/src/main/java/com/moral/api/pojo/form/historyFiveMinutely/QueryDeviceAndFiveMinuteDataForm.java @@ -26,4 +26,6 @@ return false; return true; } + + } diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java index aaefcd2..0021494 100644 --- a/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java +++ b/screen-api/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java @@ -27,6 +27,15 @@ */ List<DeviceAndFiveMinuteDataDTO> queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form); + /** + * @Description: ������������������������������������������ + * @Param: [mac] + * @return: java.util.List<com.moral.api.entity.HistoryFiveMinutely> + * @Author: ��������� + * @Date: 2021/7/23 + */ + HistoryFiveMinutely queryLastDataByMac(String mac); + //������5������������������ List<Object> getAreaWindData(Map<String,Object> params); } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index 8c3dc7e..2995c31 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -40,8 +40,8 @@ @Override public List<Device> getDevicesByMonitorPointId(Integer monitorPointId) { QueryWrapper<Device> wrapper = new QueryWrapper(); + wrapper.eq("monitor_point_id",monitorPointId); wrapper.eq("is_delete", Constants.NOT_DELETE); - wrapper.eq("monitor_point_id", monitorPointId); List<Device> devices = deviceMapper.selectList(wrapper); return devices; } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java index dac6205..3f0c77f 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java @@ -1,6 +1,8 @@ package com.moral.api.service.impl; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.Device; import com.moral.api.entity.HistoryFiveMinutely; import com.moral.api.entity.MonitorPoint; @@ -14,19 +16,13 @@ import com.moral.api.service.MonitorPointService; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; - import io.lettuce.core.GeoCoordinates; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * <p> @@ -41,12 +37,10 @@ @Autowired MonitorPointService monitorPointService; - @Autowired RedisTemplate redisTemplate; - @Autowired - private HistoryFiveMinutelyMapper historyFiveMinutelyMapper; + HistoryFiveMinutelyMapper historyFiveMinutelyMapper; @Override public List<DeviceAndFiveMinuteDataDTO> queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form) { @@ -67,18 +61,36 @@ for (Device device : devices) { DeviceAndFiveMinuteDataDTO dto = new DeviceAndFiveMinuteDataDTO(); String mac = device.getMac(); + //������������������ Map<String, Object> sensorValues = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DATA_FIVE_MINUTES, mac); - Map<String, Object> value = new HashMap<>(); - if (sensorValues != null && sensorValues.get(sensorCode) != null) - value.put(sensorCode, sensorValues.get(sensorCode)); + //������������������������������������ + HistoryFiveMinutely dbHistoryFiveMinutely = queryLastDataByMac(mac); + String dbDataStr = dbHistoryFiveMinutely.getValue(); + sensorValues = JSON.parseObject(dbDataStr, HashMap.class); + Map<String,Object> sensorValue = new HashMap<>(); + if (sensorValues!=null&&sensorValues.get(sensorCode) != null) + sensorValue.put(sensorCode,sensorValues.get(sensorCode)); else - value.put(sensorCode, null); + sensorValue.put(sensorCode,null); dto.setDevice(device); - dto.setSensorValue(value); + dto.setSensorValue(sensorValue); dtos.add(dto); } return dtos; } + + @Override + public HistoryFiveMinutely queryLastDataByMac(String mac) { + QueryWrapper<HistoryFiveMinutely> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("mac",mac); + queryWrapper.orderByDesc("time"); + queryWrapper.last("limit 0,1"); + List<HistoryFiveMinutely> historyFiveMinutelies = historyFiveMinutelyMapper.selectList(queryWrapper); + if(ObjectUtils.isEmpty(historyFiveMinutelies)) + return null; + return historyFiveMinutelies.get(0); + } + @Override public List<Object> getAreaWindData(Map<String, Object> params) { @@ -272,4 +284,8 @@ list.add(laLaMap); return list; } + + + + } diff --git a/screen-api/src/main/resources/application-dev.yml b/screen-api/src/main/resources/application-dev.yml index e8c8b6b..730e702 100644 --- a/screen-api/src/main/resources/application-dev.yml +++ b/screen-api/src/main/resources/application-dev.yml @@ -105,6 +105,8 @@ linger: 1 retries: 0 servers: 172.16.44.65:9092,172.16.44.67:9092,172.16.44.66:9092 + groupId: + second-data: SecondsDataGroup mvc: interceptor: exclude: diff --git a/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java index eae61a6..704348c 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java @@ -40,6 +40,7 @@ public void judgeOffLineDevice() { QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); queryWrapper.ne("state", Constants.DEVICE_STATE_OFFLINE); + queryWrapper.eq("is_delete",Constants.NOT_DELETE); //������������������������ List<Device> devices = deviceMapper.selectList(queryWrapper); for (Device device : devices) { @@ -64,4 +65,4 @@ updateWrapper.eq("id", device.getId()).set("state", device.getState()); deviceMapper.update(null, updateWrapper); } -} +} \ No newline at end of file diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java index 4877afb..5655859 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java @@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.*; import com.moral.api.mapper.*; +import com.moral.api.pojo.redisBean.AccountInfoDTO; import com.moral.api.service.ManageRoleService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; +import com.moral.util.TokenUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,6 +23,7 @@ import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Predicate; /** * <p> @@ -79,6 +82,19 @@ manageRoleMap.put("key",manageRole.getId()); manageRolesList.add(manageRoleMap); } + //���admin��������� admin��������������� + AccountInfoDTO accountInfo = (AccountInfoDTO) TokenUtils.getUserInfo(); + List<ManageRole> roles = accountInfo.getRoles(); + if(!roles.get(0).getName().equals("admin")){ + manageRolesList.removeIf(new Predicate<Map<String, Object>>() { + @Override + public boolean test(Map<String, Object> map) { + if(map.get("name").equals("admin")) + return true; + return false; + } + }); + } resultMap.put("manageRoles",manageRolesList); int totalNumber = manageRoleMapper.selectCount(wrapper); resultMap.put("totalNumber",totalNumber); -- Gitblit v1.8.0