Browse Source

修改营销user表信息,修改名字, 避免跟系统用户表姓名冲突

gaohp 11 months ago
parent
commit
fffedc4116
17 changed files with 466 additions and 304 deletions
  1. 1 0
      feifan-module-distri/feifan-module-distri-api/src/main/java/cn/newfeifan/mall/module/distri/enums/ErrorCodeConstants.java
  2. 95 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/DuserController.java
  3. 11 11
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserPageReqVO.java
  4. 12 12
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserRespVO.java
  5. 8 8
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserSaveReqVO.java
  6. 0 95
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/user/UserController.java
  7. 5 5
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/duser/DuserDO.java
  8. 34 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/duser/DuserMapper.java
  9. 0 36
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/user/UserMapper.java
  10. 55 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserService.java
  11. 74 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java
  12. 0 55
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/user/UserService.java
  13. 0 74
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/user/UserServiceImpl.java
  14. 3 6
      feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/duser/DuserMapper.xml
  15. 162 0
      feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImplTest.java
  16. 5 0
      feifan-server/pom.xml
  17. 1 2
      feifan-server/src/main/java/cn/newfeifan/mall/server/FeifanServerApplication.java

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

@@ -13,6 +13,7 @@ public interface ErrorCodeConstants {
     ErrorCode PARTITION_BROTHERS_NOT_EXISTS = new ErrorCode(1_002_030_002, "兄弟分区不存在");
     ErrorCode PARTITION_SON_NOT_EXISTS = new ErrorCode(1_002_030_002, "儿子分区不存在");
     ErrorCode USER_NOT_EXISTS = new ErrorCode(1_002_030_003, "分销用户不存在");
+    ErrorCode DUSER_NOT_EXISTS = new ErrorCode(1_002_030_003, "分销用户不存在");
     ErrorCode IS_EXISTS = new ErrorCode(1_002_030_003, "当前推销人已经存在上级");
 
 }

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

@@ -0,0 +1,95 @@
+package cn.newfeifan.mall.module.distri.controller.admin.duser;
+
+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.duser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+
+@Tag(name = "管理后台 - 推荐用户")
+@RestController
+@RequestMapping("/distri/duser")
+@Validated
+public class DuserController {
+
+    @Resource
+    private DuserService duserService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建推荐用户")
+    @PreAuthorize("@ss.hasPermission('distri:duser:create')")
+    public CommonResult<Long> createDuser(@Valid @RequestBody DuserSaveReqVO createReqVO) {
+        return success(duserService.createDuser(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新推荐用户")
+    @PreAuthorize("@ss.hasPermission('distri:duser:update')")
+    public CommonResult<Boolean> updateDuser(@Valid @RequestBody DuserSaveReqVO updateReqVO) {
+        duserService.updateDuser(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除推荐用户")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('distri:duser:delete')")
+    public CommonResult<Boolean> deleteDuser(@RequestParam("id") Long id) {
+        duserService.deleteDuser(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得推荐用户")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('distri:duser:query')")
+    public CommonResult<DuserRespVO> getDuser(@RequestParam("id") Long id) {
+        DuserDO duser = duserService.getDuser(id);
+        return success(BeanUtils.toBean(duser, DuserRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得推荐用户分页")
+    @PreAuthorize("@ss.hasPermission('distri:duser:query')")
+    public CommonResult<PageResult<DuserRespVO>> getDuserPage(@Valid DuserPageReqVO pageReqVO) {
+        PageResult<DuserDO> pageResult = duserService.getDuserPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, DuserRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出推荐用户 Excel")
+    @PreAuthorize("@ss.hasPermission('distri:duser:export')")
+    @OperateLog(type = EXPORT)
+    public void exportDuserExcel(@Valid DuserPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<DuserDO> list = duserService.getDuserPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "推荐用户.xls", "数据", DuserRespVO.class,
+                        BeanUtils.toBean(list, DuserRespVO.class));
+    }
+
+}

+ 11 - 11
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/user/vo/UserPageReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserPageReqVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.user.vo;
+package cn.newfeifan.mall.module.distri.controller.admin.duser.vo;
 
 import lombok.*;
 import java.util.*;
@@ -9,17 +9,13 @@ 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")
+@Schema(description = "管理后台 - 推荐用户分页 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class UserPageReqVO extends PageParam {
+public class DuserPageReqVO extends PageParam {
 
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-    @Schema(description = "团队人员ID", example = "8034")
+    @Schema(description = "团队人员ID", example = "17459")
     private Long userId;
 
     @Schema(description = "团队人员姓名", example = "李四")
@@ -31,16 +27,20 @@ public class UserPageReqVO extends PageParam {
     @Schema(description = "团队人员来源")
     private Integer source;
 
-    @Schema(description = "团队用户当前积分", example = "16642")
+    @Schema(description = "团队用户当前积分", example = "11037")
     private Long integralId;
 
-    @Schema(description = "团队用户当前身价(等级)", example = "1")
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
     private Integer socialStatus;
 
     @Schema(description = "团队用户当前点数")
     private Long socialStatusPoint;
 
-    @Schema(description = "用户类型", example = "20094")
+    @Schema(description = "用户类型", example = "3773")
     private Long categoryId;
 
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
 }

+ 12 - 12
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/user/vo/UserRespVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserRespVO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.controller.admin.user.vo;
+package cn.newfeifan.mall.module.distri.controller.admin.duser.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -8,20 +8,16 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
 import com.alibaba.excel.annotation.*;
 
-@Schema(description = "管理后台 - 分销用户 Response VO")
+@Schema(description = "管理后台 - 推荐用户 Response VO")
 @Data
 @ExcelIgnoreUnannotated
-public class UserRespVO {
+public class DuserRespVO {
 
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7136")
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23853")
     @ExcelProperty("用户编号")
     private Long id;
 
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("创建时间")
-    private LocalDateTime createTime;
-
-    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8034")
+    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17459")
     @ExcelProperty("团队人员ID")
     private Long userId;
 
@@ -37,11 +33,11 @@ public class UserRespVO {
     @ExcelProperty("团队人员来源")
     private Integer source;
 
-    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "16642")
+    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "11037")
     @ExcelProperty("团队用户当前积分")
     private Long integralId;
 
-    @Schema(description = "团队用户当前身价(等级)", example = "1")
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
     @ExcelProperty("团队用户当前身价(等级)")
     private Integer socialStatus;
 
@@ -49,8 +45,12 @@ public class UserRespVO {
     @ExcelProperty("团队用户当前点数")
     private Long socialStatusPoint;
 
-    @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "20094")
+    @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "3773")
     @ExcelProperty("用户类型")
     private Long categoryId;
 
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
 }

+ 8 - 8
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/user/vo/UserSaveReqVO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/admin/duser/vo/DuserSaveReqVO.java

@@ -1,18 +1,18 @@
-package cn.newfeifan.mall.module.distri.controller.admin.user.vo;
+package cn.newfeifan.mall.module.distri.controller.admin.duser.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
 import javax.validation.constraints.*;
 
-@Schema(description = "管理后台 - 分销用户新增/修改 Request VO")
+@Schema(description = "管理后台 - 推荐用户新增/修改 Request VO")
 @Data
-public class UserSaveReqVO {
+public class DuserSaveReqVO {
 
-    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7136")
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23853")
     private Long id;
 
-    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8034")
+    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17459")
     @NotNull(message = "团队人员ID不能为空")
     private Long userId;
 
@@ -27,17 +27,17 @@ public class UserSaveReqVO {
     @Schema(description = "团队人员来源")
     private Integer source;
 
-    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "16642")
+    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "11037")
     @NotNull(message = "团队用户当前积分不能为空")
     private Long integralId;
 
-    @Schema(description = "团队用户当前身价(等级)", example = "1")
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
     private Integer socialStatus;
 
     @Schema(description = "团队用户当前点数")
     private Long socialStatusPoint;
 
-    @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "20094")
+    @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "3773")
     @NotNull(message = "用户类型不能为空")
     private Long categoryId;
 

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

@@ -1,95 +0,0 @@
-package cn.newfeifan.mall.module.distri.controller.admin.user;
-
-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.user.vo.*;
-import cn.newfeifan.mall.module.distri.dal.dataobject.user.UserDO;
-import cn.newfeifan.mall.module.distri.service.user.UserService;
-
-@Tag(name = "管理后台 - 分销用户")
-@RestController
-@RequestMapping("/distri/user")
-@Validated
-public class UserController {
-
-    @Resource
-    private UserService userService;
-
-    @PostMapping("/create")
-    @Operation(summary = "创建分销用户")
-    @PreAuthorize("@ss.hasPermission('distri:user:create')")
-    public CommonResult<Long> createUser(@Valid @RequestBody UserSaveReqVO createReqVO) {
-        return success(userService.createUser(createReqVO));
-    }
-
-    @PutMapping("/update")
-    @Operation(summary = "更新分销用户")
-    @PreAuthorize("@ss.hasPermission('distri:user:update')")
-    public CommonResult<Boolean> updateUser(@Valid @RequestBody UserSaveReqVO updateReqVO) {
-        userService.updateUser(updateReqVO);
-        return success(true);
-    }
-
-    @DeleteMapping("/delete")
-    @Operation(summary = "删除分销用户")
-    @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('distri:user:delete')")
-    public CommonResult<Boolean> deleteUser(@RequestParam("id") Long id) {
-        userService.deleteUser(id);
-        return success(true);
-    }
-
-    @GetMapping("/get")
-    @Operation(summary = "获得分销用户")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('distri:user:query')")
-    public CommonResult<UserRespVO> getUser(@RequestParam("id") Long id) {
-        UserDO user = userService.getUser(id);
-        return success(BeanUtils.toBean(user, UserRespVO.class));
-    }
-
-    @GetMapping("/page")
-    @Operation(summary = "获得分销用户分页")
-    @PreAuthorize("@ss.hasPermission('distri:user:query')")
-    public CommonResult<PageResult<UserRespVO>> getUserPage(@Valid UserPageReqVO pageReqVO) {
-        PageResult<UserDO> pageResult = userService.getUserPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, UserRespVO.class));
-    }
-
-    @GetMapping("/export-excel")
-    @Operation(summary = "导出分销用户 Excel")
-    @PreAuthorize("@ss.hasPermission('distri:user:export')")
-    @OperateLog(type = EXPORT)
-    public void exportUserExcel(@Valid UserPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<UserDO> list = userService.getUserPage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "分销用户.xls", "数据", UserRespVO.class,
-                        BeanUtils.toBean(list, UserRespVO.class));
-    }
-
-}

+ 5 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/user/UserDO.java → feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/dataobject/duser/DuserDO.java

@@ -1,4 +1,4 @@
-package cn.newfeifan.mall.module.distri.dal.dataobject.user;
+package cn.newfeifan.mall.module.distri.dal.dataobject.duser;
 
 import lombok.*;
 import java.util.*;
@@ -8,19 +8,19 @@ import com.baomidou.mybatisplus.annotation.*;
 import cn.newfeifan.mall.framework.mybatis.core.dataobject.BaseDO;
 
 /**
- * 分销用户 DO
+ * 推荐用户 DO
  *
  * @author 非繁人
  */
-@TableName("distri_user")
-@KeySequence("distri_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@TableName("distri_duser")
+@KeySequence("distri_duser_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class UserDO extends BaseDO {
+public class DuserDO extends BaseDO {
 
     /**
      * 用户编号

+ 34 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/duser/DuserMapper.java

@@ -0,0 +1,34 @@
+package cn.newfeifan.mall.module.distri.dal.mysql.duser;
+
+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.duser.DuserDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.*;
+
+/**
+ * 推荐用户 Mapper
+ *
+ * @author 非繁人
+ */
+@Mapper
+public interface DuserMapper extends BaseMapperX<DuserDO> {
+
+    default PageResult<DuserDO> selectPage(DuserPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<DuserDO>()
+                .eqIfPresent(DuserDO::getUserId, reqVO.getUserId())
+                .likeIfPresent(DuserDO::getName, reqVO.getName())
+                .eqIfPresent(DuserDO::getMobile, reqVO.getMobile())
+                .eqIfPresent(DuserDO::getSource, reqVO.getSource())
+                .eqIfPresent(DuserDO::getIntegralId, reqVO.getIntegralId())
+                .eqIfPresent(DuserDO::getSocialStatus, reqVO.getSocialStatus())
+                .eqIfPresent(DuserDO::getSocialStatusPoint, reqVO.getSocialStatusPoint())
+                .eqIfPresent(DuserDO::getCategoryId, reqVO.getCategoryId())
+                .betweenIfPresent(DuserDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(DuserDO::getId));
+    }
+    int hasParent(Long userId);
+}

+ 0 - 36
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/dal/mysql/user/UserMapper.java

@@ -1,36 +0,0 @@
-package cn.newfeifan.mall.module.distri.dal.mysql.user;
-
-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.user.UserDO;
-import org.apache.ibatis.annotations.Mapper;
-import cn.newfeifan.mall.module.distri.controller.admin.user.vo.*;
-
-/**
- * 分销用户 Mapper
- *
- * @author 非繁人
- */
-@Mapper
-public interface UserMapper extends BaseMapperX<UserDO> {
-
-    default PageResult<UserDO> selectPage(UserPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<UserDO>()
-                .betweenIfPresent(UserDO::getCreateTime, reqVO.getCreateTime())
-                .eqIfPresent(UserDO::getUserId, reqVO.getUserId())
-                .likeIfPresent(UserDO::getName, reqVO.getName())
-                .eqIfPresent(UserDO::getMobile, reqVO.getMobile())
-                .eqIfPresent(UserDO::getSource, reqVO.getSource())
-                .eqIfPresent(UserDO::getIntegralId, reqVO.getIntegralId())
-                .eqIfPresent(UserDO::getSocialStatus, reqVO.getSocialStatus())
-                .eqIfPresent(UserDO::getSocialStatusPoint, reqVO.getSocialStatusPoint())
-                .eqIfPresent(UserDO::getCategoryId, reqVO.getCategoryId())
-                .orderByDesc(UserDO::getId));
-    }
-
-    int hasParent(Long userId);
-
-}

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

@@ -0,0 +1,55 @@
+package cn.newfeifan.mall.module.distri.service.duser;
+
+import java.util.*;
+import javax.validation.*;
+import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.framework.common.pojo.PageParam;
+
+/**
+ * 推荐用户 Service 接口
+ *
+ * @author 非繁人
+ */
+public interface DuserService {
+
+    /**
+     * 创建推荐用户
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createDuser(@Valid DuserSaveReqVO createReqVO);
+
+    /**
+     * 更新推荐用户
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateDuser(@Valid DuserSaveReqVO updateReqVO);
+
+    /**
+     * 删除推荐用户
+     *
+     * @param id 编号
+     */
+    void deleteDuser(Long id);
+
+    /**
+     * 获得推荐用户
+     *
+     * @param id 编号
+     * @return 推荐用户
+     */
+    DuserDO getDuser(Long id);
+
+    /**
+     * 获得推荐用户分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 推荐用户分页
+     */
+    PageResult<DuserDO> getDuserPage(DuserPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,74 @@
+package cn.newfeifan.mall.module.distri.service.duser;
+
+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.duser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+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.duser.DuserMapper;
+
+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 DuserServiceImpl implements DuserService {
+
+    @Resource
+    private DuserMapper duserMapper;
+
+    @Override
+    public Long createDuser(DuserSaveReqVO createReqVO) {
+        // 插入
+        DuserDO duser = BeanUtils.toBean(createReqVO, DuserDO.class);
+        duserMapper.insert(duser);
+        // 返回
+        return duser.getId();
+    }
+
+    @Override
+    public void updateDuser(DuserSaveReqVO updateReqVO) {
+        // 校验存在
+        validateDuserExists(updateReqVO.getId());
+        // 更新
+        DuserDO updateObj = BeanUtils.toBean(updateReqVO, DuserDO.class);
+        duserMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteDuser(Long id) {
+        // 校验存在
+        validateDuserExists(id);
+        // 删除
+        duserMapper.deleteById(id);
+    }
+
+    private void validateDuserExists(Long id) {
+        if (duserMapper.selectById(id) == null) {
+            throw exception(DUSER_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public DuserDO getDuser(Long id) {
+        return duserMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<DuserDO> getDuserPage(DuserPageReqVO pageReqVO) {
+        return duserMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -1,55 +0,0 @@
-package cn.newfeifan.mall.module.distri.service.user;
-
-import java.util.*;
-import javax.validation.*;
-import cn.newfeifan.mall.module.distri.controller.admin.user.vo.*;
-import cn.newfeifan.mall.module.distri.dal.dataobject.user.UserDO;
-import cn.newfeifan.mall.framework.common.pojo.PageResult;
-import cn.newfeifan.mall.framework.common.pojo.PageParam;
-
-/**
- * 分销用户 Service 接口
- *
- * @author 非繁人
- */
-public interface UserService {
-
-    /**
-     * 创建分销用户
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createUser(@Valid UserSaveReqVO createReqVO);
-
-    /**
-     * 更新分销用户
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateUser(@Valid UserSaveReqVO updateReqVO);
-
-    /**
-     * 删除分销用户
-     *
-     * @param id 编号
-     */
-    void deleteUser(Long id);
-
-    /**
-     * 获得分销用户
-     *
-     * @param id 编号
-     * @return 分销用户
-     */
-    UserDO getUser(Long id);
-
-    /**
-     * 获得分销用户分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 分销用户分页
-     */
-    PageResult<UserDO> getUserPage(UserPageReqVO pageReqVO);
-
-}

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

@@ -1,74 +0,0 @@
-package cn.newfeifan.mall.module.distri.service.user;
-
-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.user.vo.*;
-import cn.newfeifan.mall.module.distri.dal.dataobject.user.UserDO;
-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.user.UserMapper;
-
-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 UserServiceImpl implements UserService {
-
-    @Resource
-    private UserMapper userMapper;
-
-    @Override
-    public Long createUser(UserSaveReqVO createReqVO) {
-        // 插入
-        UserDO user = BeanUtils.toBean(createReqVO, UserDO.class);
-        userMapper.insert(user);
-        // 返回
-        return user.getId();
-    }
-
-    @Override
-    public void updateUser(UserSaveReqVO updateReqVO) {
-        // 校验存在
-        validateUserExists(updateReqVO.getId());
-        // 更新
-        UserDO updateObj = BeanUtils.toBean(updateReqVO, UserDO.class);
-        userMapper.updateById(updateObj);
-    }
-
-    @Override
-    public void deleteUser(Long id) {
-        // 校验存在
-        validateUserExists(id);
-        // 删除
-        userMapper.deleteById(id);
-    }
-
-    private void validateUserExists(Long id) {
-        if (userMapper.selectById(id) == null) {
-            throw exception(USER_NOT_EXISTS);
-        }
-    }
-
-    @Override
-    public UserDO getUser(Long id) {
-        return userMapper.selectById(id);
-    }
-
-    @Override
-    public PageResult<UserDO> getUserPage(UserPageReqVO pageReqVO) {
-        return userMapper.selectPage(pageReqVO);
-    }
-
-}

+ 3 - 6
feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/user/UserMapper.xml → feifan-module-distri/feifan-module-distri-biz/src/main/resources/mapper/duser/DuserMapper.xml

@@ -1,6 +1,6 @@
 <?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.user.UserMapper">
+<mapper namespace="cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper">
 
     <!--
         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
@@ -8,7 +8,7 @@
         代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
         文档可见:https://www.zhongxing.cn/MyBatis/x-plugins/
      -->
-    <resultMap id="BaseResultMap" type="cn.newfeifan.mall.module.distri.dal.dataobject.user.UserDO">
+    <resultMap id="BaseResultMap" type="cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO">
         <id column="id" property="id" />
         <result column="user_id" property="userId" />
         <result column="name" property="name" />
@@ -23,10 +23,7 @@
     </resultMap>
 
     <select id="hasParent" resultType="Integer" >
-       SELECT COUNT(dp) > 0 FROM distri_share_path dp WHERE dp.descendant =  #{distributorId}  AND dp.depth = 1
+        SELECT COUNT(dp) > 0 FROM distri_share_path dp WHERE dp.descendant =  #{distributorId}  AND dp.depth = 1
     </select>
 
-
-
-
 </mapper>

+ 162 - 0
feifan-module-distri/feifan-module-distri-biz/src/test/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImplTest.java

@@ -0,0 +1,162 @@
+package cn.newfeifan.mall.module.distri.service.duser;
+
+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.duser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper;
+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 DuserServiceImpl} 的单元测试类
+ *
+ * @author 非繁人
+ */
+@Import(DuserServiceImpl.class)
+public class DuserServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private DuserServiceImpl duserService;
+
+    @Resource
+    private DuserMapper duserMapper;
+
+    @Test
+    public void testCreateDuser_success() {
+        // 准备参数
+        DuserSaveReqVO createReqVO = randomPojo(DuserSaveReqVO.class).setId(null);
+
+        // 调用
+        Long duserId = duserService.createDuser(createReqVO);
+        // 断言
+        assertNotNull(duserId);
+        // 校验记录的属性是否正确
+        DuserDO duser = duserMapper.selectById(duserId);
+        assertPojoEquals(createReqVO, duser, "id");
+    }
+
+    @Test
+    public void testUpdateDuser_success() {
+        // mock 数据
+        DuserDO dbDuser = randomPojo(DuserDO.class);
+        duserMapper.insert(dbDuser);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        DuserSaveReqVO updateReqVO = randomPojo(DuserSaveReqVO.class, o -> {
+            o.setId(dbDuser.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        duserService.updateDuser(updateReqVO);
+        // 校验是否更新正确
+        DuserDO duser = duserMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, duser);
+    }
+
+    @Test
+    public void testUpdateDuser_notExists() {
+        // 准备参数
+        DuserSaveReqVO updateReqVO = randomPojo(DuserSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> duserService.updateDuser(updateReqVO), DUSER_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteDuser_success() {
+        // mock 数据
+        DuserDO dbDuser = randomPojo(DuserDO.class);
+        duserMapper.insert(dbDuser);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbDuser.getId();
+
+        // 调用
+        duserService.deleteDuser(id);
+       // 校验数据不存在了
+       assertNull(duserMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteDuser_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> duserService.deleteDuser(id), DUSER_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetDuserPage() {
+       // mock 数据
+       DuserDO dbDuser = randomPojo(DuserDO.class, o -> { // 等会查询到
+           o.setUserId(null);
+           o.setName(null);
+           o.setMobile(null);
+           o.setSource(null);
+           o.setIntegralId(null);
+           o.setSocialStatus(null);
+           o.setSocialStatusPoint(null);
+           o.setCategoryId(null);
+           o.setCreateTime(null);
+       });
+       duserMapper.insert(dbDuser);
+       // 测试 userId 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setUserId(null)));
+       // 测试 name 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setName(null)));
+       // 测试 mobile 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setMobile(null)));
+       // 测试 source 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setSource(null)));
+       // 测试 integralId 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setIntegralId(null)));
+       // 测试 socialStatus 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setSocialStatus(null)));
+       // 测试 socialStatusPoint 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setSocialStatusPoint(null)));
+       // 测试 categoryId 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setCategoryId(null)));
+       // 测试 createTime 不匹配
+       duserMapper.insert(cloneIgnoreId(dbDuser, o -> o.setCreateTime(null)));
+       // 准备参数
+       DuserPageReqVO reqVO = new DuserPageReqVO();
+       reqVO.setUserId(null);
+       reqVO.setName(null);
+       reqVO.setMobile(null);
+       reqVO.setSource(null);
+       reqVO.setIntegralId(null);
+       reqVO.setSocialStatus(null);
+       reqVO.setSocialStatusPoint(null);
+       reqVO.setCategoryId(null);
+       reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+       // 调用
+       PageResult<DuserDO> pageResult = duserService.getDuserPage(reqVO);
+       // 断言
+       assertEquals(1, pageResult.getTotal());
+       assertEquals(1, pageResult.getList().size());
+       assertPojoEquals(dbDuser, pageResult.getList().get(0));
+    }
+
+}

+ 5 - 0
feifan-server/pom.xml

@@ -43,6 +43,11 @@
             <artifactId>feifan-module-member-biz</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-distri-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
 
         <!-- 数据报表。默认注释,保证编译速度 -->
 <!--        <dependency>-->

+ 1 - 2
feifan-server/src/main/java/cn/newfeifan/mall/server/FeifanServerApplication.java

@@ -15,8 +15,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${feifan.info.base-package}
 @SpringBootApplication(scanBasePackages = {"${feifan.info.base-package}.server",
         "${feifan.info.base-package}.module",
-        "${feifan.info.base-package}.sale",
-        "cn.newfeifan.mall.module.distri" })
+        "${feifan.info.base-package}.sale" })
 public class FeifanServerApplication {
 
     public static void main(String[] args) {