TrackingServiceImpl.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.fdkankan.tracking.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.alibaba.fastjson.JSON;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.fdkankan.elasticsearch.service.DocumentService;
  8. import com.fdkankan.redis.constant.RedisKey;
  9. import com.fdkankan.redis.util.RedisUtil;
  10. import com.fdkankan.tracking.bean.TrackingBody;
  11. import com.fdkankan.tracking.vo.TrackingParamVo;
  12. import com.fdkankan.tracking.service.TrackingService;
  13. import com.fdkankan.web.response.ResultData;
  14. import com.fdkankan.web.util.WebUtil;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.elasticsearch.rest.RestStatus;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.util.ObjectUtils;
  20. import javax.servlet.http.HttpServletRequest;
  21. import java.net.URI;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. @Slf4j
  25. @Service
  26. public class TrackingServiceImpl implements TrackingService {
  27. @Autowired
  28. private DocumentService documentService;
  29. @Autowired
  30. private RedisUtil redisUtil;
  31. @Override
  32. public ResultData saveLog(TrackingParamVo param, HttpServletRequest request) throws Exception {
  33. String index = param.getProduct();
  34. if(StrUtil.isEmpty(index)){
  35. return ResultData.ok();
  36. }
  37. TrackingBody trackingBody = param.getPayload();
  38. if(ObjectUtils.isEmpty(trackingBody)){
  39. return ResultData.ok();
  40. }
  41. String appId = trackingBody.getAppId();
  42. appId = index.concat(appId.substring(appId.indexOf("-")));
  43. trackingBody.setAppId(appId);
  44. String redisIndex = redisUtil.hget(RedisKey.TRACK_APPID, appId);
  45. if(StrUtil.isEmpty(redisIndex) || !redisIndex.equals(index)){
  46. return ResultData.ok();
  47. }
  48. trackingBody.setUserAgent(request.getHeader("user-agent"));
  49. trackingBody.setUserIP(WebUtil.getIpAddress(request));
  50. trackingBody.setTime(Calendar.getInstance().getTime());
  51. trackingBody.setSource("FRONT");
  52. JSONObject requestData = trackingBody.getRequestData();
  53. if(Objects.nonNull(requestData)){
  54. Object data = trackingBody.getRequestData().get("data");
  55. //如果是数组,需要拆解成多条数据入库
  56. if(data instanceof Iterable){
  57. List<LinkedHashMap> dataList = (List<LinkedHashMap>)data;
  58. List<JSONObject> list = dataList.stream().map(item -> {
  59. TrackingBody subBody = BeanUtil.copyProperties(trackingBody, TrackingBody.class);
  60. subBody.getRequestData().put("data", item);
  61. return JSON.parseObject(JSON.toJSONString(subBody));
  62. }).collect(Collectors.toList());
  63. if(CollUtil.isEmpty(list)){
  64. return ResultData.ok("data为空");
  65. }
  66. RestStatus restStatus = documentService.batchImportGoodsData(list, index);
  67. return ResultData.ok(restStatus.getStatus());
  68. }
  69. }
  70. RestStatus restStatus = documentService.addDocument(index, null, JSON.toJSONString(trackingBody));
  71. return ResultData.ok(restStatus.getStatus());
  72. }
  73. public static void main(String[] args) {
  74. String appid = "7b5958d5-1ae6-4ad5-8a87-5fc8a4b92999";
  75. System.out.println(appid.substring(appid.indexOf("-")));
  76. }
  77. }