1
0
Переглянути джерело

Merge branch 'feature/Eid' of lvjian/wxbase into feature/Eid

开发E证通业务
吕健 2 роки тому
батько
коміт
a7014276b2

+ 9 - 0
build.gradle

@@ -91,6 +91,10 @@ repositories {
 }
 
 dependencies {
+    //implementation 'org.projectlombok:lombok:1.18.10'
+    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
+    annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
+    implementation 'com.tencentcloudapi:tencentcloud-sdk-java:3.1.695'
     implementation 'org.springframework.boot:spring-boot-starter-web:2.4.5'
     implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
     implementation 'org.springframework.boot:spring-boot-starter-logging:2.4.5'
@@ -117,3 +121,8 @@ tasks.withType(JavaCompile) {
     options.encoding = 'UTF-8'
     options.compilerArgs << "-Xlint:unchecked"
 }
+
+/* gradle test 编译器 */
+test {
+    useJUnitPlatform()
+}

+ 1 - 1
src/main/java/com/ematou/wxbase/aop/LogAspect.java

@@ -40,7 +40,7 @@ public class LogAspect {
             proceed = joinPoint.proceed();
             logger.info("----------------方法: " + targetMethodName + "执行的返回值为: " + proceed + "----------------");
         } catch (Throwable throwable) {
-            logger.error("----------------方法: " + targetMethodName + "执行出现异常,错误信息为:" + throwable.getMessage() + "----------------");
+            logger.error("----------------方法: " + targetMethodName + "执行出现异常,错误信息为:" + throwable.getMessage() + "----------------", throwable);
         }
         return proceed;
     }

+ 32 - 0
src/main/java/com/ematou/wxbase/controller/EidTokenRecordController.java

@@ -0,0 +1,32 @@
+package com.ematou.wxbase.controller;
+
+import com.ematou.wxbase.common.web.R;
+import com.ematou.wxbase.service.EidTokenRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * E证通 token 记录控制器
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 17:40
+ */
+@RestController
+@RequestMapping("/eid")
+public class EidTokenRecordController {
+
+    @Autowired
+    private EidTokenRecordService tokenRecordService;
+
+    @GetMapping("/{merchSn}")
+    public R getToken(@PathVariable String merchSn) {
+        String token = tokenRecordService.getEidToken(merchSn);
+        return new R<String>().success(token);
+    }
+
+}
+

+ 27 - 0
src/main/java/com/ematou/wxbase/entity/EidTokenRecord.java

@@ -0,0 +1,27 @@
+package com.ematou.wxbase.entity;
+
+import lombok.Data;
+import org.apache.tomcat.jni.Local;
+
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * E证通 token 记录
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 16:20
+ */
+@Data
+public class EidTokenRecord {
+
+    private String id;// 主键
+    private String merchSn;// 商户编号
+    private String token;// token
+    private LocalDateTime generationTime;// 生成时间
+    private LocalDateTime expireTime;// 过期时间
+    private Timestamp tstm;// 时间戳
+
+}

+ 25 - 0
src/main/java/com/ematou/wxbase/entity/MerchInfo.java

@@ -0,0 +1,25 @@
+package com.ematou.wxbase.entity;
+
+import lombok.Data;
+
+/**
+ * 商户信息
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 16:24
+ */
+@Data
+public class MerchInfo {
+
+    private String merchSn;// 商户编号
+    private String merchName;// 商户名称
+    private String appId;// appId
+    private String secretId;// secretId
+    private String secretKey;// secretKey
+    private String privateKey;// 私钥
+    private String publicKey;// 公钥
+    private String tokenExpired;// token 过期时间
+
+
+}

+ 12 - 69
src/main/java/com/ematou/wxbase/entity/OperationRecord.java

@@ -1,5 +1,7 @@
 package com.ematou.wxbase.entity;
 
+import lombok.Data;
+
 import java.sql.Timestamp;
 
 /**
@@ -7,77 +9,18 @@ import java.sql.Timestamp;
  * @version 1.0
  * 2021-04-30 11:35
  */
+@Data
 public class OperationRecord {
 
-    private Integer opId;
-
-    private String appCode;
-
-    private String createrSn;
-
-    private String createTime;
-
-    private String moderSn;
-
-    private String modTime;
-
-    private Timestamp tstm;
-
-    public Integer getOpId() {
-        return opId;
-    }
-
-    public void setOpId(Integer opId) {
-        this.opId = opId;
-    }
-
-    public String getAppCode() {
-        return appCode;
-    }
-
-    public void setAppCode(String appCode) {
-        this.appCode = appCode;
-    }
-
-    public String getCreaterSn() {
-        return createrSn;
-    }
-
-    public void setCreaterSn(String createrSn) {
-        this.createrSn = createrSn;
-    }
-
-    public String getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(String createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getModerSn() {
-        return moderSn;
-    }
-
-    public void setModerSn(String moderSn) {
-        this.moderSn = moderSn;
-    }
-
-    public String getModTime() {
-        return modTime;
-    }
-
-    public void setModTime(String modTime) {
-        this.modTime = modTime;
-    }
-
-    public Timestamp getTstm() {
-        return tstm;
-    }
-
-    public void setTstm(Timestamp tstm) {
-        this.tstm = tstm;
-    }
+    private Integer opId;// 主键
+    private String appCode;// 应用编码
+    private String merchSn;// 商户号
+    private String tokenType;// token 类型, 0:微信 token,1:E证通 token
+    private String createrSn;// 创建人编号
+    private String createTime;// 创建时间
+    private String moderSn;// 修改人编号
+    private String modTime;// 修改时间
+    private Timestamp tstm;// 时间戳
 
     @Override
     public String toString() {

+ 24 - 0
src/main/java/com/ematou/wxbase/mapper/EidTokenRecordMapper.java

@@ -0,0 +1,24 @@
+package com.ematou.wxbase.mapper;
+
+import com.ematou.wxbase.entity.EidTokenRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * E证通 token 记录 Mapper
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 16:33
+ */
+@Mapper
+public interface EidTokenRecordMapper {
+
+    /**
+     * 插入E证通 token 记录表
+     * @param record
+     * @return
+     */
+    int insert(EidTokenRecord record);
+
+}

+ 2 - 2
src/main/java/com/ematou/wxbase/scheduler/RefreshAccessTokenScheduler.java

@@ -33,7 +33,7 @@ public class RefreshAccessTokenScheduler {
     /**
      * 定时器刷新token
      */
-    @Scheduled(cron = "0 0 0/2 * * ?", zone = "Asia/Shanghai")
+    //@Scheduled(cron = "0 0 0/2 * * ?", zone = "Asia/Shanghai")
     public void refreshAccessToken() {
         try {
             logger.info("定时器开始刷新Token...");
@@ -46,7 +46,7 @@ public class RefreshAccessTokenScheduler {
     /**
      * 扫描数据库中失效的token,修改其状态(is_valid)为1
      */
-    @Scheduled(cron = "0 3 0/2 * * ?", zone = "Asia/Shanghai")
+   // @Scheduled(cron = "0 3 0/2 * * ?", zone = "Asia/Shanghai")
     public void scanExpiryToken() {
         logger.info("开始扫描库中中失效的token记录......");
         int count = tokenRecordService.queryLatestAndValidRecordCount();

+ 22 - 0
src/main/java/com/ematou/wxbase/service/EidTokenRecordService.java

@@ -0,0 +1,22 @@
+package com.ematou.wxbase.service;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * E证通 token service
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 15:28
+ */
+public interface EidTokenRecordService {
+
+    /**
+     * 获取E证通 token
+     *
+     * @param merchSn 商户号
+     * @return
+     */
+    String getEidToken(String merchSn);
+
+}

+ 53 - 0
src/main/java/com/ematou/wxbase/service/impl/EidTokenRecordServiceImpl.java

@@ -0,0 +1,53 @@
+package com.ematou.wxbase.service.impl;
+
+import com.ematou.wxbase.entity.EidTokenRecord;
+import com.ematou.wxbase.mapper.EidTokenRecordMapper;
+import com.ematou.wxbase.service.EidTokenRecordService;
+import com.ematou.wxbase.service.TokenRecordService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.UUID;
+
+/**
+ * E证通 token 实现类
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 15:30
+ */
+@Service
+public class EidTokenRecordServiceImpl implements EidTokenRecordService {
+
+    private static final Logger log = LoggerFactory.getLogger(EidTokenRecordServiceImpl.class);
+
+    @Resource
+    private EidTokenRecordMapper eidTokenRecordMapper;
+
+    @Override
+    public String getEidToken(String merchSn) {
+
+        String token = UUID.randomUUID().toString().replace("-", "");
+        insertRecord(merchSn, token);
+
+        return token;
+    }
+
+    private void insertRecord(String merchSn, String token) {
+        LocalDateTime localDateTime = LocalDateTime.now();
+        EidTokenRecord record = new EidTokenRecord();
+        record.setToken(token);
+        record.setMerchSn(merchSn);
+        record.setGenerationTime(localDateTime);
+        record.setExpireTime(localDateTime.plusMinutes(1));
+
+        int insert = eidTokenRecordMapper.insert(record);
+        log.debug("插入是否成功 => {}", insert);
+    }
+
+
+}

+ 3 - 3
src/main/resources/application.yml

@@ -10,9 +10,9 @@ wx:
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    username: tuser
-    password: Qq!123
-    url: jdbc:mysql://120.76.84.45:3306/wx_base?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: wx_base
+    password: goZ7ooGmxV
+    url: jdbc:mysql://out-rm-wz92efl25x02n44xego.mysql.rds.aliyuncs.com:3306/wx_base?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
 mybatis:
   mapper-locations: classpath:mybatis/*.xml
   configuration:

+ 21 - 0
src/main/resources/mybatis/EidTokenRecordMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ematou.wxbase.mapper.EidTokenRecordMapper">
+
+    <!-- 插入E证通 token 记录表 -->
+    <insert id="insert">
+        INSERT INTO eid_token_record ( merch_sn, token, generation_time, expire_time )
+        VALUES
+            (
+                #{merchSn},
+                #{token},
+                #{generationTime},
+                #{expireTime}
+            )
+    </insert>
+
+</mapper>
+
+

+ 26 - 0
src/test/java/com/ematou/wxbase/EidTokenRecordServiceTest.java

@@ -0,0 +1,26 @@
+package com.ematou.wxbase;
+
+import com.ematou.wxbase.service.EidTokenRecordService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * E证通 token 记录 service 测试类
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 17:02
+ */
+@SpringBootTest
+public class EidTokenRecordServiceTest {
+
+    @Autowired
+    private EidTokenRecordService service;
+
+    @Test
+    public void testGetToken() {
+        System.out.println(service.getEidToken("mrch123456") + " =========");
+    }
+
+}

+ 58 - 0
src/test/java/com/ematou/wxbase/EidTokenTest.java

@@ -0,0 +1,58 @@
+package com.ematou.wxbase;
+
+import com.ematou.wxbase.service.EidTokenRecordService;
+import com.ematou.wxbase.service.TokenRecordService;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.faceid.v20180301.FaceidClient;
+import com.tencentcloudapi.faceid.v20180301.models.GetEidTokenRequest;
+import com.tencentcloudapi.faceid.v20180301.models.GetEidTokenResponse;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * E证通 token 单元测试
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/2/16 15:22
+ */
+@SpringBootTest
+public class EidTokenTest {
+
+    private static final Logger logger = LoggerFactory.getLogger(TokenRecordService.class);
+
+    private final static String secretId = "AKIDIRYotrdCZnqkT0LTVzJSQFrGmLoALLJA";
+    private final static String secretKey = "jICxWrJchWBg8RYO2RZYLwMXh0bR6imd";
+
+    @Test
+    public void getEidToken() {
+        try {
+            // 创建访问凭据
+            Credential cred = new Credential(secretId, secretKey);
+            // 实例化一个http选项,可选的,没有特殊需求可以跳过
+            HttpProfile httpProfile = new HttpProfile();
+            httpProfile.setEndpoint("faceid.tencentcloudapi.com");
+            // 实例化一个client选项,可选的,没有特殊需求可以跳过
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setHttpProfile(httpProfile);
+            // 实例化要请求产品的client对象,clientProfile是可选的
+            FaceidClient client = new FaceidClient(cred, "", clientProfile);
+            // 实例化一个请求对象,每个接口都会对应一个request对象
+            GetEidTokenRequest req = new GetEidTokenRequest();
+
+            // 返回的resp是一个GetEidTokenResponse的实例,与请求对象对应
+            GetEidTokenResponse resp = client.GetEidToken(req);
+            // 输出json格式的字符串回包
+            System.out.println(GetEidTokenResponse.toJsonString(resp));
+        } catch (TencentCloudSDKException e) {
+            logger.error("腾讯云 SDK Error", e);
+        }
+    }
+
+}