2025-02-08 14:45:56 +08:00
|
|
|
|
package com.dpkj.common.utils;
|
|
|
|
|
|
2025-02-08 15:40:47 +08:00
|
|
|
|
import com.alibaba.fastjson.JSON;
|
2025-02-08 17:20:50 +08:00
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
2025-02-08 14:45:56 +08:00
|
|
|
|
import com.dpkj.common.dto.LexMarkDTO;
|
|
|
|
|
import com.dpkj.common.dto.LexMarkResultDTO;
|
|
|
|
|
import com.dpkj.common.exception.RRException;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
2025-02-08 17:20:50 +08:00
|
|
|
|
import org.thymeleaf.util.StringUtils;
|
2025-02-08 14:45:56 +08:00
|
|
|
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.DataOutputStream;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
2025-02-08 15:40:47 +08:00
|
|
|
|
|
2025-02-08 14:45:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 第三方服务,主要是调用打印机等
|
|
|
|
|
*
|
|
|
|
|
* @author <a href="https://gitee.com/shi-chongli">石头人</a>
|
|
|
|
|
* @version 1.0
|
|
|
|
|
* @since 2025-02-08 10:45:01
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Component
|
|
|
|
|
public class ThirdService {
|
|
|
|
|
|
|
|
|
|
@Value("${app.custom.lexMarkServiceIp}")
|
|
|
|
|
private String lexMarkServiceIp;
|
|
|
|
|
@Value("${app.custom.lexMarkServicePort}")
|
|
|
|
|
private String lexMarkServicePort;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 利盟台式机-立体机 接口请求
|
2025-02-08 17:20:50 +08:00
|
|
|
|
*
|
2025-02-08 14:45:56 +08:00
|
|
|
|
* @param lexMarkDTO 请求DTO
|
|
|
|
|
* @return result
|
|
|
|
|
*/
|
2025-02-08 17:20:50 +08:00
|
|
|
|
public <T> LexMarkResultDTO<T> callDevice(LexMarkDTO lexMarkDTO, Class<T> clazz) {
|
2025-02-08 14:45:56 +08:00
|
|
|
|
try {
|
|
|
|
|
URL url = new URL(lexMarkServiceIp + ":" + lexMarkServicePort + "/CallDevice");
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
connection.setRequestMethod("POST");
|
|
|
|
|
connection.setDoOutput(true);
|
2025-02-08 15:40:47 +08:00
|
|
|
|
connection.setRequestProperty("Content-Type", "application/json");
|
2025-02-08 14:45:56 +08:00
|
|
|
|
|
|
|
|
|
// 将LexMarkDTO对象转换为JSON字符串
|
2025-02-08 15:40:47 +08:00
|
|
|
|
String jsonInputString = JSON.toJSONString(lexMarkDTO);
|
2025-02-08 14:45:56 +08:00
|
|
|
|
try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) {
|
|
|
|
|
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
|
|
|
|
|
wr.write(input, 0, input.length);
|
2025-02-08 15:40:47 +08:00
|
|
|
|
log.info(jsonInputString);
|
2025-02-08 14:45:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int responseCode = connection.getResponseCode();
|
2025-02-08 17:20:50 +08:00
|
|
|
|
if (responseCode != HttpURLConnection.HTTP_OK) {
|
2025-02-08 14:45:56 +08:00
|
|
|
|
log.error("利盟服务请求失败,响应码:{},请求参数:{}", responseCode, lexMarkDTO);
|
|
|
|
|
throw new RRException("利盟服务请求失败,响应码:" + responseCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
|
|
|
String inputLine;
|
|
|
|
|
StringBuilder response = new StringBuilder();
|
2025-02-08 17:20:50 +08:00
|
|
|
|
while ((inputLine = in.readLine()) != null) {
|
2025-02-08 14:45:56 +08:00
|
|
|
|
response.append(inputLine);
|
|
|
|
|
}
|
|
|
|
|
in.close();
|
|
|
|
|
|
|
|
|
|
// 将响应JSON字符串转换为LexMarkResultDTO对象
|
2025-02-08 17:20:50 +08:00
|
|
|
|
LexMarkResultDTO<T> lexMarkResultDTO = JSON.parseObject(response.toString(), LexMarkResultDTO.class);
|
|
|
|
|
if (lexMarkResultDTO.getResult() != 0) {
|
2025-02-08 15:40:47 +08:00
|
|
|
|
log.error("利盟服务请求出错:{}", lexMarkResultDTO);
|
|
|
|
|
throw new RRException(lexMarkResultDTO.toString());
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-08 17:20:50 +08:00
|
|
|
|
// 实例化param位data
|
|
|
|
|
String param = lexMarkResultDTO.getParam();
|
|
|
|
|
if (!StringUtils.isEmpty(param)) {
|
|
|
|
|
try {
|
|
|
|
|
T t = JSON.parseObject(param, clazz);
|
|
|
|
|
lexMarkResultDTO.setData(t);
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
log.error("类型转换失败");
|
|
|
|
|
throw new RRException("转换param位data时,类型与实际类型不匹配");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-08 15:40:47 +08:00
|
|
|
|
return lexMarkResultDTO;
|
2025-02-08 17:20:50 +08:00
|
|
|
|
} catch (Exception e) {
|
2025-02-08 14:45:56 +08:00
|
|
|
|
log.error("利盟服务请求失败:{}", lexMarkDTO, e);
|
2025-02-08 17:20:50 +08:00
|
|
|
|
if (e instanceof RRException) {
|
2025-02-08 15:40:47 +08:00
|
|
|
|
throw new RRException(((RRException) e).getCode(), e.getMessage());
|
|
|
|
|
}
|
2025-02-08 14:45:56 +08:00
|
|
|
|
throw new RRException("利盟服务请求失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-08 17:20:50 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 数据对象的data采用JSONObject进行接收
|
|
|
|
|
*
|
|
|
|
|
* @param lexMarkDTO 请求参数
|
|
|
|
|
* @return result
|
|
|
|
|
*/
|
|
|
|
|
public LexMarkResultDTO<JSONObject> callDevice(LexMarkDTO lexMarkDTO) {
|
|
|
|
|
return callDevice(lexMarkDTO, JSONObject.class);
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-08 14:45:56 +08:00
|
|
|
|
}
|
|
|
|
|
|