From ac891b014f5110e01fd19bc537f208ae9e7c689c Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期二, 25 十一月 2025 09:49:11 +0800
Subject: [PATCH] 新增企业微信的接口
---
src/main/java/com/gs/xky/task/ScheduledTasks.java | 111 ++++++++++++++++++++++++++-
src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java | 5 +
src/main/java/com/gs/xky/service/WorkWXService.java | 70 +++++++++++++++++
src/test/java/com/gs/xky/XkyApplicationTests.java | 41 +++++++--
4 files changed, 210 insertions(+), 17 deletions(-)
diff --git a/src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java b/src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java
index c80dfa2..54fe214 100644
--- a/src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java
+++ b/src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java
@@ -40,4 +40,9 @@
public static final String CUSTOM_ROBOT_TOKEN = "c2849e46cb0d91b0721c377742938b8ac5ef57e3c9eeab918e2cd5dd9c3aad2a";
public static final String SECRET = "SEC382027a5c81ea5152b71b687fb2c1ebf26acbde035355da6ab2fb37306454134";
+
+ //浼佷笟寰俊
+ public static final String CORPID = "wwabe21b935901a7d8";
+
+ public static final String CORPSECRET = "Z-7fNbZjrd80ypz69U14j8FMxI_fpUxcT6PksxlvKaY";
}
diff --git a/src/main/java/com/gs/xky/service/WorkWXService.java b/src/main/java/com/gs/xky/service/WorkWXService.java
new file mode 100644
index 0000000..430d00f
--- /dev/null
+++ b/src/main/java/com/gs/xky/service/WorkWXService.java
@@ -0,0 +1,70 @@
+package com.gs.xky.service;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gs.xky.config.DataAcquisitionConfiguration;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@RequiredArgsConstructor
+public class WorkWXService {
+
+ private static final Logger log = LoggerFactory.getLogger(WorkWXService.class);
+
+ private final OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(90, TimeUnit.SECONDS)
+ .readTimeout(90, TimeUnit.SECONDS)
+ .build();
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ public String getAccessToken() throws IOException {
+ String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",
+ DataAcquisitionConfiguration.CORPID,
+ DataAcquisitionConfiguration.CORPSECRET);
+
+ Request request = new Request.Builder()
+ .url(url)
+ .get()
+ .build();
+
+ try (Response response = client.newCall(request).execute()) {
+ if (!response.isSuccessful()) {
+ log.error("鑾峰彇浼佷笟寰俊access_token澶辫触锛孒TTP鐘舵�佺爜: {}", response.code());
+ throw new IOException("鑾峰彇access_token澶辫触: " + response.message());
+ }
+
+ String responseBody = response.body().string();
+ WorkWXTokenResponse tokenResponse = objectMapper.readValue(responseBody, WorkWXTokenResponse.class);
+
+ if (tokenResponse.getErrcode() != 0) {
+ log.error("鑾峰彇浼佷笟寰俊access_token澶辫触锛岄敊璇爜: {}, 閿欒淇℃伅: {}",
+ tokenResponse.getErrcode(), tokenResponse.getErrmsg());
+ throw new IOException("鑾峰彇access_token澶辫触: " + tokenResponse.getErrmsg());
+ }
+
+ log.info("鎴愬姛鑾峰彇浼佷笟寰俊access_token锛屾湁鏁堟湡: {}绉�", tokenResponse.getExpiresIn());
+ return tokenResponse.getAccessToken();
+ }
+ }
+
+ @Data
+ private static class WorkWXTokenResponse {
+ private Integer errcode;
+ private String errmsg;
+ @JsonProperty("access_token")
+ private String accessToken;
+ @JsonProperty("expires_in")
+ private Integer expiresIn;
+ }
+}
diff --git a/src/main/java/com/gs/xky/task/ScheduledTasks.java b/src/main/java/com/gs/xky/task/ScheduledTasks.java
index 54567d8..aa13b7a 100644
--- a/src/main/java/com/gs/xky/task/ScheduledTasks.java
+++ b/src/main/java/com/gs/xky/task/ScheduledTasks.java
@@ -20,14 +20,17 @@
private final AtomicBoolean exportTaskRunning = new AtomicBoolean(false);
- /**
- * 姣忎簲鍒嗛挓鎵ц涓�娆�
- * 鑾峰彇璁惧鏈�杩戠殑涓�鏉¤褰�
- */
- @Scheduled(cron = "0 0/5 * * * ?")
- public void getDeviceRealTimeData() {
+// private final XkyService xkyService;
+// private final ApiService apiService;
+// private final MesStaffService staffService;
+// private final DeliveryNoticeService deliveryNoticeService;
+// private final MesInvItemArnService invItemArnService;
+// private final Executor taskExecutor; // 娉ㄥ叆閫氱敤绾跨▼姹�
- }
+ // 鐢ㄤ簬鏍囪鍚勪换鍔℃槸鍚︽鍦ㄦ墽琛�
+// private final AtomicBoolean isDeviceDataRunning = new AtomicBoolean(false);
+// private final AtomicBoolean isCompensateRunning = new AtomicBoolean(false);
+// private final AtomicBoolean isDingTalkRunning = new AtomicBoolean(false);
/**
* 姣忓ぉ涓婂崍9鐐规墽琛�
@@ -57,4 +60,98 @@
}
}
+// /**
+// * 姣忎簲鍒嗛挓鎵ц涓�娆�
+// * 鑾峰彇鍗忓浜戞渶杩戠殑涓�鏉¤褰�
+// */
+// @Scheduled(cron = "0 0/5 * * * ?")
+// public void getDeviceRealTimeData() {
+// // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欒烦杩囨湰娆℃墽琛�
+// if (!isDeviceDataRunning.compareAndSet(false, true)) {
+// log.info("銆恎etDeviceRealTimeData銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
+// return;
+// }
+//
+// log.info("銆恎etDeviceRealTimeData銆戝紑濮嬭幏鍙栬澶囧疄鏃舵暟鎹�");
+//
+// // 浣跨敤寮傛鎵ц锛岄伩鍏嶉樆濉炶皟搴︾嚎绋�
+// CompletableFuture.runAsync(() -> {
+// try {
+// xkyService.GetSaveDetail();
+// log.info("銆恎etDeviceRealTimeData銆戣幏鍙栬澶囧疄鏃舵暟鎹垚鍔�");
+// } catch (IOException e) {
+// log.error("銆恎etDeviceRealTimeData銆戣幏鍙栬澶囧疄鏃舵暟鎹紓甯�: {}", e.getMessage(), e);
+// } finally {
+// isDeviceDataRunning.set(false);
+// }
+// }, taskExecutor);
+// }
+//
+// /**
+// * 瀹氭椂鎵ц琛ュ伩閫昏緫
+// */
+// @Scheduled(cron = "10 3,8,13,18,23,28,33,38,43,48,53,58 * * * ?")
+// public void compensateMethod() {
+// // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欒烦杩囨湰娆℃墽琛�
+// if (!isCompensateRunning.compareAndSet(false, true)) {
+// log.info("銆恈ompensateMethod銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
+// return;
+// }
+//
+// log.info("銆恈ompensateMethod銆戝紑濮嬫墽琛岃ˉ鍋块�昏緫");
+//
+// // 浣跨敤寮傛鎵ц锛岄伩鍏嶉樆濉炶皟搴︾嚎绋�
+// CompletableFuture.runAsync(() -> {
+// try {
+// // 琛ュ伩閫昏緫
+// List<MesInvItemArn> itemArnMinus = invItemArnService.getItemArnMinus();
+// deliveryNoticeService.processMesInvItemArnStatusAsync(itemArnMinus);
+// log.info("銆恈ompensateMethod銆戣ˉ鍋块�昏緫鎵ц鎴愬姛");
+// } catch (Exception e) {
+// log.error("銆恈ompensateMethod銆戣ˉ鍋块�昏緫鎵ц寮傚父: {}", e.getMessage(), e);
+// } finally {
+// isCompensateRunning.set(false);
+// }
+// }, taskExecutor);
+// }
+//
+// /**
+// * 瀹氭椂鑾峰彇閽夐拤鏁版嵁
+// */
+// @Scheduled(cron = "0 0/53 * * * ?")
+// public void getDinTalkData() {
+// // 濡傛灉浠诲姟宸茬粡鍦ㄨ繍琛岋紝鍒欒烦杩囨湰娆℃墽琛�
+// if (!isDingTalkRunning.compareAndSet(false, true)) {
+// log.info("銆恎etDinTalkData銆戜笂涓�娆′换鍔¤繕鍦ㄦ墽琛屼腑锛岃烦杩囨湰娆℃墽琛�");
+// return;
+// }
+//
+// log.info("銆恎etDinTalkData銆戝紑濮嬭幏鍙栭拤閽夋暟鎹�");
+//
+// // 浣跨敤寮傛鎵ц锛岄伩鍏嶉樆濉炶皟搴︾嚎绋�
+// CompletableFuture.runAsync(() -> {
+// try {
+// DingTalkParam dingTalkParam = new DingTalkParam(1);
+// DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse =
+// apiService.sendListRequest(dingTalkParam, EmployeeInfo.class,
+// "http://192.168.1.64/eHR/eHRExternalService/Service.ashx");
+//
+// List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream()
+// .filter(s -> "閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃".equals(s.getCUnitName()))
+// .collect(Collectors.toList());
+//
+// log.info("銆恎etDinTalkData銆戣幏鍙栧埌{}鏉″憳宸ユ暟鎹�", collect.size());
+//
+// List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100);
+// partition.forEach(staffService::UpdateStaff);
+//
+// log.info("銆恎etDinTalkData銆戦拤閽夋暟鎹鐞嗗畬鎴�");
+// } catch (IOException e) {
+// log.error("銆恎etDinTalkData銆戣幏鍙栭拤閽夋暟鎹紓甯�: {}", e.getMessage(), e);
+// } finally {
+// isDingTalkRunning.set(false);
+// }
+// }, taskExecutor);
+// }
+
}
diff --git a/src/test/java/com/gs/xky/XkyApplicationTests.java b/src/test/java/com/gs/xky/XkyApplicationTests.java
index 50450be..994b4bd 100644
--- a/src/test/java/com/gs/xky/XkyApplicationTests.java
+++ b/src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -1,20 +1,12 @@
package com.gs.xky;
-import com.alibaba.fastjson.JSON;
-import com.gs.xky.config.*;
-import com.gs.xky.dto.BarcodeDeliveryNo;
-import com.gs.xky.dto.EmployeeInfo;
-import com.gs.xky.dto.XkyDetail;
-import com.gs.xky.dto.XkyEntity;
-import com.gs.xky.entity.MesInvItemArn;
-import com.gs.xky.service.*;
+import com.gs.xky.service.VwCjScSjTsBbService;
+import com.gs.xky.service.WorkWXService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
-import java.util.List;
-import java.util.stream.Collectors;
@SpringBootTest
class XkyApplicationTests {
@@ -22,6 +14,9 @@
@Autowired
private VwCjScSjTsBbService vwCjScSjTsBbService;
+
+ @Autowired
+ private WorkWXService workWXService;
/**
* 娴嬭瘯瀵煎嚭鐢熶骇鏁版嵁骞跺彂閫侀拤閽夋秷鎭�
@@ -49,4 +44,30 @@
System.out.println("=== 娴嬭瘯缁撴潫 ===");
}
+
+ /**
+ * 娴嬭瘯鑾峰彇浼佷笟寰俊access_token
+ * 鍔熻兘锛氳皟鐢ㄤ紒涓氬井淇PI鑾峰彇access_token
+ */
+ @Test
+ void testGetWorkWXAccessToken() {
+ System.out.println("=== 寮�濮嬫祴璇曡幏鍙栦紒涓氬井淇ccess_token ===");
+
+ try {
+ String accessToken = workWXService.getAccessToken();
+
+ if (accessToken != null && !accessToken.isEmpty()) {
+ System.out.println("鉁� 鎴愬姛鑾峰彇浼佷笟寰俊access_token");
+ System.out.println(" - access_token: " + accessToken);
+ System.out.println(" - token闀垮害: " + accessToken.length());
+ } else {
+ System.out.println("鉁� 鑾峰彇鐨刟ccess_token涓虹┖");
+ }
+ } catch (IOException e) {
+ System.out.println("鉁� 鑾峰彇access_token澶辫触: " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ System.out.println("=== 娴嬭瘯缁撴潫 ===");
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3