From 4ed7f4806f30603ac66c85256db40d3a78cd6312 Mon Sep 17 00:00:00 2001
From: chengkun <2500338766@qq.com>
Date: Thu, 23 Jun 2022 17:25:33 +0800
Subject: [PATCH] =?UTF-8?q?feature1.0.0-img:=E6=B7=BB=E5=8A=A0=E5=88=9B?=
=?UTF-8?q?=E4=BD=9C=E8=80=85=E7=99=BB=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
bnyer-services/bnyer-img/pom.xml | 14 +++++
.../bnyer/img/constants/TiktokConstant.java | 5 ++
.../img/controller/CreatorMiniController.java | 9 +++
.../java/com/bnyer/img/dto/WxLoginDto.java | 28 +++++++++
.../com/bnyer/img/service/CreatorService.java | 13 ++--
.../img/service/impl/CreatorServiceImpl.java | 63 +++++++++++++++++++
6 files changed, 127 insertions(+), 5 deletions(-)
create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/WxLoginDto.java
diff --git a/bnyer-services/bnyer-img/pom.xml b/bnyer-services/bnyer-img/pom.xml
index 47d63c9..28c0cfe 100644
--- a/bnyer-services/bnyer-img/pom.xml
+++ b/bnyer-services/bnyer-img/pom.xml
@@ -95,6 +95,20 @@
xxl-job-core
2.1.2
+
+
+
+ com.github.binarywang
+ weixin-java-miniapp
+ 4.2.0
+
+
+
+
+ com.github.binarywang
+ weixin-java-pay
+ 4.2.0
+
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java
index b69909e..66c3871 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java
+++ b/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;
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
index 56ebc06..50e281f 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java
+++ b/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));
+ }
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/WxLoginDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/WxLoginDto.java
new file mode 100644
index 0000000..c92e63a
--- /dev/null
+++ b/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;
+}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java
index 85bff1f..8c944aa 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java
+++ b/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 login(WxLoginDto param);
}
diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java
index f2871d2..678e2b6 100644
--- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java
+++ b/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 login(WxLoginDto param) {
+ try{
+ //code换openId等相关信息
+ WxMaJscode2SessionResult sessionInfo = wxMaUserService.getSessionInfo(param.getCode());
+ //插入或更新艺术家到数据库
+ QueryWrapper 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 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);
+ }
+ }
}