Browse Source

账户消费充值记录导出

Bob 2 years ago
parent
commit
f0ca6bbb7a

+ 8 - 0
background-user/src/main/java/cn/kdan/compdf/controller/v1/BackgroundUserBalanceController.java

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -48,6 +49,13 @@ public class BackgroundUserBalanceController {
         return R.ok(balanceRecordList);
     }
 
+    /**
+     * 账户消费充值记录导出
+     */
+    @GetMapping("/exportBalanceRecordList")
+    public void exportBalanceRecordList(HttpServletResponse response) {
+        backgroundUserBalanceService.exportBalanceRecordList(TokenUtil.getRequestHeader().getId(), response);
+    }
 
 
     /**

+ 8 - 0
background-user/src/main/java/cn/kdan/compdf/service/BackgroundUserBalanceService.java

@@ -7,6 +7,7 @@ import cn.kdan.compdf.vo.BackgroundUserPackageBalanceVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -37,6 +38,13 @@ public interface BackgroundUserBalanceService extends IService<BackgroundUserBal
      */
     IPage<BackgroundUserBalanceVO> getBalanceRecordList(Long userId, Integer page, Integer size);
 
+    /**
+     * 账户消费充值记录导出
+     * @param userId 用户id
+     * @param response response
+     */
+    void exportBalanceRecordList(Long userId, HttpServletResponse response);
+
     /**
      * plan 消费记录数据同步 一天一次
      */

+ 66 - 0
background-user/src/main/java/cn/kdan/compdf/service/impl/BackgroundUserBalanceServiceImpl.java

@@ -2,6 +2,8 @@ package cn.kdan.compdf.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.kdan.compdf.config.ExcelWidthStyleStrategy;
 import cn.kdan.compdf.dto.PlanStatisticsDTO;
 import cn.kdan.compdf.entity.BackgroundUserBalance;
 import cn.kdan.compdf.mapper.BackgroundUserBalanceMapper;
@@ -9,20 +11,29 @@ import cn.kdan.compdf.service.BackgroundUserBalanceService;
 import cn.kdan.compdf.service.BackgroundUserService;
 import cn.kdan.compdf.vo.BackgroundUserBalanceVO;
 import cn.kdan.compdf.vo.BackgroundUserPackageBalanceVO;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.MapUtils;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
 import org.assertj.core.util.Lists;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -111,6 +122,61 @@ public class BackgroundUserBalanceServiceImpl extends ServiceImpl<BackgroundUser
         return backgroundUserBalanceVOPage;
     }
 
+    /**
+     * 账户消费充值记录导出
+     * @param userId 用户id
+     * @param response response
+     */
+    @Override
+    public void exportBalanceRecordList(Long userId, HttpServletResponse response) {
+        LambdaQueryWrapper<BackgroundUserBalance> eq = new LambdaQueryWrapper<BackgroundUserBalance>()
+                .eq(BackgroundUserBalance::getUserId, userId)
+                .orderByDesc(BackgroundUserBalance::getCreateDate);
+        List<BackgroundUserBalance> backgroundUserBalanceList = this.baseMapper.selectList(eq);
+        // 处理返回数据
+        List<BackgroundUserBalanceVO> backgroundUserBalanceVOList = new ArrayList<>();
+        if (CollectionUtil.isNotEmpty(backgroundUserBalanceList)) {
+            backgroundUserBalanceList.forEach(c -> {
+                BackgroundUserBalanceVO backgroundUserBalanceVO = new BackgroundUserBalanceVO();
+                BeanUtil.copyProperties(c, backgroundUserBalanceVO);
+                if (c.getChangeType() == 1) {
+                    backgroundUserBalanceVO.setBalanceChange("+" + c.getBalanceChange());
+                } else {
+                    backgroundUserBalanceVO.setBalanceChange("-" + c.getBalanceChange());
+                }
+                backgroundUserBalanceVOList.add(backgroundUserBalanceVO);
+            });
+        }
+
+        // 写入响应导出
+        try {
+            String fileName = URLEncoder.encode("Processing Files Balance (" + DateUtil.date().toString().replaceAll(":", "-") + ")", "UTF-8").replaceAll("\\+", "%20");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+            EasyExcel.write(response.getOutputStream(), BackgroundUserBalanceVO.class)
+                    .registerWriteHandler(new ExcelWidthStyleStrategy())
+                    .autoCloseStream(Boolean.FALSE)
+                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                    .sheet("Processing Files Balance")
+                    .doWrite(backgroundUserBalanceVOList);
+
+        } catch (Exception e) {
+            // 重置response
+            response.reset();
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            Map<String, String> map = MapUtils.newHashMap();
+            map.put("status", "failure");
+            map.put("message", "下载文件失败" + e.getMessage());
+            try {
+                response.getWriter().println(JSON.toJSONString(map));
+            } catch (IOException ioException) {
+                ioException.printStackTrace();
+            }
+        }
+    }
+
     @Override
     public void planSync(List<PlanStatisticsDTO> list) {
         assert list != null : "Dashboard同步数据为空";

+ 7 - 0
background-user/src/main/java/cn/kdan/compdf/vo/BackgroundUserBalanceVO.java

@@ -1,5 +1,7 @@
 package cn.kdan.compdf.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
 import java.util.Date;
@@ -13,22 +15,27 @@ public class BackgroundUserBalanceVO {
     /**
      * 日期
      */
+    @ExcelProperty(value = "Date", index = 0)
     private Date date;
     /**
      * 充值/消费具体类型描述
      */
+    @ExcelProperty(value = "Description", index = 1)
     private String description;
     /**
      * 文件数量变动额度
      */
+    @ExcelProperty(value = "Balance change", index = 2)
     private String balanceChange;
     /**
      * 文件数量余额
      */
+    @ExcelProperty(value = "Remaing files", index = 3)
     private Integer remainingFiles;
     /**
      * 过期时间
      */
+    @ExcelIgnore
     private Date expiredDate;
 
 }