diff --git a/ensign-module-crm/ensign-module-crm-biz/pom.xml b/ensign-module-crm/ensign-module-crm-biz/pom.xml
index cba004a..b5136d4 100644
--- a/ensign-module-crm/ensign-module-crm-biz/pom.xml
+++ b/ensign-module-crm/ensign-module-crm-biz/pom.xml
@@ -55,6 +55,12 @@
${revision}
+
+ com.ensign
+ ensign-module-system-biz
+ ${revision}
+
+
com.ensign
ensign-spring-boot-starter-redis
diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ProxyController.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ProxyController.java
index 952a4d0..c0d26f3 100644
--- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ProxyController.java
+++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ProxyController.java
@@ -1,40 +1,20 @@
package com.ensign.crm.module.crm.controller.crm;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
-import com.ensign.crm.module.crm.exception.AllKingdeeException;
+import com.ensign.crm.module.crm.service.ProxyService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.http.HttpMethod;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
-import org.springframework.http.client.ClientHttpRequest;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.util.StreamUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.net.URI;
import java.net.URISyntaxException;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
/**
* @Description: TODO
@@ -49,210 +29,14 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public class ProxyController {
- @Value("${ensign.kingdee.is-public}")
- private Boolean isPublic;
-
- @Value("${ensign.kingdee.test-public-end-point}")
- private String testPublicEndPoint;
-
- @Value("${ensign.kingdee.test-inner-end-point}")
- private String testInnerEndPoint;
-
- @Value("${ensign.kingdee.prod-public-end-point}")
- private String prodPublicEndPoint;
-
- @Value("${ensign.kingdee.prod-inner-end-point}")
- private String prodInnerEndPoint;
-
- @Value("${ensign.kingdee.env}")
- private String env;
-
- private final String redisKingdeeKey = "kingdee:accessToken";
-
- @Resource
- private RedisTemplate redisTemplate;
+ @Autowired
+ private ProxyService proxyService;
@RequestMapping(value = "/do/**", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Operation(summary = "转发接口")
@PreAuthorize("@ss.hasPermission('crm:proxy:all')")
public void proxy(HttpServletRequest request, HttpServletResponse response) throws IOException, URISyntaxException {
- URI uri = new URI(request.getRequestURI());
- String path = uri.getPath();
- String query = request.getQueryString();
- String target = initBasePath() + path.replace("/crm-api/proxy/do", "");
- if (query != null && !query.isEmpty() && !query.equals("null")) {
- target = target + "?" + query;
- }
- URI newUri = new URI(target);
-
- log.info("================request kingdee start================");
- log.info("Request Parameters:");
- log.info("URI: {}", newUri);
- log.info("Method: {}", request.getMethod());
-
- // 执行代理查询
- String methodName = request.getMethod();
- HttpMethod httpMethod = HttpMethod.resolve(methodName);
- if (httpMethod == null) {
- return;
- }
- ClientHttpRequest delegate = new SimpleClientHttpRequestFactory().createRequest(newUri, httpMethod);
- Enumeration headerNames = request.getHeaderNames();
- // 设置请求头
- while (headerNames.hasMoreElements()) {
- String headerName = headerNames.nextElement();
- Enumeration v = request.getHeaders(headerName);
- List arr = new ArrayList<>();
- while (v.hasMoreElements()) {
- arr.add(v.nextElement());
- }
- log.info("Header: {}: {}", headerName, arr);
- delegate.getHeaders().addAll(headerName, arr);
- }
- try {
- String accessToken = initAccessToken();
- delegate.getHeaders().add("access_token", accessToken);
- log.info("Header: access_token: {}", accessToken);
- } catch (AllKingdeeException e) {
- log.error("获取accessToken时失败:{}", e.getMessage());
- log.info("================request kingdee end================");
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType("application/json");
- response.setCharacterEncoding("UTF-8");
- Map body = new HashMap<>();
- body.put("status", false);
- body.put("message", e.getMessage());
- response.getWriter().println(JSONUtil.toJsonStr(body));
- response.getWriter().flush();
- return;
- }
- StreamUtils.copy(request.getInputStream(), delegate.getBody());
- // 执行远程调用
- ClientHttpResponse clientHttpResponse = delegate.execute();
- log.info("Response Status: {}", clientHttpResponse.getStatusCode().value());
- clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> {
- log.info("Response Header: {}: {}", key, it);
- }));
-
- response.setStatus(clientHttpResponse.getStatusCode().value());
- // 设置响应头
- clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> {
- response.setHeader(key, it);
- }));
- log.info("================request kingdee end================");
- StreamUtils.copy(clientHttpResponse.getBody(), response.getOutputStream());
+ proxyService.doProxy(request, response);
}
- private String initAccessToken() throws IOException, AllKingdeeException {
- String accessToken = redisTemplate.opsForValue().get(redisKingdeeKey);
- if (accessToken != null && !accessToken.isEmpty()) {
- return accessToken;
- }
-
- final String END_POINT = initBasePath() + "/ierp/api/getAppToken.do";
- HttpClient client = new DefaultHttpClient();
-
- HttpPost post = new HttpPost(END_POINT);
-
- Map body = new HashMap<>();
-
- body.put("appId", "CRM");
- body.put("appSecuret", "yx.CRM.tksecurit@240924");
- body.put("tenantid", "yxzg-topview-dev");
- body.put("accountId", "1878420900609526784");
- body.put("language", "zh_CN");
-
- HttpEntity reqEntity = new StringEntity(JSONUtil.toJsonStr(body), "utf-8");
-
- post.setEntity(reqEntity);
- post.setConfig(initRequestConfig());
- HttpResponse response = client.execute(post);
- if (response.getStatusLine().getStatusCode() == 200) {
-
- HttpEntity resEntity = response.getEntity();
- String responseData = EntityUtils.toString(resEntity, "utf-8");
- JSONObject jsonObject = JSONUtil.parseObj(responseData);
- Boolean status = (Boolean) jsonObject.get("status");
- String state = (String) jsonObject.get("state");
- if (status && "success".equals(state)) {
- JSONObject data = (JSONObject) jsonObject.get("data");
- String appToken = (String) data.get("app_token");
- if (appToken != null && !appToken.isEmpty()) {
- return doGetAccessToken(appToken);
- }
- }
- }
- throw new AllKingdeeException("获取AppToken失败");
- }
-
- private String doGetAccessToken(String appToken) throws IOException, AllKingdeeException {
-
- HttpClient client = new DefaultHttpClient();
-
- HttpPost post = new HttpPost(initBasePath() + "/ierp/api/login.do");
-
- Map body = new HashMap<>();
-
- body.put("user", "COSMIC");
- body.put("apptoken", appToken);
- body.put("tenantid", "yxgz-prod");
- body.put("accountId", "1878420900609526784");
- body.put("language", "zh_CN");
- body.put("usertype", "UserName");
-
- HttpEntity reqEntity = new StringEntity(JSONUtil.toJsonStr(body), "utf-8");
-
- post.setEntity(reqEntity);
- post.setConfig(initRequestConfig());
- HttpResponse response = client.execute(post);
-
- if (response.getStatusLine().getStatusCode() == 200) {
-
- HttpEntity resEntity = response.getEntity();
- String responseData = EntityUtils.toString(resEntity, "utf-8");
- JSONObject jsonObject = JSONUtil.parseObj(responseData);
- Boolean status = (Boolean) jsonObject.get("status");
- String state = (String) jsonObject.get("state");
-
- if (status && "success".equals(state)) {
- JSONObject data = (JSONObject) jsonObject.get("data");
- String accessToken = (String) data.get("access_token");
- if (accessToken != null && !accessToken.isEmpty()) {
-
- Long expireTime = (Long) data.get("expire_time");
- redisTemplate.opsForValue().set(redisKingdeeKey, accessToken, expireTime / 1000 - 3000, TimeUnit.MICROSECONDS);
- return accessToken;
- }
- }
- }
- throw new AllKingdeeException("获取AccessToken失败");
- }
-
- public RequestConfig initRequestConfig() {
- return RequestConfig.custom()
- .setConnectTimeout(5000)//一、连接超时:connectionTimeout-->指的是连接一个url的连接等待时间
- .setSocketTimeout(5000)// 二、读取数据超时:SocketTimeout-->指的是连接上一个url,获取response的返回等待时间
- .setConnectionRequestTimeout(5000)
- .build();
- }
-
- public String initBasePath() {
- if ("test".equals(env)) {
- if (isPublic) {
- return testPublicEndPoint;
- } else {
- return testInnerEndPoint;
- }
- }
-
- if ("prod".equals(env)) {
- if (isPublic) {
- return prodPublicEndPoint;
- } else {
- return prodInnerEndPoint;
- }
- }
-
- return "";
- }
}
diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java
index cf663fe..a4d8d4c 100644
--- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java
+++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/job/UserSyncKingdeeTask.java
@@ -1,10 +1,24 @@
package com.ensign.crm.module.crm.job;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ensign.crm.framework.quartz.core.handler.JobHandler;
import com.ensign.crm.framework.tenant.core.aop.TenantIgnore;
+import com.ensign.crm.module.crm.exception.AllKingdeeException;
+import com.ensign.crm.module.crm.service.ProxyService;
+import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO;
+import com.ensign.crm.module.system.dal.mysql.user.AdminUserMapper;
+import com.ensign.crm.module.system.service.user.AdminUserService;
import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
/**
* @Description: TODO
* @Date: 2024/9/26 14:06
@@ -16,10 +30,49 @@ import org.springframework.stereotype.Component;
public class UserSyncKingdeeTask implements JobHandler {
+ @Autowired
+ private AdminUserMapper userMapper;
+
+ @Autowired
+ private ProxyService proxyService;
@Override
@TenantIgnore
public String execute(String param) throws Exception {
- return "";
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(AdminUserDO::getStatus, 0)
+ .eq(AdminUserDO::getIsSyncKingdee, 1);
+ List users = userMapper.selectList(queryWrapper);
+ List