Commit 60bc7ccc by 郑云飞

小程序登录修改

parent 2124dba5
......@@ -17,10 +17,7 @@ import com.yongqi.system.service.ISysUserService;
import com.yongqi.system.service.SysLoginService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
......@@ -82,10 +79,10 @@ public class SysLoginController {
*/
@SaIgnore
@GetMapping("/xcxLogin")
public R<Map<String, Object>> xcxLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) {
public R<Map<String, Object>> xcxLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode, @RequestParam(value = "parentId", required = false) Long inviterId) {
Map<String, Object> ajax = new HashMap<>();
// 生成令牌
String token = loginService.xcxLogin(xcxCode);
String token = loginService.xcxLogin(xcxCode, inviterId);
ajax.put(Constants.TOKEN, token);
return R.ok(ajax);
}
......
......@@ -33,8 +33,14 @@ import com.yongqi.common.utils.StringUtils;
import com.yongqi.common.utils.redis.RedisUtils;
import com.yongqi.common.utils.spring.SpringUtils;
import com.yongqi.system.mapper.SysUserMapper;
import com.yongqi.xinrenli.domain.DbCoupon;
import com.yongqi.xinrenli.domain.DbInviter;
import com.yongqi.xinrenli.domain.DbUserCoupon;
import com.yongqi.xinrenli.domain.DbWxUser;
import com.yongqi.xinrenli.enums.DeleteStatusEnum;
import com.yongqi.xinrenli.mapper.DbCouponMapper;
import com.yongqi.xinrenli.mapper.DbInviterMapper;
import com.yongqi.xinrenli.mapper.DbUserCouponMapper;
import com.yongqi.xinrenli.mapper.DbWxUserMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -44,8 +50,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.rmi.ServerException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
......@@ -73,6 +80,12 @@ public class SysLoginService {
private WxMaService wxMaService;
@Autowired
private DbWxUserMapper wxUserMapper;
@Autowired
private DbInviterMapper inviterMapper;
@Autowired
private DbCouponMapper couponMapper;
@Autowired
private DbUserCouponMapper userCouponMapper;
/**
* 登录验证
......@@ -118,7 +131,7 @@ public class SysLoginService {
}
public String xcxLogin(String xcxCode) {
public String xcxLogin(String xcxCode, Long inviterId) {
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
WxMaJscode2SessionResult sessionInfo = null;
try {
......@@ -129,7 +142,7 @@ public class SysLoginService {
if (sessionInfo == null) {
throw new RuntimeException("获取微信信息失败");
}
DbWxUser user = loadUserByOpenid(sessionInfo, null);
DbWxUser user = loadUserByOpenid(sessionInfo, null, inviterId);
// 此处可根据登录用户的数据不同 自行创建 loginUser
XcxLoginUser loginUser = new XcxLoginUser();
loginUser.setUserId(user.getId());
......@@ -160,7 +173,7 @@ public class SysLoginService {
}
WxMaJscode2SessionResult sessionInfo = new WxMaJscode2SessionResult();
sessionInfo.setOpenid(openId);
DbWxUser user = loadUserByOpenid(sessionInfo, newPhoneNoInfo.getPhoneNumber());
DbWxUser user = loadUserByOpenid(sessionInfo, newPhoneNoInfo.getPhoneNumber(), null);
return R.ok();
}
......@@ -254,16 +267,43 @@ public class SysLoginService {
return userMapper.selectUserByPhonenumber(phonenumber);
}
private DbWxUser loadUserByOpenid(WxMaJscode2SessionResult sessionInfo, String phone) {
private DbWxUser loadUserByOpenid(WxMaJscode2SessionResult sessionInfo, String phone, Long inviterId) {
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
DbWxUser user = wxUserMapper.selectOne(Wrappers.<DbWxUser>lambdaQuery().eq(DbWxUser::getOpenId, sessionInfo.getOpenid()));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", sessionInfo.getOpenid());
// 新增用户
user = new DbWxUser();
user.setOpenId(sessionInfo.getOpenid());
user.setSessionKey(sessionInfo.getSessionKey());
user.setUnionId(sessionInfo.getUnionid());
wxUserMapper.insert(user);
// 判断是否有邀请人
if (ObjectUtil.isNotEmpty(inviterId)) {
//获取邀请人信息
DbWxUser dbWxUser = wxUserMapper.selectById(inviterId);
// 新增邀请记录
DbInviter inviter = new DbInviter();
inviter.setInviterId(inviterId);
inviter.setInviterName(dbWxUser.getNickname());
inviter.setStatus(1);
inviter.setInviteeId(user.getId());
inviter.setInviteeName(user.getNickname());
inviter.setCreateTime(new Date());
inviterMapper.insert(inviter);
}
Date now = new Date();
List<DbCoupon> coupons = couponMapper.selectList(Wrappers.<DbCoupon>lambdaQuery()
.eq(DbCoupon::getCouponType, 1)
.le(DbCoupon::getEffectiveTime, now)
.ge(DbCoupon::getFailureTime, now));
for (DbCoupon coupon : coupons) {
DbUserCoupon userCoupon = new DbUserCoupon();
userCoupon.setUserId(user.getId());
userCoupon.setCouponId(coupon.getId());
userCoupon.setUseStatus(0);
userCouponMapper.insert(userCoupon);
}
} else if (DeleteStatusEnum.DELETED.getCode().equals(user.getDeleteFlag())) {
log.info("登录用户:{} 已被停用.", sessionInfo.getOpenid());
throw new RuntimeException("当前用户已停用,请联系管理员");
......
......@@ -3,6 +3,8 @@ package com.yongqi.xinrenli.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
/**
* 邀请对象 db_Inviter
*
......@@ -37,8 +39,10 @@ public class DbInviter {
*/
private String inviteeName;
/**
* 状态:是否已计入折扣
* 状态:是否已计入折扣 0是1否
*/
private Integer status;
private Date createTime;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment