Pu Zhibing
2024-12-20 49f2eff2cf52e0f1719dfad43cafff11b378252c
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -6,6 +6,7 @@
import com.ruoyi.account.api.model.UserCancellationLog;
import com.ruoyi.account.api.model.UserCoupon;
import com.ruoyi.account.api.model.UserSignRecord;
import com.ruoyi.account.mapper.AppUserMapper;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.UserCancellationLogService;
import com.ruoyi.account.service.UserCouponService;
@@ -33,10 +34,10 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import com.ruoyi.account.vo.*;
import com.ruoyi.common.core.web.controller.BaseController;
@@ -57,7 +58,6 @@
public class AppUserController extends BaseController {
   @Resource
   private TokenService tokenService;
   @Resource
@@ -75,6 +75,8 @@
   private UserPointService userPointService;
   @Resource
   private VipSettingService vipSettingService;
    @Resource
    private AppUserMapper appUserMapper;
   @ResponseBody
@@ -83,10 +85,6 @@
   public R<LoginVo> mobileLogin(@RequestBody MobileLogin mobileLogin){
      return appUserService.mobileLogin(mobileLogin);
   }
   @ResponseBody
@@ -138,15 +136,12 @@
   }
   @ResponseBody
   @PostMapping("/getSMSCode")
   @ApiOperation(value = "获取短信验证码")
   public R getSMSCode(@RequestBody SMSCode smsCode){
      return appUserService.getSMSCode(smsCode);
   }
   @ResponseBody
@@ -171,7 +166,6 @@
   }
   @ResponseBody
   @GetMapping("/getNearbyReferrer")
   @ApiOperation(value = "获取附近推荐人列表")
@@ -190,6 +184,7 @@
      AppUser user = appUserService.getById(userId);
      return R.ok(user);
   }
   @Resource
   private UserCancellationLogService userCancellationLogService;
@@ -209,7 +204,6 @@
      return R.ok();
   }
   @ResponseBody
@@ -273,7 +267,6 @@
   }
    @GetMapping("/index")
   @ApiOperation(value = "个人中心首页", tags = {"小程序-个人中心首页"})
   public R<AppUser> index(){
@@ -330,6 +323,7 @@
      appUserService.updateById(user);
      return R.ok();
   }
   /**
    * 获取用户的祖籍列表
    */
@@ -351,7 +345,6 @@
   }
   
   
   @ResponseBody
   @PostMapping("/onlineRecord")
   @ApiOperation(value = "10分钟定时任务调用,记录用户在线时长", tags = {"小程序-个人中心首页"})
@@ -361,11 +354,9 @@
   }
   
   
   /**
    * 根据用户名称模糊搜索用户列表
     *
    * @param name
    * @return
    */
@@ -378,6 +369,7 @@
   
   /**
    * 根据用户电话模糊搜索用户列表
     *
    * @param phone
    * @return
    */
@@ -395,8 +387,7 @@
   @ApiOperation(value = "用户列表", tags = {"管理后台"})
   public R<IPage<AppUser>> getAppuserPage(@ApiParam("页码") @RequestParam Integer pageNum,
                          @ApiParam("每一页数据大小") Integer pageSize,
                          AppUser appUser)
   {
                                            AppUser appUser) {
      IPage<AppUser> appuserPage = appUserService.getAppuserPage(pageNum, pageSize, appUser);
      return R.ok(appuserPage);
   }
@@ -405,8 +396,7 @@
   @ApiOperation(value = "用户列表", tags = {"门店后台"})
   public R<IPage<AppUser>> shopGetAppuserPage(@ApiParam("页码") @RequestParam Integer pageNum,
                                 @ApiParam("每一页数据大小") Integer pageSize,
                                 AppUser appUser)
   {
                                                AppUser appUser) {
      Integer objectId = tokenService.getLoginUser().getSysUser().getObjectId();
      List<Long> userIds = new ArrayList<>();
@@ -421,11 +411,9 @@
   }
   @GetMapping("/danger/info")
   @ApiOperation(value = "用户列表-保级条件详情", tags = {"管理后台"})
   public R<DangerInfoDto> dangerinfo(Long id)
   {
    public R<DangerInfoDto> dangerinfo(Long id) {
      AppUser byId = appUserService.getById(id);
      LocalDate now = LocalDate.now();
      R<VipSetting> vipSetting = vipSettingClient.getVipSetting(byId.getVipId());
@@ -456,8 +444,7 @@
   @GetMapping("/danger/down")
   @ApiOperation(value = "用户列表-保级条件降级", tags = {"管理后台"})
   public R down(Long id)
   {
    public R down(Long id) {
      AppUser byId = appUserService.getById(id);
      byId.setVipId(byId.getVipId()-1);
      appUserService.updateById(byId);
@@ -473,10 +460,10 @@
      ).start();
      return R.ok();
   }
   @GetMapping("/frozen")
   @ApiOperation(value = "用户列表-冻结解冻", tags = {"管理后台"})
   public R frozen(Long id,@ApiParam("1=正常,2=冻结")Integer status)
   {
    public R frozen(Long id, @ApiParam("1=正常,2=冻结") Integer status) {
      AppUser byId = appUserService.getById(id);
      byId.setStatus(status);
      appUserService.updateById(byId);
@@ -485,8 +472,7 @@
   @GetMapping("/select")
   @ApiOperation(value = "用户列表-查询绑定人", tags = {"管理后台"})
   public R<AppUser> select(String phone)
   {
    public R<AppUser> select(String phone) {
      AppUser byId = appUserService.lambdaQuery().eq(AppUser::getPhone,phone).one();
      if (byId==null){
         return R.fail("搜索失败,手机号错误。");
@@ -496,18 +482,17 @@
   @GetMapping("/change/bind")
   @ApiOperation(value = "用户列表-更换绑定人", tags = {"管理后台"})
   public R<AppUser> select(Long id,Long inviteId)
   {
    public R<AppUser> select(Long id, Long inviteId) {
      AppUser byId = appUserService.getById(id);
      byId.setInviteUserId(inviteId);
      byId.setTopInviteId(getTop(inviteId));
      appUserService.updateById(byId);
      return R.ok();
   }
   @GetMapping("/change/shop")
   @ApiOperation(value = "用户列表-更换门店", tags = {"管理后台"})
   public R<AppUser> shop(Long id,Long shopId)
   {
    public R<AppUser> shop(Long id, Long shopId) {
      AppUser byId = appUserService.getById(id);
      byId.setShopId(shopId);
      appUserService.updateById(byId);
@@ -525,9 +510,6 @@
   }
   @Resource
   private ShopClient shopClient;
   @Resource
@@ -535,8 +517,7 @@
   @GetMapping("/detail")
   @ApiOperation(value = "用户列表-详情", tags = {"管理后台"})
   public R<AppUser> detail(Long id)
   {
    public R<AppUser> detail(Long id) {
      AppUser byId = appUserService.getById(id);
      if (byId.getShopId()!=null) {
         R<Shop> shopById = shopClient.getShopById(Integer.parseInt(String.valueOf(byId.getShopId())));
@@ -568,10 +549,10 @@
   @Resource
   private UserChangeLogService userChangeLogService;
   @GetMapping("/change/vip")
   @ApiOperation(value = "用户列表-修改会员等级", tags = {"管理后台"})
   public R<Page<AppUser>> changevip(Long id,Integer vipId)
   {
    public R<Page<AppUser>> changevip(Long id, Integer vipId) {
      AppUser byId = appUserService.getById(id);
      UserChangeLog userChangeLog = new UserChangeLog();
@@ -593,8 +574,7 @@
   @GetMapping("/bottom")
   @ApiOperation(value = "用户列表-绑定下级列表", tags = {"管理后台"})
   public R<Page<AppUser>> bottom(Long id,Integer pageNum,Integer pageSize)
   {
    public R<Page<AppUser>> bottom(Long id, Integer pageNum, Integer pageSize) {
      //绑定下级
      Page<AppUser> page = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, id).page(Page.of(pageNum, pageSize));
      return R.ok(page);
@@ -603,18 +583,11 @@
   @GetMapping("/orders")
   @ApiOperation(value = "用户列表-订单列表", tags = {"管理后台"})
   public R<List<Order>> orders(Long id)
   {
    public R<List<Order>> orders(Long id) {
      R<List<Order>> listR = remoteOrderGoodsClient.byUserId(id);
      return R.ok(listR.getData());
   }
   @GetMapping("/listByIds")
@@ -624,7 +597,6 @@
   }
   
   
   @PostMapping("/getAppUserByPhone1")
   public R<AppUser> getAppUserByPhone1(@RequestParam("phone") String phone){
      AppUser appUser = appUserService.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getStatus, 1)
@@ -632,5 +604,71 @@
      return R.ok(appUser);
   }
    /**
     * 用户统计
     */
    @GetMapping("/statistics")
    @ApiOperation(value = "用户统计", tags = {"管理后台-首页统计-用户统计"})
    public R<UserStatistics> statistics() {
        UserStatistics userStatistics = appUserMapper.getUserStatistics();
        return R.ok(userStatistics);
    }
    /**
     * 用户统计详情
     */
    @GetMapping("/statistics/detail")
    @ApiOperation(value = "用户统计详情", tags = {"管理后台-首页统计-用户统计详情"})
    public R<UserStatisticsDetail> statisticsDetail(@ApiParam(value = "用户id") Long userId) {
        UserStatisticsDetail userStatisticsDetail = appUserMapper.getUserStatisticsDetail(userId);
        return R.ok(userStatisticsDetail);
    }
    /**
     * 分佣统计明细
     */
    @GetMapping("/commissionDetail")
    @ApiOperation(value = "分佣统计", tags = "管理后台-首页统计")
    public R<CommissionDetail> commissionDetail(BalanceChangeRecord balanceChangeRecord) {
        List<AppUser> appUserList = Optional.ofNullable(appUserService.list()).orElse(Collections.emptyList());
        if (appUserList.isEmpty()) {
            return R.ok(new CommissionDetail());
        }
        BigDecimal totalCommission = BigDecimal.ZERO;
        BigDecimal totalServiceFee = BigDecimal.ZERO;
        BigDecimal totalUserCommission = BigDecimal.ZERO;
        Map<Integer, BigDecimal> vipCommissions = new HashMap<>();
        for (AppUser appUser : appUserList) {
            totalCommission = totalCommission.add(Optional.ofNullable(appUser.getTotalDistributionAmount()).orElse(BigDecimal.ZERO));
            totalServiceFee = totalServiceFee.add(Optional.ofNullable(appUser.getShopServiceFee()).orElse(BigDecimal.ZERO));
            totalUserCommission = totalUserCommission.add(Optional.ofNullable(appUser.getShopCommission()).orElse(BigDecimal.ZERO));
            Integer vipId = appUser.getVipId();
            if (vipId != null && vipId >= 1 && vipId <= 7) {
                vipCommissions.merge(vipId, Optional.ofNullable(appUser.getTotalDistributionAmount()).orElse(BigDecimal.ZERO), BigDecimal::add);
            }
        }
        CommissionDetail commissionDetail = new CommissionDetail();
        commissionDetail.setTotalCommission(totalCommission);
        commissionDetail.setTotalServiceFee(totalServiceFee);
        commissionDetail.setTotalUserCommission(totalUserCommission);
        commissionDetail.setTotalNormalCommission(vipCommissions.getOrDefault(1, BigDecimal.ZERO));
        commissionDetail.setTotalGoldCommission(vipCommissions.getOrDefault(2, BigDecimal.ZERO));
        commissionDetail.setTotalDiamondCommission(vipCommissions.getOrDefault(3, BigDecimal.ZERO));
        commissionDetail.setTotalAgentCommission(vipCommissions.getOrDefault(4, BigDecimal.ZERO));
        commissionDetail.setTotalSuperAgentCommission(vipCommissions.getOrDefault(5, BigDecimal.ZERO));
        commissionDetail.setTotalTopAgentCommission(vipCommissions.getOrDefault(6, BigDecimal.ZERO));
        commissionDetail.setTotalPartnerCommission(vipCommissions.getOrDefault(7, BigDecimal.ZERO));
        return R.ok(commissionDetail);
    }
}