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

101 lines
3.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.webApi;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.bill.domain.PoundBill;
import com.ruoyi.bill.service.IPoundBillService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.webApi.billHandlerUtil.BillHandler;
import com.ruoyi.webApi.billHandlerUtil.BillHandlers;
import com.ruoyi.webApi.requestbody.DynamicFormRequest;
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;
import java.nio.charset.StandardCharsets;
/**
* 各个单据回传星空接口(单据更新,单据下推)
* @author 16358
* @date 2025/6/16
*/
@Component("apiPostBack")
public class ApiPostBack {
@Autowired
private ISysConfigService sysConfigService;
@Autowired
private ApiTask apiTask;
@Autowired
private IPoundBillService poundBillService;
private static final ObjectMapper objectMapper = new ObjectMapper();
public String makePoundBillFormData(String id) throws IOException {
PoundBill poundBill = poundBillService.selectPoundBillById(id);
if (poundBill == null) throw new RuntimeException("磅单不存在!");
String url = sysConfigService.selectConfigByKey("OA_Url") +
"/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.save.common.kdsvc";
BillHandler handler = BillHandlers.getHandler(poundBill.getSrcblltype());
DynamicFormRequest request = handler.buildRequest(poundBill);
String jsonInputString;
try {
jsonInputString = objectMapper.writeValueAsString(request);
} catch (JsonProcessingException e) {
return "JSON序列化失败" + e.getMessage();
}
return sendPostRequest(url, jsonInputString);
}
private String sendPostRequest(String url, String jsonBody) throws IOException {
StringBuilder errorLog = new StringBuilder();
try {
URL apiUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
String token = apiTask.getToken();
if (token == null || token.isEmpty()) {
throw new RuntimeException("获取到的Token为空无法设置请求头。");
}
connection.setRequestProperty("kdservice-sessionid", token);
connection.setDoOutput(true);
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonBody.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader br = new BufferedReader(
new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
return response.toString();
}
} else {
return "请求失败,响应码:" + responseCode;
}
} catch (IOException e) {
return "回传数据失败!: " + e.getMessage();
}
}
}