diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/DailyIncomeUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/DailyIncomeUserQueryController.java index a16d379..913803b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/DailyIncomeUserQueryController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/DailyIncomeUserQueryController.java @@ -1,7 +1,9 @@ package com.qniao.dam.api.query.dailyincome.user; import com.qniao.dam.api.query.dailyincome.user.request.UserPageDailyRoiStatQueryParams; +import com.qniao.dam.api.query.dailyincome.user.request.UserPageUserDeliveryIncomeStatQueryParams; import com.qniao.dam.api.query.dailyincome.user.response.UserPageDailyRoiStatVo; +import com.qniao.dam.api.query.dailyincome.user.response.UserPageUserDeliveryIncomeStatVo; import com.qniao.dam.query.dailyincome.DailyIncomeQueryService; import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; @@ -26,12 +28,21 @@ public class DailyIncomeUserQueryController { @Resource private DailyIncomeQueryService dailyIncomeQueryService; - @GetMapping("page/daily-roi/stat") - @ApiOperation("获取每日roi统计分页") - public QnPage userPageDailyRoiStat(PageUtil pageUtil, - UserPageDailyRoiStatQueryParams queryParams, - @RequestParam("userId") Long userId) { - return PageUtil.convert(dailyIncomeQueryService.pageDailyRoiStat(pageUtil, queryParams), UserPageDailyRoiStatVo.class); +// @GetMapping("page/daily-roi/stat") +// @ApiOperation("获取每日roi统计分页") +// public QnPage userPageDailyRoiStat(PageUtil pageUtil, +// UserPageDailyRoiStatQueryParams queryParams, +// @RequestParam("userId") Long userId) { +// return PageUtil.convert(dailyIncomeQueryService.pageDailyRoiStat(pageUtil, queryParams), UserPageDailyRoiStatVo.class); +// } + + + @GetMapping("page/user-delivery-income/stat") + @ApiOperation("获取用户投流收益分页") + public QnPage userPageUserDeliveryIncomeStat(PageUtil pageUtil, + UserPageUserDeliveryIncomeStatQueryParams queryParams, + @RequestParam("userId") Long userId) { + return PageUtil.convert(dailyIncomeQueryService.pageUserDeliveryIncomeStat(pageUtil, queryParams), UserPageUserDeliveryIncomeStatVo.class); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/request/UserPageUserDeliveryIncomeStatQueryParams.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/request/UserPageUserDeliveryIncomeStatQueryParams.java new file mode 100644 index 0000000..8bf43ee --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/request/UserPageUserDeliveryIncomeStatQueryParams.java @@ -0,0 +1,20 @@ +package com.qniao.dam.api.query.dailyincome.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +@Data +public class UserPageUserDeliveryIncomeStatQueryParams { + + @ApiModelProperty("统计日期开始") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate statDateFrom; + + @ApiModelProperty("统计日期结束") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate statDateTo; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/response/UserPageUserDeliveryIncomeStatVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/response/UserPageUserDeliveryIncomeStatVo.java new file mode 100644 index 0000000..d37230a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/dailyincome/user/response/UserPageUserDeliveryIncomeStatVo.java @@ -0,0 +1,77 @@ +package com.qniao.dam.api.query.dailyincome.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +public class UserPageUserDeliveryIncomeStatVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("统计日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate statDate; + + @ApiModelProperty("注册数量") + private Integer registerCount; + + @ApiModelProperty("投放成本") + private BigDecimal deliveryCost; + + @ApiModelProperty("2日收入") + private BigDecimal income2d; + + @ApiModelProperty("3日收入") + private BigDecimal income3d; + + @ApiModelProperty("4日收入") + private BigDecimal income4d; + + @ApiModelProperty("5日收入") + private BigDecimal income5d; + + @ApiModelProperty("6日收入") + private BigDecimal income6d; + + @ApiModelProperty("7日收入") + private BigDecimal income7d; + + @ApiModelProperty("14日收入") + private BigDecimal income14d; + + @ApiModelProperty("30日收入") + private BigDecimal income30d; + + @ApiModelProperty("ROI-2d") + private BigDecimal roi2d; + + @ApiModelProperty("ROI-3d") + private BigDecimal roi3d; + + @ApiModelProperty("ROI-4d") + private BigDecimal roi4d; + + @ApiModelProperty("ROI-5d") + private BigDecimal roi5d; + + @ApiModelProperty("ROI-6d") + private BigDecimal roi6d; + + @ApiModelProperty("ROI-7d") + private BigDecimal roi7d; + + @ApiModelProperty("ROI-14d") + private BigDecimal roi14d; + + @ApiModelProperty("ROI-30d") + private BigDecimal roi30d; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java index 3ab3093..2fd45d3 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java @@ -1,11 +1,18 @@ package com.qniao.dam.infrastructure.persistent.dao.userdeliveryincome; 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.dailyincome.user.request.UserPageUserDeliveryIncomeStatQueryParams; +import com.qniao.dam.api.query.dailyincome.user.response.UserPageUserDeliveryIncomeStatVo; import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome; +import org.apache.ibatis.annotations.Param; /** * @author Zpj * @date 2026/5/10 */ public interface UserDeliveryIncomeDao extends BaseMapper { + IPage page(Page pageWithoutOrders, + @Param("queryParams") UserPageUserDeliveryIncomeStatQueryParams queryParams); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/DailyIncomeQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/DailyIncomeQueryService.java index 7f974d9..49a6ac2 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/DailyIncomeQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/DailyIncomeQueryService.java @@ -2,7 +2,9 @@ package com.qniao.dam.query.dailyincome; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.dailyincome.user.request.UserPageDailyRoiStatQueryParams; +import com.qniao.dam.api.query.dailyincome.user.request.UserPageUserDeliveryIncomeStatQueryParams; import com.qniao.dam.api.query.dailyincome.user.response.UserPageDailyRoiStatVo; +import com.qniao.dam.api.query.dailyincome.user.response.UserPageUserDeliveryIncomeStatVo; import com.qniao.dam.domain.aggregate.dailyincome.entity.DailyIncome; import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; @@ -17,4 +19,7 @@ public interface DailyIncomeQueryService { DailyIncome queryBy(LocalDate statDate); IPage pageDailyRoiStat(PageUtil pageUtil, UserPageDailyRoiStatQueryParams queryParams); + + IPage pageUserDeliveryIncomeStat(PageUtil pageUtil, + UserPageUserDeliveryIncomeStatQueryParams queryParams); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/impl/DailyIncomeQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/impl/DailyIncomeQueryServiceImpl.java index 049312e..891baac 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/impl/DailyIncomeQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/dailyincome/impl/DailyIncomeQueryServiceImpl.java @@ -3,9 +3,12 @@ package com.qniao.dam.query.dailyincome.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.dam.api.query.dailyincome.user.request.UserPageDailyRoiStatQueryParams; +import com.qniao.dam.api.query.dailyincome.user.request.UserPageUserDeliveryIncomeStatQueryParams; import com.qniao.dam.api.query.dailyincome.user.response.UserPageDailyRoiStatVo; +import com.qniao.dam.api.query.dailyincome.user.response.UserPageUserDeliveryIncomeStatVo; import com.qniao.dam.domain.aggregate.dailyincome.entity.DailyIncome; import com.qniao.dam.infrastructure.persistent.dao.dailyincome.DailyIncomeDao; +import com.qniao.dam.infrastructure.persistent.dao.userdeliveryincome.UserDeliveryIncomeDao; import com.qniao.dam.query.dailyincome.DailyIncomeQueryService; import com.qniao.framework.utils.PageUtil; import org.springframework.stereotype.Service; @@ -25,6 +28,8 @@ public class DailyIncomeQueryServiceImpl implements DailyIncomeQueryService { @Resource private DailyIncomeDao dailyIncomeDao; + @Resource + private UserDeliveryIncomeDao userDeliveryIncomeDao; @Override public DailyIncome queryBy(LocalDate statDate) { @@ -61,6 +66,33 @@ public class DailyIncomeQueryServiceImpl implements DailyIncomeQueryService { return page; } + @Override + public IPage pageUserDeliveryIncomeStat(PageUtil pageUtil, + UserPageUserDeliveryIncomeStatQueryParams queryParams) { + IPage page = userDeliveryIncomeDao.page(pageUtil.toPageWithoutOrders(), queryParams); + if (page.getRecords().size() > 0) { + page.getRecords().forEach(record -> { + record.setIncome2d(calculateRoi(record.getDeliveryCost(), record.getIncome2d())); + record.setIncome3d(calculateRoi(record.getDeliveryCost(), record.getIncome3d())); + record.setIncome4d(calculateRoi(record.getDeliveryCost(), record.getIncome4d())); + record.setIncome5d(calculateRoi(record.getDeliveryCost(), record.getIncome5d())); + record.setIncome6d(calculateRoi(record.getDeliveryCost(), record.getIncome6d())); + record.setIncome7d(calculateRoi(record.getDeliveryCost(), record.getIncome7d())); + record.setIncome14d(calculateRoi(record.getDeliveryCost(), record.getIncome14d())); + record.setIncome30d(calculateRoi(record.getDeliveryCost(), record.getIncome30d())); + }); + } + return page; + } + + private BigDecimal calculateRoi(BigDecimal deliveryCost, BigDecimal income) { + if (Objects.nonNull(deliveryCost) && deliveryCost.compareTo(BigDecimal.ZERO) > 0 && Objects.nonNull(income)) { + return income.multiply(BigDecimal.valueOf(100)).divide(deliveryCost, 2, RoundingMode.HALF_UP); + } else { + return null; + } + } + private BigDecimal calculateRoi(BigDecimal deliveryCost, LocalDate statDate, int days) { BigDecimal roi = BigDecimal.ZERO; if (Objects.nonNull(deliveryCost) && deliveryCost.compareTo(BigDecimal.ZERO) > 0) { diff --git a/dating-agency-mall-server/src/main/resources/mapper/userdeliveryincome/UserDeliveryIncomeDao.xml b/dating-agency-mall-server/src/main/resources/mapper/userdeliveryincome/UserDeliveryIncomeDao.xml new file mode 100644 index 0000000..5fe1f20 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/userdeliveryincome/UserDeliveryIncomeDao.xml @@ -0,0 +1,27 @@ + + + + + + +