Ver código fonte

Merge branch 'dev/2024/0424/update-admin' into 'master'

修改碰撞记录和创建当日碰撞统计

See merge request zx-mall/mall-backend-admin!6
Yangzw 10 meses atrás
pai
commit
c2e423e777
20 arquivos alterados com 716 adições e 34 exclusões
  1. 4 4
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 2 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 0 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/PartitionCrashController.java
  4. 9 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashPageReqVO.java
  5. 94 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogController.java
  6. 32 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogPageReqVO.java
  7. 35 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogRespVO.java
  8. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogSaveReqVO.java
  9. 42 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogDO.java
  10. 5 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitioncrash/PartitionCrashMapper.java
  11. 35 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogMapper.java
  12. 10 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java
  13. 54 9
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashServiceImpl.java
  14. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogService.java
  15. 112 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogServiceImpl.java
  16. 16 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/tools/LocalDateTimeTool.java
  17. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogMapper.xml
  18. 134 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogServiceImplTest.java
  19. 6 6
      sql/mysql/建空库SQL/3_20240320.sql
  20. 31 6
      sql/mysql/建空库SQL/6_20240412.sql

+ 4 - 4
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java

@@ -15,10 +15,10 @@ public enum CaclEnum {
     HIGH_QUOTA(6, "最高可以获得积分", "最高可以获得积分"),
     SMALL_QUOTA_CRASH(7, "小区额度分配", "小区额度分配"),
     AFTER_CRASH_CALC_PT_TOTAL_QUOTA(8, "碰撞后计算平台总收益", "碰撞后计算平台总收益"),
-    AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA(9, "碰撞后计算平台收益", "碰撞后计算平台收益"),
-    ORDER_PAY_INTEGRAL(10, "购物获得积分", "购物获得冻结积分"),
-    ORDER_REFUND_INTEGRAL(11, "订单退款,积分退回", "购物收货7天后,冻结积分变为可用积分"),
-    ORDER_INTEGRAL_UNFREEZE(12, "订单积分到账", "订单积分到账");
+    AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA(12, "碰撞后计算平台收益", "碰撞后计算平台收益"),
+    ORDER_PAY_INTEGRAL(9, "购物获得积分", "购物获得冻结积分"),
+    ORDER_REFUND_INTEGRAL(10, "订单退款,积分退回", "购物收货7天后,冻结积分变为可用积分"),
+    ORDER_INTEGRAL_UNFREEZE(11, "订单积分到账", "订单积分到账");
 
     /**
      * 来源

+ 2 - 0
feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java

@@ -24,4 +24,6 @@ public interface ErrorCodeConstants {
     ErrorCode DUSER_NAME_IS_NOT_ONLY_ONE = new ErrorCode(1_002_030_018, "该直推人名称有重复的,请选择电话查询");
     ErrorCode DUSER_MOBILE_NOT_EXISTS = new ErrorCode(1_002_030_019, "该直推人电话不存在");
 
+    ErrorCode PT_PROFIT_DAILY_STATISTICS_LOG_NOT_EXISTS = new ErrorCode(1_002_030_020, "查询该日的记录不存在");
+
 }

+ 0 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/PartitionCrashController.java

@@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Operation;
 
-import javax.validation.constraints.*;
 import javax.validation.*;
 import javax.servlet.http.*;
 import java.util.*;

+ 9 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/partitioncrash/vo/PartitionCrashPageReqVO.java

@@ -4,8 +4,12 @@ import lombok.*;
 import io.swagger.v3.oas.annotations.media.Schema;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
 import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
 @Schema(description = "管理后台 - 分区碰撞分页 Request VO")
@@ -37,4 +41,9 @@ public class PartitionCrashPageReqVO extends PageParam {
     @Schema(description = "用户昵称", example = "赵六")
     private String nickName;
 
+    @Schema(description = "当日日期")
+    @NotNull(message = "日期不能为空")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
+    private LocalDate everyday;
+
 }

+ 94 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogController.java

@@ -0,0 +1,94 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
+
+import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import cn.newfeifan.mall.module.distri.service.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogService;
+
+@Tag(name = "管理后台 - 平台利润每日统计记录")
+@RestController
+@RequestMapping("/distri/pt-profit-daily-statistics-log")
+@Validated
+public class PtProfitDailyStatisticsLogController {
+
+    @Resource
+    private PtProfitDailyStatisticsLogService ptProfitDailyStatisticsLogService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建平台利润每日统计记录")
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:create')")
+    public CommonResult<Long> createPtProfitDailyStatisticsLog(@Valid @RequestBody PtProfitDailyStatisticsLogSaveReqVO createReqVO) {
+        return success(ptProfitDailyStatisticsLogService.createPtProfitDailyStatisticsLog(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新平台利润每日统计记录")
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:update')")
+    public CommonResult<Boolean> updatePtProfitDailyStatisticsLog(@Valid @RequestBody PtProfitDailyStatisticsLogSaveReqVO updateReqVO) {
+        ptProfitDailyStatisticsLogService.updatePtProfitDailyStatisticsLog(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除平台利润每日统计记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:delete')")
+    public CommonResult<Boolean> deletePtProfitDailyStatisticsLog(@RequestParam("id") Long id) {
+        ptProfitDailyStatisticsLogService.deletePtProfitDailyStatisticsLog(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得平台利润每日统计记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:query')")
+    public CommonResult<PtProfitDailyStatisticsLogRespVO> getPtProfitDailyStatisticsLog(@RequestParam("id") Long id) {
+        PtProfitDailyStatisticsLogDO ptProfitDailyStatisticsLog = ptProfitDailyStatisticsLogService.getPtProfitDailyStatisticsLog(id);
+        return success(BeanUtils.toBean(ptProfitDailyStatisticsLog, PtProfitDailyStatisticsLogRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得平台利润每日统计记录分页")
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:query')")
+    public CommonResult<PageResult<PtProfitDailyStatisticsLogRespVO>> getPtProfitDailyStatisticsLogPage(@Valid PtProfitDailyStatisticsLogPageReqVO pageReqVO) {
+        PageResult<PtProfitDailyStatisticsLogDO> pageResult = ptProfitDailyStatisticsLogService.getPtProfitDailyStatisticsLogPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, PtProfitDailyStatisticsLogRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出平台利润每日统计记录 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:pt-profit-daily-statistics-log:export')")
+    @OperateLog(type = EXPORT)
+    public void exportPtProfitDailyStatisticsLogExcel(@Valid PtProfitDailyStatisticsLogPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<PtProfitDailyStatisticsLogDO> list = ptProfitDailyStatisticsLogService.getPtProfitDailyStatisticsLogPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "平台利润每日统计记录.xls", "数据", PtProfitDailyStatisticsLogRespVO.class,
+                        BeanUtils.toBean(list, PtProfitDailyStatisticsLogRespVO.class));
+    }
+
+}

+ 32 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogPageReqVO.java

@@ -0,0 +1,32 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo;
+
+import lombok.*;
+
+import java.time.LocalDate;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.newfeifan.mall.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 平台利润每日统计记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PtProfitDailyStatisticsLogPageReqVO extends PageParam {
+
+    @Schema(description = "时间(每日)")
+    private LocalDate everyday;
+
+    @Schema(description = "平台对碰支出")
+    private Long totalCollisionAmount;
+
+    @Schema(description = "平台剩余金额")
+    private Long totalRemainingAmount;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 35 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogRespVO.java

@@ -0,0 +1,35 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 平台利润每日统计记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PtProfitDailyStatisticsLogRespVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26578")
+    @ExcelProperty("编号")
+    private Long id;
+
+    @Schema(description = "时间(每日)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("时间(每日)")
+    private LocalDate everyday;
+
+    @Schema(description = "平台对碰支出", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("平台对碰支出")
+    private Long totalCollisionAmount;
+
+    @Schema(description = "平台剩余金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("平台剩余金额")
+    private Long totalRemainingAmount;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/ptprofitdailystatisticslog/vo/PtProfitDailyStatisticsLogSaveReqVO.java

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDate;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 平台利润每日统计记录新增/修改 Request VO")
+@Data
+public class PtProfitDailyStatisticsLogSaveReqVO {
+
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26578")
+    private Long id;
+
+    @Schema(description = "时间(每日)", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "时间(每日)不能为空")
+    private LocalDate everyday;
+
+    @Schema(description = "平台对碰支出", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "平台对碰支出不能为空")
+    private Long totalCollisionAmount;
+
+    @Schema(description = "平台剩余金额", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "平台剩余金额不能为空")
+    private Long totalRemainingAmount;
+
+}

+ 42 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogDO.java

@@ -0,0 +1,42 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog;
+
+import lombok.*;
+
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 平台利润每日统计记录 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_pt_profit_daily_statistics_log")
+@KeySequence("distri_pt_profit_daily_statistics_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtProfitDailyStatisticsLogDO extends BaseDO {
+
+    /**
+     * 编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 时间(每日)
+     */
+    private LocalDate everyday;
+    /**
+     * 平台对碰支出
+     */
+    private Long totalCollisionAmount;
+    /**
+     * 平台剩余金额
+     */
+    private Long totalRemainingAmount;
+
+}

+ 5 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/partitioncrash/PartitionCrashMapper.java

@@ -1,11 +1,11 @@
 package cn.newfeifan.mall.module.distri.dal.mysql.partitioncrash;
 
-import java.util.*;
 
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
 import cn.newfeifan.mall.module.distri.dal.dataobject.partitioncrash.PartitionCrashDO;
+import cn.newfeifan.mall.module.distri.tools.LocalDateTimeTool;
 import org.apache.ibatis.annotations.Mapper;
 import cn.newfeifan.mall.module.distri.controller.admin.partitioncrash.vo.*;
 
@@ -19,16 +19,17 @@ public interface PartitionCrashMapper extends BaseMapperX<PartitionCrashDO> {
 
 
     default PageResult<PartitionCrashDO> selectPage(PartitionCrashPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<PartitionCrashDO>()
+        LambdaQueryWrapperX<PartitionCrashDO> queryWrapper = new LambdaQueryWrapperX<PartitionCrashDO>()
                 .eqIfPresent(PartitionCrashDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(PartitionCrashDO::getPartNo, reqVO.getPartNo())
                 .eqIfPresent(PartitionCrashDO::getBrotherPrice, reqVO.getBrotherPrice())
                 .eqIfPresent(PartitionCrashDO::getSonPrice, reqVO.getSonPrice())
                 .eqIfPresent(PartitionCrashDO::getAfterHitQuota, reqVO.getAfterHitQuota())
-                .betweenIfPresent(PartitionCrashDO::getCreateTime, reqVO.getCreateTime())
+                .betweenIfPresent(PartitionCrashDO::getCreateTime, LocalDateTimeTool.startTime(reqVO.getEveryday()), LocalDateTimeTool.endTime(reqVO.getEveryday()))
                 .likeIfPresent(PartitionCrashDO::getUserName, reqVO.getUserName())
                 .likeIfPresent(PartitionCrashDO::getNickName, reqVO.getNickName())
-                .orderByDesc(PartitionCrashDO::getId));
+                .orderByDesc(PartitionCrashDO::getId);
+        return selectPage(reqVO, queryWrapper);
     }
 
 }

+ 35 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogMapper.java

@@ -0,0 +1,35 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.ptprofitdailystatisticslog;
+
+import java.time.LocalDate;
+
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo.*;
+
+/**
+ * 平台利润每日统计记录 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface PtProfitDailyStatisticsLogMapper extends BaseMapperX<PtProfitDailyStatisticsLogDO> {
+
+    default PageResult<PtProfitDailyStatisticsLogDO> selectPage(PtProfitDailyStatisticsLogPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<PtProfitDailyStatisticsLogDO>()
+                .eqIfPresent(PtProfitDailyStatisticsLogDO::getEveryday, reqVO.getEveryday())
+                .eqIfPresent(PtProfitDailyStatisticsLogDO::getTotalCollisionAmount, reqVO.getTotalCollisionAmount())
+                .eqIfPresent(PtProfitDailyStatisticsLogDO::getTotalRemainingAmount, reqVO.getTotalRemainingAmount())
+                .betweenIfPresent(PtProfitDailyStatisticsLogDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(PtProfitDailyStatisticsLogDO::getEveryday));
+    }
+
+    default PtProfitDailyStatisticsLogDO selectByEveryday(LocalDate now) {
+        return selectOne(new LambdaQueryWrapper<PtProfitDailyStatisticsLogDO>()
+                .eq(PtProfitDailyStatisticsLogDO::getEveryday, now)
+        );
+    }
+}

+ 10 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -17,6 +17,7 @@ import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
 import cn.newfeifan.mall.module.distri.service.orderpercentage.OrderPercentageService;
 import cn.newfeifan.mall.module.distri.service.partitioncrash.PartitionCrashService;
 import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
+import cn.newfeifan.mall.module.distri.service.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogService;
 import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
 import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import org.springframework.context.annotation.Lazy;
@@ -80,6 +81,9 @@ public class OrderCalcServiceImpl implements OrderCalcService {
     @Resource
     private PartitionCrashService partitionCrashService;
 
+    @Resource
+    private PtProfitDailyStatisticsLogService ptProfitDailyStatisticsLogService;
+
     @Override
     public Long createOrderCalc(OrderCalcSaveReqVO createReqVO) {
         // 插入
@@ -175,7 +179,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
         // 计算,毛利中100 之外的百分比
         BigDecimal otherOneHundred = oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitUserQuotaPerc()))
                 .subtract(new BigDecimal(orderPercentageDO.getGrossProfitAncestorQuotaPerc()))
-                .subtract(new BigDecimal(orderPercentageDO.getGrossProfitBonusQuotaPerc()))
                 .subtract(new BigDecimal(orderPercentageDO.getGrossProfitPlatformQuotaPerc()));
 
 
@@ -199,7 +202,7 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             BigDecimal grossProfitAfterBonus = profit.multiply(oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitPerc()))).setScale(4, RoundingMode.DOWN);
 
             if (otherOneHundred.compareTo(new BigDecimal(BigInteger.ZERO)) > 0) {
-                grossProfitAfterBonus.add(grossProfit.multiply(otherOneHundred).setScale(4, RoundingMode.DOWN));
+                grossProfitAfterBonus = grossProfitAfterBonus.add(grossProfit.multiply(otherOneHundred).setScale(4, RoundingMode.DOWN));
             }
 
             // 用户所得: 毛利 * 0.35
@@ -247,7 +250,6 @@ public class OrderCalcServiceImpl implements OrderCalcService {
                     .grossProfit(grossProfitInt)
                     .grossProfitUserQuota(descendantQuotaInt)
                     .grossProfitAncestorQuota(ancestorQuotaInt)
-                    .grossProfitBonusQuota(bonusQuotaInt)
                     .grossProfitPlatformQuota(platformQuotaInt)
                     .percentTemplate(percentTemplate).build();
             saveList.add(orderCalcSaveReqVO);            // ========== 修改用户钱包 =================
@@ -256,7 +258,11 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             // 每个订单计算的过程
             // 增加平台收益
             // 平台服务费
-            PtProfitSaveReqVO ptProfitSaveReqVO = PtProfitSaveReqVO.builder().ptAdd(platformQuotaInt).ptGrossAdd(grossProfitAfterBonusInt).ptTotalAdd(platformQuotaInt + grossProfitAfterBonusInt).build();
+            PtProfitSaveReqVO ptProfitSaveReqVO =
+                    PtProfitSaveReqVO.builder()
+                            .ptAdd(platformQuotaInt)
+                            .ptGrossAdd(grossProfitAfterBonusInt)
+                            .ptTotalAdd(platformQuotaInt + grossProfitAfterBonusInt).build();
             ptProfitSaveReqVOS.add(ptProfitSaveReqVO);
             // ========== 增加日志记录 =================
 

+ 54 - 9
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/partitioncrash/PartitionCrashServiceImpl.java

@@ -6,12 +6,14 @@ import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSave
 import cn.newfeifan.mall.module.distri.controller.admin.partitionbrothers.vo.PartitionBrothersSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.partitionson.vo.PartitionSonSaveReqVO;
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofit.vo.PtProfitSaveReqVO;
-import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.PtProfitLogSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ordercalc.OrderCalcDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.orderpercentage.OrderPercentageDO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogMapper;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
@@ -20,7 +22,6 @@ import cn.newfeifan.mall.module.distri.service.partitionbrothers.PartitionBrothe
 import cn.newfeifan.mall.module.distri.service.partitionson.PartitionSonService;
 import cn.newfeifan.mall.module.distri.service.ptprofit.PtProfitService;
 import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
-import cn.newfeifan.mall.module.distri.tools.LoginMessageTool;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -90,6 +91,12 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
     @Resource
     private PtProfitService ptProfitService;
 
+    @Resource
+    private PtProfitDailyStatisticsLogMapper ptProfitDailyStatisticsLogMapper;
+
+    @Resource
+    private PtProfitMapper ptProfitMapper;
+
 
     @Override
     public Long createPartitionCrash(PartitionCrashSaveReqVO createReqVO) {
@@ -201,7 +208,8 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
                 crashSaveReqVOBuilder.sonPrice(0L);
             }
             // 合计儿子分支额度
-            Long sonSumPrice = sonOrderCalcDOS.stream().mapToLong(OrderCalcDO::getGrossProfitBonusQuota).sum();
+            double grossProfitBonusQuotaPerc = Double.parseDouble(orderPercentageDO.getGrossProfitBonusQuotaPerc());
+            Long sonSumPrice = (long) (sonOrderCalcDOS.stream().mapToLong(OrderCalcDO::getGrossProfit).sum() * grossProfitBonusQuotaPerc);
             sonBuilder.price(sonSumPrice);
 
             // 获取当前用户的兄弟分区
@@ -213,7 +221,7 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
             }
 
             // 合并兄弟分支额度
-            Long brotherSumPrice = brothersOrderCalcDOS.stream().mapToLong(OrderCalcDO::getGrossProfitBonusQuota).sum();
+            Long brotherSumPrice = (long) (brothersOrderCalcDOS.stream().mapToLong(OrderCalcDO::getGrossProfit).sum() * grossProfitBonusQuotaPerc);
             brotherBuilder.price(brotherSumPrice);
 
 
@@ -305,11 +313,17 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
         // 遍历hashMap
         for (HashMap<Long, Long> longIntegerHashMap : afterCrashMap) {
             for (Map.Entry<Long, Long> entry : longIntegerHashMap.entrySet()) {
-                if (ptProfit.getPtGrossAdd() <= 0) {
-                    break;
-                }
+                //暂时不设限制扣减
+//                if (ptProfit.getPtGrossAdd() <= 0) {
+//                    break;
+//                }
                 // 当前平台总积分
 //                Integer ptTotalAdd = ptProfit.getPtTotalAdd();
+
+                if(entry.getValue() == 0){
+                    continue;
+                }
+
                 // 扣除平台收益
                 log.info("扣除平台收益[合赢奖] " + "用户 " + entry.getKey() + "额度: " + entry.getValue());
                 ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() - entry.getValue());
@@ -317,15 +331,46 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
                 ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() - entry.getValue());
                 // 碰撞后的额度添加到日志中 增加日志模块
                 ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_QUOTA
-                        , -entry.getValue(), ptProfit.getPtTotalAdd() - entry.getValue(), JsonUtils.toJsonString(orderPercentageDO));
+                        , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
                 ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA
-                        , -entry.getValue(), ptProfit.getPtTotalAdd() - entry.getValue(), JsonUtils.toJsonString(orderPercentageDO));
+                        , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
             }
         }
         ptProfitService.updatePtProfit(PtProfitSaveReqVO.builder().id(ptProfit.getId())
                 .ptAdd(ptProfit.getPtAdd())
                 .ptGrossAdd(ptProfit.getPtGrossAdd())
                 .ptTotalAdd(ptProfit.getPtTotalAdd()).build());
+
+        // 计算平台当日的碰撞支出
+        Long sum = 0L;
+        for (HashMap<Long, Long> hashMap : afterCrashMap) {
+            for (Map.Entry<Long, Long> entry : hashMap.entrySet()) {
+                if (entry.getValue() != 0) {
+                    sum += entry.getValue();
+                }
+            }
+        }
+
+        createPtProfitDailyStatisticsLog(sum);
+    }
+
+    private void createPtProfitDailyStatisticsLog(Long sum) {
+        LocalDate now = LocalDate.now();
+
+        //确保每天只有一条记录
+        PtProfitDailyStatisticsLogDO ptLog = ptProfitDailyStatisticsLogMapper.selectByEveryday(now);
+        if (ptLog != null) {
+            ptProfitDailyStatisticsLogMapper.deleteById(ptLog.getId());
+        }
+        //获取平台总收益
+        PtProfitDO ptProfitDO = ptProfitMapper.selectList().get(0);
+
+        ptLog = new PtProfitDailyStatisticsLogDO();
+        ptLog.setEveryday(now);
+        ptLog.setTotalCollisionAmount(sum);
+        ptLog.setTotalRemainingAmount(ptProfitDO.getPtGrossAdd());
+
+        ptProfitDailyStatisticsLogMapper.insert(ptLog);
     }
 
     public Boolean compare(Long highQuota, BigDecimal afterCrash) {

+ 55 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogService.java

@@ -0,0 +1,55 @@
+package cn.newfeifan.mall.module.distri.service.ptprofitdailystatisticslog;
+
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+/**
+ * 平台利润每日统计记录 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface PtProfitDailyStatisticsLogService {
+
+    /**
+     * 创建平台利润每日统计记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPtProfitDailyStatisticsLog(@Valid PtProfitDailyStatisticsLogSaveReqVO createReqVO);
+
+    /**
+     * 更新平台利润每日统计记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePtProfitDailyStatisticsLog(@Valid PtProfitDailyStatisticsLogSaveReqVO updateReqVO);
+
+    /**
+     * 删除平台利润每日统计记录
+     *
+     * @param id 编号
+     */
+    void deletePtProfitDailyStatisticsLog(Long id);
+
+    /**
+     * 获得平台利润每日统计记录
+     *
+     * @param id 编号
+     * @return 平台利润每日统计记录
+     */
+    PtProfitDailyStatisticsLogDO getPtProfitDailyStatisticsLog(Long id);
+
+    /**
+     * 获得平台利润每日统计记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 平台利润每日统计记录分页
+     */
+    PageResult<PtProfitDailyStatisticsLogDO> getPtProfitDailyStatisticsLogPage(PtProfitDailyStatisticsLogPageReqVO pageReqVO);
+
+    void createPtProfitDailyStatisticsLog();
+
+}

+ 112 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogServiceImpl.java

@@ -0,0 +1,112 @@
+package cn.newfeifan.mall.module.distri.service.ptprofitdailystatisticslog;
+
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofit.PtProfitDO;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitlog.PtProfitLogDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitlog.PtProfitLogMapper;
+import cn.newfeifan.mall.module.distri.tools.LocalDateTimeTool;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDate;
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 平台利润每日统计记录 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class PtProfitDailyStatisticsLogServiceImpl implements PtProfitDailyStatisticsLogService {
+
+    @Resource
+    private PtProfitDailyStatisticsLogMapper ptProfitDailyStatisticsLogMapper;
+
+    @Resource
+    private PtProfitMapper ptProfitMapper;
+
+    @Resource
+    PtProfitLogMapper ptProfitLogMapper;
+
+    @Override
+    public Long createPtProfitDailyStatisticsLog(PtProfitDailyStatisticsLogSaveReqVO createReqVO) {
+        // 插入
+        PtProfitDailyStatisticsLogDO ptProfitDailyStatisticsLog = BeanUtils.toBean(createReqVO, PtProfitDailyStatisticsLogDO.class);
+        ptProfitDailyStatisticsLogMapper.insert(ptProfitDailyStatisticsLog);
+        // 返回
+        return ptProfitDailyStatisticsLog.getId();
+    }
+
+    @Override
+    public void updatePtProfitDailyStatisticsLog(PtProfitDailyStatisticsLogSaveReqVO updateReqVO) {
+        // 校验存在
+        validatePtProfitDailyStatisticsLogExists(updateReqVO.getId());
+        // 更新
+        PtProfitDailyStatisticsLogDO updateObj = BeanUtils.toBean(updateReqVO, PtProfitDailyStatisticsLogDO.class);
+        ptProfitDailyStatisticsLogMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deletePtProfitDailyStatisticsLog(Long id) {
+        // 校验存在
+        validatePtProfitDailyStatisticsLogExists(id);
+        // 删除
+        ptProfitDailyStatisticsLogMapper.deleteById(id);
+    }
+
+    private void validatePtProfitDailyStatisticsLogExists(Long id) {
+        if (ptProfitDailyStatisticsLogMapper.selectById(id) == null) {
+            throw exception(PT_PROFIT_DAILY_STATISTICS_LOG_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PtProfitDailyStatisticsLogDO getPtProfitDailyStatisticsLog(Long id) {
+        return ptProfitDailyStatisticsLogMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PtProfitDailyStatisticsLogDO> getPtProfitDailyStatisticsLogPage(PtProfitDailyStatisticsLogPageReqVO pageReqVO) {
+        return ptProfitDailyStatisticsLogMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void createPtProfitDailyStatisticsLog() {
+        LocalDate now = LocalDate.now();
+
+        //确保每天只有一条记录
+        PtProfitDailyStatisticsLogDO ptLog = ptProfitDailyStatisticsLogMapper.selectByEveryday(now);
+        if (ptLog != null) {
+            deletePtProfitDailyStatisticsLog(ptLog.getId());
+        }
+        //获取平台总收益
+        PtProfitDO ptProfitDO = ptProfitMapper.selectList().get(0);
+        //获取当天碰撞支出总和
+        List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapper<PtProfitLogDO>()
+                .between(PtProfitLogDO::getCreateTime, LocalDateTimeTool.startTime(now), LocalDateTimeTool.endTime(now))
+                .eq(PtProfitLogDO::getProfitStatus, AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA)
+        );
+        Long sum = ptProfitLogDOS.stream().mapToLong(PtProfitLogDO::getAmount).sum();
+
+        ptLog = new PtProfitDailyStatisticsLogDO();
+        ptLog.setEveryday(now);
+        ptLog.setTotalCollisionAmount(sum);
+        ptLog.setTotalRemainingAmount(ptProfitDO.getPtTotalAdd());
+
+        ptProfitDailyStatisticsLogMapper.insert(ptLog);
+    }
+
+}

+ 16 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/tools/LocalDateTimeTool.java

@@ -0,0 +1,16 @@
+package cn.newfeifan.mall.module.distri.tools;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class LocalDateTimeTool {
+    public static LocalDateTime startTime(LocalDate date){
+        LocalDateTime startTime = date.atStartOfDay();
+        return startTime.plusHours(3);
+    }
+
+    public static LocalDateTime endTime(LocalDate date){
+        LocalDateTime startTime = date.atStartOfDay();
+        return startTime.plusDays(1).plusHours(3);
+    }
+}

+ 12 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.newfeifan.mall.module.distri.dal.mysql.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 134 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/ptprofitdailystatisticslog/PtProfitDailyStatisticsLogServiceImplTest.java

@@ -0,0 +1,134 @@
+package cn.newfeifan.mall.module.distri.service.ptprofitdailystatisticslog;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.ptprofitdailystatisticslog.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.ptprofitdailystatisticslog.PtProfitDailyStatisticsLogMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import org.springframework.context.annotation.Import;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+import static cn.newfeifan.mall.framework.test.core.util.AssertUtils.*;
+import static cn.newfeifan.mall.framework.test.core.util.RandomUtils.*;
+import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.*;
+import static cn.newfeifan.mall.framework.common.util.object.ObjectUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link PtProfitDailyStatisticsLogServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(PtProfitDailyStatisticsLogServiceImpl.class)
+public class PtProfitDailyStatisticsLogServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private PtProfitDailyStatisticsLogServiceImpl ptProfitDailyStatisticsLogService;
+
+    @Resource
+    private PtProfitDailyStatisticsLogMapper ptProfitDailyStatisticsLogMapper;
+
+    @Test
+    public void testCreatePtProfitDailyStatisticsLog_success() {
+        // 准备参数
+        PtProfitDailyStatisticsLogSaveReqVO createReqVO = randomPojo(PtProfitDailyStatisticsLogSaveReqVO.class).setId(null);
+
+        // 调用
+        Long ptProfitDailyStatisticsLogId = ptProfitDailyStatisticsLogService.createPtProfitDailyStatisticsLog(createReqVO);
+        // 断言
+        assertNotNull(ptProfitDailyStatisticsLogId);
+        // 校验记录的属性是否正确
+        PtProfitDailyStatisticsLogDO ptProfitDailyStatisticsLog = ptProfitDailyStatisticsLogMapper.selectById(ptProfitDailyStatisticsLogId);
+        assertPojoEquals(createReqVO, ptProfitDailyStatisticsLog, "id");
+    }
+
+    @Test
+    public void testUpdatePtProfitDailyStatisticsLog_success() {
+        // mock 数据
+        PtProfitDailyStatisticsLogDO dbPtProfitDailyStatisticsLog = randomPojo(PtProfitDailyStatisticsLogDO.class);
+        ptProfitDailyStatisticsLogMapper.insert(dbPtProfitDailyStatisticsLog);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        PtProfitDailyStatisticsLogSaveReqVO updateReqVO = randomPojo(PtProfitDailyStatisticsLogSaveReqVO.class, o -> {
+            o.setId(dbPtProfitDailyStatisticsLog.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        ptProfitDailyStatisticsLogService.updatePtProfitDailyStatisticsLog(updateReqVO);
+        // 校验是否更新正确
+        PtProfitDailyStatisticsLogDO ptProfitDailyStatisticsLog = ptProfitDailyStatisticsLogMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, ptProfitDailyStatisticsLog);
+    }
+
+    @Test
+    public void testUpdatePtProfitDailyStatisticsLog_notExists() {
+        // 准备参数
+        PtProfitDailyStatisticsLogSaveReqVO updateReqVO = randomPojo(PtProfitDailyStatisticsLogSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> ptProfitDailyStatisticsLogService.updatePtProfitDailyStatisticsLog(updateReqVO), PT_PROFIT_DAILY_STATISTICS_LOG_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeletePtProfitDailyStatisticsLog_success() {
+        // mock 数据
+        PtProfitDailyStatisticsLogDO dbPtProfitDailyStatisticsLog = randomPojo(PtProfitDailyStatisticsLogDO.class);
+        ptProfitDailyStatisticsLogMapper.insert(dbPtProfitDailyStatisticsLog);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbPtProfitDailyStatisticsLog.getId();
+
+        // 调用
+        ptProfitDailyStatisticsLogService.deletePtProfitDailyStatisticsLog(id);
+       // 校验数据不存在了
+       assertNull(ptProfitDailyStatisticsLogMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeletePtProfitDailyStatisticsLog_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> ptProfitDailyStatisticsLogService.deletePtProfitDailyStatisticsLog(id), PT_PROFIT_DAILY_STATISTICS_LOG_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetPtProfitDailyStatisticsLogPage() {
+       // mock 数据
+       PtProfitDailyStatisticsLogDO dbPtProfitDailyStatisticsLog = randomPojo(PtProfitDailyStatisticsLogDO.class, o -> { // 等会查询到
+           o.setEveryday(null);
+           o.setTotalCollisionAmount(null);
+           o.setTotalRemainingAmount(null);
+           o.setCreateTime(null);
+       });
+       ptProfitDailyStatisticsLogMapper.insert(dbPtProfitDailyStatisticsLog);
+       // 测试 everyday 不匹配
+       ptProfitDailyStatisticsLogMapper.insert(cloneIgnoreId(dbPtProfitDailyStatisticsLog, o -> o.setEveryday(null)));
+       // 测试 totalCollisionAmount 不匹配
+       ptProfitDailyStatisticsLogMapper.insert(cloneIgnoreId(dbPtProfitDailyStatisticsLog, o -> o.setTotalCollisionAmount(null)));
+       // 测试 totalRemainingAmount 不匹配
+       ptProfitDailyStatisticsLogMapper.insert(cloneIgnoreId(dbPtProfitDailyStatisticsLog, o -> o.setTotalRemainingAmount(null)));
+       // 测试 createTime 不匹配
+       ptProfitDailyStatisticsLogMapper.insert(cloneIgnoreId(dbPtProfitDailyStatisticsLog, o -> o.setCreateTime(null)));
+       // 准备参数
+       PtProfitDailyStatisticsLogPageReqVO reqVO = new PtProfitDailyStatisticsLogPageReqVO();
+       reqVO.setEveryday(null);
+       reqVO.setTotalCollisionAmount(null);
+       reqVO.setTotalRemainingAmount(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<PtProfitDailyStatisticsLogDO> pageResult = ptProfitDailyStatisticsLogService.getPtProfitDailyStatisticsLogPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbPtProfitDailyStatisticsLog, pageResult.getList().get(0));
+    }
+
+}

+ 6 - 6
sql/mysql/建空库SQL/3_20240320.sql

@@ -20,21 +20,21 @@ ALTER TABLE `sale_shop`
 
 -- 订单主表`trade_order`增加字段pay_integral(支付积分)、increase_integral(用户获得积分)
  ALTER TABLE `trade_order` 
-ADD COLUMN `pay_integral` int COMMENT '支付积分';
+ADD COLUMN `pay_integral` bigint COMMENT '支付积分';
 
  ALTER TABLE `trade_order` 
-ADD COLUMN `increase_integral` int COMMENT '用户获得积分';
+ADD COLUMN `increase_integral` bigint COMMENT '用户获得积分';
 
 ALTER TABLE `trade_order`
-    ADD COLUMN `refund_integral` int COMMENT '退还的使用的积分';
+    ADD COLUMN `refund_integral` bigint COMMENT '退还的使用的积分';
 
 ALTER TABLE `trade_order`
     ADD COLUMN `pay_rmb` int COMMENT '实付人民币,单位:分';
 
 -- 订单项表`trade_order_item`增加字段pay_integral(支付积分)
-ALTER TABLE `trade_order_item` ADD COLUMN `pay_integral` int COMMENT '支付积分';
-ALTER TABLE `trade_order_item` ADD COLUMN `increase_integral` int COMMENT '用户获得积分';
-ALTER TABLE `trade_order_item` ADD COLUMN `refund_integral` int COMMENT '退还的使用的积分';
+ALTER TABLE `trade_order_item` ADD COLUMN `pay_integral` bigint COMMENT '支付积分';
+ALTER TABLE `trade_order_item` ADD COLUMN `increase_integral` bigint COMMENT '用户获得积分';
+ALTER TABLE `trade_order_item` ADD COLUMN `refund_integral` bigint COMMENT '退还的使用的积分';
 ALTER TABLE `trade_order_item` ADD COLUMN `pay_rmb` int COMMENT '实付人民币,单位:分';
 
 -- 20240415

+ 31 - 6
sql/mysql/建空库SQL/6_20240412.sql

@@ -1,12 +1,12 @@
-/* 配合汉鹏的新设计,重建积分相关数据表 */
+/* 配合汉鹏的新设计,重建身价相关数据表 */
 
 
--- 增加 会员资产变化类别表, 此表主要用于设置各种导致用户资产发生变化的行为的分值变化
+-- 增加 会员身价变化类别表, 此表主要用于设置各种导致用户资产发生变化的行为的分值变化
 -- 字段有id、类别码(数字类型,在java中对应常量)、类别名称、类别描述、变化值(就是签到身价加100那个100)
 CREATE TABLE `distri_social_status_change_category`  (
                                                   `id` bigint NOT NULL COMMENT '会员身价变化类别id',
                                                   `name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '类别名称',
-                                                  `code` int NOT NULL DEFAULT -1 COMMENT '类别码',
+                                                --  `code` int NOT NULL DEFAULT -1 COMMENT '类别码',
                                                   `variation_value` int NOT NULL DEFAULT 0 COMMENT '身价点数在本类别操作的变化值',
                                                   `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '描述',
 
@@ -19,6 +19,12 @@ CREATE TABLE `distri_social_status_change_category`  (
                                                   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '会员身价变化类别表' ROW_FORMAT = Dynamic;
 
+insert into distri_social_status_change_category (id,name,variation_value,description) values(1,'本人注册用户',100,'注册用户,获得的初始身价值');
+insert into distri_social_status_change_category (id,name,variation_value,description) values(2,'成功推荐新用户注册',100,'推荐了一个用户注册后,推荐人获得的身价值');
+insert into distri_social_status_change_category (id,name,variation_value,description) values(3,'签到获取的基础身价值',10,'签到获取的最小身价值');
+insert into distri_social_status_change_category (id,name,variation_value,description) values(4,'收藏一个商品获取的身价值',10,'收藏一个商品获取的身价值,同一商品,反复收藏只可获取一次身价值');
+commit;
+
 --  会员身价变化日志表
 --  字段有会员资产变化类别id、分值、操作时间、对象名(如 订单表名)、对象id(如 订单id)、是否已生效、计划生效时间、实际生效时间、描述
 CREATE TABLE `distri_social_status_change_log`  (
@@ -27,10 +33,10 @@ CREATE TABLE `distri_social_status_change_log`  (
                                                   `variation_value` bigint NOT NULL COMMENT '身价点数在本类别操作的变化值',
                                                   `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
                                                   `object_id` bigint NOT NULL DEFAULT 0 COMMENT '操作对应业务对象id,例如订单id',
-                                                  `effective` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已生效',
+                                              --    `effective` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已生效',
                                                   `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '描述',
-                                                  `plan_effective_time` datetime NULL COMMENT '计划生效时间',
-                                                  `actual_effective_time` datetime NULL COMMENT '实际生效时间',
+                                              --    `plan_effective_time` datetime NULL COMMENT '计划生效时间',
+                                              --    `actual_effective_time` datetime NULL COMMENT '实际生效时间',
 
                                                   `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
                                                   `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
@@ -40,7 +46,25 @@ CREATE TABLE `distri_social_status_change_log`  (
                                                   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '店铺表' ROW_FORMAT = Dynamic;
 
+
+--  会员收藏历史表
+CREATE TABLE `distri_user_collect_before`  (
+                                                  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
+                                                  `product_spu_id` bigint NOT NULL COMMENT '收藏商品spu的id',
+                                                  `user_id` bigint NOT NULL COMMENT '收藏商品的用户ID',
+                                                  
+                                                  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
+                                                  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
+                                                  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
+                                                  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+                                                  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+                                                  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
+                                                  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户曾经收藏过什么商品的表' ROW_FORMAT = Dynamic;
+
+
 -- 增加 会员签到表
+/*
 CREATE TABLE `distri_sign_in`  (
                                    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '会员签到表id',
                                    `user_id` bigint NOT NULL DEFAULT 0 COMMENT '会员用户id',
@@ -53,3 +77,4 @@ CREATE TABLE `distri_sign_in`  (
                                    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
                                    PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '店铺表' ROW_FORMAT = Dynamic;
+*/