Browse Source

ifs HttpUtils

master
han\hanst 6 months ago
parent
commit
1a836f9480
  1. 132
      src/main/java/com/gaotao/common/utils/HttpUtils.java
  2. 3
      src/main/java/com/gaotao/modules/po/controller/PoController.java
  3. 3
      src/main/java/com/gaotao/modules/po/service/PoService.java
  4. 55
      src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

132
src/main/java/com/gaotao/common/utils/HttpUtils.java

@ -0,0 +1,132 @@
package com.gaotao.common.utils;
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
public class HttpUtils {
private static final HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(30))
.build();
/**
* 发送 GET 请求支持 Query 参数
*
* @param url 请求 URL
* @param params 查询参数可为 null
* @param headers 请求头可为 null
* @return 响应字符串
*/
public static String doGet(String url, Map<String, String> params, Map<String, String> headers) {
try {
if (params != null && !params.isEmpty()) {
String query = buildQueryString(params);
url = url + "?" + query;
}
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(60))
.GET();
if (headers != null) {
headers.forEach(builder::header);
}
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
return handleResponse(response);
} catch (IOException | InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("GET 请求失败: " + e.getMessage(), e);
}
}
/**
* 发送 GET 请求携带 JSON Body非标准谨慎使用
*
* @param url 请求 URL
* @param jsonBody JSON 字符串
* @param headers 请求头可为 null
* @return 响应字符串
*/
public static String doGetWithBody(String url, String jsonBody, Map<String, String> headers) {
try {
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(60))
.method("GET", HttpRequest.BodyPublishers.ofString(jsonBody))
.header("Content-Type", "application/json");
if (headers != null) {
headers.forEach(builder::header);
}
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
return handleResponse(response);
} catch (IOException | InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("GET (JSON Body) 请求失败: " + e.getMessage(), e);
}
}
/**
* 发送 POST 请求JSON Body
*
* @param url 请求 URL
* @param jsonBody JSON 字符串
* @param headers 请求头可为 null
* @return 响应字符串
*/
public static String doPost(String url, String jsonBody, Map<String, String> headers) {
try {
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(60))
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.header("Content-Type", "application/json");
if (headers != null) {
headers.forEach(builder::header);
}
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
return handleResponse(response);
} catch (IOException | InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("POST 请求失败: " + e.getMessage(), e);
}
}
/** 构建查询参数字符串 */
private static String buildQueryString(Map<String, String> params) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append("=")
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8))
.append("&");
}
if (!params.isEmpty()) {
sb.deleteCharAt(sb.length() - 1); // 去掉最后一个 "&"
}
return sb.toString();
}
/** 统一处理响应 */
private static String handleResponse(HttpResponse<String> response) {
int statusCode = response.statusCode();
if (statusCode == 200) {
return response.body();
} else {
throw new RuntimeException("HTTP 错误: " + statusCode + ", 响应: " + response.body());
}
}
}

3
src/main/java/com/gaotao/modules/po/controller/PoController.java

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RequestMapping("po")
@RestController
@ -23,7 +24,7 @@ public class PoController extends AbstractController {
@PostMapping("getPoList")
public R getPoList(@RequestBody PurchaseOrderDto purchaseOrder){
List<PurchaseOrderDto> list = poService.getPoList(purchaseOrder);
List<Map<String, Object>> list = poService.getPoList(purchaseOrder);
return R.ok().put("rows",list);
}

3
src/main/java/com/gaotao/modules/po/service/PoService.java

@ -6,10 +6,11 @@ import com.gaotao.modules.po.entity.PurchaseOrderDto;
import com.gaotao.modules.trans.entity.TransDetailDto;
import java.util.List;
import java.util.Map;
public interface PoService extends IService<PurchaseOrder> {
List<PurchaseOrderDto> getPoList(PurchaseOrderDto accessSite);
List<Map<String, Object>> getPoList(PurchaseOrderDto accessSite);
public void saveTrans(TransDetailDto indata);

55
src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

@ -2,11 +2,10 @@ package com.gaotao.modules.po.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gaotao.common.exception.XJException;
import com.gaotao.common.utils.AgvClientUtil;
import com.gaotao.common.utils.HttpClientUtil;
import com.gaotao.common.utils.IfsClientUtil;
import com.gaotao.common.utils.ResponseData;
import com.gaotao.common.utils.*;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
@ -66,33 +65,35 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
private String wcsUrl;
@Override
public List<PurchaseOrderDto> getPoList(PurchaseOrderDto purchaseOrder) {
public List<Map<String, Object>> getPoList(PurchaseOrderDto purchaseOrder) {
try {
// 调用IFS接口获取PO数据
JSONObject ifsRequest = new JSONObject();
ifsRequest.put("ifsDBName", "IFSTEST");
ifsRequest.put("domainUserID", "CCL_WMS");
ifsRequest.put("ifsSiteID", "55");
ifsRequest.put("poNumber", purchaseOrder.getPoNumber());
ifsRequest.put("partNo", purchaseOrder.getPartNo());
ifsRequest.put("status", "RELEASED"); // 只获取已发布的PO
log.info("调用IFS获取PO数据,请求参数: {}", ifsRequest);
// 使用IfsClientUtil获取PO数据
// 注意这里应该根据实际的IFS接口调用方式进行调整
// 如果需要获取多行数据可能需要先获取PO头再获取行数据
//ResponseData ifsResponse = ifsClientUtil.getPurchaseOrder("po00001");
ResponseData ifsResponse = testIfsClientUtil(); // 测试用实际使用时替换为上面的调用
if (ifsResponse != null && "SUCCESS".equals(ifsResponse.getCode())) {
// 解析IFS返回的PO数据
return parseIFSPOData(ifsResponse.getObj());
} else {
log.error("从IFS获取PO数据失败: {}", ifsResponse);
throw new XJException("从IFS获取PO数据失败");
}
Map<String, Object> params = Map.of(
"ifsDBName", "UPD24",
"domainUserID", "CCL_WMS",
"ifsSiteID", "55",
"ifsPurchaseOrderNo", purchaseOrder.getPoNumber()
);
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(params);
String ifsResponse = HttpUtils.doGetWithBody("https://cclifswebservice.ccldesign.com/api/v1/PurchaseOrderLine",jsonBody,null);
ObjectMapper mapper = new ObjectMapper();
/*Map<String, Object> params2 = Map.of(
"ifsDBName", "UPD24",
"domainUserID", "CCL_WMS",
"ifsSiteID", "55",
"partNo", "80900095-1DF",
"qtyToIssue", 10,
"locationNo", "DF1FT0101",
"destLocationNo", "DF1RS0202",
"lotBatchNo", "2883779-*-*-1"
);
String jsonBody2 = objectMapper.writeValueAsString(params2);
String ifsResponse2 = HttpUtils.doPost("https://cclifswebservice.ccldesign.com/api/v1/MoveInventoryPart",jsonBody2,null);*/
return mapper.readValue(ifsResponse, new TypeReference<List<Map<String, Object>>>() {});
} catch (Exception e) {
log.error("获取PO列表异常: {}", e.getMessage());
throw new XJException("获取PO列表失败: " + e.getMessage());

Loading…
Cancel
Save