Эх сурвалжийг харах

【华信科】【富勒WMS对接】【XML方式对接】

wuyx 7 сар өмнө
parent
commit
d603d8cb4d

+ 11 - 0
pom.xml

@@ -175,6 +175,17 @@
 			<artifactId>open-sdk</artifactId>
 			<version>1.0.5.2</version>
 		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>2.9.8</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-xml</artifactId>
+			<version>2.9.8</version>
+		</dependency>
+
 		<dependency>
 			<groupId>org.junit.jupiter</groupId>
 			<artifactId>junit-jupiter</artifactId>

+ 28 - 0
src/main/java/com/uas/eis/utils/HttpUtil.java

@@ -995,6 +995,34 @@ public class HttpUtil {
 		return Response.getResponse(response);
 	}
 
+	public static byte[] postXmlToVWMS(String method,  String xml, String encoding,VwmsConfig vwmsConfig) throws Exception {
+		byte[] data = xml.getBytes(encoding);
+		String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+		//"{secretkey}app_key{app_key}customerId{customerId}formatjsonmethod{openapi_name}sign_methodmd5timestamp2015-04-26 00:00:07v2.0{body}{secretkey}";
+		String signMsg= String.format("%sapp_key%scustomerId%sformatjsonmethod%ssign_methodmd5timestamp%sv2.0%s%s",
+				vwmsConfig.getAppSecret(),vwmsConfig.getAppKey(), vwmsConfig.getCustomerId(),method,timestamp,xml,vwmsConfig.getAppSecret() );
+		StringBuilder postUrl = new StringBuilder(vwmsConfig.getApiUrl());
+		postUrl.append("?method=").append(method)
+				.append("&timestamp=").append(System.currentTimeMillis()).append("&format=xml").append("&app_key=").append(vwmsConfig.getAppKey())
+				.append("&v=2.0")
+				.append("&_signature=").append(HmacUtils.encode(signMsg, vwmsConfig.getAppSecret()))	// 对请求串进行签名
+				.append("&sign_method=md5").append("&customerId=").append(vwmsConfig.getCustomerId());
+		URL url = new URL(postUrl.toString());
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		conn.setRequestMethod("POST");
+		conn.setDoOutput(true);
+		conn.setRequestProperty("Content-Type", "text/xml; charset=" + encoding);
+		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
+		conn.setConnectTimeout(5 * 1000);
+		OutputStream outStream = conn.getOutputStream();
+		outStream.write(data);
+		outStream.flush();
+		outStream.close();
+		if (conn.getResponseCode() == HttpStatus.OK.value()) {
+			return read2Byte(conn.getInputStream());
+		}
+		return null;
+	}
 	public static class Response {
 		private int statusCode;
 		private String responseText;

+ 89 - 6
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,28 +1,111 @@
 package com.uas.eis;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sun.xml.internal.bind.v2.util.XmlFactory;
+import com.uas.eis.config.VwmsConfig;
 import com.uas.eis.dao.*;
+import com.uas.eis.entity.vwms.req.BaseItemsReq;
+import com.uas.eis.entity.vwms.req.BaseReq;
+import com.uas.eis.entity.vwms.req.ProductReq;
+import com.uas.eis.entity.vwms.resp.BaseVastResp;
 import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.CollectionUtil;
+import com.uas.eis.utils.HttpUtil;
+import com.uas.eis.utils.StringUtil;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.util.*;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.InflaterOutputStream;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {UasEisApplication.class})
 public class UasEisApplicationTests {
+	private final Logger logger = LoggerFactory.getLogger(this.getClass());
 //	@Autowired
 //	private BaseDao baseDao;
+	@Autowired
+	private ObjectMapper objectMapper;  // 注入Jackson的ObjectMapper
 	@Autowired
 	private ERPService erpService;
+	@Autowired
+	private VwmsConfig vwmsConfig;
+	@Test
+	public void testSendProdByXml(){
+		// 设置测试数据
+		List<ProductReq> prodList = new ArrayList<>();
+		// 创建BaseReq对象
+		BaseItemsReq<ProductReq> prodBaseItemsReq = new BaseItemsReq();
+		prodBaseItemsReq.setActionType("add");
+		prodBaseItemsReq.setWarehouseCode(vwmsConfig.getWarehouseCode());
+		prodBaseItemsReq.setOwnerCode(vwmsConfig.getOwnerCode());
+		prodBaseItemsReq.setOutBizCode("sendProd-"+System.currentTimeMillis());
+		// 创建BaseVastItem对象
+		BaseItemsReq.BaseItems prodBaseItems = new BaseItemsReq<ProductReq>().new BaseItems<ProductReq>();
+		// 设置BaseVastItem的item属性
+		ProductReq productReq = new ProductReq.Builder()
+				.itemId("TESTXML")
+				.itemCode("TESTXML")
+				.barCode("TESTXML")
+				.itemName("TESTXML")
+				.goodsCode("TESTXML")
+				.brandName("TESTXML")
+				.categoryName("TESTXML")
+				.stockUnit("")
+				.ExtendProps(new ProductReq.ExtendProps() {{
+					setKey1("1000.0");
+				}})
+				.build();
+		prodList.add(productReq);
+		prodBaseItems.setItem(prodList);
+		prodBaseItemsReq.setItems(prodBaseItems);
+		// 创建RequestWrapper对象
+		BaseReq<BaseItemsReq<ProductReq>> prodBaseReq = new BaseReq();
+		prodBaseReq.setRequest(prodBaseItemsReq);
+		try {
+			// 将prodBaseReq对象转换为XML字符串
+			// 创建XmlMapper实例
+			XmlMapper xmlMapper = new XmlMapper();
+			String xml = xmlMapper.writeValueAsString(prodBaseReq);
+            logger.info("Request XML: {}", xml);
+
+			// 使用postXml方法发送请求
+			byte[] responseBytes = HttpUtil.postXmlToVWMS("openapi.items.synchronize",xml, "UTF-8",vwmsConfig);
+			String responseText = new String(responseBytes, "UTF-8");
+			System.out.println("responseText:"+responseText);
+			// 处理响应
+			if(responseBytes != null) {
+				// 解析XML响应
+				BaseVastResp baseVastResp = objectMapper.readValue(responseText, BaseVastResp.class);
+				BaseVastResp.Response baseVastRespResponse= baseVastResp.getResponse();
+				if(baseVastRespResponse!=null){
+					//默认成功
+					if("success".equals(baseVastRespResponse.getFlag())){
+						logger.info("response-success code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
+					}else {
+						logger.info("response-failure code: {} message: {}", baseVastRespResponse.getCode(),baseVastRespResponse.getMessage());
+						//不一定全部失败,此处只会返回失败提示
+						BaseVastResp.Items items = baseVastRespResponse.getItems();
+						if(items!=null&&!CollectionUtil.isEmpty(items.getItem())){
+							for (BaseVastResp.Item item : items.getItem()) {
+								logger.info("response-failure-item code: {} message: {}", item.getItemCode(),item.getMessage());
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
 	@Test
 	public void testSendProd(){
 		// 设置测试数据