@@ -9,6 +9,8 @@ import com.iformall.domain.po.*; | |||||
import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
import com.iformall.service.*; | import com.iformall.service.*; | ||||
import com.iformall.service.cuser.CUserServiceFactory; | 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.service.sm.UserCreateVideoNumService; | ||||
import com.iformall.utils.Constant; | import com.iformall.utils.Constant; | ||||
import com.iformall.utils.PasswordHelper; | import com.iformall.utils.PasswordHelper; | ||||
@@ -85,6 +87,12 @@ public class WxUserGrantController extends BaseController { | |||||
@Autowired | @Autowired | ||||
private UserCreateVideoNumService userCreateVideoNumService; | private UserCreateVideoNumService userCreateVideoNumService; | ||||
@Autowired | |||||
private InviteCodeService inviteCodeService; | |||||
@Autowired | |||||
private InviteCodeInfoService inviteCodeInfoService; | |||||
@AuthIgnore | @AuthIgnore | ||||
@ApiOperation("验证码") | @ApiOperation("验证码") | ||||
@GetMapping("/captcha.jpg") | @GetMapping("/captcha.jpg") | ||||
@@ -651,4 +659,28 @@ public class WxUserGrantController extends BaseController { | |||||
return new ResultData(); | 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.TableId; | ||||
import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||
import io.swagger.models.auth.In; | |||||
import lombok.Data; | import lombok.Data; | ||||
import java.io.Serializable; | import java.io.Serializable; | ||||
@@ -37,11 +38,11 @@ public class InviteCode implements Serializable { | |||||
/** | /** | ||||
* 邀请码code | * 邀请码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; | package com.iformall.service.sm; | ||||
import com.iformall.common.ResultData; | |||||
import com.iformall.domain.po.WxCUserBasicInfo; | |||||
public interface InviteCodeInfoService { | public interface InviteCodeInfoService { | ||||
ResultData useCode(WxCUserBasicInfo cUser, String code); | |||||
Boolean isUse(WxCUserBasicInfo cUser); | |||||
} | } |
@@ -1,9 +1,12 @@ | |||||
package com.iformall.service.sm; | 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 { | 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; | 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.InviteCodeInfoService; | ||||
import com.iformall.service.sm.InviteCodeService; | import com.iformall.service.sm.InviteCodeService; | ||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.springframework.util.ObjectUtils; | |||||
@Service | @Service | ||||
public class InviteCodeInfoServiceImpl implements InviteCodeInfoService { | 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; | 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.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.stereotype.Service; | ||||
import org.springframework.util.ObjectUtils; | |||||
@Service | @Service | ||||
public class InviteCodeServiceImpl implements InviteCodeService { | 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> | * <p> | ||||
* 通过appId和内置关键词生成APP key | * 通过appId和内置关键词生成APP key | ||||
@@ -113,6 +128,7 @@ public class AppUtils { | |||||
public static void main(String[] args) { | public static void main(String[] args) { | ||||
String appId = getAppId(); | String appId = getAppId(); | ||||
System.out.println("invite:"+getInviteCode()); | |||||
String appKey = getAppKey(appId); | String appKey = getAppKey(appId); | ||||
String signKey = getSignKey(appId,appKey); | String signKey = getSignKey(appId,appKey); | ||||
System.out.println("appId: "+appId); | System.out.println("appId: "+appId); | ||||