|
|
@@ -4,10 +4,7 @@ import java.io.File; |
|
|
|
import java.io.IOException; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.*; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
|
|
|
|
import com.inet.ailink.receiver.common.utils.*; |
|
|
@@ -15,9 +12,8 @@ import org.springframework.stereotype.Service; |
|
|
|
import com.inet.ailink.receiver.common.enums.StatusCode; |
|
|
|
import com.inet.ailink.receiver.common.vo.Response; |
|
|
|
import com.inet.ailink.receiver.entity.SysLogs; |
|
|
|
import java.util.Collections; |
|
|
|
|
|
|
|
@Service |
|
|
|
@Service |
|
|
|
public class SysLogsServiceImpl |
|
|
|
{ |
|
|
|
|
|
|
@@ -28,15 +24,14 @@ public class SysLogsServiceImpl |
|
|
|
|
|
|
|
public Response<Object> save(String params, HttpServletRequest request) throws IOException { |
|
|
|
Response<Object> result = new Response<Object>(); |
|
|
|
SysLogs log = new SysLogs(); |
|
|
|
String deviceDataEncrypt = ""; |
|
|
|
String requestSign = ""; |
|
|
|
Map<String,Object> deviceDataMap = new HashMap<>(); |
|
|
|
try { |
|
|
|
//将请求参数params转换为map对象 |
|
|
|
Map<String,String> paramsMap = JsonUtils.fromJson(params, Map.class); |
|
|
|
String deviceDataEncrypt = paramsMap.get("params"); |
|
|
|
log.setEncryptParams(deviceDataEncrypt); |
|
|
|
log.setIp(IpUtils.getIpAddr(request)); |
|
|
|
log.setUri(request.getRequestURI()); |
|
|
|
log.setCreateTime(DateUtils.getStringTodayB()); |
|
|
|
log.setSortCloumns(DateUtils.getCurTime()); |
|
|
|
//获取请求参数params的值,即,本次推送的设备测量结果的加密数据 |
|
|
|
deviceDataEncrypt = paramsMap.get("params"); |
|
|
|
//获取请求头信息中的productKey,通过productKey,获取productSecret |
|
|
|
// String productKey = request.getHeader("productKey"); |
|
|
|
// String productSecret = ""; |
|
|
@@ -44,9 +39,9 @@ public class SysLogsServiceImpl |
|
|
|
//1.解密数据,使用AES/CBC/PKCS5Padding进行解密 |
|
|
|
String deviceDataDecrypt = AESUtils.aesCBCDecrypt(deviceDataEncrypt,productSecret,productKey); |
|
|
|
//2.校验签名 |
|
|
|
Map<String,Object> deviceDataMap = JsonUtils.fromJson(deviceDataDecrypt,Map.class); |
|
|
|
deviceDataMap = JsonUtils.fromJson(deviceDataDecrypt,Map.class); |
|
|
|
String sign = MD5Util.generateSignature(deviceDataMap,productSecret); |
|
|
|
String requestSign = request.getHeader("sign"); |
|
|
|
requestSign = request.getHeader("sign"); |
|
|
|
if(!sign.equals(requestSign)){ |
|
|
|
//处理签名不一致的情况 |
|
|
|
} |
|
|
@@ -57,25 +52,23 @@ public class SysLogsServiceImpl |
|
|
|
if(cid.equals("80")){//噪音计的CID=80 |
|
|
|
saveNoiseData(deviceDataMap); |
|
|
|
} |
|
|
|
//保存日志记录 |
|
|
|
log.setDecryptParams(deviceDataMap); |
|
|
|
log.setProductKey(productKey); |
|
|
|
log.setSign(requestSign); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.setErrorMsg(e.getMessage()); |
|
|
|
result.setStatus(StatusCode.FAIL.getCode()); |
|
|
|
result.setMsg(StatusCode.FAIL.getMsg()); |
|
|
|
//保存日志记录 |
|
|
|
saveLog(e,deviceDataEncrypt,request,deviceDataMap,requestSign,result); |
|
|
|
return result; |
|
|
|
} |
|
|
|
result.setStatus(StatusCode.SUCCESS.getCode()); |
|
|
|
result.setMsg(StatusCode.SUCCESS.getMsg()); |
|
|
|
//测试返回错误信息,重新推送 |
|
|
|
int a = (int) (Math.random()*10); |
|
|
|
if(a == 1 || a == 3 || a == 5){ |
|
|
|
result.setStatus(StatusCode.FAIL.getCode()); |
|
|
|
result.setMsg(StatusCode.FAIL.getMsg()); |
|
|
|
}else{ |
|
|
|
result.setStatus(StatusCode.SUCCESS.getCode()); |
|
|
|
result.setMsg(StatusCode.SUCCESS.getMsg()); |
|
|
|
} |
|
|
|
log.setResult(result); |
|
|
|
TxtUtils.string2Txt(JsonUtils.toJson(log)+"\n",DateUtils.format(new Date(),DateUtils.DATE_FORMAT_PATTERN_NO_SEPARATOR)+logPath); |
|
|
|
//保存日志记录 |
|
|
|
saveLog(null,deviceDataEncrypt,request,deviceDataMap,requestSign,result); |
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
@@ -88,6 +81,38 @@ public class SysLogsServiceImpl |
|
|
|
//持久化数据或者进行消息通知等业务处理 |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 保存请求的日志 |
|
|
|
* @param e |
|
|
|
* @param deviceDataEncrypt |
|
|
|
* @param request |
|
|
|
* @param deviceDataMap |
|
|
|
* @param requestSign |
|
|
|
* @param result |
|
|
|
*/ |
|
|
|
public void saveLog(Exception e,String deviceDataEncrypt,HttpServletRequest request,Map<String,Object> deviceDataMap,String requestSign,Response<Object> result){ |
|
|
|
//保存日志记录 |
|
|
|
SysLogs log = new SysLogs(); |
|
|
|
log.setEncryptParams(deviceDataEncrypt); |
|
|
|
log.setIp(IpUtils.getIpAddr(request)); |
|
|
|
log.setUri(request.getRequestURI()); |
|
|
|
log.setCreateTime(DateUtils.getStringTodayB()); |
|
|
|
log.setSortCloumns(DateUtils.getCurTime()); |
|
|
|
log.setDecryptParams(deviceDataMap); |
|
|
|
log.setProductKey(productKey); |
|
|
|
log.setSign(requestSign); |
|
|
|
log.setResult(result); |
|
|
|
if(e!= null){ |
|
|
|
log.setErrorMsg(e.getMessage()); |
|
|
|
} |
|
|
|
try { |
|
|
|
TxtUtils.string2Txt(JsonUtils.toJson(log)+"\n",DateUtils.format(new Date(),DateUtils.DATE_FORMAT_PATTERN_NO_SEPARATOR)+logPath); |
|
|
|
} catch (IOException ex) { |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取保存的日志记录数据 |
|
|
|
* @param date |