소스 검색

Merge branch 'master' of http://gogs.efunbox.cn:3000/Rankin/rankin

guozhaoshun 6 년 전
부모
커밋
781ff90fe1

+ 106 - 11
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/LoginController.java

@@ -41,17 +41,16 @@ public class LoginController
         String merchant = request.getHeader("merchant");
         String userAgent = request.getHeader("User-Agent");
 
+
         String ip = HttpUtil.getClientIp(request);
         loginInfoDTO.setIp(ip);
         loginInfoDTO.setTerminal(terminal);
         loginInfoDTO.setMerchant(merchant);
 
+        log.info("login request header : ip={},terminal={},merchant={},user-agent={}", ip, terminal, merchant,userAgent);
         //填充设备信息
         fillDeviceInfo(userAgent, loginInfoDTO);
 
-        log.info("login request header : ip={},terminal={},merchant={},user-agent={}", ip, terminal, merchant);
-
-
         return userService.login(loginInfoDTO);
     }
 
@@ -60,8 +59,13 @@ public class LoginController
     {
         String deviceCode = deviceLoginDTO.getDeviceCode();
         String merchant = request.getHeader("merchant");
-        log.info("refresh request header : deviceCode={}, merchant={}", deviceCode, merchant);
-        return userService.refresh(deviceCode, merchant, Boolean.TRUE);
+        String userAgent = request.getHeader("User-Agent");
+        log.info("refresh request header : deviceCode={}, merchant={},userAgent={}", deviceCode, merchant,userAgent);
+
+        //填充设备信息
+        fillDeviceInfo(userAgent, deviceLoginDTO);
+
+        return userService.refresh(deviceCode, merchant, Boolean.TRUE,deviceLoginDTO);
     }
 
     @RequestMapping(method = RequestMethod.DELETE)
@@ -76,6 +80,79 @@ public class LoginController
      * @param userAgentStr the string of user agent
      * @param loginInfoDTO the login info
      */
+    private void fillDeviceInfo(String userAgentStr, DeviceLoginDTO loginInfoDTO)
+    {
+        if (userAgentStr == "" || userAgentStr == null)
+        {
+            return;
+        }
+        if (loginInfoDTO == null)
+        {
+            return;
+        }
+
+        UserAgent userAgent = UserAgent.parseUserAgentString(userAgentStr);
+
+        //获取浏览器对象
+        Browser browser = userAgent.getBrowser();
+
+        //获取操作系统对象
+        OperatingSystem operatingSystem = userAgent.getOperatingSystem();
+
+        //操作系统名称
+        String osName = operatingSystem.getName();
+        loginInfoDTO.setDeviceName(osName);
+
+        //获取厂商
+        String osMfrs = operatingSystem.getManufacturer().toString();
+        loginInfoDTO.setDeviceMfrs(osMfrs);
+
+        //获取设备类型
+        String deviceType = operatingSystem.getDeviceType().toString();
+        loginInfoDTO.setDeviceType(deviceType);
+
+        //获取设备型号
+        //获取设备型号
+        if ("MOBILE".equals(deviceType))
+        {
+            String split[] = userAgentStr.split("Build/");
+
+            if(split!=null || split.length > 0)
+            {
+                String splitType[] =  split[0].split(";");
+                if(splitType!=null && splitType.length>0)
+                {
+                    loginInfoDTO.setDeviceModel(splitType[splitType.length-1]);
+                }
+
+            }
+
+        }
+        else if ("TABLET".equals(deviceType))
+        {
+            String split[] = userAgentStr.split("Build/");
+
+            if(split!=null || split.length > 0)
+            {
+                String splitType[] =  split[0].split(";");
+                if(splitType!=null && splitType.length>0)
+                {
+                    loginInfoDTO.setDeviceModel(splitType[splitType.length-1]);
+                }
+
+            }
+        }
+        else
+        {
+            loginInfoDTO.setDeviceModel(osName);
+        }
+    }
+
+    /**
+     * Fill device info
+     * @param userAgentStr the string of user agent
+     * @param loginInfoDTO the login info
+     */
     private void fillDeviceInfo(String userAgentStr, LoginInfoDTO loginInfoDTO)
     {
         if (userAgentStr == "" || userAgentStr == null)
@@ -110,13 +187,31 @@ public class LoginController
         //获取设备型号
         if ("MOBILE".equals(deviceType))
         {
-            Pattern pattern = Pattern.compile(";\\s?(\\S*?\\s?\\S*?)\\s?(Build)?/");
-            Matcher matcher = pattern.matcher(userAgentStr);
-            String model = null;
-            if (matcher.find())
+            String split[] = userAgentStr.split("Build/");
+
+            if(split!=null || split.length > 0)
             {
-                model = matcher.group(1).trim();
-                loginInfoDTO.setDeviceModel(model);
+                String splitType[] =  split[0].split(";");
+                if(splitType!=null && splitType.length>0)
+                {
+                    loginInfoDTO.setDeviceModel(splitType[splitType.length-1]);
+                }
+
+            }
+
+        }
+        else if ("TABLET".equals(deviceType))
+        {
+            String split[] = userAgentStr.split("Build/");
+
+            if(split!=null || split.length > 0)
+            {
+                String splitType[] =  split[0].split(";");
+                if(splitType!=null && splitType.length>0)
+                {
+                    loginInfoDTO.setDeviceModel(splitType[splitType.length-1]);
+                }
+
             }
         }
         else

+ 58 - 21
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserService.java

@@ -9,6 +9,7 @@ import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.common.utils.constant.PlatForm;
 import cn.rankin.common.utils.constant.RedisKey;
 import cn.rankin.common.utils.service.RedisService;
+import cn.rankin.data.api.app.dto.DeviceLoginDTO;
 import cn.rankin.data.api.app.dto.LoginInfoDTO;
 import cn.rankin.data.api.app.vo.DeviceUserVo;
 import cn.rankin.data.api.app.vo.ItemVo;
@@ -79,27 +80,7 @@ public class UserService
             return APIResult.error(ApiWebCode.LOGIN_ERROR);
         }
 
-        //操作用户登录设备信息
-        if (deviceName != null && !"".equals(deviceName.trim()))
-        {
-            String uid = userVo.getId();
-            UserDeviceDTO dto = new UserDeviceDTO();
-            dto.setDeviceCode(deviceCode);
-            dto.setDeviceModel(deviceModel);
-            dto.setDeviceType(deviceType);
-            dto.setDeviceMfrs(deviceMfrs);
-            dto.setDeviceName(deviceName);
 
-            int opRet = userClient.opUserDevice(uid,dto);
-            if (opRet == 0)
-            {
-                log.error("Failed to operated user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
-            }
-            else
-            {
-                log.info("Succeed to operating user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
-            }
-        }
 
         String storePassword = userVo.getPassword();
         if (!SecurityManager.validate(loginPassword, storePassword))
@@ -153,6 +134,32 @@ public class UserService
         UserInfoVo userInfoVo = toUserInfoVo(deviceUserVo, true);
         log.info("user={} login success, userInfo={}", eid, JSON.toJSONString(userInfoVo));
 
+
+        //操作用户登录设备信息
+        if (deviceName != null && !"".equals(deviceName.trim()))
+        {
+            UserDeviceDTO dto = new UserDeviceDTO();
+            dto.setDeviceCode(deviceCode);
+            dto.setDeviceModel(deviceModel);
+            dto.setDeviceType(deviceType);
+            dto.setDeviceMfrs(deviceMfrs);
+            dto.setDeviceName(deviceName);
+            if(deviceModel == "" || deviceModel == null)
+            {
+                dto.setDeviceModel("未知");
+            }
+
+            int opRet = userClient.opUserDevice(userId,dto);
+            if (opRet == 0)
+            {
+                log.error("Failed to operated user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", userId, deviceCode, deviceModel, deviceName);
+            }
+            else
+            {
+                log.info("Succeed to operating user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", userId, deviceCode, deviceModel, deviceName);
+            }
+        }
+
         return APIResult.ok(userInfoVo);
     }
 
@@ -230,7 +237,7 @@ public class UserService
         return toDeviceUserVo(userVo, deviceVo);
     }
 
-    public APIResult<UserInfoVo> refresh(String deviceCode, String merchant, Boolean force)
+    public APIResult<UserInfoVo> refresh(String deviceCode, String merchant, Boolean force, DeviceLoginDTO deviceLoginDTO)
     {
 
         List<TerminalDeviceVo> deviceVoList = userClient.findByDeviceCode(deviceCode);
@@ -301,6 +308,36 @@ public class UserService
         refreshToken(deviceUserVo);
         save(deviceUserVo);
 
+        //获取设备台账
+        String deviceModel = deviceLoginDTO.getDeviceModel();
+        String deviceMfrs = deviceLoginDTO.getDeviceMfrs();
+        String deviceName = deviceLoginDTO.getDeviceName();
+        String deviceType = deviceLoginDTO.getDeviceType();
+        //操作用户登录设备信息
+        if (deviceName != null && !"".equals(deviceName.trim()))
+        {
+            UserDeviceDTO dto = new UserDeviceDTO();
+            dto.setDeviceCode(deviceCode);
+            dto.setDeviceModel(deviceModel);
+            dto.setDeviceType(deviceType);
+            dto.setDeviceMfrs(deviceMfrs);
+            dto.setDeviceName(deviceName);
+            if(deviceModel == "" || deviceModel == null)
+            {
+                dto.setDeviceModel("未知");
+            }
+
+            int opRet = userClient.opUserDevice(uid,dto);
+            if (opRet == 0)
+            {
+                log.error("Failed to operated user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
+            }
+            else
+            {
+                log.info("Succeed to operating user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
+            }
+        }
+
         UserInfoVo userInfoVo = toUserInfoVo(deviceUserVo, true);
         return APIResult.ok(userInfoVo);
     }

+ 12 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/app/dto/DeviceLoginDTO.java

@@ -12,4 +12,16 @@ public class DeviceLoginDTO implements Serializable{
     private String deviceCode;
 
     private String merchant;
+
+    //设备名称
+    private String deviceName;
+
+    //设备型号
+    private String deviceModel;
+
+    //设备厂商
+    private String deviceMfrs;
+
+    //设备类型
+    private String deviceType;
 }