package com.glxp.api.http; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.entity.thrsys.ThrSystemBusApiEntity; import com.glxp.api.entity.thrsys.ThrSystemEntity; import com.glxp.api.http.req.UdiwmsBusTypeRequest; import com.glxp.api.http.req.UdiwmsUnitRequest; import com.glxp.api.req.thrsys.*; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.thrsys.ThrCorpsResponse; import com.glxp.api.res.thrsys.ThrProductsResponse; import com.glxp.api.res.thrsys.UdiwmsWarehouseDetail; import com.glxp.api.service.thrsys.ThrSystemService; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * 第三方服务HttpClient */ @Slf4j @Service public class ErpBasicClient { @Resource private OkHttpClient okHttpClient; @Resource HttpOkClient httpOkClient; @Resource private ThrSystemService basicThirdSysService; //获取往来单位 public BaseResponse> getErpCrop(ThrUnitMaintainFilterRequest thrUnitMaintainFilterRequest) { UdiwmsUnitRequest udiwmsUnitRequest = new UdiwmsUnitRequest(); BeanUtils.copyProperties(thrUnitMaintainFilterRequest, udiwmsUnitRequest); udiwmsUnitRequest.setUnitId(thrUnitMaintainFilterRequest.getErpId()); ThrSystemEntity thrSystemEntity = basicThirdSysService.selectByThirdId(thrUnitMaintainFilterRequest.getThirdSysFk()); try { String url = thrSystemEntity.getThridUrl() + "/udiwms/erp/getUnits"; String response = httpOkClient.uCloudPost(url, udiwmsUnitRequest, thrSystemEntity); if (StrUtil.isBlank(response)) { return ResultVOUtils.error(500, "连接第三方系统接口服务出错!"); } BaseResponse> udiDlDeviceResponse = JSONObject.parseObject(response, new TypeReference>>() { }); return udiDlDeviceResponse; } catch (Exception e) { log.error("获取往来单位异常", e); return ResultVOUtils.error(500, "连接第三方系统接口服务出错!"); } } //获取产品信息 public BaseResponse> getErpProducts(FilterThrProductsRequest filterThrProductsRequest) { ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectByThirdId(filterThrProductsRequest.getThirdSysFk()); String url = basicThirdSysEntity.getThridUrl() + "/udiwms/erp/getProducts"; try { String response = httpOkClient.uCloudPost(url, filterThrProductsRequest, basicThirdSysEntity); if (StrUtil.isBlank(response)) { return ResultVOUtils.error(500, "连接第三方系统接口服务出错!"); } BaseResponse> udiDlDeviceResponse = JSONObject.parseObject(response, new TypeReference>>() { }); return udiDlDeviceResponse; } catch (Exception e) { log.error("获取产品信息异常", e); return ResultVOUtils.error(500, "连接第三方系统接口服务出错!"); } } //查询仓库货位号 public BaseResponse> getWarehouse(UdiwmsWarehouseRequest udiwmsWarehouseRequest) { ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectByThirdId(udiwmsWarehouseRequest.getThirdSys()); String url = basicThirdSysEntity.getThridUrl() + "/udiwms/erp/getWarehouse"; try { String response = httpOkClient.uCloudPost(url, udiwmsWarehouseRequest); BaseResponse> listBaseResponse = JSONObject.parseObject(response, new TypeReference>>() { }); return listBaseResponse; } catch (Exception e) { log.error("获取第三方系统的仓库货位码异常", e); return ResultVOUtils.error(500, "连接第三方系统接口服务出错"); } } //测试连通性 public BaseResponse testConnection(ThrSystemEntity thrSystemEntity) { String response = httpOkClient.uCloudPost(thrSystemEntity.getThridUrl() + "/udispsync/sync/testConnection", "{}"); log.info(response); if (StrUtil.isBlank(response)) { return ResultVOUtils.error(500, "连接失败"); } try { return JSONObject.parseObject(response, BaseResponse.class); } catch (Exception e) { log.info("测试第三方服务连通性失败"); return ResultVOUtils.error(500, "连接失败"); } } //测试连通性 public BaseResponse testThridConnect(ThrSystemEntity thrSystemEntity) { String response = httpOkClient.uCloudPost(thrSystemEntity.getThridUrl() + "/udiwms/erp/testThirdSys", "{}"); log.info(response); try { return JSONObject.parseObject(response, BaseResponse.class); } catch (Exception e) { log.info("测试第三方服务接口连通性失败"); return ResultVOUtils.error(500, "连接失败"); } } //下载第三方系统单据类型 public BaseResponse> getBusTypes(FilterBasicThirdSysDetailRequest filterBasicThirdSysDetailRequest) { ThrSystemEntity thrSystemEntity = basicThirdSysService.selectByThirdId(filterBasicThirdSysDetailRequest.getThirdSysFk()); String url = thrSystemEntity.getThridUrl() + "/udiwms/erp/getOrderType"; UdiwmsBusTypeRequest udiwmsBusTypeRequest = new UdiwmsBusTypeRequest(); udiwmsBusTypeRequest.setThirdSys(filterBasicThirdSysDetailRequest.getThirdSysFk()); udiwmsBusTypeRequest.setPage(filterBasicThirdSysDetailRequest.getPage()); udiwmsBusTypeRequest.setLimit(filterBasicThirdSysDetailRequest.getLimit()); try { String response = httpOkClient.uCloudPost(url, udiwmsBusTypeRequest, thrSystemEntity); log.info(response); BaseResponse> udiDlDeviceResponse = JSONObject.parseObject(response, new TypeReference>>() { }); if (udiDlDeviceResponse != null) { return udiDlDeviceResponse; } else { return ResultVOUtils.error(500, "查询第三方数据失败!"); } } catch (Exception e) { log.error("获取单据类型异常", e); return ResultVOUtils.error(500, "连接第三方系统接口服务出错!"); } } /** * 上传文件到第三方接口服务,解析第三方系统产品信息并获取回调结果 * * @param thirdSys * @return */ public BaseResponse uploadPi(byte[] bytes, String fileName, String thirdSys) { ThrSystemEntity thrSystemEntity = basicThirdSysService.selectByThirdId(thirdSys); String url = thrSystemEntity.getThridUrl() + "/udiwms/erp/pi/upload"; try { MultipartBody.Builder builder = new MultipartBody.Builder() .setType(MultipartBody.FORM); builder.addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("application/vnd.ms-excel"), bytes)); builder.addFormDataPart("thirdSys", thirdSys); MultipartBody multipartBody = builder.build(); Request request = new Request.Builder().url(url).post(multipartBody).build(); Response response = okHttpClient.newCall(request).execute(); response.close(); if (response.code() == 200) { return ResultVOUtils.success("解析成功"); } else { log.info("解析接口响应信息失败,返回信息:{}", response); return ResultVOUtils.error(500, "解析第三方产品信息失败"); } } catch (Exception e) { log.error("解析第三方系统产品信息失败", e); return ResultVOUtils.error(500, "解析第三方系统产品信息失败"); } } }