From e1e3521d7fdc61b76dd8adaaa4519fcf9ae5975d Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 5 Dec 2025 17:10:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B8=85=E7=90=86=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E4=BC=9A=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../brokerage/AppBrokerageCodeController.java | 2 - .../member/enums/tag/MemberRecentTagEnum.java | 3 +- .../admin/config/vo/MemberConfigBaseVO.java | 4 ++ .../admin/recent/vo/OperationPageReqVO.java | 6 +++ .../admin/recent/vo/OperationRespVO.java | 6 +++ .../admin/recent/vo/OperationSaveReqVO.java | 9 ++++ .../app/config/AppMemberConfigController.java | 37 +++++++++++++++ .../app/recent/vo/AppRecentOperateReqVo.java | 6 +++ .../app/user/AppMemberUserController.java | 6 +-- .../app/user/vo/AppMemberUserInfoRespVO.java | 4 +- .../dal/dataobject/config/MemberConfigDO.java | 10 ++++ .../dal/dataobject/recent/OperationDO.java | 10 ++++ .../mysql/opentype/OpenTypeUserMapper.java | 4 ++ .../module/member/job/member/CheckVipJob.java | 35 ++++++++++++++ .../opentype/BO/OpenTypeExtBO.java} | 8 ++-- .../service/opentype/OpenTypeService.java | 10 +++- .../service/opentype/OpenTypeServiceImpl.java | 47 +++++++++++++++++-- .../service/recent/RecentServiceImpl.java | 2 + .../service/user/MemberRecentTagService.java | 5 ++ .../user/MemberRecentTagServiceImp.java | 32 +++++++++++++ .../resources/mapper/OpenTypeUserMapper.xml | 24 ++++++++++ .../main/resources/mapper/OperationMapper.xml | 2 + 22 files changed, 256 insertions(+), 16 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/config/AppMemberConfigController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java rename yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/{controller/admin/opentype/vo/OpenTypeExtReqVO.java => service/opentype/BO/OpenTypeExtBO.java} (71%) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OpenTypeUserMapper.xml diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageCodeController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageCodeController.java index ebede09..459e7f8 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageCodeController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/brokerage/AppBrokerageCodeController.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.trade.controller.app.brokerage; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO; import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageCodeDO; import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageCodeService; import io.swagger.v3.oas.annotations.Operation; @@ -11,7 +10,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.validation.Valid; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java index 5867408..1ada97b 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java @@ -18,12 +18,13 @@ public enum MemberRecentTagEnum { TRUE_PERSON_AUTH("1", "真人认证"), NEW_PERSON("2", "新人"), HOME_RECOMMEND("3", "首页推荐"), + VIP("4", "VIP用户"), ; private final String type; private final String description; public static MemberRecentTagEnum valueOfType(String type) { - return Arrays.asList(values()).stream().filter(v-> ObjectUtil.equals(v.type, type)).findFirst().orElse(null); + return Arrays.asList(values()).stream().filter(v -> ObjectUtil.equals(v.type, type)).findFirst().orElse(null); } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java index d61b4a2..2e1f0e1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.NotNull; +import java.util.List; /** * 会员配置 Base VO,提供给添加、修改、详细的子 VO 使用 @@ -36,4 +37,7 @@ public class MemberConfigBaseVO { @Schema(description = "普通用户每天可以和人发几次消息") private Integer defaultChatUserMsgCout; + @Schema(description = "举报类型") + private List reportTypeList; + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationPageReqVO.java index f08b2f3..ee73f6e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationPageReqVO.java @@ -58,6 +58,12 @@ public class OperationPageReqVO extends PageParam { @Schema(description = "举报类型") private String reportType; + @Schema(description = "举报问题描述") + private String reportDescription; + + @Schema(description = "举报图片") + private String reportPic; + @Schema(description = "身材评分") private Integer scoreSc; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationRespVO.java index ce0f003..e804c51 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationRespVO.java @@ -56,6 +56,12 @@ public class OperationRespVO { @ExcelProperty("举报类型") private String reportType; + @Schema(description = "举报问题描述") + private String reportDescription; + + @Schema(description = "举报图片") + private String reportPic; + @Schema(description = "身材评分") @ExcelProperty("身材评分") private Integer scoreSc; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationSaveReqVO.java index 5a639ac..b8f04db 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/OperationSaveReqVO.java @@ -2,9 +2,12 @@ package cn.iocoder.yudao.module.member.controller.admin.recent.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + import java.util.*; import javax.validation.constraints.*; + import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 朋友圈操作新增/修改 Request VO") @@ -35,6 +38,12 @@ public class OperationSaveReqVO { @Schema(description = "举报类型", example = "2") private String reportType; + @Schema(description = "举报问题描述") + private String reportDescription; + + @Schema(description = "举报图片") + private String reportPic; + @Schema(description = "身材评分") private Integer scoreSc; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/config/AppMemberConfigController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/config/AppMemberConfigController.java new file mode 100644 index 0000000..31e8556 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/config/AppMemberConfigController.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.member.controller.app.config; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.member.controller.admin.config.vo.MemberConfigRespVO; +import cn.iocoder.yudao.module.member.convert.config.MemberConfigConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; +import cn.iocoder.yudao.module.member.service.config.MemberConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员设置") +@RestController +@RequestMapping("/member/config") +@Validated +public class AppMemberConfigController { + + @Resource + private MemberConfigService memberConfigService; + + @GetMapping("/get") + @Operation(summary = "获得会员配置") + public CommonResult getConfig() { + MemberConfigDO config = memberConfigService.getConfig(); + return success(MemberConfigConvert.INSTANCE.convert(config)); + } + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/vo/AppRecentOperateReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/vo/AppRecentOperateReqVo.java index 1250875..2333ad0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/vo/AppRecentOperateReqVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/vo/AppRecentOperateReqVo.java @@ -25,6 +25,12 @@ public class AppRecentOperateReqVo { @Schema(description = "举报类型") private String reportType; + @Schema(description = "举报问题描述") + private String reportDescription; + + @Schema(description = "举报图片") + private String reportPic; + @Schema(description = "身材评分") private Integer scoreSc; 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 0d5c051..44cef75 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 @@ -1,8 +1,7 @@ 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.service.opentype.BO.OpenTypeExtBO; 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; @@ -10,7 +9,6 @@ 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; @@ -54,7 +52,7 @@ public class AppMemberUserController { List memberRecentTagList = memberRecentTagService.getByMemberId(user.getId()); result.setMemberTagList(memberRecentTagList); // 获取用户会员信息 - OpenTypeExtReqVO vipExt = openTypeService.getExtByMemeberId(user.getId()); + OpenTypeExtBO vipExt = openTypeService.getExtByMemeberId(user.getId()); result.setMemberVip(vipExt); return success(result); } 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 8695d85..49bf201 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,6 +1,6 @@ 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.service.opentype.BO.OpenTypeExtBO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -62,7 +62,7 @@ public class AppMemberUserInfoRespVO { private List memberTagList; @Schema(description = "用户会员信息") - private OpenTypeExtReqVO memberVip; + private OpenTypeExtBO memberVip; @Schema(description = "用户 App - 会员等级") @Data diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java index 83db08c..cb85cdc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java @@ -2,10 +2,14 @@ package cn.iocoder.yudao.module.member.dal.dataobject.config; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.*; +import java.util.List; + /** * 会员配置 DO * @@ -59,4 +63,10 @@ public class MemberConfigDO extends BaseDO { */ private Integer defaultChatUserMsgCout; + /** + * 举报类型 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List reportTypeList; + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/recent/OperationDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/recent/OperationDO.java index 2f042c9..e48cc84 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/recent/OperationDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/recent/OperationDO.java @@ -67,6 +67,16 @@ public class OperationDO extends BaseDO { */ private String reportType; + /** + * 举报问题描述 + */ + private String reportDescription; + + /** + * 举报图片 + */ + private String reportPic; + /** * 身材评分 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeUserMapper.java index bd7e1b4..17d5a1f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeUserMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeUserMapper.java @@ -5,9 +5,12 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeUserDO; import cn.iocoder.yudao.module.member.enums.opentype.OpenTypeStatusEnum; import cn.iocoder.yudao.module.member.enums.opentype.OpenTypeUserStatusEnum; +import cn.iocoder.yudao.module.member.service.opentype.BO.OpenTypeExtBO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; +import java.util.List; /** * 会员开通类型与用户关联 Mapper @@ -30,4 +33,5 @@ public interface OpenTypeUserMapper extends BaseMapperX { ); } + List getExtByMemeberIdList(@Param("memberIdList") List memberIdList); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java new file mode 100644 index 0000000..54d6eaf --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.member.job.member; + +import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; +import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; +import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 清理过期VIP + */ +@Component +@Slf4j +public class CheckVipJob implements JobHandler { + + @Resource + private OpenTypeService openTypeService; + @Resource + private MemberRecentTagService memberRecentTagService; + + @Override + @TenantJob + public String execute(String param) throws Exception { + // 清理了过期的vip + int vipCount = openTypeService.checkVip(); + // 清理了过期的vip tag + int vipTagCount = memberRecentTagService.checkVipTag(); + return String.format("清理了过期的 vip记录 %s 个\n清理过期的 vip tag记录 %s 个\n", vipCount, vipTagCount); + } + + +} 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/service/opentype/BO/OpenTypeExtBO.java similarity index 71% rename from yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeExtReqVO.java rename to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/BO/OpenTypeExtBO.java index 05a0244..3f6a3f9 100644 --- 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/service/opentype/BO/OpenTypeExtBO.java @@ -1,8 +1,7 @@ -package cn.iocoder.yudao.module.member.controller.admin.opentype.vo; +package cn.iocoder.yudao.module.member.service.opentype.BO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.ToString; import java.time.LocalDateTime; @@ -10,7 +9,10 @@ import java.time.LocalDateTime; @Schema(description = "管理后台 - 会员类型分页 Request VO") @Data @ToString(callSuper = true) -public class OpenTypeExtReqVO { +public class OpenTypeExtBO { + + @Schema(description = "会员编号") + private Long memberId; @Schema(description = "是否是会员") private boolean isVip; 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 2440b9d..aa8cbe8 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 @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.*; import cn.iocoder.yudao.module.member.controller.app.opentype.vo.AppPayOpenReqType; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.service.opentype.BO.OpenTypeExtBO; import java.util.List; @@ -67,5 +68,12 @@ public interface OpenTypeService { /** * 查询会员信息 */ - OpenTypeExtReqVO getExtByMemeberId(Long memberId); + List getExtByMemeberId(List memberIdList); + + OpenTypeExtBO getExtByMemeberId(Long memberId); + + /** + * 检查过期的vip + */ + int checkVip(); } \ 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 29770b0..a4b0c87 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 @@ -3,17 +3,23 @@ package cn.iocoder.yudao.module.member.service.opentype; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalReqVO; import cn.iocoder.yudao.module.member.client.vo.chat.privatemsg.ChatPrivateTotalMessageTotalResVO; import cn.iocoder.yudao.module.member.controller.app.opentype.vo.AppPayOpenReqType; import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeUserDO; +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.dal.mysql.opentype.OpenTypeUserMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberRecentTagMapper; import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import cn.iocoder.yudao.module.member.enums.opentype.OpenTypeUserStatusEnum; +import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum; import cn.iocoder.yudao.module.member.service.config.MemberConfigService; +import cn.iocoder.yudao.module.member.service.opentype.BO.OpenTypeExtBO; +import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -32,6 +38,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeMapper; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -51,6 +58,8 @@ public class OpenTypeServiceImpl implements OpenTypeService { private OpenTypeMapper openTypeMapper; @Resource private OpenTypeUserMapper openTypeUserMapper; + @Resource + private MemberRecentTagMapper memberRecentTagMapper; @Resource private MemberConfigService memberConfigService; @@ -143,9 +152,16 @@ public class OpenTypeServiceImpl implements OpenTypeService { } else { openTypeUserObj.setEndTime(now.plusDays(openType.getDuration())); } - // 新增会员开通表 openTypeUserMapper.insert(openTypeUserObj); + + // 新增用户tag + MemberRecentTagDO tagObj = new MemberRecentTagDO(); + tagObj.setMemberId(dto.getMemberId()); + tagObj.setTagBizType(MemberRecentTagEnum.VIP.getType()); + tagObj.setTagBizId(openTypeUserObj.getId()); + tagObj.setTagTitle(MemberRecentTagEnum.VIP.getDescription()); + memberRecentTagMapper.insert(tagObj); return openTypeUserObj.getId(); } @@ -217,14 +233,39 @@ public class OpenTypeServiceImpl implements OpenTypeService { * 查询会员信息 */ @Override - public OpenTypeExtReqVO getExtByMemeberId(Long memberId) { - OpenTypeExtReqVO result = new OpenTypeExtReqVO(); + public List getExtByMemeberId(List memberIdList) { + return openTypeUserMapper.getExtByMemeberIdList(memberIdList); + } + + @Override + public OpenTypeExtBO getExtByMemeberId(Long memberId) { + OpenTypeExtBO result = new OpenTypeExtBO(); OpenTypeUserDO openTypeUserDO = openTypeUserMapper.selectEnableByUserId(memberId); result.setVip(ObjectUtil.isNotEmpty(openTypeUserDO)); result.setExpirationTime(ObjectUtil.isNotEmpty(openTypeUserDO) ? openTypeUserDO.getEndTime() : null); return result; } + /** + * 检查过期的vip + */ + @Override + public int checkVip() { + List list = openTypeUserMapper.selectList(new LambdaQueryWrapperX() + .eq(OpenTypeUserDO::getStatus, OpenTypeUserStatusEnum.EFFICIENT.getType()) + .lt(OpenTypeUserDO::getEndTime, LocalDateTime.now()) + ); + List updateList = new ArrayList<>(); + for (OpenTypeUserDO v : list) { + OpenTypeUserDO entity = new OpenTypeUserDO(); + entity.setId(v.getId()); + entity.setStatus(OpenTypeUserStatusEnum.EXPIRED.getType()); + updateList.add(entity); + } + openTypeUserMapper.updateById(updateList); + return updateList.size(); + } + private void validateOpenTypeExists(Long id) { if (openTypeMapper.selectById(id) == null) { throw exception(MemberErrorCode.OPEN_TYPE_NOT_EXISTS); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java index b5aa0c0..4dbbdea 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java @@ -239,6 +239,8 @@ public class RecentServiceImpl implements RecentService { if (reportList.contains(dto.getAction())) { if (ObjectUtil.isEmpty(dto.getReportType())) throw exception(MemberErrorCode.REPORT_TYPE_NOT_NULL); operationDO.setReportType(dto.getReportType()); + operationDO.setReportDescription(dto.getReportDescription()); + operationDO.setReportPic(dto.getReportPic()); } // 评价 List ratingList = new ArrayList() {{ 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 d7908c7..a6229f1 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 @@ -26,4 +26,9 @@ public interface MemberRecentTagService { List getUserTagExtList(List memberIds); List getUserTagExtList(Long memberId); + + /** + * 清理了过期的vip tag + */ + int checkVipTag(); } 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 54275fc..152a3a7 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 @@ -4,14 +4,19 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO; +import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeMapper; +import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberRecentTagMapper; import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum; +import cn.iocoder.yudao.module.member.service.opentype.BO.OpenTypeExtBO; +import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; import cn.iocoder.yudao.module.member.service.user.BO.MemberTagExtBO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -25,6 +30,9 @@ public class MemberRecentTagServiceImp implements MemberRecentTagService { @Resource private MemberRecentTagMapper memberRecentTagMapper; + @Resource + private OpenTypeService openTypeService; + /** * 设置用户真人认证tag */ @@ -81,4 +89,28 @@ public class MemberRecentTagServiceImp implements MemberRecentTagService { return getUserTagExtList(Arrays.asList(memberId)); } + /** + * 清理了过期的vip tag + */ + @Override + public int checkVipTag() { + List vipTagList = memberRecentTagMapper.selectList(new LambdaQueryWrapperX() + .eq(MemberRecentTagDO::getTagBizType, MemberRecentTagEnum.VIP.getType()) + ); + if (ObjectUtil.isEmpty(vipTagList)) return 0; + + List removeTagMemberIdList = new ArrayList<>(); + for (MemberRecentTagDO item : vipTagList) { + boolean isVip = openTypeService.isUserOpenType(item.getMemberId()); + if (!isVip) { + removeTagMemberIdList.add(item.getMemberId()); + } + } + + int deleteCount = memberRecentTagMapper.delete(new LambdaQueryWrapperX() + .eq(MemberRecentTagDO::getTagBizType, MemberRecentTagEnum.VIP.getType()) + .in(MemberRecentTagDO::getMemberId, removeTagMemberIdList) + ); + return deleteCount; + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OpenTypeUserMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OpenTypeUserMapper.xml new file mode 100644 index 0000000..1e79c46 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OpenTypeUserMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml index ca37f73..d2687a5 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml @@ -80,6 +80,7 @@ from member_operation a a.deleted = '0' + and a.biz_type = '4' and a.operator_member_id = #{operationUserId} @@ -100,6 +101,7 @@ from member_operation a a.deleted = '0' + and a.biz_type = '1' and a.operator_member_id = #{operationUserId}