From 49b4872e37f9e6ebe1d9d49d9ec33122b18cb8cc Mon Sep 17 00:00:00 2001 From: lrh <1585126058@qq.com> Date: Fri, 9 Jun 2023 15:02:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E9=82=80=E8=AF=B7=E7=A0=81?= =?UTF-8?q?=E3=80=81=E4=BD=BF=E7=94=A8=E9=82=80=E8=AF=B7=E7=A0=81=E3=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=BD=BF=E7=94=A8=E4=BA=86=E9=82=80=E8=AF=B7=E7=A0=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxUserGrantController.java | 32 +++++++++ .../com/iformall/domain/po/sm/InviteCode.java | 5 +- .../iformall/mapper/InviteCodeInfoMapper.java | 11 +++ .../com/iformall/mapper/InviteCodeMapper.java | 14 ++++ .../service/sm/InviteCodeInfoService.java | 6 ++ .../service/sm/InviteCodeService.java | 9 ++- .../sm/impl/InviteCodeInfoServiceImpl.java | 71 +++++++++++++++++++ .../sm/impl/InviteCodeServiceImpl.java | 42 +++++++++++ .../com/iformall/utils/sign/AppUtils.java | 16 +++++ 9 files changed, 201 insertions(+), 5 deletions(-) create mode 100644 suimangService/src/main/java/com/iformall/mapper/InviteCodeInfoMapper.java create mode 100644 suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java diff --git a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index bc02e35..640b72f 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -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); + } + } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/InviteCode.java b/suimangService/src/main/java/com/iformall/domain/po/sm/InviteCode.java index 6a054d2..549f533 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/InviteCode.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/InviteCode.java @@ -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; /** * 创建时间 */ diff --git a/suimangService/src/main/java/com/iformall/mapper/InviteCodeInfoMapper.java b/suimangService/src/main/java/com/iformall/mapper/InviteCodeInfoMapper.java new file mode 100644 index 0000000..4769a4b --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/InviteCodeInfoMapper.java @@ -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 { + + +} diff --git a/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java b/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java new file mode 100644 index 0000000..9dfc638 --- /dev/null +++ b/suimangService/src/main/java/com/iformall/mapper/InviteCodeMapper.java @@ -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 { + + +} diff --git a/suimangService/src/main/java/com/iformall/service/sm/InviteCodeInfoService.java b/suimangService/src/main/java/com/iformall/service/sm/InviteCodeInfoService.java index b0f7d40..aa6844a 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/InviteCodeInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/InviteCodeInfoService.java @@ -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); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/InviteCodeService.java b/suimangService/src/main/java/com/iformall/service/sm/InviteCodeService.java index 672e2ec..f82efa8 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/InviteCodeService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/InviteCodeService.java @@ -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); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java index 637bb20..07152af 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeInfoServiceImpl.java @@ -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().eq(InviteCodeInfo::getIsDel, 0).eq(InviteCodeInfo::getInviteUserId, cUser.getId())); + if (!ObjectUtils.isEmpty(codeInfo)) { + return true; + } + return false; + + } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java index 257d6b3..2379b87 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/InviteCodeServiceImpl.java @@ -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().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); + } } diff --git a/suimangService/src/main/java/com/iformall/utils/sign/AppUtils.java b/suimangService/src/main/java/com/iformall/utils/sign/AppUtils.java index 9737df7..c93d4e1 100644 --- a/suimangService/src/main/java/com/iformall/utils/sign/AppUtils.java +++ b/suimangService/src/main/java/com/iformall/utils/sign/AppUtils.java @@ -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(); + + } + /** *

* 通过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);