Browse Source

update: 身价

Ben 11 months ago
parent
commit
4cb06b141e
24 changed files with 1165 additions and 0 deletions
  1. 5 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  2. 33 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/SocialStatusUpdateEnum.java
  3. 95 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/SocialStatusChangeCategoryController.java
  4. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryPageReqVO.java
  5. 40 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategoryRespVO.java
  6. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/socialstatuschangecategory/vo/SocialStatusChangeCategorySaveReqVO.java
  7. 95 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/UserCollectBeforeController.java
  8. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforePageReqVO.java
  9. 32 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforeRespVO.java
  10. 23 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/usercollectbefore/vo/UserCollectBeforeSaveReqVO.java
  11. 47 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/socialstatuschangecategory/SocialStatusChangeCategoryDO.java
  12. 39 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/usercollectbefore/UserCollectBeforeDO.java
  13. 30 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/socialstatuschangecategory/SocialStatusChangeCategoryMapper.java
  14. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/usercollectbefore/UserCollectBeforeMapper.java
  15. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralService.java
  16. 28 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/integral/IntegralServiceImpl.java
  17. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryService.java
  18. 74 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImpl.java
  19. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeService.java
  20. 74 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImpl.java
  21. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/socialstatuschangecategory/SocialStatusChangeCategoryMapper.xml
  22. 12 0
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/usercollectbefore/UserCollectBeforeMapper.xml
  23. 146 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/socialstatuschangecategory/SocialStatusChangeCategoryServiceImplTest.java
  24. 138 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/usercollectbefore/UserCollectBeforeServiceImplTest.java

+ 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;
+
+}

+ 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;
+
+}

+ 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));
+    }
+
+}

+ 12 - 0
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 接口
@@ -74,4 +75,15 @@ public interface IntegralService {
                                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);
 }

+ 28 - 0
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;
 
@@ -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;
+    }
 }

+ 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));
+    }
+
+}