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);
}
}
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);
}
}
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);
}
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;
}
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);
}
Aggregations