Jelajahi Sumber

feat: 车辆报告接口实现日期筛选

weijianghai 1 tahun lalu
induk
melakukan
785ae388f9

+ 1 - 1
src/main/java/com/nokia/financeapi/config/web/MyWebMvcConfigurer.java

@@ -16,7 +16,7 @@ public class MyWebMvcConfigurer implements WebMvcConfigurer {
         // 添加请求日志拦截
         registry.addInterceptor(new RequestLogHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/webjars/**", "/doc**", "/v3/**");
         // 添加token拦截
-        registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/house-car/**");
+//        registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/house-car/**");
     }
 
     /**

+ 44 - 2
src/main/java/com/nokia/financeapi/config/web/RequestLogHandlerInterceptor.java

@@ -1,6 +1,10 @@
 package com.nokia.financeapi.config.web;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.nokia.financeapi.common.R;
+import com.nokia.financeapi.utils.AESUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
 import org.springframework.lang.Nullable;
@@ -11,7 +15,9 @@ import org.springframework.web.servlet.HandlerInterceptor;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.nio.charset.Charset;
+import java.time.LocalDateTime;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
@@ -35,6 +41,7 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
         STOP_WATCH_THREAD_LOCAL.set(stopWatch);
         // 日志添加跟踪id
         MDC.put("traceId", UUID.randomUUID().toString().replace("-", ""));
+        LocalDateTime now = LocalDateTime.now();
         log.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
         // 请求头参数
         Map<String, String> headers = new HashMap<>();
@@ -55,8 +62,35 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
 //        }
 //        log.info("查询参数: {}", new ObjectMapper().writeValueAsString(parameters));
         // 请求体参数
-        String body = StreamUtils.copyToString(request.getInputStream(), Charset.forName(request.getCharacterEncoding()));
-        log.info("请求参数: {}", StringUtils.trimAllWhitespace(body));
+        String body = StringUtils.trimAllWhitespace(StreamUtils.copyToString(request.getInputStream(),
+                Charset.forName(request.getCharacterEncoding())));
+        log.info("请求参数: {}", body);
+        // todo: 记录日志
+        String token = request.getHeader("Token");
+        log.info("token: {}", token);
+        if (!StringUtils.hasText(token)) {
+            return forbidden(response);
+        }
+        if ("test_hebei".equals(token)) {
+            return true;
+        }
+        try {
+            String decodeToken = AESUtil.decrypt(token);
+            log.info("decodeToken: {}", decodeToken);
+            Gson gson = new Gson();
+            Map<String, String> map = gson.fromJson(decodeToken, new TypeToken<Map<String, String>>() {
+            }.getType());
+            if (!"FINANCE".equals(map.get("APP_ID")) || !StringUtils.hasText(map.get("LOGIN_ID"))) {
+                return forbidden(response);
+            }
+            map.put("api", request.getRequestURI());
+            map.put("body", body);
+            map.put("time", now.toString());
+            log.info("调用记录: {}", gson.toJson(map));
+        } catch (Exception e) {
+            log.warn("token解密失败: {}", token);
+            return forbidden(response);
+        }
         return true;
     }
 
@@ -74,4 +108,12 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
         log.info("耗时 {} ms", stopWatch.getTotalTimeMillis());
         STOP_WATCH_THREAD_LOCAL.remove();
     }
+
+    private boolean forbidden(HttpServletResponse response) throws IOException {
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        byte[] bytes = new Gson().toJson(R.error().code(403).message("没有权限访问")).getBytes();
+        response.getOutputStream().write(bytes);
+        return false;
+    }
 }

+ 57 - 56
src/main/java/com/nokia/financeapi/config/web/TokenInterceptor.java

@@ -1,56 +1,57 @@
-package com.nokia.financeapi.config.web;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.nokia.financeapi.common.R;
-import com.nokia.financeapi.utils.AESUtil;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.util.StringUtils;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * web登录拦截
- */
-@Slf4j
-@NoArgsConstructor
-public class TokenInterceptor implements HandlerInterceptor {
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        String token = request.getHeader("Token");
-        log.info("token: {}", token);
-        if (!StringUtils.hasText(token)) {
-            return forbidden(response);
-        }
-        if ("test_hebei".equals(token)) {
-            return true;
-        }
-        try {
-            String decodeToken = AESUtil.decrypt(token);
-            log.info("decodeToken: {}", decodeToken);
-            Gson gson = new Gson();
-            Map<String, String> map = gson.fromJson(decodeToken, new TypeToken<Map<String, String>>() {
-            }.getType());
-            if (!"FINANCE".equals(map.get("APP_ID")) || !StringUtils.hasText(map.get("LOGIN_ID"))) {
-                return forbidden(response);
-            }
-        } catch (Exception e) {
-            log.warn("token解密失败: {}", token);
-            return forbidden(response);
-        }
-        return true;
-    }
-
-    private boolean forbidden(HttpServletResponse response) throws IOException {
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("application/json; charset=utf-8");
-        byte[] bytes = new Gson().toJson(R.error().code(403).message("没有权限访问")).getBytes();
-        response.getOutputStream().write(bytes);
-        return false;
-    }
-}
+//package com.nokia.financeapi.config.web;
+//
+//import com.google.gson.Gson;
+//import com.google.gson.reflect.TypeToken;
+//import com.nokia.financeapi.common.R;
+//import com.nokia.financeapi.utils.AESUtil;
+//import lombok.NoArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.util.StringUtils;
+//import org.springframework.web.servlet.HandlerInterceptor;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.IOException;
+//import java.util.Map;
+//
+///**
+// * web登录拦截
+// */
+//@Slf4j
+//@NoArgsConstructor
+//public class TokenInterceptor implements HandlerInterceptor {
+//    @Override
+//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+//        // todo: 记录日志
+//        String token = request.getHeader("Token");
+//        log.info("token: {}", token);
+//        if (!StringUtils.hasText(token)) {
+//            return forbidden(response);
+//        }
+//        if ("test_hebei".equals(token)) {
+//            return true;
+//        }
+//        try {
+//            String decodeToken = AESUtil.decrypt(token);
+//            log.info("decodeToken: {}", decodeToken);
+//            Gson gson = new Gson();
+//            Map<String, String> map = gson.fromJson(decodeToken, new TypeToken<Map<String, String>>() {
+//            }.getType());
+//            if (!"FINANCE".equals(map.get("APP_ID")) || !StringUtils.hasText(map.get("LOGIN_ID"))) {
+//                return forbidden(response);
+//            }
+//        } catch (Exception e) {
+//            log.warn("token解密失败: {}", token);
+//            return forbidden(response);
+//        }
+//        return true;
+//    }
+//
+//    private boolean forbidden(HttpServletResponse response) throws IOException {
+//        response.setCharacterEncoding("UTF-8");
+//        response.setContentType("application/json; charset=utf-8");
+//        byte[] bytes = new Gson().toJson(R.error().code(403).message("没有权限访问")).getBytes();
+//        response.getOutputStream().write(bytes);
+//        return false;
+//    }
+//}

+ 42 - 0
src/main/java/com/nokia/financeapi/dao/house/CarReportDao.java

@@ -0,0 +1,42 @@
+package com.nokia.financeapi.dao.house;
+
+import com.nokia.financeapi.pojo.dto.GetCarReportDto;
+import com.nokia.financeapi.pojo.po.car.CarReportsPo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface CarReportDao {
+    /**
+     * 获取最新报告
+     */
+    @Select("""
+select
+    *
+from
+    car.car_reports
+where
+    year_month = (
+    select
+        max(year_month)
+    from
+        car.car_reports)
+    and file_type = #{dto.fileType}
+""")
+    CarReportsPo getLatest(@Param("dto") GetCarReportDto dto);
+
+    /**
+     * 根据年月获取报告
+     */
+    @Select("""
+select
+    *
+from
+    car.car_reports
+where
+    year_month = #{dto.endDate}
+    and file_type = #{dto.fileType}
+""")
+    CarReportsPo getByDate(@Param("dto") GetCarReportDto dto);
+}

+ 6 - 0
src/main/java/com/nokia/financeapi/pojo/dto/GetCarReportDto.java

@@ -1,5 +1,6 @@
 package com.nokia.financeapi.pojo.dto;
 
+import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -7,4 +8,9 @@ import lombok.Data;
 public class GetCarReportDto {
     @Schema(description = "账期", example = "202307")
     private Integer endDate;
+    /**
+     * 文件类型:pdf, word
+     */
+    @Hidden
+    private String fileType;
 }

+ 22 - 0
src/main/java/com/nokia/financeapi/pojo/po/car/CarReportsPo.java

@@ -0,0 +1,22 @@
+package com.nokia.financeapi.pojo.po.car;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class CarReportsPo {
+
+    /**
+     * 报告年月
+     */
+    private Integer yearMonth;
+    /**
+     * 文件类型
+     */
+    private String fileType;
+    /**
+     * 报告url
+     */
+    private String url;
+}

+ 30 - 9
src/main/java/com/nokia/financeapi/service/car/CarReportService.java

@@ -1,32 +1,53 @@
 package com.nokia.financeapi.service.car;
 
 import com.nokia.financeapi.common.R;
+import com.nokia.financeapi.dao.house.CarReportDao;
 import com.nokia.financeapi.pojo.dto.GetCarReportDto;
+import com.nokia.financeapi.pojo.po.car.CarReportsPo;
 import com.nokia.financeapi.pojo.vo.GetCarReportVo;
 import com.nokia.financeapi.service.common.file.FileService;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 @Service
 public class CarReportService {
     private final FileService fileService;
+    private final CarReportDao carReportDao;
 
-    public CarReportService(FileService fileService) {
+    public CarReportService(FileService fileService, CarReportDao carReportDao) {
         this.fileService = fileService;
+        this.carReportDao = carReportDao;
     }
 
     public R<GetCarReportVo> getReportWord(GetCarReportDto dto) {
-        GetCarReportVo vo = new GetCarReportVo();
-        String object = "oss/reports/car/202309.doc";
-        String url = fileService.getDownloadUrl(object);
-        vo.setUrl(url);
-        return R.ok(vo);
+        dto.setFileType("word");
+        return getReport(dto);
     }
 
     public R<GetCarReportVo> getReportPdf(GetCarReportDto dto) {
+        dto.setFileType("pdf");
+        return getReport(dto);
+    }
+
+    private R<GetCarReportVo> getReport(GetCarReportDto dto) {
         GetCarReportVo vo = new GetCarReportVo();
-        String object = "oss/reports/car/202309.pdf";
-        String url = fileService.getDownloadUrl(object);
-        vo.setUrl(url);
+        vo.setUrl("");
+        String object = null;
+        if (dto.getEndDate() == null) {
+            CarReportsPo po = carReportDao.getLatest(dto);
+            if (po != null) {
+                object = po.getUrl();
+            }
+        } else {
+            CarReportsPo po = carReportDao.getByDate(dto);
+            if (po != null) {
+                object = po.getUrl();
+            }
+        }
+        if (StringUtils.hasText(object)) {
+            String url = fileService.getDownloadUrl(object);
+            vo.setUrl(url);
+        }
         return R.ok(vo);
     }
 }

+ 3 - 3
src/main/java/com/nokia/financeapi/service/house/HouseReportService.java

@@ -21,15 +21,15 @@ public class HouseReportService {
 
     public R<GetHouseReportVo> getReportWord(GetHouseReportDto dto) {
         dto.setFileType("word");
-        return getGetHouseReport(dto);
+        return getReport(dto);
     }
 
     public R<GetHouseReportVo> getReportPdf(GetHouseReportDto dto) {
         dto.setFileType("pdf");
-        return getGetHouseReport(dto);
+        return getReport(dto);
     }
 
-    private R<GetHouseReportVo> getGetHouseReport(GetHouseReportDto dto) {
+    private R<GetHouseReportVo> getReport(GetHouseReportDto dto) {
         GetHouseReportVo vo = new GetHouseReportVo();
         vo.setUrl("");
         String object = null;