Browse Source

日志记录

master
刘力 3 years ago
parent
commit
be61595d3d
  1. 9
      storeroom/pom.xml
  2. 21
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/NettyConfig.java
  3. 2
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/NettyServer.java
  4. 50
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/ServerChannelCache.java
  5. 14
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/WebSocketHandler.java
  6. 3
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/AlarmInfoController.java
  7. 39
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/SecurityDoorController.java
  8. 68
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java
  9. 9
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java
  10. 2
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/AlarmInfoService.java
  11. 8
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java
  12. 7
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/AlarmInfoServiceImpl.java
  13. 23
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java
  14. 4
      storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/ThirdApiServiceImpl.java

9
storeroom/pom.xml

@ -27,13 +27,20 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.33.Final</version>
<version>4.1.77.Final</version>
</dependency>
<dependency>
<groupId>com.ejlchina</groupId>
<artifactId>okhttps-fastjson</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.3</version>
</dependency>
</dependencies>
</project>

21
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/NettyConfig.java

@ -11,33 +11,32 @@ public class NettyConfig {
/**
* 定义一个channel管理所有channel
* 定义一个channel组管理所有的channel
* GlobalEventExecutor.INSTANCE 是全局的事件执行器是一个单例
*/
private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
/**
* 存放用户信息发送指定用户
* 存放用户与Chanel的对应信息用于给指定用户发送消息
*/
private static ConcurrentHashMap<String, Channel> userChannelMap = new ConcurrentHashMap<>();
private NettyConfig() {
private static ConcurrentHashMap<String,Channel> userChannelMap = new ConcurrentHashMap<>();
}
private NettyConfig() {}
/**
* 获取用户
* @return /
* 获取channel
* @return
*/
public static ChannelGroup getChannelGroup(){
public static ChannelGroup getChannelGroup() {
return channelGroup;
}
/**
* 获取用户channel map
* @return /
* @return
*/
public static ConcurrentHashMap<String,Channel> getUserChannelMap(){
return userChannelMap;
}
}

2
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/NettyServer.java

@ -91,6 +91,8 @@ public class NettyServer {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
// 心跳检测(一般情况第一个设置,如果超时了,则会调用userEventTriggered方法,且会告诉你超时的类型)
ch.pipeline().addLast(new IdleStateHandler(readerIdleTime, writerIdleTime, allIdleTime, TimeUnit.MINUTES));
// 流水线管理通道中的处理程序Handler用来处理业务

50
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/ServerChannelCache.java

@ -0,0 +1,50 @@
package com.storeroom.modules.storeroom3d.config.websoket;
import org.springframework.stereotype.Component;
import io.netty.channel.Channel;
import io.netty.util.AttributeKey;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class ServerChannelCache {
private static final ConcurrentHashMap<String, HashMap<String, Channel>> CACHE_MAP = new ConcurrentHashMap<>();
private static final AttributeKey<String> CHANNEL_ATTR_KEY = AttributeKey.valueOf("test");
public String getCacheId(Channel channel) {
return channel.attr(CHANNEL_ATTR_KEY).get();
}
public void add(String cacheId, Channel channel) {
channel.attr(CHANNEL_ATTR_KEY).set(cacheId);
HashMap<String, Channel> hashMap = CACHE_MAP.get(cacheId);
if (hashMap == null) {
hashMap = new HashMap<>();
}
hashMap.put(channel.id().asShortText(), channel);
CACHE_MAP.put(cacheId, hashMap);
}
public HashMap<String, Channel> get(String cacheId) {
if (cacheId == null) {
return null;
}
return CACHE_MAP.get(cacheId);
}
public void remove(Channel channel) {
String cacheId = getCacheId(channel);
if (cacheId == null) {
return;
}
HashMap<String, Channel> hashMap = CACHE_MAP.get(cacheId);
if (hashMap == null) {
hashMap = new HashMap<>();
}
hashMap.remove(channel.id().asShortText());
CACHE_MAP.put(cacheId, hashMap);
}
}

14
storeroom/src/main/java/com/storeroom/modules/storeroom3d/config/websoket/WebSocketHandler.java

@ -7,6 +7,7 @@ import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.util.AttributeKey;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@ -14,11 +15,17 @@ import org.springframework.stereotype.Component;
@Component
@ChannelHandler.Sharable
@RequiredArgsConstructor
public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketFrame>{
private static final Logger log = LoggerFactory.getLogger(WebSocketHandler.class);
/**
* 一旦连接第一个被执行
* @param ctx
* @throws Exception
*/
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
log.info("handlerAdded 被调用"+ctx.channel().id().asLongText());
@ -26,7 +33,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
NettyConfig.getChannelGroup().add(ctx.channel());
}
/**
* 读取数据
* @param ctx
* @param msg
* @throws Exception
*/
@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {

3
storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/AlarmInfoController.java

@ -7,6 +7,7 @@ import com.storeroom.utils.ApiResponse;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@ -19,7 +20,7 @@ public class AlarmInfoController {
private final AlarmInfoService alarmInfoService;
@AnonymousGetMapping("all")
public ApiResponse<Object> queryAllAlarm() {
public ApiResponse<Object> queryAllAlarm(@RequestParam String storeroomId) {
return ApiResponse.success(alarmInfoService.getAllAlarmInfo());
}

39
storeroom/src/main/java/com/storeroom/modules/storeroom3d/controller/SecurityDoorController.java

@ -0,0 +1,39 @@
package com.storeroom.modules.storeroom3d.controller;
import com.storeroom.annotaion.rest.AnonymousPostMapping;
import com.storeroom.exception.BaseException;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import com.storeroom.modules.storeroom3d.service.SecurityDoorService;
import com.storeroom.utils.ApiResponse;
import com.storeroom.utils.StringUtils;
import com.storeroom.utils.enums.ResponseStatus;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/securitydoor/")
@Api(tags = "门禁日志管理")
@RequiredArgsConstructor
public class SecurityDoorController {
private final SecurityDoorService securityDoorService;
@ApiOperation("创建记录")
@AnonymousPostMapping("create")
public ApiResponse<Object> create(@RequestBody SecurityDoor securityDoor) {
if (StringUtils.isEmpty(securityDoor.getDeviceId())
&& StringUtils.isEmpty(securityDoor.getTid())
&& StringUtils.isEmpty(securityDoor.getAlarmMsg())
&& ObjectUtils.isEmpty(securityDoor.getAlarmLevel())) {
throw new BaseException("必填字段不能为空");
}
securityDoorService.create(securityDoor);
return ApiResponse.success(ResponseStatus.SUCCESS);
}
}

68
storeroom/src/main/java/com/storeroom/modules/storeroom3d/domain/SecurityDoor.java

@ -0,0 +1,68 @@
package com.storeroom.modules.storeroom3d.domain;
import com.storeroom.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Objects;
@Entity
@Getter
@Setter
@Table(name = "security_door")
public class SecurityDoor extends BaseEntity implements Serializable {
@Id
@Column(name = "id")
@NotNull(groups = BaseEntity.Update.class)
@ApiModelProperty(value = "id", hidden = true)
private String id;
@Column(name = "device_id")
@ApiModelProperty(value = "设备id",hidden = true)
private String deviceId;
@Column(name = "tid")
@ApiModelProperty(value = "标签id",hidden = true)
private String tid;
@Column(name = "alarm_event")
@ApiModelProperty(value = "0:出门;1:进门",hidden = true)
private Integer alarmEvent;
@Column(name = "user_id")
@ApiModelProperty(value = "用户id",hidden = true)
private Integer userId;
@Column(name = "alarm_level")
@ApiModelProperty(value = "0:异常;1:正常",hidden = true)
private Integer alarmLevel;
@Column(name = "alarm_msg")
@ApiModelProperty(value = "描述",hidden = true)
private String alarmMsg;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SecurityDoor that = (SecurityDoor) o;
return Objects.equals(id, that.id) && Objects.equals(deviceId, that.deviceId) && Objects.equals(tid, that.tid) && Objects.equals(alarmEvent, that.alarmEvent) && Objects.equals(userId, that.userId) && Objects.equals(alarmLevel, that.alarmLevel) && Objects.equals(alarmMsg, that.alarmMsg);
}
@Override
public int hashCode() {
return Objects.hash(id, deviceId, tid, alarmEvent, userId, alarmLevel, alarmMsg);
}
}

9
storeroom/src/main/java/com/storeroom/modules/storeroom3d/repository/SecurityDoorRepository.java

@ -0,0 +1,9 @@
package com.storeroom.modules.storeroom3d.repository;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface SecurityDoorRepository extends JpaRepository<SecurityDoor, String>, JpaSpecificationExecutor<SecurityDoor> {
}

2
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/AlarmInfoService.java

@ -4,4 +4,6 @@ public interface AlarmInfoService {
Object getAllAlarmInfo();
Object getStoreroomDevice(String storeroomId);
}

8
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/SecurityDoorService.java

@ -0,0 +1,8 @@
package com.storeroom.modules.storeroom3d.service;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
public interface SecurityDoorService {
void create(SecurityDoor securityDoor);
}

7
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/AlarmInfoServiceImpl.java

@ -33,7 +33,7 @@ public class AlarmInfoServiceImpl implements AlarmInfoService {
List<GetCurAlarmDto> alarmDtos = thirdApiService.getAllDeviceAlarm();
List<GetCurAlarmDto> alarmDtos1 = new ArrayList<>();
List<GetCurAlarmDto> alarmDtos2 = alarmDtos.stream().filter(getCurAlarmDto -> Objects.equals(getCurAlarmDto.getDevice_id(), "")).collect(Collectors.toList());
for (int i = 0; i < alarmDtos.size(); i++) {
for (int i = 0; i < alarmDtos2.size(); i++) {
for (int k = 0; k < deviceInfoList.size(); k++) {
if (Objects.equals(alarmDtos.get(i).getDevice_id(), deviceInfoList.get(k).getDeviceId())) {
alarmDtos1.add(alarmDtos.get(i));
@ -45,4 +45,9 @@ public class AlarmInfoServiceImpl implements AlarmInfoService {
return alarmDtos1;
}
@Override
public Object getStoreroomDevice(String storeroomId) {
return null;
}
}

23
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/SecurityDoorServiceImpl.java

@ -0,0 +1,23 @@
package com.storeroom.modules.storeroom3d.service.impl;
import com.storeroom.modules.storeroom3d.domain.SecurityDoor;
import com.storeroom.modules.storeroom3d.repository.SecurityDoorRepository;
import com.storeroom.modules.storeroom3d.service.SecurityDoorService;
import com.storeroom.utils.NanoIdUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class SecurityDoorServiceImpl implements SecurityDoorService {
private final SecurityDoorRepository securityDoorRepository;
@Override
public void create(SecurityDoor securityDoor) {
securityDoor.setId(NanoIdUtils.randomNanoId());
securityDoorRepository.save(securityDoor);
}
}

4
storeroom/src/main/java/com/storeroom/modules/storeroom3d/service/impl/ThirdApiServiceImpl.java

@ -138,8 +138,8 @@ public class ThirdApiServiceImpl implements ThirdApiService {
}
}
});
//PushServiceImpl pushService=new PushServiceImpl();
// pushService.pushMsgToAll(result);
PushServiceImpl pushService = new PushServiceImpl();
pushService.pushMsgToAll(result);
return list;
} else {
throw new BaseException("访问失败" + response.getStatusLine().getStatusCode() + "");

Loading…
Cancel
Save