liuchang 4 роки тому
коміт
b53ab5c2a8
32 змінених файлів з 1190 додано та 0 видалено
  1. 37 0
      minsheng-card/pom.xml
  2. 15 0
      minsheng-card/src/main/java/card/CardApplication.java
  3. 20 0
      minsheng-card/src/main/java/card/config/ProviderNameConfig.java
  4. 22 0
      minsheng-card/src/main/java/card/config/ProviderNameConfigChangeListener.java
  5. 76 0
      minsheng-card/src/main/java/card/controller/CardController.java
  6. 14 0
      minsheng-card/src/main/resources/application.yml
  7. 5 0
      minsheng-card/src/main/resources/bootstrap.yml
  8. 31 0
      minsheng-common/pom.xml
  9. 86 0
      minsheng-common/src/main/java/com/tsf/common/BaseConstant.java
  10. 30 0
      minsheng-common/src/main/java/com/tsf/common/ErrorResultCode.java
  11. 13 0
      minsheng-common/src/main/java/com/tsf/common/IErrorCode.java
  12. 42 0
      minsheng-common/src/main/java/com/tsf/common/IResultCode.java
  13. 21 0
      minsheng-common/src/main/java/com/tsf/common/ObjectUtil.java
  14. 212 0
      minsheng-common/src/main/java/com/tsf/common/R.java
  15. 113 0
      minsheng-common/src/main/java/com/tsf/common/ResultCode.java
  16. 25 0
      minsheng-log/pom.xml
  17. 15 0
      minsheng-log/src/main/java/log/LogApplication.java
  18. 20 0
      minsheng-log/src/main/java/log/config/ProviderNameConfig.java
  19. 22 0
      minsheng-log/src/main/java/log/config/ProviderNameConfigChangeListener.java
  20. 4 0
      minsheng-log/src/main/resources/application.yml
  21. 5 0
      minsheng-log/src/main/resources/bootstrap.yml
  22. 26 0
      minsheng-user/pom.xml
  23. 15 0
      minsheng-user/src/main/java/com/tsf/user/UserApplication.java
  24. 20 0
      minsheng-user/src/main/java/com/tsf/user/config/ProviderNameConfig.java
  25. 22 0
      minsheng-user/src/main/java/com/tsf/user/config/ProviderNameConfigChangeListener.java
  26. 22 0
      minsheng-user/src/main/java/com/tsf/user/controller/MpUserController.java
  27. 15 0
      minsheng-user/src/main/java/com/tsf/user/controller/MpUserIdentificationController.java
  28. 13 0
      minsheng-user/src/main/java/com/tsf/user/controller/MpUserTokenController.java
  29. 173 0
      minsheng-user/src/main/java/com/tsf/user/controller/TenController.java
  30. 14 0
      minsheng-user/src/main/resources/application.yml
  31. 5 0
      minsheng-user/src/main/resources/bootstrap.yml
  32. 37 0
      pom.xml

+ 37 - 0
minsheng-card/pom.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>tsf-minsheng</artifactId>
+        <groupId>com.tsf</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>minsheng-card</artifactId>
+
+    <!-- TSF 启动器 -->
+    <dependencies>
+        <dependency>
+            <groupId>com.tencent.tsf</groupId>
+            <artifactId>spring-cloud-tsf-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.tsf</groupId>
+            <artifactId>minsheng-common</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.69_sec11</version>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>

+ 15 - 0
minsheng-card/src/main/java/card/CardApplication.java

@@ -0,0 +1,15 @@
+package card;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.tsf.annotation.EnableTsf;
+
+@SpringBootApplication
+@EnableFeignClients // 使用Feign微服务调用时请启用
+@EnableTsf
+public class CardApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(CardApplication.class, args);
+    }
+}

+ 20 - 0
minsheng-card/src/main/java/card/config/ProviderNameConfig.java

@@ -0,0 +1,20 @@
+package card.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+@Component
+@RefreshScope
+@ConfigurationProperties(prefix = "provider.config")
+public class ProviderNameConfig {
+	private String name = "echo-provider-default-name";
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

+ 22 - 0
minsheng-card/src/main/java/card/config/ProviderNameConfigChangeListener.java

@@ -0,0 +1,22 @@
+package card.config;
+
+import com.tencent.tsf.consul.config.watch.ConfigChangeCallback;
+import com.tencent.tsf.consul.config.watch.ConfigChangeListener;
+import com.tencent.tsf.consul.config.watch.ConfigProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigChangeListener(prefix = "provider.config", value = { "name" })
+public class ProviderNameConfigChangeListener implements ConfigChangeCallback {
+
+    private static final Logger log = LoggerFactory.getLogger(ProviderNameConfigChangeListener.class);
+
+    @Override
+    public void callback(ConfigProperty lastConfigProperty, ConfigProperty newConfigProperty) {
+        log.info("[TSF SDK] Configuration Change Listener: key: {}, old value: {}, new value: {}",
+                lastConfigProperty.getKey(), lastConfigProperty.getValue(), newConfigProperty.getValue());
+    }
+
+}

+ 76 - 0
minsheng-card/src/main/java/card/controller/CardController.java

@@ -0,0 +1,76 @@
+package card.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.LinkedHashMap;
+
+@RestController
+@CrossOrigin
+@Api(value = "卡中心", tags = "卡中心token")
+public class CardController {
+    @Value("${card.authen.tokenUrl}")
+    private String tokenUrl;
+    @Value("${card.authen.username}")
+    private String username;
+    @Value("${card.authen.password}")
+    private String password;
+
+    @ApiOperation(value = "获取卡中心token", notes = "获取卡中心token")
+    @GetMapping(value = "/card/fetchCardToken")
+    public String fetchCardToken() {
+        String httpUrl = tokenUrl;
+        RestTemplate client = new RestTemplate();
+        HttpHeaders headers = new HttpHeaders();
+        headers.setBasicAuth(username, password);
+        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
+        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity(headers);
+        ResponseEntity<Object> exchange = null;
+        exchange = client.exchange(httpUrl, HttpMethod.POST, requestEntity, Object.class);
+        System.out.println(JSON.toJSONString(exchange.getBody()));
+        LinkedHashMap linkedHashMap = (LinkedHashMap) exchange.getBody();
+        String accessToken = (String) ((LinkedHashMap) linkedHashMap.get("map")).get("Access-Token");
+        return accessToken;
+    }
+
+    public static void main(String[] args) {
+        String httpUrl = "http://61.48.80.80:8088/zuul/api/auth/client/login";
+        RestTemplate client = new RestTemplate();
+        HttpHeaders headers = new HttpHeaders();
+        headers.setBasicAuth("test_sy", "test_sy");
+        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
+        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity(headers);
+        ResponseEntity<Object> exchange = null;
+        exchange = client.exchange(httpUrl, HttpMethod.POST, requestEntity, Object.class);
+        System.out.println(JSON.toJSONString(exchange.getBody()));
+        LinkedHashMap linkedHashMap = (LinkedHashMap) exchange.getBody();
+        String accessToken = (String) ((LinkedHashMap) linkedHashMap.get("map")).get("Access-Token");
+        System.out.println(accessToken);
+
+        HttpHeaders headers1 = new HttpHeaders();
+        headers1.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        headers1.set("Access-Token", accessToken);
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
+        map.add("transCode", "P210009");
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("cardType", 1);
+        jsonObject.put("cardNo", "110114198808280013");
+        jsonObject.put("name", "储苑邦");
+        map.add("dataString", jsonObject.toJSONString());
+        String url = "http://61.48.80.80:8088/api/ywzt-proxy-service/proxy/KG1001";
+        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers1);
+        ResponseEntity<String> result = client.postForEntity(url, request, String.class);
+        System.out.println(JSON.toJSONString(result.getBody()));
+        //7c02f2af-6759-4ad3-9374-f8df2bd26ac2
+    }
+}

+ 14 - 0
minsheng-card/src/main/resources/application.yml

@@ -0,0 +1,14 @@
+logging:
+  file: /tsf-demo-logs/${spring.application.name}/root.log
+  level:
+    root: INFO
+
+ten:
+  authen:
+    secretId: AKIDRhgQt76oFPIwJPEm33mEQLzLRGn44oHT
+    secretKey: wc190bw1qPimcKuyUmpc9buzsY0FG3bw
+card:
+  authen:
+    tokenUrl: http://61.48.80.80:8088/zuul/api/auth/client/login
+    username: test_sy
+    password: test_sy

+ 5 - 0
minsheng-card/src/main/resources/bootstrap.yml

@@ -0,0 +1,5 @@
+server:
+  port: 8083
+spring:
+  application:
+    name: minsheng-user

+ 31 - 0
minsheng-common/pom.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>tsf-minsheng</artifactId>
+        <groupId>com.tsf</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>minsheng-common</artifactId>
+    <dependencies>
+        <!--工具包-->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.12</version>
+        </dependency>
+    </dependencies>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>

+ 86 - 0
minsheng-common/src/main/java/com/tsf/common/BaseConstant.java

@@ -0,0 +1,86 @@
+package com.tsf.common;
+
+/**
+ * 系统常量
+ *
+ * @author huijun
+ */
+public interface BaseConstant {
+
+	/**
+	 * 编码
+	 */
+	String UTF_8 = "UTF-8";
+
+	/**
+	 * contentType
+	 */
+	String CONTENT_TYPE_NAME = "Content-type";
+
+	/**
+	 * JSON 资源
+	 */
+	String CONTENT_TYPE = "application/json;charset=utf-8";
+
+
+	/**
+	 * 主键字段名
+	 */
+	String DB_PRIMARY_KEY = "id";
+
+	/**
+	 * 业务状态[1:正常]
+	 */
+	int DB_STATUS_NORMAL = 1;
+
+
+	/**
+	 * 删除状态[0:正常,1:删除]
+	 */
+	int DB_NOT_DELETED = 0;
+	int DB_IS_DELETED = 1;
+
+	/**
+	 * 用户锁定状态
+	 */
+	int DB_ADMIN_NON_LOCKED = 0;
+	int DB_ADMIN_LOCKED = 1;
+
+	/**
+	 * 顶级父节点id
+	 */
+	Long TOP_PARENT_ID = 0L;
+
+	/**
+	 * 顶级父节点名称
+	 */
+	String TOP_PARENT_NAME = "顶级";
+
+	/**
+	 * 管理员对应的租户ID
+	 */
+	String ADMIN_TENANT_ID = "000000";
+
+	/**
+	 * 日志默认状态
+	 */
+	String LOG_NORMAL_TYPE = "1";
+
+	/**
+	 * 默认为空消息
+	 */
+	String DEFAULT_NULL_MESSAGE = "暂无承载数据";
+	/**
+	 * 默认成功消息
+	 */
+	String DEFAULT_SUCCESS_MESSAGE = "操作成功";
+	/**
+	 * 默认失败消息
+	 */
+	String DEFAULT_FAILURE_MESSAGE = "操作失败";
+	/**
+	 * 默认未授权消息
+	 */
+	String DEFAULT_UNAUTHORIZED_MESSAGE = "签名认证失败";
+
+}

+ 30 - 0
minsheng-common/src/main/java/com/tsf/common/ErrorResultCode.java

@@ -0,0 +1,30 @@
+package com.tsf.common;
+
+/**
+ * <p> </p>
+ *
+ * @author huijun
+ * @date 2020/10/17
+ */
+public enum ErrorResultCode implements IErrorCode {
+    SUCCESS(200, "操作成功"),
+    FAILED(500, "操作失败"),
+    VALIDATE_FAILED(404, "参数检验失败"),
+    UNAUTHORIZED(401, "暂未登录或token已经过期"),
+    FORBIDDEN(403, "没有相关权限");
+    private int code;
+    private String message;
+
+    private ErrorResultCode(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

+ 13 - 0
minsheng-common/src/main/java/com/tsf/common/IErrorCode.java

@@ -0,0 +1,13 @@
+package com.tsf.common;
+
+/**
+ * <p> </p>
+ *
+ * @author huijun
+ * @date 2020/10/17
+ */
+public interface IErrorCode {
+    int getCode();
+
+    String getMessage();
+}

+ 42 - 0
minsheng-common/src/main/java/com/tsf/common/IResultCode.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.tsf.common;
+
+import java.io.Serializable;
+
+/**
+ * 业务代码接口
+ *
+ * @author huijun
+ */
+public interface IResultCode extends Serializable {
+
+	/**
+	 * 获取消息
+	 *
+	 * @return
+	 */
+	String getMessage();
+
+	/**
+	 * 获取状态码
+	 *
+	 * @return
+	 */
+	int getCode();
+
+}

+ 21 - 0
minsheng-common/src/main/java/com/tsf/common/ObjectUtil.java

@@ -0,0 +1,21 @@
+package com.tsf.common;
+
+import org.springframework.lang.Nullable;
+
+/**
+ * 对象工具类
+ *
+ * @author huijun
+ */
+public class ObjectUtil extends org.springframework.util.ObjectUtils {
+
+	/**
+	 * 判断元素不为空
+	 * @param obj object
+	 * @return boolean
+	 */
+	public static boolean isNotEmpty(@Nullable Object obj) {
+		return !ObjectUtil.isEmpty(obj);
+	}
+
+}

+ 212 - 0
minsheng-common/src/main/java/com/tsf/common/R.java

@@ -0,0 +1,212 @@
+package com.tsf.common;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import org.springframework.lang.Nullable;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.Serializable;
+import java.util.Optional;
+
+/**
+ * 统一API响应结果封装
+ *
+ * @author huijun
+ */
+@Setter
+@Getter
+@ToString
+@ApiModel(description = "返回信息")
+@NoArgsConstructor
+@JsonInclude
+public class R<T> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "状态码", required = true)
+    private int code;
+    @ApiModelProperty(value = "是否成功", required = true)
+    private boolean success;
+    @ApiModelProperty(value = "承载数据")
+    private T data;
+    @ApiModelProperty(value = "返回消息", required = true)
+    private String msg;
+
+    private R(IResultCode resultCode) {
+        this(resultCode, null, resultCode.getMessage());
+    }
+
+    private R(IResultCode resultCode, String msg) {
+        this(resultCode, null, msg);
+    }
+
+    private R(IResultCode resultCode, T data) {
+        this(resultCode, data, resultCode.getMessage());
+    }
+
+    private R(IResultCode resultCode, T data, String msg) {
+        this(resultCode.getCode(), data, msg);
+    }
+
+    private R(int code, T data, String msg) {
+        this.code = code;
+        this.data = data;
+        this.msg = msg;
+        this.success = ResultCode.SUCCESS.code == code;
+    }
+
+    /**
+     * 判断返回是否为成功
+     *
+     * @param result Result
+     * @return 是否成功
+     */
+    public static boolean isSuccess(@Nullable R<?> result) {
+        return Optional.ofNullable(result)
+                .map(x -> ObjectUtil.nullSafeEquals(ResultCode.SUCCESS.code, x.code))
+                .orElse(Boolean.FALSE);
+    }
+
+    /**
+     * 判断返回是否为成功
+     *
+     * @param result Result
+     * @return 是否成功
+     */
+    public static boolean isNotSuccess(@Nullable R<?> result) {
+        return !R.isSuccess(result);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param data 数据
+     * @param <T>  T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> data(T data) {
+        return data(data, BaseConstant.DEFAULT_SUCCESS_MESSAGE);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param data 数据
+     * @param msg  消息
+     * @param <T>  T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> data(T data, String msg) {
+        return data(HttpServletResponse.SC_OK, data, msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param code 状态码
+     * @param data 数据
+     * @param msg  消息
+     * @param <T>  T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> data(int code, T data, String msg) {
+        return new R<>(code, data, data == null ? BaseConstant.DEFAULT_NULL_MESSAGE : msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param msg 消息
+     * @param <T> T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> success(String msg) {
+        return new R<>(ResultCode.SUCCESS, msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param resultCode 业务代码
+     * @param <T>        T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> success(IResultCode resultCode) {
+        return new R<>(resultCode);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param resultCode 业务代码
+     * @param msg        消息
+     * @param <T>        T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> success(IResultCode resultCode, String msg) {
+        return new R<>(resultCode, msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param msg 消息
+     * @param <T> T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> fail(String msg) {
+        return new R<>(ResultCode.FAILURE, msg);
+    }
+
+
+    /**
+     * 返回R
+     *
+     * @param code 状态码
+     * @param msg  消息
+     * @param <T>  T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> fail(int code, String msg) {
+        return new R<>(code, null, msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param resultCode 业务代码
+     * @param <T>        T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> fail(IResultCode resultCode) {
+        return new R<>(resultCode);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param resultCode 业务代码
+     * @param msg        消息
+     * @param <T>        T 泛型标记
+     * @return R
+     */
+    public static <T> R<T> fail(IResultCode resultCode, String msg) {
+        return new R<>(resultCode, msg);
+    }
+
+    /**
+     * 返回R
+     *
+     * @param flag 成功状态
+     * @return R
+     */
+    public static <T> R<T> status(boolean flag) {
+        return flag ? success(BaseConstant.DEFAULT_SUCCESS_MESSAGE) : fail(BaseConstant.DEFAULT_FAILURE_MESSAGE);
+    }
+
+}
+

+ 113 - 0
minsheng-common/src/main/java/com/tsf/common/ResultCode.java

@@ -0,0 +1,113 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package com.tsf.common;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 业务代码枚举
+ *
+ * @author huijun
+ */
+@Getter
+@AllArgsConstructor
+public enum ResultCode implements IResultCode {
+
+	/**
+	 * 操作成功
+	 */
+	SUCCESS(HttpServletResponse.SC_OK, "操作成功"),
+
+	/**
+	 * 业务异常
+	 */
+	FAILURE(HttpServletResponse.SC_BAD_REQUEST, "业务异常"),
+
+	/**
+	 * 请求未授权
+	 */
+	UN_AUTHORIZED(HttpServletResponse.SC_UNAUTHORIZED, "请求未授权"),
+
+	/**
+	 * 客户端请求未授权
+	 */
+	CLIENT_UN_AUTHORIZED(HttpServletResponse.SC_UNAUTHORIZED, "客户端请求未授权"),
+
+	/**
+	 * 404 没找到请求
+	 */
+	NOT_FOUND(HttpServletResponse.SC_NOT_FOUND, "404 没找到请求"),
+
+	/**
+	 * 消息不能读取
+	 */
+	MSG_NOT_READABLE(HttpServletResponse.SC_BAD_REQUEST, "消息不能读取"),
+
+	/**
+	 * 不支持当前请求方法
+	 */
+	METHOD_NOT_SUPPORTED(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "不支持当前请求方法"),
+
+	/**
+	 * 不支持当前媒体类型
+	 */
+	MEDIA_TYPE_NOT_SUPPORTED(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "不支持当前媒体类型"),
+
+	/**
+	 * 请求被拒绝
+	 */
+	REQ_REJECT(HttpServletResponse.SC_FORBIDDEN, "请求被拒绝"),
+
+	/**
+	 * 服务器异常
+	 */
+	INTERNAL_SERVER_ERROR(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "服务器异常"),
+
+	/**
+	 * 缺少必要的请求参数
+	 */
+	PARAM_MISS(HttpServletResponse.SC_BAD_REQUEST, "缺少必要的请求参数"),
+
+	/**
+	 * 请求参数类型错误
+	 */
+	PARAM_TYPE_ERROR(HttpServletResponse.SC_BAD_REQUEST, "请求参数类型错误"),
+
+	/**
+	 * 请求参数绑定错误
+	 */
+	PARAM_BIND_ERROR(HttpServletResponse.SC_BAD_REQUEST, "请求参数绑定错误"),
+
+	/**
+	 * 参数校验失败
+	 */
+	PARAM_VALID_ERROR(HttpServletResponse.SC_BAD_REQUEST, "参数校验失败"),
+	;
+
+	/**
+	 * code编码
+	 */
+	final int code;
+	/**
+	 * 中文信息描述
+	 */
+	final String message;
+
+}

+ 25 - 0
minsheng-log/pom.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>tsf-minsheng</artifactId>
+        <groupId>com.tsf</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>minsheng-log</artifactId>
+    <!-- TSF 启动器 -->
+    <dependencies>
+         <dependency>
+             <groupId>com.tencent.tsf</groupId>
+             <artifactId>spring-cloud-tsf-starter</artifactId>
+         </dependency>
+    </dependencies>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>

+ 15 - 0
minsheng-log/src/main/java/log/LogApplication.java

@@ -0,0 +1,15 @@
+package log;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.tsf.annotation.EnableTsf;
+
+@SpringBootApplication
+@EnableFeignClients // 使用Feign微服务调用时请启用
+@EnableTsf
+public class LogApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(LogApplication.class, args);
+    }
+}

+ 20 - 0
minsheng-log/src/main/java/log/config/ProviderNameConfig.java

@@ -0,0 +1,20 @@
+package log.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+@Component
+@RefreshScope
+@ConfigurationProperties(prefix = "provider.config")
+public class ProviderNameConfig {
+	private String name = "echo-provider-default-name";
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

+ 22 - 0
minsheng-log/src/main/java/log/config/ProviderNameConfigChangeListener.java

@@ -0,0 +1,22 @@
+package log.config;
+
+import com.tencent.tsf.consul.config.watch.ConfigChangeCallback;
+import com.tencent.tsf.consul.config.watch.ConfigChangeListener;
+import com.tencent.tsf.consul.config.watch.ConfigProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigChangeListener(prefix = "provider.config", value = { "name" })
+public class ProviderNameConfigChangeListener implements ConfigChangeCallback {
+
+    private static final Logger log = LoggerFactory.getLogger(ProviderNameConfigChangeListener.class);
+
+    @Override
+    public void callback(ConfigProperty lastConfigProperty, ConfigProperty newConfigProperty) {
+        log.info("[TSF SDK] Configuration Change Listener: key: {}, old value: {}, new value: {}",
+                lastConfigProperty.getKey(), lastConfigProperty.getValue(), newConfigProperty.getValue());
+    }
+
+}

+ 4 - 0
minsheng-log/src/main/resources/application.yml

@@ -0,0 +1,4 @@
+logging:
+  file: /tsf-demo-logs/${spring.application.name}/root.log
+  level:
+    root: INFO

+ 5 - 0
minsheng-log/src/main/resources/bootstrap.yml

@@ -0,0 +1,5 @@
+server:
+  port: 8083
+spring:
+  application:
+    name: minsheng-log

+ 26 - 0
minsheng-user/pom.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>tsf-minsheng</artifactId>
+        <groupId>com.tsf</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>minsheng-user</artifactId>
+    <dependencies>
+    <!-- TSF 启动器 -->
+    <dependency>
+        <groupId>com.tencent.tsf</groupId>
+        <artifactId>spring-cloud-tsf-starter</artifactId>
+    </dependency>
+
+    </dependencies>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+</project>

+ 15 - 0
minsheng-user/src/main/java/com/tsf/user/UserApplication.java

@@ -0,0 +1,15 @@
+package com.tsf.user;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.tsf.annotation.EnableTsf;
+
+@SpringBootApplication
+@EnableFeignClients // 使用Feign微服务调用时请启用
+@EnableTsf
+public class UserApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(UserApplication.class, args);
+    }
+}

+ 20 - 0
minsheng-user/src/main/java/com/tsf/user/config/ProviderNameConfig.java

@@ -0,0 +1,20 @@
+package com.tsf.user.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+@Component
+@RefreshScope
+@ConfigurationProperties(prefix = "provider.config")
+public class ProviderNameConfig {
+	private String name = "echo-provider-default-name";
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

+ 22 - 0
minsheng-user/src/main/java/com/tsf/user/config/ProviderNameConfigChangeListener.java

@@ -0,0 +1,22 @@
+package com.tsf.user.config;
+
+import com.tencent.tsf.consul.config.watch.ConfigChangeCallback;
+import com.tencent.tsf.consul.config.watch.ConfigChangeListener;
+import com.tencent.tsf.consul.config.watch.ConfigProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigChangeListener(prefix = "provider.config", value = { "name" })
+public class ProviderNameConfigChangeListener implements ConfigChangeCallback {
+
+    private static final Logger log = LoggerFactory.getLogger(ProviderNameConfigChangeListener.class);
+
+    @Override
+    public void callback(ConfigProperty lastConfigProperty, ConfigProperty newConfigProperty) {
+        log.info("[TSF SDK] Configuration Change Listener: key: {}, old value: {}, new value: {}",
+                lastConfigProperty.getKey(), lastConfigProperty.getValue(), newConfigProperty.getValue());
+    }
+
+}

+ 22 - 0
minsheng-user/src/main/java/com/tsf/user/controller/MpUserController.java

@@ -0,0 +1,22 @@
+package com.tsf.user.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@CrossOrigin
+@RequestMapping("/mpUser")
+@Api(value = "用户表", tags = "用户表接口")
+public class MpUserController {
+    /**
+     * 详情
+     */
+//    @GetMapping("/add")
+//    @ApiOperation(value = "增加用户", notes = "传入")
+//    public R<BaseTeamCourseType> detail(BaseTeamCourseType baseTeamCourseType) {
+//        BaseTeamCourseType detail = baseTeamCourseTypeService.getOne(Condition.getQueryWrapper(baseTeamCourseType));
+//        return R.data(detail);
+//    }
+}

+ 15 - 0
minsheng-user/src/main/java/com/tsf/user/controller/MpUserIdentificationController.java

@@ -0,0 +1,15 @@
+package com.tsf.user.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@CrossOrigin
+@RequestMapping("/mpUserIdentification")
+@Api(value = "用户实名认证", tags = "用户实名认证表接口")
+public class MpUserIdentificationController {
+
+
+}

+ 13 - 0
minsheng-user/src/main/java/com/tsf/user/controller/MpUserTokenController.java

@@ -0,0 +1,13 @@
+package com.tsf.user.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@CrossOrigin
+@RequestMapping("/mpUserToken")
+@Api(value = "用户登录信息表", tags = "用户登录信息表接口")
+public class MpUserTokenController {
+}

+ 173 - 0
minsheng-user/src/main/java/com/tsf/user/controller/TenController.java

@@ -0,0 +1,173 @@
+package com.tsf.user.controller;
+
+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.ocr.v20181119.OcrClient;
+import com.tencentcloudapi.ocr.v20181119.models.IDCardOCRRequest;
+import com.tencentcloudapi.ocr.v20181119.models.IDCardOCRResponse;
+import com.tencentcloudapi.ocr.v20181119.models.ResidenceBookletOCRRequest;
+import com.tencentcloudapi.ocr.v20181119.models.ResidenceBookletOCRResponse;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Encoder;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+
+
+@RestController
+public class TenController {
+
+    @Value("${ten.authen.secretId}")
+    private String secretId;
+
+    @Value("${ten.authen.secretKey}")
+    private String secretKey;
+
+    public static void main(String[] args) {
+//        // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
+//        // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
+//        Credential cred = new Credential("AKIDRhgQt76oFPIwJPEm33mEQLzLRGn44oHT", "wc190bw1qPimcKuyUmpc9buzsY0FG3bw");
+//        // 实例化一个http选项,可选的,没有特殊需求可以跳过
+//        HttpProfile httpProfile = new HttpProfile();
+//        httpProfile.setEndpoint("ocr.tencentcloudapi.com");
+//        // 实例化一个client选项,可选的,没有特殊需求可以跳过
+//        ClientProfile clientProfile = new ClientProfile();
+//        clientProfile.setHttpProfile(httpProfile);
+//        // 实例化要请求产品的client对象,clientProfile是可选的
+//        OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
+//        // 实例化一个请求对象,每个接口都会对应一个request对象
+//        IDCardOCRRequest req = new IDCardOCRRequest();
+//        req.setImageUrl("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.jcrb.com%2Fn1%2Fimages%2Fjcrb1534%2Fpic_95841.jpg");
+//        // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
+//        IDCardOCRResponse resp = null;
+//        try {
+//            resp = client.IDCardOCR(req);
+//        } catch (TencentCloudSDKException e) {
+//            e.printStackTrace();
+//        }
+//        // 输出json格式的字符串回包
+//        System.out.println(IDCardOCRResponse.toJsonString(resp));
+
+        try{
+            // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
+            // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
+            Credential cred = new Credential("AKIDRhgQt76oFPIwJPEm33mEQLzLRGn44oHT", "wc190bw1qPimcKuyUmpc9buzsY0FG3bw");
+            // 实例化一个http选项,可选的,没有特殊需求可以跳过
+            HttpProfile httpProfile = new HttpProfile();
+            httpProfile.setEndpoint("ocr.tencentcloudapi.com");
+            // 实例化一个client选项,可选的,没有特殊需求可以跳过
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setHttpProfile(httpProfile);
+            // 实例化要请求产品的client对象,clientProfile是可选的
+            OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
+            // 实例化一个请求对象,每个接口都会对应一个request对象
+            ResidenceBookletOCRRequest req = new ResidenceBookletOCRRequest();
+            req.setImageUrl("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.jcrb.com%2Fn1%2Fimages%2Fjcrb1534%2Fpic_95841.jpg");
+            // 返回的resp是一个ResidenceBookletOCRResponse的实例,与请求对象对应
+            ResidenceBookletOCRResponse resp = client.ResidenceBookletOCR(req);
+            // 输出json格式的字符串回包
+            System.out.println(ResidenceBookletOCRResponse.toJsonString(resp));
+        } catch (TencentCloudSDKException e) {
+            System.out.println(e.toString());
+        }
+    }
+    @ApiOperation(value = "身份证识别", notes = "传入")
+    @PostMapping(value = "/fileUpload/identityCard")
+    public String fileUploadIdCard(@RequestParam(value = "file") MultipartFile file, Model model, HttpServletRequest request) {
+        if (file.isEmpty()) {
+            System.out.println("文件为空空");
+        }
+
+        InputStream in = null;
+        byte[] data = null;
+        try {
+            in = file.getInputStream();
+            data = new byte[in.available()];
+            in.read(data);
+            in.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        BASE64Encoder encoder = new BASE64Encoder();
+         //encoder.encode(data);
+        // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
+        // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
+        Credential cred = new Credential(secretId, secretKey);
+        // 实例化一个http选项,可选的,没有特殊需求可以跳过
+        HttpProfile httpProfile = new HttpProfile();
+        httpProfile.setEndpoint("ocr.tencentcloudapi.com");
+        // 实例化一个client选项,可选的,没有特殊需求可以跳过
+        ClientProfile clientProfile = new ClientProfile();
+        clientProfile.setHttpProfile(httpProfile);
+        // 实例化要请求产品的client对象,clientProfile是可选的
+        OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
+        // 实例化一个请求对象,每个接口都会对应一个request对象
+        IDCardOCRRequest req = new IDCardOCRRequest();
+        req.setImageBase64(encoder.encode(data));
+        // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
+        IDCardOCRResponse resp = null;
+        try {
+            resp = client.IDCardOCR(req);
+        } catch (TencentCloudSDKException e) {
+            e.printStackTrace();
+        }
+        // 输出json格式的字符串回包
+        System.out.println(IDCardOCRResponse.toJsonString(resp));
+        return IDCardOCRResponse.toJsonString(resp);
+    }
+
+    @ApiOperation(value = "户口本识别", notes = "传入")
+    @PostMapping(value = "/fileUpload/residenceBooklet")
+    public String fileUploadResidenceBooklet(@RequestParam(value = "file") MultipartFile file, Model model, HttpServletRequest request) {
+        if (file.isEmpty()) {
+            System.out.println("文件为空空");
+        }
+
+        InputStream in = null;
+        byte[] data = null;
+        try {
+            in = file.getInputStream();
+            data = new byte[in.available()];
+            in.read(data);
+            in.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        BASE64Encoder encoder = new BASE64Encoder();
+        //encoder.encode(data);
+        // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
+        // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
+        Credential cred = new Credential(secretId, secretKey);
+        // 实例化一个http选项,可选的,没有特殊需求可以跳过
+        HttpProfile httpProfile = new HttpProfile();
+        httpProfile.setEndpoint("ocr.tencentcloudapi.com");
+        // 实例化一个client选项,可选的,没有特殊需求可以跳过
+        ClientProfile clientProfile = new ClientProfile();
+        clientProfile.setHttpProfile(httpProfile);
+        // 实例化要请求产品的client对象,clientProfile是可选的
+        OcrClient client = new OcrClient(cred, "ap-beijing", clientProfile);
+        // 实例化一个请求对象,每个接口都会对应一个request对象
+        ResidenceBookletOCRRequest req = new ResidenceBookletOCRRequest();
+        req.setImageBase64(encoder.encode(data));
+        // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
+        ResidenceBookletOCRResponse resp = null;
+        try {
+            resp = client.ResidenceBookletOCR(req);
+        } catch (TencentCloudSDKException e) {
+            e.printStackTrace();
+        }
+        // 输出json格式的字符串回包
+        System.out.println(ResidenceBookletOCRResponse.toJsonString(resp));
+        return ResidenceBookletOCRResponse.toJsonString(resp);
+    }
+
+}

+ 14 - 0
minsheng-user/src/main/resources/application.yml

@@ -0,0 +1,14 @@
+logging:
+  file: /tsf-demo-logs/${spring.application.name}/root.log
+  level:
+    root: INFO
+
+ten:
+  authen:
+    secretId: AKIDRhgQt76oFPIwJPEm33mEQLzLRGn44oHT
+    secretKey: wc190bw1qPimcKuyUmpc9buzsY0FG3bw
+card:
+  authen:
+    tokenUrl: http://61.48.80.80:8088/zuul/api/auth/client/login
+    username: test_sy
+    password: test_sy

+ 5 - 0
minsheng-user/src/main/resources/bootstrap.yml

@@ -0,0 +1,5 @@
+server:
+  port: 8082
+spring:
+  application:
+    name: minsheng-user

+ 37 - 0
pom.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+    <parent>
+        <groupId>com.tencent.tsf</groupId>
+        <artifactId>spring-cloud-tsf-dependencies</artifactId>
+        <version>1.23.0-Greenwich-RELEASE</version>
+    </parent>
+    <modules>
+        <module>minsheng-common</module>
+        <module>minsheng-card</module>
+        <module>minsheng-user</module>
+        <module>minsheng-log</module>
+    </modules>
+    <groupId>com.tsf</groupId>
+    <artifactId>tsf-minsheng</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+    <dependencies>
+    <dependency>
+        <groupId>com.tencent.tsf</groupId>
+        <artifactId>spring-cloud-tsf-starter</artifactId>
+    </dependency>
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <version>3.1.49</version>
+        </dependency>
+    </dependencies>
+</project>