Explorar o código

增加获取分销人员信息接口

gaohp hai 1 ano
pai
achega
41f2eb5a72
Modificáronse 10 ficheiros con 302 adicións e 1 borrados
  1. 51 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/AppDuserController.java
  2. 52 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserPageReqVO.java
  3. 64 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserRespVO.java
  4. 49 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserSaveReqVO.java
  5. 1 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserService.java
  6. 29 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/duser/DuserServiceImpl.java
  7. 4 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogService.java
  8. 40 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ptprofitlog/PtProfitLogServiceImpl.java
  9. 1 1
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java
  10. 11 0
      feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

+ 51 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/AppDuserController.java

@@ -0,0 +1,51 @@
+package cn.newfeifan.mall.module.distri.controller.app.duser;
+
+import cn.newfeifan.mall.module.distri.controller.admin.duser.vo.DuserInfoVO;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+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.app.duser.vo.*;
+import cn.newfeifan.mall.module.distri.dal.dataobject.duser.DuserDO;
+import cn.newfeifan.mall.module.distri.service.duser.DuserService;
+
+@Tag(name = "用户 APP - 推荐用户")
+@RestController
+@RequestMapping("/distri/duser")
+@Validated
+public class AppDuserController {
+
+    @Resource
+    private DuserService duserService;
+
+    @GetMapping("/getDuserInfo")
+    @Operation(summary = "获取分销人员信息")
+    public CommonResult<DuserInfoVO> getDuserInfo(@RequestParam("userId") Long userId) {
+        DuserInfoVO duserInfo = duserService.getDuserInfo(userId);
+        return success(duserInfo);
+    }
+
+
+}

+ 52 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserPageReqVO.java

@@ -0,0 +1,52 @@
+package cn.newfeifan.mall.module.distri.controller.app.duser.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 = "用户 APP - 推荐用户分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AppDuserPageReqVO extends PageParam {
+
+    @Schema(description = "团队人员ID", example = "17459")
+    private Long userId;
+
+    @Schema(description = "团队人员姓名", example = "李四")
+    private String name;
+
+    @Schema(description = "团队人员手机号码")
+    private String mobile;
+
+    @Schema(description = "团队用户当前积分", example = "11037")
+    private Long integralId;
+
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
+    private Integer socialStatus;
+
+    @Schema(description = "团队用户当前点数")
+    private Long socialStatusPoint;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "团队人员来源")
+    private Long source;
+
+    @Schema(description = "身价距下一级所需点数")
+    private Long socialUpNeed;
+
+    @Schema(description = "用户类型", example = "7588")
+    private Long categoryId;
+
+    @Schema(description = "用户名称", example = "张三")
+    private String nickName;
+
+}

+ 64 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserRespVO.java

@@ -0,0 +1,64 @@
+package cn.newfeifan.mall.module.distri.controller.app.duser.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 = "用户 APP - 推荐用户 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppDuserRespVO {
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23853")
+    @ExcelProperty("用户编号")
+    private Long id;
+
+    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17459")
+    @ExcelProperty("团队人员ID")
+    private Long userId;
+
+    @Schema(description = "团队人员姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("团队人员姓名")
+    private String name;
+
+    @Schema(description = "团队人员手机号码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("团队人员手机号码")
+    private String mobile;
+
+    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "11037")
+    @ExcelProperty("团队用户当前积分")
+    private Long integralId;
+
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
+    @ExcelProperty("团队用户当前身价(等级)")
+    private Integer socialStatus;
+
+    @Schema(description = "团队用户当前点数")
+    @ExcelProperty("团队用户当前点数")
+    private Long socialStatusPoint;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "团队人员来源")
+    @ExcelProperty("团队人员来源")
+    private Long source;
+
+    @Schema(description = "身价距下一级所需点数")
+    @ExcelProperty("身价距下一级所需点数")
+    private Long socialUpNeed;
+
+    @Schema(description = "用户类型", example = "7588")
+    @ExcelProperty("用户类型")
+    private Long categoryId;
+
+    @Schema(description = "用户名称", example = "张三")
+    @ExcelProperty("用户名称")
+    private String nickName;
+
+}

+ 49 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/controller/app/duser/vo/AppDuserSaveReqVO.java

@@ -0,0 +1,49 @@
+package cn.newfeifan.mall.module.distri.controller.app.duser.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "用户 APP - 推荐用户新增/修改 Request VO")
+@Data
+public class AppDuserSaveReqVO {
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23853")
+    private Long id;
+
+    @Schema(description = "团队人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17459")
+    @NotNull(message = "团队人员ID不能为空")
+    private Long userId;
+
+    @Schema(description = "团队人员姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "团队人员姓名不能为空")
+    private String name;
+
+    @Schema(description = "团队人员手机号码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "团队人员手机号码不能为空")
+    private String mobile;
+
+    @Schema(description = "团队用户当前积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "11037")
+    @NotNull(message = "团队用户当前积分不能为空")
+    private Long integralId;
+
+    @Schema(description = "团队用户当前身价(等级)", example = "2")
+    private Integer socialStatus;
+
+    @Schema(description = "团队用户当前点数")
+    private Long socialStatusPoint;
+
+    @Schema(description = "团队人员来源")
+    private Long source;
+
+    @Schema(description = "身价距下一级所需点数")
+    private Long socialUpNeed;
+
+    @Schema(description = "用户类型", example = "7588")
+    private Long categoryId;
+
+    @Schema(description = "用户名称", example = "张三")
+    private String nickName;
+
+}

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

@@ -56,4 +56,5 @@ public interface DuserService {
 
     void hasUserAndCreat(SharePathSaveReqVO saveReqVO);
 
+    DuserInfoVO getDuserInfo(Long userId);
 }

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

@@ -5,6 +5,8 @@ import cn.newfeifan.mall.module.distri.controller.admin.integral.vo.IntegralSave
 import cn.newfeifan.mall.module.distri.controller.admin.sharepath.vo.SharePathSaveReqVO;
 import cn.newfeifan.mall.module.distri.dal.dataobject.integral.IntegralDO;
 import cn.newfeifan.mall.module.distri.service.integral.IntegralService;
+import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
+import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import cn.newfeifan.mall.module.distri.service.socialstatus.SocialStatusService;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import cn.newfeifan.mall.module.member.service.user.MemberUserService;
@@ -21,6 +23,8 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.duser.DuserMapper;
 
+import java.util.List;
+
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
@@ -39,6 +43,11 @@ public class DuserServiceImpl implements DuserService {
     @Resource
     private MemberUserService memberUserService;
 
+    @Resource
+    private SharePathService sharePathService;
+
+    @Resource
+    private PtProfitLogService ptProfitLogService;
 
     @Override
     public Long createDuser(DuserSaveReqVO createReqVO) {
@@ -94,6 +103,26 @@ public class DuserServiceImpl implements DuserService {
         checkAndCreat(saveReqVO.getAncestor());
     }
 
+    @Override
+    public DuserInfoVO getDuserInfo(Long userId) {
+
+        List<Long> sonsId = sharePathService.sonsId(userId);
+        IntegralDO integral = integralService.getIntegral(userId);
+        if (integral == null){
+            throw exception(INTEGRAL_NOT_EXISTS);
+        }
+        DuserInfoVO.DuserInfoVOBuilder duserInfoVOBuilder = DuserInfoVO.builder()
+                .integralDO(integral)
+                .descNo(sonsId.size());
+
+        // 获取昨日贡献值 + 合赢奖
+        String yesterday = ptProfitLogService.getYesterdayLog(sonsId);
+        String totalLog = ptProfitLogService.getTotalLog(sonsId);
+        return duserInfoVOBuilder.descPrice(Integer.parseInt(yesterday))
+                .descTotalPrice(Integer.parseInt(totalLog)).build();
+
+    }
+
     private void checkAndCreat(Long userId) {
         DuserDO duserDO = duserMapper.selectOne(new LambdaQueryWrapperX<DuserDO>().eqIfPresent(DuserDO::getUserId, userId));
         MemberUserDO user = memberUserService.getUser(userId);

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

@@ -55,4 +55,8 @@ public interface PtProfitLogService {
     void saveBatch(List<PtProfitLogSaveReqVO> ptProfitLogSaveReqVOS);
 
 
+    String getYesterdayLog(List<Long> sonsId);
+
+    String getTotalLog(List<Long> sonsId);
+
 }

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

@@ -1,5 +1,7 @@
 package cn.newfeifan.mall.module.distri.service.ptprofitlog;
 
+import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.newfeifan.mall.module.distri.enums.CaclEnum;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -7,6 +9,7 @@ import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
 import java.util.*;
 
 import cn.newfeifan.mall.module.distri.controller.admin.ptprofitlog.vo.*;
@@ -80,4 +83,41 @@ public class PtProfitLogServiceImpl implements PtProfitLogService {
         ptProfitLogMapper.insertBatch(ptProfitLog);
     }
 
+    @Override
+    public String getYesterdayLog(List<Long> sonsId) {
+
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 获取昨天的3点
+        LocalDateTime yesterdayThreeAM = now.minusDays(1).withHour(3).withMinute(0).withSecond(0).withNano(0);
+
+        // 获取今天的3点
+        LocalDateTime todayThreeAM = now.withHour(3).withMinute(0).withSecond(0).withNano(0);
+        if (now.isBefore(todayThreeAM)) {
+            // 如果当前时间在今天的3点之前,调整今天的3点为昨天的3点
+            todayThreeAM = todayThreeAM.minusDays(1);
+        }
+
+        List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapperX<PtProfitLogDO>()
+                .betweenIfPresent(PtProfitLogDO::getCreateTime, yesterdayThreeAM, todayThreeAM)
+                .eqIfPresent(PtProfitLogDO::getProfitStatus, CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                .or().eq(PtProfitLogDO::getProfitStatus, CaclEnum.TOGETHER_AWARD.getType())
+                .in(PtProfitLogDO::getUserId, sonsId));
+        int sum = ptProfitLogDOS.stream().mapToInt(PtProfitLogDO::getAmount).sum();
+
+        return sum + "";
+    }
+
+    @Override
+    public String getTotalLog(List<Long> sonsId) {
+        List<PtProfitLogDO> ptProfitLogDOS = ptProfitLogMapper.selectList(new LambdaQueryWrapperX<PtProfitLogDO>()
+                .eqIfPresent(PtProfitLogDO::getProfitStatus, CaclEnum.DIRECT_REFERRAL_QUOTA.getType())
+                .or().eq(PtProfitLogDO::getProfitStatus, CaclEnum.TOGETHER_AWARD.getType())
+                .in(PtProfitLogDO::getUserId, sonsId));
+        int sum = ptProfitLogDOS.stream().mapToInt(PtProfitLogDO::getAmount).sum();
+
+        return sum + "";
+    }
+
 }

+ 1 - 1
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathService.java

@@ -67,6 +67,6 @@ public interface SharePathService {
     void transferenceRela(SharePathtransFerenceRelaReqVO sharePathtransFerenceRelaReqVO);
 
 
-
+    List<Long> sonsId(Long userId);
 
 }

+ 11 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/sharepath/SharePathServiceImpl.java

@@ -4,6 +4,7 @@ import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.distri.service.duser.DuserService;
 import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import cn.newfeifan.mall.module.member.service.user.MemberUserService;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -18,6 +19,9 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import cn.newfeifan.mall.module.distri.dal.mysql.sharepath.SharePathMapper;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.module.distri.enums.ErrorCodeConstants.*;
 
@@ -34,6 +38,7 @@ public class SharePathServiceImpl implements SharePathService {
     private SharePathMapper sharePathMapper;
 
     @Resource
+    @Lazy
     private DuserService duserService;
 
     @Resource
@@ -135,6 +140,12 @@ public class SharePathServiceImpl implements SharePathService {
         // todo 转让用户关系
     }
 
+    @Override
+    public List<Long> sonsId(Long userId) {
+        List<SharePathDO> sharePathDOS = sharePathMapper.selectList(new LambdaQueryWrapperX<SharePathDO>().eq(SharePathDO::getAncestor, userId));
+        return sharePathDOS.stream().map(SharePathDO::getDescendant).collect(Collectors.toList());
+
+    }