diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCode.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCode.java index 4e840a0..8c042b5 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCode.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberErrorCode.java @@ -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, "登录失败,账号密码不正确"); diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/auth/MemberComAuthEnum.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/auth/MemberComAuthEnum.java index faffc06..24558cd 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/auth/MemberComAuthEnum.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/auth/MemberComAuthEnum.java @@ -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; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/ComAuthController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/ComAuthController.java index ecb7291..88548fd 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/ComAuthController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/ComAuthController.java @@ -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 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> getAuthPage(@Valid ComAuthPageReqVO pageReqVO) { - PageResult 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 list = authService.getAuthPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "用户认证.xls", "数据", ComAuthRespVO.class, BeanUtils.toBean(list, ComAuthRespVO.class)); + PageResult pageResult = authService.getAuthPage(pageReqVO); + return success(pageResult); } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthRespVO.java index 12add50..c8f0086 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthRespVO.java @@ -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; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthSaveReqVO.java index 148c853..4bbc662 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/comauth/vo/ComAuthSaveReqVO.java @@ -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; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeExtReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeExtReqVO.java new file mode 100644 index 0000000..05a0244 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeExtReqVO.java @@ -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; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/AppComAuthController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/AppComAuthController.java index ba2aca8..a76cf23 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/AppComAuthController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/AppComAuthController.java @@ -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 createWechatAuth(@Valid @RequestBody CreateWechatAuthReqVo dto) { + dto.setMemberId(getLoginUserId()); + return success(comAuthService.createWechatAuth(dto)); + } + @PostMapping("/create-man-auth") @Operation(summary = "创建男性认证") public CommonResult createManAuth(@Valid @RequestBody CreateManAuthReqVo dto) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/vo/CreateWechatAuthReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/vo/CreateWechatAuthReqVo.java new file mode 100644 index 0000000..bb540f8 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/comauth/vo/CreateWechatAuthReqVo.java @@ -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; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index 6afc458..0d5c051 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -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 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 memberRecentTagList = memberRecentTagService.getByMemberId(user.getId()); + result.setMemberTagList(memberRecentTagList); + // 获取用户会员信息 + OpenTypeExtReqVO vipExt = openTypeService.getExtByMemeberId(user.getId()); + result.setMemberVip(vipExt); + return success(result); } @PutMapping("/update") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java index ee9a258..8695d85 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserInfoRespVO.java @@ -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 memberTagList; + + @Schema(description = "用户会员信息") + private OpenTypeExtReqVO memberVip; + @Schema(description = "用户 App - 会员等级") @Data public static class Level { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java index 0630b49..632da0c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java @@ -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; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/comauth/ComAuthDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/comauth/ComAuthDO.java index 48cd3f5..999f5f9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/comauth/ComAuthDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/comauth/ComAuthDO.java @@ -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) */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java index 4714e5a..f032b00 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java @@ -40,6 +40,11 @@ public class MemberRecentCfgDO extends BaseDO { */ private Boolean homeHide; + /** + * 全局隐身 + */ + private Boolean globalHide; + /** * 隐私保护 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthService.java index 7f7cc1d..e700900 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthService.java @@ -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 getAuthPage(ComAuthPageReqVO pageReqVO); + PageResult getAuthPage(ComAuthPageReqVO pageReqVO); /** * 轮训人脸认证 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthServiceImpl.java index 0663899..397a1f1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/comauth/ComAuthServiceImpl.java @@ -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 getAuthPage(ComAuthPageReqVO pageReqVO) { - return authMapper.selectPage(pageReqVO); + public PageResult getAuthPage(ComAuthPageReqVO pageReqVO) { + List resultList = new ArrayList<>(); + PageResult pageList = authMapper.selectPage(pageReqVO); + resultList = BeanUtil.copyToList(pageList.getList(), ComAuthRespVO.class); + // 设置用户信息 + disposeGetAuthPage(resultList, pageReqVO); + return new PageResult(resultList, pageList.getTotal()); } + /** * 轮训人脸认证 */ @@ -296,6 +354,23 @@ public class ComAuthServiceImpl implements ComAuthService { return totalSync; } + private void disposeGetAuthPage(List list, ComAuthPageReqVO dto) { + if (ObjectUtil.isEmpty(list)) return; + List userIds = list.stream().map(ComAuthRespVO::getAuthMemberId).distinct().filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); + List userList = memberUserService.getUserList(userIds); + if (ObjectUtil.isNotEmpty(userList)) { + Map 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); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeService.java index 41848ff..2440b9d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeService.java @@ -63,4 +63,9 @@ public interface OpenTypeService { * 判断用户是否还可以发送消息 */ boolean isUserCanSendMessage(Long sendId, Long receiveId); + + /** + * 查询会员信息 + */ + OpenTypeExtReqVO getExtByMemeberId(Long memberId); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeServiceImpl.java index 0f85f33..29770b0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeServiceImpl.java @@ -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); } } - } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java index 5721452..9a396b5 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java @@ -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 getByMemberIds(Collection 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); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java index 62c7a39..e38d036 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java @@ -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 getByMemberId(Long memberId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java index 0bd6d70..7c054a0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java @@ -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 getByMemberId(Long memberId) { + return memberRecentTagMapper.getByMemberId(memberId); + } } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java index 3a6e117..b27adcd 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java @@ -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());