|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.baiyee.adcallback.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import cn.hutool.core.date.DateUnit;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.text.StrPool;
|
|
|
|
@ -9,8 +10,16 @@ import com.baiyee.adcallback.api.dto.DmpMonitorJpaDto;
|
|
|
|
|
import com.baiyee.adcallback.api.dto.DmpMonitorNumDto;
|
|
|
|
|
import com.baiyee.adcallback.common.enums.DeliveryPlatformEnum;
|
|
|
|
|
import com.baiyee.adcallback.common.enums.TableEnum;
|
|
|
|
|
import com.baiyee.adcallback.config.pojo.DeliveryStatisticDTO;
|
|
|
|
|
import com.baiyee.adcallback.repository.TbDeliveryStatisticEntityRepository;
|
|
|
|
|
import com.baiyee.adcallback.repository.entity.TbDeliveryStatisticEntity;
|
|
|
|
|
import com.baiyee.adcallback.service.DmpMonitorNumService;
|
|
|
|
|
import com.google.common.collect.ArrayListMultimap;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.google.common.collect.Multimap;
|
|
|
|
|
import com.google.common.collect.Sets;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.hibernate.query.internal.NativeQueryImpl;
|
|
|
|
|
import org.hibernate.transform.Transformers;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@ -21,12 +30,14 @@ import javax.persistence.PersistenceContext;
|
|
|
|
|
import javax.persistence.Query;
|
|
|
|
|
import java.math.BigInteger;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author wujingtao
|
|
|
|
|
* @date 2022/03/01
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
|
|
|
|
@ -34,6 +45,9 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
|
|
|
|
|
@PersistenceContext
|
|
|
|
|
EntityManager entityManager;
|
|
|
|
|
|
|
|
|
|
private final TbDeliveryStatisticEntityRepository tbDeliveryStatisticEntityRepository;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> queryNumByTags(DmpMonitorNumDto dmpMonitorNumDto) {
|
|
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
|
@ -177,6 +191,7 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
|
|
|
|
|
query.setParameter("tag", tags);
|
|
|
|
|
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
|
|
|
|
|
List list = query.getResultList();
|
|
|
|
|
log.error("the result list ");
|
|
|
|
|
return getDmpMonitorJpaDto(list, flag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -262,19 +277,63 @@ public class DmpMonitorNumServiceImpl implements DmpMonitorNumService {
|
|
|
|
|
|
|
|
|
|
private List<DmpMonitorJpaDto> getDmpMonitorJpaDto(List list, Integer flag) {
|
|
|
|
|
List<DmpMonitorJpaDto> tradeList = new ArrayList<>();
|
|
|
|
|
Multimap<String, DmpMonitorJpaDto> multimap = ArrayListMultimap.create();
|
|
|
|
|
for (Object obj : list) {
|
|
|
|
|
Map row = (Map) obj;
|
|
|
|
|
DmpMonitorJpaDto trade = new DmpMonitorJpaDto();
|
|
|
|
|
trade.setGmtCreate(row.get("date").toString());
|
|
|
|
|
trade.setTag(row.get("tag").toString());
|
|
|
|
|
if (1 == flag) {
|
|
|
|
|
BigInteger num = (BigInteger) row.get("num");
|
|
|
|
|
trade.setNum(num.longValue());
|
|
|
|
|
} else {
|
|
|
|
|
trade.setImei(row.get("imei").toString());
|
|
|
|
|
multimap.put(row.get("tag").toString(), trade);
|
|
|
|
|
}
|
|
|
|
|
trade.setGmtCreate(row.get("date").toString());
|
|
|
|
|
trade.setTag(row.get("tag").toString());
|
|
|
|
|
tradeList.add(trade);
|
|
|
|
|
}
|
|
|
|
|
if (flag == 2 && !multimap.isEmpty()) {
|
|
|
|
|
List<DmpMonitorJpaDto> newDataList = Lists.newArrayList();
|
|
|
|
|
List<DeliveryStatisticDTO> saveDataList = Lists.newArrayList();
|
|
|
|
|
// 转换map
|
|
|
|
|
Map<String, Collection<DmpMonitorJpaDto>> stringCollectionMap = multimap.asMap();
|
|
|
|
|
for (Map.Entry<String, Collection<DmpMonitorJpaDto>> stringCollectionEntry : stringCollectionMap.entrySet()) {
|
|
|
|
|
String tagStr = stringCollectionEntry.getKey();
|
|
|
|
|
// 去除重复数据
|
|
|
|
|
Set<DmpMonitorJpaDto> dmpMonitorJpaDtoSet =
|
|
|
|
|
Sets.newHashSet(stringCollectionEntry.getValue());
|
|
|
|
|
// 转换set
|
|
|
|
|
Set<DeliveryStatisticDTO> rawDataSet =
|
|
|
|
|
Convert.toSet(DeliveryStatisticDTO.class, dmpMonitorJpaDtoSet);
|
|
|
|
|
// 查询数据
|
|
|
|
|
List<DeliveryStatisticDTO> tagLists =
|
|
|
|
|
Convert.toList(DeliveryStatisticDTO.class,
|
|
|
|
|
tbDeliveryStatisticEntityRepository.findByTag(tagStr, 2));
|
|
|
|
|
|
|
|
|
|
Set<DeliveryStatisticDTO> newDataSet = Sets.newHashSet(tagLists);
|
|
|
|
|
// 差集去除数据
|
|
|
|
|
List<DeliveryStatisticDTO> differentData
|
|
|
|
|
= Lists.newArrayList(Sets.difference(rawDataSet, newDataSet));
|
|
|
|
|
// 保存将要插入数据
|
|
|
|
|
saveDataList.addAll(differentData);
|
|
|
|
|
List<DmpMonitorJpaDto> monitorJpaDtoList =
|
|
|
|
|
Convert.toList(DmpMonitorJpaDto.class, differentData);
|
|
|
|
|
// 返回数据
|
|
|
|
|
newDataList.addAll(monitorJpaDtoList);
|
|
|
|
|
}
|
|
|
|
|
log.error("================ the save datalist size as {} ================",saveDataList.size());
|
|
|
|
|
if (CollUtil.isNotEmpty(saveDataList)) {
|
|
|
|
|
// 异步插入数据
|
|
|
|
|
CompletableFuture.runAsync(() -> {
|
|
|
|
|
List<TbDeliveryStatisticEntity> deliveryStatisticEntityList =
|
|
|
|
|
Convert.toList(TbDeliveryStatisticEntity.class, saveDataList);
|
|
|
|
|
// 批量保存
|
|
|
|
|
tbDeliveryStatisticEntityRepository.saveAll(deliveryStatisticEntityList);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
log.error("================ the new datalist size as {} ================",newDataList.size());
|
|
|
|
|
return newDataList;
|
|
|
|
|
}
|
|
|
|
|
return tradeList;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|