package com.kmall.admin.haikong.client; import cn.hutool.core.date.DateUtil; import com.kmall.admin.haikong.config.HaiKongProperties; import com.kmall.admin.haikong.constant.HaiKongWareSystemUrlEnum; import com.kmall.admin.haikong.dto.Criteria; import com.kmall.admin.haikong.dto.WareQueryStockParamDTO; import com.kmall.admin.haikong.utils.OkHttpUtils; import com.kmall.admin.haikong.utils.WareSysSignUtils; import com.kmall.admin.haikong.utils.XmlUtils; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 对接海控的仓库系统 * @author lhm * @createDate 2021-10-29 */ @Component public class HaiKongWarehouseTemplate { private static final Logger log = LoggerFactory.getLogger(HaiKongWarehouseTemplate.class); @Autowired private HaiKongProperties haiKongProperties; /** * 获取海控保税仓的仓库库存 * @param wareQueryStockParamDTO 请求数据 * @return 响应数据 */ public String queryWarehouseStock(WareQueryStockParamDTO wareQueryStockParamDTO) throws Exception { String xmlStr = null; try { xmlStr = XmlUtils.toXml(wareQueryStockParamDTO, false); } catch (Exception e) { log.error("请求一步达仓库系统格式化请求数据错误!", e); throw new Exception(e); } String url = haiKongProperties.getWareUrl() + "?method=" + HaiKongWareSystemUrlEnum.QUERY_INVENTORY.getDomain() + "&format=xml" + "&sign_method=md5" + "&customerId=" + haiKongProperties.getWareCustomerId() + "×tamp=" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") + "&app_key=" + haiKongProperties.getWareAppId() + "&v=1.0"; String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, haiKongProperties.getWareAppSecret()); Request.Builder builder = new Request.Builder(); RequestBody requestBody = RequestBody.create(MediaType.parse(org.springframework.http.MediaType.TEXT_XML_VALUE), xmlStr); String response = ""; try { Request request = builder.post(requestBody) .url(signUrl) .build(); response = OkHttpUtils.retry(request, 3); log.info("请求一步达仓库系统查询库存成功!响应:{}", response); } catch (Exception e) { log.error("请求一步达仓库系统出现错误!", e); throw new Exception(e); } return response; } public static void main(String[] args) throws Exception { // 公司编码 = '44048600Y8' // 仓库编码 = '20' // 店铺编码 = 'wxe186e23f5a8f0dbf' // appKey = 'GREE' // customerId = 'GREE1001' // secretKey = 'GREE1001' // 正式环境地址:http://yjapi.highstore.cn:8202/esbcenter/api/esb String url = "http://yjapi.highstore.cn:8202/esbcenter/api/esb"; url += "?method=inventory.query"; url += "&format=xml"; url += "&sign_method=md5"; url += "&customerId=GREE1001"; url += "×tamp=" + DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); url += "&app_key=GREE"; url += "&v=1.0"; WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO(); List criteriaList = new ArrayList<>(); Criteria criteria = new Criteria(); criteria.setImperfectGrade("a"); criteria.setInventoryType("SY"); criteria.setItemCode("708177112730"); // criteria.setItemId(""); criteria.setOwnerCode("44048600Y8"); criteria.setWarehouseCode("20"); Criteria criteria1 = new Criteria(); criteria1.setImperfectGrade("a"); criteria1.setInventoryType("SY"); criteria1.setItemCode("test"); // criteria1.setItemId("SSS"); criteria1.setOwnerCode("44048600Y8"); criteria1.setWarehouseCode("20"); criteriaList.add(criteria); // criteriaList.add(criteria1); wareQueryStockParamDTO.setCriteriaList(criteriaList); String xmlStr = XmlUtils.toXml(wareQueryStockParamDTO, false); String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, "GREE1001"); //xmlStr = "2044048600Y8testSSSSYa2044048600Y8testSSSSYa"; Request.Builder builder = new Request.Builder(); RequestBody requestBody = RequestBody.create(MediaType.parse(org.springframework.http.MediaType.TEXT_XML_VALUE), xmlStr); Request request = builder.post(requestBody) .url(signUrl) .build(); String retry = OkHttpUtils.retry(request, 3); System.out.println(retry); } }