Browse Source

后端ip接口

master
[yxf] 3 weeks ago
parent
commit
dabd76298b
  1. 26
      im-platform/src/main/java/com/bx/implatform/controller/UserController.java
  2. 6
      im-platform/src/main/java/com/bx/implatform/entity/AutoReply.java
  3. 1
      im-platform/src/main/java/com/bx/implatform/entity/PlatformConfiguration.java
  4. 1
      im-platform/src/main/java/com/bx/implatform/entity/QuickReply.java
  5. 46
      im-platform/src/main/java/com/bx/implatform/util/IpLocationUtil.java
  6. 4
      im-platform/src/main/java/com/bx/implatform/vo/AutoReplyVO.java
  7. 4
      im-platform/src/main/java/com/bx/implatform/vo/QuickReplyVO.java

26
im-platform/src/main/java/com/bx/implatform/controller/UserController.java

@ -13,7 +13,9 @@ import com.bx.implatform.service.UserService;
import com.bx.implatform.session.SessionContext;
import com.bx.implatform.session.UserSession;
import com.bx.implatform.util.BeanUtils;
import com.bx.implatform.util.IpLocationUtil;
import com.bx.implatform.vo.OnlineTerminalVO;
import com.bx.implatform.vo.SystemMessageVO;
import com.bx.implatform.vo.UserVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -26,6 +28,8 @@ import com.bx.implatform.enums.ResultCode;
import com.alibaba.fastjson.JSON;
import com.bx.imcommon.util.JwtUtil;
import com.bx.implatform.config.props.JwtProperties;
import com.bx.imclient.IMClient;
import com.bx.imcommon.model.IMSystemMessage;
import java.util.*;
import java.util.stream.Collectors;
@ -40,6 +44,8 @@ public class UserController {
private final UserService userService;
private final JwtProperties jwtProperties;
private final IMClient imClient;
private final IpLocationUtil ipLocationUtil;
@GetMapping("/terminal/online")
@Operation(summary = "判断用户哪个终端在线", description = "返回在线的用户id的终端集合")
@ -285,13 +291,22 @@ public class UserController {
return ResultUtils.error(ResultCode.XSS_PARAM_ERROR, "目标用户不存在");
}
// 发送强制下线消息(0报错)
SystemMessageVO msgVo = new SystemMessageVO();
msgVo.setType(2);
IMSystemMessage<SystemMessageVO> systemMessage = new IMSystemMessage<>();
systemMessage.getRecvIds().add(targetUserId);
systemMessage.setData(msgVo);
imClient.sendSystemMessage(systemMessage);
UserSession newSession = BeanUtils.copyProperties(targetUser, UserSession.class);
newSession.setUserId(targetUser.getId());
newSession.setTerminal(terminal);
String strJson = JSON.toJSONString(newSession);
String accessToken = JwtUtil.sign(targetUser.getId(), strJson,
String accessToken = JwtUtil.sign(targetUserId, strJson,
jwtProperties.getAccessTokenExpireIn(), jwtProperties.getAccessTokenSecret());
String refreshToken = JwtUtil.sign(targetUser.getId(), strJson,
String refreshToken = JwtUtil.sign(targetUserId, strJson,
jwtProperties.getRefreshTokenExpireIn(), jwtProperties.getRefreshTokenSecret());
LoginVO vo = new LoginVO();
@ -338,4 +353,11 @@ public class UserController {
return ResultUtils.success("移除成功");
}
@GetMapping("/ip/location")
@Operation(summary = "获取IP地理位置(中文)")
public Result<String> getIpLocation(@RequestParam("ip") String ip) {
String location = ipLocationUtil.getIpLocation(ip);
return ResultUtils.success(location,"获取成功");
}
}

6
im-platform/src/main/java/com/bx/implatform/entity/AutoReply.java

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@TableName("im_auto_reply")
@ -17,8 +17,8 @@ public class AutoReply {
private String replyTitle;
private String replyContent;
private String remark;
private LocalDateTime createdTime;
private LocalDateTime updatedTime;
private Date createdTime;
private Date updatedTime;
private Long creatorId;
private Long updaterId;
}

1
im-platform/src/main/java/com/bx/implatform/entity/PlatformConfiguration.java

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("im_platform_configuration")

1
im-platform/src/main/java/com/bx/implatform/entity/QuickReply.java

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("im_quick_reply")

46
im-platform/src/main/java/com/bx/implatform/util/IpLocationUtil.java

@ -0,0 +1,46 @@
package com.bx.implatform.util;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@RequiredArgsConstructor
public class IpLocationUtil {
private static final String IP_API_URL = "http://ip-api.com/json/{ip}?lang=zh-CN";
public String getIpLocation(String ip) {
try {
String url = IP_API_URL.replace("{ip}", ip);
HttpResponse response = HttpRequest.get(url)
.timeout(5000)
.execute();
String body = response.body();
JSONObject result = JSONUtil.parseObj(body);
if (!"success".equals(result.getStr("status"))) {
log.warn("IP查询失败, ip:{}, res:{}", ip, body);
return "";
}
String country = result.getStr("country", "");
String regionName = result.getStr("regionName", "");
String city = result.getStr("city", "");
// 拼接中文地址
return (country + " " + regionName + " " + city).trim();
} catch (Exception e) {
log.error("IP地理位置查询异常, ip:{}", ip, e);
return "";
}
}
}

4
im-platform/src/main/java/com/bx/implatform/vo/AutoReplyVO.java

@ -1,7 +1,7 @@
package com.bx.implatform.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class AutoReplyVO {
@ -12,5 +12,5 @@ public class AutoReplyVO {
private String replyTitle;
private String replyContent;
private String remark;
private LocalDateTime createdTime;
private Date createdTime;
}

4
im-platform/src/main/java/com/bx/implatform/vo/QuickReplyVO.java

@ -1,7 +1,7 @@
package com.bx.implatform.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class QuickReplyVO {
@ -12,5 +12,5 @@ public class QuickReplyVO {
private String replyTitle;
private String replyContent;
private String remark;
private LocalDateTime createdTime;
private Date createdTime;
}
Loading…
Cancel
Save