Browse Source

feature1.0.0-img:添加创作者登录

master
chengkun 4 years ago
parent
commit
4ed7f4806f
  1. 14
      bnyer-services/bnyer-img/pom.xml
  2. 5
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java
  3. 9
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
  4. 28
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/WxLoginDto.java
  5. 13
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java
  6. 63
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java

14
bnyer-services/bnyer-img/pom.xml

@ -95,6 +95,20 @@
<artifactId>xxl-job-core</artifactId>
<version>2.1.2</version>
</dependency>
<!-- 微信小程序工具包-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.2.0</version>
</dependency>
<!--微信支付工具包-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
<build>

5
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java

@ -45,4 +45,9 @@ public class TiktokConstant {
* 艺术家可提现余额不足
*/
public static final Integer CREATOR_AMT_NOT_ENOUGH = 105007;
/**
* 微信获取session调用失败
*/
public static final Integer CALL_WECHAT_FAIL = 105008;
}

9
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java

@ -240,4 +240,13 @@ public class CreatorMiniController extends BaseController {
public AjaxResult queryFrontEndProfitAmt(@Validated @RequestBody @ApiParam("转入钱包对象") ProfitStatusDto params){
return AjaxResult.success(creatorProfitService.queryFrontEndProfitAmt(params.getCreatorId(),params.getType()));
}
//@TokenCheck
@PostMapping("/login")
@ApiOperation("小程序艺术家登录")
public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody WxLoginDto param)
{
log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param));
return AjaxResult.success(creatorService.login(param));
}
}

28
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/WxLoginDto.java

@ -0,0 +1,28 @@
package com.bnyer.img.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Getter
@Setter
@ApiModel("微信登录入参")
public class WxLoginDto implements Serializable {
@NotBlank(message = "微信code不能为空!")
@ApiModelProperty(value = "微信code")
private String code;
@NotBlank(message = "加密数据不能为空!")
@ApiModelProperty(value = "加密数据")
private String encryptedData;
@NotBlank(message = "加密算法向量不能为空!")
@ApiModelProperty(value = "加密算法向量")
private String iv;
}

13
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java

@ -1,13 +1,11 @@
package com.bnyer.img.service;
import com.bnyer.img.domain.Creator;
import com.bnyer.img.dto.CreatorDto;
import com.bnyer.img.dto.CreatorPageDto;
import com.bnyer.img.dto.CreatorUpdateDto;
import com.bnyer.img.dto.VerifyDto;
import com.bnyer.img.dto.*;
import com.bnyer.img.vo.CreatorVo;
import java.util.List;
import java.util.Map;
/**
* @author chengkun
@ -92,5 +90,10 @@ public interface CreatorService {
*/
int reVerify(Long id);
//TODO 微信登录
/**
* 小程序用户登录
* @param param 前端传来的参数
* @return -
*/
Map<String,Object> login(WxLoginDto param);
}

63
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java

@ -1,7 +1,12 @@
package com.bnyer.img.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaUserService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.Sm4Util;
@ -17,6 +22,7 @@ import com.bnyer.img.domain.VerifyLog;
import com.bnyer.img.dto.CreatorDto;
import com.bnyer.img.dto.CreatorPageDto;
import com.bnyer.img.dto.VerifyDto;
import com.bnyer.img.dto.WxLoginDto;
import com.bnyer.img.mapper.CreatorMapper;
import com.bnyer.img.mapper.InviteLogMapper;
import com.bnyer.img.mapper.TiktokImgMapper;
@ -24,12 +30,16 @@ import com.bnyer.img.mapper.VerifyLogMapper;
import com.bnyer.img.service.CreatorService;
import com.bnyer.img.vo.CreatorVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
@ -55,6 +65,8 @@ public class CreatorServiceImpl implements CreatorService {
@Autowired
private RedisService redisService;
private WxMaUserService wxMaUserService;
/**
* 检查用户是否绑定过手机号
* @param phone 手机号
@ -258,4 +270,55 @@ public class CreatorServiceImpl implements CreatorService {
creator.setStatus("0");
return creatorMapper.update(creator,wrapper);
}
private Creator saveOrUpdate(Creator creator,String openId,String sessionKey,String encryptedData,String iv){
if (ObjectUtils.isEmpty(creator)) {
//创建用户
creator = new Creator();
//获取用户昵称和头像
WxMaUserInfo userInfo = wxMaUserService.getUserInfo(sessionKey, encryptedData, iv);
creator.setImg(userInfo.getAvatarUrl());
creator.setName(userInfo.getNickName());
creator.setOpenId(Sm4Util.sm4Encryption(openId));
creator.setCreateTime(new Date());
creator.setUpdateTime(new Date());
int insert = creatorMapper.insert(creator);
log.info("艺术家【{}】创建成功!", openId);
return creator;
}else{
log.info("该艺术家【{}】已存在!",openId);
return creator;
}
}
@Override
public Map<String, Object> login(WxLoginDto param) {
try{
//code换openId等相关信息
WxMaJscode2SessionResult sessionInfo = wxMaUserService.getSessionInfo(param.getCode());
//插入或更新艺术家到数据库
QueryWrapper<Creator> qw = new QueryWrapper<>();
qw.eq("open_id", sessionInfo.getOpenid());
Creator creator = creatorMapper.selectOne(qw);
//检查数据库是否存在该艺术家,不存在则新增,存在更新昵称和头像
creator = saveOrUpdate(creator, sessionInfo.getOpenid(), sessionInfo.getSessionKey(), param.getEncryptedData(), param.getIv());
//检查登录态是否能在,存在则删除创建新的登录态
String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+sessionInfo.getOpenid();
if(redisService.hasKey(redisKey)){
redisService.deleteObject(redisKey);
}
//缓存到redis
StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(sessionInfo.getOpenid());
//设置登录会话
redisService.setCacheObject(redisKey,sb.toString(), 10L, TimeUnit.DAYS);
Map<String, Object> map = new HashMap<>(16);
map.put("token", sb.toString());
map.put("creator",creator);
return map;
}catch (WxErrorException e){
throw new ServiceException(e.getMessage(), TiktokConstant.CALL_WECHAT_FAIL);
}
}
}

Loading…
Cancel
Save