Browse Source

feat: 实现黑名单查询接口,修改一键解黑接口逻辑,在解黑之前先查询,允许解黑才发送解黑命令

weijianghai 2 years ago
parent
commit
5009e1484b

+ 14 - 1
sms_blk_api/pom.xml

@@ -22,6 +22,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
@@ -32,10 +36,19 @@
             <artifactId>lombok</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>42.4.1</version>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>de.siegmar</groupId>

+ 24 - 0
sms_blk_api/src/main/java/com/nokia/sms/config/ControllerExceptionHandler.java

@@ -0,0 +1,24 @@
+package com.nokia.sms.config;
+
+import com.nokia.common.http.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 请求异常处理
+ */
+@Slf4j
+@RestControllerAdvice
+public class ControllerExceptionHandler
+{
+    @SuppressWarnings("rawtypes")
+    @ExceptionHandler({Exception.class})
+    public ResponseEntity exceptionHandler(Exception e)
+    {
+        log.error("╭( ′• o •′ )╭☞ 发生错误了 {}", e.getMessage(), e);
+        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(R.error());
+    }
+}

+ 73 - 0
sms_blk_api/src/main/java/com/nokia/sms/config/LogAspectConfig.java

@@ -0,0 +1,73 @@
+package com.nokia.sms.config;
+
+import com.alibaba.fastjson2.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StopWatch;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 日志切面
+ */
+@Aspect
+@Component
+@Slf4j
+public class LogAspectConfig
+{
+    @Pointcut("execution(public * com.nokia..*Controller.*(..))")
+    public void controllerPointcut()
+    {
+        // Pointcut
+    }
+
+    @Before("controllerPointcut()")
+    public void doBefore(JoinPoint joinPoint)
+    {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes == null)
+        {
+            return;
+        }
+        HttpServletRequest request = attributes.getRequest();
+        log.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
+        Object[] args = joinPoint.getArgs();
+        Object[] arguments = new Object[args.length];
+        for (int i = 0; i < args.length; i++)
+        {
+            if (args[i] instanceof ServletRequest
+                    || args[i] instanceof ServletResponse
+                    || args[i] instanceof MultipartFile
+                    || args[i] instanceof Exception
+            )
+            {
+                continue;
+            }
+            arguments[i] = args[i];
+        }
+        log.info("入参: {}", JSON.toJSONString(arguments));
+    }
+
+    @Around("controllerPointcut()")
+    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable
+    {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
+        Object result = proceedingJoinPoint.proceed();
+        log.info("返回: {}", JSON.toJSONString(result));
+        stopWatch.stop();
+        log.info("耗时:{} ms", stopWatch.getTotalTimeMillis());
+        return result;
+    }
+}

+ 17 - 19
sms_blk_api/src/main/java/com/nokia/sms/controller/BlkController.java

@@ -1,16 +1,19 @@
 package com.nokia.sms.controller;
 
 import com.nokia.common.http.R;
+import com.nokia.sms.service.QueryService;
 import com.nokia.sms.service.SocketClientService;
 import com.nokia.sms.vo.DelBlkResp;
-import com.nokia.sms.vo.QueryResp;
 import com.nokia.sms.vo.RequestParams;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * 黑名单查询及解除接口类
  */
@@ -19,9 +22,11 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/sms/blacklist/api/")
 public class BlkController {
     private final SocketClientService socketClientService;
+    private final QueryService queryService;
 
-    public BlkController(SocketClientService socketClientService) {
+    public BlkController(SocketClientService socketClientService, QueryService queryService) {
         this.socketClientService = socketClientService;
+        this.queryService = queryService;
     }
 
     /**
@@ -29,9 +34,16 @@ public class BlkController {
      */
     @PostMapping("remove")
     public R remove(@RequestBody RequestParams params) {
-        // 尝试解除黑名单
-        log.debug("入参 -- {} ", params);
         DelBlkResp delBlkResp = new DelBlkResp();
+        // 查询黑名单
+        Map<String, Object> current = queryService.getBlackListInfo(params.getPhone());
+        // 不可以解黑
+        if (!CollectionUtils.isEmpty(current) && !current.get("suggestion").equals(1)) {
+            delBlkResp.setDelBlkSuccess(false);
+            delBlkResp.setDelBlkMessage("解除黑名单失败");
+            return R.ok().data(delBlkResp);
+        }
+        // 尝试解除黑名单
         // TODO 此处测试环境和正式环境不同,待测试环境下的server部署后,可以修改测试环境的配置文件,即可考虑测试环境和正式环境部署相同的jar包
         if (socketClientService.delBlk(params.getPhone())) {
             // if (params.getPhone().equals("13231899751")) {
@@ -41,7 +53,6 @@ public class BlkController {
             delBlkResp.setDelBlkSuccess(false);
             delBlkResp.setDelBlkMessage("解除黑名单失败");
         }
-        log.debug("返回 -- {}", delBlkResp);
         return R.ok().data(delBlkResp);
     }
 
@@ -50,19 +61,6 @@ public class BlkController {
      */
     @PostMapping("query")
     public R query(@RequestBody RequestParams params) {
-        log.debug("入参 -- {} ", params);
-        QueryResp r = new QueryResp();
-        r.setQuerySuccess(true);
-        r.setQueryMessage("成功");
-        QueryResp.QueryResultDTO dto = new QueryResp.QueryResultDTO();
-        dto.setReason("手动加黑");
-        dto.setStartTime("20220807012233");
-        dto.setEndTime("20220807012233");
-        dto.setSmsData("这是一条推销短信");
-        dto.setDescribe("推销");
-        dto.setAllowToDel(true);
-        r.setQueryResult(dto);
-        log.debug("返回 -- {}", r);
-        return R.ok().data(r);
+        return queryService.query(params);
     }
 }

+ 59 - 0
sms_blk_api/src/main/java/com/nokia/sms/service/QueryService.java

@@ -1,8 +1,67 @@
 package com.nokia.sms.service;
 
+import com.nokia.common.http.R;
+import com.nokia.sms.vo.QueryResp;
+import com.nokia.sms.vo.RequestParams;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import java.util.Collections;
+import java.util.Map;
+
+@Slf4j
 @Service
 public class QueryService {
+    private final JdbcTemplate jdbcTemplate;
+
+    public QueryService(JdbcTemplate jdbcTemplate) {
+        this.jdbcTemplate = jdbcTemplate;
+    }
+
+    public R query(RequestParams params) {
+        Map<String, Object> current = getBlackListInfo(params.getPhone());
+        QueryResp r = new QueryResp();
+        r.setQuerySuccess(false);
+        String sql = "select 1 from sms_blk.blacklist_file where phone = ? limit 1";
+        try {
+            jdbcTemplate.queryForMap(sql, params.getPhone());
+        } catch (EmptyResultDataAccessException e) {
+            r.setQueryMessage("无加黑记录");
+            return R.ok().data(r);
+        }
+
+        if (CollectionUtils.isEmpty(current)) {
+            r.setQueryMessage("曾在黑名单,已解黑");
+            return R.ok().data(r);
+        }
+
+        QueryResp.QueryResultDTO dto = new QueryResp.QueryResultDTO();
+        dto.setReason(current.get("reason").toString());
+        dto.setStartTime((String) current.get("start_time"));
+        dto.setEndTime((String) current.get("end_time"));
+        dto.setDescribe((String) current.get("hit_desc"));
+        dto.setAllowToDel(current.get("suggestion").equals(1));
+        r.setQuerySuccess(true);
+        r.setQueryMessage("当前在黑名单");
+        r.setQueryResult(dto);
+        return R.ok().data(r);
+    }
 
+    /**
+     * 得到黑名单信息
+     *
+     * @param phone 电话
+     * @return {@link Map}<{@link String}, {@link Object}>
+     */
+    public Map<String, Object> getBlackListInfo(String phone) {
+        String sql = "select * from sms_blk.blacklist where phone = ?";
+        try {
+            return jdbcTemplate.queryForMap(sql, phone);
+        } catch (EmptyResultDataAccessException e) {
+            return Collections.emptyMap();
+        }
+    }
 }

+ 0 - 1
sms_blk_api/src/main/java/com/nokia/sms/vo/QueryResp.java

@@ -16,7 +16,6 @@ public class QueryResp {
         private String reason;
         private String startTime;
         private String endTime;
-        private String smsData;
         private String describe;
         private Boolean allowToDel;
     }

+ 4 - 0
sms_blk_api/src/main/resources/application.properties

@@ -1,3 +1,7 @@
 server.port=12120
 
 logging.level.com.nokia=debug
+spring.datasource.url=jdbc:postgresql://192.168.50.4:5432/sqmmt
+spring.datasource.username=do
+spring.datasource.password=Richr00t
+spring.datasource.driverClassName=org.postgresql.Driver

+ 29 - 0
sms_blk_api/src/test/java/com/nokia/sms/ApiTest.java

@@ -0,0 +1,29 @@
+package com.nokia.sms;
+
+import com.nokia.sms.service.QueryService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+@Slf4j
+@SpringBootTest
+class ApiTest {
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    @Autowired
+    private QueryService queryService;
+
+    @Test
+    void test() {
+        String phone = "18631393293";
+        String sql = "select 1 from sms_blk.blacklist_file where phone = ? limit 1";
+        try {
+            jdbcTemplate.queryForMap(sql, phone);
+        } catch (EmptyResultDataAccessException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 6 - 1
sms_blk_interface/src/test/java/com/nokia/sms/SyncTest.java

@@ -29,9 +29,14 @@ class SyncTest {
     @Test
     void test() {}
 
+    /**
+     * 测试导入数据
+     */
     @Test
     void testImport() {
-        try(Stream<Path> stream = Files.list(Paths.get("z:/5k"))) {
+        String path = "z:/data";
+        // 读取目标文件夹下的文件
+        try(Stream<Path> stream = Files.list(Paths.get(path))) {
             List<Path> pathList = stream.collect(Collectors.toList());
             log.info("pathList: {}", pathList);
             for (Path t : pathList) {