公会-h5邀请

This commit is contained in:
khalil
2025-07-31 17:56:04 +08:00
committed by khalil
parent 5c1287a44a
commit de8b37532b
7 changed files with 353 additions and 0 deletions

View File

@@ -52,6 +52,10 @@ public class GuildConstant {
public static final String GUILD_USD_ACCOUNT = "guild_usd_account";
//退出家族
public static final String QUIT = "quit";
//邀请加入
public static final String INVITE_JOIN_H5 = "invite_join_h5";
//邀请申请公会
public static final String INVITE_APPLY_GUILD_H5 = "invite_apply_guild_h5";
}
public static class UsdTab {

View File

@@ -0,0 +1,95 @@
package com.accompany.business.model.guild;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import javax.annotation.Nullable;
import java.util.Date;
/**
* 公会H5邀请记录实体类
*/
@Data
public class GuildH5InviteRecord {
@TableId
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("邀请类型: 1-邀请申请公会 2-邀请加入公会")
private Byte inviteType;
@ApiModelProperty("邀请人ID")
private Long inviterUid;
@ApiModelProperty("邀请人分区ID")
private Integer partitionId;
@ApiModelProperty
private Date createTime;
//extend
@ApiModelProperty("公会名称")
private String guildName;
@ApiModelProperty("公会头像")
private String guildAvatar;
@ApiModelProperty("公会联系方式类型")
private String guildContactType;
@ApiModelProperty("公会联系方式")
private String guildContact;
@ApiModelProperty("公会长身份证")
private String idCard;
@ApiModelProperty("邀请人ID")
private Long inviteErbanNo;
@ApiModelProperty("邀请人证明")
private String inviteCheck;
/**
* 公会H5邀请类型枚举
*/
@Getter
public enum InviteTypeEnum {
/**
* 普通邀请
*/
APPLY_GUILD((byte) 1, "邀请申请公会"),
/**
* 特殊邀请
*/
INVITE_MEMBER((byte) 2, "邀请成为会员");
private final byte code;
private final String description;
InviteTypeEnum(byte code, String description) {
this.code = code;
this.description = description;
}
/**
* 根据code获取枚举实例
*
* @param code 枚举code
* @return 对应的枚举实例如果未找到返回null
*/
public static InviteTypeEnum fromCode(byte code) {
for (InviteTypeEnum type : values()) {
if (type.getCode() == code) {
return type;
}
}
return null;
}
}
}

View File

@@ -0,0 +1,13 @@
package com.accompany.business.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class GuildH5ApplyParam extends GuildApplyParam {
@ApiModelProperty("申请人email")
private String email;
@ApiModelProperty("邀请人uid")
private Long inviterUid;
}

View File

@@ -0,0 +1,12 @@
package com.accompany.business.mybatismapper.guild;
import com.accompany.business.model.guild.GuildH5InviteRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* 公会H5邀请记录 Mapper接口
*/
@Repository
public interface GuildH5InviteRecordMapper extends BaseMapper<GuildH5InviteRecord> {
}

View File

@@ -0,0 +1,142 @@
package com.accompany.business.service.guild;
import com.accompany.business.constant.guild.GuildConstant;
import com.accompany.business.model.guild.BdInfo;
import com.accompany.business.model.guild.GuildApply;
import com.accompany.business.model.guild.GuildH5InviteRecord;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.mybatismapper.guild.GuildH5InviteRecordMapper;
import com.accompany.business.param.GuildH5ApplyParam;
import com.accompany.business.service.user.UsersService;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 公会申请审核表 服务实现类
*
* @author
* @since 2024-12-04
*/
@Slf4j
@Service
public class GuildH5InviteService {
@Autowired
private GuildH5InviteRecordMapper recordMapper;
@Autowired
private GuildService guildService;
@Autowired
private GuildMemberService guildMemberService;
@Autowired
private GuildAuthService guildAuthService;
@Autowired
private BdInfoService bdInfoService;
@Autowired
private UsersService usersService;
@Autowired
private GuildApplyService guildApplyService;
public void validInviter(Long inviterUid, Byte inviteType) {
GuildH5InviteRecord.InviteTypeEnum inviteTypeEnum = GuildH5InviteRecord.InviteTypeEnum.fromCode(inviteType);
if (null == inviteTypeEnum){
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
}
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(inviterUid);
if (null == guildMember){
throw new ServiceException(BusiStatus.FAMILY_NOT_EXIST);
}
if (inviteTypeEnum.equals(GuildH5InviteRecord.InviteTypeEnum.INVITE_MEMBER)
&& !guildAuthService.hasAuthByRoleType(guildMember.getRoleType(), GuildConstant.AuthCode.INVITE_JOIN_H5)){
throw new ServiceException(BusiStatus.NOAUTHORITY);
}
else if (inviteTypeEnum.equals(GuildH5InviteRecord.InviteTypeEnum.APPLY_GUILD)
&& (!guildAuthService.hasAuthByRoleType(guildMember.getRoleType(), GuildConstant.AuthCode.INVITE_APPLY_GUILD_H5)
|| null == bdInfoService.getValidByUid(inviterUid))) {
throw new ServiceException(BusiStatus.NOAUTHORITY);
}
}
public void validEmailInviterStatus(String emailAddress, Long inviterUid, Byte inviteType) {
GuildH5InviteRecord.InviteTypeEnum inviteTypeEnum = GuildH5InviteRecord.InviteTypeEnum.fromCode(inviteType);
if (null == inviteTypeEnum){
throw new ServiceException(BusiStatus.PARAMETERILLEGAL);
}
GuildH5InviteRecord record = recordMapper.selectOne(Wrappers.<GuildH5InviteRecord>lambdaQuery()
.eq(GuildH5InviteRecord::getEmail, emailAddress));
if (null != record){
throw new ServiceException(BusiStatus.SERVERERROR);
}
GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(inviterUid);
if (inviteTypeEnum.equals(GuildH5InviteRecord.InviteTypeEnum.APPLY_GUILD)){
if (null != guildMember && guildAuthService.hasAuthByRoleType(guildMember.getRoleType(), GuildConstant.AuthCode.INVITE_APPLY_GUILD_H5)) {
return;
}
BdInfo bdInfo = bdInfoService.getValidByUid(inviterUid);
if (null != bdInfo && Constant.status.valid.equals(bdInfo.getStatus())){
return;
}
throw new ServiceException(BusiStatus.NOAUTHORITY);
} else if (inviteTypeEnum.equals(GuildH5InviteRecord.InviteTypeEnum.INVITE_MEMBER)) {
if (null == guildMember || !guildAuthService.hasAuthByRoleType(guildMember.getRoleType(), GuildConstant.AuthCode.INVITE_JOIN_H5)) {
throw new ServiceException(BusiStatus.NOAUTHORITY);
}
record = new GuildH5InviteRecord();
record.setEmail(emailAddress);
record.setInviteType(GuildH5InviteRecord.InviteTypeEnum.INVITE_MEMBER.getCode());
record.setInviterUid(inviterUid);
record.setPartitionId(guildMember.getPartitionId());
record.setCreateTime(new Date());
recordMapper.insert(record);
}
}
public void applyGuild(GuildH5ApplyParam guildApplyParam) {
String emailAddress = guildApplyParam.getEmail();
validEmailInviterStatus(emailAddress, guildApplyParam.getInviterUid(), GuildH5InviteRecord.InviteTypeEnum.APPLY_GUILD.getCode());
Users inviter = usersService.getNotNullUsersByUid(guildApplyParam.getInviterUid());
GuildApply existNotAuditByGuildName = guildApplyService.getExistNotAuditByGuildName(guildApplyParam.getGuildName());
if (existNotAuditByGuildName != null) {
throw new ServiceException(BusiStatus.GUILD_APPLY_GUILD_NAME_CHECK);
}
boolean equalsName = guildService.checkGuildEqualsName(guildApplyParam.getGuildName(), null);
if (equalsName) {
throw new ServiceException(BusiStatus.GUILD_APPLY_GUILD_NAME_CHECK);
}
GuildH5InviteRecord record = new GuildH5InviteRecord();
record.setEmail(guildApplyParam.getEmail());
record.setInviteType(GuildH5InviteRecord.InviteTypeEnum.APPLY_GUILD.getCode());
record.setInviterUid(inviter.getUid());
record.setPartitionId(inviter.getPartitionId());
record.setCreateTime(new Date());
record.setGuildName(guildApplyParam.getGuildName());
record.setGuildAvatar(guildApplyParam.getGuildAvatar());
record.setGuildContactType(guildApplyParam.getGuildContactType());
record.setGuildContact(guildApplyParam.getGuildContact());
record.setIdCard(guildApplyParam.getIdCard());
record.setInviteErbanNo(guildApplyParam.getInviteErbanNo());
record.setInviteCheck(guildApplyParam.getInviteCheck());
recordMapper.insert(record);
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.accompany.business.mybatismapper.guild.GuildH5InviteRecordMapper">
<!-- 该文件可根据业务需求添加SQL映射内容 -->
</mapper>

View File

@@ -0,0 +1,80 @@
package com.accompany.business.controller.guild;
import com.accompany.business.param.GuildH5ApplyParam;
import com.accompany.business.service.guild.GuildH5InviteService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.SimpleUserVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.email.service.EmailService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@Api(tags = "guild h5邀请")
@RequestMapping("/guild/h5Invite")
@RestController
public class GuildH5InviteController {
@Autowired
private GuildH5InviteService service;
@Autowired
private UsersService usersService;
@Autowired
private EmailService emailService;
@ApiOperation(value = "公会申请")
@ApiImplicitParams({
@ApiImplicitParam(name = "inviterUid", value = "邀请人uid", required = true),
@ApiImplicitParam(name = "inviteType", value = "邀请类型: 1-邀请申请公会 2-邀请加入公会", required = true, dataType = "Byte"),
})
@GetMapping("/getInviter")
private BusiResult<SimpleUserVo> getInviteUser(Long inviterUid, Byte inviteType) {
if (null == inviterUid || null == inviteType){
return BusiResult.fail(BusiStatus.PARAMERROR);
}
service.validInviter(inviterUid, inviteType);
SimpleUserVo simpleUserVo = usersService.getSimpleUserByUid(inviterUid);
if (null == simpleUserVo) {
return BusiResult.fail(BusiStatus.USERNOTEXISTS);
}
return BusiResult.success(simpleUserVo);
}
@ApiParam("校验邮箱验证码")
@ApiImplicitParams({
@ApiImplicitParam(name = "emailAddress", value = "邮箱地址", required = true, dataType = "String"),
@ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String"),
@ApiImplicitParam(name = "inviterUid", value = "邀请人uid", required = true),
@ApiImplicitParam(name = "inviteType", value = "邀请类型: 1-邀请申请公会 2-邀请加入公会", required = true, dataType = "Byte"),
})
@PostMapping(value = "/verifyEmailCode")
public BusiResult<Void> verify(String emailAddress, String code, Long inviterUid, Byte inviteType) {
boolean verify = emailService.verifyEmailCode(emailAddress, code);
if (!verify) {
return BusiResult.fail(BusiStatus.EMAIL_VERIFY_CODE_ERROR);
}
service.validEmailInviterStatus(emailAddress, inviterUid, inviteType);
return BusiResult.success();
}
@ApiOperation(value = "公会申请(传json格式)")
@Authorization
@PostMapping("/applyGuild")
public BusiResult<Void> apply(@RequestBody GuildH5ApplyParam guildApplyParam) {
if (!StringUtils.hasText(guildApplyParam.getEmail())
|| null == guildApplyParam.getInviterUid()
|| !StringUtils.hasText(guildApplyParam.getGuildName())
|| !StringUtils.hasText(guildApplyParam.getGuildContact())
|| !StringUtils.hasText(guildApplyParam.getGuildAvatar())
|| !StringUtils.hasText(guildApplyParam.getIdCard())) {
throw new ServiceException(BusiStatus.GUILD_APPLY_PARAM_CHECK);
}
service.applyGuild(guildApplyParam);
return BusiResult.success();
}
}