package com.java110.core.factory;
|
|
import com.java110.dto.log.TransactionOutLogDto;
|
import com.java110.intf.common.ITransactionOutLogV1ServiceSMO;
|
import com.java110.po.log.TransactionOutLogPo;
|
import com.java110.utils.cache.MappingCache;
|
import com.java110.utils.constant.MappingConstant;
|
import com.java110.utils.constant.ServiceConstant;
|
import com.java110.utils.factory.ApplicationContextFactory;
|
import com.java110.utils.util.StringUtil;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.ResponseEntity;
|
|
public class LogFactory {
|
|
|
/**
|
* 保存对外交互日志
|
*
|
* @param url 地址
|
* @param reqStr 请求参数
|
* @param responseEntity 返回参数
|
*/
|
public static void saveOutLog(String url, String reqStr, ResponseEntity responseEntity) {
|
saveOutLog(url, "无", 0, null, reqStr, responseEntity);
|
}
|
|
/**
|
* 保存对外交互日志
|
*
|
* @param url 地址
|
* @param method 方法
|
* @param reqStr 请求参数
|
* @param responseEntity 返回参数
|
*/
|
public static void saveOutLog(String url, String method, String reqStr, ResponseEntity responseEntity) {
|
saveOutLog(url, method, 0, null, reqStr, responseEntity);
|
|
}
|
|
/**
|
* 保存对外交互日志
|
*
|
* @param url 地址
|
* @param method 方法
|
* @param costTime 所需时间
|
* @param reqHeaders 请求头
|
* @param reqStr 请求参数
|
* @param responseEntity 返回参数
|
*/
|
public static void saveOutLog(String url, String method, long costTime, HttpHeaders reqHeaders, String reqStr, ResponseEntity responseEntity) {
|
try {
|
String logServiceCode = MappingCache.getValue(MappingConstant.DOMAIN_SYSTEM_SWITCH, MappingCache.CALL_OUT_LOG);
|
|
if (StringUtil.isEmpty(logServiceCode) || "OFF".equalsIgnoreCase(logServiceCode) || url.startsWith(ServiceConstant.BOOT_SERVICE_ORDER_URL)) {
|
return;
|
}
|
ITransactionOutLogV1ServiceSMO transactionOutLogV1InnerServiceSMO = null;
|
try {
|
transactionOutLogV1InnerServiceSMO
|
= ApplicationContextFactory.getBean(ITransactionOutLogV1ServiceSMO.class.getName(), ITransactionOutLogV1ServiceSMO.class);
|
} catch (Exception e) {
|
transactionOutLogV1InnerServiceSMO
|
= ApplicationContextFactory.getBean("transactionOutLogV1ServiceSMOImpl", ITransactionOutLogV1ServiceSMO.class);
|
}
|
if (transactionOutLogV1InnerServiceSMO == null) {
|
transactionOutLogV1InnerServiceSMO
|
= ApplicationContextFactory.getBean("transactionOutLogV1ServiceSMOImpl", ITransactionOutLogV1ServiceSMO.class);
|
}
|
|
TransactionOutLogPo transactionOutLogPo = new TransactionOutLogPo();
|
//todo 分析日志类型
|
String logType = analysisLogType(url);
|
|
transactionOutLogPo.setCostTime(costTime + "");
|
transactionOutLogPo.setLogId(GenerateCodeFactory.getGeneratorId("11"));
|
transactionOutLogPo.setRequestHeader(reqHeaders == null ? "{}" : reqHeaders.toSingleValueMap().toString());
|
transactionOutLogPo.setRequestMessage(reqStr);
|
transactionOutLogPo.setRequestMethod(method);
|
transactionOutLogPo.setRequestUrl(url);
|
transactionOutLogPo.setResponseHeader(responseEntity.getHeaders() == null ? "" : responseEntity.getHeaders().toSingleValueMap().toString());
|
transactionOutLogPo.setResponseMessage(responseEntity.getBody().toString());
|
transactionOutLogPo.setState(responseEntity.getStatusCode() == HttpStatus.OK ? TransactionOutLogDto.STATE_S : TransactionOutLogDto.STATE_F);
|
transactionOutLogPo.setLogType(logType);
|
|
transactionOutLogV1InnerServiceSMO.saveTransactionOutLog(transactionOutLogPo);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
/**
|
* 分析日志类型
|
*
|
* @param url
|
* @return
|
*/
|
private static String analysisLogType(String url) {
|
|
if (url.contains("9999") || url.contains("iot") || url.contains("extApi")) {
|
return TransactionOutLogDto.LOG_TYPE_IOT;
|
}
|
|
if (url.contains("api.mch.weixin.qq.com")) {
|
return TransactionOutLogDto.LOG_TYPE_WECHAT_PAY;
|
}
|
|
if(TransactionOutLogDto.LOG_TYPE_SMS.equals(url)){
|
return TransactionOutLogDto.LOG_TYPE_SMS;
|
}
|
|
if(TransactionOutLogDto.LOG_TYPE_OSS.equals(url)){
|
return TransactionOutLogDto.LOG_TYPE_OSS;
|
}
|
|
return TransactionOutLogDto.LOG_TYPE_DEFAULT;
|
}
|
}
|