yixindibang/measurement/src/main/java/com/ruoyi/webApi/ApiTask.java

237 lines
9.1 KiB
Java
Raw Normal View History

2025-06-05 08:47:33 +00:00
package com.ruoyi.webApi;
import com.alibaba.fastjson2.JSONObject;
2025-06-13 02:46:08 +00:00
import com.ruoyi.common.core.domain.entity.SysDictData;
2025-06-05 08:47:33 +00:00
import com.ruoyi.system.service.ISysConfigService;
2025-06-13 02:46:08 +00:00
import com.ruoyi.system.service.ISysDictTypeService;
2025-06-05 08:47:33 +00:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
2025-06-13 02:46:08 +00:00
import java.util.List;
2025-06-05 08:47:33 +00:00
/**
* @author 16358
* @date 2025/6/5
*/
@Component("apiTask")
public class ApiTask {
@Autowired
private ISysConfigService sysConfigService;
2025-06-13 02:46:08 +00:00
@Autowired
private ISysDictTypeService dictTypeService;
2025-06-05 08:47:33 +00:00
//登录星空接口
public String OAlogin(){
// 目标URL
String url = sysConfigService.selectConfigByKey("OA_Url")+"/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
// 请求体JSON格式
String jsonInputString = sysConfigService.selectConfigByKey("login_JSON");
try {
// 创建URL对象
URL apiUrl = new URL(url);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
// 设置请求方法为POST
connection.setRequestMethod("POST");
// 设置请求头
// Content-Type 指定发送的数据格式是JSON并且字符集为UTF-8
connection.setRequestProperty("Content-Type", "application/json; utf-8");
// Accept 指定期望接收的数据格式是JSON
connection.setRequestProperty("Accept", "application/json");
// 允许写入请求体
connection.setDoOutput(true);
// 获取输出流,发送请求体数据
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// 获取响应码
int responseCode = connection.getResponseCode();
// 读取响应内容
StringBuilder response = new StringBuilder();
try (BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "utf-8"))) {
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
return response.toString();
}catch (Exception e) {
throw new RuntimeException("因未知原因导致登录OA系统失败");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
//判断是否登录成功并返回token
public String getToken(){
//触发登录接口
String response = OAlogin();
// 解析响应体为 JSONObject
JSONObject jsonResponse = JSONObject.parseObject(response.toString());
// 提取 "Message" 字段
if (jsonResponse != null && !jsonResponse.containsKey("")) {
String loginResultType = jsonResponse.getString("LoginResultType");
if("1".equals(loginResultType)){
return jsonResponse.getString("KDSVCSessionId");
}else {
throw new RuntimeException(jsonResponse.getString("Message"));
}
} else {
throw new RuntimeException("返回参数解析错误!");
}
}
//测试任务
public void testTAS(){
String token = getToken();
System.out.println(token);
}
2025-06-13 02:46:08 +00:00
//定时任务拉取星空数据(发货通知单,收料通知单,调拨申请单,简单生产入库)
public void getOAData(){
//获取各个单据的单据id
List<SysDictData> oaFormid = dictTypeService.selectDictDataByType("oa_formid");
//记录错误日志
int errorCount = 1;
StringBuilder errorLog = new StringBuilder();
//循环调用接口 获取数据
try {
for (SysDictData sysDictData : oaFormid) {
String dictValue = sysDictData.getDictValue();
String oaData = getOAData(dictValue);
System.out.println(oaData);
if (oaData != null && !oaData.isEmpty()){
if (oaData.contains("ErrorCode")){
errorLog.append(errorCount++ + ""+ "获取"+ sysDictData.getDictLabel() + "数据失败!:" + oaData + "\n");
}else{
//保存数据
switch (dictValue){
case "SAL_DELIVERYNOTICE":
//保存数据
makePoundAppliFormData(dictValue);
break;
case "PUR_ReceiveBill":
//保存数据
makePoundAppliFormData(dictValue);
break;
case "STK_TRANSFERAPPLY":
//保存数据
makeMainPoundFormData(dictValue);
break;
case "SP_InStock":
//保存数据
makeMainPoundFormData(dictValue);
break;
default:
errorLog.append(errorCount++ + ""+ "获取数据失败!: 因未知错误导致返回参数为空!" + "\n");
}
}
}else{
errorLog.append(errorCount++ + ""+ "获取"+ sysDictData.getDictLabel() + "数据失败!: 因未知错误导致返回参数为空!" + "\n");
}
}
}catch (Exception e){
errorLog.append(errorCount++ + ""+ "获取数据失败!: " + e.getMessage() + "\n");
}
if (errorCount > 1){
throw new RuntimeException(errorLog.toString());
}
}
//调用OA系统接口拉取各个单据的数据
public String getOAData(String dictValue){
// 目标URL
String url = sysConfigService.selectConfigByKey("OA_Url")+"/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
//记录错误日志
StringBuilder errorLog = new StringBuilder();
try {
// 构建请求体,包含参数
String jsonInputString = sysConfigService.selectConfigByKey(dictValue+"_raw");
// 创建URL对象
URL apiUrl = new URL(url);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
// 设置请求方法为POST
connection.setRequestMethod("POST");
// 设置请求头
// Content-Type 指定发送的数据格式是JSON并且字符集为UTF-8
connection.setRequestProperty("Content-Type", "application/json; utf-8");
// Accept 指定期望接收的数据格式是JSON
connection.setRequestProperty("Accept", "application/json");
// 设置请求头包含token
String token = getToken();
if (token != null && !token.isEmpty()) {
connection.setRequestProperty("kdservice-sessionid", token);
} else {
throw new RuntimeException("获取到的Token为空无法设置请求头。");
}
// 允许写入请求体
connection.setDoOutput(true);
// 获取输出流,发送请求体数据
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// 获取响应码
int responseCode = connection.getResponseCode();
// 读取响应内容
StringBuilder response = new StringBuilder();
try (BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "utf-8"))) {
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
return response.toString();
}catch (Exception e) {
// throw new RuntimeException("因未知原因导致获取数据失败!");
errorLog.append("因未知原因导致获取数据失败!\n");
}
} catch (IOException e) {
// throw new RuntimeException(e);
errorLog.append("获取数据失败!: " + e.getMessage()+ "\n");
}
return errorLog.toString();
}
//保存星空数据为中台<过磅申请>数据
public void makePoundAppliFormData(String formid){
}
//保存星空数据为中台<主榜单>数据
public void makeMainPoundFormData(String formid){
}
2025-06-05 08:47:33 +00:00
}