update API模块添加ERP接口工具类、ERP接口映射工具类、调用ERP接口逻辑

master
yinq 3 months ago
parent 1181f18e08
commit 71a723701a

@ -108,7 +108,6 @@ public class SysErpConfigController extends BaseController {
/**
* ERP
*/
@GetMapping("/getSysErpConfigList")
public R<List<SysErpConfigVo>> getSysErpConfigList(SysErpConfigBo bo) {
List<SysErpConfigVo> list = sysErpConfigService.queryList(bo);

@ -108,7 +108,6 @@ public class SysErpMappingController extends BaseController {
/**
* ERP
*/
@GetMapping("/getSysErpMappingList")
public R<List<SysErpMappingVo>> getSysErpMappingList(SysErpMappingBo bo) {
List<SysErpMappingVo> list = sysErpMappingService.queryList(bo);

@ -108,7 +108,6 @@ public class SysErpTokenController extends BaseController {
/**
* ERPToken
*/
@GetMapping("/getSysErpTokenList")
public R<List<SysErpTokenVo>> getSysErpTokenList(SysErpTokenBo bo) {
List<SysErpTokenVo> list = sysErpTokenService.queryList(bo);

@ -57,10 +57,7 @@ public class SysErpConfig extends TenantEntity {
*/
private String tokenUrl;
/**
* token()
*/
private Long tokenExpireTime;
/**
* 1 0

@ -43,12 +43,12 @@ public class SysErpMapping extends TenantEntity {
private String erpApiUrl;
/**
* (GET POST)
* ERP(GET POST)
*/
private String erpMethod;
/**
*
* ERP
*/
private String erpParams;
@ -63,7 +63,7 @@ public class SysErpMapping extends TenantEntity {
private String localMethod;
/**
*
* (JSON)
*/
private String fieldMapping;

@ -58,11 +58,6 @@ public class SysErpConfigBo extends BaseEntity {
*/
private String tokenUrl;
/**
* token()
*/
private Long tokenExpireTime;
/**
* 1 0
*/

@ -71,12 +71,6 @@ public class SysErpConfigVo implements Serializable {
@ExcelProperty(value = "token地址")
private String tokenUrl;
/**
* token()
*/
@ExcelProperty(value = "token过期时间(秒)")
private Long tokenExpireTime;
/**
* 1 0
*/

@ -8,6 +8,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* ERPService
@ -66,4 +67,13 @@ public interface ISysErpMappingService {
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* ERP
*
* @param mappingId ID
* @param params
* @return
*/
Map<String, Object> callErpApiById(Long mappingId, Map<String, Object> params);
}

@ -66,4 +66,21 @@ public interface ISysErpTokenService {
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* Token
*
* @param configId ID
* @return Token
*/
SysErpTokenVo getValidToken(Long configId);
/**
* IDToken
*
* @param configId ID
* @return Token
*/
SysErpTokenVo getTokenByConfigId(Long configId);
}

@ -1,26 +1,21 @@
package org.dromara.api.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.api.domain.sap.SAPPortDto;
import org.dromara.api.domain.sap.vo.SAPResultVo;
import org.dromara.api.service.IBaseMaterialInfoApiService;
import org.dromara.api.service.ISysErpMappingService;
import lombok.RequiredArgsConstructor;
import org.dromara.api.service.ICommonApiService;
import org.dromara.api.utils.SAPApiUtils;
import org.dromara.api.utils.SAPConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.mes.api.RemoteMaterialInfoService;
import org.dromara.mes.api.model.bo.BaseMaterialInfoBo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* APIService
@ -35,20 +30,87 @@ public class BaseMaterialInfoApiServiceImpl implements IBaseMaterialInfoApiServi
@Autowired
private final ICommonApiService commonApiService;
@Autowired
private final ISysErpMappingService mappingService;
@DubboReference
private final RemoteMaterialInfoService remoteMaterialInfoService;
@Override
public String insertApi(String requestBody) {
SAPPortDto sapPortDto = new SAPPortDto();
//请求API接口获取数据
String json = commonApiService.getSAPData(sapPortDto);
//解析数据,存储实体类
List<BaseMaterialInfoBo> list = commonApiService.convertSAPToMaterialEntity(json);
remoteMaterialInfoService.remoteInsertBaseMaterialInfo(list);
return "success";
try {
// 1. 解析请求参数
Map<String, Object> params = JsonUtils.parseObject(requestBody, Map.class);
if (params == null) {
throw new ServiceException("请求参数不能为空");
}
// 2. 获取映射ID
Object mappingIdObj = params.get("mappingId");
if (mappingIdObj == null) {
throw new ServiceException("mappingId不能为空");
}
Long mappingId = Long.valueOf(String.valueOf(mappingIdObj));
// 3. 调用ERP接口
Map<String, Object> result = mappingService.callErpApiById(mappingId, params);
if (result == null) {
throw new ServiceException("ERP接口返回结果为空");
}
// 4. 转换数据为物料实体
List<BaseMaterialInfoBo> materialList = convertToMaterialList(result);
if (materialList == null || materialList.isEmpty()) {
throw new ServiceException("未获取到有效的物料数据");
}
// 5. 调用远程服务保存数据
remoteMaterialInfoService.remoteInsertBaseMaterialInfo(materialList);
return "success";
} catch (Exception e) {
throw new ServiceException("物料数据同步失败:" + e.getMessage());
}
}
/**
* ERP
*
* @param result ERP
* @return
*/
private List<BaseMaterialInfoBo> convertToMaterialList(Map<String, Object> result) {
List<BaseMaterialInfoBo> materialList = new ArrayList<>();
try {
// 1. 获取数据列表
Object data = result.get("data");
if (data == null) {
return materialList;
}
// 2. 转换为List
List<Map<String, Object>> dataList;
if (data instanceof List) {
dataList = (List<Map<String, Object>>) data;
} else {
dataList = new ArrayList<>();
dataList.add((Map<String, Object>) data);
}
// 3. 遍历数据转换为物料实体
for (Map<String, Object> item : dataList) {
BaseMaterialInfoBo material = new BaseMaterialInfoBo();
// 设置物料属性
material.setMaterialCode(String.valueOf(item.get("materialCode")));
material.setMaterialName(String.valueOf(item.get("materialName")));
materialList.add(material);
}
} catch (Exception e) {
throw new ServiceException("数据转换失败:" + e.getMessage());
}
return materialList;
}
}

@ -80,7 +80,6 @@ public class SysErpConfigServiceImpl implements ISysErpConfigService {
.eq(StringUtils.isNotBlank(bo.getAppKey()), SysErpConfig::getAppKey, bo.getAppKey())
.eq(StringUtils.isNotBlank(bo.getAppSecret()), SysErpConfig::getAppSecret, bo.getAppSecret())
.eq(StringUtils.isNotBlank(bo.getTokenUrl()), SysErpConfig::getTokenUrl, bo.getTokenUrl())
.eq(bo.getTokenExpireTime() != null, SysErpConfig::getTokenExpireTime, bo.getTokenExpireTime())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), SysErpConfig::getActiveFlag, bo.getActiveFlag())
.orderByDesc(SysErpConfig::getCreateTime);
return lqw;

@ -1,6 +1,8 @@
package org.dromara.api.service.impl;
import org.dromara.api.domain.SysErpConfig;
import org.dromara.api.domain.vo.SysErpConfigVo;
import org.dromara.api.utils.ErpMappingUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -11,15 +13,21 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.dromara.api.domain.bo.SysErpMappingBo;
import org.dromara.api.domain.vo.SysErpMappingVo;
import org.dromara.api.domain.SysErpMapping;
import org.dromara.api.mapper.SysErpMappingMapper;
import org.dromara.api.service.ISysErpMappingService;
import org.dromara.api.service.ISysErpConfigService;
import org.dromara.common.core.exception.ServiceException;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Date;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* ERPService
@ -32,6 +40,7 @@ import java.util.Collection;
public class SysErpMappingServiceImpl implements ISysErpMappingService {
private final SysErpMappingMapper baseMapper;
private final ISysErpConfigService configService;
/**
* ERP
@ -40,7 +49,7 @@ public class SysErpMappingServiceImpl implements ISysErpMappingService {
* @return ERP
*/
@Override
public SysErpMappingVo queryById(Long mappingId){
public SysErpMappingVo queryById(Long mappingId) {
return baseMapper.selectVoById(mappingId);
}
@ -124,7 +133,7 @@ public class SysErpMappingServiceImpl implements ISysErpMappingService {
/**
*
*/
private void validEntityBeforeSave(SysErpMapping entity){
private void validEntityBeforeSave(SysErpMapping entity) {
//TODO 做一些数据校验,如唯一约束
}
@ -137,9 +146,38 @@ public class SysErpMappingServiceImpl implements ISysErpMappingService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* IDERP
*
* @param mappingId ID
* @param params
* @return
*/
@Override
public Map<String, Object> callErpApiById(Long mappingId, Map<String, Object> params) {
// 1. 获取接口映射配置
SysErpMappingVo mapping = baseMapper.selectVoById(mappingId);
if (mapping == null) {
throw new ServiceException("接口映射配置不存在");
}
// 2. 获取ERP配置信息
SysErpConfigVo config = configService.queryById(mapping.getConfigId());
if (config == null) {
throw new ServiceException("ERP配置不存在");
}
// 3. 调用ERP接口
SysErpMapping erpMapping = MapstructUtils.convert(mapping, SysErpMapping.class);
return ErpMappingUtils.callErpApi(erpMapping, config, params);
}
}

@ -1,5 +1,7 @@
package org.dromara.api.service.impl;
import org.dromara.api.domain.vo.SysErpConfigVo;
import org.dromara.api.utils.ErpApiUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -10,15 +12,20 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.dromara.api.domain.bo.SysErpTokenBo;
import org.dromara.api.domain.vo.SysErpTokenVo;
import org.dromara.api.domain.SysErpToken;
import org.dromara.api.mapper.SysErpTokenMapper;
import org.dromara.api.service.ISysErpTokenService;
import org.dromara.api.service.ISysErpConfigService;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Date;
/**
* ERPTokenService
@ -32,6 +39,8 @@ public class SysErpTokenServiceImpl implements ISysErpTokenService {
private final SysErpTokenMapper baseMapper;
private final ISysErpConfigService configService;
/**
* ERPToken
*
@ -135,4 +144,105 @@ public class SysErpTokenServiceImpl implements ISysErpTokenService {
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* Token
*
* @param configId ID
* @return Token
*/
@Override
public SysErpTokenVo getValidToken(Long configId) {
// 1. 获取现有token
SysErpTokenVo token = getTokenByConfigId(configId);
// 2. 检查token是否有效
if (!isTokenValid(configId)) {
// 3. 刷新token
refreshToken(configId);
// 4. 重新获取token
token = getTokenByConfigId(configId);
}
return token;
}
/**
* Token
*
* @param configId ID
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Boolean refreshToken(Long configId) {
// 1. 获取ERP配置信息
SysErpConfigVo config = configService.queryById(configId);
if (config == null) {
throw new ServiceException("ERP配置不存在");
}
// 2. 获取现有token记录
SysErpTokenVo existingToken = getTokenByConfigId(configId);
if (existingToken == null) {
throw new ServiceException("Token记录不存在");
}
// 3. 调用ERP系统的token刷新接口
String newToken = refreshTokenFromErp(config);
// 4. 直接使用Mapper更新数据库
SysErpToken update = new SysErpToken();
update.setTokenId(existingToken.getTokenId());
update.setAccessToken(newToken);
update.setExpireTime(DateUtils.addSeconds(new Date(), existingToken.getExpiresIn().intValue()));
return baseMapper.updateById(update) > 0;
}
/**
* Token
*
* @param configId ID
* @return
*/
public Boolean isTokenValid(Long configId) {
SysErpTokenVo token = getTokenByConfigId(configId);
if (token == null) {
return false;
}
// 检查token是否过期
if (token.getExpireTime() == null || token.getExpireTime().before(new Date())) {
return false;
}
// 预留5分钟缓冲时间
return DateUtils.addMinutes(token.getExpireTime(), -5).after(new Date());
}
/**
* IDToken
*
* @param configId ID
* @return Token
*/
@Override
public SysErpTokenVo getTokenByConfigId(Long configId) {
SysErpTokenBo bo = new SysErpTokenBo();
bo.setConfigId(configId);
List<SysErpTokenVo> list = queryList(bo);
return list.isEmpty() ? null : list.get(0);
}
/**
* ERPToken
*
* @param config ERP
* @return Token
*/
private String refreshTokenFromErp(SysErpConfigVo config) {
// 用友U8的API中刷新token和获取token使用同一个接口
return ErpApiUtils.getErpToken(config);
}
}

@ -0,0 +1,72 @@
package org.dromara.api.snailjob;
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.client.model.ExecuteResult;
import com.aizuda.snailjob.common.core.util.JsonUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
import org.dromara.api.service.ISysErpMappingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* ERP
*
* @author Yinq
* @date 2025-03-26
*/
@Component
@JobExecutor(name = "erpApiJobExecutor")
public class ErpApiJobExecutor {
@Autowired
private ISysErpMappingService mappingService;
/**
*
*
* @param jobArgs
* @return
*/
public ExecuteResult jobExecute(JobArgs jobArgs) {
try {
// 1. 获取任务参数
Object jobParams = jobArgs.getJobParams();
if (jobParams == null) {
throw new IllegalArgumentException("任务参数不能为空");
}
// 2. 解析参数
Map<String, Object> params;
if (jobParams instanceof Map) {
params = (Map<String, Object>) jobParams;
} else if (jobParams instanceof String) {
params = JsonUtil.parseObject((String) jobParams, Map.class);
} else {
params = JsonUtil.parseObject(JsonUtil.toJsonString(jobParams), Map.class);
}
// 3. 获取映射ID
Object mappingIdObj = params.get("mappingId");
if (mappingIdObj == null) {
throw new IllegalArgumentException("mappingId不能为空");
}
Long mappingId = Long.valueOf(String.valueOf(mappingIdObj));
// 4. 调用ERP接口
SnailJobLog.LOCAL.info("开始同步ERP接口数据mappingId{},参数:{}", mappingId, JsonUtil.toJsonString(params));
Map<String, Object> result = mappingService.callErpApiById(mappingId, params);
// 5. 记录执行结果
SnailJobLog.LOCAL.info("ERP接口数据同步完成mappingId{},结果:{}", mappingId, JsonUtil.toJsonString(result));
return ExecuteResult.success("ERP接口数据同步成功");
} catch (Exception e) {
// 6. 记录错误信息
SnailJobLog.LOCAL.error("ERP接口数据同步失败{}", e.getMessage());
return ExecuteResult.failure("ERP接口数据同步失败" + e.getMessage());
}
}
}

@ -0,0 +1,222 @@
package org.dromara.api.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.api.domain.vo.SysErpConfigVo;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.util.StringUtils;
import java.util.Map;
/**
* ERP
*
* @Author YinQ
* @create 2024-03-27 10:52
*/
@Slf4j
public class ErpApiUtils {
/**
* ERP
*/
public static final String ERP_TYPE_K3 = "0"; // K3
public static final String ERP_TYPE_U8 = "1"; // U8
public static final String ERP_TYPE_SAP = "2"; // SAP
/**
* HTTP
*
* @param url
* @param method
* @param headers
* @param params
* @return
*/
public static String sendHttpRequest(String url, String method, Map<String, String> headers, Map<String, Object> params) {
try {
HttpRequest request = null;
switch (method.toUpperCase()) {
case "GET":
request = HttpRequest.get(url);
break;
case "POST":
request = HttpRequest.post(url);
break;
case "PUT":
request = HttpRequest.put(url);
break;
case "DELETE":
request = HttpRequest.delete(url);
break;
default:
throw new ServiceException("不支持的请求方法:" + method);
}
// 设置请求头
if (headers != null) {
headers.forEach(request::header);
}
// 设置请求参数
if (params != null) {
if ("GET".equalsIgnoreCase(method)) {
params.forEach(request::form);
} else {
request.body(JSONUtil.toJsonStr(params));
}
}
// 发送请求
HttpResponse response = request.execute();
// 检查响应状态
if (!response.isOk()) {
throw new ServiceException("HTTP请求失败状态码" + response.getStatus());
}
return response.body();
} catch (Exception e) {
log.error("HTTP请求异常", e);
throw new ServiceException("HTTP请求异常" + e.getMessage());
}
}
/**
* ERP Token
*
* @param config ERP
* @return Token
*/
public static String getErpToken(SysErpConfigVo config) {
if (config == null) {
throw new ServiceException("ERP配置信息不能为空");
}
String erpType = config.getErpType();
if (StringUtils.isEmpty(erpType)) {
throw new ServiceException("ERP类型不能为空");
}
switch (erpType) {
case ERP_TYPE_K3:
return getK3Token(config);
case ERP_TYPE_U8:
return getU8Token(config);
case ERP_TYPE_SAP:
return getSapToken(config);
default:
throw new ServiceException("不支持的ERP类型" + erpType);
}
}
/**
* K3 Token
*
* @param config ERP
* @return Token
*/
private static String getK3Token(SysErpConfigVo config) {
return null;
}
/**
* U8 Token
*
* @param config ERP
* @return Token
*/
private static String getU8Token(SysErpConfigVo config) {
// 构建请求参数
Map<String, Object> params = Map.of(
"app_key", config.getAppKey(),
"app_secret", config.getAppSecret()
);
// 发送请求获取token
String response = sendHttpRequest(
config.getTokenUrl(),
"GET",
null,
params
);
// 解析响应结果
JSONObject result = JSONUtil.parseObj(response);
// 检查错误码
String errcode = result.getStr("errcode");
if (!"0".equals(errcode)) {
String errmsg = result.getStr("errmsg");
throw new ServiceException("获取U8 Token失败" + errmsg);
}
// 获取token信息
JSONObject tokenInfo = result.getJSONObject("token");
if (tokenInfo == null) {
throw new ServiceException("获取U8 Token失败返回数据格式错误");
}
return tokenInfo.getStr("id");
}
/**
* SAP Token
*
* @param config ERP
* @return Token
*/
private static String getSapToken(SysErpConfigVo config) {
return null;
}
/**
* ERP
*
* @param config ERP
* @param token 访
* @param apiUrl
* @param method
* @param params
* @return
*/
public static String callErpApi(SysErpConfigVo config, String token, String apiUrl, String method, Map<String, Object> params) {
if (config == null) {
throw new ServiceException("ERP配置信息不能为空");
}
if (StringUtils.isEmpty(token)) {
throw new ServiceException("访问令牌不能为空");
}
// 构建完整URL
String fullUrl = StrUtil.format("{}{}", config.getServerUrl(), apiUrl);
// 构建请求头
Map<String, String> headers = Map.of(
"Authorization", "Bearer " + token,
"Content-Type", "application/json"
);
// 发送请求
String response = sendHttpRequest(fullUrl, method, headers, params);
// 解析响应结果
JSONObject result = JSONUtil.parseObj(response);
// 检查错误码
String errcode = result.getStr("errcode");
if (!"0".equals(errcode)) {
String errmsg = result.getStr("errmsg");
throw new ServiceException("调用ERP接口失败" + errmsg);
}
return response;
}
}

@ -0,0 +1,134 @@
package org.dromara.api.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.api.domain.SysErpMapping;
import org.dromara.api.domain.vo.SysErpConfigVo;
import org.dromara.common.core.exception.ServiceException;
import java.util.Map;
/**
* ERP
*
* @Author YinQ
* @create 2024-03-27 10:52
*/
@Slf4j
public class ErpMappingUtils {
/**
* ERP
*
* @param mapping
* @param localParams
* @return ERP
*/
public static Map<String, Object> buildErpParams(SysErpMapping mapping, Map<String, Object> localParams) {
try {
// 1. 获取ERP参数模板
String erpParams = mapping.getErpParams();
if (StrUtil.isEmpty(erpParams)) {
return localParams;
}
// 2. 解析参数模板
JSONObject template = JSONUtil.parseObj(erpParams);
// 3. 根据字段映射转换参数
JSONObject result = new JSONObject();
template.forEach((key, value) -> {
if (value instanceof String) {
String localKey = (String) value;
if (localParams.containsKey(localKey)) {
result.put(key, localParams.get(localKey));
}
} else {
result.put(key, value);
}
});
return result.toBean(Map.class);
} catch (Exception e) {
log.error("构建ERP请求参数失败", e);
throw new ServiceException("构建ERP请求参数失败" + e.getMessage());
}
}
/**
* ERP
*
* @param mapping
* @param erpResponse ERP
* @return
*/
public static Map<String, Object> convertErpResponse(SysErpMapping mapping, String erpResponse) {
try {
// 1. 解析ERP响应数据
JSONObject erpData = JSONUtil.parseObj(erpResponse);
// 2. 获取字段映射关系
String fieldMapping = mapping.getFieldMapping();
if (StrUtil.isEmpty(fieldMapping)) {
return erpData.toBean(Map.class);
}
// 3. 解析字段映射
JSONObject mappingConfig = JSONUtil.parseObj(fieldMapping);
// 4. 转换数据
JSONObject result = new JSONObject();
mappingConfig.forEach((localKey, erpKey) -> {
if (erpKey instanceof String) {
String key = (String) erpKey;
if (erpData.containsKey(key)) {
result.put(localKey, erpData.get(key));
}
}
});
return result.toBean(Map.class);
} catch (Exception e) {
log.error("转换ERP响应数据失败", e);
throw new ServiceException("转换ERP响应数据失败" + e.getMessage());
}
}
/**
* ERP
*
* @param mapping
* @param config ERP
* @param localParams
* @return
*/
public static Map<String, Object> callErpApi(SysErpMapping mapping, SysErpConfigVo config, Map<String, Object> localParams) {
try {
// 1. 构建ERP请求参数
Map<String, Object> erpParams = buildErpParams(mapping, localParams);
// 2. 获取token如果需要
String token = null;
if ("1".equals(mapping.getNeedToken())) {
token = ErpApiUtils.getErpToken(config);
}
// 3. 调用ERP接口
String response = ErpApiUtils.callErpApi(
config,
token,
mapping.getErpApiUrl(),
mapping.getErpMethod(),
erpParams
);
// 4. 转换响应数据
return convertErpResponse(mapping, response);
} catch (Exception e) {
log.error("调用ERP接口失败", e);
throw new ServiceException("调用ERP接口失败" + e.getMessage());
}
}
}
Loading…
Cancel
Save