459242451@qq.com 3 жил өмнө
parent
commit
78bc61b179

+ 3 - 1
README.md

@@ -80,6 +80,7 @@ Column
 1.黑烟数据库:
 198.17.23.20:3306/smoke_api   root_shipface   @P5zQQMbax8xx
 设备页面:http://198.17.188.6:8091/(正式)              http://119.45.121.229:8090/?opt=1(测试)
+黑烟后台:http://198.17.188.6:8090/  admin/word
 2.嗅探数据库
 198.17.23.18:3306/ais_database  js_test     Js@123456
 设备页面:http://198.17.188.2:81/index.html?opt=1(生产)    http://47.92.161.189:81/index.html?opt=1(测试)    http://198.17.25.32:9011/index.html?opt=1(前置机)
@@ -97,4 +98,5 @@ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 > 记录
 
 - 三子系统ES中共同的字段:mmsi、shipName、destination、berthName、monitorPointName
-- 黑烟提供的接口文档地址:https://yx00mdxxzb.feishu.cn/docs/doccnv5xXUqxHYTqMyhj5UkQjPd#
+- 黑烟提供的接口文档地址:https://yx00mdxxzb.feishu.cn/docs/doccnv5xXUqxHYTqMyhj5UkQjPd#
+- 不过期的token: Authorization:Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjJiNzliMGJjLWIzYzktNDYzNi1hODRiLTQ2NGM2OGM5MTYxNSJ9.QHG8CoKPfGizflQAKXcl8et-PpNdmmwRCwGRnt4jgRkwmZaiG5c4ibNg_oVD1XBL2XIU-oVlkHHRoot4g8Zy6w

+ 6 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/gas/GasCommonController.java

@@ -270,7 +270,7 @@ public class GasCommonController {
         equalsCondition.put("mmsi", "!0");
         Map<String, Object> rangeCondition = new HashMap<>();
         if (StrUtil.isBlank(startTime)) {
-            startTime = DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -3));
+            startTime = DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1));
         }
         rangeCondition.put("createTime", StrUtil.concat(true, "[", startTime, ",", DateUtil.now(), "]"));
         List<String> orderBy = new ArrayList<>();
@@ -285,7 +285,10 @@ public class GasCommonController {
                 ElasticConstants.HEIYAN_SHIP_RECOGNITION);
         List<IllegalInfo> pageList = Convert.toList(IllegalInfo.class, stringObjectMap.get("pageList"));
         // 查询船舶的实时经纬度
-        Map<String, AisShip> aisShipMap = aisShipService.queryDynamicShip(3);
+        Map<String, AisShip> aisShipMap = aisShipService.queryDynamicShip(1);
+        List<AisShip> aisShipAddressList = aisShipService.queryShipAddressList(1);
+        // 组装一段时间内的经纬度数据
+        Map<String, List<String>> collect = aisShipAddressList.stream().collect(Collectors.groupingBy(AisShip::getMmsi, Collectors.mapping(a -> a.getLng() + "," + a.getLat(), Collectors.toList())));
         for (IllegalInfo illegalInfo : pageList) {
             if (StrUtil.isNotBlank(illegalInfo.getMmsi())) {
                 AisShip aisShip = aisShipMap.get(illegalInfo.getMmsi());
@@ -297,6 +300,7 @@ public class GasCommonController {
                     illegalInfo.setSpeed(ObjectUtil.isEmpty(aisShip.getSpeed()) ? "-" : aisShip.getSpeed() + "节");
                     illegalInfo.setCourse(ObjectUtil.isEmpty(aisShip.getCourse()) ? "-" : aisShip.getCourse() + "");
                 }
+                illegalInfo.setLnglat(collect.get(illegalInfo.getMmsi()));
             }
         }
         pageList =

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/job/GetDynamicShip.java

@@ -73,7 +73,7 @@ public class GetDynamicShip {
                 ElasticConstants.AIS_ILLEGAL_SHIP,
                 ElasticConstants.SO2_ALERT,
                 ElasticConstants.HEIYAN_SHIP_RECOGNITION);
-        List<IllegalInfo> weiguiList = Convert.toList(IllegalInfo.class, xianyiMap.get("pageList"));
+        List<IllegalInfo> weiguiList = Convert.toList(IllegalInfo.class, weiguiMap.get("pageList"));
         for (IllegalInfo illegalInfo : weiguiList) {
             if (StrUtil.isNotBlank(illegalInfo.getMmsi()) && !"0".equals(illegalInfo.getMmsi())) {
                 shipMmsi.add(illegalInfo.getMmsi());
@@ -89,7 +89,7 @@ public class GetDynamicShip {
                 ElasticConstants.AIS_ILLEGAL_SHIP,
                 ElasticConstants.SO2_ALERT,
                 ElasticConstants.HEIYAN_SHIP_RECOGNITION);
-        List<IllegalInfo> zhengchangList = Convert.toList(IllegalInfo.class, xianyiMap.get("pageList"));
+        List<IllegalInfo> zhengchangList = Convert.toList(IllegalInfo.class, zhengchangMap.get("pageList"));
         for (IllegalInfo illegalInfo : zhengchangList) {
             if (StrUtil.isNotBlank(illegalInfo.getMmsi()) && !"0".equals(illegalInfo.getMmsi())) {
                 shipMmsi.add(illegalInfo.getMmsi());

+ 7 - 2
ruoyi-admin/src/main/resources/application-prod.yml

@@ -127,10 +127,15 @@ swagger:
 
 # 子平台
 black:
-  snapImgUrl: http://198.17.188.6:8091/api/shipface/snap/imgurl?id=
+  snapImgUrl: http://198.17.23.29:8091/api/shipface/snap/imgurl?id=
 
 # 第三方接口
 third:
   shipEepReportRecInfo: http://198.17.188.111:6201/huiyan/getShipEepReportRec # 船舶进出港记录
   shipBaseInfo: http://198.17.239.239:7001/getInfosByCondition # 船舶基本信息
-  shipDynamicInfo: http://198.17.239.239:9004/getInfosByMmsi?mmsi= #船舶动态数据信息
+  shipDynamicInfo: http://198.17.239.239:9004/getInfosByMmsi?mmsi= #船舶动态数据信息
+  userTokenInfo: http://36.156.155.131:8099/api/portal/user/userInfo # 大交管用户信息
+  userLogin: http://36.156.155.131:8099/api/main/mobile/login # 总和平台登录接口
+
+system:
+  security: self # 走何种校验方式 self自身用户密码校验;third第三方登录校验

+ 6 - 1
ruoyi-admin/src/main/resources/application-test.yml

@@ -129,4 +129,9 @@ black:
 third:
   shipEepReportRecInfo: http://198.17.188.111:6201/huiyan/getShipEepReportRec # 船舶进出港记录
   shipBaseInfo: http://198.17.239.239:7001/getInfosByCondition # 船舶基本信息
-  shipDynamicInfo: http://198.17.239.239:9004/getInfosByMmsi?mmsi= #船舶动态数据信息
+  shipDynamicInfo: http://198.17.239.239:9004/getInfosByMmsi?mmsi= #船舶动态数据信息
+  userTokenInfo: http://36.156.155.131:8099/api/portal/user/userInfo # 大交管用户信息
+  userLogin: http://36.156.155.131:8099/api/main/mobile/login # 总和平台登录接口
+
+system:
+  security: third # 走何种校验方式 self自身用户密码校验;third第三方登录校验

+ 8 - 4
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -2,11 +2,10 @@ package com.ruoyi.common.constant;
 
 /**
  * 通用常量信息
- * 
+ *
  * @author ruoyi
  */
-public class Constants
-{
+public class Constants {
     /**
      * UTF-8 字符集
      */
@@ -61,7 +60,7 @@ public class Constants
      * 登录用户 redis key
      */
     public static final String LOGIN_TOKEN_KEY = "login_tokens:";
-    
+
     /**
      * 防重提交 redis key
      */
@@ -131,4 +130,9 @@ public class Constants
      * RMI 远程方法调用
      */
     public static final String LOOKUP_RMI = "rmi://";
+
+    /**
+     * 第三方用户默认密码
+     */
+    public static final String DEFAULT_PASSWORD = "JSmsa@12395";
 }

+ 88 - 39
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -1,13 +1,11 @@
 package com.ruoyi.framework.web.service;
 
-import javax.annotation.Resource;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.stereotype.Component;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.redis.RedisCache;
@@ -17,21 +15,32 @@ import com.ruoyi.common.exception.user.CaptchaExpireException;
 import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
 
 /**
  * 登录校验方法
- * 
+ *
  * @author ruoyi
  */
 @Component
-public class SysLoginService
-{
+@Slf4j
+public class SysLoginService {
     @Autowired
     private TokenService tokenService;
 
@@ -40,47 +49,90 @@ public class SysLoginService
 
     @Autowired
     private RedisCache redisCache;
-    
+
     @Autowired
     private ISysUserService userService;
 
     @Autowired
     private ISysConfigService configService;
 
+    @Value("${system.security}")
+    private String thirdSecurity;
+
+    @Value("${third.userLogin}")
+    private String userLogin;
+
+    @Value("${token.filterUser}")
+    private String filterUser;
+
+    @Value("${third.userTokenInfo}")
+    private String dajiaoguan_token;
+
     /**
      * 登录验证
-     * 
+     *
      * @param username 用户名
      * @param password 密码
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public String login(String username, String password, String code, String uuid)
-    {
+    public String login(String username, String password, String code, String uuid) {
         boolean captchaOnOff = configService.selectCaptchaOnOff();
         // 验证码开关
-        if (captchaOnOff)
-        {
+        if (captchaOnOff) {
             validateCapcha(username, code, uuid);
         }
         // 用户验证
         Authentication authentication = null;
-        try
-        {
+        try {
+            if ("third".equals(thirdSecurity) && !StrUtil.contains(filterUser, username)) {
+                // 走第三方的校验规则,同时将第三方的password设置为系统自动生成的
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.set("account", username);
+                jsonObject.set("password", password);
+                String post = HttpUtil.post(userLogin, jsonObject.toString());
+                JSONObject postJson = JSONUtil.parseObj(post);
+                if (postJson.getInt("code") == 200) {
+                    // 成功
+                    password = Constants.DEFAULT_PASSWORD;
+                    // 保存用户
+                    if (UserConstants.UNIQUE.equals(userService.checkUserNameUnique(username))) {
+                        // 查询第三方用户信息
+                        String getResult = HttpUtil.createGet(dajiaoguan_token).header("Authorization", Constants.TOKEN_PREFIX + postJson.getStr("data")).execute().body();
+                        JSONObject getJson = JSONUtil.parseObj(getResult);
+                        int infoCode = getJson.getInt("code");
+                        if (infoCode == 1) {
+                            SysUser sysUser = new SysUser();
+                            // 将此用户新增入系统
+                            JSONObject data = getJson.getJSONObject("data");
+                            sysUser.setUserId(data.getLong("userId"));
+                            sysUser.setUserName(username);
+                            sysUser.setDeptId(data.getLong("depId"));
+                            sysUser.setPhonenumber(data.getStr("phone"));
+                            sysUser.setDelFlag("0");
+                            sysUser.setStatus("0");
+                            sysUser.setNickName(data.getStr("name"));
+                            // 新加入的用户属于普通用户角色
+                            sysUser.setRoleIds(new Long[]{2L});
+                            sysUser.setPassword(SecurityUtils.encryptPassword(password));
+                            userService.insertUser(sysUser);
+                        }
+                    }
+                } else {
+                    log.info("第三方校验登录失败:{}", postJson);
+                    AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                    throw new UserPasswordNotMatchException();
+                }
+            }
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager
                     .authenticate(new UsernamePasswordAuthenticationToken(username, password));
-        }
-        catch (Exception e)
-        {
-            if (e instanceof BadCredentialsException)
-            {
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                 throw new UserPasswordNotMatchException();
-            }
-            else
-            {
+            } else {
                 AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                 throw new CustomException(e.getMessage());
             }
@@ -94,24 +146,21 @@ public class SysLoginService
 
     /**
      * 校验验证码
-     * 
+     *
      * @param username 用户名
-     * @param code 验证码
-     * @param uuid 唯一标识
+     * @param code     验证码
+     * @param uuid     唯一标识
      * @return 结果
      */
-    public void validateCapcha(String username, String code, String uuid)
-    {
+    public void validateCapcha(String username, String code, String uuid) {
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
         String captcha = redisCache.getCacheObject(verifyKey);
         redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
+        if (captcha == null) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
             throw new CaptchaExpireException();
         }
-        if (!code.equalsIgnoreCase(captcha))
-        {
+        if (!code.equalsIgnoreCase(captcha)) {
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
             throw new CaptchaException();
         }
@@ -120,10 +169,10 @@ public class SysLoginService
     /**
      * 记录登录信息
      */
-    public void recordLoginInfo(SysUser user)
-    {
+    public void recordLoginInfo(SysUser user) {
         user.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
         user.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(user);
     }
+
 }

+ 63 - 43
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java

@@ -1,13 +1,10 @@
 package com.ruoyi.framework.web.service;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.http.HttpServletRequest;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.ServletUtils;
@@ -15,10 +12,19 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.ip.AddressUtils;
 import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.system.service.ISysUserService;
 import eu.bitwalker.useragentutils.UserAgent;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * token验证处理
@@ -26,8 +32,7 @@ import io.jsonwebtoken.SignatureAlgorithm;
  * @author ruoyi
  */
 @Component
-public class TokenService
-{
+public class TokenService {
     // 令牌自定义标识
     @Value("${token.header}")
     private String header;
@@ -40,6 +45,9 @@ public class TokenService
     @Value("${token.expireTime}")
     private int expireTime;
 
+    @Value("${third.userTokenInfo}")
+    private String dajiaoguan_token;
+
     protected static final long MILLIS_SECOND = 1000;
 
     protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
@@ -49,17 +57,44 @@ public class TokenService
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private ISysUserService userService;
+
     /**
      * 获取用户身份信息
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser(HttpServletRequest request)
-    {
+    public LoginUser getLoginUser(HttpServletRequest request) {
         // 获取请求携带的令牌
         String token = getToken(request);
-        if (StringUtils.isNotEmpty(token))
-        {
+        // 处理外部渠道过来的token数据
+        if (StrUtil.isNotBlank(request.getHeader("FROM_OUT")) && StrUtil.isNotBlank(token)) {
+            // 通过token换取用户信息
+            String getResult = HttpUtil.createGet(dajiaoguan_token).header("Authorization", token).execute().body();
+            JSONObject jsonObject = JSONObject.parseObject(getResult);
+            int code = jsonObject.getInteger("code");
+            if (code == 1) {
+                // 查询系统中是否存在该用户
+                SysUser sysUser = userService.selectUserByUserName("admin");
+                if (sysUser == null) {
+                    // 将此用户新增入系统
+                    sysUser = new SysUser();
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    sysUser.setUserId(data.getLong("userId"));
+                    sysUser.setUserName(data.getString("phone"));
+                    sysUser.setPhonenumber(data.getString("phone"));
+                    sysUser.setDelFlag("0");
+                    sysUser.setStatus("0");
+                    sysUser.setNickName(data.getString("name"));
+                    // 新加入的用户属于普通用户角色
+                    sysUser.setRoleIds(new Long[]{2L});
+                    userService.insertUser(sysUser);
+                } else {
+//                    redisCache.
+                }
+            }
+        } else if (StringUtils.isNotEmpty(token)) {
             Claims claims = parseToken(token);
             // 解析对应的权限以及用户信息
             String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
@@ -73,10 +108,8 @@ public class TokenService
     /**
      * 设置用户身份信息
      */
-    public void setLoginUser(LoginUser loginUser)
-    {
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
-        {
+    public void setLoginUser(LoginUser loginUser) {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) {
             refreshToken(loginUser);
         }
     }
@@ -84,10 +117,8 @@ public class TokenService
     /**
      * 删除用户身份信息
      */
-    public void delLoginUser(String token)
-    {
-        if (StringUtils.isNotEmpty(token))
-        {
+    public void delLoginUser(String token) {
+        if (StringUtils.isNotEmpty(token)) {
             String userKey = getTokenKey(token);
             redisCache.deleteObject(userKey);
         }
@@ -99,8 +130,7 @@ public class TokenService
      * @param loginUser 用户信息
      * @return 令牌
      */
-    public String createToken(LoginUser loginUser)
-    {
+    public String createToken(LoginUser loginUser) {
         String token = IdUtils.fastUUID();
         loginUser.setToken(token);
         setUserAgent(loginUser);
@@ -117,12 +147,10 @@ public class TokenService
      * @param loginUser
      * @return 令牌
      */
-    public void verifyToken(LoginUser loginUser)
-    {
+    public void verifyToken(LoginUser loginUser) {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
-        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
-        {
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
             refreshToken(loginUser);
         }
     }
@@ -132,8 +160,7 @@ public class TokenService
      *
      * @param loginUser 登录信息
      */
-    public void refreshToken(LoginUser loginUser)
-    {
+    public void refreshToken(LoginUser loginUser) {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
@@ -146,8 +173,7 @@ public class TokenService
      *
      * @param loginUser 登录信息
      */
-    public void setUserAgent(LoginUser loginUser)
-    {
+    public void setUserAgent(LoginUser loginUser) {
         UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
         String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
         loginUser.setIpaddr(ip);
@@ -162,8 +188,7 @@ public class TokenService
      * @param claims 数据声明
      * @return 令牌
      */
-    private String createToken(Map<String, Object> claims)
-    {
+    private String createToken(Map<String, Object> claims) {
         String token = Jwts.builder()
                 .setClaims(claims)
                 .signWith(SignatureAlgorithm.HS512, secret).compact();
@@ -176,8 +201,7 @@ public class TokenService
      * @param token 令牌
      * @return 数据声明
      */
-    private Claims parseToken(String token)
-    {
+    private Claims parseToken(String token) {
         return Jwts.parser()
                 .setSigningKey(secret)
                 .parseClaimsJws(token)
@@ -190,8 +214,7 @@ public class TokenService
      * @param token 令牌
      * @return 用户名
      */
-    public String getUsernameFromToken(String token)
-    {
+    public String getUsernameFromToken(String token) {
         Claims claims = parseToken(token);
         return claims.getSubject();
     }
@@ -202,18 +225,15 @@ public class TokenService
      * @param request
      * @return token
      */
-    private String getToken(HttpServletRequest request)
-    {
+    private String getToken(HttpServletRequest request) {
         String token = request.getHeader(header);
-        if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
-        {
+        if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
             token = token.replace(Constants.TOKEN_PREFIX, "");
         }
         return token;
     }
 
-    private String getTokenKey(String uuid)
-    {
+    private String getTokenKey(String uuid) {
         return Constants.LOGIN_TOKEN_KEY + uuid;
     }
 }

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/IllegalInfo.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 嫌疑船舶
@@ -40,6 +41,8 @@ public class IllegalInfo {
     // 船舶实时经纬度
     private BigDecimal lat;
 
+    private List<String> lnglat;
+
     // 船舶实时经纬度上传时间
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date receive;

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AisShipMapper.java

@@ -4,6 +4,7 @@ import com.ruoyi.system.domain.AisShip;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -18,4 +19,6 @@ public interface AisShipMapper {
     Map<String, AisShip> queryDynamicShip(@Param("day") int i);
 
     void deleteByDay(@Param("day") int day);
+
+    List<AisShip> queryShipAddressList(@Param("day") int i);
 }

+ 3 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IAisShipService.java

@@ -2,6 +2,7 @@ package com.ruoyi.system.service;
 
 import com.ruoyi.system.domain.AisShip;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -14,4 +15,6 @@ public interface IAisShipService {
     Map<String, AisShip> queryDynamicShip(int i);
 
     void deleteByDay(int day);
+
+    List<AisShip> queryShipAddressList(int i);
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AisShipServiceImpl.java

@@ -6,6 +6,7 @@ import com.ruoyi.system.service.IAisShipService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -26,6 +27,11 @@ public class AisShipServiceImpl implements IAisShipService {
     }
 
     @Override
+    public List<AisShip> queryShipAddressList(int i) {
+        return aisShipMapper.queryShipAddressList(i);
+    }
+
+    @Override
     public void deleteByDay(int day) {
         aisShipMapper.deleteByDay(day);
     }

+ 9 - 0
ruoyi-system/src/main/resources/mapper/system/AisShipMapper.xml

@@ -32,4 +32,13 @@
         GROUP BY t.mmsi
     </select>
 
+    <select id="queryShipAddressList" resultType="com.ruoyi.system.domain.AisShip">
+        SELECT mmsi,
+               lng,
+               lat
+        FROM ais_ship
+        WHERE DATE_SUB(CURDATE(), INTERVAL #{day} DAY) &lt;= date (receive)
+        order BY receive DESC
+    </select>
+
 </mapper>

+ 1 - 1
ruoyi-ui/src/views/home.vue

@@ -118,7 +118,7 @@
       <!-- 9黑烟;10光谱http://101.133.159.237:8087/device.html?opt=1;11嗅探http://198.17.188.2:81/index.html?opt=1 -->
       <iframe style="height:350rem;width:100%" v-show="showTable==9" marginwidth="0" marginheight="0" vspace="0"
               hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" frameborder="0" name="showHere"
-              src="http://198.17.188.6:8091/?opt=1"
+              src="http://198.17.23.29:8091/?opt=1"
       ></iframe>
       <iframe style="height:350rem;width:100%" v-show="showTable==10" marginwidth="0" marginheight="0" vspace="0"
               hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" frameborder="0" name="showHere"