diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/entity/UserDeliveryIncome.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/entity/UserDeliveryIncome.java new file mode 100644 index 0000000..2fa0b17 --- /dev/null +++ b/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 { + + @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; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/DailyIncomeUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/DailyIncomeUserCommandController.java index 459667e..6902563 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/DailyIncomeUserCommandController.java +++ b/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()); + } + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/request/SubmitUserDeliveryCostDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/dailyincome/user/request/SubmitUserDeliveryCostDto.java new file mode 100644 index 0000000..53c89cb --- /dev/null +++ b/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 { + + @ApiModelProperty("投放成本") + private BigDecimal deliveryCost; + + @ApiModelProperty("统计日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate statDate; + + @Override + public UserDeliveryIncome trans2Domain() { + return TypeConvertUtils.convert(this, UserDeliveryIncome.class); + } +} + diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/dailyincome/DailyIncomeApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/dailyincome/DailyIncomeApplicationService.java index ba34a7f..7616028 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/dailyincome/DailyIncomeApplicationService.java +++ b/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; + } + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/DailyIncomeTask.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/DailyIncomeTask.java index 2631127..c2dd336 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/DailyIncomeTask.java +++ b/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 list = userDeliveryIncomeQueryService.listUnfinished(); + if (CollUtil.isNotEmpty(list)) { + list.forEach(record -> { + dailyIncomeApplicationService.statUserDeliveryIncome(record); + }); + } + log.error("每日用户投流收益统计任务结束"); + } catch (Exception e) { + log.error("每日用户投流收益统计任务异常", e); + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/UserDeliveryIncomeAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/UserDeliveryIncomeAggregate.java new file mode 100644 index 0000000..4829aaa --- /dev/null +++ b/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); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/repository/UserDeliveryIncomeRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/userdeliveryincome/repository/UserDeliveryIncomeRepository.java new file mode 100644 index 0000000..d902795 --- /dev/null +++ b/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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/MarriageInformationDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/MarriageInformationDao.java index 4bbcd77..87585b8 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/MarriageInformationDao.java +++ b/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 { + Integer getRegisterCount(@Param("appId") Long appId, + @Param("statDateFrom") LocalDateTime statDateFrom, + @Param("statDateTo") LocalDateTime statDateTo); } 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 new file mode 100644 index 0000000..3ab3093 --- /dev/null +++ b/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 { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserDeliveryIncomeRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/UserDeliveryIncomeRepositoryImpl.java new file mode 100644 index 0000000..315d9fe --- /dev/null +++ b/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); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java index e14794d..86571f8 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/MarriageInformationQueryService.java +++ b/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); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java index 8e0ce11..068f819 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriageinformation/impl/MarriageInformationQueryServiceImpl.java +++ b/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); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/UserDeliveryIncomeQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/UserDeliveryIncomeQueryService.java new file mode 100644 index 0000000..d289eec --- /dev/null +++ b/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 listUnfinished(); + + UserDeliveryIncome queryBy(LocalDate statDate); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/impl/UserDeliveryIncomeQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/userdeliveryincome/impl/UserDeliveryIncomeQueryServiceImpl.java new file mode 100644 index 0000000..15f3930 --- /dev/null +++ b/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 listUnfinished() { + return userDeliveryIncomeDao.selectList(new LambdaQueryWrapper() + .eq(UserDeliveryIncome::getIsFinished, false)); + } + + @Override + public UserDeliveryIncome queryBy(LocalDate statDate) { + return userDeliveryIncomeDao.selectOne(new LambdaQueryWrapper() + .eq(UserDeliveryIncome::getStatDate, statDate) + .last("limit 1")); + } +} diff --git a/dating-agency-mall-server/src/main/resources/mapper/marriageinformation/MarriageInformationDao.xml b/dating-agency-mall-server/src/main/resources/mapper/marriageinformation/MarriageInformationDao.xml new file mode 100644 index 0000000..889b9f7 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/marriageinformation/MarriageInformationDao.xml @@ -0,0 +1,20 @@ + + + + + +