diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/VirtualAccountUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/VirtualAccountUserQueryController.java index fe7e357..7beca60 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/VirtualAccountUserQueryController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/VirtualAccountUserQueryController.java @@ -1,7 +1,11 @@ package com.qniao.dam.api.query.virtualaccount.user; import com.qniao.dam.api.query.virtualaccount.user.request.UserGetVirtualAccountVo; +import com.qniao.dam.api.query.virtualaccount.user.request.UserPageVirtualAccountRecordQueryParams; +import com.qniao.dam.api.query.virtualaccount.user.response.VirtualAccountRecordVo; import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -22,4 +26,13 @@ public class VirtualAccountUserQueryController { return virtualAccountQueryService.getVirtualAccountView(userId); } + @GetMapping("page/virtual-account-record") + @ApiOperation("用户获取虚拟账号记录") + public QnPage userPageVirtualAccountRecord(@RequestParam("userId") Long userId, + PageUtil pageUtil, + UserPageVirtualAccountRecordQueryParams queryParams) { + queryParams.setQueryUserId(userId); + return PageUtil.convert(virtualAccountQueryService.pageVirtualAccountRecord(queryParams, pageUtil), VirtualAccountRecordVo.class); + } + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/request/UserPageVirtualAccountRecordQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/request/UserPageVirtualAccountRecordQueryParams.java new file mode 100644 index 0000000..213744d --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/request/UserPageVirtualAccountRecordQueryParams.java @@ -0,0 +1,26 @@ +package com.qniao.dam.api.query.virtualaccount.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Data +public class UserPageVirtualAccountRecordQueryParams { + + @ApiModelProperty(hidden = true) + private Long queryUserId; + + @ApiModelProperty("交易类型") + private Integer tradeType; + + @ApiModelProperty("开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTimeFrom; + + @ApiModelProperty("结束时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTimeTo; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/response/VirtualAccountRecordVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/response/VirtualAccountRecordVo.java new file mode 100644 index 0000000..7c3719e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/virtualaccount/user/response/VirtualAccountRecordVo.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.query.virtualaccount.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.qniao.dam.domian.aggregate.virtualaccount.constant.VirtualAccountTradeTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class VirtualAccountRecordVo { + + @ApiModelProperty("交易类型") + private VirtualAccountTradeTypeEnum tradeType; + + @ApiModelProperty("交易数量") + private Integer tradeBalance; + + @ApiModelProperty("时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java index f1a2207..7c2b1e1 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/virtualaccount/VirtualAccountApplicationService.java @@ -12,7 +12,6 @@ import com.qniao.dam.domain.service.virtualaccount.ConsumeVirtualAccountDomainSe import com.qniao.dam.domian.aggregate.order.constant.OrderBelongingEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderStatusEnum; import com.qniao.dam.domian.aggregate.order.constant.OrderTypeEnum; -import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductDao; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; import com.qniao.dam.infrastructure.utils.SnowFlakeUtil; @@ -61,7 +60,7 @@ public class VirtualAccountApplicationService { //余额充足 创建消费订单+扣除余额 Order order = handleOrder(dto.getUserId(), productSpec); //虚拟账户处理 - virtualAccountAggregate.handleData(virtualAccount, order.getSettlementAmount().intValue(), dto.getTradeType()); + virtualAccountAggregate.handleConsumeData(virtualAccount, order.getSettlementAmount().intValue(), dto.getTradeType()); //保存 consumeVirtualAccountDomainService.handle(virtualAccount, order); vo.setSuccess(true); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java index da7d70f..122f813 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/virtualaccount/VirtualAccountAggregate.java @@ -32,14 +32,14 @@ public class VirtualAccountAggregate { repository.delete(id); } - public void handleData(VirtualAccount virtualAccount, - Integer tradeBalance, - VirtualAccountTradeTypeEnum tradeType) { + public void handleConsumeData(VirtualAccount virtualAccount, + Integer tradeBalance, + VirtualAccountTradeTypeEnum tradeType) { Integer originalBalance = virtualAccount.getBalance(); virtualAccount.setBalance(originalBalance - tradeBalance); VirtualAccountRecord record = new VirtualAccountRecord(); record.setTradeType(tradeType); - record.setTradeBalance(tradeBalance); + record.setTradeBalance(-tradeBalance); record.setOriginalBalance(originalBalance); record.setCurrentBalance(virtualAccount.getBalance()); virtualAccount.setRecordList(Collections.singletonList(record)); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/virtualaccount/VirtualAccountRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/virtualaccount/VirtualAccountRecordDao.java index ea575e6..5532bff 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/virtualaccount/VirtualAccountRecordDao.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/virtualaccount/VirtualAccountRecordDao.java @@ -1,11 +1,20 @@ package com.qniao.dam.infrastructure.persistent.dao.virtualaccount; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.qniao.dam.api.query.virtualaccount.user.request.UserPageVirtualAccountRecordQueryParams; +import com.qniao.dam.api.query.virtualaccount.user.response.VirtualAccountRecordVo; import com.qniao.dam.domain.aggregate.virtualaccount.valobj.VirtualAccountRecord; +import org.apache.ibatis.annotations.Param; /** * @author Zpj * @date 2025/11/9 */ public interface VirtualAccountRecordDao extends BaseMapper { + + IPage page(Page pageWithoutOrders, + @Param("queryParams") UserPageVirtualAccountRecordQueryParams queryParams); + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java index 6c17054..7cb605b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/VirtualAccountQueryService.java @@ -1,11 +1,17 @@ package com.qniao.dam.query.virtualaccount; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.virtualaccount.user.request.UserGetVirtualAccountVo; +import com.qniao.dam.api.query.virtualaccount.user.request.UserPageVirtualAccountRecordQueryParams; +import com.qniao.dam.api.query.virtualaccount.user.response.VirtualAccountRecordVo; import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount; +import com.qniao.framework.utils.PageUtil; public interface VirtualAccountQueryService { UserGetVirtualAccountVo getVirtualAccountView(Long userId); VirtualAccount queryBy(Long userId); + + IPage pageVirtualAccountRecord(UserPageVirtualAccountRecordQueryParams queryParams, PageUtil pageUtil); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java index c3fe095..51b46c0 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/virtualaccount/impl/VirtualAccountQueryServiceImpl.java @@ -1,10 +1,15 @@ package com.qniao.dam.query.virtualaccount.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.virtualaccount.user.request.UserGetVirtualAccountVo; +import com.qniao.dam.api.query.virtualaccount.user.request.UserPageVirtualAccountRecordQueryParams; +import com.qniao.dam.api.query.virtualaccount.user.response.VirtualAccountRecordVo; import com.qniao.dam.domain.aggregate.virtualaccount.entity.VirtualAccount; import com.qniao.dam.infrastructure.persistent.dao.virtualaccount.VirtualAccountDao; +import com.qniao.dam.infrastructure.persistent.dao.virtualaccount.VirtualAccountRecordDao; import com.qniao.dam.query.virtualaccount.VirtualAccountQueryService; +import com.qniao.framework.utils.PageUtil; import com.qniao.framework.utils.TypeConvertUtils; import org.springframework.stereotype.Service; @@ -16,12 +21,14 @@ public class VirtualAccountQueryServiceImpl implements VirtualAccountQueryServic @Resource private VirtualAccountDao virtualAccountDao; + @Resource + private VirtualAccountRecordDao virtualAccountRecordDao; @Override public UserGetVirtualAccountVo getVirtualAccountView(Long userId) { UserGetVirtualAccountVo vo = null; VirtualAccount virtualAccount = queryBy(userId); - if (Objects.nonNull(virtualAccount)){ + if (Objects.nonNull(virtualAccount)) { vo = TypeConvertUtils.convert(virtualAccount, UserGetVirtualAccountVo.class); } return vo; @@ -34,4 +41,10 @@ public class VirtualAccountQueryServiceImpl implements VirtualAccountQueryServic .last("limit 1")); } + @Override + public IPage pageVirtualAccountRecord(UserPageVirtualAccountRecordQueryParams queryParams, + PageUtil pageUtil) { + return virtualAccountRecordDao.page(pageUtil.toPageWithoutOrders(), queryParams); + } + } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/resources/mapper/virtualaccount/VirtualAccountRecordDao.xml b/dating-agency-mall-server/src/main/resources/mapper/virtualaccount/VirtualAccountRecordDao.xml new file mode 100644 index 0000000..d2d1778 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/virtualaccount/VirtualAccountRecordDao.xml @@ -0,0 +1,25 @@ + + + + + + +