From 04ce420613f90f8414e87e8fe68484fc32485349 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期二, 24 六月 2025 18:49:06 +0800 Subject: [PATCH] 部署 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java | 235 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 141 insertions(+), 94 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java index b005e8f..90d1020 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java @@ -1,6 +1,7 @@ package com.ruoyi.account.controller; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -19,7 +20,9 @@ import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.feignClient.OrderClient; @@ -41,6 +44,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -79,6 +83,8 @@ private OrderClient orderClient; @Resource private SysConfigClient sysConfigClient; + @Resource + private AppUserShopService appUserShopService; @Resource private UserCancellationLogService userCancellationLogService; @@ -99,6 +105,12 @@ return appUserService.mobileLogin(mobileLogin); } + @ResponseBody + @PostMapping("/registerAccount") + @ApiOperation(value = "注册新账号") + public R<LoginVo> registerAccount(@RequestBody RegisterAccount registerAccount) { + return appUserService.registerAccount(registerAccount); + } @GetMapping("/logout") @ApiOperation(value = "登出") @@ -310,24 +322,10 @@ public R<IPage<AppUser>> getAppuserPage(@ApiParam("页码") @RequestParam Integer pageNum, @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()) { - Shop shop1 = shopClient.getServiceProvider(record.getId()).getData(); - if(null != shop1){ - record.setShopName(shop1.getName()); - record.setShopId(shop1.getId()); - } - } + return R.ok(appuserPage); } @@ -368,7 +366,7 @@ @GetMapping("/shop/getAppuserPage") - @ApiOperation(value = "用户列表", tags = {"门店后台"}) + @ApiOperation(value = "用户列表-在门店下过单的", tags = {"门店后台"}) public R<IPage<AppUser>> shopGetAppuserPage(@ApiParam("页码") @RequestParam Integer pageCurr, @ApiParam("每一页数据大小") Integer pageSize, AppUser appUser) { @@ -436,52 +434,19 @@ @GetMapping("/detail") @ApiOperation(value = "用户列表-详情", tags = {"管理后台"}) - public R<AppUser> detail(Long id, Integer shopId) { - Long userid = tokenService.getLoginUser().getUserid(); - SysUser sysUser = sysUserClient.getSysUser(userid).getData(); + public R<AppUser> detail(Long id) { AppUser byId = appUserService.getById(id); - Shop shop1 = shopClient.getServiceProvider(byId.getId()).getData(); - if(null != shop1){ - byId.setShopName(shop1.getName()); - byId.setShopId(shop1.getId()); + //获取店铺名称 + List<String> shopNames=shopClient.getServiceProvider(byId.getId()).getData(); + if(null != shopNames){ + byId.setShopNames(shopNames); } - R<List<Shop>> shopByUserId = shopClient.getShopByUserId(id); - if (shopByUserId.getData() != null) { - List<String> shopName = new ArrayList<>(); - for (Shop datum : shopByUserId.getData()) { - shopName.add(datum.getName()); - } - byId.setShopNames(shopName); - } - //推广人 - /*if (byId.getInviteUserId() != null) { - AppUser appUser = appUserService.getById(byId.getInviteUserId()); - if(null != appUser){ - byId.setInviteUserName(appUser.getName()); - } - }*/ - //最后下单时间 - R<Order> lastOrder = remoteOrderGoodsClient.getLastOrder(id); - if (lastOrder.getData() != null) { - byId.setLastOrderTime(lastOrder.getData().getCreateTime()); - } - /*List<AppUser> list = appUserService.lambdaQuery().eq(AppUser::getInviteUserId, id).list(); - byId.setBottomUsers(list);*/ //消费总金额 - if(null == shopId || 1 == sysUser.getRoleType()){ - shopId = -1; - } - if(null == shopId && 2 == sysUser.getRoleType()){ - shopId = sysUser.getObjectId(); - } - R<List<Order>> orderR = remoteOrderGoodsClient.byUserId(id, shopId); - List<Order> orderList = orderR.getData(); - if (!CollectionUtils.isEmpty(orderList)){ - BigDecimal paymentAmount = orderList.stream().map(Order::getPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - byId.setShopAmount(paymentAmount); - }else { - byId.setShopAmount(BigDecimal.ZERO); - } + Integer customPoint =(byId.getExchangePoint()==null?0:byId.getExchangePoint())+ + (byId.getTransferableOutPoint()==null?0:byId.getTransferableOutPoint())- + (byId.getCancelPoint()==null?0:byId.getCancelPoint()); + byId.setCustomPoint(customPoint); + return R.ok(byId); } @@ -542,50 +507,80 @@ /** - * 用户统计 + * 工作台-顶部 */ @GetMapping("/statistics") - @ApiOperation(value = "用户统计", tags = {"管理后台-首页统计-用户统计"}) + @ApiOperation(value = "统计", tags = {"后台-工作台-顶部"}) public R<UserStatistics> statistics() { - 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 中 - } queryWrapper.eq("del_flag", 0); - queryWrapper.ne("status", 3); - List<AppUser> appUserList = appUserService.list(queryWrapper); + queryWrapper.ne("status", 3);//没有注销的 - Map<Integer, Long> vipIdCountMap = appUserList.stream() - .collect(Collectors.groupingBy(AppUser::getVipId, Collectors.counting())); + List<AppUser> appUserList = appUserService.list(queryWrapper); + long consumerUser = appUserList.stream() + .filter(user -> user.getLastShopTime() != null) + .count();//消费者总数 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()); + userStatistics.setTotalUser(appUserList.size());//总用户数 + userStatistics.setConsumerUser((int) consumerUser);//消费过的用户 - long shopUserCount = appUserList.stream() - .filter(appUser -> appUser.getUserType() == 2) - .count(); - userStatistics.setShopUser((int) shopUserCount); + //拥有店铺用户数 + Integer shopUserCount = appUserShopService.getHaveShopUserNum(); + + userStatistics.setShopUser(shopUserCount); + + //门店总数 + long shopNum = shopClient.getAllShop().getData().size(); + userStatistics.setShopNum((int) shopNum); + return R.ok(userStatistics); + } + + /** + * 工作台-用户分析 + */ + @GetMapping("/homeStatistics/userAnalysis") + @ApiOperation(value = "用户分析", tags = {"后台-工作台-用户分析"}) + public R<UserStatisticsDetail> userAnalysis(@ApiParam(value = "用户id") @RequestParam(value = "userId",required = false) Long userId) { + UserStatisticsDetail userStatistics = new UserStatisticsDetail(); + + QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>(); + // 条件构造 统计充值积分 + queryWrapper.select("SUM(recharge_point) as total_points"); + queryWrapper.eq("del_flag", 0);//未删除的 + queryWrapper.ne("status", 3);//未注销的 + if (userId != null) { + queryWrapper.eq("id", userId); + } + //统计充值积分 + Map<String, Object> result = appUserService.getMap(queryWrapper); + if (result == null || result.get("total_points") == null) { + userStatistics.setTotalScore(0L); + }else { + userStatistics.setTotalScore(((BigDecimal) result.get("total_points")).longValue()); + } + //条件构造 消费积分现金支付金额 + queryWrapper.clear(); + QueryWrapper<AppUser> queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.select("sum(exchange_point + transferable_out_point - cancel_point) as total_points"); + queryWrapper1.select("sum(shop_amount) as payment_amounts "); + queryWrapper1.eq("del_flag", 0);//未删除的 + queryWrapper1.ne("status", 3);//未注销的 + if (userId != null) { + queryWrapper1.eq("id", userId); + } + Map<String, Object> data = appUserShopService.getPointAndPayAmount(userId); + if (data == null || data.get("total_points") == null) { + userStatistics.setConsumeScore(0L); + }else { + userStatistics.setConsumeScore(Long.valueOf(data.get("total_points").toString()) ); + } + + if (data == null || data.get("payment_amounts") == null) { + userStatistics.setShopAmount(BigDecimal.ZERO); + }else { + userStatistics.setShopAmount(new BigDecimal(data.get("payment_amounts").toString())); + } return R.ok(userStatistics); } @@ -652,5 +647,57 @@ return R.ok(); } + + /** + * 获取所有用户积分列表 + */ + @ResponseBody + @GetMapping("/getUserPointPageList") + @ApiOperation(value = "所有用户积分列表", tags = "后台-财务统计-用户积分统计") + public R<PageInfo<UserPointStatisticsVO>> getUserPointPageList(@RequestParam(value = "name",required = false) String name, + @ApiParam("当前页")@RequestParam("pageCurr") Integer pageCurr, + @ApiParam("分页大小")@RequestParam("pageSize") Integer pageSize) { + PageInfo<UserPointStatisticsVO> pageInfo=appUserService.getUserPointPageList(name,pageCurr,pageSize); + + return R.ok(pageInfo); + } + + /** + * 导出用户积分列表 + */ + @ResponseBody + @GetMapping("/exportUserPoint") + @ApiOperation(value = "导出用户积分列表", tags = "后台-财务统计-用户积分统计") + public void exportUserPoint(HttpServletResponse response, @RequestParam(value = "name",required = false) String name) { + + List<UserPointStatisticsVO> exportList=appUserMapper.exportUserPoint(name); + ExcelUtil<UserPointStatisticsVO> util = new ExcelUtil<UserPointStatisticsVO>(UserPointStatisticsVO.class); + util.exportExcel(response, exportList, "用户积分汇总"); + } + + + @PostMapping("/saveOrUpdateAppUser") + Long saveOrUpdateAppUser(@RequestBody AppUser appuser){ + if (appuser.getId() == null) { + //保存用户 + appUserService.save(appuser); + }else { + appUserService.updateById(appuser); + } + return appuser.getId(); + + } + + @GetMapping("/getAllUser") + @ApiOperation(value = "获取所有用户") + public R<List<AppUser>> getAllUser() { + LambdaQueryWrapper<AppUser> queryWrapper=new LambdaQueryWrapper<>(); + queryWrapper.select(AppUser::getId,AppUser::getName); + queryWrapper.eq(AppUser::getDelFlag,0);//未删除的 + queryWrapper.ne(AppUser::getStatus, 3);//未注销的 + List<AppUser> list = appUserService.list(queryWrapper); + return R.ok(list); + } + } -- Gitblit v1.7.1