Browse Source

Merge branch 'dev/2024/04/23/update_int2Long_collect'

Ben 11 months ago
parent
commit
f742fe6661
35 changed files with 1217 additions and 50 deletions
  1. 2 1
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/CaclEnum.java
  2. 5 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  3. 33 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/SocialStatusUpdateEnum.java
  4. 95 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/SocialStatusChangeCategoryController.java
  5. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryPageReqVO.java
  6. 40 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryRespVO.java
  7. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategorySaveReqVO.java
  8. 95 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/UserCollectBeforeController.java
  9. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforePageReqVO.java
  10. 32 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforeRespVO.java
  11. 23 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforeSaveReqVO.java
  12. 4 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogSaveReqVO.java
  13. 47 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/socialstatuschangecategory/SocialStatusChangeCategoryDO.java
  14. 39 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usercollectbefore/UserCollectBeforeDO.java
  15. 4 4
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java
  16. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/socialstatuschangecategory/SocialStatusChangeCategoryMapper.java
  17. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usercollectbefore/UserCollectBeforeMapper.java
  18. 13 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  19. 33 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  20. 3 3
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java
  21. 2 2
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java
  22. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryService.java
  23. 74 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImpl.java
  24. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeService.java
  25. 74 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImpl.java
  26. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/socialstatuschangecategory/SocialStatusChangeCategoryMapper.xml
  27. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/usercollectbefore/UserCollectBeforeMapper.xml
  28. 146 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImplTest.java
  29. 138 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImplTest.java
  30. 1 1
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java
  31. 1 1
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java
  32. 3 3
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderDO.java
  33. 3 3
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java
  34. 22 21
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java
  35. 1 1
      feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/bo/TradePriceCalculateRespBO.java

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

@@ -19,7 +19,8 @@ public enum CaclEnum {
     ORDER_INTEGRAL_UNFREEZE(11,"订单积分到账"),//购物收货7天后,冻结积分变为可用积分
     ORDER_GET_FREEZE_INTEGRAL(12,"购物返积分"),//购物获得冻结积分
     ORDER_CANCEL_BY_USER_REFUND_INTEGRAL(13,"取消订单,退回积分"),//用户手动取消未支付订单,退回购物使用的积分
-    ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL(14,"订单超时未支付,退回积分")//订单超时未支付,退回购物使用的积分
+    ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL(14,"订单超时未支付,退回积分"),//订单超时未支付,退回购物使用的积分
+    ORDER_REFUND_CANCEL_INTEGRAL(15,"订单退款,减少冻结积分")//订单已支付,用户退款申请通过,则减少之前给用户的冻结积分
     ;
 
     /**

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

@@ -25,4 +25,9 @@ public interface ErrorCodeConstants {
     ErrorCode SHARE_LINK_NOT_EXISTS = new ErrorCode(1_003_031_001, "分享链接不存在");
     ErrorCode SHARE_LINK_REGISTER_NOT_EXISTS = new ErrorCode(1_003_031_002, "通过分享链接,新注册用户不存在");
 
+    // ========== 用户曾经收藏过什么商品的 T1_004_000_000 ==========
+    ErrorCode USER_COLLECT_BEFORE_NOT_EXISTS = new ErrorCode(1_004_031_001, "用户曾经收藏过什么商品的不存在");
+
+    // ========== 会员身价变化类别 T1_005_000_000 ==========
+    ErrorCode SOCIAL_STATUS_CHANGE_CATEGORY_NOT_EXISTS = new ErrorCode(1_005_031_001, "会员身价变化类别不存在");
 }

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

@@ -0,0 +1,33 @@
+package cn.newfeifan.mall.module.distri.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum SocialStatusUpdateEnum {
+    REGISTER_ONESELF(1, "本人注册用户"),
+    REGISTER_OTHER(2, "成功推荐新用户注册"),
+    SIGN_IN(3, "签到获取的基础身价值"),
+    COLLECT(4, "收藏一个商品获取的身价值")
+    ;
+
+    /**
+     * 来源
+     */
+    private final Integer type;
+    /**
+     * 类型的名字
+     */
+    private final String name;
+
+    public static SocialStatusUpdateEnum getSocialStatusEnumByValue(int value) {
+        for (SocialStatusUpdateEnum caclEnum : SocialStatusUpdateEnum.values()) {
+            if (caclEnum.getType() == value) {
+                return caclEnum;
+            }
+        }
+        return null;
+    }
+
+}

+ 95 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/SocialStatusChangeCategoryController.java

@@ -0,0 +1,95 @@
+package cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory;
+
+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.constraints.*;
+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.socialstatuschangecategory.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangecategory.SocialStatusChangeCategoryDO;
+import cn.newfeifan.mall.module.distri.service.socialstatuschangecategory.SocialStatusChangeCategoryService;
+
+@Tag(name = "管理后台 - 会员身价变化类别")
+@RestController
+@RequestMapping("/distri/social-status-change-category")
+@Validated
+public class SocialStatusChangeCategoryController {
+
+    @Resource
+    private SocialStatusChangeCategoryService socialStatusChangeCategoryService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建会员身价变化类别")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:create')")
+    public CommonResult<Long> createSocialStatusChangeCategory(@Valid @RequestBody SocialStatusChangeCategorySaveReqVO createReqVO) {
+        return success(socialStatusChangeCategoryService.createSocialStatusChangeCategory(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新会员身价变化类别")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:update')")
+    public CommonResult<Boolean> updateSocialStatusChangeCategory(@Valid @RequestBody SocialStatusChangeCategorySaveReqVO updateReqVO) {
+        socialStatusChangeCategoryService.updateSocialStatusChangeCategory(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除会员身价变化类别")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:delete')")
+    public CommonResult<Boolean> deleteSocialStatusChangeCategory(@RequestParam("id") Long id) {
+        socialStatusChangeCategoryService.deleteSocialStatusChangeCategory(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得会员身价变化类别")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:query')")
+    public CommonResult<SocialStatusChangeCategoryRespVO> getSocialStatusChangeCategory(@RequestParam("id") Long id) {
+        SocialStatusChangeCategoryDO socialStatusChangeCategory = socialStatusChangeCategoryService.getSocialStatusChangeCategory(id);
+        return success(BeanUtils.toBean(socialStatusChangeCategory, SocialStatusChangeCategoryRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得会员身价变化类别分页")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:query')")
+    public CommonResult<PageResult<SocialStatusChangeCategoryRespVO>> getSocialStatusChangeCategoryPage(@Valid SocialStatusChangeCategoryPageReqVO pageReqVO) {
+        PageResult<SocialStatusChangeCategoryDO> pageResult = socialStatusChangeCategoryService.getSocialStatusChangeCategoryPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, SocialStatusChangeCategoryRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出会员身价变化类别 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:social-status-change-category:export')")
+    @OperateLog(type = EXPORT)
+    public void exportSocialStatusChangeCategoryExcel(@Valid SocialStatusChangeCategoryPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<SocialStatusChangeCategoryDO> list = socialStatusChangeCategoryService.getSocialStatusChangeCategoryPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "会员身价变化类别.xls", "数据", SocialStatusChangeCategoryRespVO.class,
+                        BeanUtils.toBean(list, SocialStatusChangeCategoryRespVO.class));
+    }
+
+}

+ 34 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryPageReqVO.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo;
+
+import lombok.*;
+import java.util.*;
+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 SocialStatusChangeCategoryPageReqVO extends PageParam {
+
+    @Schema(description = "类别名称", example = "王五")
+    private String name;
+
+    @Schema(description = "类别码")
+    private Integer code;
+
+    @Schema(description = "身价点数在本类别操作的变化值")
+    private Integer variationValue;
+
+    @Schema(description = "描述", example = "你猜")
+    private String description;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 40 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryRespVO.java

@@ -0,0 +1,40 @@
+package cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 会员身价变化类别 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class SocialStatusChangeCategoryRespVO {
+
+    @Schema(description = "会员身价变化类别id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15050")
+    @ExcelProperty("会员身价变化类别id")
+    private Long id;
+
+    @Schema(description = "类别名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @ExcelProperty("类别名称")
+    private String name;
+
+    @Schema(description = "类别码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("类别码")
+    private Integer code;
+
+    @Schema(description = "身价点数在本类别操作的变化值", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("身价点数在本类别操作的变化值")
+    private Integer variationValue;
+
+    @Schema(description = "描述", example = "你猜")
+    @ExcelProperty("描述")
+    private String description;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 30 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategorySaveReqVO.java

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 会员身价变化类别新增/修改 Request VO")
+@Data
+public class SocialStatusChangeCategorySaveReqVO {
+
+    @Schema(description = "会员身价变化类别id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15050")
+    private Long id;
+
+    @Schema(description = "类别名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+    @NotEmpty(message = "类别名称不能为空")
+    private String name;
+
+    @Schema(description = "类别码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "类别码不能为空")
+    private Integer code;
+
+    @Schema(description = "身价点数在本类别操作的变化值", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "身价点数在本类别操作的变化值不能为空")
+    private Integer variationValue;
+
+    @Schema(description = "描述", example = "你猜")
+    private String description;
+
+}

+ 95 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/UserCollectBeforeController.java

@@ -0,0 +1,95 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore;
+
+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.constraints.*;
+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.usercollectbefore.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usercollectbefore.UserCollectBeforeDO;
+import cn.newfeifan.mall.module.distri.service.usercollectbefore.UserCollectBeforeService;
+
+@Tag(name = "管理后台 - 用户曾经收藏过什么商品的")
+@RestController
+@RequestMapping("/distri/user-collect-before")
+@Validated
+public class UserCollectBeforeController {
+
+    @Resource
+    private UserCollectBeforeService userCollectBeforeService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建用户曾经收藏过什么商品的")
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:create')")
+    public CommonResult<Long> createUserCollectBefore(@Valid @RequestBody UserCollectBeforeSaveReqVO createReqVO) {
+        return success(userCollectBeforeService.createUserCollectBefore(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新用户曾经收藏过什么商品的")
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:update')")
+    public CommonResult<Boolean> updateUserCollectBefore(@Valid @RequestBody UserCollectBeforeSaveReqVO updateReqVO) {
+        userCollectBeforeService.updateUserCollectBefore(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除用户曾经收藏过什么商品的")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:delete')")
+    public CommonResult<Boolean> deleteUserCollectBefore(@RequestParam("id") Long id) {
+        userCollectBeforeService.deleteUserCollectBefore(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得用户曾经收藏过什么商品的")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:query')")
+    public CommonResult<UserCollectBeforeRespVO> getUserCollectBefore(@RequestParam("id") Long id) {
+        UserCollectBeforeDO userCollectBefore = userCollectBeforeService.getUserCollectBefore(id);
+        return success(BeanUtils.toBean(userCollectBefore, UserCollectBeforeRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用户曾经收藏过什么商品的分页")
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:query')")
+    public CommonResult<PageResult<UserCollectBeforeRespVO>> getUserCollectBeforePage(@Valid UserCollectBeforePageReqVO pageReqVO) {
+        PageResult<UserCollectBeforeDO> pageResult = userCollectBeforeService.getUserCollectBeforePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, UserCollectBeforeRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出用户曾经收藏过什么商品的 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:user-collect-before:export')")
+    @OperateLog(type = EXPORT)
+    public void exportUserCollectBeforeExcel(@Valid UserCollectBeforePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<UserCollectBeforeDO> list = userCollectBeforeService.getUserCollectBeforePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用户曾经收藏过什么商品的.xls", "数据", UserCollectBeforeRespVO.class,
+                        BeanUtils.toBean(list, UserCollectBeforeRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo;
+
+import lombok.*;
+import java.util.*;
+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 UserCollectBeforePageReqVO extends PageParam {
+
+    @Schema(description = "收藏商品spu的id", example = "6474")
+    private Long productSpuId;
+
+    @Schema(description = "收藏商品的用户ID", example = "25194")
+    private Long userId;
+
+    @Schema(description = "操作时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,32 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 用户曾经收藏过什么商品的 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class UserCollectBeforeRespVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29044")
+    @ExcelProperty("主键id")
+    private Long id;
+
+    @Schema(description = "收藏商品spu的id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6474")
+    @ExcelProperty("收藏商品spu的id")
+    private Long productSpuId;
+
+    @Schema(description = "收藏商品的用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25194")
+    @ExcelProperty("收藏商品的用户ID")
+    private Long userId;
+
+    @Schema(description = "操作时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("操作时间")
+    private LocalDateTime createTime;
+
+}

+ 23 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforeSaveReqVO.java

@@ -0,0 +1,23 @@
+package cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 用户曾经收藏过什么商品的新增/修改 Request VO")
+@Data
+public class UserCollectBeforeSaveReqVO {
+
+    @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29044")
+    private Long id;
+
+    @Schema(description = "收藏商品spu的id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6474")
+    @NotNull(message = "收藏商品spu的id不能为空")
+    private Long productSpuId;
+
+    @Schema(description = "收藏商品的用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25194")
+    @NotNull(message = "收藏商品的用户ID不能为空")
+    private Long userId;
+
+}

+ 4 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/ptprofitlog/vo/PtProfitLogSaveReqVO.java

@@ -29,16 +29,16 @@ public class PtProfitLogSaveReqVO {
     private Long id;
 
     @Schema(description = "变动的当前可用积分值(可为负数)")
-    private Integer amount;
+    private Long amount;
 
     @Schema(description = "变动后当前可用积分钱包的余额")
-    private Integer afterAmount;
+    private Long afterAmount;
 
     @Schema(description = "变动的冻结积分值(可为负数)")
-    private Integer freezeAmount;
+    private Long freezeAmount;
 
     @Schema(description = "变动后冻结积分钱包的余额")
-    private Integer afterFreezeAmount;
+    private Long afterFreezeAmount;
 
     @Schema(description = "计算百分比模板")
     private String percentTemplate;

+ 47 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/socialstatuschangecategory/SocialStatusChangeCategoryDO.java

@@ -0,0 +1,47 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangecategory;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 会员身价变化类别 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_social_status_change_category")
+@KeySequence("distri_social_status_change_category_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SocialStatusChangeCategoryDO extends BaseDO {
+
+    /**
+     * 会员身价变化类别id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 类别名称
+     */
+    private String name;
+    /**
+     * 类别码
+     */
+    private Integer code;
+    /**
+     * 身价点数在本类别操作的变化值
+     */
+    private Integer variationValue;
+    /**
+     * 描述
+     */
+    private String description;
+
+}

+ 39 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usercollectbefore/UserCollectBeforeDO.java

@@ -0,0 +1,39 @@
+package cn.newfeifan.mall.module.distri.dal.dataobject.usercollectbefore;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 用户曾经收藏过什么商品的 DO
+ *
+ * @author 非繁人
+ */
+@TableName("distri_user_collect_before")
+@KeySequence("distri_user_collect_before_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserCollectBeforeDO extends BaseDO {
+
+    /**
+     * 主键id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 收藏商品spu的id
+     */
+    private Long productSpuId;
+    /**
+     * 收藏商品的用户ID
+     */
+    private Long userId;
+
+}

+ 4 - 4
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/ptprofit/PtProfitMapper.java

@@ -32,10 +32,10 @@ public interface PtProfitMapper extends BaseMapperX<PtProfitDO> {
     }
 
     @Update("UPDATE distri_integral SET current_quota = current_quota + #{amount},freeze_quota = freeze_quota + #{freeze_mount} WHERE (current_quota + #{amount2})>=0 and user_id=#{userId} and (freeze_quota + #{freeze_mount2})>=0 ")
-    int updateUserIntegral(@Param("amount") int amount,
-                           @Param("amount2") int amount2,
-                           @Param("freeze_mount") int freezeAmount,
-                           @Param("freeze_mount2") int freezeAmount2,
+    int updateUserIntegral(@Param("amount") Long amount,
+                           @Param("amount2") Long amount2,
+                           @Param("freeze_mount") Long freezeAmount,
+                           @Param("freeze_mount2") Long freezeAmount2,
                            @Param("userId") Long userId);
 
     @Select("SELECT current_quota,freeze_quota FROM distri_integral WHERE user_id = #{userId}")

+ 30 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/socialstatuschangecategory/SocialStatusChangeCategoryMapper.java

@@ -0,0 +1,30 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.socialstatuschangecategory;
+
+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.socialstatuschangecategory.SocialStatusChangeCategoryDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo.*;
+
+/**
+ * 会员身价变化类别 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface SocialStatusChangeCategoryMapper extends BaseMapperX<SocialStatusChangeCategoryDO> {
+
+    default PageResult<SocialStatusChangeCategoryDO> selectPage(SocialStatusChangeCategoryPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SocialStatusChangeCategoryDO>()
+                .likeIfPresent(SocialStatusChangeCategoryDO::getName, reqVO.getName())
+                .eqIfPresent(SocialStatusChangeCategoryDO::getCode, reqVO.getCode())
+                .eqIfPresent(SocialStatusChangeCategoryDO::getVariationValue, reqVO.getVariationValue())
+                .eqIfPresent(SocialStatusChangeCategoryDO::getDescription, reqVO.getDescription())
+                .betweenIfPresent(SocialStatusChangeCategoryDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SocialStatusChangeCategoryDO::getId));
+    }
+
+}

+ 28 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usercollectbefore/UserCollectBeforeMapper.java

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.usercollectbefore;
+
+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.usercollectbefore.UserCollectBeforeDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo.*;
+
+/**
+ * 用户曾经收藏过什么商品的 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface UserCollectBeforeMapper extends BaseMapperX<UserCollectBeforeDO> {
+
+    default PageResult<UserCollectBeforeDO> selectPage(UserCollectBeforePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<UserCollectBeforeDO>()
+                .eqIfPresent(UserCollectBeforeDO::getProductSpuId, reqVO.getProductSpuId())
+                .eqIfPresent(UserCollectBeforeDO::getUserId, reqVO.getUserId())
+                .betweenIfPresent(UserCollectBeforeDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(UserCollectBeforeDO::getId));
+    }
+
+}

+ 13 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java

@@ -7,6 +7,7 @@ import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.enums.SocialStatusUpdateEnum;
 
 /**
  * 推荐用户积分 Service 接口
@@ -70,8 +71,19 @@ public interface IntegralService {
      * @param freezeAmount 用户冻结积分变化金额,可为负数
      * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
      */
-    Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Integer amount, Integer freezeAmount,
+    Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
                                Long tradeOrderId,
                                String orderNum
                                );
+
+    /**
+     * 修改用户身价
+     * @param userId 用户ID
+     * @param socialStatusUpdateEnum 身价变动类别
+     * @param socialStatusPoint 身价变化值
+     * @param ObjectId 导致身价变动的对应业务对象ID,如订单ID、收藏记录ID、新注册用户ID等
+     * @return 升级后的身价名称,如果返回null,表明没升级
+     */
+    String updateUserSocialStatus(Long userId, SocialStatusUpdateEnum socialStatusUpdateEnum, Integer socialStatusPoint,
+                                   Long ObjectId);
 }

+ 33 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java

@@ -1,8 +1,11 @@
 package cn.newfeifan.mall.module.distri.service.integral;
 
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper;
 import cn.newfeifan.mall.module.distri.dal.mysql.ptprofit.PtProfitMapper;
 import cn.newfeifan.mall.module.distri.enums.CaclEnum;
+import cn.newfeifan.mall.module.distri.enums.SocialStatusUpdateEnum;
 import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
@@ -34,6 +37,9 @@ import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 @Validated
 public class IntegralServiceImpl implements IntegralService {
 
+    @Resource
+    private DuserMapper duserMapper;
+
     @Resource
     private IntegralMapper integralMapper;
 
@@ -101,7 +107,7 @@ public class IntegralServiceImpl implements IntegralService {
      * @return 返回是否执行成功。执行失败,通常是就是用户积分不足,没积分抵扣
      */
     @Override
-    public Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Integer amount, Integer freezeAmount,
+    public Boolean updateUserIntegral(Long userId, CaclEnum caclEnum, Long amount, Long freezeAmount,
                                       Long tradeOrderId,
                                       String OrderNum
                                       ) {
@@ -114,17 +120,17 @@ public class IntegralServiceImpl implements IntegralService {
             success = true;
 
             //用户修改后的当前可用的钱包余额
-            Integer afterAmount = null;
+            Long afterAmount = null;
             //用户修改后的冻结积分钱包余额
-            Integer afterFreezeAmount = null;
+            Long afterFreezeAmount = null;
 
             //查询用户修改后的积分
             Map<String, Object> map = ptProfitMapper.selectUserIntegral(userId);
             Object currentQuotaObj = map.get("current_quota");
             Object freezeQuotaObj = map.get("freeze_quota");
 
-            afterAmount = (Integer)currentQuotaObj;
-            afterFreezeAmount = (Integer)freezeQuotaObj;
+            afterAmount = (Long)currentQuotaObj;
+            afterFreezeAmount = (Long)freezeQuotaObj;
 
             if(afterAmount<0||afterFreezeAmount<0){
                 throw new RuntimeException("用户钱包为负数:用户IO为"+userId+"的用户可用钱包为"+afterAmount+",冻结钱包为"+afterFreezeAmount);
@@ -143,4 +149,26 @@ public class IntegralServiceImpl implements IntegralService {
 
         return success;
     }
+
+
+    /**
+     * 修改用户身价
+     * @param userId 用户ID
+     * @param socialStatusUpdateEnum 身价变动类别
+     * @param socialStatusPoint 身价变化值
+     * @param ObjectId 导致身价变动的对应业务对象ID,如订单ID、收藏记录ID、新注册用户ID等
+     * @return 升级后的身价名称,如果返回null,表明没升级
+     */
+    public String updateUserSocialStatus(Long userId, SocialStatusUpdateEnum socialStatusUpdateEnum, Integer socialStatusPoint,
+                                   Long ObjectId){
+        //升级后的身价名称,如果返回null,表明没升级
+        String newSocialStatusName = null;
+        //用户身价升了几级
+        Integer socialStatusUpgradation = 0;
+
+        DuserDO duser = duserMapper.selectOne("user_id", userId);
+        Integer oldSocialStatus = duser.getSocialStatus();//升级前身价等级
+
+        return newSocialStatusName;
+    }
 }

+ 3 - 3
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java

@@ -58,9 +58,9 @@ public interface PtProfitLogService {
     void saveBatch(List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS);
 
     //记录用户的积分变动日志
-    void addMessage(Long userId, CaclEnum caclEnum, Integer amount,
-                    Integer afterAmount, Integer freezeAmount,
-                    Integer afterFreezeAmount, String percentTemplate,
+    void addMessage(Long userId, CaclEnum caclEnum, Long amount,
+                    Long afterAmount, Long freezeAmount,
+                    Long afterFreezeAmount, String percentTemplate,
                     Long tradeOrderId,
                     String OrderNum
                     );

+ 2 - 2
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java

@@ -100,8 +100,8 @@ public class PtProfitLogServiceImpl implements PtProfitLogService {
      * @param OrderNum
      */
     @Override
-    public void addMessage(Long userId, CaclEnum caclEnum, Integer amount, Integer afterAmount,
-                           Integer freezeAmount, Integer afterFreezeAmount,
+    public void addMessage(Long userId, CaclEnum caclEnum, Long amount, Long afterAmount,
+                           Long freezeAmount, Long afterFreezeAmount,
                            String percentTemplate,
                            Long tradeOrderId,
                            String OrderNum

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

@@ -0,0 +1,55 @@
+package cn.newfeifan.mall.module.distri.service.socialstatuschangecategory;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangecategory.SocialStatusChangeCategoryDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+
+/**
+ * 会员身价变化类别 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface SocialStatusChangeCategoryService {
+
+    /**
+     * 创建会员身价变化类别
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSocialStatusChangeCategory(@Valid SocialStatusChangeCategorySaveReqVO createReqVO);
+
+    /**
+     * 更新会员身价变化类别
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSocialStatusChangeCategory(@Valid SocialStatusChangeCategorySaveReqVO updateReqVO);
+
+    /**
+     * 删除会员身价变化类别
+     *
+     * @param id 编号
+     */
+    void deleteSocialStatusChangeCategory(Long id);
+
+    /**
+     * 获得会员身价变化类别
+     *
+     * @param id 编号
+     * @return 会员身价变化类别
+     */
+    SocialStatusChangeCategoryDO getSocialStatusChangeCategory(Long id);
+
+    /**
+     * 获得会员身价变化类别分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 会员身价变化类别分页
+     */
+    PageResult<SocialStatusChangeCategoryDO> getSocialStatusChangeCategoryPage(SocialStatusChangeCategoryPageReqVO pageReqVO);
+
+}

+ 74 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImpl.java

@@ -0,0 +1,74 @@
+package cn.newfeifan.mall.module.distri.service.socialstatuschangecategory;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangecategory.SocialStatusChangeCategoryDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.socialstatuschangecategory.SocialStatusChangeCategoryMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 会员身价变化类别 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class SocialStatusChangeCategoryServiceImpl implements SocialStatusChangeCategoryService {
+
+    @Resource
+    private SocialStatusChangeCategoryMapper socialStatusChangeCategoryMapper;
+
+    @Override
+    public Long createSocialStatusChangeCategory(SocialStatusChangeCategorySaveReqVO createReqVO) {
+        // 插入
+        SocialStatusChangeCategoryDO socialStatusChangeCategory = BeanUtils.toBean(createReqVO, SocialStatusChangeCategoryDO.class);
+        socialStatusChangeCategoryMapper.insert(socialStatusChangeCategory);
+        // 返回
+        return socialStatusChangeCategory.getId();
+    }
+
+    @Override
+    public void updateSocialStatusChangeCategory(SocialStatusChangeCategorySaveReqVO updateReqVO) {
+        // 校验存在
+        validateSocialStatusChangeCategoryExists(updateReqVO.getId());
+        // 更新
+        SocialStatusChangeCategoryDO updateObj = BeanUtils.toBean(updateReqVO, SocialStatusChangeCategoryDO.class);
+        socialStatusChangeCategoryMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteSocialStatusChangeCategory(Long id) {
+        // 校验存在
+        validateSocialStatusChangeCategoryExists(id);
+        // 删除
+        socialStatusChangeCategoryMapper.deleteById(id);
+    }
+
+    private void validateSocialStatusChangeCategoryExists(Long id) {
+        if (socialStatusChangeCategoryMapper.selectById(id) == null) {
+            throw exception(SOCIAL_STATUS_CHANGE_CATEGORY_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public SocialStatusChangeCategoryDO getSocialStatusChangeCategory(Long id) {
+        return socialStatusChangeCategoryMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SocialStatusChangeCategoryDO> getSocialStatusChangeCategoryPage(SocialStatusChangeCategoryPageReqVO pageReqVO) {
+        return socialStatusChangeCategoryMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,55 @@
+package cn.newfeifan.mall.module.distri.service.usercollectbefore;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usercollectbefore.UserCollectBeforeDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+
+/**
+ * 用户曾经收藏过什么商品的 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface UserCollectBeforeService {
+
+    /**
+     * 创建用户曾经收藏过什么商品的
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createUserCollectBefore(@Valid UserCollectBeforeSaveReqVO createReqVO);
+
+    /**
+     * 更新用户曾经收藏过什么商品的
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateUserCollectBefore(@Valid UserCollectBeforeSaveReqVO updateReqVO);
+
+    /**
+     * 删除用户曾经收藏过什么商品的
+     *
+     * @param id 编号
+     */
+    void deleteUserCollectBefore(Long id);
+
+    /**
+     * 获得用户曾经收藏过什么商品的
+     *
+     * @param id 编号
+     * @return 用户曾经收藏过什么商品的
+     */
+    UserCollectBeforeDO getUserCollectBefore(Long id);
+
+    /**
+     * 获得用户曾经收藏过什么商品的分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用户曾经收藏过什么商品的分页
+     */
+    PageResult<UserCollectBeforeDO> getUserCollectBeforePage(UserCollectBeforePageReqVO pageReqVO);
+
+}

+ 74 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImpl.java

@@ -0,0 +1,74 @@
+package cn.newfeifan.mall.module.distri.service.usercollectbefore;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usercollectbefore.UserCollectBeforeDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
+
+import cn.newfeifan.mall.module.distri.dal.mysql.usercollectbefore.UserCollectBeforeMapper;
+
+import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
+
+/**
+ * 用户曾经收藏过什么商品的 Service 实现类
+ *
+ * @author 非繁人
+ */
+@Service
+@Validated
+public class UserCollectBeforeServiceImpl implements UserCollectBeforeService {
+
+    @Resource
+    private UserCollectBeforeMapper userCollectBeforeMapper;
+
+    @Override
+    public Long createUserCollectBefore(UserCollectBeforeSaveReqVO createReqVO) {
+        // 插入
+        UserCollectBeforeDO userCollectBefore = BeanUtils.toBean(createReqVO, UserCollectBeforeDO.class);
+        userCollectBeforeMapper.insert(userCollectBefore);
+        // 返回
+        return userCollectBefore.getId();
+    }
+
+    @Override
+    public void updateUserCollectBefore(UserCollectBeforeSaveReqVO updateReqVO) {
+        // 校验存在
+        validateUserCollectBeforeExists(updateReqVO.getId());
+        // 更新
+        UserCollectBeforeDO updateObj = BeanUtils.toBean(updateReqVO, UserCollectBeforeDO.class);
+        userCollectBeforeMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteUserCollectBefore(Long id) {
+        // 校验存在
+        validateUserCollectBeforeExists(id);
+        // 删除
+        userCollectBeforeMapper.deleteById(id);
+    }
+
+    private void validateUserCollectBeforeExists(Long id) {
+        if (userCollectBeforeMapper.selectById(id) == null) {
+            throw exception(USER_COLLECT_BEFORE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public UserCollectBeforeDO getUserCollectBefore(Long id) {
+        return userCollectBeforeMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<UserCollectBeforeDO> getUserCollectBeforePage(UserCollectBeforePageReqVO pageReqVO) {
+        return userCollectBeforeMapper.selectPage(pageReqVO);
+    }
+
+}

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

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

+ 146 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImplTest.java

@@ -0,0 +1,146 @@
+package cn.newfeifan.mall.module.distri.service.socialstatuschangecategory;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.socialstatuschangecategory.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.socialstatuschangecategory.SocialStatusChangeCategoryDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.socialstatuschangecategory.SocialStatusChangeCategoryMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Import;
+import java.util.*;
+import java.time.LocalDateTime;
+
+import static cn.hutool.core.util.RandomUtil.*;
+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 cn.newfeifan.mall.framework.common.util.date.DateUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+/**
+ * {@link SocialStatusChangeCategoryServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(SocialStatusChangeCategoryServiceImpl.class)
+public class SocialStatusChangeCategoryServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private SocialStatusChangeCategoryServiceImpl socialStatusChangeCategoryService;
+
+    @Resource
+    private SocialStatusChangeCategoryMapper socialStatusChangeCategoryMapper;
+
+    @Test
+    public void testCreateSocialStatusChangeCategory_success() {
+        // 准备参数
+        SocialStatusChangeCategorySaveReqVO createReqVO = randomPojo(SocialStatusChangeCategorySaveReqVO.class).setId(null);
+
+        // 调用
+        Long socialStatusChangeCategoryId = socialStatusChangeCategoryService.createSocialStatusChangeCategory(createReqVO);
+        // 断言
+        assertNotNull(socialStatusChangeCategoryId);
+        // 校验记录的属性是否正确
+        SocialStatusChangeCategoryDO socialStatusChangeCategory = socialStatusChangeCategoryMapper.selectById(socialStatusChangeCategoryId);
+        assertPojoEquals(createReqVO, socialStatusChangeCategory, "id");
+    }
+
+    @Test
+    public void testUpdateSocialStatusChangeCategory_success() {
+        // mock 数据
+        SocialStatusChangeCategoryDO dbSocialStatusChangeCategory = randomPojo(SocialStatusChangeCategoryDO.class);
+        socialStatusChangeCategoryMapper.insert(dbSocialStatusChangeCategory);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        SocialStatusChangeCategorySaveReqVO updateReqVO = randomPojo(SocialStatusChangeCategorySaveReqVO.class, o -> {
+            o.setId(dbSocialStatusChangeCategory.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        socialStatusChangeCategoryService.updateSocialStatusChangeCategory(updateReqVO);
+        // 校验是否更新正确
+        SocialStatusChangeCategoryDO socialStatusChangeCategory = socialStatusChangeCategoryMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, socialStatusChangeCategory);
+    }
+
+    @Test
+    public void testUpdateSocialStatusChangeCategory_notExists() {
+        // 准备参数
+        SocialStatusChangeCategorySaveReqVO updateReqVO = randomPojo(SocialStatusChangeCategorySaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> socialStatusChangeCategoryService.updateSocialStatusChangeCategory(updateReqVO), SOCIAL_STATUS_CHANGE_CATEGORY_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteSocialStatusChangeCategory_success() {
+        // mock 数据
+        SocialStatusChangeCategoryDO dbSocialStatusChangeCategory = randomPojo(SocialStatusChangeCategoryDO.class);
+        socialStatusChangeCategoryMapper.insert(dbSocialStatusChangeCategory);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbSocialStatusChangeCategory.getId();
+
+        // 调用
+        socialStatusChangeCategoryService.deleteSocialStatusChangeCategory(id);
+       // 校验数据不存在了
+       assertNull(socialStatusChangeCategoryMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteSocialStatusChangeCategory_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> socialStatusChangeCategoryService.deleteSocialStatusChangeCategory(id), SOCIAL_STATUS_CHANGE_CATEGORY_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetSocialStatusChangeCategoryPage() {
+       // mock 数据
+       SocialStatusChangeCategoryDO dbSocialStatusChangeCategory = randomPojo(SocialStatusChangeCategoryDO.class, o -> { // 等会查询到
+           o.setName(null);
+           o.setCode(null);
+           o.setVariationValue(null);
+           o.setDescription(null);
+           o.setCreateTime(null);
+       });
+       socialStatusChangeCategoryMapper.insert(dbSocialStatusChangeCategory);
+       // 测试 name 不匹配
+       socialStatusChangeCategoryMapper.insert(cloneIgnoreId(dbSocialStatusChangeCategory, o -> o.setName(null)));
+       // 测试 code 不匹配
+       socialStatusChangeCategoryMapper.insert(cloneIgnoreId(dbSocialStatusChangeCategory, o -> o.setCode(null)));
+       // 测试 variationValue 不匹配
+       socialStatusChangeCategoryMapper.insert(cloneIgnoreId(dbSocialStatusChangeCategory, o -> o.setVariationValue(null)));
+       // 测试 description 不匹配
+       socialStatusChangeCategoryMapper.insert(cloneIgnoreId(dbSocialStatusChangeCategory, o -> o.setDescription(null)));
+       // 测试 createTime 不匹配
+       socialStatusChangeCategoryMapper.insert(cloneIgnoreId(dbSocialStatusChangeCategory, o -> o.setCreateTime(null)));
+       // 准备参数
+       SocialStatusChangeCategoryPageReqVO reqVO = new SocialStatusChangeCategoryPageReqVO();
+       reqVO.setName(null);
+       reqVO.setCode(null);
+       reqVO.setVariationValue(null);
+       reqVO.setDescription(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<SocialStatusChangeCategoryDO> pageResult = socialStatusChangeCategoryService.getSocialStatusChangeCategoryPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbSocialStatusChangeCategory, pageResult.getList().get(0));
+    }
+
+}

+ 138 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImplTest.java

@@ -0,0 +1,138 @@
+package cn.newfeifan.mall.module.distri.service.usercollectbefore;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import javax.annotation.Resource;
+
+import cn.newfeifan.mall.framework.test.core.ut.BaseDbUnitTest;
+
+import cn.newfeifan.mall.module.distri.controller.admin.usercollectbefore.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.usercollectbefore.UserCollectBeforeDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.usercollectbefore.UserCollectBeforeMapper;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Import;
+import java.util.*;
+import java.time.LocalDateTime;
+
+import static cn.hutool.core.util.RandomUtil.*;
+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 cn.newfeifan.mall.framework.common.util.date.DateUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+/**
+ * {@link UserCollectBeforeServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(UserCollectBeforeServiceImpl.class)
+public class UserCollectBeforeServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private UserCollectBeforeServiceImpl userCollectBeforeService;
+
+    @Resource
+    private UserCollectBeforeMapper userCollectBeforeMapper;
+
+    @Test
+    public void testCreateUserCollectBefore_success() {
+        // 准备参数
+        UserCollectBeforeSaveReqVO createReqVO = randomPojo(UserCollectBeforeSaveReqVO.class).setId(null);
+
+        // 调用
+        Long userCollectBeforeId = userCollectBeforeService.createUserCollectBefore(createReqVO);
+        // 断言
+        assertNotNull(userCollectBeforeId);
+        // 校验记录的属性是否正确
+        UserCollectBeforeDO userCollectBefore = userCollectBeforeMapper.selectById(userCollectBeforeId);
+        assertPojoEquals(createReqVO, userCollectBefore, "id");
+    }
+
+    @Test
+    public void testUpdateUserCollectBefore_success() {
+        // mock 数据
+        UserCollectBeforeDO dbUserCollectBefore = randomPojo(UserCollectBeforeDO.class);
+        userCollectBeforeMapper.insert(dbUserCollectBefore);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        UserCollectBeforeSaveReqVO updateReqVO = randomPojo(UserCollectBeforeSaveReqVO.class, o -> {
+            o.setId(dbUserCollectBefore.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        userCollectBeforeService.updateUserCollectBefore(updateReqVO);
+        // 校验是否更新正确
+        UserCollectBeforeDO userCollectBefore = userCollectBeforeMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, userCollectBefore);
+    }
+
+    @Test
+    public void testUpdateUserCollectBefore_notExists() {
+        // 准备参数
+        UserCollectBeforeSaveReqVO updateReqVO = randomPojo(UserCollectBeforeSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> userCollectBeforeService.updateUserCollectBefore(updateReqVO), USER_COLLECT_BEFORE_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteUserCollectBefore_success() {
+        // mock 数据
+        UserCollectBeforeDO dbUserCollectBefore = randomPojo(UserCollectBeforeDO.class);
+        userCollectBeforeMapper.insert(dbUserCollectBefore);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbUserCollectBefore.getId();
+
+        // 调用
+        userCollectBeforeService.deleteUserCollectBefore(id);
+       // 校验数据不存在了
+       assertNull(userCollectBeforeMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteUserCollectBefore_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> userCollectBeforeService.deleteUserCollectBefore(id), USER_COLLECT_BEFORE_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetUserCollectBeforePage() {
+       // mock 数据
+       UserCollectBeforeDO dbUserCollectBefore = randomPojo(UserCollectBeforeDO.class, o -> { // 等会查询到
+           o.setProductSpuId(null);
+           o.setUserId(null);
+           o.setCreateTime(null);
+       });
+       userCollectBeforeMapper.insert(dbUserCollectBefore);
+       // 测试 productSpuId 不匹配
+       userCollectBeforeMapper.insert(cloneIgnoreId(dbUserCollectBefore, o -> o.setProductSpuId(null)));
+       // 测试 userId 不匹配
+       userCollectBeforeMapper.insert(cloneIgnoreId(dbUserCollectBefore, o -> o.setUserId(null)));
+       // 测试 createTime 不匹配
+       userCollectBeforeMapper.insert(cloneIgnoreId(dbUserCollectBefore, o -> o.setCreateTime(null)));
+       // 准备参数
+       UserCollectBeforePageReqVO reqVO = new UserCollectBeforePageReqVO();
+       reqVO.setProductSpuId(null);
+       reqVO.setUserId(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<UserCollectBeforeDO> pageResult = userCollectBeforeService.getUserCollectBeforePage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbUserCollectBefore, pageResult.getList().get(0));
+    }
+
+}

+ 1 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java

@@ -17,7 +17,7 @@ public class AppTradeOrderCreateReqVO extends AppTradeOrderSettlementReqVO {
 
     //add by Ben
     @Schema(description = "本订单使用积分,为一整数", example = "36")
-    private Integer payIntegral;
+    private Long payIntegral;
 
     @Schema(description = "【本属性已不作页面与后台传值使用,被shopRemarks替代。本属性只作java内部使用】备注", example = "这个是我的订单哟")
     private String remark;

+ 1 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderDetailRespVO.java

@@ -15,7 +15,7 @@ public class AppTradeOrderDetailRespVO {
 
     //========使用积分=================
     @Schema(description = "订单使用积分", example = "8900000")
-    private Integer payIntegral;
+    private Long payIntegral;
 
     // ========== 订单基本信息 ==========
 

+ 3 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -34,13 +34,13 @@ public class TradeOrderDO extends BaseDO {
 
     //本商品使用积分 add by Ben payIntegral
 //    private Integer payPoints;
-    private Integer payIntegral;
+    private Long payIntegral;
 
     //退还的使用的积分 add by Ben
-    private Integer refundIntegral;
+    private Long refundIntegral;
 
     //用户获得积分 add by Ben
-    private Integer increaseIntegral;
+    private Long increaseIntegral;
 
     //本商品实付的人民币金额 add by Ben
     private Integer payRmb;

+ 3 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -27,16 +27,16 @@ import java.util.List;
 public class TradeOrderItemDO extends BaseDO {
 
     //本商品使用积分 add by Ben
-    private Integer payIntegral;
+    private Long payIntegral;
 
     //本商品实付的人民币金额 add by Ben
     private Integer payRmb;
 
     //退还的使用的积分 add by Ben
-    private Integer refundIntegral;
+    private Long refundIntegral;
 
     //用户获得积分 add by Ben
-    private Integer increaseIntegral;
+    private Long increaseIntegral;
 
     // ========== 订单项基本信息 ==========
     /**

+ 22 - 21
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -396,13 +396,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     }
 
     //把数据库的钱转换为数据库的积分
-    public static Integer money2Integral(Integer money){
-        return money*DistriConstants.MONEY2INTEGRAL;
+    public static Long money2Integral(Integer money){
+        return Long.valueOf(money*DistriConstants.MONEY2INTEGRAL);
     }
 
     //把数据库的积分转换为数据库的钱
-    public static Integer integral2Money(Integer integral){
-        return integral/DistriConstants.MONEY2INTEGRAL;
+    public static Integer integral2Money(Long integral){
+        Long l = (integral/DistriConstants.MONEY2INTEGRAL);
+        return l.intValue();
     }
 
     @Override
@@ -464,10 +465,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         }
 
         //消费者在页面录入的,要使用的积分
-        Integer payPoints = createReqVO.getPayIntegral();
+        Long payPoints = createReqVO.getPayIntegral();
 
         if(payPoints == null){
-            payPoints = 0;
+            payPoints = 0l;
         }else{//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值
             payPoints = payPoints* DistriConstants.PERCENT;
         }
@@ -486,7 +487,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         List<TradePriceCalculateRespBO.OrderItem> priceOrderItems = tradePriceCalculateRespBO.getItems();
         for (int i = 0; i < priceOrderItems.size(); i++) {
             TradePriceCalculateRespBO.OrderItem orderItem = priceOrderItems.get(i);
-            Integer itemPoint = money2Integral(dividePoints.get(i));//每项商品使用的积分
+            Long itemPoint = money2Integral(dividePoints.get(i));//每项商品使用的积分
             orderItem.setPayPoints(itemPoint);
             itemPayPointsMap.put(orderItem.getSkuId(),orderItem);
         }
@@ -522,7 +523,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 //            tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
 
             // 3. 保存一间店铺的订单
-            Integer shopPayPoints = 0;//一间店铺订单总支付积分
+            Long shopPayPoints = 0l;//一间店铺订单总支付积分
             Integer shopPayPrice = 0;//一间店铺订单总支付价格
 
             for(TradeOrderItemDO orderItem:orderItems){//一间店铺订单的所有商品项
@@ -600,8 +601,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 TradeOrderDO order = (TradeOrderDO) (m.get("order"));
                 Long tradeOrderId = order.getId();
                 String OrderNum =order.getNo();
-                Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
-                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0, tradeOrderId, OrderNum);
+                Long payIntegral = order.getPayIntegral();//每个订单使用的积分
+                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0l, tradeOrderId, OrderNum);
             }
         }
 
@@ -640,7 +641,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                     skuDOMap.put(productSkuDO.getId(),productSkuDO);
                 }
 
-                Integer totalFreezeAmount = 0;//总推广费,单位为
+                Long totalFreezeAmount = 0l;//总冻结积
                 for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                     ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                     //这类商品的总推广费
@@ -648,7 +649,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                             *tradeOrderItemDO.getCount();
 
                     //把商品项的推广费,转换为这项商品直推人获得的冻结积分
-                    Integer itemFreezeAmount =
+                    Long itemFreezeAmount =
                             promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
                                     grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
                                     grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
@@ -678,7 +679,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
      * @param promotionExpenses 商品的推广费总额
      * @return 输入推广费,对应的直推人获得的冻结积分
      */
-    public static Integer promotionExpenses2GrossProfitAncestorQuota(
+    public static Long promotionExpenses2GrossProfitAncestorQuota(
             Integer promotionExpenses,
             /**
              * 毛利 = 成本 * 0.38... (推广费用)
@@ -702,7 +703,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //把钱转为:增加的冻结积分
         BigDecimal freezeAmount_bigDecimal = money2Integral(descendantQuota);
 
-        Integer freezeAmount = freezeAmount_bigDecimal.intValue();
+        Long freezeAmount = freezeAmount_bigDecimal.longValue();
 
         return freezeAmount;
     }
@@ -895,7 +896,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 skuDOMap.put(productSkuDO.getId(),productSkuDO);
             }
 
-            Integer totalFreezeAmount = 0;//用户总的冻结积分
+            Long totalFreezeAmount = 0l;//用户总的冻结积分
             for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                 ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                 //这类商品的总推广费
@@ -903,7 +904,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                         *tradeOrderItemDO.getCount();
 
                 //把商品项的推广费,转换为这项商品直推人获得的冻结积分
-                Integer itemFreezeAmount =
+                Long itemFreezeAmount =
                         promotionExpenses2GrossProfitAncestorQuota(promotionExpenses,
                                 grossProfitPerc,//毛利 = 成本 * 0.38... (推广费用)
                                 grossProfitAncestorQuotaPerc//推广-推荐人额度 百分比
@@ -922,7 +923,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 //            Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
 
             String OrderNum =order.getNo();
-            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0,totalFreezeAmount,tradeOrderId,OrderNum);
+            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_GET_FREEZE_INTEGRAL, 0l,totalFreezeAmount,tradeOrderId,OrderNum);
 
         }
 
@@ -1160,12 +1161,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
 
         //3.退回订单已支付的积分 add by Ben
-        Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
+        Long payIntegral = order.getPayIntegral();//每个订单使用的积分
         Long tradeOrderId = order.getId();
         String orderNum = order.getNo();
         //如果订单有使用积分,则退回积分
         if(payIntegral>0) {
-            integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0, tradeOrderId, orderNum);
+            integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
         }
     }
 
@@ -1190,13 +1191,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 getSelf().cancelOrderBySystem(order);
 
                 //退回订单已支付的积分 add by Ben
-                Integer payIntegral = order.getPayIntegral();//每个订单使用的积分
+                Long payIntegral = order.getPayIntegral();//每个订单使用的积分
                 Long tradeOrderId = order.getId();
                 String orderNum = order.getNo();
                 Long userId = order.getUserId();
                 //如果订单有使用积分,则退回积分
                 if(payIntegral>0) {
-                    integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0, tradeOrderId, orderNum);
+                    integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
                 }
 
                 count++;

+ 1 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/bo/TradePriceCalculateRespBO.java

@@ -130,7 +130,7 @@ public class TradePriceCalculateRespBO {
          * add by Ben
          * 本项商品使用的积分
          */
-        private Integer payPoints;
+        private Long payPoints;
 
         /**
          * SPU 编号