소스 검색

Merge remote-tracking branch 'origin/master'

guozhaoshun 6 년 전
부모
커밋
8627cc38ed

+ 6 - 0
rankin-api-web/pom.xml

@@ -65,6 +65,12 @@
             <artifactId>rankin-data-api</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
+
+        <dependency>
+        <groupId>eu.bitwalker</groupId>
+        <artifactId>UserAgentUtils</artifactId>
+        <version>1.21</version>
+         </dependency>
 	</dependencies>
 
 	<dependencyManagement>

+ 52 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/ApiWebMain.java

@@ -0,0 +1,52 @@
+package cn.rankin.apiweb;
+
+
+import eu.bitwalker.useragentutils.Browser;
+import eu.bitwalker.useragentutils.OperatingSystem;
+import eu.bitwalker.useragentutils.UserAgent;
+
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ApiWebMain
+{
+
+    public static void main(String[] args) {
+        String userAgentStr = "ser-agent=Mozilla/5.0 (Linux; Android 5.0.2; sdk_google_atv_x86 Build/LSY64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36";
+        UserAgent userAgent = UserAgent.parseUserAgentString(userAgentStr);
+        //获取浏览器对象
+        Browser browser = userAgent.getBrowser();
+        //获取操作系统对象
+        OperatingSystem operatingSystem = userAgent.getOperatingSystem();
+
+        //操作系统
+        String osName = operatingSystem.getName();
+        //操作系统设备类型
+        System.out.println("操作系统名:"+operatingSystem.getName());
+        System.out.println("访问设备类型:"+operatingSystem.getDeviceType());
+        System.out.println("操作系统家族:"+operatingSystem.getGroup());
+        System.out.println("操作系统生产厂商:"+operatingSystem.getManufacturer());
+
+        String  eviceType = operatingSystem.getDeviceType().toString();
+
+        if("MOBILE".equals(eviceType))
+        {
+            Pattern pattern = Pattern.compile(";\\s?(\\S*?\\s?\\S*?)\\s?(Build)?/");
+            Matcher matcher = pattern.matcher(userAgentStr);
+            String model = null;
+            if (matcher.find())
+            {
+                model = matcher.group(1).trim();
+                System.out.println("操作系统生产厂商:"+model);
+            }
+        }
+        else if("WINDOWS".equals(eviceType))
+        {
+
+        }
+
+    }
+
+
+}

+ 77 - 8
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/LoginController.java

@@ -8,6 +8,9 @@ import cn.rankin.common.utils.util.HttpUtil;
 import cn.rankin.data.api.app.dto.DeviceLoginDTO;
 import cn.rankin.data.api.app.dto.LoginInfoDTO;
 import cn.rankin.data.api.app.vo.UserInfoVo;
+import eu.bitwalker.useragentutils.Browser;
+import eu.bitwalker.useragentutils.OperatingSystem;
+import eu.bitwalker.useragentutils.UserAgent;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -17,32 +20,43 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 @Slf4j
 @RestController
 @RequestMapping(value = "/token")
-public class LoginController {
+public class LoginController
+{
 
     @Autowired
     private UserService userService;
 
     @RequestMapping(method = RequestMethod.POST)
-    public APIResult<UserInfoVo> login(HttpServletRequest request, @Valid @RequestBody LoginInfoDTO loginInfoDTO) {
+    public APIResult<UserInfoVo> login(HttpServletRequest request, @Valid @RequestBody LoginInfoDTO loginInfoDTO)
+    {
+
+        String terminal = request.getHeader("terminal");
+        String merchant = request.getHeader("merchant");
+        String userAgent = request.getHeader("User-Agent");
 
         String ip = HttpUtil.getClientIp(request);
         loginInfoDTO.setIp(ip);
-        loginInfoDTO.setTerminal(request.getHeader("terminal"));
-        loginInfoDTO.setMerchant(request.getHeader("merchant"));
+        loginInfoDTO.setTerminal(terminal);
+        loginInfoDTO.setMerchant(merchant);
 
+        //填充设备信息
+        fillDeviceInfo(userAgent, loginInfoDTO);
 
-        log.info("login request header:user-agent={}",request.getHeader("User-Agent"));
+        log.info("login request header : ip={},terminal={},merchant={},user-agent={}", ip, terminal, merchant, userAgent);
 
 
-        log.info("login request header : ip={},terminal={},merchant={}",ip , request.getHeader("terminal"), request.getHeader("merchant"));
         return userService.login(loginInfoDTO);
     }
 
     @RequestMapping(method = RequestMethod.PUT)
-    public APIResult<UserInfoVo> refresh(HttpServletRequest request, @RequestBody DeviceLoginDTO deviceLoginDTO) {
+    public APIResult<UserInfoVo> refresh(HttpServletRequest request, @RequestBody DeviceLoginDTO deviceLoginDTO)
+    {
         String deviceCode = deviceLoginDTO.getDeviceCode();
         String merchant = request.getHeader("merchant");
         log.info("refresh request header : deviceCode={}, merchant={}", deviceCode, merchant);
@@ -50,9 +64,64 @@ public class LoginController {
     }
 
     @RequestMapping(method = RequestMethod.DELETE)
-    public APIResult<Boolean> logout(@RequestHeader GlobalHeader globalHeader) {
+    public APIResult<Boolean> logout(@RequestHeader GlobalHeader globalHeader)
+    {
         String userId = globalHeader.getUid();
         return userService.logout(userId);
     }
 
+    /**
+     * 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)
+        {
+            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))
+        {
+            Pattern pattern = Pattern.compile(";\\s?(\\S*?\\s?\\S*?)\\s?(Build)?/");
+            Matcher matcher = pattern.matcher(userAgentStr);
+            String model = null;
+            if (matcher.find())
+            {
+                model = matcher.group(1).trim();
+                loginInfoDTO.setDeviceModel(model);
+            }
+        }
+        else
+        {
+            loginInfoDTO.setDeviceModel(osName);
+        }
+    }
+
 }

+ 42 - 26
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserClient.java

@@ -17,7 +17,8 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 @FeignClient(name = "${service.user.name}", fallback = UserClient.UserServiceHystrix.class)
-public interface UserClient {
+public interface UserClient
+{
 
     @RequestMapping(value = "/user/code/{code}", method = RequestMethod.GET)
     APIResult<TerminalUserVo> loadUserByEid(@PathVariable("code") String code);
@@ -55,97 +56,112 @@ public interface UserClient {
                                                      @RequestParam("pageSize") Integer pageSize);
 
     @RequestMapping(value = "/userTag/{tagId}", method = RequestMethod.GET)
-    UserTag findUserTagById(@PathVariable("tagId")  String tagId);
+    UserTag findUserTagById(@PathVariable("tagId") String tagId);
 
 
-    @RequestMapping(value = "/userDevice/setUserDevice/{uid}", method = RequestMethod.GET)
-    boolean setUserDevice(@PathVariable("uid")  String uid,
-                                 @RequestParam("deviceCode") String deviceCode,
-                                 @RequestParam("deviceMode") String deviceMode,
-                                @RequestParam("deviceMfrs") String deviceMfrs,
-                                @RequestParam("deviceBrand") String deviceBrand);
+    @RequestMapping(value = "/userDevice/op/{uid}", method = RequestMethod.GET)
+    int opUserDevice(@PathVariable("uid") String uid,
+                          @RequestParam("deviceCode") String deviceCode,
+                          @RequestParam("deviceMode") String deviceMode,
+                          @RequestParam("deviceMfrs") String deviceMfrs,
+                          @RequestParam("deviceName") String deviceName,
+                          @RequestParam("deviceType") String deviceType);
 
 
     @RequestMapping(value = "/userTagProductRelation/page/pids", method = RequestMethod.POST)
     Page<UserTagProductRelation> findRelations(@RequestParam("userTagId") String userTagId,
                                                @RequestBody List<String> productIdList,
-                                               @RequestParam("pageNo")  Integer pageNo,
-                                               @RequestParam("pageSize")  Integer pageSize);
+                                               @RequestParam("pageNo") Integer pageNo,
+                                               @RequestParam("pageSize") Integer pageSize);
 
     @Component
-    class UserServiceHystrix implements UserClient {
+    class UserServiceHystrix implements UserClient
+    {
 
         @Override
-        public APIResult loadUserByEid(String code) {
+        public APIResult loadUserByEid(String code)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public APIResult deviceBind(TerminalDeviceDTO terminalDeviceDTO) {
+        public APIResult deviceBind(TerminalDeviceDTO terminalDeviceDTO)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public APIResult deviceUnbind(String userId) {
+        public APIResult deviceUnbind(String userId)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public APIResult findDeviceByUid(String uid) {
+        public APIResult findDeviceByUid(String uid)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public APIResult findUserById(String id) {
+        public APIResult findUserById(String id)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public List<TerminalDeviceVo> findByDeviceCode(String deviceCode) {
+        public List<TerminalDeviceVo> findByDeviceCode(String deviceCode)
+        {
             return null;
         }
 
         @Override
-        public APIResult<WhiteUserVo> findWhiteUserById(String userId) {
+        public APIResult<WhiteUserVo> findWhiteUserById(String userId)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public List<UserRecommend> getUserRecommendCourses(String uid) {
+        public List<UserRecommend> getUserRecommendCourses(String uid)
+        {
             return null;
         }
 
         @Override
-        public List<UserTag> findUserTagByCodeUid(String code, String uid) {
+        public List<UserTag> findUserTagByCodeUid(String code, String uid)
+        {
             return null;
         }
 
         @Override
-        public APIResult updateDeviceBind(TerminalDeviceDTO deviceDTO) {
+        public APIResult updateDeviceBind(TerminalDeviceDTO deviceDTO)
+        {
             return APIResult.error(ApiWebCode.SERVER_ERROR);
         }
 
         @Override
-        public Page<UserTagProductRelation> findPageByUserTagId(String userTagId, Integer pageNo, Integer pageSize) {
+        public Page<UserTagProductRelation> findPageByUserTagId(String userTagId, Integer pageNo, Integer pageSize)
+        {
             return null;
         }
 
         @Override
-        public UserTag findUserTagById(String tagId) {
+        public UserTag findUserTagById(String tagId)
+        {
             return null;
         }
 
         @Override
-        public boolean setUserDevice(String uid, String deviceCode, String deviceMode,String deviceMfrs,String deviceBrand)
+        public int opUserDevice(String uid, String deviceCode, String deviceMode, String deviceMfrs, String deviceName,String deviceType)
         {
-            return true;
+            return 0;
         }
 
         @Override
         public Page<UserTagProductRelation> findRelations(String userTagId,
                                                           List<String> productIdList,
                                                           Integer pageNo,
-                                                          Integer pageSize) {
+                                                          Integer pageSize)
+        {
             return null;
         }
 

+ 120 - 57
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserService.java

@@ -37,7 +37,8 @@ import java.util.Map;
 
 @Service
 @Slf4j
-public class UserService {
+public class UserService
+{
 
     public final static String USER_FORMAT_KEY = RedisKey.USER_FORMAT_KEY;
 
@@ -56,11 +57,13 @@ public class UserService {
     @Autowired
     private RedisService redisService;
 
-    public APIResult<UserInfoVo> login(LoginInfoDTO loginInfoDTO) {
+    public APIResult<UserInfoVo> login(LoginInfoDTO loginInfoDTO)
+    {
         String deviceCode = loginInfoDTO.getDeviceCode();
         String deviceModel = loginInfoDTO.getDeviceModel();
         String deviceMfrs = loginInfoDTO.getDeviceMfrs();
-        String deviceBrand = loginInfoDTO.getDeviceBrand();
+        String deviceName = loginInfoDTO.getDeviceName();
+        String deviceType = loginInfoDTO.getDeviceType();
 
         String merchant = loginInfoDTO.getMerchant();
         String eid = loginInfoDTO.getEid();
@@ -69,20 +72,30 @@ public class UserService {
 
         APIResult<TerminalUserVo> userVoAPIResult = userClient.loadUserByEid(eid);
         TerminalUserVo userVo = userVoAPIResult.getData();
-        if (!userVoAPIResult.getSuccess()) {
+        if (!userVoAPIResult.getSuccess())
+        {
             log.error("load user api error");
             return APIResult.error(ApiWebCode.LOGIN_ERROR);
         }
 
-        //设置用户登录设备信息
-        if(deviceModel != null && !"".equals(deviceModel.trim()))
+        //操作用户登录设备信息
+        if (deviceName != null && !"".equals(deviceName.trim()))
         {
             String uid = userVo.getId();
-            userClient.setUserDevice(uid,deviceCode,deviceModel,deviceMfrs,deviceBrand);
+            int opRet = userClient.opUserDevice(uid, deviceCode, deviceModel, deviceMfrs, deviceName, deviceType);
+            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)) {
+        if (!SecurityManager.validate(loginPassword, storePassword))
+        {
             log.error("密码校验错误, loginPassword={}, storePassword={}", loginPassword, storePassword);
             return APIResult.error(ApiWebCode.PASSWORD_ERROR);
         }
@@ -98,16 +111,20 @@ public class UserService {
         String terminal = loginInfoDTO.getTerminal();
 
         // 网页端登陆在40分钟后可以踢掉对方网页登陆
-        if (PlatForm.WEB.equals(terminal)) {
+        if (PlatForm.WEB.equals(terminal))
+        {
             String key = getUserFormatKey(userId);
             DeviceUserVo deviceUserVo = (DeviceUserVo) redisService.get(key);
-            if (deviceUserVo != null ) {
+            if (deviceUserVo != null)
+            {
                 Date refreshAt = deviceUserVo.getRefreshAt();
                 String lastTerminal = deviceUserVo.getTerminal();
-                if (DateUtils.addSeconds(refreshAt, forceLoginInterval).before(new Date()) && PlatForm.WEB.equals(lastTerminal)) {
+                if (DateUtils.addSeconds(refreshAt, forceLoginInterval).before(new Date()) && PlatForm.WEB.equals(lastTerminal))
+                {
                     log.info("网页端强制登陆, deviceCode={}, eid={}", deviceCode, eid);
                     APIResult<Boolean> forceLogoutResult = this.logout(userId);
-                    if (!forceLogoutResult.getSuccess()) {
+                    if (!forceLogoutResult.getSuccess())
+                    {
                         return APIResult.error(new BaseCode(forceLogoutResult.getCode(), forceLogoutResult.getMessage()));
                     }
                 }
@@ -115,7 +132,8 @@ public class UserService {
         }
 
         TerminalDeviceVo deviceVo = this.bind(userId, deviceCode, merchant, ip, terminal);
-        if (deviceVo == null) {
+        if (deviceVo == null)
+        {
             return APIResult.error(ApiWebCode.DEVICE_BOUND_ERROR);
         }
 
@@ -130,9 +148,11 @@ public class UserService {
         return APIResult.ok(userInfoVo);
     }
 
-    public APIResult<Boolean> logout(String userId) {
+    public APIResult<Boolean> logout(String userId)
+    {
         APIResult<Boolean> unbindResult = userClient.deviceUnbind(userId);
-        if (!unbindResult.getSuccess()) {
+        if (!unbindResult.getSuccess())
+        {
             return APIResult.error(ApiWebCode.LOGOUT_ERROR);
         }
 
@@ -142,7 +162,8 @@ public class UserService {
         return APIResult.ok();
     }
 
-    public TerminalDeviceVo bind(String userId, String deviceCode, String merchant, String ip, String terminal) {
+    public TerminalDeviceVo bind(String userId, String deviceCode, String merchant, String ip, String terminal)
+    {
         TerminalDeviceDTO deviceDTO = new TerminalDeviceDTO();
         deviceDTO.setUserId(userId);
         deviceDTO.setDeviceCode(deviceCode);
@@ -150,7 +171,8 @@ public class UserService {
         deviceDTO.setIp(ip);
         deviceDTO.setTerminal(terminal);
         APIResult<TerminalDeviceVo> apiResult = userClient.deviceBind(deviceDTO);
-        if (!apiResult.getSuccess()) {
+        if (!apiResult.getSuccess())
+        {
             log.error("bind user api error");
             return null;
         }
@@ -158,33 +180,40 @@ public class UserService {
     }
 
     // load user and device info
-    public DeviceUserVo load(String uid) {
+    public DeviceUserVo load(String uid)
+    {
         String key = getUserFormatKey(uid);
         DeviceUserVo deviceUserVo = (DeviceUserVo) redisService.get(key);
-        if (deviceUserVo == null) {
+        if (deviceUserVo == null)
+        {
             deviceUserVo = getDeviceUserVo(uid);
         }
-        if (deviceUserVo != null) {
+        if (deviceUserVo != null)
+        {
             this.save(deviceUserVo);
         }
         return deviceUserVo;
     }
 
-    public UserInfoVo getUserInfo(String uid) {
+    public UserInfoVo getUserInfo(String uid)
+    {
         DeviceUserVo deviceUserVo = this.load(uid);
         return toUserInfoVo(deviceUserVo, false);
     }
 
-    public DeviceUserVo getDeviceUserVo(String uid) {
+    public DeviceUserVo getDeviceUserVo(String uid)
+    {
         APIResult<TerminalDeviceVo> deviceAPIResult = userClient.findDeviceByUid(uid);
-        if (!deviceAPIResult.getSuccess()) {
+        if (!deviceAPIResult.getSuccess())
+        {
             log.error("load device api error, {}", deviceAPIResult.getMessage());
             return null;
         }
         TerminalDeviceVo deviceVo = deviceAPIResult.getData();
         // load user info
         APIResult<TerminalUserVo> userAPIResult = userClient.findUserById(uid);
-        if (!userAPIResult.getSuccess()) {
+        if (!userAPIResult.getSuccess())
+        {
             log.error("load user api error, {}", userAPIResult.getMessage());
             return null;
         }
@@ -193,34 +222,44 @@ 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)
+    {
 
         List<TerminalDeviceVo> deviceVoList = userClient.findByDeviceCode(deviceCode);
-        if (CollectionUtils.isEmpty(deviceVoList)) {
+        if (CollectionUtils.isEmpty(deviceVoList))
+        {
             log.error("device code not bind any eid! deviceCode={}", deviceCode);
             return APIResult.error(ApiWebCode.INVALID_TOKEN);
         }
 
         TerminalDeviceVo deviceVo = null;
 
-        for (TerminalDeviceVo dv : deviceVoList) {
+        for (TerminalDeviceVo dv : deviceVoList)
+        {
             //判断当前鉴权账号
-            if(StringUtils.isBlank(dv.getMerchant())){
+            if (StringUtils.isBlank(dv.getMerchant()))
+            {
                 //如果设备渠道code为空,则设置为当前渠道code
                 dv.setMerchant(merchant);
-                try{
+                try
+                {
                     //更新数据库
                     updateDeviceBind(dv);
-                }catch(Exception e){
+                }
+                catch (Exception e)
+                {
                     return APIResult.error(ApiWebCode.DEVICE_BOUND_ERROR);
                 }
                 deviceVo = dv;
-            }else if(StringUtils.isNotBlank(merchant) && merchant.equals(dv.getMerchant())) {
+            }
+            else if (StringUtils.isNotBlank(merchant) && merchant.equals(dv.getMerchant()))
+            {
                 deviceVo = dv;
             }
         }
 
-        if(null == deviceVo){
+        if (null == deviceVo)
+        {
             log.error("by device code not find this merchant! deviceCode={},merchant={}", deviceCode, merchant);
             return APIResult.error(ApiWebCode.INVALID_TOKEN);
         }
@@ -228,21 +267,26 @@ public class UserService {
         String uid = deviceVo.getUserId();
 
         DeviceUserVo deviceUserVo;
-        if (force) {
+        if (force)
+        {
             APIResult<TerminalUserVo> userAPIResult = userClient.findUserById(uid);
-            if (!userAPIResult.getSuccess()) {
+            if (!userAPIResult.getSuccess())
+            {
                 log.error("load user api error, {}", userAPIResult.getMessage());
                 return APIResult.error(ApiWebCode.INVALID_TOKEN);
             }
             TerminalUserVo userVo = userAPIResult.getData();
             deviceUserVo = toDeviceUserVo(userVo, deviceVo);
-        }else {
+        }
+        else
+        {
             String key = getUserFormatKey(uid);
             deviceUserVo = (DeviceUserVo) redisService.get(key);
         }
 
         // 无论怎样都能成功刷新
-        if (deviceUserVo == null) {
+        if (deviceUserVo == null)
+        {
             deviceUserVo = getDeviceUserVo(uid);
         }
 
@@ -253,30 +297,35 @@ public class UserService {
         return APIResult.ok(userInfoVo);
     }
 
-    private void updateDeviceBind(TerminalDeviceVo terminalDeviceVo) {
+    private void updateDeviceBind(TerminalDeviceVo terminalDeviceVo)
+    {
         TerminalDeviceDTO deviceDTO = new TerminalDeviceDTO();
         deviceDTO.setId(terminalDeviceVo.getId());
         deviceDTO.setMerchant(terminalDeviceVo.getMerchant());
         deviceDTO.setDeviceCode(terminalDeviceVo.getDeviceCode());
         deviceDTO.setUserId(terminalDeviceVo.getUserId());
         APIResult apiResult = userClient.updateDeviceBind(deviceDTO);
-        if (!apiResult.getSuccess()) {
+        if (!apiResult.getSuccess())
+        {
             log.error("update bind user api error");
             throw new RuntimeException("update bind user api error");
         }
     }
 
     // cache user and device info
-    public void save(DeviceUserVo deviceUserVo) {
+    public void save(DeviceUserVo deviceUserVo)
+    {
         String key = getUserFormatKey(deviceUserVo.getUid());
         redisService.set(key, deviceUserVo);
     }
 
-    public static String getUserFormatKey(String uid) {
+    public static String getUserFormatKey(String uid)
+    {
         return String.format(USER_FORMAT_KEY, uid);
     }
 
-    public static UserInfoVo toUserInfoVo(DeviceUserVo deviceUserVo, Boolean withToken) {
+    public static UserInfoVo toUserInfoVo(DeviceUserVo deviceUserVo, Boolean withToken)
+    {
         UserInfoVo userInfoVo = new UserInfoVo();
         userInfoVo.setUid(deviceUserVo.getUid());
         userInfoVo.setEid(deviceUserVo.getEid());
@@ -284,13 +333,15 @@ public class UserService {
         userInfoVo.setMerchantName(deviceUserVo.getMerchantName());
         userInfoVo.setMerchantContactName(deviceUserVo.getMerchantContactName());
         userInfoVo.setMerchantContactMobile(deviceUserVo.getMerchantContactMobile());
-        if (withToken) {
+        if (withToken)
+        {
             userInfoVo.setToken(deviceUserVo.getToken());
         }
         return userInfoVo;
     }
 
-    public DeviceUserVo toDeviceUserVo(TerminalUserVo userVo, TerminalDeviceVo deviceVo) {
+    public DeviceUserVo toDeviceUserVo(TerminalUserVo userVo, TerminalDeviceVo deviceVo)
+    {
         DeviceUserVo deviceUserVo = new DeviceUserVo();
         deviceUserVo.setUid(userVo.getId());
         deviceUserVo.setEid(userVo.getCode());
@@ -306,9 +357,10 @@ public class UserService {
         return deviceUserVo;
     }
 
-    public void refreshToken(DeviceUserVo deviceUserVo) {
+    public void refreshToken(DeviceUserVo deviceUserVo)
+    {
         String token = SecurityManager.generateToken(deviceUserVo.getPassword());
-        log.info("token ======================= ,{}",token);
+        log.info("token ======================= ,{}", token);
         Date nowTime = new Date();
         Date expireAt = DateUtils.addSeconds(nowTime, this.expiration);
         deviceUserVo.setToken(token);
@@ -316,34 +368,43 @@ public class UserService {
         deviceUserVo.setRefreshAt(nowTime);
     }
 
-    public List<Map<String, Object>> getProductValid(String uid){
+    public List<Map<String, Object>> getProductValid(String uid)
+    {
         //TODO: move this method to userCient
         return productClient.getProductValid(uid, 0L, 50, "endTime", Sort.Direction.ASC);
     }
 
-    public List<UserTag> findUserTagByCodeUid(String code, String uid) {
+    public List<UserTag> findUserTagByCodeUid(String code, String uid)
+    {
         return userClient.findUserTagByCodeUid(code, uid);
     }
 
-    public List<UserRecommend> getUserRecommendCourses(String uid) {
+    public List<UserRecommend> getUserRecommendCourses(String uid)
+    {
         return userClient.getUserRecommendCourses(uid);
     }
 
-    public APIResult<Page<ItemVo>> findPageByUserTagId(String userTagId,  String merchantId, Integer pageNo, Integer pageSize) {
+    public APIResult<Page<ItemVo>> findPageByUserTagId(String userTagId, String merchantId, Integer pageNo, Integer pageSize)
+    {
         Page<UserTagProductRelation> resultPage = userClient.findPageByUserTagId(userTagId, pageNo, pageSize);
 
-        if(resultPage == null){
+        if (resultPage == null)
+        {
             throw new RuntimeException("请求失败!");
         }
 
         List<ItemVo> itemVos = new ArrayList<>();
         List<UserTagProductRelation> userTagProductRelations = resultPage.getList();
-        userTagProductRelations.forEach(userTagProductRelation -> {
+        userTagProductRelations.forEach(userTagProductRelation ->
+        {
             String pid = userTagProductRelation.getPid();
             ItemVo itemVo = productClient.findItemByPid(merchantId, pid);
-            if(itemVo == null){
-                log.info("not found item by pid , pid={}",pid);
-            }else{
+            if (itemVo == null)
+            {
+                log.info("not found item by pid , pid={}", pid);
+            }
+            else
+            {
                 itemVos.add(itemVo);
             }
         });
@@ -351,18 +412,20 @@ public class UserService {
         Page<ItemVo> page = new Page<>();
         page.setPageSize(pageSize);
         page.setPageNo(pageNo);
-        page.setTotalSize((int)resultPage.getTotalSize());
+        page.setTotalSize((int) resultPage.getTotalSize());
         page.setList(itemVos);
 
         return APIResult.ok(page);
     }
 
 
-    public UserTag findUserTagById(String tagId) {
+    public UserTag findUserTagById(String tagId)
+    {
         return userClient.findUserTagById(tagId);
     }
 
-    public Page<UserTagProductRelation> findRelations(String userTagId, List<String> productIdList, Integer pageNo, Integer pageSize) {
+    public Page<UserTagProductRelation> findRelations(String userTagId, List<String> productIdList, Integer pageNo, Integer pageSize)
+    {
         return userClient.findRelations(userTagId, productIdList, pageNo, pageSize);
     }
 }

+ 6 - 2
rankin-data-api/src/main/java/cn/rankin/data/api/app/dto/LoginInfoDTO.java

@@ -25,12 +25,16 @@ public class LoginInfoDTO implements Serializable {
 
     private String terminal;
 
+    //设备名称
+    private String deviceName;
+
     //设备型号
     private String deviceModel;
 
     //设备厂商
     private String deviceMfrs;
 
-    //设备商标
-    private String deviceBrand;
+    //设备类型
+    private String deviceType;
+
 }

+ 7 - 3
rankin-data-api/src/main/java/cn/rankin/data/api/user/entity/UserDevice.java

@@ -35,9 +35,13 @@ public class UserDevice implements Serializable {
     @Column(name="device_mfrs")
     private String deviceMfrs;
 
-    //设备厂商
-    @Column(name="device_brand")
-    private String deviceBrand;
+    //设备名称
+    @Column(name="device_name")
+    private String deviceName;
+
+    //设备类型
+    @Column(name="device_type")
+    private String deviceType;
 
     @Column(name="num")
     private int num;

+ 7 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/user/vo/UserDeviceVo.java

@@ -0,0 +1,7 @@
+package cn.rankin.data.api.user.vo;
+
+import cn.rankin.data.api.user.entity.UserDevice;
+
+public class UserDeviceVo extends UserDevice
+{
+}

+ 21 - 42
rankin-user-service/src/main/java/cn/rankin/userservice/controller/UserDeviceController.java

@@ -1,17 +1,11 @@
 package cn.rankin.userservice.controller;
 
-import cn.rankin.common.utils.enums.BaseStatusEnum;
-import cn.rankin.common.utils.enums.EventTypeEnum;
-import cn.rankin.data.api.user.dto.DownloadInfoDTO;
-import cn.rankin.data.api.user.entity.DownloadInfo;
-import cn.rankin.data.api.user.entity.UserDevice;
+import cn.rankin.data.api.user.vo.UserDeviceVo;
 import cn.rankin.userservice.helper.RaStringHelper;
-import cn.rankin.userservice.service.DownloadInfoService;
 import cn.rankin.userservice.service.UserDeviceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
 
 @RestController
 @RequestMapping(value = "/userDevice")
@@ -21,49 +15,34 @@ public class UserDeviceController
     @Autowired
     private UserDeviceService userDeviceService;
 
+    @RequestMapping(value = "/op/{uid}", method = RequestMethod.GET)
+    public int bindingDevice(@PathVariable("uid") String uid,
+                             @RequestParam("deviceCode") String deviceCode,
+                             @RequestParam("deviceMode") String deviceMode,
+                             @RequestParam("deviceMfrs") String deviceMfrs,
+                             @RequestParam("deviceName") String deviceName,
+                             @RequestParam("deviceType") String deviceType)
+    {
 
-    @RequestMapping(value = "/setUserDevice/{uid}", method = RequestMethod.GET)
-    public boolean bindingDevice(@PathVariable("uid") String uid,
-                                         @RequestParam("deviceCode") String deviceCode,
-                                         @RequestParam("deviceMode") String deviceMode,
-                                         @RequestParam("deviceMfrs") String deviceMfrs,
-                                         @RequestParam("deviceBrand") String deviceBrand){
-
-        if(RaStringHelper.isNull(uid))
-        {
-            return false;
-        }
-        if(RaStringHelper.isNull(deviceCode))
-        {
-            return false;
-        }
-        if(RaStringHelper.isNull(deviceMode))
+        if (RaStringHelper.isNull(uid))
         {
-            return false;
+            return 0;
         }
-        if(RaStringHelper.isNull(deviceMfrs))
+        if (RaStringHelper.isNull(deviceCode))
         {
-            return false;
-        }
-        if(RaStringHelper.isNull(deviceBrand))
-        {
-            return false;
+            return 0;
         }
 
-        UserDevice userDevice = userDeviceService.findDevice(uid,deviceCode,deviceMode,deviceMfrs,deviceBrand);
-        if(userDevice!=null)
-        {
-            int num = userDevice.getNum()+1;
-            int updateRet =  userDeviceService.updateDevice(uid,deviceCode,deviceMode,deviceMfrs,deviceBrand,num);
+        UserDeviceVo userDeviceVo = new UserDeviceVo();
+        userDeviceVo.setUserId(uid);
+        userDeviceVo.setDeviceCode(deviceCode);
+        userDeviceVo.setDeviceModel(deviceMode);
+        userDeviceVo.setDeviceMfrs(deviceMfrs);
+        userDeviceVo.setDeviceName(deviceName);
+        userDeviceVo.setDeviceType(deviceType);
 
-            if(updateRet>0)
-            {
-                return true;
-            }
-            return false;
-        }
+        return userDeviceService.opUserDevice(userDeviceVo);
 
-        return true;
     }
 
 }

+ 4 - 4
rankin-user-service/src/main/java/cn/rankin/userservice/repository/UserDeviceRepository.java

@@ -13,11 +13,11 @@ import java.util.List;
 
 public interface UserDeviceRepository extends BasicJpaRepository<UserDevice, String> {
 
-    @Query(value = "select device from UserDevice device where device.userId = ?1 AND device.deviceCode= ?2 AND device.deviceModel = ?3  AND device.deviceMfrs = ?4  AND device.deviceBrand = ?5")
-    UserDevice findUserDevice(String uid, String deviceCode,String deviceModel,String deviceMfrs,String deviceBrand);
+    @Query(value = "select device from UserDevice device where device.userId = ?1 AND device.deviceCode= ?2 AND device.deviceModel = ?3")
+    UserDevice findUserDevice(String uid, String deviceCode,String deviceModel);
 
     @Transactional
     @Modifying
-    @Query(value = "update UserDevice device set device.num = ?6 where device.userId = ?1 AND device.deviceCode= ?2 AND device.deviceModel = ?3  AND device.deviceMfrs = ?4  AND device.deviceBrand = ?5")
-    int updateDevice(String uid, String deviceCode,String deviceModel,String deviceMfrs,String deviceBrand,int bindingNum);
+    @Query(value = "update UserDevice device set device.num = ?4 where device.userId = ?1 AND device.deviceCode= ?2 AND device.deviceModel = ?3")
+    int updateDevice(String uid, String deviceCode,String deviceModel,int num);
 }

+ 31 - 53
rankin-user-service/src/main/java/cn/rankin/userservice/service/UserDeviceService.java

@@ -1,6 +1,7 @@
 package cn.rankin.userservice.service;
 
 import cn.rankin.data.api.user.entity.UserDevice;
+import cn.rankin.data.api.user.vo.UserDeviceVo;
 import cn.rankin.userservice.helper.RaStringHelper;
 import cn.rankin.userservice.repository.UserDeviceRepository;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,78 +16,55 @@ public class UserDeviceService
     private UserDeviceRepository userDeviceRepository;
 
     /**
-     * Find device
-     * @param uid
-     * @param deviceCode
-     * @param deviceModel
-     * @param deviceMfrs
-     * @param deviceBrand
+     * Find
+     *
+     * @param userDeviceVo
      * @return
      */
-    public UserDevice findDevice(String uid,String deviceCode,String deviceModel,String deviceMfrs,String deviceBrand)
+    public int opUserDevice(UserDeviceVo userDeviceVo)
     {
-        if(RaStringHelper.isNull(uid))
+        if (userDeviceVo == null)
         {
-            return null;
-        }
-        if(RaStringHelper.isNull(deviceCode))
-        {
-            return null;
-        }
-        if(RaStringHelper.isNull(deviceModel))
-        {
-            return null;
+            return 0;
         }
 
-        UserDevice userDevice = userDeviceRepository.findUserDevice(uid,deviceCode,deviceModel,deviceMfrs,deviceBrand);
-        if(userDevice != null)
+        String uid = userDeviceVo.getUserId();
+        String deviceCode = userDeviceVo.getDeviceCode();
+        String deviceModel = userDeviceVo.getDeviceModel();
+        String deviceName = userDeviceVo.getDeviceName();
+        String deviceType = userDeviceVo.getDeviceType();
+        String deviceMfrs = userDeviceVo.getDeviceMfrs();
+
+        //查询用户设备信息
+        UserDevice userDevice = userDeviceRepository.findUserDevice(uid, deviceCode, deviceModel);
+        if (userDevice != null)
         {
-            return userDevice;
+            //更新访问量
+            int num = userDevice.getNum() + 1;
+            int updateRet = userDeviceRepository.updateDevice(uid, deviceCode, deviceModel, num);
+
+            return updateRet;
         }
         else
-            {
+        {
+            //添加用户设备信息
             userDevice = new UserDevice();
             userDevice.setUserId(uid);
             userDevice.setGmtCreated(new Date());
             userDevice.setDeviceCode(deviceCode);
             userDevice.setDeviceModel(deviceModel);
             userDevice.setDeviceMfrs(deviceMfrs);
-            userDevice.setDeviceBrand(deviceBrand);
+            userDevice.setDeviceName(deviceName);
+            userDevice.setDeviceType(deviceType);
             userDevice.setNum(1);
-            userDeviceRepository.save(userDevice);
-
-            return null;
-        }
-    }
 
-    /**
-     * Updates device
-     * @param uid
-     * @param deviceCode
-     * @param deviceModel
-     * @param deviceMfrs
-     * @param deviceBrand
-     * @param bingdingNum
-     * @return
-     */
-    public int updateDevice(String uid,String deviceCode,String deviceModel,String deviceMfrs,String deviceBrand,int bingdingNum)
-    {
-        if(RaStringHelper.isNull(uid))
-        {
-            return 0;
-        }
-        if(RaStringHelper.isNull(deviceCode))
-        {
-            return 0;
-        }
-        if(RaStringHelper.isNull(deviceModel))
-        {
+            UserDevice userDeviceRet = userDeviceRepository.save(userDevice);
+            if (userDeviceRet != null)
+            {
+                return 1;
+            }
             return 0;
         }
-
-        int updateRet = userDeviceRepository.updateDevice(uid,deviceCode,deviceModel,deviceMfrs,deviceBrand,bingdingNum);
-
-        return   updateRet;
     }
 
 }