package com.emato.biz.util; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; import com.emato.biz.config.OmsConfig; import com.emato.biz.domain.warehouse.Page; import com.emato.biz.domain.warehouse.PullInveQueryVO; import com.emato.biz.service.impl.OWbInveMngServiceImpl; import com.emato.common.exception.ServiceException; import com.emato.common.utils.oms.JacksonUtils; import com.emato.common.utils.oms.request.OmsSign; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; import java.util.Optional; import java.util.TreeMap; /** * OMS 数据工具类 * * @author frankeleyn * @email lvjian@qhdswl.com * @date 2023/4/19 14:25 */ public class OmsDataUtil { private static final Logger log = LoggerFactory.getLogger(OWbInveMngServiceImpl.class); /** * 拉取 OMS 库存数据 * * @param queryVO 请求 OMS 数据 * @param url 请求 OMS 地址 * @param clazz 返回的分页数据类 * * @return */ public static Optional> fetchOmsPageData(PullInveQueryVO queryVO, String url, Class clazz) { // 构建请求报文 // 初始化请求 oms 参数 Map Map reqOmsPram = new TreeMap<>(); // 请求 oms 数据 reqOmsPram.put("data", JacksonUtils.toJsonStr(queryVO)); // 请求 oms 商户号 reqOmsPram.put("merchId", OmsConfig.getMerchSn()); log.debug("===== 请求 oms 商户号 ====> {}", OmsConfig.getMerchSn()); // 请求 oms 时间戳 String timestamp = System.currentTimeMillis() / 1000 + ""; reqOmsPram.put("timestamp", timestamp); log.debug("===== 请求 oms 时间戳 ====> {}", timestamp); // 请求 oms 签名 String sign = OmsSign.sign(reqOmsPram, OmsConfig.getMd5Salt()); reqOmsPram.put("sign", sign); // oms 请求地址 log.debug("===== 请求 oms 地址 ====> {}", url); // 请求 oms 报文 String reqBody = JacksonUtils.toJsonStr(reqOmsPram); log.debug("===== 请求 oms 报文 ====> {}", reqBody); // oms 返回数据 String body = null; try { body = HttpRequest.post(url) .body(JacksonUtils.toJsonStr(reqOmsPram)) .execute() .body(); } catch (Exception e) { log.error("请求 OMS 异常 => ", e); throw new ServiceException("请求 OMS 异常!"); } log.debug("OMS 响应信息 => {}", body); // 解析返回的数据 JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.getString("code"); if ("200".equals(code)){ Page page = JsonUtil.parsePage(jsonObject, clazz); if (!page.getList().isEmpty()) // 如果 page 有值就返回 return Optional.of(page); }else { log.error("OMS 返回异常信息 => {}", jsonObject); throw new ServiceException("请求 OMS 异常!"); } return Optional.empty(); } }