Browse Source

fix 增加HttpProxy

Young 2 years ago
parent
commit
b024523035

+ 127 - 0
support-demo/src/main/java/cn/nosum/wx/cp/controller/ExtContactController.java

@@ -0,0 +1,127 @@
+package cn.nosum.wx.cp.controller;
+
+import cn.nosum.wx.cp.api.WxCpExternalContactService;
+import cn.nosum.wx.cp.api.WxCpService;
+import cn.nosum.wx.cp.config.WxCpConfiguration;
+import cn.nosum.wx.cp.entity.external.WxCpUserExternalGroupChatStatistic;
+import cn.nosum.wx.cp.entity.external.WxCpUserExternalUserBehaviorStatistic;
+import cn.nosum.wx.cp.vo.ExtStatisticVO;
+import com.google.common.collect.Lists;
+import lombok.SneakyThrows;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * 外部联系人控制层.
+ *
+ * @author Young
+ */
+@RestController
+@RequestMapping("/ext/contact")
+public class ExtContactController {
+
+    @SneakyThrows
+    @RequestMapping("/get_user_behavior_data")
+    public List<WxCpUserExternalUserBehaviorStatistic> getUserBehaviorData(Integer appId) {
+        String[] strings = getUserList().toArray(new String[getUserList().size()]);
+        List<WxCpUserExternalUserBehaviorStatistic> result = new ArrayList<>();
+        getLocalDateTimeList().forEach(obj -> {
+            WxCpExternalContactService externalContactService = WxCpConfiguration.getCpService(appId).getExternalContactService();
+            Date startTime = convertDate(obj);
+            Date endTime = convertDate(obj);
+            WxCpUserExternalUserBehaviorStatistic userBehaviorStatistic = externalContactService.getUserBehaviorStatistic(startTime, endTime, strings, null);
+            result.add(userBehaviorStatistic);
+        });
+
+        return result;
+    }
+
+
+    @SneakyThrows
+    @RequestMapping("/statistic_group_by_day")
+    public List<ExtStatisticVO> statisticGroupByDay(Integer appId) {
+        List<ExtStatisticVO> extStatisticVOList = new ArrayList<>();
+        WxCpExternalContactService externalContactService = WxCpConfiguration.getCpService(appId).getExternalContactService();
+        getLocalDateTimeList().forEach(obj -> {
+            Date startTime = convertDate(obj);
+            WxCpUserExternalGroupChatStatistic groupChatStatistic = externalContactService.getGroupChatStatistic(startTime, 2, 0, 0, 1000, null, null);
+            ExtStatisticVO statisticVO = new ExtStatisticVO();
+            statisticVO.setDateTime(startTime.getTime() / 1000);
+            statisticVO.setWxCpUserExternalGroupChatStatistic(groupChatStatistic);
+            extStatisticVOList.add(statisticVO);
+        });
+        return extStatisticVOList;
+    }
+
+    private List<LocalDateTime> getLocalDateTimeList() {
+        List<LocalDateTime> dateTimeList = new ArrayList<>();
+        dateTimeList.add(LocalDateTime.parse("2021-07-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-07-15 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-08-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-08-15 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-09-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-09-15 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-09-28 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-10-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-10-15 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        dateTimeList.add(LocalDateTime.parse("2021-10-20 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        return dateTimeList;
+    }
+
+    private List<String> getUserList() {
+        List<String> userIds = new ArrayList<>();
+        userIds.add("011850");
+        userIds.add("012292");
+        userIds.add("011232");
+        userIds.add("010957");
+        userIds.add("006965");
+        userIds.add("014169");
+        userIds.add("014188");
+        userIds.add("004783");
+        userIds.add("011223");
+        userIds.add("014124");
+        userIds.add("004784");
+        userIds.add("004945");
+        userIds.add("011835");
+        userIds.add("011590");
+        userIds.add("004041");
+        userIds.add("014117");
+        userIds.add("010918");
+        userIds.add("011837");
+        userIds.add("012947");
+        userIds.add("006823");
+        userIds.add("014139");
+        userIds.add("015920");
+        userIds.add("012688");
+        userIds.add("014133");
+        userIds.add("011831");
+        userIds.add("012293");
+        userIds.add("004793");
+        userIds.add("012294");
+        userIds.add("014113");
+        userIds.add("011842");
+        userIds.add("011987");
+        userIds.add("013628");
+        userIds.add("012857");
+        userIds.add("004778");
+        userIds.add("004810");
+        userIds.add("005963");
+        return userIds;
+    }
+
+    /**
+     * 将 LocalDateTime 转 Date.
+     *
+     * @param dateTime LocalDatetime
+     * @return Date
+     */
+    public static Date convertDate(LocalDateTime dateTime) {
+        return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
+    }
+}

+ 15 - 0
support-demo/src/main/java/cn/nosum/wx/cp/vo/ExtStatisticVO.java

@@ -0,0 +1,15 @@
+package cn.nosum.wx.cp.vo;
+
+import cn.nosum.wx.cp.entity.external.WxCpUserExternalGroupChatStatistic;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+public class ExtStatisticVO implements Serializable {
+
+    private Long dateTime;
+
+    private WxCpUserExternalGroupChatStatistic wxCpUserExternalGroupChatStatistic;
+}

+ 26 - 0
support-http/src/main/java/cn/nosum/http/AbsRequestHttp.java

@@ -0,0 +1,26 @@
+package cn.nosum.http;
+
+/**
+ * httpClient 客户端获取接口.
+ *
+ * @param <H> httpClient
+ * @param <P> httpProxy
+ * @author Young
+ */
+public abstract class AbsRequestHttp<H, P> implements RequestHttp<H, P>{
+
+    protected H httpClient;
+
+    protected P httpProxy;
+
+    @Override
+    public H getRequestHttpClient() {
+        return this.httpClient;
+    }
+
+    @Override
+    public P getRequestHttpProxy() {
+        return httpProxy;
+    }
+
+}

+ 6 - 0
support-http/src/main/java/cn/nosum/http/RequestHttpProperties.java

@@ -1,5 +1,6 @@
 package cn.nosum.http;
 
+import cn.nosum.http.enums.HttpType;
 import lombok.Data;
 
 /**
@@ -11,6 +12,11 @@ import lombok.Data;
 public class RequestHttpProperties {
 
     /**
+     * http type
+     */
+    private HttpType type;
+
+    /**
      * http proxy host.
      */
     private String httpProxyHost;

+ 37 - 0
support-http/src/main/java/cn/nosum/http/apache/ApacheRequestHttp.java

@@ -0,0 +1,37 @@
+package cn.nosum.http.apache;
+
+import cn.nosum.http.AbsRequestHttp;
+import cn.nosum.http.RequestHttpProperties;
+import cn.nosum.http.enums.HttpType;
+import org.apache.http.HttpHost;
+import org.apache.http.impl.client.CloseableHttpClient;
+
+/**
+ * APACHE 请求代理封装.
+ *
+ * @author Young
+ */
+public class ApacheRequestHttp extends AbsRequestHttp<CloseableHttpClient, HttpHost> {
+
+    public ApacheRequestHttp(RequestHttpProperties properties) {
+        ApacheHttpClientBuilder apacheHttpClientBuilder = DefaultApacheHttpClientBuilder.get();
+
+        apacheHttpClientBuilder.httpProxyHost(properties.getHttpProxyHost())
+                .httpProxyPort(properties.getHttpProxyPort())
+                .httpProxyUsername(properties.getHttpProxyUsername())
+                .httpProxyPassword(properties.getHttpProxyPassword())
+                .connectTimeout(properties.getConnectTimeout())
+                .readTimeout(properties.getReadTimeout());
+
+        if (properties.getHttpProxyHost() != null && properties.getHttpProxyPort() > 0) {
+            httpProxy = new HttpHost(properties.getHttpProxyHost(), properties.getHttpProxyPort());
+        }
+
+        httpClient = apacheHttpClientBuilder.build();
+    }
+
+    @Override
+    public HttpType getRequestType() {
+        return HttpType.APACHE_HTTP;
+    }
+}

+ 15 - 0
support-http/src/main/java/cn/nosum/http/enums/HttpType.java

@@ -2,6 +2,8 @@ package cn.nosum.http.enums;
 
 import lombok.Getter;
 
+import java.util.Arrays;
+
 /**
  * HTTP 客户端类型.
  *
@@ -27,5 +29,18 @@ public enum HttpType {
         this.name = name;
     }
 
+    /**
+     * 客户端类型名称.
+     */
     private String name;
+
+    /**
+     * 根据名称获取客户端类型.
+     *
+     * @param name 名称
+     * @return 客户端类型
+     */
+    public static HttpType getByName(String name) {
+        return Arrays.stream(HttpType.values()).filter(obj -> obj.name.equals(name)).findFirst().orElse(null);
+    }
 }

+ 39 - 0
support-http/src/main/java/cn/nosum/http/jodd/JoddRequestHttp.java

@@ -0,0 +1,39 @@
+package cn.nosum.http.jodd;
+
+import cn.nosum.http.AbsRequestHttp;
+import cn.nosum.http.RequestHttp;
+import cn.nosum.http.RequestHttpProperties;
+import cn.nosum.http.apache.ApacheHttpClientBuilder;
+import cn.nosum.http.apache.DefaultApacheHttpClientBuilder;
+import cn.nosum.http.enums.HttpType;
+import jodd.http.HttpConnectionProvider;
+import jodd.http.ProxyInfo;
+import org.apache.http.HttpHost;
+import org.apache.http.impl.client.CloseableHttpClient;
+
+/**
+ * Jodd 请求代理封装.
+ *
+ * @author Young
+ */
+public class JoddRequestHttp extends AbsRequestHttp<HttpConnectionProvider, ProxyInfo> {
+
+    public JoddRequestHttp(RequestHttpProperties properties) {
+        if (properties.getHttpProxyHost() != null && properties.getHttpProxyPort() > 0) {
+            httpProxy = new ProxyInfo(ProxyInfo.ProxyType.HTTP,
+                    properties.getHttpProxyHost(),
+                    properties.getHttpProxyPort(),
+                    properties.getHttpProxyUsername(),
+                    properties.getHttpProxyPassword());
+        }
+        JoddSocketHttpConnectionProvider joddSocketHttpConnectionProvider = new JoddSocketHttpConnectionProvider();
+        joddSocketHttpConnectionProvider.setSoTimeout(properties.getReadTimeout());
+        joddSocketHttpConnectionProvider.setConnectionTimeout(properties.getConnectTimeout());
+        httpClient = joddSocketHttpConnectionProvider;
+    }
+
+    @Override
+    public HttpType getRequestType() {
+        return HttpType.JODD_HTTP;
+    }
+}

+ 47 - 0
support-http/src/main/java/cn/nosum/http/okhttp/OkHttpRequestHttp.java

@@ -0,0 +1,47 @@
+package cn.nosum.http.okhttp;
+
+import cn.nosum.http.AbsRequestHttp;
+import cn.nosum.http.RequestHttp;
+import cn.nosum.http.RequestHttpProperties;
+import cn.nosum.http.enums.HttpType;
+import cn.nosum.http.jodd.JoddSocketHttpConnectionProvider;
+import jodd.http.HttpConnectionProvider;
+import jodd.http.ProxyInfo;
+import okhttp3.Credentials;
+import okhttp3.OkHttpClient;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * OkHttp 请求代理封装.
+ *
+ * @author Young
+ */
+public class OkHttpRequestHttp extends AbsRequestHttp<OkHttpClient, OkHttpProxyInfo> {
+
+    public OkHttpRequestHttp(RequestHttpProperties properties) {
+        if (properties.getHttpProxyHost() != null && properties.getHttpProxyPort() > 0) {
+            httpProxy = OkHttpProxyInfo.httpProxy(properties.getHttpProxyHost(),
+                    properties.getHttpProxyPort(),
+                    properties.getHttpProxyUsername(),
+                    properties.getHttpProxyPassword());
+        }
+
+        OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
+        if (httpProxy != null) {
+            clientBuilder.proxy(getRequestHttpProxy().getProxy());
+            clientBuilder.authenticator((route, response) -> {
+                String credential = Credentials.basic(httpProxy.getProxyUsername(), httpProxy.getProxyPassword());
+                return response.request().newBuilder().header("Authorization", credential).build();
+            });
+        }
+
+        clientBuilder.connectTimeout(properties.getConnectTimeout(), TimeUnit.MILLISECONDS).readTimeout(properties.getReadTimeout(), TimeUnit.MILLISECONDS);
+        httpClient = clientBuilder.build();
+    }
+
+    @Override
+    public HttpType getRequestType() {
+        return HttpType.JODD_HTTP;
+    }
+}

+ 0 - 5
wx-java-tools/wx-java-cp-start/src/main/java/cn/nosum/wx/cp/config/WxCpAppProperties.java

@@ -16,11 +16,6 @@ public class WxCpAppProperties {
     private Integer agentId;
 
     /**
-     * 设置企业微信应用的AgentCode
-     */
-    private String agentCode;
-
-    /**
      * 设置企业微信应用的Secret
      */
     private String secret;

+ 1 - 14
wx-java-tools/wx-java-cp-start/src/main/java/cn/nosum/wx/cp/config/WxCpConfiguration.java

@@ -1,5 +1,6 @@
 package cn.nosum.wx.cp.config;
 
+import cn.nosum.http.RequestHttp;
 import cn.nosum.http.RequestHttpProperties;
 import cn.nosum.http.enums.HttpType;
 import cn.nosum.wx.cp.api.WxCpService;
@@ -35,8 +36,6 @@ public class WxCpConfiguration {
 
     private static Map<Integer, WxCpService> cpAgentIdServiceMap = new ConcurrentHashMap<>();
 
-    private static Map<String, WxCpService> cpAgentCodeServiceMap = new ConcurrentHashMap<>();
-
     @PostConstruct
     public void initServices() {
         // 获取所有服务的配置
@@ -44,7 +43,6 @@ public class WxCpConfiguration {
             val configStorage = new WxCpDefaultConfigImpl();
             configStorage.setCorpId(this.properties.getCorpId());
             configStorage.setAgentId(agent.getAgentId());
-            configStorage.setAgentCode(agent.getAgentCode());
             configStorage.setCorpSecret(agent.getSecret());
             configStorage.setToken(agent.getToken());
             configStorage.setAesKey(agent.getAesKey());
@@ -90,7 +88,6 @@ public class WxCpConfiguration {
 
         // 保存所有的服务
         cpAgentIdServiceMap = wxCpServiceList.stream().filter(service -> Objects.nonNull(service.getWxCpConfigStorage().getAgentId())).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentId(), service -> service));
-        cpAgentCodeServiceMap = wxCpServiceList.stream().filter(service -> Objects.nonNull(service.getWxCpConfigStorage().getAgentCode())).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentCode(), service -> service));
     }
 
 
@@ -103,14 +100,4 @@ public class WxCpConfiguration {
     public static WxCpService getCpService(Integer agentId) {
         return cpAgentIdServiceMap.get(agentId);
     }
-
-    /**
-     * 根据应用 CODE 获取对应的服务.
-     *
-     * @param agentCode 应用 CODE
-     * @return 服务
-     */
-    public static WxCpService getCpService(String agentCode) {
-        return cpAgentCodeServiceMap.get(agentCode);
-    }
 }

+ 4 - 4
wx-java-tools/wx-java-cp-start/src/main/java/cn/nosum/wx/cp/config/WxCpHttpProxyProperties.java

@@ -20,20 +20,20 @@ public class WxCpHttpProxyProperties {
     /**
      * 主机
      */
-    private String host = "127.0.0.1";
+    private String host;
 
     /**
      * 端口号
      */
-    private Integer port = 8080;
+    private Integer port = 0;
 
     /**
      * 用户名
      */
-    private String userName = "username";
+    private String userName;
 
     /**
      * 密码
      */
-    private String password = "password";
+    private String password;
 }