| | |
| | | package com.ruoyi.account.controller; |
| | | |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | |
| | | import com.ruoyi.other.api.domain.VipSetting; |
| | | import com.ruoyi.other.api.feignClient.ShopBalanceStatementClient; |
| | | import com.ruoyi.other.api.feignClient.ShopClient; |
| | | import com.ruoyi.other.api.feignClient.StoreClient; |
| | | import com.ruoyi.other.api.feignClient.VipSettingClient; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | |
| | | @Resource |
| | | private AppUserService appUserService; |
| | | @Resource |
| | | private StoreClient storeClient; |
| | | @Resource |
| | | private UserCouponService userCouponService; |
| | | |
| | | @Resource |
| | |
| | | private VipSettingClient vipSettingClient; |
| | | @Resource |
| | | private UserPointService userPointService; |
| | | @Resource |
| | | private VipSettingService vipSettingService; |
| | | @Resource |
| | | private AppUserMapper appUserMapper; |
| | | @Resource |
| | |
| | | |
| | | @Resource |
| | | private WeChatUtil weChatUtil; |
| | | |
| | | @Resource |
| | | private IAppUserGiveawayTemporaryService appUserGiveawayTemporaryService; |
| | | |
| | | @Value("${file.upload.location}") |
| | | private String filePath; |
| | |
| | | @PostMapping("/getCouponCount") |
| | | public R<Long> getCouponCount(@RequestParam("userId") Long userId, @RequestParam("couponId") Integer couponId) { |
| | | LambdaQueryChainWrapper<UserCoupon> chainWrapper = userCouponService.lambdaQuery().eq(UserCoupon::getCouponId, couponId); |
| | | if(null != userId && -1 == userId){ |
| | | if(null != userId && -1 != userId){ |
| | | chainWrapper.eq(UserCoupon::getAppUserId, userId); |
| | | } |
| | | Long count = chainWrapper.count(); |
| | |
| | | Long userId = tokenService.getLoginUserApplet().getUserid(); |
| | | //获取绑定门店 |
| | | AppUser user = appUserService.getById(userId); |
| | | if (user.getShopId() != null) { |
| | | R<Shop> storeById = storeClient.getStoreById(user.getShopId()); |
| | | if (storeById.getData() != null) { |
| | | user.setShopName(storeById.getData().getName()); |
| | | user.setShopCover(storeById.getData().getHomePicture()); |
| | | user.setShopAddress(storeById.getData().getAddress()); |
| | | |
| | | |
| | | //当前用户的推荐人信息(指导老师) |
| | | List<AppUser> allSuperiors = getAllSuperiors(userId); |
| | | //当前绑定门店的店铺信息 |
| | | for (AppUser allSuperior : allSuperiors) { |
| | | List<Shop> shopList = shopClient.getShopByUserId(allSuperior.getId()).getData(); |
| | | if (!CollectionUtils.isEmpty(shopList)){ |
| | | user.setShopName(shopList.get(0).getName()); |
| | | user.setShopCover(shopList.get(0).getHomePicture()); |
| | | user.setShopAddress(shopList.get(0).getAddress()); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (user.getShopName() == null){ |
| | | user.setShopName(""); |
| | | } |
| | | if (user.getShopCover() == null){ |
| | | user.setShopCover(""); |
| | | } |
| | | if (user.getShopAddress() == null){ |
| | | user.setShopAddress(""); |
| | | } |
| | | |
| | | //指导老师 |
| | | allSuperiors.stream() |
| | | .filter(superiors -> superiors.getVipId() != null && superiors.getVipId() > 3) |
| | | .findFirst() |
| | | .ifPresent(superiors -> { |
| | | user.setTeacher(superiors.getName()); |
| | | user.setTeacherPhone(superiors.getPhone()); |
| | | }); |
| | | |
| | | if (user.getTeacher() == null){ |
| | | user.setTeacher(""); |
| | | } |
| | | if (user.getTeacherPhone() == null){ |
| | | user.setTeacherPhone(""); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //获取绑定上级 |
| | | if (user.getInviteUserId() != null) { |
| | | AppUser byId = appUserService.getById(user.getInviteUserId()); |
| | | user.setTopUser(byId); |
| | | }else { |
| | | AppUser topUser = new AppUser(); |
| | | user.setTopUser(topUser); |
| | | } |
| | | //获取绑定下级列表 |
| | | List<AppUser> list = appUserService.lambdaQuery() |
| | |
| | | appUserService.updateById(user); |
| | | } |
| | | |
| | | //当前用户的推荐人信息 |
| | | if (user.getInviteUserId() != null) { |
| | | AppUser inviteUser = appUserService.getById(user.getInviteUserId()); |
| | | user.setInviteUserName(inviteUser.getName()); |
| | | //指导老师 |
| | | List<AppUser> allSuperiors = getAllSuperiors(userId); |
| | | allSuperiors.stream() |
| | | .filter(superiors -> superiors.getVipId() != null && superiors.getVipId() > 3) |
| | | .findFirst() |
| | | .ifPresent(superiors -> { |
| | | user.setTeacher(superiors.getName()); |
| | | }); |
| | | |
| | | Shop shop1 = shopClient.getServiceProvider(userId).getData(); |
| | | if(null != shop1){ |
| | | user.setShopName(shop1.getName()); |
| | | user.setShopId(shop1.getId()); |
| | | } |
| | | //当前绑定门店的店铺信息 |
| | | if (user.getShopId() != null) { |
| | | R<Shop> storeById = shopClient.getShopById(user.getShopId()); |
| | | if (storeById.getData() != null) { |
| | | Shop shop = storeById.getData(); |
| | | user.setShopName(shop.getName()); |
| | | } |
| | | } |
| | | |
| | | ArrayList<Long> userIds = new ArrayList<>(); |
| | | userIds.add(userId); |
| | | // 获取当前用户的所有下级 |
| | |
| | | } else { |
| | | user.setIsSign(0); |
| | | } |
| | | |
| | | List<AppUserGiveawayTemporary> temporaryList = appUserGiveawayTemporaryService.list(new LambdaQueryWrapper<AppUserGiveawayTemporary>() |
| | | .eq(AppUserGiveawayTemporary::getAppUserId, userId)); |
| | | |
| | | user.setLavePoint(temporaryList.stream().mapToInt(AppUserGiveawayTemporary::getTotalPoint).sum() + user.getTotalPoint()); |
| | | return R.ok(user); |
| | | } |
| | | |
| | | |
| | | public List<AppUser> getAllSuperiors(Long userId) { |
| | | List<AppUser> allSuperiors = new ArrayList<>(); |
| | | |
| | | // 获取当前用户的直接上级 |
| | | AppUser currentUser = appUserService.getById(userId); |
| | | if (currentUser != null && currentUser.getInviteUserId() != null) { |
| | | AppUser superior = appUserService.getById(currentUser.getInviteUserId()); |
| | | if (superior != null) { |
| | | allSuperiors.add(superior); // 添加直接上级 |
| | | allSuperiors.addAll(getAllSuperiors(superior.getId())); // 递归添加上级的上级 |
| | | } |
| | | } |
| | | |
| | | return allSuperiors; |
| | | } |
| | | |
| | | |
| | | |
| | | // 递归获取指定用户的所有下级 |
| | | public List<AppUser> getAllSubordinates(Long userId) { |
| | |
| | | return R.ok(list); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/getUserPointsPage") |
| | | @ApiOperation(value = "用户列表", tags = {"管理后台"}) |
| | | public R<IPage<AppUser>> getUserPointsPage(@ApiParam("页码") @RequestParam Integer pageNum, |
| | | @ApiParam("每一页数据大小") Integer pageSize, |
| | | AppUser appUser) { |
| | | |
| | | Long userId = tokenService.getLoginUser().getUserid(); |
| | | SysUser data = sysUserClient.getSysUser(userId).getData(); |
| | | |
| | | QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>(); |
| | | if (data.getRoleType() == 2) { |
| | | Integer shopId = data.getObjectId(); |
| | | List<Order> orders = orderClient.getRedeemedOrdersByShop(shopId).getData(); |
| | | List<Long> userIds = orders.stream().map(Order::getAppUserId).collect(Collectors.toList()); |
| | | queryWrapper.in(!CollectionUtils.isEmpty(userIds), "id", userIds) |
| | | .like(StringUtils.isNotEmpty( appUser.getName()),"name", appUser.getName()); |
| | | } |
| | | queryWrapper.eq("del_flag", 0); |
| | | queryWrapper.ne("status", 3); |
| | | |
| | | List<AppUser> appUserList = appUserService.list(queryWrapper); |
| | | Page<AppUser> objectPage = Page.of(pageNum, pageSize); |
| | | objectPage.setRecords(appUserList); |
| | | return R.ok(objectPage); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获取用户列表 |
| | | */ |
| | | @GetMapping("/getAppuserPage") |
| | | @ApiOperation(value = "用户列表", tags = {"管理后台"}) |
| | | public R<IPage<AppUser>> getAppuserPage(@ApiParam("页码") @RequestParam Integer pageNum, |
| | | @ApiParam("每一页数据大小") Integer pageSize, |
| | | AppUser appUser) { |
| | | @ApiParam("每一页数据大小") Integer pageSize, |
| | | AppUser appUser){ |
| | | |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | Integer shopId = null; |
| | | Set<Long> userId = null; |
| | | if(sysUser.getRoleType() == 2){ |
| | | shopId = sysUser.getObjectId(); |
| | | userId = orderClient.getAppUserByShoppingShop(shopId).getData(); |
| | | } |
| | | appUser.setExcludeStatus(3); |
| | | IPage<AppUser> appuserPage = appUserService.getAppuserPage(pageNum, pageSize, appUser, shopId, userId); |
| | | for (AppUser record : appuserPage.getRecords()) { |
| | | if (record.getInviteUserId() != null) { |
| | | AppUser byId1 = appUserService.getById(record.getInviteUserId()); |
| | | if (byId1!=null) { |
| | | record.setInviteUserName(byId1.getName()); |
| | | } |
| | | } |
| | | if (record.getShopId()!=null){ |
| | | R<Shop> shopById = shopClient.getShopById(record.getShopId()); |
| | | if (shopById.getData()!=null){ |
| | | record.setShopName(shopById.getData().getName()); |
| | | } |
| | | } |
| | | record.setTotalPoint(record.getUserTotalPoint()); |
| | | } |
| | | return R.ok(appuserPage); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取用户积分列表 |
| | | */ |
| | | @GetMapping("/getUserPotPage") |
| | | public R<IPage<AppUser>> getUserPotPage(@ApiParam("页码") @RequestParam Integer pageNum, |
| | | @ApiParam("每一页数据大小") Integer pageSize, |
| | | AppUser appUser) { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | Integer shopId = null; |
| | |
| | | record.setShopName(shopById.getData().getName()); |
| | | } |
| | | } |
| | | record.setTotalPoint(record.getUserTotalPoint()); |
| | | } |
| | | return R.ok(appuserPage); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/shop/getAppuserPage") |
| | | @ApiOperation(value = "用户列表", tags = {"门店后台"}) |
| | |
| | | } |
| | | |
| | | private void loginout(Long userId) { |
| | | // 获取所有符合模式的缓存键 |
| | | Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); |
| | | if (!CollectionUtils.isEmpty(keys)) { |
| | | for (String key : keys) { |
| | | LoginUser user = redisService.getCacheObject(key); |
| | | if (user == null || user.getUserid() == null) { |
| | | continue; |
| | | } |
| | | if (user.getUserid().equals(userId)) { |
| | | redisService.deleteObject(key); |
| | | break; |
| | | } |
| | | if (CollectionUtils.isEmpty(keys)) { |
| | | return; // 如果没有匹配的键,直接返回 |
| | | } |
| | | |
| | | // 遍历所有键并删除与指定用户ID相关的登录信息 |
| | | for (String key : keys) { |
| | | LoginUser user = redisService.getCacheObject(key); |
| | | if (user != null && userId.equals(user.getUserid())) { |
| | | redisService.deleteObject(key); |
| | | } |
| | | } |
| | | } |
| | |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | AppUser byId = appUserService.getById(id); |
| | | if (byId.getShopId() != null) { |
| | | R<Shop> shopById = shopClient.getShopById(Integer.parseInt(String.valueOf(byId.getShopId()))); |
| | | if (shopById.getData() != null) { |
| | | byId.setShopName(shopById.getData().getName()); |
| | | } |
| | | Shop shop1 = shopClient.getServiceProvider(id).getData(); |
| | | if(null != shop1){ |
| | | byId.setShopName(shop1.getName()); |
| | | } |
| | | R<List<Shop>> shopByUserId = shopClient.getShopByUserId(id); |
| | | if (shopByUserId.getData() != null) { |
| | |
| | | @GetMapping("/statistics") |
| | | @ApiOperation(value = "用户统计", tags = {"管理后台-首页统计-用户统计"}) |
| | | public R<UserStatistics> statistics() { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser data = sysUserClient.getSysUser(userid).getData(); |
| | | Integer shopId = null; |
| | | Set<Long> userId = null; |
| | | if(data.getRoleType() == 2){ |
| | | shopId = data.getObjectId(); |
| | | userId = orderClient.getAppUserByShoppingShop(shopId).getData(); |
| | | Long userId = tokenService.getLoginUser().getUserid(); |
| | | SysUser data = sysUserClient.getSysUser(userId).getData(); |
| | | |
| | | QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>(); |
| | | if (data.getRoleType() == 2) { |
| | | Integer shopId = data.getObjectId(); |
| | | List<Order> orders = orderClient.getRedeemedOrdersByShop(shopId).getData(); |
| | | List<Long> userIds = orders.stream().map(Order::getAppUserId).collect(Collectors.toList()); |
| | | queryWrapper.in(!CollectionUtils.isEmpty(userIds), "id", userIds); // userIds 不为空时,查询 id 在 userIds 中 |
| | | } |
| | | UserStatistics userStatistics = appUserMapper.getUserStatistics(shopId, userId); |
| | | queryWrapper.eq("del_flag", 0); |
| | | queryWrapper.ne("status", 3); |
| | | List<AppUser> appUserList = appUserService.list(queryWrapper); |
| | | |
| | | Map<Integer, Long> vipIdCountMap = appUserList.stream() |
| | | .collect(Collectors.groupingBy(AppUser::getVipId, Collectors.counting())); |
| | | |
| | | UserStatistics userStatistics = new UserStatistics(); |
| | | userStatistics.setTotalUser(appUserList.size()); |
| | | userStatistics.setConsumerUser(vipIdCountMap.getOrDefault(0, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(1, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(2, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(3, 0L).intValue()); |
| | | userStatistics.setCommonUser(vipIdCountMap.getOrDefault(1, 0L).intValue()); |
| | | userStatistics.setGoldUser(vipIdCountMap.getOrDefault(2, 0L).intValue()); |
| | | userStatistics.setDiamondUser(vipIdCountMap.getOrDefault(3, 0L).intValue()); |
| | | userStatistics.setEntrepreneurUser(vipIdCountMap.getOrDefault(4, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(5, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(6, 0L).intValue() + |
| | | vipIdCountMap.getOrDefault(7, 0L).intValue()); |
| | | userStatistics.setProxyUser(vipIdCountMap.getOrDefault(4, 0L).intValue()); |
| | | userStatistics.setAgentUser(vipIdCountMap.getOrDefault(5, 0L).intValue()); |
| | | userStatistics.setTotalAgentUser(vipIdCountMap.getOrDefault(6, 0L).intValue()); |
| | | userStatistics.setPartnerUser(vipIdCountMap.getOrDefault(7, 0L).intValue()); |
| | | |
| | | long shopUserCount = appUserList.stream() |
| | | .filter(appUser -> appUser.getUserType() == 2) |
| | | .count(); |
| | | userStatistics.setShopUser((int) shopUserCount); |
| | | |
| | | return R.ok(userStatistics); |
| | | } |
| | | |
| | |
| | | .eq(BalanceChangeRecord::getVipId, i); |
| | | if(sysUser.getRoleType() == 2){ |
| | | Integer objectId = sysUser.getObjectId(); |
| | | List<AppUser> list = appUserService.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getShopId, objectId).eq(AppUser::getDelFlag, 0).eq(AppUser::getStatus, 1)); |
| | | List<AppUser> list = appUserService.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getShopId, objectId).eq(AppUser::getDelFlag, 0).ne(AppUser::getStatus, 1)); |
| | | List<Long> appUserIds = list.stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | Set<Long> data = orderClient.getAppUserByShoppingShop(objectId).getData(); |
| | | if(null != data){ |
| | |
| | | public void vipUpgrade(@RequestParam("appUserId") Long appUserId){ |
| | | appUserService.vipUpgrade(appUserId); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/vipConsumption") |
| | | public void vipConsumption(@RequestParam("appUserId") Long appUserId){ |
| | | appUserService.vipConsumption(appUserId); |
| | | } |
| | | |
| | | /** |
| | | * 检查会员降级 |
| | |
| | | .set(AppUser::getUserType,1)); |
| | | return R.ok(); |
| | | } |
| | | |
| | | } |
| | | |