From 0fe57d4feb326074811f1a57ea1fa8ca8bfd513a Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 9 Dec 2025 15:58:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=BC=80=E9=80=9A=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao-module-member-biz/pom.xml | 5 ++ .../admin/opentype/OpenTypeController.java | 5 +- .../opentype/OpenTypeUserController.java | 50 +++++++++++++ .../vo/{ => openType}/OpenTypePageReqVO.java | 3 +- .../vo/{ => openType}/OpenTypeRespVO.java | 5 +- .../vo/{ => openType}/OpenTypeSaveReqVO.java | 3 +- .../vo/openTypeUser/OpenTypeUserReqVO.java | 31 ++++++++ .../vo/openTypeUser/OpenTypeUserRespVO.java | 74 +++++++++++++++++++ .../app/opentype/AppOpenTypeController.java | 4 +- .../dal/mysql/opentype/OpenTypeMapper.java | 2 +- .../mysql/opentype/OpenTypeUserMapper.java | 10 +++ .../service/opentype/OpenTypeService.java | 11 ++- .../service/opentype/OpenTypeServiceImpl.java | 35 ++++++--- .../resources/mapper/OpenTypeUserMapper.xml | 58 +++++++++++++++ .../src/main/resources/application-dev.yaml | 4 +- .../src/main/resources/application-local.yaml | 14 +--- .../src/main/resources/application-prod.yaml | 14 +--- 17 files changed, 279 insertions(+), 49 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeUserController.java rename yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/{ => openType}/OpenTypePageReqVO.java (98%) rename yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/{ => openType}/OpenTypeRespVO.java (95%) rename yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/{ => openType}/OpenTypeSaveReqVO.java (98%) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserRespVO.java diff --git a/yudao-module-member/yudao-module-member-biz/pom.xml b/yudao-module-member/yudao-module-member-biz/pom.xml index e34a5b3..af08c35 100644 --- a/yudao-module-member/yudao-module-member-biz/pom.xml +++ b/yudao-module-member/yudao-module-member-biz/pom.xml @@ -44,6 +44,11 @@ ${revision} + + cn.iocoder.boot + yudao-spring-boot-starter-protection + + cn.iocoder.boot diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeController.java index a03ef20..a2346b4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeController.java @@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.member.controller.admin.opentype; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypePageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypeRespVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypeSaveReqVO; import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO; import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; import org.springframework.web.bind.annotation.*; @@ -13,7 +16,6 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; import javax.annotation.security.PermitAll; -import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; import java.util.*; @@ -33,7 +35,6 @@ import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeDO; import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeUserController.java new file mode 100644 index 0000000..5fe4941 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/OpenTypeUserController.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.member.controller.admin.opentype; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.idempotent.core.annotation.Idempotent; +import cn.iocoder.yudao.framework.idempotent.core.keyresolver.impl.UserIdempotentKeyResolver; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserRespVO; +import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.util.concurrent.TimeUnit; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; + +@Tag(name = "管理后台 - 会员开通记录") +@RestController +@RequestMapping("/member/open-type/history") +@Validated +public class OpenTypeUserController { + + @Resource + private OpenTypeService openTypeService; + + @GetMapping("/page") + @Operation(summary = "获得会员开通记录分页") + public CommonResult> getOpenTypePage(@Valid OpenTypeUserReqVO pageReqVO) { + return success(openTypeService.getOpenTypeUserPage(pageReqVO)); + } + + @GetMapping("/refund") + @Operation(summary = "退款") + @Idempotent(timeout = 3, timeUnit = TimeUnit.SECONDS, keyResolver = UserIdempotentKeyResolver.class, message = "正在退款中,请稍后重试") + public CommonResult refund(@RequestParam("id") Long id) { + openTypeService.refundWalletRecharge(id, getClientIP()); + return success(true); + } + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypePageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypePageReqVO.java similarity index 98% rename from yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypePageReqVO.java rename to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypePageReqVO.java index 475aa6a..7dac911 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypePageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypePageReqVO.java @@ -1,7 +1,6 @@ -package cn.iocoder.yudao.module.member.controller.admin.opentype.vo; +package cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType; import lombok.*; -import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; import org.springframework.format.annotation.DateTimeFormat; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeRespVO.java similarity index 95% rename from yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeRespVO.java rename to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeRespVO.java index a84ea5e..91dae09 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeRespVO.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.module.member.controller.admin.opentype.vo; +package cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeSaveReqVO.java similarity index 98% rename from yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeSaveReqVO.java rename to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeSaveReqVO.java index 5ae7a5c..f350dc2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/OpenTypeSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openType/OpenTypeSaveReqVO.java @@ -1,9 +1,8 @@ -package cn.iocoder.yudao.module.member.controller.admin.opentype.vo; +package cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import java.util.*; import javax.validation.constraints.*; @Schema(description = "管理后台 - 会员类型新增/修改 Request VO") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserReqVO.java new file mode 100644 index 0000000..d38cd12 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import sun.util.resources.LocaleData; + +import java.util.List; + +@Data +public class OpenTypeUserReqVO extends PageParam { + + @Schema(description = "会员id") + private Long memberId; + + @Schema(description = "会员开通类型") + private String status; + + @Schema(description = "支付状态") + private String payStatus; + + @Schema(description = "退款状态") + private String refundStatus; + + @Schema(description = "会员名称") + private String memberName; + + @Schema(description = "创建时间") + private List createTimeList; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserRespVO.java new file mode 100644 index 0000000..e70f74b --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/opentype/vo/openTypeUser/OpenTypeUserRespVO.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员开通记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class OpenTypeUserRespVO { + + @Schema(description = "id") + private Long id; + + @Schema(description = "会员开通类型编号") + private Long openTypeId; + + @Schema(description = "用户编号") + private Long memberId; + + @Schema(description = "购买价格") + private Integer payPrice; + + @Schema(description = "开始时间") + private LocalDateTime startTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + + @Schema(description = "状态") + private String status; + + @Schema(description = "是否已支付") + private Boolean payStatus; + + @Schema(description = "支付订单编号") + private Long payOrderId; + + @Schema(description = "支付成功的支付渠道") + private String payChannelCode; + + @Schema(description = "订单支付时间") + private LocalDateTime payTime; + + @Schema(description = "支付退款单编号") + private Long payRefundId; + + @Schema(description = "退款支付金额") + private Integer refundPayPrice; + + @Schema(description = "退款时间") + private LocalDateTime refundTime; + + @Schema(description = "退款状态") + private Integer refundStatus; + + /** + * 用户相关 + */ + private String memberNickname; + + private String memberAvatar; + + private String memberMobile; + + /** + * vip相关 + */ + private String vipTitle; + + private String vipDuration; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/opentype/AppOpenTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/opentype/AppOpenTypeController.java index 5fb6a4b..4dd060a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/opentype/AppOpenTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/opentype/AppOpenTypeController.java @@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.member.controller.app.opentype; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.OpenTypePageReqVO; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.OpenTypeRespVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypePageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypeRespVO; 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.module.member.service.opentype.OpenTypeService; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeMapper.java index d449e6c..b17cbf6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/opentype/OpenTypeMapper.java @@ -5,9 +5,9 @@ import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypePageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.*; /** * 会员类型 Mapper 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 3b8cf28..45587b1 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 @@ -1,11 +1,16 @@ package cn.iocoder.yudao.module.member.dal.mysql.opentype; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserRespVO; 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 com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -36,4 +41,9 @@ public interface OpenTypeUserMapper extends BaseMapperX { } List getExtByMemeberIdList(@Param("memberIdList") List memberIdList); + + /** + * 获得会员开通记录分页 + */ + IPage page(IPage page, @Param("dto") OpenTypeUserReqVO dto); } \ 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/OpenTypeService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/opentype/OpenTypeService.java index c8e6e74..64cd598 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 @@ -1,9 +1,11 @@ package cn.iocoder.yudao.module.member.service.opentype; import javax.validation.*; -import javax.validation.constraints.NotNull; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.*; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypePageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypeSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserRespVO; 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; @@ -41,6 +43,11 @@ public interface OpenTypeService { */ PageResult getOpenTypePage(OpenTypePageReqVO pageReqVO); + /** + * 获得会员开通记录分页 + */ + PageResult getOpenTypeUserPage(OpenTypeUserReqVO pageReqVO); + /** * 获得会员类列表 */ 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 dea3bbf..02282c9 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 @@ -7,6 +7,10 @@ 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.admin.opentype.vo.openType.OpenTypePageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openType.OpenTypeSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserReqVO; +import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.openTypeUser.OpenTypeUserRespVO; 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; @@ -27,6 +31,8 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundRespDTO; import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; import cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -36,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import cn.iocoder.yudao.module.member.controller.admin.opentype.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.opentype.OpenTypeDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -64,15 +69,13 @@ import static cn.iocoder.yudao.module.pay.enums.refund.PayRefundStatusEnum.*; @Validated public class OpenTypeServiceImpl implements OpenTypeService { - @Resource - private MemberUserService memberUserService; @Resource private OpenTypeMapper openTypeMapper; @Resource private OpenTypeUserMapper openTypeUserMapper; - @Resource - private MemberRecentTagMapper memberRecentTagMapper; + @Resource + private MemberUserService memberUserService; @Resource private MemberConfigService memberConfigService; @@ -135,6 +138,20 @@ public class OpenTypeServiceImpl implements OpenTypeService { return openTypeMapper.selectPage(pageReqVO); } + /** + * 获得会员开通记录分页 + */ + @Override + public PageResult getOpenTypeUserPage(OpenTypeUserReqVO pageReqVO) { + IPage pageList = openTypeUserMapper.page(new Page(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO); + List list = pageList.getRecords(); + + PageResult result = new PageResult(); + result.setList(list); + result.setTotal(pageList.getTotal()); + return result; + } + /** * 获得会员类列表 */ @@ -423,7 +440,7 @@ public class OpenTypeServiceImpl implements OpenTypeService { // 校验退款订单匹配 if (notEqual(openTypeUserDO.getPayRefundId(), payRefundId)) { log.error("[校验开通会员是否已退款][钱包充值({}) 退款单不匹配({}),请进行处理!钱包充值的数据是:{}]", openTypeUserDO.getId(), payRefundId, toJsonString(openTypeUserDO)); - throw exception(MemberErrorCode.EMPTY, "开通会员退款更新失败,钱包退款单编号不匹配"); + throw exception(MemberErrorCode.EMPTY, "开通会员退款更新失败,退款单编号不匹配"); } // 校验退款订单 PayRefundRespDTO payRefund = payRefundApi.getRefund(payRefundId); @@ -439,7 +456,7 @@ public class OpenTypeServiceImpl implements OpenTypeService { // 校验退款订单商户订单是否匹配 if (notEqual(payRefund.getMerchantOrderId(), openTypeUserDO.getId().toString())) { log.error("[校验开通会员是否已退款][开通会员({}) 退款单不匹配({}),请进行处理!payRefund 数据是:{}]", openTypeUserDO.getId(), payRefundId, toJsonString(payRefund)); - throw exception(MemberErrorCode.EMPTY, "开通会员退款更新失败,钱包退款单编号不匹配"); + throw exception(MemberErrorCode.EMPTY, "开通会员退款更新失败,退款单编号不匹配"); } return payRefund; } @@ -450,11 +467,11 @@ public class OpenTypeServiceImpl implements OpenTypeService { private void validateOpenTypeCanRefund(OpenTypeUserDO walletRecharge) { // 校验充值订单是否支付 if (!walletRecharge.getPayStatus()) { - throw exception(MemberErrorCode.EMPTY, "开通会员发起退款失败,钱包充值订单未支付"); + throw exception(MemberErrorCode.EMPTY, "开通会员发起退款失败,该订单未支付"); } // 校验充值订单是否已退款 if (walletRecharge.getPayRefundId() != null) { - throw exception(MemberErrorCode.EMPTY, "开通会员发起退款失败,钱包充值订单已退款"); + throw exception(MemberErrorCode.EMPTY, "开通会员发起退款失败,该订单已退款"); } } 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 index 36e43de..374e560 100644 --- 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 @@ -2,6 +2,45 @@ + + select a.id, + a.open_type_id, + a.member_id, + a.pay_price, + a.start_time, + a.end_time, + a.status, + a.pay_status, + a.pay_order_id, + a.pay_channel_code, + a.pay_time, + a.pay_refund_id, + a.refund_pay_price, + a.refund_status, + a.refund_time, + a.creator, + a.create_time, + a.updater, + a.update_time, + a.deleted, + a.tenant_id + + + + a.deleted = '0' + + and a.member_id = #{dto.memberId} + + + and a.pay_status = #{dto.payStatus} + + + and a.refund_status = #{dto.refundStatus} + + + and a.createTime between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + + diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index 9815d01..cdeb7cb 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -158,8 +158,8 @@ wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-sta key-prefix: wx # Redis Key 的前缀 http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 - appid: wx63c280fe3248a3e7 - secret: 6f270509224a7ae1296bbf1c8cb97aed + appid: wx2b4e4d3feff8267f + secret: cf47cf478af51adf2e65fc626537c1c0 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wa # Redis Key 的前缀 diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index b58abda..6c3bae0 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -171,26 +171,16 @@ debug: false --- #################### 微信公众号、小程序相关配置 #################### wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 - # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) - # secret: 5abee519483bc9f8cb37ce280e814bd0 app-id: wx5b23ba7a5589ecbb # 测试号(自己的) secret: 2a7b3b20c537e52e74afd395eb85f61f - # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) - # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wx # Redis Key 的前缀 http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 - # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) - # secret: 333ae72f41552af1e998fe1f54e1584a - # appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 - # secret: 6f270509224a7ae1296bbf1c8cb97aed - # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) - # secret: 4a1a04e07f6a4a0751b39c3064a92c8b - appid: wx48555e58acd79c3d # 测试号(puhui 提供的) - secret: f0f5fd485bac7f377af6f5ca97636dd4 + appid: wx2b4e4d3feff8267f # 测试号(puhui 提供的) + secret: cf47cf478af51adf2e65fc626537c1c0 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wa # Redis Key 的前缀 diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index a7a3fc0..7473fe0 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -167,26 +167,16 @@ debug: false --- #################### 微信公众号、小程序相关配置 #################### wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 - # app-id: wx041349c6f39b268b # 测试号(牛希尧提供的) - # secret: 5abee519483bc9f8cb37ce280e814bd0 app-id: wx5fb544743d0a860f secret: 6bed0b5b798db383af35e1ec54026d85 - # app-id: wxa69ab825b163be19 # 测试号(Kongdy 提供的) - # secret: bd4f9fab889591b62aeac0d7b8d8b4a0 # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wx # Redis Key 的前缀 http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 - # appid: wx62056c0d5e8db250 # 测试号(牛希尧提供的) - # secret: 333ae72f41552af1e998fe1f54e1584a - # appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 - # secret: 6f270509224a7ae1296bbf1c8cb97aed - # appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) - # secret: 4a1a04e07f6a4a0751b39c3064a92c8b - appid: wx48555e58acd79c3d # 测试号(puhui 提供的) - secret: f0f5fd485bac7f377af6f5ca97636dd4 + appid: wx2b4e4d3feff8267f # 测试号(puhui 提供的) + secret: cf47cf478af51adf2e65fc626537c1c0 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wa # Redis Key 的前缀