@@ -9,6 +9,8 @@ import com.iformall.domain.po.*; | |||
import com.iformall.enums.*; | |||
import com.iformall.service.*; | |||
import com.iformall.service.cuser.CUserServiceFactory; | |||
import com.iformall.service.sm.InviteCodeInfoService; | |||
import com.iformall.service.sm.InviteCodeService; | |||
import com.iformall.service.sm.UserCreateVideoNumService; | |||
import com.iformall.utils.Constant; | |||
import com.iformall.utils.PasswordHelper; | |||
@@ -85,6 +87,12 @@ public class WxUserGrantController extends BaseController { | |||
@Autowired | |||
private UserCreateVideoNumService userCreateVideoNumService; | |||
@Autowired | |||
private InviteCodeService inviteCodeService; | |||
@Autowired | |||
private InviteCodeInfoService inviteCodeInfoService; | |||
@AuthIgnore | |||
@ApiOperation("验证码") | |||
@GetMapping("/captcha.jpg") | |||
@@ -651,4 +659,28 @@ public class WxUserGrantController extends BaseController { | |||
return new ResultData(); | |||
} | |||
@ApiOperation("生成邀请码") | |||
@GetMapping("/inviteCode") | |||
public ResultData inviteCode() { | |||
logger.debug("[" + getIpAddr() + "] WxUserGrantController::inviteCode"); | |||
String code = inviteCodeService.inviteCode(getMemberId()); | |||
return new ResultData(code); | |||
} | |||
@ApiOperation("使用邀请码") | |||
@GetMapping("/useCode") | |||
@ApiImplicitParam(name = "code", value = "code", dataType = "String", paramType = "query", required = true) | |||
public ResultData useCode(String code) { | |||
logger.debug("[" + getIpAddr() + "] WxUserGrantController::useCode"); | |||
return inviteCodeInfoService.useCode(getCUser(),code); | |||
} | |||
@ApiOperation("是否使用邀请码判断") | |||
@GetMapping("/isUse") | |||
public ResultData isUse() { | |||
logger.debug("[" + getIpAddr() + "] WxUserGrantController::isUse"); | |||
Boolean use = inviteCodeInfoService.isUse(getCUser()); | |||
return new ResultData(use); | |||
} | |||
} |
@@ -2,6 +2,7 @@ package com.iformall.domain.po.sm; | |||
import com.baomidou.mybatisplus.annotation.TableId; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import io.swagger.models.auth.In; | |||
import lombok.Data; | |||
import java.io.Serializable; | |||
@@ -37,11 +38,11 @@ public class InviteCode implements Serializable { | |||
/** | |||
* 邀请码code | |||
*/ | |||
private Long code; | |||
private String code; | |||
/** | |||
* 邀请码使用次数 | |||
*/ | |||
private Long total; | |||
private Integer total; | |||
/** | |||
* 创建时间 | |||
*/ | |||
@@ -0,0 +1,11 @@ | |||
package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.sm.InviteCode; | |||
import com.iformall.domain.po.sm.InviteCodeInfo; | |||
public interface InviteCodeInfoMapper extends CommonMapper<InviteCodeInfo, String> { | |||
} |
@@ -0,0 +1,14 @@ | |||
package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.AliBusinessCircleOrder; | |||
import com.iformall.domain.po.sm.InviteCode; | |||
import com.iformall.service.sm.InviteCodeService; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
public interface InviteCodeMapper extends CommonMapper<InviteCode, String> { | |||
} |
@@ -1,5 +1,11 @@ | |||
package com.iformall.service.sm; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.WxCUserBasicInfo; | |||
public interface InviteCodeInfoService { | |||
ResultData useCode(WxCUserBasicInfo cUser, String code); | |||
Boolean isUse(WxCUserBasicInfo cUser); | |||
} |
@@ -1,9 +1,12 @@ | |||
package com.iformall.service.sm; | |||
import com.iformall.domain.po.sm.UserCreateVideoNum; | |||
import java.util.Map; | |||
import com.iformall.domain.po.sm.InviteCode; | |||
public interface InviteCodeService { | |||
String inviteCode(Long memberId); | |||
InviteCode getCodeInfo(String code); | |||
void addUseTotal(Long id, Integer total); | |||
} |
@@ -1,10 +1,81 @@ | |||
package com.iformall.service.sm.impl; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.iformall.common.ErrorCode; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.WxCUserBasicInfo; | |||
import com.iformall.domain.po.sm.InviteCode; | |||
import com.iformall.domain.po.sm.InviteCodeInfo; | |||
import com.iformall.mapper.InviteCodeInfoMapper; | |||
import com.iformall.service.sm.InviteCodeInfoService; | |||
import com.iformall.service.sm.InviteCodeService; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.util.ObjectUtils; | |||
@Service | |||
public class InviteCodeInfoServiceImpl implements InviteCodeInfoService { | |||
@Autowired | |||
private InviteCodeInfoMapper inviteCodeInfoMapper; | |||
@Autowired | |||
private InviteCodeService inviteCodeService; | |||
/** | |||
* 使用邀请码 | |||
* | |||
* @param cUser | |||
* @param code | |||
* @Author LWH | |||
* @version 1.0 | |||
*/ | |||
@Override | |||
public ResultData useCode(WxCUserBasicInfo cUser, String code) { | |||
//查询code 是否存在,存在再去进行操作 | |||
InviteCode info = inviteCodeService.getCodeInfo(code); | |||
if (!ObjectUtils.isEmpty(info)) { | |||
if (cUser.getId().equals(info.getUserId())) { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR, "不能使用自己的邀请码"); | |||
} | |||
Boolean use = isUse(cUser); | |||
if (use) { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR, "已经使用过邀请码"); | |||
} | |||
InviteCodeInfo codeInfo = new InviteCodeInfo(); | |||
codeInfo.setId(IdWorker.get().nextId()); | |||
codeInfo.setUserId(info.getUserId());//邀请用户id | |||
codeInfo.setInviteUserId(cUser.getId());//被邀请用户id | |||
codeInfo.setCode(code); | |||
codeInfo.setInviteId(info.getId()); | |||
codeInfo.setEmail(cUser.getEmail()); | |||
codeInfo.setPhone(codeInfo.getPhone()); | |||
inviteCodeInfoMapper.insert(codeInfo); | |||
inviteCodeService.addUseTotal(info.getId(), info.getTotal()); | |||
return new ResultData(); | |||
} else { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_ERROR, "邀请码不存在"); | |||
} | |||
} | |||
/** | |||
* 判断是否使用过邀请码 true:使用过 false:未使用 | |||
* | |||
* @param cUser | |||
* @Author LWH | |||
* @version 1.0 | |||
*/ | |||
@Override | |||
public Boolean isUse(WxCUserBasicInfo cUser) { | |||
InviteCodeInfo codeInfo = inviteCodeInfoMapper.selectOne(new LambdaQueryWrapper<InviteCodeInfo>().eq(InviteCodeInfo::getIsDel, 0).eq(InviteCodeInfo::getInviteUserId, cUser.getId())); | |||
if (!ObjectUtils.isEmpty(codeInfo)) { | |||
return true; | |||
} | |||
return false; | |||
} | |||
} |
@@ -1,9 +1,51 @@ | |||
package com.iformall.service.sm.impl; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
import com.iformall.common.IdWorker; | |||
import com.iformall.common.ResultData; | |||
import com.iformall.domain.po.sm.InviteCode; | |||
import com.iformall.mapper.InviteCodeMapper; | |||
import com.iformall.service.sm.InviteCodeService; | |||
import com.iformall.utils.sign.AppUtils; | |||
import io.swagger.models.auth.In; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.util.ObjectUtils; | |||
@Service | |||
public class InviteCodeServiceImpl implements InviteCodeService { | |||
@Autowired | |||
private InviteCodeMapper inviteCodeMapper; | |||
@Override | |||
public String inviteCode(Long memberId) { | |||
//生成了邀请码 查一下是否重复 | |||
String inviteCode = AppUtils.getInviteCode(); | |||
InviteCode info = getCodeInfo(inviteCode); | |||
if (!ObjectUtils.isEmpty(info)){ | |||
inviteCode = AppUtils.getInviteCode(); | |||
} | |||
InviteCode code = new InviteCode(); | |||
code.setId(IdWorker.get().nextId()); | |||
code.setCode(inviteCode); | |||
code.setUserId(memberId); | |||
code.setTotal(0); | |||
inviteCodeMapper.insert(code); | |||
return inviteCode; | |||
} | |||
@Override | |||
public InviteCode getCodeInfo(String code) { | |||
return inviteCodeMapper.selectOne(new LambdaQueryWrapper<InviteCode>().eq(InviteCode::getIsDel, 0).eq(InviteCode::getCode, code)); | |||
} | |||
@Override | |||
public void addUseTotal(Long id, Integer total) { | |||
InviteCode code = new InviteCode(); | |||
code.setId(id); | |||
code.setTotal(total + 1); | |||
inviteCodeMapper.updateById(code); | |||
} | |||
} |
@@ -41,6 +41,21 @@ public class AppUtils { | |||
} | |||
/** | |||
* 生成10为code码 | |||
*/ | |||
public static String getInviteCode() { | |||
StringBuffer shortBuffer = new StringBuffer(); | |||
String uuid = UUID.randomUUID().toString().replace("-", ""); | |||
for (int i = 0; i < 10; i++) { | |||
String str = uuid.substring(i * 3, i * 3 + 3); | |||
int x = Integer.parseInt(str, 16); | |||
shortBuffer.append(chars[x % 0x3E]); | |||
} | |||
return shortBuffer.toString(); | |||
} | |||
/** | |||
* <p> | |||
* 通过appId和内置关键词生成APP key | |||
@@ -113,6 +128,7 @@ public class AppUtils { | |||
public static void main(String[] args) { | |||
String appId = getAppId(); | |||
System.out.println("invite:"+getInviteCode()); | |||
String appKey = getAppKey(appId); | |||
String signKey = getSignKey(appId,appKey); | |||
System.out.println("appId: "+appId); | |||