From 74f666605450658b86e1b5ca076500aa341b6f49 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 22 七月 2025 13:59:09 +0800
Subject: [PATCH] yml活动管理代码

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java |  229 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 175 insertions(+), 54 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 7786439..1254c44 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;
@@ -36,13 +39,23 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Value;
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -101,6 +114,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 = "登出")
@@ -123,6 +142,11 @@
     public AppUser getAppUserById(@RequestParam("id") Long id) {
         System.out.println("根据id获取用户:"+id);
         return appUserService.getById(id);
+    }
+    // 获取所有用户
+    @PostMapping("/getAppUserAll")
+    public List<AppUser> getAppUserAll() {
+        return appUserService.list();
     }
 
     @PostMapping("/getBaseUserById")
@@ -421,52 +445,24 @@
 
 
 
-/*
 
     @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);
-        }
-
-        //最后下单时间
-        R<Order> lastOrder = remoteOrderGoodsClient.getLastOrder(id);
-        if (lastOrder.getData() != null) {
-            byId.setLastOrderTime(lastOrder.getData().getCreateTime());
-        }
-
         //消费总金额
-        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);
     }
-*/
 
 
 
@@ -527,7 +523,7 @@
     /**
      * 工作台-顶部
      */
-    @GetMapping("/homeStatistics/statistics")
+    @GetMapping("/statistics")
     @ApiOperation(value = "统计", tags = {"后台-工作台-顶部"})
     public R<UserStatistics> statistics() {
         QueryWrapper<AppUser> queryWrapper = new QueryWrapper<>();
@@ -543,11 +539,10 @@
         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();
@@ -569,19 +564,26 @@
         queryWrapper.eq("del_flag", 0);//未删除的
         queryWrapper.ne("status", 3);//未注销的
         if (userId != null) {
-            queryWrapper.eq("user_id", userId);
+            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((Long) result.get("total_points"));
+            userStatistics.setTotalScore(((BigDecimal) result.get("total_points")).longValue());
         }
-
-        //统计消费积分和现金支付数
-        Map<String, Object> data = orderClient.getConsumeScoreAndPayAmount(userId).getData();
-
+        //条件构造  消费积分现金支付金额
+        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 {
@@ -593,7 +595,6 @@
         }else {
             userStatistics.setShopAmount(new BigDecimal(data.get("payment_amounts").toString()));
         }
-
 
         return R.ok(userStatistics);
     }
@@ -635,7 +636,7 @@
      * @param file
      * @return
      */
-    @PostMapping("/upload")
+ /*   @PostMapping("/upload")
     public R upload(MultipartFile file){
         String s = null;
         try {
@@ -644,9 +645,77 @@
             throw new RuntimeException(e);
         }
         return R.ok(s);
+    }*/
+
+    private static final String FILE_DIRECTORY = "/var/files/ldf_files"; // Linux路径
+//    private static final String FILE_DIRECTORY = "E://ldf_files"; // Linux路径
+
+    @PostMapping("/upload")
+    public R handleFileUpload(@RequestParam("file") MultipartFile file) {
+        if (file.isEmpty()) {
+            return R.fail("请选择一个文件上传");
+        }
+        try {
+            // 1. 构建日期目录路径(格式:/年/月/日)
+            LocalDate today = LocalDate.now();
+            String datePath = String.format("/%d/%02d/%02d",
+                    today.getYear(), today.getMonthValue(), today.getDayOfMonth());
+
+            // 2. 完整目标目录路径
+            String fullDirPath = FILE_DIRECTORY + datePath;
+            File targetDir = new File(fullDirPath);
+
+            // 3. 自动创建目录(如果不存在)
+            if (!targetDir.exists()) {
+                targetDir.mkdirs(); // 递归创建所有父目录
+            }
+            String UUID= java.util.UUID.randomUUID().toString();
+            // 4. 保存文件
+            String filePath = fullDirPath + "/" +UUID+ file.getOriginalFilename();
+            File targetFile = new File(filePath);
+            file.transferTo(targetFile);
+            // 5. 返回可访问的URL(修正路径分隔符为Web格式)
+            return R.ok("http://zjrqxny.com/account/app-user/download" + datePath + "/" + UUID+file.getOriginalFilename());
+        } catch (IOException e) {
+            e.printStackTrace();
+            return R.fail("上传文件失败");
+        }
     }
-    
-    
+    @GetMapping("/download/{year}/{month}/{day}/{fileName:.+}")
+    @ResponseBody
+    public ResponseEntity<org.springframework.core.io.Resource> downloadFile( @PathVariable String year,
+                                                                              @PathVariable String month,
+                                                                              @PathVariable String day,
+                                                                              @PathVariable String fileName) {
+        System.out.println("下载文件名:"+fileName);
+        try {
+            // 1. 解码文件名
+            String decodedFileName = URLDecoder.decode(fileName, "UTF-8");
+
+
+            java.nio.file.Path filePath = java.nio.file.Paths.get(FILE_DIRECTORY, year, month, day, decodedFileName).normalize();
+            org.springframework.core.io.Resource resource = new org.springframework.core.io.UrlResource(filePath.toUri());
+            if (resource.exists() || resource.isReadable()) {
+                // 5. 设置下载头(兼容所有浏览器)
+                String contentDisposition = "attachment; filename=\"" + decodedFileName + "\"; " +
+                        "filename*=UTF-8''" + URLEncoder.encode(decodedFileName, "UTF-8").replace("+", "%20");
+
+                return ResponseEntity.ok()
+                        .contentType(MediaType.APPLICATION_OCTET_STREAM)
+                        .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
+                        .body(resource);
+
+            } else {
+                return ResponseEntity.notFound().build();
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return ResponseEntity.status(500).build();
+        }
+    }
+
+
+
 
     /**
      * 清空绑定门店的用户门店数据
@@ -660,5 +729,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