Search in sources :

Example 11 with User

use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.

the class AuthRestApi method decryptData.

/**
 * 解析移动端数据
 *
 * @param map
 * @return
 */
@ApiOperation(value = "decryptData", notes = "QQ小程序登录数据解析")
@PostMapping("/decryptData")
public String decryptData(@RequestBody Map<String, String> map) throws UnsupportedEncodingException {
    String encryptDataB64 = map.get("encryptDataB64");
    String jsCode = map.get("jsCode");
    String ivB64 = map.get("ivB64");
    HashMap<String, Object> paramMap = new HashMap<>();
    paramMap.put("appid", APP_ID);
    paramMap.put("secret", SECRET);
    paramMap.put("js_code", jsCode);
    paramMap.put("grant_type", GRANT_TYPE);
    String result = HttpUtil.get("https://api.q.qq.com/sns/jscode2session", paramMap);
    log.info("获取UnionID");
    log.info(result);
    Map<String, Object> resultMap = JsonUtils.jsonToMap(result);
    if (resultMap != null) {
        String sessionKey = resultMap.get("session_key").toString();
        String userInfo = UniappUtils.decryptData(encryptDataB64, sessionKey, ivB64);
        log.info(userInfo);
        Map<String, Object> userInfoMap = JsonUtils.jsonToMap(userInfo);
        Boolean exist = false;
        User user = null;
        // 判断user是否存在
        if (userInfoMap.get(SysConf.OPEN_ID) != null) {
            user = userService.getUserBySourceAnduuid("QQ", userInfoMap.get(SysConf.OPEN_ID).toString());
            if (user != null) {
                log.info("用户已存在");
                exist = true;
            } else {
                log.info("用户未存在,开始创建新用户");
                user = new User();
            }
        } else {
            log.info("无法获取到openId");
            return ResultUtil.result(SysConf.ERROR, MessageConf.PARAM_INCORRECT);
        }
        // 判断用户性别
        if (userInfoMap.get(SysConf.GENDER) != null) {
            log.info("获取用户性别:{}", userInfoMap.get(SysConf.GENDER));
            String genderStr = userInfoMap.get(SysConf.GENDER).toString();
            String gender = Double.valueOf(genderStr).intValue() + "";
            if (EGender.MALE.equals(gender)) {
                user.setGender(EGender.MALE);
            } else if (EGender.FEMALE.equals(gender)) {
                user.setGender(EGender.FEMALE);
            } else {
                user.setGender(EGender.UNKNOWN);
            }
        }
        // 通过头像uid获取图片
        String pictureList = this.pictureFeignClient.getPicture(user.getAvatar(), SysConf.FILE_SEGMENTATION);
        List<String> photoList = webUtil.getPicture(pictureList);
        Map<String, Object> picMap = (Map<String, Object>) JsonUtils.jsonToObject(pictureList, Map.class);
        log.info("获取用户头像信息:{}", JsonUtils.objectToJson(picMap));
        // 判断该用户是否含有头像信息
        if (SysConf.SUCCESS.equals(picMap.get(SysConf.CODE)) && photoList.size() > 0) {
            List<Map<String, Object>> picData = (List<Map<String, Object>>) picMap.get(SysConf.DATA);
            String fileOldName = picData.get(0).get(SysConf.FILE_OLD_NAME).toString();
            // 如果旧名称为blob表示是用户自定义的,代表用户在本网站使用了自定义头像,那么就再也不同步更新网站上的了
            if (fileOldName.equals(userInfoMap.get(SysConf.AVATAR_URL)) || SysConf.BLOB.equals(fileOldName)) {
                user.setPhotoUrl(photoList.get(0));
            } else {
                updateUserPhoto(userInfoMap, user);
            }
        } else {
            updateUserPhoto(userInfoMap, user);
        }
        if (userInfoMap.get(SysConf.NICK_NAME) != null) {
            user.setNickName(userInfoMap.get(SysConf.NICK_NAME).toString());
        }
        if (user.getLoginCount() == null) {
            user.setLoginCount(0);
        } else {
            user.setLoginCount(user.getLoginCount() + 1);
        }
        // 获取浏览器,IP来源,以及操作系统
        user = userService.serRequestInfo(user);
        // 暂时将token也存入到user表中,为了以后方便更新redis中的内容
        String accessToken = StringUtils.getUUID();
        user.setValidCode(accessToken);
        if (exist) {
            user.updateById();
            log.info("向数据库更新用户信息");
            log.info(JsonUtils.objectToJson(user));
        } else {
            user.setUuid(userInfoMap.get(SysConf.OPEN_ID).toString());
            user.setSource("QQ");
            String userName = PROJECT_NAME_EN.concat("_").concat(user.getSource()).concat("_").concat(user.getUuid());
            user.setUserName(userName);
            // 如果昵称为空,那么直接设置用户名
            if (StringUtils.isEmpty(user.getNickName())) {
                user.setNickName(userName);
            }
            // 默认密码
            user.setPassWord(MD5Utils.string2MD5(DEFAULE_PWD));
            // 设置是否开启评论邮件通知【关闭】
            user.insert();
            log.info("插入用户信息: {}", user);
        }
        // 过滤密码【因需要传递到前台,数据脱敏】
        user.setPassWord("");
        if (user != null) {
            // 将从数据库查询的数据缓存到redis中
            stringRedisTemplate.opsForValue().set(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + accessToken, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
        }
        return ResultUtil.result(SysConf.SUCCESS, user);
    } else {
        return ResultUtil.result(SysConf.ERROR, MessageConf.PARAM_INCORRECT);
    }
}
Also used : User(com.moxi.mogublog.commons.entity.User) JSONObject(com.alibaba.fastjson.JSONObject) ApiOperation(io.swagger.annotations.ApiOperation)

Example 12 with User

use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.

the class AuthRestApi method editUser.

/**
 * 获取关于我的信息
 */
@ApiOperation(value = "编辑用户信息", notes = "编辑用户信息")
@PostMapping("/editUser")
public String editUser(HttpServletRequest request, @RequestBody UserVO userVO) {
    if (request.getAttribute(SysConf.USER_UID) == null || request.getAttribute(SysConf.TOKEN) == null) {
        return ResultUtil.result(SysConf.ERROR, MessageConf.INVALID_TOKEN);
    }
    String userUid = request.getAttribute(SysConf.USER_UID).toString();
    String token = request.getAttribute(SysConf.TOKEN).toString();
    User user = userService.getById(userUid);
    if (user == null) {
        return ResultUtil.result(SysConf.ERROR, "编辑失败, 未找到该用户!");
    }
    log.info("获取到的用户: {}", user);
    user.setNickName(userVO.getNickName());
    user.setAvatar(userVO.getAvatar());
    user.setBirthday(userVO.getBirthday());
    user.setSummary(userVO.getSummary());
    user.setGender(userVO.getGender());
    user.setQqNumber(userVO.getQqNumber());
    user.setOccupation(userVO.getOccupation());
    // 如果开启邮件通知,必须保证邮箱已存在
    if (userVO.getStartEmailNotification() == SysConf.ONE && !StringUtils.isNotEmpty(user.getEmail())) {
        return ResultUtil.result(SysConf.ERROR, "必须填写并绑定邮箱后,才能开启评论邮件通知~");
    }
    user.setStartEmailNotification(userVO.getStartEmailNotification());
    user.updateById();
    user.setPassWord("");
    user.setPhotoUrl(userVO.getPhotoUrl());
    // 判断用户是否更改了邮箱
    if (userVO.getEmail() != null && !userVO.getEmail().equals(user.getEmail())) {
        user.setEmail(userVO.getEmail());
        // 使用RabbitMQ发送邮件
        rabbitMqUtil.sendRegisterEmail(user, token);
        // 修改成功后,更新Redis中的用户信息
        stringRedisTemplate.opsForValue().set(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + token, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
        return ResultUtil.result(SysConf.SUCCESS, "您已修改邮箱,请先到邮箱进行确认绑定");
    } else {
        stringRedisTemplate.opsForValue().set(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + token, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
        return ResultUtil.result(SysConf.SUCCESS, MessageConf.UPDATE_SUCCESS);
    }
}
Also used : User(com.moxi.mogublog.commons.entity.User) ApiOperation(io.swagger.annotations.ApiOperation)

Example 13 with User

use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.

the class AuthRestApi method bindUserEmail.

@ApiOperation(value = "绑定用户邮箱", notes = "绑定用户邮箱")
@GetMapping("/bindUserEmail/{token}/{code}")
public String bindUserEmail(@PathVariable("token") String token, @PathVariable("code") String code) {
    String userInfo = stringRedisTemplate.opsForValue().get(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + token);
    if (StringUtils.isEmpty(userInfo)) {
        return ResultUtil.result(SysConf.ERROR, MessageConf.INVALID_TOKEN);
    }
    User user = JsonUtils.jsonToPojo(userInfo, User.class);
    user.updateById();
    return ResultUtil.result(SysConf.SUCCESS, MessageConf.OPERATION_SUCCESS);
}
Also used : User(com.moxi.mogublog.commons.entity.User) ApiOperation(io.swagger.annotations.ApiOperation)

Example 14 with User

use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.

the class WechatRestApi method index.

@ApiOperation(value = "用户扫码后触发的事件", notes = "用户扫码后触发的事件")
@PostMapping("/wechatCheck")
public String index(HttpServletRequest request) throws Exception {
    Map<String, String> map = SignUtil.xmlToMap(request);
    System.out.println(map);
    String event = map.get("Event");
    if ("SCAN".equals(event)) {
        System.out.println("扫码进来了,已经关注过");
    } else if ("subscribe".equals(event)) {
        System.out.println("订阅公众号");
    } else if ("subscribe".equals(event)) {
        System.out.println("取消订阅公众号");
    }
    String accessToken = redisUtil.get("WE_CHAT_ACCESS_TOKEN");
    // 可以当做token
    String ticket = map.get("Ticket");
    String toUserName = map.get("ToUserName");
    String fromUserName = map.get("FromUserName");
    String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + accessToken + "&openid=" + fromUserName;
    String result = HttpRequest.get(url).execute().body();
    System.out.println(result);
    // ##############################  开始  ############################
    Map<String, Object> data = JsonUtils.jsonToMap(result);
    Boolean exist = false;
    User user;
    // 判断user是否存在
    if (data.get("openid") != null) {
        user = userService.getUserBySourceAnduuid("wechat", data.get("openid").toString());
        if (user != null) {
            exist = true;
        } else {
            user = new User();
        }
    } else {
        System.out.println("获取用户失败");
        return "error";
    }
    // 判断邮箱是否存在
    if (data.get(SysConf.EMAIL) != null) {
        String email = data.get(SysConf.EMAIL).toString();
        user.setEmail(email);
    }
    // 判断用户性别
    if (data.get("sex") != null && !exist) {
        String gender = data.get("sex").toString();
        if (EGender.MALE.equals(gender)) {
            user.setGender(EGender.MALE);
        } else if (EGender.FEMALE.equals(gender)) {
            user.setGender(EGender.FEMALE);
        } else {
            user.setGender(EGender.UNKNOWN);
        }
    }
    // 通过头像uid获取图片
    String pictureList = this.pictureFeignClient.getPicture(user.getAvatar(), SysConf.FILE_SEGMENTATION);
    List<String> photoList = webUtil.getPicture(pictureList);
    Map<String, Object> picMap = (Map<String, Object>) JsonUtils.jsonToObject(pictureList, Map.class);
    // 判断该用户是否含有头像信息
    if (SysConf.SUCCESS.equals(picMap.get(SysConf.CODE)) && photoList.size() > 0) {
        List<Map<String, Object>> picData = (List<Map<String, Object>>) picMap.get(SysConf.DATA);
        String fileOldName = picData.get(0).get(SysConf.FILE_OLD_NAME).toString();
        // 如果旧名称为blob表示是用户自定义的,代表用户在本网站使用了自定义头像,那么就再也不同步更新网站上的了
        if (fileOldName.equals(data.get(SysConf.AVATAR)) || SysConf.BLOB.equals(fileOldName)) {
            user.setPhotoUrl(photoList.get(0));
        } else {
            updateUserPhoto(data, user);
        }
    } else {
        // 当获取头像失败时,需要从网站上进行获取
        updateUserPhoto(data, user);
    }
    if (data.get(SysConf.NICKNAME) != null) {
        user.setNickName(data.get(SysConf.NICKNAME).toString());
    }
    if (user.getLoginCount() == null) {
        user.setLoginCount(0);
    } else {
        user.setLoginCount(user.getLoginCount() + 1);
    }
    // 获取浏览器,IP来源,以及操作系统
    user = userService.serRequestInfo(user);
    // 暂时将token也存入到user表中,为了以后方便更新redis中的内容
    user.setValidCode(ticket);
    if (exist) {
        user.updateById();
    } else {
        user.setUuid(data.get("openid").toString());
        user.setSource("wechat");
        String userName = PROJECT_NAME_EN.concat(Constants.SYMBOL_UNDERLINE).concat(user.getSource()).concat(Constants.SYMBOL_UNDERLINE).concat(user.getUuid());
        user.setUserName(userName);
        // 如果昵称为空,那么直接设置用户名
        if (StringUtils.isEmpty(user.getNickName())) {
            user.setNickName(userName);
        }
        // 默认密码
        user.setPassWord(MD5Utils.string2MD5(DEFAULE_PWD));
        // 设置是否开启评论邮件通知【关闭】
        user.setStartEmailNotification(EOpenStatus.CLOSE_STATUS);
        user.insert();
    }
    // 过滤密码
    user.setPassWord("");
    if (user != null) {
        // 将从数据库查询的数据缓存到redis中
        redisUtil.setEx(RedisConf.USER_TOKEN + Constants.SYMBOL_COLON + ticket, JsonUtils.objectToJson(user), userTokenSurvivalTime, TimeUnit.HOURS);
    }
    // ############################## 结束 ############################
    String returnData = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + " <xml>" + " <Content>" + "hello" + "</Content>" + " <ToUserName>" + fromUserName + "</ToUserName>" + " <FromUserName>" + toUserName + "</FromUserName>" + " <CreateTime>" + new Date().getTime() / 1000 + "</CreateTime>" + " <MsgType>text</MsgType>" + " </xml>";
    return returnData;
}
Also used : User(com.moxi.mogublog.commons.entity.User) ArrayList(java.util.ArrayList) List(java.util.List) Map(java.util.Map) Date(java.util.Date) ApiOperation(io.swagger.annotations.ApiOperation)

Example 15 with User

use of com.moxi.mogublog.commons.entity.User in project mogu_blog_v2 by moxi624.

the class UserServiceImpl method addUser.

@Override
public String addUser(UserVO userVO) {
    User user = new User();
    // 字段拷贝【将userVO中的内容拷贝至user】
    BeanUtils.copyProperties(userVO, user, SysConf.STATUS);
    String defaultPassword = sysParamsService.getSysParamsValueByKey(SysConf.SYS_DEFAULT_PASSWORD);
    user.setPassWord(MD5Utils.string2MD5(defaultPassword));
    user.setSource("MOGU");
    user.insert();
    return ResultUtil.successWithMessage(MessageConf.INSERT_SUCCESS);
}
Also used : User(com.moxi.mogublog.commons.entity.User)

Aggregations

User (com.moxi.mogublog.commons.entity.User)18 ApiOperation (io.swagger.annotations.ApiOperation)10 QueryWrapper (com.baomidou.mybatisplus.core.conditions.query.QueryWrapper)6 SystemConfig (com.moxi.mogublog.commons.entity.SystemConfig)3 JSONObject (com.alibaba.fastjson.JSONObject)2 IPage (com.baomidou.mybatisplus.core.metadata.IPage)2 Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)2 ArrayList (java.util.ArrayList)2 Date (java.util.Date)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 Blog (com.moxi.mogublog.commons.entity.Blog)1 Comment (com.moxi.mogublog.commons.entity.Comment)1 Feedback (com.moxi.mogublog.commons.entity.Feedback)1 Link (com.moxi.mogublog.commons.entity.Link)1 ECommentSource (com.moxi.mougblog.base.enums.ECommentSource)1 DeleteException (com.moxi.mougblog.base.exception.exceptionType.DeleteException)1 InsertException (com.moxi.mougblog.base.exception.exceptionType.InsertException)1 List (java.util.List)1 Map (java.util.Map)1 AuthResponse (me.zhyd.oauth.model.AuthResponse)1