feat:微信认证

This commit is contained in:
dzc committed 2025-12-04 15:29:13 +08:00
1 parent 2b34989bfc
commit 75be4d0f73
21 files changed
+285 -38

No files matched your search

@@ -15,6 +15,7 @@ public interface MemberErrorCode {
ErrorCode USER_MOBILE_USED = new ErrorCode(1_004_001_002, "修改手机失败,该手机号({})已经被使用");
ErrorCode USER_POINT_NOT_ENOUGH = new ErrorCode(1_004_001_003, "用户积分余额不足");
ErrorCode USER_REGISTER_MOBILE_USED = new ErrorCode(1_004_001_004, "注册失败,该手机号({})已经被使用");
ErrorCode USER_UPDATE_CONFIG_ERROR = new ErrorCode(1_004_001_005, "不能修改{}配置,您不是会员");
// ========== AUTH 模块 1-004-003-000 ==========
ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_004_003_000, "登录失败,账号密码不正确");
@@ -16,6 +16,7 @@ import java.util.List;
public enum MemberComAuthEnum {
MAN_MEMBER_TRUE("1", "用户真实性认证(男性)"),
WOMAN_MEMBER_TRUE("2", "用户真实性认证(女性)"),
WECHAT_NUMBER("3", "微信号认证"),
;
private final String type;
private final String description;
@@ -23,12 +23,6 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.comauth.ComAuthDO;
@@ -56,6 +50,13 @@ public class ComAuthController {
return success(true);
}
@PostMapping("/check")
@Operation(summary = "审核")
public CommonResult<Boolean> check(@Valid @RequestBody ComAuthSaveReqVO updateReqVO) {
authService.check(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除用户认证")
@Parameter(name = "id", description = "编号", required = true)
@@ -78,19 +79,8 @@ public class ComAuthController {
@Operation(summary = "获得用户认证分页")
@PreAuthorize("@ss.hasPermission('member:auth:query')")
public CommonResult<PageResult<ComAuthRespVO>> getAuthPage(@Valid ComAuthPageReqVO pageReqVO) {
PageResult<ComAuthDO> pageResult = authService.getAuthPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ComAuthRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出用户认证 Excel")
@PreAuthorize("@ss.hasPermission('member:auth:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportAuthExcel(@Valid ComAuthPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ComAuthDO> list = authService.getAuthPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "用户认证.xls", "数据", ComAuthRespVO.class, BeanUtils.toBean(list, ComAuthRespVO.class));
PageResult<ComAuthRespVO> pageResult = authService.getAuthPage(pageReqVO);
return success(pageResult);
}
}
@@ -22,11 +22,11 @@ public class ComAuthRespVO {
@Schema(description = "认证类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31110")
@ExcelProperty("认证类型编号")
private Long bizId;
private String bizId;
@Schema(description = "认证图片或视频", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("认证图片或视频")
private Long authPic;
private String authPic;
@Schema(description = "认证额外信息(json)", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("认证额外信息(json)")
@@ -51,4 +51,16 @@ public class ComAuthRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
/**
* 用户相关
*/
@Schema(description = "用户名")
private String memberUserName;
@Schema(description = "用户手机号")
private String memberUserPhone;
@Schema(description = "用户头像")
private String memberUserAvatar;
}
@@ -18,27 +18,25 @@ public class ComAuthSaveReqVO {
private String bizType;
@Schema(description = "认证类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31110")
@NotNull(message = "认证类型编号不能为空")
private Long bizId;
private String bizId;
@Schema(description = "认证图片或视频", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "认证图片或视频不能为空")
private Long authPic;
private String authPic;
@Schema(description = "认证额外信息(json)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "认证额外信息(json)不能为空")
private String authExtraJson;
@Schema(description = "认证时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "认证时间不能为空")
private LocalDateTime authTime;
@Schema(description = "认证人编号(-1为系统认证)", requiredMode = Schema.RequiredMode.REQUIRED, example = "22515")
@NotNull(message = "认证人编号(-1为系统认证)不能为空")
private Long authMemberId;
@Schema(description = "认证状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotEmpty(message = "认证状态不能为空")
private String authStatus;
@Schema(description = "认证失败原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private String failReason;
}
@@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.member.controller.admin.opentype.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 会员类型分页 Request VO")
@Data
@ToString(callSuper = true)
public class OpenTypeExtReqVO {
@Schema(description = "是否是会员")
private boolean isVip;
@Schema(description = "会员到期时间")
private LocalDateTime expirationTime;
}
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.controller.app.comauth;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateManAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWechatAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWomanAuthReqVo;
import cn.iocoder.yudao.module.member.dal.dataobject.comauth.ComAuthDO;
import cn.iocoder.yudao.module.member.service.comauth.ComAuthService;
@@ -26,6 +27,13 @@ public class AppComAuthController {
@Resource
private ComAuthService comAuthService;
@PostMapping("/create-wecaht-auth")
@Operation(summary = "创建微信认证")
public CommonResult<ComAuthDO> createWechatAuth(@Valid @RequestBody CreateWechatAuthReqVo dto) {
dto.setMemberId(getLoginUserId());
return success(comAuthService.createWechatAuth(dto));
}
@PostMapping("/create-man-auth")
@Operation(summary = "创建男性认证")
public CommonResult<ComAuthDO> createManAuth(@Valid @RequestBody CreateManAuthReqVo dto) {
@@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.member.controller.app.comauth.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* 创建微信认证 Request VO
*/
@Data
public class CreateWechatAuthReqVo {
@Schema(description = "会员编号")
private Long memberId;
@Schema(description = "认证图片")
@NotEmpty(message = "认证图片不能为空")
private String wechatNumber;
@Schema(description = "微信二维码")
@NotEmpty(message = "微信二维码不能为空")
private String wechatQrcode;
}
@@ -2,12 +2,16 @@ package cn.iocoder.yudao.module.member.controller.app.user;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.member.client.service.ChatApi;
import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.OpenTypeExtReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService;
import cn.iocoder.yudao.module.member.service.recent.RecentService;
import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -19,6 +23,8 @@ import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import javax.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -33,13 +39,24 @@ public class AppMemberUserController {
private MemberUserService userService;
@Resource
private MemberLevelService levelService;
@Resource
private MemberRecentTagService memberRecentTagService;
@Resource
private OpenTypeService openTypeService;
@GetMapping("/get")
@Operation(summary = "获得基本信息")
public CommonResult<AppMemberUserInfoRespVO> getUserInfo() {
MemberUserDO user = userService.getUser(getLoginUserId());
MemberLevelDO level = levelService.getLevel(user.getLevelId());
return success(MemberUserConvert.INSTANCE.convert(user, level));
AppMemberUserInfoRespVO result = MemberUserConvert.INSTANCE.convert(user, level);
// 获取用户tag
List<MemberRecentTagDO> memberRecentTagList = memberRecentTagService.getByMemberId(user.getId());
result.setMemberTagList(memberRecentTagList);
// 获取用户会员信息
OpenTypeExtReqVO vipExt = openTypeService.getExtByMemeberId(user.getId());
result.setMemberVip(vipExt);
return success(result);
}
@PutMapping("/update")
@@ -1,11 +1,14 @@
package cn.iocoder.yudao.module.member.controller.app.user.vo;
import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.OpenTypeExtReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "用户 APP - 用户个人信息 Response VO")
@Data
@@ -55,6 +58,12 @@ public class AppMemberUserInfoRespVO {
@Schema(description = "是否成为推广员", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
private Boolean brokerageEnabled;
@Schema(description = "用户tag")
private List<MemberRecentTagDO> memberTagList;
@Schema(description = "用户会员信息")
private OpenTypeExtReqVO memberVip;
@Schema(description = "用户 App - 会员等级")
@Data
public static class Level {
@@ -24,6 +24,10 @@ public class MemberRecentCfgReqVo {
@Schema(description = "首页隐身")
private Boolean homeHide;
@NotNull(message = "全局隐身不能为空")
@Schema(description = "全局隐身")
private Boolean globalHide;
@NotNull(message = "短信通知不能为空")
@Schema(description = "隐私保护")
private Boolean privacySecure;
@@ -68,6 +68,24 @@ public class ComAuthDO extends BaseDO {
*/
private String failReason;
/**
* 微信认证额外信息(json)
*/
@Data
public static class WechatAuthExtra {
/**
* 微信号
*/
private String wechatNumber;
/**
* 微信二维码
*/
private String wechatQrcode;
}
/**
* 男性用户真实性认证额外信息(json)
*/
@@ -40,6 +40,11 @@ public class MemberRecentCfgDO extends BaseDO {
*/
private Boolean homeHide;
/**
* 全局隐身
*/
private Boolean globalHide;
/**
* 隐私保护
*/
@@ -4,8 +4,10 @@ import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthRespVO;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateManAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWechatAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWomanAuthReqVo;
import cn.iocoder.yudao.module.member.dal.dataobject.comauth.ComAuthDO;
@@ -19,6 +21,11 @@ public interface ComAuthService {
*/
Long createAuth(@Valid ComAuthSaveReqVO createReqVO);
/**
* 创建微信认证
*/
ComAuthDO createWechatAuth(@Valid CreateWechatAuthReqVo dto);
/**
* 创建男性认证
*/
@@ -34,6 +41,11 @@ public interface ComAuthService {
*/
void updateAuth(@Valid ComAuthSaveReqVO updateReqVO);
/**
* 审核
*/
void check(@Valid ComAuthSaveReqVO updateReqVO);
/**
* 删除用户认证
*/
@@ -57,7 +69,7 @@ public interface ComAuthService {
/**
* 获得用户认证分页
*/
PageResult<ComAuthDO> getAuthPage(ComAuthPageReqVO pageReqVO);
PageResult<ComAuthRespVO> getAuthPage(ComAuthPageReqVO pageReqVO);
/**
* 轮训人脸认证
@@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.member.service.comauth;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
@@ -10,21 +12,20 @@ import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFaceVerifyR
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFindFaceVerifyReqVo;
import cn.iocoder.yudao.module.member.client.vo.thirdfaceverify.ThirdFindFaceVerifyResVo;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthRespVO;
import cn.iocoder.yudao.module.member.controller.admin.comauth.vo.ComAuthSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateManAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWechatAuthReqVo;
import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWomanAuthReqVo;
import cn.iocoder.yudao.module.member.dal.dataobject.comauth.ComAuthDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.comauth.ComAuthMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberRecentTagMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.auth.MemberComAuthEnum;
import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
import cn.iocoder.yudao.module.member.enums.auth.MemberComAuthStatusEnum;
import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import kotlin.jvm.internal.Lambda;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -41,6 +42,8 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -75,6 +78,27 @@ public class ComAuthServiceImpl implements ComAuthService {
return auth.getId();
}
/**
* 创建微信认证
*/
@Override
public ComAuthDO createWechatAuth(CreateWechatAuthReqVo dto) {
ComAuthDO.WechatAuthExtra extraObj = new ComAuthDO.WechatAuthExtra();
extraObj.setWechatNumber(dto.getWechatNumber());
extraObj.setWechatQrcode(dto.getWechatQrcode());
ComAuthDO saveObj = new ComAuthDO();
saveObj.setAuthMemberId(dto.getMemberId());
saveObj.setBizType(MemberComAuthEnum.WECHAT_NUMBER.getType());
saveObj.setAuthStatus(MemberComAuthStatusEnum.WAIT_AUTH.getType());
saveObj.setAuthPic(dto.getWechatQrcode());
saveObj.setAuthExtraJson(JSONUtil.toJsonStr(extraObj));
authMapper.insert(saveObj);
return authMapper.selectById(saveObj.getId());
}
/**
* 创建男性认证
*/
@@ -87,7 +111,6 @@ public class ComAuthServiceImpl implements ComAuthService {
ComAuthDO saveObj = new ComAuthDO();
saveObj.setAuthMemberId(dto.getMemberId());
saveObj.setBizType(MemberComAuthEnum.MAN_MEMBER_TRUE.getType());
saveObj.setAuthStatus("WAITING");
saveObj.setAuthStatus(MemberComAuthStatusEnum.WAIT_AUTH.getType());
saveObj.setAuthPic(dto.getAuthPic());
authMapper.insert(saveObj);
@@ -191,6 +214,35 @@ public class ComAuthServiceImpl implements ComAuthService {
authMapper.updateById(updateObj);
}
/**
* 审核
*/
@Override
public void check(ComAuthSaveReqVO updateReqVO) {
ComAuthDO detail = authMapper.selectById(updateReqVO.getId());
if (ObjectUtil.isEmpty(detail)) {
throw exception(MemberErrorCode.COM_AUTH_NOT_EXISTS);
}
if (ObjectUtil.notEqual(updateReqVO.getBizType(), MemberComAuthEnum.WECHAT_NUMBER.getType())) {
throw exception(MemberErrorCode.EMPTY, "审核类型错误");
}
ComAuthDO updateObj = new ComAuthDO();
updateObj.setId(updateReqVO.getId());
updateObj.setAuthStatus(updateReqVO.getAuthStatus());
updateObj.setAuthTime(LocalDateTime.now());
updateObj.setFailReason(updateReqVO.getFailReason());
authMapper.updateById(updateObj);
if (ObjectUtil.equals(updateReqVO.getAuthStatus(), MemberComAuthStatusEnum.CHECK_PASS.getType())) {
ComAuthDO.WechatAuthExtra json = JSONUtil.toBean(updateReqVO.getAuthExtraJson(), ComAuthDO.WechatAuthExtra.class);
// 修改用户微信号信息
MemberUserDO updateUserObj = new MemberUserDO();
updateUserObj.setId(detail.getAuthMemberId());
updateUserObj.setWechatNum(json.getWechatNumber());
updateUserObj.setWechatQrCode(json.getWechatQrcode());
memberUserMapper.updateById(updateUserObj);
}
}
/**
* 删除用户认证
*/
@@ -244,10 +296,16 @@ public class ComAuthServiceImpl implements ComAuthService {
* 获得用户认证分页
*/
@Override
public PageResult<ComAuthDO> getAuthPage(ComAuthPageReqVO pageReqVO) {
return authMapper.selectPage(pageReqVO);
public PageResult<ComAuthRespVO> getAuthPage(ComAuthPageReqVO pageReqVO) {
List<ComAuthRespVO> resultList = new ArrayList<>();
PageResult<ComAuthDO> pageList = authMapper.selectPage(pageReqVO);
resultList = BeanUtil.copyToList(pageList.getList(), ComAuthRespVO.class);
// 设置用户信息
disposeGetAuthPage(resultList, pageReqVO);
return new PageResult<ComAuthRespVO>(resultList, pageList.getTotal());
}
/**
* 轮训人脸认证
*/
@@ -296,6 +354,23 @@ public class ComAuthServiceImpl implements ComAuthService {
return totalSync;
}
private void disposeGetAuthPage(List<ComAuthRespVO> list, ComAuthPageReqVO dto) {
if (ObjectUtil.isEmpty(list)) return;
List<Long> userIds = list.stream().map(ComAuthRespVO::getAuthMemberId).distinct().filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
List<MemberUserDO> userList = memberUserService.getUserList(userIds);
if (ObjectUtil.isNotEmpty(userList)) {
Map<Long, MemberUserDO> userMap = IterUtil.toMap(userList, MemberUserDO::getId);
list.forEach(v -> {
MemberUserDO user = userMap.get(v.getAuthMemberId());
if (ObjectUtil.isNotEmpty(user)) {
v.setMemberUserName(user.getNickname());
v.setMemberUserPhone(user.getMobile());
v.setMemberUserAvatar(user.getAvatar());
}
});
}
}
private void validateAuthExists(Long id) {
if (authMapper.selectById(id) == null) {
throw exception(MemberErrorCode.COM_AUTH_NOT_EXISTS);
@@ -63,4 +63,9 @@ public interface OpenTypeService {
* 判断用户是否还可以发送消息
*/
boolean isUserCanSendMessage(Long sendId, Long receiveId);
/**
* 查询会员信息
*/
OpenTypeExtReqVO getExtByMemeberId(Long memberId);
}
@@ -213,10 +213,21 @@ public class OpenTypeServiceImpl implements OpenTypeService {
}
}
/**
* 查询会员信息
*/
@Override
public OpenTypeExtReqVO getExtByMemeberId(Long memberId) {
OpenTypeExtReqVO result = new OpenTypeExtReqVO();
OpenTypeUserDO openTypeUserDO = openTypeUserMapper.selectEnableByUserId(memberId);
result.setVip(ObjectUtil.isNotEmpty(openTypeUserDO));
result.setExpirationTime(ObjectUtil.isNotEmpty(openTypeUserDO) ? openTypeUserDO.getEndTime() : null);
return result;
}
private void validateOpenTypeExists(Long id) {
if (openTypeMapper.selectById(id) == null) {
throw exception(MemberErrorCode.OPEN_TYPE_NOT_EXISTS);
}
}
}
@@ -6,6 +6,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.app.user.vo.recentcfg.MemberRecentCfgReqVo;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO;
import cn.iocoder.yudao.module.member.dal.mysql.user.RecentCfgMapper;
import cn.iocoder.yudao.module.member.enums.MemberErrorCode;
import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -17,6 +19,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
* 用户朋友圈相关配置 Service 实现类
@@ -29,6 +33,8 @@ public class MemberRecentCfgServiceImpl implements MemberRecentCfgService {
@Resource
private RecentCfgMapper recentCfgMapper;
@Resource
private OpenTypeService openTypeService;
@Override
public List<MemberRecentCfgDO> getByMemberIds(Collection<Long> memberIds) {
@@ -53,6 +59,15 @@ public class MemberRecentCfgServiceImpl implements MemberRecentCfgService {
if (ObjectUtil.isEmpty(detail)) {
recentCfgMapper.insert(entity);
} else {
// 判断是否修改了`全局隐身`和`首页隐身`
if (ObjectUtil.isNotEmpty(dto.getGlobalHide()) && ObjectUtil.isNotEmpty(dto.getHomeHide())) {
if (dto.getGlobalHide() || dto.getHomeHide()) {
// 判断是否为会员
if (!openTypeService.isUserOpenType()) {
throw exception(MemberErrorCode.USER_UPDATE_CONFIG_ERROR, "全局隐身或首页隐身");
}
}
}
entity.setId(detail.getId());
recentCfgMapper.updateById(entity);
}
@@ -1,5 +1,9 @@
package cn.iocoder.yudao.module.member.service.user;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO;
import java.util.List;
/**
* 用户tag
*/
@@ -9,4 +13,9 @@ public interface MemberRecentTagService {
* 设置用户真人认证tag
*/
void setPersonTag(Long authMemberId, boolean isAddTag);
/**
* 获取用户tag
*/
List<MemberRecentTagDO> getByMemberId(Long memberId);
}
@@ -11,6 +11,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Collections;
import java.util.List;
@Service
@Valid
@@ -44,4 +46,12 @@ public class MemberRecentTagServiceImp implements MemberRecentTagService {
}
}
}
/**
* 获取用户tag
*/
@Override
public List<MemberRecentTagDO> getByMemberId(Long memberId) {
return memberRecentTagMapper.getByMemberId(memberId);
}
}
@@ -148,7 +148,7 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
if (currentWallet.getBalance() < gift.getPrice()) throw exception(WALLET_RECHARGE_GIFT_BALANCE_NOT_ENOUGH);
String title = String.format("用户[%s]赠送给用户[%s]价值[%s]元的礼物", currentUser.getNickname(), targetUser.getNickname(), fenToYuanStr(gift.getPrice()));
// 添加转账记录
// 添加送出礼物记录
WalletUserTransitionDO userTransitionObj = new WalletUserTransitionDO();
userTransitionObj.setBizType(PayUserTransferTypeEnum.GIFT_TRANSFER.getType());
userTransitionObj.setBizId(gift.getId());