Browse Source

平台每日收益

master
188814092560 1 week ago
parent
commit
5f19230187
15 changed files with 354 additions and 4 deletions
  1. 56
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/entity/UserDeliveryIncome.java
  2. 8
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/DailyIncomeUserCommandController.java
  3. 32
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/request/SubmitUserDeliveryCostDto.java
  4. 59
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/dailyincome/DailyIncomeApplicationService.java
  5. 28
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/DailyIncomeTask.java
  6. 26
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/UserDeliveryIncomeAggregate.java
  7. 11
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/repository/UserDeliveryIncomeRepository.java
  8. 6
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/MarriageInformationDao.java
  9. 11
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java
  10. 40
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserDeliveryIncomeRepositoryImpl.java
  11. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java
  12. 6
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java
  13. 16
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/UserDeliveryIncomeQueryService.java
  14. 35
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/impl/UserDeliveryIncomeQueryServiceImpl.java
  15. 20
      dating-agency-mall-server/src/main/resources/mapper/marriageinformation/MarriageInformationDao.xml

56
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/entity/UserDeliveryIncome.java

@ -0,0 +1,56 @@
package com.qniao.dam.domain.aggregate.userdeliveryincome.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.domain.Entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* @author Zpj
* @date 2026/5/10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("da_user_delivery_income")
public class UserDeliveryIncome extends Entity<UserDeliveryIncome> {
@ApiModelProperty("统计日期")
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("是否完成")
private Boolean isFinished;
}

8
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/DailyIncomeUserCommandController.java

@ -1,6 +1,7 @@
package com.qniao.dam.api.command.dailyincome.user;
import com.qniao.dam.api.command.dailyincome.user.request.SubmitDeliveryCostDto;
import com.qniao.dam.api.command.dailyincome.user.request.SubmitUserDeliveryCostDto;
import com.qniao.dam.application.service.dailyincome.DailyIncomeApplicationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -28,4 +29,11 @@ public class DailyIncomeUserCommandController {
dailyIncomeApplicationService.submitDeliveryCost(dto.trans2Domain());
}
@ApiOperation("用户提交用户投放成本")
@PostMapping("submit/user-delivery-cost")
public void submitUserDeliveryCost(@RequestBody @Valid SubmitUserDeliveryCostDto dto,
@RequestParam("userId") Long userId) {
dailyIncomeApplicationService.submitUserDeliveryCost(dto.trans2Domain());
}
}

32
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/request/SubmitUserDeliveryCostDto.java

@ -0,0 +1,32 @@
package com.qniao.dam.api.command.dailyincome.user.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.domain.Trans2DomainAssembler;
import com.qniao.framework.utils.TypeConvertUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* @author Zpj
* @date 2026/5/10
*/
@Data
public class SubmitUserDeliveryCostDto implements Trans2DomainAssembler<UserDeliveryIncome> {
@ApiModelProperty("投放成本")
private BigDecimal deliveryCost;
@ApiModelProperty("统计日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate statDate;
@Override
public UserDeliveryIncome trans2Domain() {
return TypeConvertUtils.convert(this, UserDeliveryIncome.class);
}
}

59
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/dailyincome/DailyIncomeApplicationService.java

@ -2,8 +2,15 @@ package com.qniao.dam.application.service.dailyincome;
import com.qniao.dam.domain.aggregate.dailyincome.DailyIncomeAggregate;
import com.qniao.dam.domain.aggregate.dailyincome.entity.DailyIncome;
import com.qniao.dam.domain.aggregate.userdeliveryincome.UserDeliveryIncomeAggregate;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
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.dam.query.marriageinformation.MarriageInformationQueryService;
import com.qniao.dam.query.userdeliveryincome.UserDeliveryIncomeQueryService;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -24,7 +31,16 @@ public class DailyIncomeApplicationService {
@Resource
private DailyIncomeQueryService dailyIncomeQueryService;
@Resource
private UserDeliveryIncomeQueryService userDeliveryIncomeQueryService;
@Resource
private DailyIncomeAggregate dailyIncomeAggregate;
@Resource
private MarriageInformationQueryService marriageInformationQueryService;
@Resource
private UserDeliveryIncomeAggregate userDeliveryIncomeAggregate;
@Value("${qulianlian_app_id}")
private Long qulianlianAppId;
public void stat(LocalDate statDate) {
LocalDateTime startTime = statDate.atStartOfDay();
@ -51,4 +67,47 @@ public class DailyIncomeApplicationService {
dailyIncomeAggregate.create(dailyIncome);
}
}
public void submitUserDeliveryCost(UserDeliveryIncome userDeliveryIncome) {
UserDeliveryIncome existUserDeliveryIncome = userDeliveryIncomeQueryService.queryBy(userDeliveryIncome.getStatDate());
statUserDeliveryIncome(userDeliveryIncome);
if (Objects.nonNull(existUserDeliveryIncome)) {
userDeliveryIncome.setId(existUserDeliveryIncome.getId());
userDeliveryIncomeAggregate.edit(userDeliveryIncome);
} else {
userDeliveryIncomeAggregate.create(userDeliveryIncome);
}
}
public void statUserDeliveryIncome(UserDeliveryIncome userDeliveryIncome) {
LocalDate statDate = userDeliveryIncome.getStatDate();
LocalDateTime statDateFrom = statDate.atStartOfDay();
LocalDateTime statDateTo = statDate.atTime(23, 59, 59);
userDeliveryIncome.setRegisterCount(marriageInformationQueryService.getRegisterCount(qulianlianAppId, statDateFrom, statDateTo));
userDeliveryIncome.setIncome2d(statUserDeliveryIncome(statDate, 2));
userDeliveryIncome.setIncome3d(statUserDeliveryIncome(statDate, 3));
userDeliveryIncome.setIncome4d(statUserDeliveryIncome(statDate, 4));
userDeliveryIncome.setIncome5d(statUserDeliveryIncome(statDate, 5));
userDeliveryIncome.setIncome6d(statUserDeliveryIncome(statDate, 6));
userDeliveryIncome.setIncome7d(statUserDeliveryIncome(statDate, 7));
userDeliveryIncome.setIncome14d(statUserDeliveryIncome(statDate, 14));
userDeliveryIncome.setIncome30d(statUserDeliveryIncome(statDate, 30));
if (Objects.nonNull(userDeliveryIncome.getIncome30d())) {
userDeliveryIncome.setIsFinished(true);
}
userDeliveryIncomeAggregate.edit(userDeliveryIncome);
}
private BigDecimal statUserDeliveryIncome(LocalDate statDate, int days) {
BigDecimal income = null;
LocalDate now = LocalDate.now();
LocalDateTime statTimeFrom = statDate.atStartOfDay();
LocalDate statDateTo = statDate.plusDays(days - 1);
if (statDateTo.isBefore(now)) {
LocalDateTime statTimeTo = statDateTo.atTime(23, 59, 59);
income = dailyIncomeDao.statIncome(statTimeFrom, statTimeTo);
}
return income;
}
}

28
dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/DailyIncomeTask.java

@ -1,15 +1,16 @@
package com.qniao.dam.application.task;
import cn.hutool.core.collection.CollUtil;
import com.qniao.dam.application.service.dailyincome.DailyIncomeApplicationService;
import com.qniao.dam.domain.aggregate.dailyincome.entity.DailyIncome;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.dam.query.userdeliveryincome.UserDeliveryIncomeQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
/**
* @author Zpj
@ -21,9 +22,11 @@ public class DailyIncomeTask {
@Resource
private DailyIncomeApplicationService dailyIncomeApplicationService;
@Resource
private UserDeliveryIncomeQueryService userDeliveryIncomeQueryService;
@Scheduled(cron = "0 10 0 * * *")
//@Scheduled(cron = "0 10 0 * * *")
public void handle() {
try {
log.error("每日收益统计任务开始");
@ -34,4 +37,21 @@ public class DailyIncomeTask {
log.error("每日收益统计任务异常", e);
}
}
@Scheduled(cron = "0 10 0 * * *")
public void userDeliveryIncomeHandle() {
try {
log.error("每日用户投流收益统计任务开始");
List<UserDeliveryIncome> list = userDeliveryIncomeQueryService.listUnfinished();
if (CollUtil.isNotEmpty(list)) {
list.forEach(record -> {
dailyIncomeApplicationService.statUserDeliveryIncome(record);
});
}
log.error("每日用户投流收益统计任务结束");
} catch (Exception e) {
log.error("每日用户投流收益统计任务异常", e);
}
}
}

26
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/UserDeliveryIncomeAggregate.java

@ -0,0 +1,26 @@
package com.qniao.dam.domain.aggregate.userdeliveryincome;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.dam.domain.aggregate.userdeliveryincome.repository.UserDeliveryIncomeRepository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author Zpj
* @date 2026/5/10
*/
@Service
public class UserDeliveryIncomeAggregate {
@Resource
private UserDeliveryIncomeRepository repository;
public void create(UserDeliveryIncome entity) {
repository.save(entity);
}
public void edit(UserDeliveryIncome entity) {
repository.save(entity);
}
}

11
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/repository/UserDeliveryIncomeRepository.java

@ -0,0 +1,11 @@
package com.qniao.dam.domain.aggregate.userdeliveryincome.repository;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.domain.Repository;
/**
* @author Zpj
* @date 2026/5/10
*/
public interface UserDeliveryIncomeRepository extends Repository<UserDeliveryIncome,Long> {
}

6
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/MarriageInformationDao.java

@ -2,6 +2,12 @@ package com.qniao.dam.infrastructure.persistent.dao.domain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
public interface MarriageInformationDao extends BaseMapper<MarriageInformation> {
Integer getRegisterCount(@Param("appId") Long appId,
@Param("statDateFrom") LocalDateTime statDateFrom,
@Param("statDateTo") LocalDateTime statDateTo);
}

11
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/userdeliveryincome/UserDeliveryIncomeDao.java

@ -0,0 +1,11 @@
package com.qniao.dam.infrastructure.persistent.dao.userdeliveryincome;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
/**
* @author Zpj
* @date 2026/5/10
*/
public interface UserDeliveryIncomeDao extends BaseMapper<UserDeliveryIncome> {
}

40
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserDeliveryIncomeRepositoryImpl.java

@ -0,0 +1,40 @@
package com.qniao.dam.infrastructure.persistent.repository.impl;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.dam.domain.aggregate.userdeliveryincome.repository.UserDeliveryIncomeRepository;
import com.qniao.dam.infrastructure.persistent.dao.userdeliveryincome.UserDeliveryIncomeDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Objects;
/**
* @author Zpj
* @date 2026/5/10
*/
@Service
public class UserDeliveryIncomeRepositoryImpl implements UserDeliveryIncomeRepository {
@Resource
private UserDeliveryIncomeDao dao;
@Override
public UserDeliveryIncome load(Long id) {
return dao.selectById(id);
}
@Override
public Long save(UserDeliveryIncome entity) {
if (Objects.isNull(entity.getId()) || Objects.isNull(dao.selectById(entity.getId()))) {
dao.insert(entity);
} else {
dao.updateById(entity);
}
return entity.getId();
}
@Override
public void delete(Long id) {
dao.deleteById(id);
}
}

4
dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java

@ -3,9 +3,13 @@ package com.qniao.dam.query.marriageinformation;
import com.qniao.dam.api.query.marriageinformation.response.MarriageInformationVo;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import java.time.LocalDateTime;
public interface MarriageInformationQueryService {
MarriageInformation queryByUserId(Long userId);
MarriageInformationVo queryVo(Long miId,Long userId);
Integer getRegisterCount(Long appId, LocalDateTime statDateFrom, LocalDateTime statDateTo);
}

6
dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java

@ -12,6 +12,7 @@ import com.qniao.framework.utils.TypeConvertUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Objects;
@Service
@ -41,4 +42,9 @@ public class MarriageInformationQueryServiceImpl implements MarriageInformationQ
}
return vo;
}
@Override
public Integer getRegisterCount(Long appId, LocalDateTime statDateFrom, LocalDateTime statDateTo) {
return marriageInformationDao.getRegisterCount(appId, statDateFrom, statDateTo);
}
}

16
dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/UserDeliveryIncomeQueryService.java

@ -0,0 +1,16 @@
package com.qniao.dam.query.userdeliveryincome;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import java.time.LocalDate;
import java.util.List;
/**
* @author Zpj
* @date 2026/5/10
*/
public interface UserDeliveryIncomeQueryService {
List<UserDeliveryIncome> listUnfinished();
UserDeliveryIncome queryBy(LocalDate statDate);
}

35
dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/impl/UserDeliveryIncomeQueryServiceImpl.java

@ -0,0 +1,35 @@
package com.qniao.dam.query.userdeliveryincome.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qniao.dam.domain.aggregate.userdeliveryincome.entity.UserDeliveryIncome;
import com.qniao.dam.infrastructure.persistent.dao.userdeliveryincome.UserDeliveryIncomeDao;
import com.qniao.dam.query.userdeliveryincome.UserDeliveryIncomeQueryService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
/**
* @author Zpj
* @date 2026/5/10
*/
@Service
public class UserDeliveryIncomeQueryServiceImpl implements UserDeliveryIncomeQueryService {
@Resource
private UserDeliveryIncomeDao userDeliveryIncomeDao;
@Override
public List<UserDeliveryIncome> listUnfinished() {
return userDeliveryIncomeDao.selectList(new LambdaQueryWrapper<UserDeliveryIncome>()
.eq(UserDeliveryIncome::getIsFinished, false));
}
@Override
public UserDeliveryIncome queryBy(LocalDate statDate) {
return userDeliveryIncomeDao.selectOne(new LambdaQueryWrapper<UserDeliveryIncome>()
.eq(UserDeliveryIncome::getStatDate, statDate)
.last("limit 1"));
}
}

20
dating-agency-mall-server/src/main/resources/mapper/marriageinformation/MarriageInformationDao.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao">
<select id="getRegisterCount" resultType="java.lang.Integer">
SELECT
COUNT(1)
from da_marriage_information as dami
INNER JOIN da_user_marriage_information as daumi on daumi.is_delete=0 and daumi.mi_id=dami.id and daumi.type=1
INNER JOIN da_user as dau on dau.is_delete=0 and dau.id=daumi.user_id
where dami.is_delete=0
<if test="appId != null">
and dau.app_from = #{appId}
</if>
<if test="statDateFrom != null and statDateTo != null">
and dami.create_time BETWEEN #{statDateFrom} and #{statDateTo}
</if>
</select>
</mapper>
Loading…
Cancel
Save